2011年11月20日日曜日

新米プログラマが何をすべきなのか



結論は出てないけど最近悩んでいることを書いとく

どういう成長がしたいかによっても変わるが、一般的に良いエンジニアと言われるようになるには、新米プログラマはどんなことを意識してどんなことを学ぶべきなのか?

ここでいう新米プログラマとは、プログラミング言語の入門本をクリアして簡単なモノをひと通り作れるけどセキュリティとか最適化とかちょっと突っ込んだことは無知なレベルを想定しています。

僕がまさにその新米プログラマなのです。


よく聞くのが、「一つのことに集中した方が成長が早いし、一つのことを極めた方が他のことを習得するスピードも早くなる」という意見。例えば、Javaの習得に集中してJavaを使えば何でも作れるってくらいになってから他の言語を勉強した方が、JavaとJSとrubyを同時に勉強するより生産性が高い。

でも実際の開発では、Javaでサーバー側を作っていてもフロントはJS。何か一つの言語を極めようとしてもモノを作ろうとしたら、その言語+HTML+CSS+JS+DB+OOP+shell+バージョン管理+その他の開発環境などなど重要度は違えど色々同時に勉強する必要があります。新米は覚えることが多くて混乱します。

マルチタスクは必至

だからと言ってプログラミング言語まで色々やると必要なレベルまで習得するのが遅れますよね。最近感じています。「開発の時間」と「勉強の時間」を作るべきところを「開発の時間」と「別の言語での開発の時間」というタスクになっています。

現在興味の赴くまま、サーバーをJava・フロントをJSで開発しつつ、同じJSってことでTitaniumでアプリでも作りつつ、rubyやscalaなんかをかじってみようかなとか考えています。色々誘惑がありますよね。

今は割りきって色々つまみ食いしちゃってます。モチベーションも継続するし、楽しいです。

しかし、このままだと確実に一生一流になれぬまま器用貧乏になりますね。僕は習得は得意ですが、追求は苦手です今のところ。どこかで一つ殻を突き破らねば。プロのエンジニアになるには得意分野を見つけて、深いとこまで追求しないとダメですよね。

はじめは、どんなものがあるのか色々つまみ食いして回って、来年4月あたりから殻を破るべく選択と集中をしようかなと考えています。




2011年11月8日火曜日

ボスからのアドバイス


ソーシャルゲームの開発も佳境に入ってきたところで、ボスのアドバイスを再確認しておきます。できるエンジニアはみんなやっているらしい。


1.事前にやるべきことをブレークダウンする


ひと通り機能を作ってみて、何をすればどう動くかが分かってきたら
今後は事前に計画を立ててみましょう。
  • テーブル設計
  • URL設計(機能を実現するのに必要なアクション)
  • アクションごとにどんな処理をするか


2.リファクタリングは仕様が決まってから


プロトタイプを作る→関係者でレビューする→仕様を固め修正する→リファクタリングする。
(答えがないので、泥沼にはまりがち。ゴールはキレイなコードを書くことではなく、動くコードを継続的に改善すること)


3.事前、事後にプラクティスを頭に入れる


どの言語にもだいたいベストプラクティスを書いた本があります。JavaだったらEffective Javaとか。コードを書く前、書いた後は、それらのプラクティスが頭に入りやすい鉄が熱い状態です。新しい開発のイテレーションに入る前後に1時間でもいいので、時間を割いて、コードを書く時間を濃くしましょう。


4.連絡と相談をマメにする


何をやろうとしているか上司が把握出来るレベルで連絡と相談をしましょう。やり方は自由。口頭でちょくちょく話かけてもいいし、日報につまっているところ、やろうとしていることを詳しく書いてもいい。伝える工夫をする!

ボスの前の会社の人事部長の話ですが、1週間に1時間の定例報告では全然仕事が進まなかった社員が1日10分の報告会をするようにしたらみるみる仕事が進むようになったそうです。話すことで頭が整理させることもあるので、効果的なコミュニケーションで生産性をあげていこう。