Hadoopを使うにはアルゴリズムに関するスキルが必要だねえ。。。

というようなことを子象本読んでいて思った。

もちろんソフトウェアを開発するにあたってはHadoop関係無くアルゴリズムに関するスキルが必要です。

アルゴリズムの勉強というのは、スポーツで言えば腕立て伏せや走り込みみたいな基礎体力を養うようなもので、「ソートなんか実際に自分で書くことないだろう」とかいうのは「サッカーは腕つかわないのに腕立ていらないだろう」とか「野球で1kmも走ることなんかないのに長距離の走り込みいらないだろう」とか言うようなものです。

アルゴリズムの勉強のしかた - きしだのはてな

そうですよね。

ただ僕自身のことを言うとですね、
3,4年目ぐらいまでは情報処理試験の基本情報やソフトウェア開発でアルゴリズム勉強したり、
業務がバイオインフォマティックスだったこともあり、多少はアルゴリズムに触れてました。

しかしその後、開発ツールのパッケージ開発や業務システムの受託案件などをやるようになるにつれてアルゴリズムから縁遠くなってきました。
それよりもデザインパターンだったりチケット駆動開発だったりCIだったりといったものに触れる機会の方が多くなってきました。

受託案件のプログラムというのは、ブラウザからの入力をDBに格納したり、DBのデータを表示したりといった所謂入れポン出しポン的な部分が多かったりします。
仕様として実現するのが面倒で工数がかかるということはあっても時間があればまあできるだろうというものが多いでしょう。
なのでアルゴリズム的に難しいものは経験したことがありません。

誤解無いように言っておくと受託案件が簡単だと言っているわけではありません。
新技術が使われていて経験無いとか、仕様がなかなかまとまらないとか(これが一番かも)、いろいろ大変なことはあるわけですがアルゴリズムは無関係です。


一方でHadoopというか大規模データ処理とか分散データ処理を相手にする場合はということですが、この分野はまだそれほど成熟していないこともありいろいろ勉強する必要があります。

今回はミドルウェア面の話は除いてアプリよりの話です。

PigやHiveがあるといってもMapReduceを知らなくていいってことは無いでしょう。

IT技術はレイヤーが低いものをラップしてブラックボックス化を進めることによって発展してきました。

アセンブラしらなくてもプログラミングはできるでしょうし、LANケーブルの構造しらなくてもネットワークわかるでしょう。

低レイヤーのことも知っているに超したことは無いですが、あんま知らなくてもよいというのは重要です(どこまで知っておいた方がよいかというレベルに関する議論はあるでしょうけど)。
スーパーマンは別としてみんな多かれ少なかれ得意な分野があり苦手な分野があるでしょう。

実際問題クイックソートアルゴリズム知らなくてもライブラリ使ってプログラム書けるでしょう。

でもHadoopはそこまで成熟していないというか大規模データ処理、分散データ処理の世界なので、グラフアルゴリズムを実装するにはライブラリも無いし並列幅優先検索アルゴリズムを理解する必要があるでしょう。

仮にライブラリが整備されても大規模データ処理、分散データ処理ならではの世界(例えばグローバルにデータを共有しずらいとかデータ量多くてメモリ使えないとか)というのがあるので低レイヤーのことを学ぶ必要かなりあるという認識です。

そういう世界なので腕に自信のある開発者がかなり活躍できますし、能力差がいままで以上にあらわになるでしょう。

その意味では大規模データ処理、分散データ処理の世界が広まるのはいいことな気がしますし、内容としても実際面白いと思います。