![]() |
システム開発の入門者から中級者にステップアップするための10のティップス |
ある読者との電子メールのやり取りの中で出てきた話である。彼は、開発者向けのブログや記事、雑誌の内容が2種類に分類できるということを述べていた。その2種類とは入門者向けのもの("Hello World"に代表されるもの)とエキスパート向けのもの(MSDN Magazineのようなもの)である。
これはなかなか鋭いポイントを突いている。開発者が入門レベルから中級レベルにステップアップするうえで役立てることのできる情報がほとんどないのだ。以下は、こういったステップアップを実現するための10のティップスである。
新たなプログラミング言語を学習することは、それがどのような言語であったとしても、より優れた開発者になるための近道となるのである(このことは、あなたが既に多くのプログラミング言語を修得していたとしても成立することである)。言語を選択する際には、あなたが普段使っているものとは大きく異なるものを選ぶのが良いだろう。例えば、あなたがC#の開発者なのであれば、VB.NETやJavaよりもRubyやGroovyを学習する方が良いだろう。
ここで私が「新たなプログラミング言語を学習する」と言っているのは、「本当に身に付ける」ということを意味している。プログラミング言語の学習というものは、まずはシンタックス、次に組み込み演算子とライブラリ、そして最後に「言語の使い方」という3つの知識領域から成り立っているのだ。最初の2つはさほど難しくない。ちょっとした経験のある開発者であれば、言語にもよるものの、30分から数時間もあればコードのメンテナンスに必要なシンタックスを身に付けることができるだろう。演算子とライブラリは、徐々に蓄積されていく知識であり、知っておくべきことを記憶するまで手元の参考資料で確認することになる。しかし3つ目の知識領域である「言語の使い方」は、その言語を何カ月間も使い続けて初めてものにすることができるのだ。プログラミング言語に見合ったプロジェクトを、そのプログラミング言語のスタイルに合ったかたちで遂行していくことをお勧めする。
新たなプログラミング言語を身に付けることで、あなたの開発者としての能力が開花していくのだ。
より優れた開発者になるに従って、単なるスキルを向上させるというだけでなく、情報を検索するスキルも向上させるということが大事になってくる(関連英文記事)。早い話が、最近のプログラミング言語や開発フレームワークはたいていの人々にとって、憶えておくにはあまりにも巨大なものとなっているのだ。その結果、仕事をやり遂げる能力というものが、あなたの調査能力に依存することもしばしば出てくるわけである。残念なことに、正確かつ品質の高い情報を見つけ出す方法は、TechRepublicといった技術者向けのサイトにアクセスして答えを求めることや、適当な検索エンジンに検索語を入力するということだけではないのだ。
「技術」や「戦術」「戦略」という言葉は同じものを指しているように思えるかもしれない。しかし、実は同じものではないのである。あなたが学ぶべき技術というのは、お気に入りの検索エンジンを用いた高度な検索手法のことである。これには論理演算子の使い方や結果のフィルタリング手法(除外キーワード、ドメインの制限など)、語順の持つ意味合いといったことが含まれる。こういったものを身に付けるには、マニュアルを読むのが一番だろう。
また、特定の検索時におけるアプローチ方法を知り、実際に検索すべきものが何なのかを知るという戦術を学ぶべきだ。エラー原因の究明は簡単だ--単にエラーコードを検索すればよいのだ。しかし、さまざまな検索を行う際におけるキーワード選択はとても難しいのだ。
戦略に関して言えば、どの検索エンジンを使用するのか(ヒント:汎用の検索エンジンを使うことがいつも適切であるとは限らないのだ)や、汎用の検索エンジンに頼る前にどのサイトを訪問するべきか、どの掲示板に助けを求めるのかといったことを学ぶ必要がある。
何かを誰かに教えるということが、それを学ぶ最善の方法となることは間違いない。あなたが開発という分野に身を置いてあまり時間が経っていないという場合、教えられることなどあまりないと考えてしまうかもしれない。しかし、それはナンセンスだ。あなたが知っていることはすべて、誰かから、あるいはどこかから学んだことであることを忘れてはならない。だから同じように、他の人が学ぶ際の誰かになろうと心がけよう。毎日少しの時間を費やし、TechRepublicやその他のサイトの掲示板を読み、その中から答えられそうな質問を探し出して答えを投稿して欲しい。また、他のメンバーの回答を読むことでも多くのことを学べるはずだ。
「エキスパート」になるには「およそ10年、あるいは計画的な訓練を1〜2万時間」にわたって行わなければならないという調査結果(英語)がある。これは「ものすごく長い」時間である。さらに言えば、同じタスクを10年間行ったとしてもエキスパートになれるわけではない。特定分野における幅広いさまざまなタスクを10年間行う必要があるのだ。要するに「エキスパート」になるには長い時間と多大な努力が必要であり、数年間の開発経験では十分とは言えないというわけである。30代前半で上級開発者(関連英文記事)になりたいんだって?その場合、教育/訓練をできるだけ早期に開始するか、多くの仕事をこなし、空き時間を使ってさまざまな書籍を読みあさり、実際に手を動かして経験を積んでいくことになる。私は高校の頃からプログラミングを始め、空き時間は業界動向の把握や新しいスキルの学習といったことに費やしていた。その結果、ほとんどの同僚よりもずっと早い段階で中級技術者、そして上級技術者へとキャリアアップし、ずっと多くの給与をもらえるようになったのだ。
ぶっちゃけた話をする時が来た。入門レベルの開発者は、何かをするうえで「最善の方法」があるということを断言できるほどの知識を獲得できていないはずである。このため、友人や権威のある人の意見を尊重するのは良いとしても、経験を十二分に積むまでは彼らの意見を自らのものとして受け入れてはいけない。あなたが自分自身でものごとを判断できるだけの知識を持ち合わせていないのであれば、どの「エキスパート」の言うことが正しいのかなんてことも、まったく判断できないはずだ。とても辛辣に聞こえるかもしれないが、どうか私のいうことを信じて欲しい。私は、ばかばかしいアドバイスや、何も判っていない「エキスパート」の言うことにこだわった結果、キャリアや、開発者としての成長が阻害され、何年もの回り道を余儀なくされた新米開発者を数多く見てきている。この好例が、オブジェクト指向アーキテクチャの誤用である(関連英文記事)。実際、オブジェクト指向に関する不適切な情報を鵜呑みにしてしまったことで、簡単なアプリケーションの設計であるにもかかわらず、エッフェル塔のような多重階層のクラス図を書いてしまう初心者が数多くいるのだ。
中級開発者になるには、仕事において本当に得意とする分野を持つことが一番だろう。私の場合、マルチスレッド/並列処理や、正規表現、動的プログラミング言語の活用を得意分野としていた(最近はPerlをあまり使わなくなったため、最初のもの以外は少し色あせてきている)。どういった経緯でこれらが私の得意分野になったのだろうか?マルチスレッドと並列処理については、該当分野の記事を読んだ時に面白そうだと感じ、自分自身のものにしようと思い立ったのだ。そしてこういった技術を使ったアプリケーションを手がけ続けたのである。また、私はPerlの正規表現を用いた仕事を星の数ほどこなしてきた。さらに私は、テンプレート処理エンジンと組み込みデータベースシステムを用いたe-コマースエンジンを自らで2年ほどかけて開発したのだ。
あなた自身が本気で興味を持てることを探して欲しい。それは、ひょっとしたら画像処理かもしれないし、データベース設計かもしれない。あなたがずぶの素人だったとしても、少なくとも興味を持った分野におけるエキスパートになろうと決意して欲しい。そうすることで早い段階で中級にレベルアップすることができ、いったんそこまで到達したのであれば、エキスパートへの道は半ばまで来たも同然なのだ。
"Hello World"プログラムを書いてみるのも悪くはないが、そのことと画面に文字列を表示させる方法を理解することとは別モノである。あなたの行う作業を支える「基礎」を学習することで、仕事がよりうまくこなせるようになるのだ。なぜかって?ものごとが動作する仕組みを理解することで、何かがおかしい場合に、その原因を突き止めるための手がかりが得やすくなるといった利点が生み出されるのだ。あなたのやっていることの裏側で起こっている詳細を理解することで、より優れた技術者になることができるわけだ。
あなたがウェブ開発者である場合、HTTPのRFCやHTMLの仕様に目を通して欲しい。また、コードジェネレータを使用しているのであれば、それが生成するコードに、データベースツールを使用しているのであれば、それが生成するSQLに目を通すといったことを実行して欲しい。
仕事の場において、上級開発者が記述しているコードを読み、与えられた問題に対するアプローチ方法とその理由について尋ねてみて欲しい。また、可能であればオープンソースプロジェクトもチェックしてみて欲しい。他の開発者が最善のコーディング習慣を身に付けていない場合であっても、コードの書き方についてのさまざまなことを学べるはずだ。この際には悪い習慣を身に付けないように注意して欲しい。他の開発者がやっていることをすべて鵜呑みにして、そのまま真似ようとしないことが肝心だ。何がうまくいき、どういったことに意味があるのかを熟考したうえで、それを身に付けるようにするのだ。
無意味な変数名や貧弱なインデント、その他のずさんなコーディングといったものほど経験の浅さを際立たせるものはない。コードの整形方法といった、どちらかというと地味な技術を教わることなくプログラミングを学んでしまった場合、こういった知識不足がコードに現れることになる(あまりにもよくある話である)。こういった技術を学んだからといって、あなたのコードが優れたものになったり、あなたが優れた開発者になるわけではないものの、同僚から新米開発者として見られることはなくなるだろう。やたら長ったらしい変数名をつけてみたり、「doSomething()」のような関数名をつける開発者がいた場合、その人の開発者としてのレベルがいくら高かったとしても、本人が自分のやっていることを理解しているようには見えないだろう。そして、そういったコードのメンテナンスはとても難しいものになるだろう。
キャリアを向上させることなく、単調な仕事をやり続けていたいんだって?それであれば、仕事を嫌うことだ。昇給に対する強い執着心だけでは、キャリアの向上など望めないのである。自らの仕事を心から楽しむことが必要なのだ(関連英文記事)。あなたが自らの仕事を好きになれない駆け出しの開発者なのであれば、中級開発者や上級開発者になることが、あなたのキャリアにとって本当にプラスになるのだろうか?この場合、おそらくは転職したりキャリアを変えたりした方がよいはずだ。これとは逆に、あなたが自らの仕事に愛着を持っているのであれば、それは素晴らしいことだ!その想いを持ち続けていることで、あなたはより素晴らしい開発者になれるはずだ。
この記事は海外CBS Interactive発の記事をシーネットネットワークスジャパン編集部が日本向けに編集したものです。 原文へ
ZDNET Japanは、Ziff Davisからのライセンスに基づき株式会社4Xが運営しています。
ZDNET Japan is operated by 4X Corp under license from Ziff Davis.
Copyright © 2026 4X Corp, Inc. All rights reserved. No reproduction or republication without written permission.