ソフトウェア開発を志望する人が学生時代にやっておくべきこと

FETISH STATION - Re: 学生のうちにしておくべきこと
403 Forbidden


 学生時代を振り返ると、あれをやっておけば良かった、などと後悔がいろいろと立ちますが、一方であれをやっていて今思えば幸運だったと思うこともいくつか思い出されます。
 最近学生時代の過ごし方についてアドバイスするエントリをよく見かけますが、そこで私も、ソフトウェア技術者を目指す新大学生にむけて、個人的な経験上、学生時代にやっておいた方が良いと考えることについて、いくつか取り上げたいと思います。


・多くの良書を読む
 ソフトウェア開発の世界では、例え本であっても、技術や考え方の基礎となるような高い価値を持つ良書が沢山あります。
 しかし社会人になってしまうとまず読書の時間がなくなります。確実に自分のためになると分かっていながら、読めない本が大量に発生するのもざらです。また手に取る本も仕事に直接関係のあるものに絞られ、抽象的な本や他分野の本と自然と疎遠になってしまいます。
 とりあえず、時間があり、社会人としての基礎を作り始めている学生のうちに、世間で良書と呼ばれるものをとりあえず片っ端から読み込んでおくべきです。技術力も付きますし、ソフトウェア開発を進める上での重要な考え方を基礎として身に付けることができます。
 例えば自分の場合、在学中に読んだ「プログラミング作法」「珠玉のプログラミング」は今でも役に立つ仕事のバイブルの1つになっています。


・ソフトウェア開発のアルバイトをする
 金の絡んだ開発、複数のエンジニアが協力しながら進める開発、というのは経験しているかしていないかで、考え方や主張に大きな差を生じさせます。そういった経験を持っていると、例えば新卒就職後のスタートダッシュ時に、地に足をついた現実的な話や提案ができ、同期や先輩に対して良い第一印象を持たせることができます。
 また何より、学生時代から本格的に開発をこなしていたという経歴は、なかなか人受けが良いというメリットがあります。
 例えば自分の場合、大学在学中にデータベース関連の開発をバイトで手がけていたという経験は、就職活動でも採用担当の方に対してかなり印象が良かったですし、製造業の業界だということもあるでしょうが、今でも上司や同僚に対して自己アピールのネタとして使えます。経験年数も口頭でなら「〜年だけど、学生時代から開発やってたからプラス〜年」などと水増しもできます。
 それに学生時代での開発のバイトというのは、プログラマの方でも意外とやっておらず、経験として十分差別化に使えるようです。お金も稼げるメリットもあり、一度は経験してみることをおすすめします。


・印象の良い開発成果を確保する
 勉学行為は、学生時代に限らず、それ自体では評価の対象となりません。勉学の結果としてJavaを使える、オブジェクト指向を理解しているといっても空虚です。能力のある学生だと評価させるには、それなりを成果物を、具体的な形で提示する必要があります。 
 申し訳ないことにこれに関して私は大きくいえませんが、ソフトウェア開発に関しては、例えばアルバイトで顧客向けのソフトウェア開発を突っ込んだ形で手がけたこと、メーラーなどを開発してVectorで公開していたこと、コードが万行単位のソフトを開発したこと、簡易的なOSや学術計算ソフトを組んでいたことなど(いずれも大したものではありません。時間と基礎知識さえあれば、誰でもできることです)が、業務経験としては苦しいものの、新卒時の就職活動程度では役に立っています。
 幸い、ソフトウェア開発の世界では、OSであれ、コンピュータアーキテクチャであれ、開発言語であれ、面白いものを作るための情報が十分なまでに整備されています。やる気があれば、私より遥かに本格的で評価されるものを学生時代に生み出すことができるでしょう。入学時から要領良く勉強と実践をこなしていけば、登大遊さんのSoftEtherクラスのソフトウェアを開発することも、不可能ではないと思います。


・他のプログラマや学生と交流を持つ
 互いにプログラミングスキルを研鑽し、高度なソフトウェアを刺激し合いながら開発していく学生仲間というのは、現実には極めて幸運で稀有な存在です。大抵は、学生時代では自ら積極的に行動しなければ良い情報や刺激を得られません。待っているだけで学校が提供する勉強に依存すると、得てして井の中の蛙になりがちです。
 情報不足、刺激不足を解消する効率的な手段が、ネットなりリアルなりを通して、他の開発者達と接点を持つことです。人を言動を観察することで、何を勉強すれば良くて、どういう考え方や行動が正しいのかという価値基準を実感に近い形で身に付けることができますし、また勉強意欲も刺激されます。
 例えば私の場合、学生時代ではネットを通してウェブ系のプログラマの方々と交流することができ、組み込み分野以外でも、PHPC#/VB.NETといった業務向け言語や、開発プロセスなどの分野の勉強に様々な刺激を受けて手をつけるようになりました。その後電子工学の学科から順当に製造業メーカーに就職したのですが、そういったスキルは仕事に存分に活かせてますし、業務系の知識をある程度持っているということで、開発プロセスや環境整備などで積極的に提案できるようになっています。職場に配属されると仕事の担当外の経験や知識はなかなか身に付けられないだけに、学生時代にプロから様々なことを学ぶことができたのは、非常に幸運だったと感じています。


 以上はあくまで、個人的な経験の範囲に基づくものです。範囲外では、例えば海外のオープンソースプロジェクトに参加する、はりぼて友の会のような開発コミュニティに参加して展示会に作品を出展する、あるいは他の学生プログラマと直に会って交遊関係を築く、などが有望だと感じます。
 なお抽象的・基礎的な要素は今回扱っていませんが、あえていくつか言及するなら、まずコミュニケーション能力は必須です。マネジメント能力も、欠けていると20代の時点でもかなり苦しみます。またメーカーエンジニアを志望している方は英語が必須です。こういうものは学生のうちに向上させておいた方が無難だと思います。
 とりあえず大学生の20代前後というのは、人生の半分を占める社会人時代の方向性を左右する貴重な時期です。くれぐれも無駄に浪費しないように留意してください。