未経験からエンジニアになるために知っておきたいこと

未経験からエンジニアになるために知っておきたいこと KIDDING KID
【未経験からエンジニアになるために知っておきたいこと】の記事のアイキャッチ画像

こんにちは、シュプレです。

実は最近、バイトでプログラミングスクールの講師をしています。

そこの生徒は、全員未経験からITエンジニアを目指して勉強中で、シュプレはそのサポートをしています。

そこで、今回は未経験からITエンジニアになるにあたって、「こういうの知っておくといいんじゃない?」と自分が思っていることをマインドセット及びスキルセットの2つの観点からまとめます。

エンジニアとひとことで言ってもその種類は多様

機械工学系から、化学系、医療系など、エンジニアとひとことで言った場合、その種類は多岐にわたります。溶接技師などもエンジニアの枠組みですね。「プログラマ」と言った場合、基本的にはITエンジニアのことを指すかと思います。

ITエンジニアの中でも、Web系、スマートフォンアプリ、ソーシャルゲーム、金融系、組み込み(ハードウェア)系など、これまた数多く種類ありますが、今回の記事では、「エンジニア」や「プログラマ」と言った場合、ソフトウェアエンジニアのこととして扱います。

ソフトウェアエンジニアの種別

さて、ソフトウェアエンジニアはいわゆるWebサイト、スマートフォンアプリなど、スマートフォンやパソコンなどの端末の上で動くソフトウェアを作る仕事をします。

ソフトウェアの構成は以下のような構図を思い浮かべるとわかりやすいかもしれません。

基本的なWebアプリケーションの図

ソフトウェアエンジニアは、更に担当する領域によっていくつかの種類に分けられます。

フロントエンドエンジニア

フロントエンドエンジニアは、ユーザが直接操作するページ・画面を担当します。

デザイナーが起こしたデザイン・カンプを元に、実際にコーディングして形にしていきます。

Webのフロントエンジニアであれば、プログラミング(マークアップ)言語は、HTML/CSS、Javascriptあたりがメインのスキルとなります。Unityなどのフロントエンジニアであれば、C#などでしょうか。

みなさんが普段目に触れているWebサイトなどの画面は、みなさんのことを考えて丁寧に設計し、あらゆる配慮がほどこされたデザインを、どこかのフロントエンドエンジニアがコーディングしたものに違いありません。

サーバサイドエンジニア

バックエンドエンジニアとも言われるサーバサイドエンジニアは、厳密な設計をもとに、ロジックを実装していくのが仕事です。

フロントエンド側のシステムへデータベースから取得した情報や、演算結果のデータを送ります。

フロントエンドは、サーバサイドから送られてきたデータを整形し、画面に表示したり、逆に、ユーザが入力したデータをサーバサイドに送ったりします。

言語としては、PHP、 Go、Java、Python、Rubyなど、様々なものが使われています。

Twitterなどで文章を投稿する場合を考えてみてください。

ユーザはブラウザなどのクライアントソフトを使ってTwitterの画面を表示し、フォームに投稿したい文章を入力します。

入力を完了すると、ツイートボタンを押して、入力データをTwitterのサーバへ送信します。

Twitterのサーバは送られてきた入力データを処理し、データベースなどに保存します。

ユーザの手元のソフトでは、Twitterへ再度リクエストが投げられ、サーバサイドから更新されたデータを取得し、最新の投稿一覧として画面に表示させます。

Twitterのざっくりとした処理の流れ

インフラエンジニア

さて、そんなフロントエンド、サーバサイドのシステムは、サーバがないとうごきません。サーバには、Webサーバや、データベースサーバなど、相当数の種類のサーバが存在してますが、どういう構成・配置にするかを決めたり、動いているサーバを監視したり、設計・運用などを行うのが、インフラエンジニアです。

所謂オンプレミスと言われる自社の中でサーバを動かしている会社がまだ大半ですが、最近ではクラウド環境への移行も盛んに行われています。AWSやGCP、Azureなどにより、インフラ基盤を効率的に管理できるようになってきています。

サーバのセキュリティを考えたりやネットワーク構成を決めたり、かなり裏方の仕事と言えますが、インフラ基盤というだけあって、システムにとってクリティカルな部分をさわることとなります。

その他のエンジニア

大別すると上の3つとなるかと思いますが、それら以外にも、ネットワークエンジニア、データベースエンジニア、テストエンジニアなど、様々な種類の分野に特化したソフトウェアエンジニアが存在しますが、長くなるのでここでは割愛します。

エンジニアはプロダクト・サービスを作る

しかし、どんなソフトウェアエンジニアであろうと、基本的にプロダクトやサービスを作ることが仕事です。(研究職系を除く)

デザイナーや企画、営業などと関わりながら、顧客などの要求を元に、大小さまざまなシステムを作っていきます(開発と表現します)。この開発工程には、いくつかフェーズがあり、V字モデルなどで表現されます。

V字モデル

大まかに言うと、要求を整理し、仕様書を作り、システムを設計して設計書にまとめ、設計をもとに、実際にプログラムを書いて実装します。プログラムができれば、いくつかのテストを行い、品質を上げて、最終的にリリース(プロダクト・サービスをユーザが使える状態にすること)をします。

不確実性と向き合う

プロダクトやサービスをリリースは期日が決まっていることがほとんどです。サービスごとにプロジェクトという単位でメンバーが集められ、リリース日に向かって、エンジニアも必死に設計書を書き、コーディングをし、テストをします。

以下はとあるソーシャルゲームを開発・運用するプロジェクトチームのざっくりとした構成です。もちろん、厳密にはもっと細かく分かれていたり、社外との関わりがあったりします。

とあるソーシャルゲーム開発プロジェクトの構成図

開発プロジェクトに携わるメンバーはリリースまでに必要な作業を細分化し、タスク化します。ひとつひとつのタスクをどのくらいの期間で終わるか見積もってから、それぞれ作業に着手するのです。

当然、見積もりを完璧に行うことは非常に難しいです。「このタスクは1時間で終わるな」と思ったタスクで1日つぶしてしまったり、逆に、「このタスクは5日かかりそうだ」と思ったタスクが、3日で終わってしまったりすることもあります。

なぜ見積もり通りにタスクを終わらせられないのでしょうか。理由は不確実性が存在するからです。

基本姿勢は情報収集・情報整理・情報共有・課題解決

不確実性に対処するには、情報を生み出さなくてはなりません。

そういった意味では、エンジニアにとって情報収集、情報整理、情報共有は必須ですし、課題に対しての解決案を提示する能力まで必要になってきます。

情報のインプット・アウトプットは、そのまま課題解決の糸口となるので、これらをコンスタントにこなせるエンジニアの市場価値は必然的に高くなります。

情報との向き合い方

特に、インプットはできても、アウトプットが足りていないという人が、現役エンジニアでも多いです。

ブログでの発信や、技術系イベントなどでの登壇、LT会への参加などもいいかもしれません。

未経験のうちから、こういったアウトプットの癖をつけることは、あとになっても非常に役に立つことでしょう。

隙きあらば行う効率化

優秀なハッカーは怠惰であるが、効率を上げることに関しては勤勉だといいます。要はやりたくないことをしないための努力は怠らないのです。

ほとんどの人は挑戦的なことを毛嫌いし、現状維持を最も好みます。それが衰退をたどる道だと知ってか知らずか・・・。

そのEXCELの日々の作業、マクロを使うと自動化して楽にできませんか?

日々行っているネットサーフィン、スクレイピングやニュースキュレーションサイトを使って効率的に情報を収集できたりしませんか?

もしかしたら、ちょっとした工夫で一日にできることが増えるかもしれません。

別に空いた時間でもっと仕事をやれと言っているのではありません。それもいいですが、なんとかして自分の好きな時間に使いましょう。そのためにハッカーはライフハックするのです。

忘れてはいけないエンターテイメント

情報をうまいこと扱ったり、効率を上げたり、何のためにそんなことをするかって言ったら、常に本質的な問題のみに注力し、自分の楽しい時間を最大化するために決まっています。

本質的な課題を解決するのは、気持ちいいし、達成感がありますし、何より余計な雑事に脳のリソースを割きたくないのです。

理不尽な上司のいびりや、社会の目、不適当な感情論、そういった本質的でない部分をいかに回避し、自分や他人の人生を幸せにできるか。

そういった部分にエンジニアリング・スキルを使いたい!と、筆者はそう思っていますが、世の中のプログラマもみんなそう思ってるに違いありません(笑)

もっと遊びたい。変なことしたい。面白おかしく課題を解決したい、その好奇心がエンジニアだけじゃなく、人類を成長させるのではないでしょうか。

まとめ

未経験でエンジニアになりたい人に向けて、自分の思いの丈を綴ってみました。

どんなエンジニアがいて、どういったことをしているのか、どういう技術を使っているか、そして、どのようなマインドで生きているかをざっくりと語りましたが、厳密なスキルセットに関しては、また別の機会で更に言及したいと思ってます。

これを読んだ人に少しでもエンジニアの熱感を感じていただければ幸いです。

コメント

タイトルとURLをコピーしました