nigoblog

技術系会社のCEOブログ~私的編~

技術者として技術力を手っ取り早く上げる方法を説明したいと思う

「技術力とは」という話を自分の理論ではこうだということで説明したいと思います。

ここでの技術はIT業界、Web業界の技術者。つまりプログラマーということを念頭に置いて読んでいただきたいと思います。

まず結論からいいます。
技術者としての能力は

  1. 検索力
  2. 応用力

この2点がすべてだと思っています。

ではなぜこの2点が全てだと言える理由を以下の流れで説明します。

  1. 全てはシステムである。そしてシステムの定義とは。
  2. 検索力が重要な理由
  3. 応用力が重要な理由
  4. まとめ

全てはシステムである。そしてシステムの定義とは。

まずシステムの定義を一言で言います。

「単独では意味のない系が集まることによって意味をもつ系」

これがシステムの定義であり、概念です。(なんか他にいいものがあったら教えてください。)
具体例では、システムコンポという言葉があります。
システムコンポの目的は音楽を聞かせることです。
それぞれ、スピーカー、プレーヤーさらにレコーダーなど色々な部品があります。
ここで、
プレーヤーだけでは音を出力できない。
スピーカーだけでも音を出力できない。

でも、2つを組み合わせることによって「システム」となり音楽を聞かせるという意味のあるものになります。

ではWeb業界の例で。
Webの世界でもサービス全てシステムとなっています。先ほど部品といったところをモジュールと言い換えて説明します。
ここでも一つ例を出すと、掲示板システムがあります。
その構成は

  • 文章をサーバーに送るモジュール
  • サーバー側で受け取った文章をデータベースに保存するモジュール
  • データベースの内容を表示するモジュール

このような構成を組み合わせて一つの「掲示板システム」というのが出来上がります。
この掲示板システムを作るにあたって重要なのが

  1. 検索力
  2. 応用力

ということです。
それぞれ深く見ていきましょう。

検索力が重要な理由

まずまっさらな状態を想像します。あなたはプログラミングのプの字も知りません。その状態からどうするか。
それには先ほど説明したようにまず一つずつ調べていく事が重要です。
一つ目の「文章をサーバーに送るモジュール」
これの実装方法を調べます。
とりあえず、検索にて「文章をサーバーに送る方法」と検索します。
まぁ当然のごとくいきなり答えには結びつきません。
なので色々検索ワードを変えていきます。
「サーバーに投げる 方法」
「サーバーに渡す 方法」
「サーバーにポストする 方法」
「サーバーに送信 方法」
これで見ていきましょう。
するとバラバラのものの結果の中に共通する言葉・単語が出てきます。
それは「HTML」、「Form」などのような言葉が出てくるでしょう。
そうすると次はその言葉を含めて再度同じ検索をします。
「HTML サーバー 送信」
「FORM サーバー 送信」
などなど。
するとより本質に近づいた結果が出るのを確認されたのではないでしょうか?
ちなみに「FORM サーバー 送信」と検索するとトップに次のサイトが現れました。
フォームデータの送信と取得 - Web developer guide | MDN
あとはこれをじっくり読み込みます。
わからない単語・用語があればその都度検索します。
そうして進めていくと、なんとなくどうやって文章をサーバーに送るかがわかってきます。
つまりそれこそ検索力のなす結果であり、大抵の実装は検索を深めていくとできます。
よって検索力が重要だと言えるでしょう。
検索力を表す指標はどれだけ本質を早く見つけられるかがベンチマークとなります。
この能力が身に付くとシステムをそれぞれのモジュールに分解できる能力も身に付きます。

応用力が重要な理由

というわけで検索力を発揮して、一つ一つのモジュールの組み立て方がわかってきました。
するとモジュール自体もさらに細かいモジュールにわかれていることに気づきます。
(ちなみにどんなプログラムも最小単位は記憶と計算です。)

このとき、モジュールをそれだけで使うのではなく他の事にも使えるということに気づいていきます。
例えば検索しまくった結果、上記の掲示板システムが出来たとします。
じゃあ次に新機能として画像をアップロードする機能を作るとしたらどうか?
このときこそ掲示板システムの時に学んだモジュールを応用して作っていきます。

一度使ったモジュールを別のタイミングで応用できるかどうか。
これこそが応用力であり、技術力にひもづくところだと言えます。

まとめ

もう一度まとめると、まずシステムは複数のモジュールから成り立っています。
下図は基本機能から追加機能を生み出すまでのフローで、
まずは基本機能を検索力により実装します。
そこで身に付いた知識を応用することで新規機能を実装していく。
f:id:nigohiroki:20131118233358p:plain

というわけで検索力と応用力さえあれば技術は自ずと身に付いていきます。

ここまで読んでいただけたら気づくでしょうが、
検索力はトップダウン的な考え方、応用力はボトムアップ的な考え方です。

それからこれらに至るまでにシステムという概念を認識しているかが鍵となるでしょう。
どこから手を付けていいかわからない人は、一つ一つ分解してものを考えるようにすれば何をやればいいのかがわかってきます。

これは技術だけには限らない話ではないですね。

ちなみに応用力を鍛える方法は実践でもいいですが、何よりもアルゴリズムを考えるというのが一番身に付くと考えています。
メモリ操作と四則演算だけで様々な表現を行う。
アルゴリズムにはこの本がよいですね。

色々例題があるので面白いと思います。

いきなり難しいという方は次のやつもよいでしょう。

数学的基礎とデータ構造 (アルゴリズムイントロダクション)

数学的基礎とデータ構造 (アルゴリズムイントロダクション)

  • 作者: T.コルメン,R.リベスト,C.シュタイン,C.ライザーソン,Thomas H. Cormen,Clifford Stein,Ronald L. Rivest,Charles E. Leiserson,浅野哲夫,岩野和生,梅尾博司,山下雅史,和田幸一
  • 出版社/メーカー: 近代科学社
  • 発売日: 2007/03
  • メディア: 単行本
  • 購入: 13人 クリック: 378回
  • この商品を含むブログ (60件) を見る
何よりもデータ構造を同時に学べるのがよいかと。