トニーの部屋

プログラミングなど勉強してます.アニメ、特にラブライブが好きです.キャンプ,散歩好きです!このブログが見知らぬ誰かの励みになりますように、、、!

機械系大学生が、他分野のプログラミングを独学でやり続けた感想

この記事の対象となる人

  • プログラミングをやってみたいけど、不安を感じて始められない人

  • 独学はしているけど、「実践レベル」がわからなくて、社会進出に不安を抱いている人

  • 他、プログラミング全般に不安を持っている人

上記に当てはまりそう、またはこの記事そのものに興味が湧いた方は、読むことをお勧めします。

先に結論

基礎を目いっぱい勉強して,成果物を持って色んな所でアピールすれば,「実践レベル」の経験を得られるようになる.

書こうと思った経緯

大学に入学して、約5年間(現在、修士学生です。)プログラミングをやり続けているのですが、その内3年間は完全独学、成果物も自身で昇華するような状況でした。その後、初めてのスタートアップでのモック開発、インターンでのチーム開発を経験するなかで、意外にも自分の力は通用するのでは…?と感じています。そこで、自分と同じように独学でやっていたり、そもそもなんだか怖くて踏み出せない方に向けて、「実践レベル」ってこんな感じだよ!や意外とできることいっぱいあるよ!を主観込み込みで伝えたく、書きました。かと言って経験が豊富とはいえないので、一つの参考程度に読み進めてもらえると幸いです。

自分のプログラムに関する簡単な経歴

これまでに学んだ言語

- Python(ずっと触ってます。)
- PHP(モック開発で使ってました。)
- TypeScript(絶賛勉強中。)
- MySQLPHPPython開発の中でたまに触ります。)
- HTML、CSS(TS、PHPに昇華されています。)
- JavaScript(TSに昇華)
- C、C++C#(授業、サークル活動や友達とのお遊び)
齧った程度で言うと、JavaXMLRuby、Rあたりもやりました。

経歴

1年目
- 授業でのライントレーサーロボット開発をきっかけに興味あったプログラミングを勉強し始める。
- Pythonって初心者言語なんだと知って、やり始める。
2年目
- Pythonでおもちゃをいっぱい作る。(ゲームやExcelいじるシステム等)
- 授業、サークル活動ではC言語系統を学ぶ。
- HTML、CSSをやったのはこの頃。
3年目
- モチベーションの持ち場所がわからず、離れていく。
- 年末に授業内でシステム開発の課題があり、やる気が再燃する。MySQLに触れる。
4年目
- スタートアップでのモック開発の話が転がり込み、PHPMySQLを用いた開発を行う。
5年目
- 研究でPythonを使用する。これまで別言語で書いてあったプログラムを書き直す。
- TypeScriptでの開発に携わる。

どんな勉強をしていたのか

とにかく基礎を周回

最初に買った本(初めてのPython 第三版 オライリー社)はおそらく5周しました.その後Pythonに関する本は4,5冊は買いましたが,どれも最低2周しています.(おすすめはこちら
これは多言語の基礎レベルはできるようになった今だから言えますが,どれか1つの言語の基礎を固めれば,ほかの言語の基礎もイチコロです.さらに言うと,一部では多言語も同時に学ぶことが推奨されているくらいなので,1つの言語の基礎をとことん理解していくことは,とても効率的な勉強法です.

モジュールやライブラリに頼り切らない

自分はとにかくモジュールやライブラリの中身を見るように習慣づけていました.どんな仕組みで動いているのか,自分のプログラムに生かせる記述法はないかと目を凝らしていました.おかげさまで,人に聞かれたら説明できるし,プログラムの書き方も徐々にスマートになっていきました.
しかし,ここが非常に敷居が高い.ですがこれをできるかどうかは,今後のプログラミングスキルに大きくかかわります.
近年,基礎的な知識が足りておらず,ただ配布されてるモジュールやライブラリを利用している方が増えています.そういった方にいざ質問をすると,製作者に訪ねてくださいまたはこの記事が参考になるんじゃないですかね?が決まった返答です.この状況を簡単に例えると,足し算を知らずに掛け算の九九は暗記できている.しかし,原理を聞くと,掛け算を考えた人に聞いてくださいまたは教科書のこのあたりが参考になるんじゃないですかね?と言っているようなものです.この現状に対し,プログラミングスクール等で基礎を意識した教育がされているようですが,まだまだ普及され切っていないのが現状です.
つまり,モジュールやライブラリの中身を理解しているだけで,周りと差がつきます.モジュールやライブラリを使った処理がうまくいかないとき,製作者にわざわざ問い合わせるのとあなたがいることで,新たなモジュールを作成できるのとでは,大きな生産性の差があります.
使っているだけでわかった気にならず,勇気を出してモジュールやライブラリの中身を見てみましょう.

成果物を決めて作りきる

勉強成果のアウトプットとして,必ず目標となる成果物を決めて,作り切りましょう.本を通して作れる成果物,自分で思いついた成果物,人に作ってほしいといわれて作った成果物,なんでも大丈夫です.自分が胸をはって「これを作ったんです.」といえるものを作りましょう.
また,目標があるのとないのでは,モチベーションも変わってきます.スポーツでゴールのないところにシュートは打てないように,目標のないプログラミング勉強をしても培ったスキルは無駄になりますし,スキルをそもそも培う気が起きません.
自分の達成目標をもって,それを成果物として「実践レベル」の開発に飛び込む準備をしましょう.

「実践レベル」の開発って?

ここで再度伝えておきます.ここでいう「実践レベル」は,初学者,新卒等の学生が対象です.
私の思う「実践レベル」は,「誰に相談しても,どんだけ検索してもいい,どんなにコードが汚くてもいいから,求められた成果物を期限内に出せる」だと思っています.
実際のところチーム開発では,レビューや修正が相次ぐので,修正点があるのは当たり前です.(人によって好き嫌いなどありますし…)それは恐れずに,まずは作りきれる力.それが初学者にとっての実践レベルです.それ以上の力は経験でこれから補っていけばよいです.

プログラミングを行なっていく上で、必須級なこと

下記のリスト、当たり前のようでできてないことが多いです。できるだけで初学者としては重宝されます。

  • 最初からプログラムに触らない!!

  • とにかくログを出す!!

  • コメントアウトはとっても重要!!

  • 困ったら、まず検索する!!

  • それでもわからなければ、相談できる人がいる場合は相談を行う!!

これらを徹底していれば,「実践レベル」の開発は何とかうまくいくと思います.

結論

必須級なことの習慣が身につけば、どこでも「実践レベル」の開発は行なっていけます。よっぽどのブラック企業、ひどいPMではない限り、開発に合流するときは自分のレベルに合わせて簡単なタスク、挑戦的なタスクを用意してくれるはずです。
自分の力を伸ばすには、「知識」を蓄えることとアウトプットとして「経験」を積み重ねていくことが大切だと思います。
基礎を目いっぱい勉強をしたら、積極的に世に出すような開発に携わっていってください。

追記:開発に合流する上での注意点

開発合流前

経験がない。という一つの足枷により、一向に採用されずじまい、、、なんてことはよくあることです.初めての開発は友達とでも企業でもどこでも大丈夫です.めげずに成果物,ポテンシャルと論理的なコミュニケーションをアピールできるように頑張っていきましょう!
初めの1文は裏を返せば、経験があればチャンスはガンガン掴みに行けるということです。とにかく「経験」を積んで,新たな「知識」を蓄えていくことが大切です.

開発合流後

ここではあまり触れませんでしたが,エンジニアにおいて最も重要なスキルはコミュニケーション能力です.顧客,チーム,上司,後輩等々,とにかく人と話す機会が多いです.互いを思いやった明るいコミュニケーションをとることで,チームもよくなり,周りから頼られ,自分が困ったら頼れてといいことずくめです.明るく密なコミュニケーションを心がけましょう