仮想サーファーの波乗り

仮想サーファーの日常

プログラミング・エンジニアのスキルアップ・ブログ運営などに関してよく書く雑記ブログ

➡ Udemyで6/4(木)まで割引セール開催中! 1,500円〜で普段の90%OFFも!

【要保存まとめ】エンジニアになりたいプログラミング初心者のよくある疑問を全部解消します

f:id:virtual-surfer:20200109012828p:plain


「プログラミング未経験だけど、これからプログラミングを学んでエンジニアになりたいです!」

という方からTwitter経由で質問をされることがあって、その都度記事を共有するのがお互い時間かかってつらいなと思ったので、未経験からWebエンジニアになりたい方の多くが持っている疑問点と、その疑問点への回答・詳細がまとまっている記事をまとめておきます。


とりあえずこの記事読んでおけば、「プログラミングを学んでWebエンジニアになりたい!」と思っている方の疑問のほとんどが解消されると思います。


ぼく自身3年前の非エンジニアだったときに知っておきたかったことをまとめました。


この記事の対象読者

  • これからプログラミングを学び始める非エンジニアの方。
  • Webエンジニアになった方がいいのか、なりたいのかまだ迷っている方。
  • プログラミングの効果的な学習方法、Webエンジニアのなり方についてよく分からないという方。


それでは、よくある疑問に答えていきます。


※ 疑問点とその回答の並び順は、上の方からプログラミング初心者の方が持ちやすい疑問で、あとになっていくほどプログラミング学習が進んで実際にWebエンジニアになるにあたって持ちやすい疑問になっていきます。


これからプログラミングを学び始める方へ

まずは、プログラミングをこれから学び始めるという方や、プログラミングを学び始めて1ヶ月も経っていないような方の持ちやすい疑問と、その回答をみていきます。


プログラミングの全体像が全然見えない...。プログラミングって何?

プログラミングの全体像を最初から理解しようとすると絶対に挫折するので、最初から全体像を理解することを目指してプログラミングを学習するのはオススメしません。

ですが、それでもざっくりと最初に全体像を知りたいという方は、こちらの動画をまずは見てみるとよいでしょう。

www.youtube.com


18分で分かりやすく端的にWeb技術の基本的な仕組みが開設されているので、Webサービス・プログラミングの全体像をざっくりイメージできるようになります。


最初はどのプログラミング言語を学べばいいの?

何をしたいかによって最適なプログラミング言語は変わりますので、万人に最適なプログラミング言語というものは存在しません。

したいこと・作りたいもの別に、学ぶとよいプログラミング言語をまとめると以下のようになります。


作りたいもの別に学ぶとよいプログラミング言語

  • 簡単なWebサイトを作りたい場合 → HTML・CSS・JavaScript
  • Webサービスを作りたい場合 → HTML・CSS・JavaScriptとRuby or Python
  • スマホアプリを作りたい場合 → iOSアプリの場合はSwift、Androidアプリの場合はKotlin
  • ゲームを作りたい場合 → C#(Unity)
  • 業務を自動化したい場合 → Python or JavaScript(Google Apps Script)
  • データ分析や機械学習をやってみたい場合 → Python


2020年にプログラミングを学ぶならどの言語がいいのか、より詳しくは↓こちらの記事にまとまっているので参考にしてみてください。

www.virtual-surfer.com


パソコンってどれを買えばいいんですか?何が違うんですか?

オススメは、サイズが13インチのMacbook Proですね。

13インチMacBook Pro - Apple(日本)


ぼくは、Surface Pro(Windowsパソコン)→ Macbook Air(Macパソコン) → Macbook Pro(Macパソコン)と使ってきましたが、プログラミングを日常的に学習するのであれば、Macbook Pro一択だと思います。


Macbook Proのいいところをまとめると以下です。

プログラミング学習者にMacbookがオススメな理由

  • プログラミング学習者が挫折しやすい環境構築がラクになることが多い。
  • Webエンジニアが働く多くの会社ではMacbookが利用される。
  • 最大24か月、分割金利0%で購入できるので、月々7,000円弱の出費に抑えられる。


ぼくも現在はMacbook Proのパソコンを利用しています。


エンジニアって何をどれくらい勉強すれば、どのくらいの期間でなれるの?

週55時間以上プログラミング学習に時間を使えるなら2ヶ月〜半年、本業が別にあって週20時間前後しかプログラミング学習に時間を使えるなら半年〜1年程度でエンジニアになること自体はできます。


もちろん、学習時間だけではなく学習の質採用される時の給与水準をどの程度まで許容できるかにもよるので、一概には言えません。


たとえば、ぼくはプログラミングを学び始めて3ヶ月でエンジニアインターン生として働き始めましたが最初の時給は500円でしたし、エンジニアになるまでに1年間プログラミングを学んで非エンジニアからエンジニア転職した友人は年収350万円前後だったようです。


www.virtual-surfer.com


Pythonエンジニアになるために必要な学習内容とどの程度の時間がかかるのか、具体的なロードマップは↓こちらの記事にまとめています。

www.virtual-surfer.com


プログラミングスクールって必要なの?独学でエンジニアになれるの?

お金を払ってでも効率的に学習して時間を短縮したい方には必要ですし、時間がかかってもお金をかけずにプログラミングをじっくり学びたい方には不要です。


プログラミングスキルは、学習の量 × 学習の質 × アウトプット総量の掛け算で決まります。

1つ目の学習の量としてはプログラミング学習を毎日8時間するAさんと、毎日1時間しかしないBさんを比べると、Aさんの方が圧倒的にスキルがつきますよね。

2つ目の学習の質としては、仮にプログラミングを8時間していてその全ての時間をエラーの解決につまづいて結局何も進捗が出せなかったAさんと、Aさんが8時間つまづいた問題を10分考えても分からなかったから分かるエンジニアに質問して15分で解決して理解できたCさんとでは、Cさんの方が学習の質く、スキルもより身につきますよね。

最後3つ目のアウトプットの総量の掛け算とは、プログラミングの技術書の内容と全く同じプログラムを2回繰り返して写経したCさんと、同じ時間を使って自分の作りたいWebサービスを1つリリースしたDさんでは、Dさんの方が広く・応用がきくスキルが身につきますよね。


上記のような、プログラミング学習において重要なプログラミング学習の量・質・アウトプット総量を高める上でプログラミングスクールの力を借りるとより効果的にプログラミング学習を進めることができる場合もあります。


逆にいうと、プログラミング学習の時間を習慣的に取ることができ、プログラミング学習で詰まっても自力で調べて解決する力が高く、自力で目的意識を持って具体的なアウトプットをすることができる方はプログラミングスクールに行く必要がありません。

↓自力で学習の量・質・アウトプット総量を高めることができる方の例

note.com


資格って必要ですか?どの資格を取ればいいですか?

Webエンジニアになるために資格が効果的か?という意味だと、効果が小さいので取得する必要はありません。

ぼくも応用情報技術者試験は受験して合格しましたが、持っていることで採用面接で優遇されたことはありませんし、周りのWebエンジニア同僚や他社友人に聞いても資格を持っていたから採用が有利になったという話は聞いたことがありません。

エンジニア採用に関わった時も、資格の有無によって採用の合否に直接的に影響する度合いはほぼなかった印象です。


資格を取るために勉強する時間があるなら、その時間を何かWebサービスやスマホアプリを企画してリリースする時間にあてた方が業務に直結するスキルが身につくので、そちらに時間を使った方が効果的です。


応用情報技術者試験や基本情報技術者試験、G検定やLinux技術者認定試験、AWS認定など、勉強することでエンジニア業務で直接的には学ぶことができない領域の知識を身に付けることができるというメリットはあるので、そういう意味で学びたい方は学ぶと良いかと。


繰り返すと、プログラミング初心者が資格を持っていることで採用で優遇される可能性は低いので、そこに貴重な時間を使う必要はありません。


プログラミング言語選びは目的が大事って言われましたが、目的って具体的にどんなものがあるんですか?

プログラミング学びたての頃は、そもそもプログラミングで何ができるのかよく分からないですよね。

よくあるプログラミングを使ってできることは以下のようなものがあります。


プログラミングを学ぶとできるようになること

  • Webサービスやスマホアプリやゲームを開発できる
  • ブログの記事作成や記事投稿、Excel操作やWebサイトのデータ収集など業務を自動化できる
  • Webサイトやアプリの内部の仕組みに詳しくなってハックできる(悪用はダメ)
  • 家具やデバイスなどをカスタマイズして生活を快適にしてくれるIoT製品を作り出せる
  • サイバーセキュリティに関する知識が増え、自身の身を守りやすくなる


プログラミング学びたてのころは、何がやりたいのか・何が作りたいのか目的意識を持ちにくいと思いますが、自分が普段Web上でしている作業を自動化したり、こんな機能が欲しい!というWebツールを作ってみるなど、身の回りの小さな問題解決をしてみるとよいです。

www.virtual-surfer.com


本業があっても、平日の夜と土日の勉強だけでエンジニアになれるの?

なれます。

上ですでに書いたように、スキルアップのために重要な 学習量 × 学習の質 × アウトプットの総量 のうちの学習量が少なくなってしまうので、時間はかかりますが。


情報系出身じゃなくてもエンジニアになれるの?

なれます。

今の職場でも少なく見積もっても3割のエンジニアは文系出身で、大学でプログラミングをしていなかった方がエンジニアとして働いています。

プログラミング始めて2、3年で圧倒的に技術力を上げて成果を出し続けるエンジニアもいますし、大学生の頃からプログラミングをしていて8年以上のプログラミング経験があるのに、エンジニアとして技術力が伸び悩むエンジニアもいます。


これまでの自分が何に時間を使ってきたかや今何ができるかよりも、どこかの時点からどれだけ集中的にアウトプットを意識して学習を継続できるかの方が圧倒的に大事です。


30歳・40歳・50歳でもエンジニアになれるの?主婦でもなれるの?中卒でもなれるの?

なれます。

82歳からプログラミングを学んでエンジニアになった方もいますし、主婦からエンジニアになった方もいますし、中卒でエンジニアになった方もいます。


「〇〇だから、エンジニアになるのって難しいですよね?」と、自分が変われない理由を探して失敗しても傷つかない言い訳を作っていると、その分だけエンジニアとして働けるようになる日が離れていきます。

www.virtual-surfer.com


「〇〇だから、難しい...」と考えてしまう方は、逆転の発想で考えればよいです。

たとえば、こんな感じで視点を変えて考えてみてはどうでしょうか。

「主婦だからエンジニアになるのは難しいよね...と考えてしまうということは、自分以外の多くの主婦も、エンジニアになりたくたても同じようにためらっているかも!」 「私が主婦からエンジニアになれたら、その事例を発信することで多くの自分のような人のためにもなるのでは!」 「ブログで発信すれば、多くの人の後押しができるし、その対価として報酬を得ることもできるのでは?!」


数学ができないとエンジニアになれないってほんと?

数学ができなくても、Webエンジニアにはなれます。

僕は中学二年生の時の二次関数で挫折して、高校三年生で数III・Cが分からなさすぎて文転したくらいには数学が苦手で嫌いでしたが、エンジニアになれました。

Webエンジニアやスマホアプリエンジニアとして働く上では、四則演算程度の算数ができれば十分で、数学知識は必要ないですね。


もちろん、プログラミングを活用して機械学習や、データ分析をやりたい場合は話が別です。

機械学習やデータ分析の領域では、プログラムの計算を速くしたり、統計データを扱って解を出すために、微分や積分や行列計算など数学が必要となります。

機械学習やデータ分析の分野でも便利なライブラリが公開されてきていて、数学の知識が必要な部分の実装は頭のいい人たちがやってくれて、数学知識がなくてもライブラリを組み合わせてそれっぽいアウトプットを出せる世の中になってきつつありますが、機械学習の精度を高めたり、データ分析の考察の精度を高めるためには必ず数学知識が付いて回ります。


数学の学習は、ロードマップが示されているこの記事がよかったです。

qiita.com


Udemyで提供されているキカガクの機械学習で利用される数学知識を学べるコースもめちゃくちゃ分かりやすかったですね。

www.virtual-surfer.com


Progateは一通りやってみたよ!という方へ

次は、Progateやドットインストールなど、簡単なプログラミング入門サイトを使ってプログラミングをやってみた。

けど、次に何をすればいいのか分からないという方、これからプログラミング学習を進めていく上で何を大事にすればいいのか知りたい方向けです。


Progateは一通りやってみましたが、次に何をやればいいですか?

Progateのような簡単なサイトでプログラミングをやってみて、そこで学習が止まってしまう方がめちゃくちゃ多いです。

とくに、「具体的に何を作りたいかはありません。エンジニアに本気で転職するかはまだ迷ってます...。」という方の多くが、ここで学習をやめてしまいます。

www.virtual-surfer.com


ここからは、具体的になにを作りたいのか?を考えて、身の回りのちょっとした問題を解決できる実用的なプログラムを書いてみたり、何か簡単なWebサービスをリリースしてみることを目的にアウトプットありきのプログラミング学習を進めていきましょう。

www.virtual-surfer.com


「Webサービスを個人開発したい!でも、アイデアがない...」という方は、↓こちらの記事も参考にしてみてください。

www.virtual-surfer.com


どんな技術書を買ってどんな順番で学べばいいですか?

Progateをある程度やってみたら、プログラミングの基礎は何となく理解できるようになってきて、より実用的なプログラミングスキルを学びたいですよね。

↓こちらの記事にPythonを学んでWebサービスを開発できるエンジニアになりたい方の場合の例をまとめているので、参考にしてみてください。

www.virtual-surfer.com


フロントエンドエンジニア・サーバーサイドエンジニア・インフラエンジニア、どれになるべきでしょうか?

たまに聞かれますが、自分の向いていること、好きなことによって決めるとよいです。


どのエンジニアになるべきか?

  • 目に見える部分を作り込み、ユーザー体験を追求するのが好き! → フロントエンドエンジニア
  • パズルを解いたり問題を論理的に考えることが好き! → サーバーサイドエンジニア
  • 機械工作や機械の仕組み、新しい技術に熱中する! → インフラエンジニア
  • スマホアプリを普段からよく触っている! → スマホアプリ開発エンジニア


どの種類のエンジニアはどんな仕事をするのか、その仕事をする上で必要なスキルは何かは、↓こちらの記事にまとめています。

www.virtual-surfer.com


僕自身はエンジニアになる前は経営学部だったのですが、問題の構造を考えたり事業のモデルを考えたりするのが元々好きで、サーバーサイドエンジニアをやっていても似たような思考をすることが多いので、日々楽しいです。


ポートフォリオ作成ってした方がいいんですか?どんなものを作ればいいんですか?

未経験からエンジニア転職したい場合は、自分で企画してリリースしたサービスがあった方が良いです。

それによって、最低限Webエンジニアとして働く上で必要な技術力はあることが証明できるので。


ポートフォリオサイトどうやって企画して開発すればいいの?という方は↓こちらの記事が超参考になります。

qiita.com


就職する場合は、どの職種でも具体的な実績があることが必要とされますよね。

たとえば、「海外のホテルで接客業をしたい」と思っているAさんとBさんがいて、Aさんは半年間ワーキングホリデーでオーストラリアで働いたことがあって、Bさんは日本で英語を大学の授業で学んだだけで英語を使って働いた経験はない場合、Aさんの方が仕事ができそう = 採用可能性が高いですよね。


会社がエンジニアを採用するときも同じで、「この人を採用して、この人は成果を出せるのだろうか?」ということを一番に考えます。

ポートフォリオがあると、現時点での技術力と、これから学んで成長していくイメージがわくか(自発的に学んでいるか?)を示しやすいです。


ただし、同じ職場で働いているエンジニア同僚の方や、Webエンジニア転職した友人の数人は、自分で開発したWebサービスがなくても未経験からWebエンジニアに転職しているので、自分で開発したWebサービスがないと絶対に就職できないというわけではないです。


学習を一人で続けるモチベーションを持ち続ける自信がありません。

プログラミング学習を継続できる人は、以下の特徴を持っています。

プログラミング学習を継続できる人の特徴

  • 具体的なアウトプット目標がある。
  • プログラミング学習の優先度が高い。
  • 困った時や、わからない時にすぐに解消できる能力もしくは環境がある。
  • 他人の成長よりも、自分の成長に集中する。


プログラミング学習を継続できる人は、先にどんなWebサービスを開発して、どんな問題を解決したいのか、アウトプットが明確であることが多いです。

または、Webエンジニアとしてスキルが足りないうちからWebエンジニアとして働き始めてしまうなど、強制的にアウトプットせざるを得ない環境を作り出している人も学習を継続できていますね。


また、プログラミングを空いた時間でやろうとするのではなく、本業の時間以外では全てプログラミングの時間にあてるというように、プログラミングの優先度を一番高くする人も学習が続いています。


他には、プログラミングで困った時に色々と試しても解決できない時間が長いと、その長さの分だけやる気は削がれていくので、その分からずに調べ続ける時間を短くする工夫をしている人はモチベーションが落ちにくいです。

お金がある人はプログラミングスクールに通って集中的に学ぶのが一番いいと思いますが、お金をかけられない方は、駆け出しエンジニア同士で繋がって情報収集をしたり、分からないことを解消し合うとよいですね。

#駆け出しエンジニアとつながりたい - Twitter Search


最後に、自分よりも後にプログラミング学習を始めたのに急成長している人や、他人と比較して自分のできないことを嘆くことをせず、昨日より今日、先週より今週自分ができるようになったことの総量を増やすことに集中している人は継続的に伸びているし、モチベーションも高く持ち続けられている印象です。


やる気が出る人間の仕組みと、具体的にどんな工夫をすればいいのかは、メンタリスト DaiGoさんの↓の動画がわかりやすいです。

www.youtube.com


エンジニア就職・転職先に悩んでいる方へ

自分で試行錯誤して、簡単な機能を開発してみたり、Webサービスを作ってみた。そろそろエンジニア転職しようかな!という方向けです。


エンジニアってどんな仕事するの?残業は?福利厚生は?給料の相場は?

本当に会社によりますね。


たとえば僕の働いている渋谷のWeb自社開発ベンチャーの場合だと、すでに運用されている自社のWebサービスの機能追加や機能修正を設計して、実装する仕事をしています。

就業時間は8時間で残業は月10時間いかないくらいで、福利厚生は般的なエンジニアの働く会社程度のもので、給料は1年目〜3年目だと年収400万円〜700万円くらいで結構幅があるイメージです。


これは会社によるとしか言えないので、エンジニア転職サイトとして利用されることが多いGreenWantedlyに登録して求人をみて、条件と仕事内容をみてみてイメージしたり、エンジニアとして働いている友人をランチに誘ってみて話を聞いてみると良いです。


どうやって会社の求人を観察するべきか・求人をもとに転職の戦略を立てる方法は、moto(@moto_recruit)さんの↓この本が参考になるので、読んだことない方はぜひ。


エンジニアとして働く上で情報収集ってどうしてます?

技術のトレンド情報と、自分が業務で扱う技術/専門性を持ちたい技術の深い理解のために情報収集にはこだわりたいですよね。


技術のトレンド情報をおう上では、この記事がめちゃくちゃ参考になる。個人的に激推し記事。

qiita.com


自分が業務で扱う技術の情報は、公式ドキュメント・dev.toなどの海外技術メディアでの記事、IT各社の技術ブログあたりを定期的に読んでおくこと、その技術に関しての中級者向けの技術書を読むこと、Githubのレポジトリに目を通すこととかやるとよいです。


情報量多すぎて確実に迷子になりますが、↓このGithubページはやばい。紹介されているメディアやサイトの中から気になるカテゴリに関してみておくとよいかと。

GitHub - sdmg15/Best-websites-a-programmer-should-visit: Some useful websites for programmers.


エンジニアなら使っている便利なツールとかってありますか?

このへんの記事によくまとまっているので、読んでおくとよいです。

非デザイナーエンジニアが一人でWebサービスを作るときに便利なツール32選 - Qiita

【まとめ】これ知らないプログラマって損してんなって思う汎用的なツール 100超 - Qiita

初心者が知らないエンジニアが普段使っている便利サイト・ツール(無料)をまとめた - 仮想サーファーの日常


正社員、SES、フリーランス、どれがいいの?

未経験のころは正社員がいいのでは?と思います。

が、ぼくは正社員しか経験がないので断言できませんね...。

後日、正社員もSESもフリーランスも経験がある方にそれぞれのメリットと向いている人を聞いてみて追記しますね。


エンジニアになったら土日も勉強し続けないといけないってほんと?つらくないの?


エンジニア初期の半年くらいは、土日も勉強しないと本業で成果出せなくてつらいので、土日も勉強せざるを得ないと思います。

ぼくは最初の半年間は本業で他のエンジニアに質問する時間が多すぎて、つらかったので土日も業務で分からなかったことを学ぶ時間にしていました。


ある程度本業で他のエンジニアに質問したりしなくても仕事で成果が出せるようになってきたら、土日は勉強してもいいし、勉強しなくてもいいと思います。


僕自身は、土日にプログラミングの学習してなかった時期と、プログラミングの学習をしていた時期がありましたが、後者の方が確実に楽しかったです。

自分のつくりたいものをサッと作って動かすのって、楽しいんですよね。


あと、業務で利用する技術と自分がさわってみたい技術が完全にイコールな場合はいいのですが、そんなことはほとんどないので土日や業務時間以外に自分の気になる技術をさわっているエンジニアは僕の周りでも多いです。

業務外でさわっていた技術知識が、本業でも活かせるようになったり、業務外での技術アウトプットを元に技術書展に出展されているエンジニア同僚の方もいますね。


最近は、新しい技術はUdemyとかでサッと学んで、自分の作りたいものを作りながらその技術で何ができるのかを学びつつアウトプットする。という学習スタイルが一番効率的に新しい技術を学べるなと感じています。

www.virtual-surfer.com


Web系とSIerどっちに行けばいいの?

ぼくはWeb系の出身しかないのですが、SIer出身で自社に入っているエンジニアの話を聞く限り、Web系の自社開発企業で働く方が良さそうです。


SIerと比べたWeb系のメリット

  • 最新の技術を採用することで採用成功・事業成長につながる背景もあり、業務で比較的新しい技術をさわれる。
  • 自社開発なので納期に追われる場合が少ないので、残業が少ない職場が多め。


未経験から最初にSIer転職をした同僚の方の話で、SIerのメリットとして、多くの開発現場を経験できること、要件定義から設計・実装・納品後の運用まで幅広い業務を経験できることを重視した。

という話を聞いたこともあるのですが、これらは逆にいうと特定のスキルの深堀がしづらいともいえますよね。


エンジニア就職・転職のその先へ

エンジニアとして働き始めて1年目の方向けのよくある疑問と参考情報をまとめておきます。


入社1年目では、まず何を学べばいいの?

Webエンジニア1年目で学びたいことは、この記事にまとまっています。

qiita.com


業務外でも稼ぎたい!副業先どうやって探す?

副業先の探し方は、こちらの記事にまとめています。

www.virtual-surfer.com


まとめ

以上、エンジニアになりたいプログラミング初心者のよくある疑問を全部解消する記事まとめでした。


まとめ始めたら楽しくなって気づいたら結構な情報量になってしまったので、一気に全部読むのは無理だと思います。

ブックマークするなりしてちょっと時間が取れた時に読んでいただければと。


記事の最後の方で力尽きて情報量が少なくなってしまったのと、ところどころ情報が足りなくて参考になりづらい部分が残ってしまったので、そちらに関しては、また情報をまとめて後日追記する予定です。


また、この記事に書いた内容以外の疑問があるプログラミング学習中の方は、仮想サーファー(@virtual_techX)のTwitterにDMで質問いただければ、可能な限り回答します。

twitter.com


では。


www.virtual-surfer.com

www.virtual-surfer.com