見出し画像

個人でプログラマーとして活躍するために実践してきたこと

はじめまして。現在慶應義塾大学に在学しながら、プログラムを書くお仕事をしている吉開拓人と申します。2021年2月現在でプログラミング歴9年、働き始めて7年目になります。この記事では、僕が仕事で成果を上げられるようになるまでに実践してきたことをまとめたいと思います。

経歴

・高校時代にGatebox株式会社で働き、Web領域ではフルスタックエンジニアのスキルを習得

・大学時代に学生ベンチャーを転々とし、現在はGaiaxでブロックチェーンプロジェクトに携わっている

プログラミングスクールか、独学か

プログラミングを始めたいけど何から始めたらいいか分からないという相談をよく受けます。分からないからプログラミングスクールに通おうか迷っている人が多くいます。この問題に対して、僕はこう答えています。

理想はプログラミングスクールに通わず、独学でやることです。だけど、それで挫折する人が大半なので、プログラミングスクールに通う選択はアリだと思います。

友人がプログラミングスクールに通っていますが、彼曰くプログラミングスクールはモチベーション維持のメリットもあると言っていました。自分が大金を払っているから、元を取らないと損をするというモチベーションだそうです。他にも、周りに同じように頑張っている人がいるから、というモチベーションもあると思います。

しかし、プログラミングスクールが与えてくれるモチベーションだけでは、卒業後も続けていくのは厳しいと考えています。

プログラミングをずっと続けていけるモチベーションは、「プログラミング自体が楽しい」これに尽きると思います。

プログラミング自体が楽しいかどうかを判断するためには、少なくとも3ヶ月〜半年は集中してコードを書く必要があります。プログラミングスクールが与えてくれるモチベーションなしに、独学で勉強していれば、純粋に楽しめているのかが分かりやすいでしょう。

独学のテクニック

僕がやってきた独学は、とにかく技術書を買ってそれを全て消化することです。技術書はサンプルコードがダウンロードできるものがほとんどですが、コピー&ペーストは基本しないことをオススメします。コードを手で打っていると、構造が頭の中でシミュレーションされることが多々あり、ここを変えるとこの機能も実装できるじゃん!という気づきが生まれます。この試行錯誤が、自由にコードを書けるようになるために一番重要だと言えます。

技術書で分からない所があったら、まずはGoogleやQiitaで調べますが、それでも分からない時には一旦置いておいて、他の本を買って、それを進めます。その後にもう一度分からない所を見てみると、あっさり理解できることがあります。技術書は無駄になるほど買っても決して損をすることはありません。プログラミング経験者に「オススメの本を教えて」と聞くのではなく、無駄になるほど本を買って全部消化しましょう。

皆さんは受験勉強を一度はやったことがあると思いますが、プログラミングは受験勉強のように進めても全く意味がありません。イラストが好きな子供が、プロのイラストレーターになる工程を考えれば、たくさん絵を描くように、たくさんコードを書くしか、自由にプログラムを組めるようになりません。

これは必ずしもマストではありませんが、英語が読み書きできる能力があれば、本を買うお金が大幅に浮きます。プログラミングスクールに何百万円も払うより、技術書を何十冊も買う。技術書を何十冊も買うより、Googleで検索して英語で理解する。それが一番コスパが良い方法です。

ある程度自由にコードが書けるようになってから

Githubアカウントを作って、自分が書いたコードを上げる習慣を身に着けてください。最初は言語やフレームワークのチュートリアルを上げても良いですが、1つのツール、1つのパッケージとして公開する気持ちで仕上げると、周りからちゃんと実装力があると思われます。プロジェクトの説明書きをreadmeと呼びますが、readmeは英語で書くことをオススメします。そうすると、英語でスカウトが来たり、英語のチャンスが舞い込んできます。企業の人事担当者から「こやつ、やるな」と思われることもあります。

くだらないネタ用のものでも良いので、Webサービスを一つ作ってサーバーを運用してみると、実際に企業で働く時の仕事がイメージしやすいと思います。今どきVPSを契約せずにサービスを公開することはできますが、敢えてLinuxの入ったVPSを契約すると、Linux操作の練習にもなるのでオススメです。

ポートフォリオサイトを作ると、より仕事やインターンのチャンスが降ってきやすくなります。ポートフォリオサイトで重要なのは、作品のアイコンやイメージ画像を載せることです。なぜ画像が必要なのかというと、非エンジニアの評判から、チャンスが舞い込んでくることがあるためです。僕は友達にデザイナーの方々が何人かいるので、お金を払って画像を作ってもらっています。

ポートフォリオサイトを作ったら、企業のプロジェクトに関わることができると思うので、企業にアプローチしていくわけですが、ハッカソンや勉強会に参加すると、効率よく企業と繋がりを作れます。最初はあまりお金がもらえなくてもコワーキングスペースに入居しているベンチャー企業でプロジェクト開発に携わると良いでしょう。コワーキングスペースに出入りできれば、いろんな人との繋がりを作ったり、良い情報が流れてきたり、実装の相談に乗ってもらえたり、色々とお得です。

ですが、週3日は休日を作っておくと、独学の時間を確保できるし、ハッカソンや勉強会に参加する余裕が保てます。僕の友人に、忙しすぎて数年前からほとんどスキルアップできないエンジニアがいます。一つの企業に固執せず、あくまで自分が成長することを意識すると、チャンスが成長を呼び、成長がチャンスを呼ぶ、ポジティブループが起こりやすくなります。

エンジニアとしての実力がついてきたら

Web開発以外の専門技術にも手を伸ばしてみると、仕事の幅も広がり、周りのWebエンジニアとの差別化ができます。僕はセキュリティ, 機械学習, ブロックチェーン, システムプログラミングなどに手を出してきました。専門技術に手を出すために避けては通れないのが数学です。機械学習だと線形代数や微分積分や統計などの知識が必要ですが、実はこれらは、紙に書いてある問題を何百個と解かなくても、理解することが可能です。PythonのJupyterLabという開発環境で、数学を実験しながら学ぶことができます。この勉強法は、問題を解けるようにはなりませんが、数学をプログラミングに活用することができるようになります。これをやれば、大学で数学を受講しなくても、専門技術に手を伸ばすことが可能です。

自分のPCでいつもやっている処理を自動化することを、日々続けていくと、仕事がいつもより早く終わるようになります。僕はTSYSTEMという独自カスタマイズしたLinuxを仕事で使うことによって、自作の300以上のコマンドで、あっというまに仕事が終わります。その自動化の蓄積が、これから先の仕事時間を減らし、休日の時間が増え、さらなるポジティブループを呼ぶことができます。

自分の限界を知ることの大切さ

僕は大学時代に、働きすぎて体調を崩したことがあります。その時には同僚に大変迷惑をかけましたが、僕にとっては人生の転換期でした。自分の体力の限界を知ったからこそ、このままではいけないと思い、専門技術を身に着け、吉開拓人というブランドを作り上げるという方向で活動していこうと決めました。自分の体力の限界を知ると、これから何をすべきかが分かります。それがポジティブなターニングポイントになるかは、その人次第です。

最後に

ここまでプログラマーとして活躍するために実践してきたことをまとめてきましたが、僕はプログラミングを職業だと思っていません。この世界には魔法が存在しているけど、当たり前の存在すぎて魔法と認識されない。それがテクノロジーだと思っています。誰しもがハリーポッターの映画を見た後、魔法を使えるようになりたいと夢見ますが、魔法の世界で魔法を習得するのにも、努力と勉強が必要です。「もし自分がホグワーツに入ることができたら、真面目に勉強する」と言える人がいたら、この世界でプログラミングを習得できるでしょう。それほどプログラミングは夢のある能力だと僕は信じています。





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