見出し画像

全くの未経験からプログラミングを始めるための心得

友人からの相談

本記事を書こうと思った理由は、友人からこんな相談を受けたことにある。「あのさWEB制作やっているっていったじゃん?それってどうやって習得するの?やっぱり講座を受講するものなの?」という相談だった。私自身、プログラミングをこれから始めたい人にとって、わかりやすい情報が多いかどうかは懐疑的な点もあり、私が勉強する上で苦労した部分も多かったので、私の話せる範囲でまとめたいと思う。

エンジニア歴

エンジニア歴は、まだ短い方でプログラミングを初めて2年、実務経験1年のフロントエンドエンジニアです。現在はReact Nativeを用いたモバイルアプリ開発をしています。使用言語はTypeScript(javaScriptに似た静的型付言語)です。私の最も特徴的な部分がProgateから始めてスクールに通うことなく、実務経験まで至ったという点でしょう。時間は掛かりましたが、比較的にお金をかけることはなく、現在の状況に至っています。またお金をかけなかったことによる、困難はたくさん生じておりますので、そのあたりのリアルな状況を説明し、皆さんにアドバンテージを作れたらと思います。

プログラミングに必要なこと

あなたがプログラミングを習得し、お金をいただきたいなら必要なことは次の3つです。①技術力、②根気・努力、③論理的思考力です。何を当たり前なことを言っていると思われた方もいるかと思いますが、特別なことはありません。地道に努力を重ねていくことが必要な分野なのです。だから誰にでもチャンスがあるのです。③論理的思考力は、デフォルトで備わっているものだと思うので、ここに関して自信が無い人は、諦めた方がプラスかもしれません。個人的な判断基準は、何かを比較して差異を見極めることができる、状況を俯瞰して、可能性の高い選択肢は何かと考えることができるなどでしょう。感覚的には、高校数学がちゃんと理解でき、今でも公式や定理などについて説明・レクチャーできる人は大丈夫だと思います。①技術力、②根気・努力は時間を掛けてこなしていきましょう!

前提として理解しておくべきこと

ソフトウェアを理解し良い設計をできるようになり、いわゆるプログラマーではなくソフトウェアエンジニアとして活躍するには、一筋縄ではいきません。はっきり言って前途多難だと思います。だからこそ真IT人材が不足しているのです。誰でも簡単になれるなら、企業側(雇用側)も嘆きませんからね。

また世の中にはチートかよと思うぐらい、知識や経験が豊富なエンジニアがゴロゴロいます。インターネットによって競争社会化したので、初めは精神的にボコボコに殴られることを受け入れてください。

さらにはIT専門用語・ツール・慣習・文法がたくさん出てきます。なぜを説明できるものから、説明を省かないと先に進めないもの、さらには後から理解できるようになるものもあるでしょう。はっきり言って、幸運な環境か特異なモチベーション・信念かサイコパスじゃないとキツイかもしれません。

しかしこれを乗り越えた先に見える景色は、素晴らしいものがあるのではないかと私は考えています。大学の先輩の60歳のソフトウェアエンジニアが教えてくれたことですが、今後世界はますますソフトウェア化します。また各国でその取組がなされています。それゆえに、ソフトウェアに対する知見・経験・理解があることがあなたの人生を豊かにする可能性が高いと私は考えます。どの市場でどれだけ努力するかで評価が変わりますから、せっかくならいい市場を選択するのも賢いと思うのです。

0からスタートはここから

読むべき人:プログラムを一度も実行したことが無い・html/cssが何かわからない

ようこそソフトウェアの世界へ 。とはいえ、あなたが上記のような状況なら、次のステップで勉強を進めることをオススメします。

以下のサイトでhtml/cssを学ぶことです。いずれも無料の範囲内で、コーディングの基礎の基礎の基礎の基礎の基礎ぐらいは勉強できます。

ここで簡単なWebサイトの表面がどう表現されているかを勉強してみてください。ここで挫折したら、あなたはむいていないか、それかチャレンジするタイミングでは無かったと思って諦めましょう。私は、大学生の暇な時に、遊び程度で勉強していました。一つだけ注意点があるとすれば、僕の記憶が正しければProgateの教材は一部古い部分もある可能性があります。(アップデートで変更されている可能性もあります。)なので、現実的に使わないコードや方針に出会う可能性があります。

Webアプリの雰囲気を掴む

読むべき人:WEBアプリを一回も作ったことが無い人

WEBアプリを一回も作ったことが無いのであれば、作りましょう。とはいえ、1から環境構築したら多分罠にハマって死んでしまうので、ローカルで環境を構築することは避けるべきです。

progateにruby on railsの教材があるので、それをこなしましょう。記憶違いだったら申し訳無いのですが、有料だったと思います。しかしさほど高い金額では無いので躊躇するべきではありません。また1回目では何を言っているかわからない人もたくさんいると思いますので、複数回トライしてもいいでしょう。

ここらへんで、ターミナル(コマンドプロンプト)の基本操作も覚えておきましょう。いずれもProgateやドットインストールにあるはずです。各コマンドを覚え、軽快にターミナルを操作できるようにしておきましょう。これ意外とつまづくと思うので早めに学習することをオススメします。まあ慣れれば挨拶みたいなものです。

仲間を見つける

読むべき人:プログラミングの雰囲気はわかったが、相談できる仲間がいない人

プログラミングの技術的な話ではなく、勉強する環境としてですが、相談できる仲間がいないと、あなたは確実に勉強することをやめます。特に最初は知識・経験が無い状態で困難を乗り越えられないので、わからないことが連発してやめてしまうでしょう。例えるなら、今まで数学を勉強してこなかった算数しか知らない人が、いきなり高校数学を勉強するみたいな感じです。どう考えても無理なんです。だから潔く仲間を見つけましょう。

できればオフライン仲間が良いです。理由は、初心者は適切な質問ができないからです。何がわからないかもわからない状況で、質問が整理できないので、オンラインテキストで会話することは困難でしょう。それゆえに自分より一歩以上進んでいる仲間を見つけ、たくさん話をしましょう。世の中には、技術系の勉強会やオンラインサロンなどもあります。活用あるのみです。

お金をいただく経験をする

読むべき人:簡単な実務経験が全く無い人

やるしか無い状況に身をおくことが最も成長します。これはソフトウェアに限らずだと思いますが、覚悟を決めて背水の陣で取り組む状態を作りましょう。その意味での、金銭授受による緊張関係を作りましょう、という意図です。

ただ注意が必要なのが、お金をいただく以上、その対価を提供することが基本的には求められます。しかしここで矛盾が生じるのです。お金を頂けるようになるために、お金をもらって仕事をするべき、という論です。ここは頑張るとしか言いようがありません。腹を括って、自分に任せてください!とお願いするしかありません。スキルも経験も無い人間ができることは、覚悟を見せることしか無いのです。もちろん他人に迷惑はかけていけませんがね。

しかし、これにも多少の回避策はあって、それは信頼関係の中で案件を獲得することです。あなたと仲が良い人なら、多少の失敗も多めに見てくれる中で開発できるでしょう。ここら辺はあなたの今までの人間力が試されるということです。

自分よりも10倍以上優秀なエンジニアと仕事をする

読むべき人:簡単な実務経験はあるが、自分で効率の良いソフトウェアを作ることができない

簡単なHPやLP程度なら、オブジェクト指向や効率などを意識せずにプログラムを作成していくでしょう。しかし、中規模・大規模(基準は複数人が開発に絡む)開発の場合、あなたが書いたプログラムが他人に影響を与えることになるため、質の高いプログラムが求められるのです。

私が最初につまづいたのは、オブジェクト指向という考え方でした。頻繁に仕様や要求が変わる可能性がある、いわゆるアジャイル開発では変更に対してコストが少ないプログラムが要求されます。つまり、変更がラクかつミスが起こりにくいということです。逆に変更に対してコストが高いとは、ちょっとした変更すら書き直す部分が多く、かつプログラムが正確に動作しているかも保証できない状態です。

個人レベルなら問題ありませんが、ビジネス的には要求に答え続ける使命があるので、問題大有りです。またオブジェクト指向だけに止まらず、変数名や言語のルール・慣習を理解することも生産性アップに繋がります。

ただ、これを初心者ができるようにするには、経験・時間が必要です。部活や勉強でもそうだったように、基礎を積み重ね、失敗を繰り返した結果、少しづつ理解していくものだと私は考えます。それゆえに、自分よりも経験豊富なエンジニアとペアプログラミングやレビューをしてもらいながら開発するか、重要な設計は任せてgithub上で議論・質問をするという方法が良いと考えます。

しかし、この状態は理想的なのですが、この環境を創ることがかなり難しいかと思います。まず未経験者が経験者と組める環境はそう多くは無いと思いますし、基本的にエンジニアが教育熱心とも限りません。運よくあなたを教育してくれるエンジニアを見つけることか、あなた自身が教育するに値する魅力を持つことが重要だと考えます。

毎日コードを書き、勉強する

読むべき人:オブジェクト指向もわかったが完全には自分で設計できない人

私が今ここにいる状況です。優秀なエンジニアと仕事をしていますが、もちろん彼の方が経験は10年以上違うため、技術力は劣っています。その分、彼が書いたコードの意図を理解し、さらには知識をインプットし続け、実戦で試していく、そんなことを3年以上は続ける必要があるのでしょう。ただひたすらPCと向き合いながら、受験勉強のようにコツコツ積み重ねて行きましょう。(今後更新予定...コメントがあれば追加する部分もあります)

最後にまとめ

私は技術的なプロフェッショナルにはほど遠いことを前提として執筆させていただきました。誰かの参考になれば幸いです。