プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

プログラマに必要なスキル

私も自分なりに、プログラマとして必要なスキルをまとめてみる。

エンジニアにとって最も大切なことは、お腹が出ていないこと。
と、15年前に私の見ていたサイト界隈で決着がついたのですが、エンジニアである私が必要だなと思うスキルって自分の中では時折変わっているので並べてみます。

エンジニアに必要なスキルは - まなめはうす

要約すると

ソフトウェア開発という仕事は「問題を調査し、原因に対する最適な解決策を考え、それを実現するコードを書いて問題を解決する」のループであると思う。これはバグ修正に限らず、ソフトウェア開発の全ての工程において言える。

といった観点から

私の考える「プログラマに必要なスキル」をまとめてみる。他にもいろいろあるけど、それは他の機会にでも :)

ソフトウェアを作るために必要な情報を探し出すスキル

プログラマであれば「こんなのをxx/xxまでに作って」と言われたことは経験にあるだろう。いや、大体そうか(汗)

それはググればすぐ分かることかもしれない。けど、大抵それは周りに詳しい人もいないようなことで、どこから手を付けたらいいか分からない。そんな時、大量の情報から必要な情報をピンポイントで見つけ出し、ソフトウェアをデザインする能力は重要だ。

そのためには色々なことに興味を持ち、情報収集を怠らない努力が必要だと思う。とはいえ、人間は全知全能ではないので、その分野に得意な人とコネクションを作っておくことも必要かもしれない。

動作するコードを素早く仕上げるスキル

これは id:maname さんの意見に賛成。testableなコードをいかに素早く実装できるかはプログラマにとって重要なスキルだ。

ここで重要なのは、単にコーディングの速度が早いというだけではなく、設計段階でどこまで実装を意識した仕様に落とし込めているかということだと思う。「ん?このケースはどうやって実装すればいいんだっけ?」というのを、いかに減らしておくかの方が重要なように思う。いくらタイピングが速くても、仕様変更ばかりではかえって時間がかかってしまうよね :)

何が問題なのかを突き止めるスキル

ソフトウェア開発に限らず、コンピュータを使っていると、様々な問題に遭遇する。それが自分が作ったモジュールであればいいが、実際にはどこに問題があるかも分からないことが多い。もっと言えば、ソフトウェアの問題だけとは限らない。

そんな時、当たりをつけて問題を絞り込み、原因を素早く発見する能力は重要だ。これについては経験を積む以外、いい方法が思いつかない。一緒に問題を調べてくれる、職場の同僚やその分野のエキスパートとのコネクションが、実は一番重要なのかも。

問題に対して最適な解決方法を提示できるスキル

問題の原因は見つけた。さて、どうやって解決しよう。単純なコード修正で終わることも多いが、複数のソリューションがある場合も少なくない。いや、そもそも思い込みから他のソリューションがあることに気がつかないこともあるだろう。

パフォーマンス、コードサイズ、データ量、プラットフォームにおけるバランス、互換性への配慮、などなど様々な条件から複数のソリューションを考え、その中からベストを提案できることは重要なスキルだと思う。とはいえ、全てを一人で決めることがベストではなく、複数の識者の知見をふまえて解決方法を提案できる人の方が優秀かもしれないと、最近は感じている。

とか書いてきたけど

出来てたら、こんなに苦労してないわ!あー、こんなプログラマに私はなりたい(笑)