こんにちは、エンジニア大家です。
ツイッター等で時々いただく質問で、未経験でwebエンジニアになるには?といった内容をいただきます。
私は成り行きでwebエンジニアになってしまったため、誰にも聞かず、何も考えずにこの職に就いてしまいました。
なのでダイレクトメッセージ等で質問者さんとやり取りさせていただきまして、「皆さんはなんて真面目なんだと!」と思った反面、
俺はなんて軽い人間なんだ!
と思ってしまいました。。
それはさておき、今回はそのような質問とその回答した内容について書きたいと思います。
未経験からwebエンジニアになるには
どのように学んだか?
質問者
エンジニア大家
こんな内容で回答させていただきました。
少し補足します。
エンジニアとして入社して半年〜1年くらいの時期
当時友達の会社は自社のサービスだけ開発・運営・保守をやっていたので、かなり融通が効きました。
融通が効くとは、納期だけでなくプログラムも動けばOK(多少効率が悪いとかソースが汚くてもOK)ということです。。
その代わりデータセンターでラックを契約し自前で物理サーバーを運営していました。DELLでサーバーを買ってLinux入れてデータセンターまで運んでラックにマウントしネットワーク設定してapache入れて、、(以下略)。
WEBサーバーだけでなく、DNSやメールサーバーもやっていました。会社に金がなかったのでロードバランサーもフリーのもので構築・運営してました。
なのでサーバー・ネットワークからアプリケーション開発まで広く浅く知識が必要でした。
それでも半年〜一年もすればその会社の仕組みはほぼ理解できるようになっていました。
その入社してから半年〜1年くらいの時期だけにフォーカスすると、自宅に帰宅してから明け方5時くらいまで勉強していました。
というのも、めちゃくちゃ楽しかたのです!
楽しかったので自発的に勉強していました。
何故楽しいかと言うと、手作業なら数日かかる事務処理がボタン一つで一瞬で終わる、みたいな機能を目の当たりにした時、「裏の仕組みはどうなってるのか!?」という好奇心が純粋に湧き出てきて、仕組みを一つ一つ解読していくのが本当に楽しかった。
またDB負荷が高くなる夜22時以降にモニタリングしては設定を変えてみたり、SQLを直したりインデックス貼ったりし、負荷が下がったりする様を見ると達成感が半端なかったのです!
なので、初期の頃は遊びの延長みたいな感じで仕事をやってました。
ちなみにこれが評価されたのか、私の給料は一年後には倍(22万⇒44万)になっていました。
その後の時代の変化
最初に入った会社では「エンジニア」と呼ばれる職種の役割はサーバー・ネットワークからサーバーサイド&フロンエンドのアプリケーション開発とほぼ全て含まれていました。
それから世の中の流れでサーバーが物理からVPSやIaasやPaasになり、
アプリケーション開発がその会社独自のフレームワークから汎用的なフレームワークに置き換わり、
jsやcssがより高度に発達していく過程の中で、
「エンジニア」の役割も「フロントエンド」、「サーバーサイド」、「インフラ」というふうに徐々に別れて行きました。
私の役割も所属している会社や常駐先の現場で任された担当業務によって時にフロントエンドだったりサーバーサイドだったりしましたが、その度に足りない部分は仕事を通して吸収していった感じです。
それもエンジニアになりたての一年で得た知識を基礎にして積み重ねてきた経験でなんとかなっています(今の所)。
前置きは長くなりましたが、「どうやって勉強したか?」という問いに対する答えは「仕事を通じてその都度勉強していった」と答えるようにしています。
プログラミングのスクール等に入るべきか?
質問者
エンジニア大家
先程述べたように自分はスクール等で学んだことはありません(私の時代にはスクールがなかった(泣))が、
大きなボリュームのものを学ぶ時にもし関連書籍が発売されていたら買ってしまいます。
理由は効率が良いからです。
なのでスクールも効率良く学べるようになっているはずなので積極的に利用していただけたらと思います。
お金を払って学ぶことに関して、私は良いことだと思います。
私の場合、無料だと身に入らないことが多いので、元を取る意識を働かせるためにお金を払う方が効率的だと思います。
自分でサービスを作ることは有意義か?
質問者
エンジニア大家
補足します。
例えばPHPの何かのフレームワークの初期設定だったり、サーバーにデプロイする仕組みだったり、はたまたローカル開発環境のdocker-composeの設定だったり、普段何事もなく利用しているけど、実は他の担当者が用意したものを使ってるだけで、その内容は無知だったりするわけです。
それらを自分で一から構築してみるととても勉強になります。
もし個人で仕事を受けることになった場合、普段から触れている仕組みで開発するのが最も効率が良いのですが、いざ本業で触ってるフレームワーク、同じ開発環境を用意してみたら全然動かなくて泣きそうになります。
なので、急な要求に備えるべく普段から知らずに使っている要素は潰しておきたいですね。
プログラミングができるのと仕事をもらえるのは別か?
質問者
エンジニア大家
意外とプログラミング以外にもドキュメント(詳細設計書やDB定義書、テスト仕様書、バグ報告書)の提出があった場合はその書き方やフォーマットも慣れておいたほうが良いし、おそらく現場で問題に直面しないと鍛えられない点が多くあると思います。
特にSQLはできる人にレビューを受けて初めて鍛えられました。SQLに関しては自分の独学では全く刃が立たなかったです。
というわけで、最初は現場に出て経験を積むことをおすすめします。
フリーランスエンジニアになるには?
質問者
エンジニア大家
これに関しては特に補足はありませんが、そもそも「フリーランス」には誰でもいつでもなることはできます。
ただ、フリーランスとして仕事を安定受注できるかどうかはその人次第です。
ランサーズみたいなサイトで受注しまくっても良いですし、私のようにエージェントを通して客先常駐やリモート案件を受注しても良いと思います。
まとめ
- 最初は(可能な限り)ゆるい環境でスタートしたい
- 自社サービスの開発・運用している企業だとブラックではない可能性が高い
私の場合スタートが友達の会社という(今思えば)かなりゆるい感じだったので何とかなりましたが、もし可能であれば最初はゆるい環境で始めてほしいです。
強制収容所や監獄みたいな会社は結構多くあるので、最初にそんなところに入ったら優秀な人も挫折しちゃいます。それはとてももったいないことです。
友達や親戚の企業に就職するアテがないという方は、自社サービスだけを開発・運用している企業に就職や出向されることをおすすめします。
そんな企業でもブラックなところはありますが、下請けやってる会社比べたら遥かにマシだしブラックでない確率も高いと思います。
