IT業界の企業は、いずれも知識集約型企業であるという特徴がある。このような企業の中核の競争力は、従業員の知識と技能に密接に関連している。そして、もし企業内でエンジニアという役割を担っているなら、あなたの中核の競争力はIT関連の知識とスキルの蓄積状況である。周知の通り、IT業界は新しい知識が大量に生まれる場所であり、Webフロントエンドを例にとると、わずか5、6年の間に、Webフロントエンドはすでに何度も変革を経験しており、現時点で見ても変革はまだ続いていくであろう。以前のdiv+cssグリッドレイアウトからJavaScriptの隆盛、そしてさまざまなJavaScriptフレームワークの百家争鳴、HTML5とCSS3の定着、モバイルWebの衝撃によってもたらされたレスポンシブデザイン、jQuery、AngularJs、ReactJsなどのDOM要素を操作する全く異なる理念と方法、web componentの標準化プロセス……なぜ今、企業はどこもフロントエンドエンジニアを募集しているのか?まるで突然、フロントエンドエンジニアが希少資源になったかのようだ。その理由の一つは、多くのフロントエンドエンジニアが業界の変化についていけず、現在の市場におけるフロントエンドエンジニアの能力と要求を満たせなくなっているからである。このような大きな環境の中で、エンジニアが速習能力を身につけることが極めて重要になっている。
筆者は自身の実体験と、周囲の同僚への観察に基づき、新しい技術をいかに素早く習得するか(ここでの技術には、新しいIT技術、新しいプログラミング言語、あるいは新しいプログラムフレームワークなどが含まれる)について、以下のような指針を述べる。
新しい技術を素早く習得するには、まず二つの前提条件がある。- まず、考え方が積極的に変化を求め、自らのコンフォートゾーンを飛び出す勇気を持ち、あらゆる技術に対してオープンな心構えを持つことだ。安稳を求めるのは人間の本性である。そしてこの本性は往々にしてあなたの成長を妨げる。人が知り得る知識の量は、自分のコンフォートゾーンの広さに依存する。コンフォートゾーンが広いほど、外界と接する範囲が広がり、自分の無知さをより強く感じるようになる。プログラマーは少なくとも次の二点を実践すべきだ。自分が理解していない技術に偏見を持たないこと、自分が慣れていない技術に恐怖心を抱かないこと。。
- 受動的な学習を能動的な学習に変えること。中国の多くのプログラマーは、毎日受動的な学習をしている。受動的な学習とは何か?それは、人や物事に追い立てられて学習することだ。今日新しいプロジェクトが始動したが、技術調査で新しい技術を採用したくない、開発中に難題に直面して初めて資料を調べる、終日他人のコードや自分が以前書いたコードをコピーして再利用し、コピーした後に問題が発生しても長い時間をかけて解決する。例えば、あるプログラマーがSpringを数年使っていながら、Springの中核の理念を知らず、Springのフレームワーク構造を知らず、Springの各コンポーネントの機能を知らず、Springの新バージョンの新機能も知らない。これは非常に恐ろしいことだ。なぜなら、これらのことを知らなければ、Springのベストプラクティスを採用できず、問題が発生しても迅速に特定する方法が分からず、プロジェクトの特定の要件に対してSpringが既にカプセル化した機能を使用できないからだ(Springにそんな機能もあることを知らないため)。能動的な学習には、先を見越して備えることが必要であり、その場しのぎではいけない。そして、学習を自分自身への蓄積と向上、自分への長期的な投資と見なすべきで、あまりに強い功利のな考えを持つべきではない。
私はコンフォートゾーンが好きだし、能動的な学習は好きではない。この二点を変える良い方法はないのか?」と言う人もいるだろう。正直に言うと、私があなたに提供できる助けは非常に限られている。映画『后会无期』のセリフにあるように、「私はたくさんの立派な道理を聞いてきたが、それでもこの人生をうまく生きられない」。この二点は何よりもあなた自身の努力によって実現するものだ。そして、これから述べるいくつかの点は、あなたの助けになるはずだ。
- 新しい技術を学ぶ前に、まずなぜそれを学ぶのかをはっきりさせる必要がある。この技術がなかった頃、私たちはどうやって作業していたのか?それが登場してから、私たちはどうやって作業するようになったのか?それはどのような変化をもたらしたのか?実はこれらの問いを立てるのは、その技術がどの問題領域の問題を解決または簡素化したのか、またどのような方法でそのような効果を達成したのかを理解するためだ。AngularJSを例にとると、AngularJSは元々HTMLがアプリケーションを構築する際の不足を補うために作られた。かつてのHTMLはマルチメディア情報を表示するために設計されており、後にいくつかの動的機能が拡張されたが、アプリケーションのWeb化の流れの中で、HTML設計上の欠点はますます顕著になってきた。例えば、DOM要素の操作が煩雑すぎる、ビジネスロジックのモジュール化が難しい、テスト容易性が低い、開発効率が低いなどだ。AngularJSはこの問題を解決するために全く新しい設計を採用し、一連の概念を提案し、データバインディング、識別子、ルーティング、依存性注入などの特性を導入して、Web開発の作業量を大幅に簡素化した。このような方法によって、その技術に対するマクロのな認識を迅速に築き、その潜にのな応用シーン、応用方法、およびいくつかの限界などを理解することができる。
- 次に、その技術の中核的機能を実際に使ってみて、それに対する認識を強化する。方法は、その技術の公式サイトのQuick Start(クイックスタート)セクションを参考に、一歩一歩進めることだ。現代のプログラマーはますます時間を大切にしており、ドキュメントの簡潔さ、完全性、習得しやすさは、ある技術を採用するかどうかの指標の一つになっている。特に現在のさまざまなオープンソースコンポーネントは、ドキュメントまでもがオープンソースである。そのため、多くのドキュメントは完全にプログラマーの思考に沿って書かれており、とても読みやすい。またSpringを例にとると、Spring 4.0で登場したSpring Bootコンポーネントを学びたいなら、その公式サイトにアクセスすればよい。ページ上の最も大きなボタンがQuick Startだ。クリックして学ぼう。ページは簡単な例で、5分もかからないだろう。もしまだ物足りなければ、右側にはさらに多くの
Getting Started Guides がリストアップされており、これも一歩一歩高度な機能を教えてくれる。「英語が苦手ならどうすればいい?」と尋ねる人もいるかもしれない。英語を学んでください。英語は優れたプログラマーにとって必須のスキルである。「ドキュメントを読むときに様々な雑音があったらどうする?」と言う人もいるかもしれない。例えばSpring Bootのstart guideを読むには、事前にSpringについてある程度の理解が必要であり、tomcatやjettyが何をするものかを知っている必要があり、gradleやmavenの使用経験がある程度必要だ…これらの知識はSpring Bootのその小さなプログラムを試す際にすべて必要だが、これらの雑音の干渉によって学習プロセスが遅くなる。これらの雑音を払拭する唯一の方法は、理解していない知識ポイントについても、時間をかけて学ぶことだ。したがって、学習は好循環のプロセスであり、多く学べば学ぶほど、より速く学べるようになる。
- 前述の二つのステップで、ある技術に入門することができる。では、どうやってレベルアップするのか?この段階は「読む」ことだ。公式サイトからその技術の詳細ドキュメントを入手して、徹底的に読もう。これらのドキュメントを通読することで、その実装詳細、さまざまな使用方法とシーン、さらにはベストプラクティスまで理解できる。例えばSpring Bootの公式ドキュメントは、細部まで徹底的に詳しい。あなたが思いついたこと、思いつかなかったこと、すべてドキュメントが丁寧に列挙している。もしScalaを学びたいなら、http://www.scala-lang.org/documentation/、各種ドキュメントが何でも揃っており、読み終えればScalaの達人も同然だ。ある技術の最高のドキュメントは、必ずその公式ドキュメントであるべきだ。もしそうでなければ、その技術は流行らない。ドキュメントを通読する過程では、必ずプロジェクトで活用するように注意してほしい。プロジェクトで実践する機会がなければ、自分で小さなデモを書いて実践すればよい。知識を学ぶ際に実践と理論を組み合わせるという道理は、古今東西変わらない。
- 最初の三つのステップを終えると、この技術に対するあなたの理解はほとんどの人より優れている。この技術を習得したと言えるだろう。では、さらにレベルアップする方法はあるのか?もちろんある。それは、あなたが学んだこと、考えたことを話し、書き出し、公の場にさらし、批判を受け入れることで、自分の不足を発見し、成長を促すことだ。時間があればみんなに講演をしたり、連載記事を書いたりすれば、みんなの目にはあなたがこの技術の達人に映るだろう。そうすれば、この技術を使う際に遭遇するさまざまな難問を解決する機会が得られ、逆にあなたの理解を深め、修正することができる。暇なときにStackOverFlowにアクセスして、誰かの質問に答えたり、その技術の問題リストを購読して、頻繁に眺めたりしよう。
- さらに深く進むこともできる。国内/国際技術コミュニティに参加しよう(国内にそのようなコミュニティがなければどうするか?チャンスだ、すぐに自分で作ろう)。さらに自分の影響力を発揮しよう。その技術に関連する書籍を翻訳したり、執筆したりする。もしその技術がオープンソースなら、時間があるときに修正を提出しよう。自分も開発者の一員になれるのだ。これこそが質的な飛躍であり、ツールを使うことからツールを創造することへのレベルアップだ。
5つのステップを全て終えれば、あなたはもはや単にこの技術を習得しただけでなく、神をも超えた存在だ!「この5つのステップを達成するにはきっと長い時間がかかり、一般人が到達できる高さではない」とまた尋ねる人もいるかもしれない。それはもちろん、このプロセスは確かに難しいが、天に登るほどではない。少なくとも私の周りには多くのそのような例がある。実は、最初の3つのステップを終えるだけで、あなたは50%のプログラマーより優れている。4番目のステップを終えれば、あなたはすでに90%のプログラマーの先頭に立っている。
最後に簡単にまとめよう。重要なことは三回言う。
- 能動的な学習は非常に重要だ。能動的な学習は非常に重要だ。能動的な学習は非常に重要だ。
- 公式ドキュメントは非常に重要だ。公式ドキュメントは非常に重要だ。公式ドキュメントは非常に重要だ。
- 実践は非常に重要だ。実践は非常に重要だ。実践は非常に重要だ。