見出し画像

【脱初心者】現役エンジニアが解説するエンジニアとして勉強する5つのこと

はじめに

コンピュータ工学の世界は幅広く、それぞれの分野がかなり深くまで研究されています。我々エンジニアは学者ではないのですが、システム開発に携わる上で最低限知っていないといけないだろうという知識は兼ね備えています。そのノウハウを使って弊社マンハッタンコードでは未経験者のエンジニア育成を何度も行ってきました。他社の新人教育にも積極的に参加しています。

オンラインスクールや動画サービスを使ってプログラム入門の敷居はとても下がっていると言える状態になりましたので、初心者や入門者の方は数年前と比べて格段に増えていると思います。そこで入門者や初心者の方が脱初心者をするにあたってどんなことを身につけていけばいいのかというのを本記事にて解説します。

1、プログラミング言語と書き方を学ぶ

勉強方法はなんでもいいですがプログラミングが出来ないと話になりません。効率の良い勉強法としてはオンラインサービスを利用すると良いと思います。先日Progateというサービスについて解説記事を書いて見たので参考にしてみてください。
「習得するならどのプログラミング言語が良い?」とよく質問されることがありますが何の言語でも問題ないです。どんな言語でも開発することができるので我々はエンジニアを名乗っています。
個人的な好き嫌いや得意不得意はありますが私はVB、Java、C#、C++、JavaScript、PHP、Ruby、Python、Swift、Kotlinの開発経験があります。
それぞれの言語には特徴がありますが、様々な言語に触れることができるのは色んな世界と触れ合えるのでとても楽しいです。


2、HTTPプロトコルとRESTful APIを学んでマナーを身につける

HTTP Protocol(プロトコル)
HTTPプロトコルはWEBブラウザとWEBサーバとの通信で使用される定められたルールです。スマホのアプリエンジニアでも、フロント・バックエンドのサーバエンジニアでも、インフラやWEBデザイナーでも、インターネット通信を使ったサービスやシステムを作る上でHTTP通信は大前提であり、必要不可欠なものです。
HTTPヘッダの仕組みやレスポンスを知らないで開発することは味付けを行わない料理と同じでなので必ず学習してください。
ルールの確認なのでHTTPプロトコルを学習するのにほとんど時間はかかりません。しかし、これが理解できてないままサービス・システム開発すると後々トラブルを招く可能性が非常に高いです。
初心者からのヘルプで「助けてください」と作ったプログラムを見ることがありますが、HTTPプロトコルを無視しまくっている場合が非常に多いです。HTTPプロトコルを学習することを目的に加えて作り直しすることを教えます。

RESTful API
料理の味付けには砂糖や醤油を入れる順番を定めた「さしすせそ」という味付けルールがあります。
これと同じようなものがRESTful APIです。RESTful APIはHTTP通信を使って何をしたらいいのかを決めているルールです。
システムの発行するアドレスが可読状態であることや、ステートレスであること、統一されたインターフェースであることなどを学習してください。
こちらもHTTPプロトコルと同様に学習コストはかなり低いですが、無視すると他のエンジニアから嫌われます。これを無視するということはルールがない状態なので、作ったものは規則性が存在せずにシステムではありません。

※以下は愚痴ですw
仕事でRESTfulを無視したAPIを作ってくるサーバエンジニアに結構な確率で遭遇することがありました。各企業はHTTPプロトコルやRESTful APIの学習くらいは新人研修に入れてください。(こんなもの最低限のマナーです)


3、開発と本番の環境構築を学ぶ

プログラミングだけでシステムやサービスは動きません。
ProgateやCloud9、Herokuなどを使用して環境構築をせずにプログラミングを学ぶことはできますが、作ったものを動かすには環境を構築することが必要になります。フロント・バックエンド問わずに脱初心者するには環境構築を学ぶことが必須となります。

環境構築の方法はAWSやGCPを使って学ぶのがオススメです。
まずはAWSでEC2、GCPではGCEと呼ばれるサーバを構築して、世の中に自分で作ったサービスやサイトを公開してみましょう。
これは脱初心者として大事な一歩です。
今までプログラミングを順調に学習してきた方でもここで躓く人は多いかもしれませんので、環境構築の勉強を始める前にインフラエンジニアやインフラに詳しい人を捕まえておくと効率よく勉強することができると思います。
業界では「インフラスキル」と呼びますのでTwitterやGoogleなどで検索をかける時はAWS、GCP、インフラ構築などの単語を使ってみてください。
インフラエンジニアの人たちは自分たちの経験をかなりの確率で資料に起こしてくれているので非常に勉強が役に立ちます。
またインフラは奥が深いものなので目的を見失わないように紙に書き出したりして学習を進めてください。学習コストとしては低くはないですが、エンジニアとして知らなくて良い技術ではありません。
環境構築はPHPを学習した人たちはちょっと楽ができますが、Ruby+Railsを学習した人は少しハードルが高いのでめげずに頑張りましょう。


4、お作法を学んで設計を知る

車を持っていて運転技術を身につけていても、交通ルールを守らなければ交通事故が発生します。同じように何も考えずに自由に開発していると、自分以外触ることのできないシステムを作り出してしまうことになります。この状況を防ぐために開発する前に作るシステムの設計をすることが大切です。
学ぶことはたくさんあるのですが、ここでは一部を抜粋します。

プログラムソースは設計書です(断言)

// 変数名 悪い例
Int price = 0;

// 変数名 良い例
Int itemPrice = 0;

// イラっとするやつ
for(Int i=1, i <= 10 ,i++) {

// ちゃんとしたやつ
for(Int itemCount = 1, itemCount <= 10, itemCount++) {

// なんだこれ?
public function getItem123 {

// 何の目的を持ったメソッドか読んでわかる
public function getItemName {

エンジニアはプログラムソースに設計を書き込んで機械に処理してもらいます。プログラムソースを読んで設計を理解できることは良いプログラムの必須条件です。読んでも理解できなかったり、別途で作ったExcel設計書がないと理解できないプログラムソースに価値などありません。

変数やクラス、メソッドの名前をつける時に適当に名前をつけていると自分で書いたプログラムを後から読み返しても理解することができなくなります。他人がルールもなく書いたプログラムなら余計に理解できません。
システムで使用する変数やメソッドなどの要素たちは意味を持っています。
この意味を誰が読んでも理解できるように名前をつけることは大事なことです。これを命名規則と呼びます。
ちなみに例に挙げたgetItemメソッドは実際に仕事で遭遇しました。
メソッドに管理番号付けてもプログラムを読んでだけでは意味を理解することは不可能で、エンジニアの仕事としては生産性が格段に落ちました。
プログラムを書かないといけないのにいちいちExcel設計書を読まないと理解できず、手が遅くなるので生産性が落ちるのは当たり前です。
結構大きめな企業のお仕事だったのですが開発当初に現場にちゃんとしたエンジニアがいなかったのでしょうね、残念です。

プログラムの書き方についてはリーダブルコードという本を読むことをお勧めします。脱初心者をするのに必要な知識がたくさん書かれています。

特にPHPという言語は自由に書け過ぎてしまうので混沌を招くことが多いです。PSRという世界的なコーディング規約があるので確実に学んでおきましょう。新人研修でPHP使ってる企業はこれくらいは追加で学ばせてください(マナーです)

データの取り扱いとアルゴリズム

システム開発は大きく2つの分野に分かれます。取り扱うデータの使い方と、メソッドの動きなどのアルゴリズムです。
システムの正体はデータです。コミュニケーションのためのWEBサービスだろうが、業務的な帳簿のシステムだろうが乱暴に言ってしまうとデータを取り扱うだけの単なる動きの集合体なのです。

システムはデータが死んだら終わりです。なのでデータが死ななように設計し、取り扱うようにするのがシステム開発の大原則なのです。いくらアルゴリズムが優れていてもデータが無くなればシステムの存在価値はありません。データベースの操作方法やSQL文の書き方をいくら勉強しても、この根幹の大前提を理解していないうちはエンジニアを名乗ってはダメです。
フロントエンドでもデータは絶対必要です。

MVC、MVVM、MVPモデルの理解

プログラミングを学習するにあたってMVCモデルという言葉を何度も目にしたかもしれません。システム内部における各クラスの役割の分担方法です。
MVCモデルはとても大事な考え方なのですが、非同期処理が主流の現在はもう時代に沿っていません。MVCを学んだ上でMVVMやMVPなどを学んで身につける方がより現実的です。


5、ビジネスの知識を身につけて働き方を考える

プログラミングを習得しても、お金を稼ぐ方法や仕事をする方法を身につけなければ生きていくことはできません。これはエンジニアだけでなくどんな仕事でも同じです。

ビジネスの知識を身につける

プログラミングと同じように働き方やビジネスの仕組みについて学習しましょう。市場の適正価格を知り、行動範囲内の法律やルールを学ぶことは商売をする上で必ず必要です。ビジネスの仕組みを知らないエンジニアは単なる作業者としてしか扱われなくなり、その人の市場価値は低くなります。
考えることや学ぶことを放棄して誰かの指示だけ聞いていれば良いのですから、価値が低くなるのは当然です。

エンジニアとして生きていくのであればビジネス知識は身につけましょう。
ここで言うビジネスの知識とはビジネスマナーなどではありません。
ビジネスの知識とはセールス、マーケティング、法律、会計の知識のことです。自分の作っているシステムは何のために存在するのかをよく考えることによって、設計思想やロジックなどは磨かれます。
ビジネスの知識を身につけることで相乗効果としてエンジニアの価値向上やスキルアップをもたらしますし、どんな業界でも社会でも商売が出来る人は価値が高いのです。

働き方を考える

脱初心者したらエンジニアとしてどう仕事していくかを考えましょう。
オンライン学習サービスを修了しただけでエンジニアを名乗るのは無理があります。成果物や仕事が評価されるようになって自他ともに認めるエンジニアが誕生します。
エンジニアだからと言ってワガママばかり言っていれば自然とお客様は居なくなりますし仕事ができなくなりますが、これはどんな仕事でも同じです。

「ランサーズやクラウドワークスで小さなお仕事をこなす」というのを目にしたことがありますが、WEBサイトやLP制作などのお仕事はあると思いますがシステム開発や我々エンジニアがやる仕事の規模はほぼないです。
最初のうちはどこかの会社に所属してエンジニアスキルと実績を積むことをお勧めします。開発の流れや複数人と一緒に仕事をすることを学ぶことができます。
所属する会社が自社開発でないとダメということもありません。SESはSESで様々なシステム開発に触れることが出来るという点はお勧めできます。
自分が習得したいことを伝え、協力してくれる会社に就業するのが良いと思います。話を聞いてくれないところはエンジニアでなくても論外です。

「フリーランスになるためにプログラミングを勉強したのに!」という人向けに厳しい言葉を言いますが「フリーランス=自由に働ける」のではなく「フリーランス=自分の仕事に自分で責任を持つ」ということです。
技術本やオンライン学習サービスで学んだだけのほぼ素人がどうやって責任持って仕事するのでしょうか。その素人に週2で仕事を依頼するとか、リモートワークで仕事が来る根拠を私は証明することができません。
無責任で無価値なフリーランスと名乗るエセエンジニアが増えるのは我々プロの仕事の邪魔なので記事を書いてます。興味があればご参照ください。


まとめ

初心者向けの記事や本が多いので、脱初心者や中級者になる人向けの記事を簡単に書こうと思ったら結構長くなってしまいました。
実は初心者向けって言葉や入門って言葉を使うと書いた技術本や記事を読んでもらいやすくなるという業界ナレッジが存在するのです。
なので初心者から中級者になろうとすると記事や資料を見つけるのに苦労するというのがこの業界の文化で、それを改善するためにコツコツと布教活動しているわけですw
本記事の1〜4はほぼ必須スキルと言っても過言ではありませんが、5については人それぞれなので個人的に考えることを書いているだけなので論争は勘弁してください。これについて論争するくらいなら学習している方がお互いメリットが多いと思います。
もっと詳しいことが知りたいとか、個人的に困っていることなどありましたらTwitterなどで連絡ください。


恒例の宣伝

毎週土曜日に勉強会を開催しています

東京限定になってしまいますが午後13時から勉強会を開催しています。
エンジニアだけでなくデザイナーや賑やかしの人たちがわいわいとコミュニケーションを取りながらやっています。
初心者や入門者の方でプログラミング学習の問題や悩みを解消したい方や、モチベーション維持のためにお洒落な場所で勉強したいという方はぜひいらしてください。いらっしゃる場合はTwitterに「勉強会行きたい」と直接DMいただければご案内します。


マンハッタンコードは社員募集中です

マンハッタンコードでは一緒に働くビジネスマンを募集しています。
エンジニアやデザイナーだけではなく、ビジネスマンとしてのエンジニアリング、デザイン業務をやってみたいという方はお気軽に連絡ください。
Twitterに直接DMいただいてもOKです。
今なら弊社の執行役員がご飯食べながら面接に応じますw


見積ポーカーアプリ 「Arupo」

相対見積もりの時に使用する見積ポーカーのアプリをリリースしました。
スマホにアプリをインストールすれば会議室にポーカーカードを忘れることが無くなります。
このアプリはFlutterによるクロスプラットフォーム開発でAndroidとiOSのアプリを実装しました。


この記事が気に入ったらサポートをしてみませんか?