SEやプログラマが最初にやるべきこと

新人の苦悩

昨日会社の忘年会があり、その中の後輩の一人が悩みを打ち明けていた。彼は会社に入社してから数ヶ月の新人教育を受けてそのまま客先常駐することになった。プログラムや設計の基本も身に付かないうちの配属であったため、プログラムの基礎知識が足りない状況であった。

悪循環

そんな中でも、お客さんの期待には答えなければならないのだが、自分の力不足からくる劣等感により、なかなかいい結果が出せないばかりか、悪い評判まで出てしまう。すると、次第に仕事が楽しくなくなり、気力もなくなってくる、するといい結果が出せなくなり…とまさに悪循環である。

最初にやるべきこと

ベース言語

私自信の経験からすると、まず最初にやるべきことは、ベースとなるプログラム言語を作ってしまうことだ。言語はなんでもよいが、できれば手軽に始められるものがよいと思う。たとえば、JavaScriptJavaC#, RubyPythonなどもいいかもしれない。まず初めてみることが大事である。

部分的でなく、全体を

ここで大事なポイントは、部分的にではなく、まず全体を学んでしまうことである。文法の一部だけとか、特定のライブラリやAPIの使い方だけとかそういった覚え方は避けたほうがよい。
 例) for文はやったけど、while文は知らないとか
ベース言語の知識に抜けがあると、セカンド言語に移行したときに知識体系にムラが出来てしまう。そのため、時間かかかると思われるが、一通り機能を網羅するように心がけて学習するようにしたい。あとで結果は付いてくると信じて。

実際には無数のライブラリやAPIがある

実際には、ライブラリやAPIなどは次から次へと登場しては消えていくため、全てを覚えるといったことは困難であるが、「一度も見たことがない」のと「なんとなく見たことがある」のとでは雲泥の差である。なるべく数多くのものに触れることにより、無数のライブラリの共通点が見えるようになり、本質が見抜けるようになってくる。

次にやるべきこと

ひとまずベース言語を手にいれると、なんとなく自信が付いてくる。そこで手を緩めてはいけない。次はそのベース言語の知識を利用して、セカンド言語、サード言語を学び始めるのである。今度はベース言語の知識があるため、基本的には差分学習だけで済むので、最初の時よりも高速で学習が進む。さらに一つの言語だけでは見えなかった、ベース言語の利点・欠点なども見えてくるようになる。

学び続けること

日進月歩の業界であるため、今日の技術は明日使えないなんてこともしばしばある。複数言語を扱えるマルチリンガルになることで、習得したそれぞれの言語の特徴が捉えられるようになる。
これを続けていくことで、セカンド言語だった言語が自分のベース言語になるということもよくあると思われる。プログラミングというより上位の概念を捉えられるようになれば、言語の違いは、より薄い境界線となってくる。

そして設計へ

SEやプログラマが作るのはシステムである。システムを作るには設計が必要であるが、言語が分からない人間に、素晴らしい設計は無理なのである。言語を自由に操れるようになった状態であれば、実装を意識しながら設計することもできるようになる。それを繰り返していくことにより、システムのパターンも掴めてくるようになる。システムのパターンが掴めてくれば、言語に縛られず設計できるようになり、そのシステムを実現するのにより適切な言語を見極める力もついてくるだろう。

まとめ

  1. まず、ベースとなる言語を一通り学ぶ(基本文法・ライブラリなど)。
  2. セカンド言語を学びはじめる。その際、ベース言語との差異を意識する。
  3. サード言語、さらに多くの言語を学びはじめる。
  4. 言語の知識を生かして実装を意識した設計を行う。
  5. 言語にとらわれない設計を行う。