「古代エジプト」を冒険する気持ちで

 新卒準備カレンダー2011の37日目を担当させて頂くmasa_nakaです。
今までのエントリと重複する内容も多々あるかと思いますが、お目こぼし頂ければ幸いです。
なお、36日目のカレンダーは[twitter:@kawa1128]さんの 「とりあえず、手を動かそう!」です。

Who are you?

 組み込み系エンジニア七年生です。後述させて頂きますが、今年の四月に業務内容が変わりましたので、ある意味では皆様と同じ新人ですかね。若干(?)歳は食ってますが。
 今までの業務内容は、主に産業用装置向けの組み込みソフトウェアの開発でした。主な開発言語はCとC++アセンブラ、OSはtron系が大半でした。
組み込みエンジニアの宿命かもしれませんが、業務内容はソフトウェア開発の枠を超えたものが多かったです。ハードウェア検証用にコードを書いたり、デバッガでソフトウェアの挙動を追いながらオシロスコープやロジアナで波形を観測したり、ハード屋さんと回路図をにらめっこしたり、自分で半田ゴテを握ったり…まぁ、問題が解決するなら何でもやります、という感じでした。
 組み込み系の開発から離れた自分が言うのも変な話ですが、組み込み系はとても面白い世界です。
OSやCPUの挙動も比較的確認し易いですし、自分の書いたコードが物理層を元気に駆け巡る姿を波形として観測することもできます。
開発上の制約も多いですが、他の業界ではなかなか味わえない経験が待っていると思います。
 そういう組み込み系の業務を入社以来続けてきたのですが、別の職場に異動希望を出し、今年四月からそちらで働き始めました。
異動希望を出した理由は単純なもので「惰性で慣れた仕事を続けるより、今までは違う仕事にチャレンジして成長したい」「海外のエンジニアともっと仕事がしてみたい」、そんなものでした。
会社の事業方針と自分のキャリアを色々考えた末に会社に我侭を言わせて頂き、度重なる交渉の末に希望通り異動させて頂きました。現在はパッケージソフトウェアの開発がメインで、初めて触れるビジネスドメインの知識やC#、データベースと試行錯誤を楽しんでいます。
三十路も過ぎた自分ですが、また新人の心構えで新しい職場で頑張っていこうと思います。

古代エジプト」を冒険する気持ちで

 さて、自分語りはいい加減にして本題に入りたいと思います。
今回お話ししたいのは「ソフトウェアのエンジニアは(たとえ望まなくても)冒険者である」ということです。かのアラン・ケイ氏が約10年前にソフトウェア工学について述べた言葉で次のようなものがあります。

If software does “engineering” at all, it is too often at the same level as the ancient Egyptians before the invention of the arch (literally before the making of arches: architecture), who made large structures with hundreds of thousands of slaves toiling for decades to pile stone upon stone: they used weak ideas and weak tools, pretty much like most software development today.

 適当な訳で恐縮ですが、「もしソフトウェアが"engineering"であるならば、それは貧弱な知識と劣悪な装備しか持たず、何百何千の奴隷を何十年も酷使して石の上に石を積み上げて巨大な構造物を作る…古代エジプト時代の建築学と同じレベルだ」という感じでしょうか。
現在ここまで酷いかどうかについては若干疑問もありますが、ソフトウェア工学がまだまだ"engineering"と呼ぶには未成熟であることは自分も概ね同感です。
 十年後にソフトウェア業界がどういう姿になっているかは私には分かりません。唯一はっきりしているのは、十年後もプログラマは変わらず試行錯誤を繰り返しているだろうということぐらいです。
皆さんが足を踏み入れたソフトウェア業界はそんな未発達な「古代エジプト」であり、皆さんを待ち受けているのは様々な技術が生まれては消えていく激動の時代です。しかも国際化で人材の流動化が進み、海外のエンジニアと競争を強いられるおまけ付きです。
 そんな「古代エジプト」なソフトウェア業界ですが、決して絶望の地というわけではありません。ソフトウエアの原材料は我々プログラマの知性であり、その知性が届く限りにおいてプログラマは「魔法使い」です。この「魔法」を駆使して「古代エジプト」を冒険し、そして楽しんで行きましょう。
 その為に私が重要だと考えているのは以下のようなことです。(ちなみに考えているだけで自分が実践できているとは限りませんのであしからず。)

自分の装備は自分で揃える。学習の習慣を

 どんな形でも良いので、学習する習慣を身につけて自分の知性に刺激を与えていきましょう。自宅では集中できないよー、と言う人は図書館や喫茶店がオススメです。こういう習慣を繰り返していく中で、「どうすれば現状を改善できるだろう?」という癖が身に付いていきます。
偏差値や暗記能力より重要なのは、自分の頭で思考する姿勢です。

マネージメントを過信しない。何事も自己責任

 皆さんの負担を完全に把握し、作業量をコントロールし、皆さんの学ぶべきこと、進むべきキャリアを提示してくれる…そんなマネージャは空想上の産物です。
古代エジプト」ではマネージメント手法もまた不完全なのです。マネージメントの愚痴を言えば気は晴れますが根本的な問題解決の役には立ちません。(多くの場合は)
 自分のスキル、キャリアは最後は自分で守るという覚悟が重要だと思います。

偏見や先入観と向き合い制御する。常に前向きに

 学べば学ぶほど、経験を積めば積むほど、偏見や先入観が積もり積もって視野は狭くなるもの。そうやって単なる批評家に成り下がっていくエンジニアは決して少なくありません。
「自分は○○だから、××をする必要はない」などと思考停止で頑固にならず、好奇心をもって新しい概念を受け入れ、自分の頭で思考し情報を取捨選択していく姿勢が大事です。

自己管理はしっかり

 なんか当たり前過ぎて話すのも恥ずかしいですが、強調する意味を込めて書いておこうかと思います。この業界は心身を病む方が多いので…。
 ソフトウェアの原材料は「知性」です。パソコンがどんなに優秀でも所詮は道具、我々の知性が伴わなければただの箱です。だからこそ、パソコンやディスプレイのスペックより、知性を生み出す「脳」というデバイスのメンテナンスをしっかりしましょう。
 仕事だけに没頭せず趣味の時間を作るなりしてストレスを発散する、どんなに忙しくても食事や睡眠は最低限確保する…これらはとても大事です。本当に大事です。

おすすめの一冊(ついでに英語のお話)

 ついでにオススメの本も紹介したいと思います。
高橋征義([twitter:@takahashim])さんも紹介されてましたが、自分がお勧めしたい一冊もCode Completeです。
これから皆さんが書くであろうコードは会社にとって重要な知的資産です。当たり前の話ですが、決して皆さんの私物ではありません。自分以外の同僚が初見で読んでも解読できる、三ヶ月の自分が読んでも解読できる、そういう可読性の高いコードこそが理想だと自分は考えています。
Code Completeにはその為の手法や心構えが包括的かつ詳細に書かれています。
…とはいえ、同じ本をお勧めするのもどうかと思うので、自分は敢えてこちらを押したいと思います。

Code Complete: A Practical Handbook of Software ConstructionCode Complete: A Practical Handbook of Software Construction
Steve McConnell

Microsoft Press 2004-06-16
Sales Rank : 2797

See details at Amazon
by G-Tools

 Code Completeの原書(英語版)です。
驚くべきはこの値段、日本語版が二冊で約12000円でしたが、原書はなんと28ドルです。今だと2300円くらいでしょうか?
 「いや、英語はちょっと…」という方には電子書籍版がお勧めです。iPadKindleには辞書機能がありますから重い辞書を持ち歩く必要もありませんし、調べたい単語を入力すれば訳をすぐに表示してくれます。しかも全文検索も簡単。紙の洋書を読むのに比べて格段に楽な筈です。
iPadKindleのような電子書籍端末はまだまだ高価な代物ですが、物は考えようです。皆さんがこれから購入されるであろう技術書は相当な数になると思いますが、その何冊かを翻訳版ではなく洋書で読もうと覚悟を決めればiPadKindleくらいの資金は捻出できるのではないでしょうか。

 と、まぁ、これはほんの一例ですが、英語さえ受け入れればより良質の技術情報を格安で入手する事ができるのです。
ソフトウェア開発をより深く効率的に学ぶため、そして何より楽しむため、英語を学習するのは如何でしょう?

最後に

 長々と書いてしまいましたが、まとめると「ソフトウェア業界で冒険して欲しい、そしてできることならば楽しみ続けて欲しい」というところでしょうか。

 自分は今までは社内の勉強会を企画したり参加したりすることが多かったのですが、業界も変わった事ですし今後は社外の勉強会にも積極的に参加して行こうかと思います。その際は宜しくお願いします。ついでにブログも細々と書いて行こうかと。

さて、次のエントリは[twitter:@yuitowest]さんとのことです、宜しくお願いしますね。
最後に、[twitter:@ymotongpoo]さん、素晴らしい企画を取りまとめて頂き本当にありがとうございました。