プログラミングを学べ!-プロの技術とアマの技術の違いがある!?-

ITエンジニアは、独学や学校で身につけたプログラム技術と、業務で身につけたプログラミング技術は、異なるものだと言います。つまりプロとアマには壁があるのではないかということです。まあ、アマプログラマでもプロ以上の能力がある方はどんな業界にもいるものです。プログラミングは原理が単純なので、その仕組みを理解した小学生が、大人よりも優れたことをやってのける子が現れるというのも、プログラミングの醍醐味だったりしますが。そういったスーパーアマプログラマは例外として今回は無視させていただきます。

ちなみに、現場でしか得られない知識というものに、私は概ね同意します。概ね同意するということは、若干の異論があるということです。今回は、その辺について書いて詳しく書いてみようと思います。

プロの技術とはなにか?業務知識や業務アプリ開発経験

プログラムがある程度は書けるようになってくると、そのプログラミング技術が、どうやって自分が思い描いていたアプリないしは製品になるのか?という疑問として頭をもたげてくるものだと思います。

書籍に書いていたとおり、黒い画面で目的の結果が得られたが、これがいったいどうして仕事になるのか初心者の時は全然わかっていませんでした。私は常々とても疑問でした。

私は10代の時にゲームをつくるためにプログラミングを学ぼうと思ったので、高校生の時に流行っていたPS2のFF10みたいなゲームはどう作られているのか気になっていました。そういった当時としてはすごいゲームでなくとも、例えばファミコンのドラゴンクエストみたいなゲームでもよいので、製品化してゲームユーザが使うようなソフトウェアが、どのように作られているのか気になっていました。(ドラクエは128kbほどの容量しかないので、今でも仕組みが気になる存在です)

例えば、ゲームの作り方はRPGにせよシューティングゲームにせよ、その手のサンプルプログラムがWEBや書籍などから得ることができるので、ある程度のものは作ることができるかもしれません。

しかし、セーブデータはどのように記憶領域やデータベースに保管するのか?ということを詳しく書いてある書籍はあまりないと思います。プレーステーションのメモリーカードにどのように記録されていて、それが「Now Loading」と表示されて読み込まれるのはどういう現象か?

プレステの場合はソニーが出しているそういった仕組みをC++などから使えばよいのだということは、なんとなく分かっていましたが…WindowsでDirectXなどを使ってゲームプログラミングをしようと思っていた私は、そのへんの機能はプログラマが自分で工夫して作るなり外部システム等を活用するしかありませんでした。

そのへんの技術の見極めやバランス感覚がないので、プログラミング初学者から中級者になる人は非常に悩むと思います。私は近くに聞ける人もおらず悩みに悩んでいました。ファイルに保存すればよいのか?セーブすることはできるが、ロードするにはどうすればよいのか?ロードしたものをゲームに反映して再開するにはどうするか?そういった具体的な設計や仕様を固めて一人でつくれるようになる、ある種の確信を得るまでに長い年月が必要でした。時間にして10年以上かかっています。無駄だと思います。無駄があるから今があるのかもしれませんが、すごい無駄。

RPGツクールなどのツールに頼ればよかったのかもしれませんが、C/C++などのプログラミング言語でつくらないとPS2で動くゲームになはらないと思っており、またコンピュータの原理的なものが知りたいという欲求があって、ずいぶんと時間を要しました。はじめから知っている人にそのへんの知識を教えてもらえたのならば、目的のことができるようになるまでに、こんなに長い時間を要さなかっただろうと悔やまれます。私はその当時からお金を支払ってでもゲームの作り方を知りたかったのです。

まあ、ゲームが作れると言っても、大手デベロッパーのゲームクリエイターではないので知識に偏りがあるとは思いますが、少なくとも疑心暗鬼になって自分のプロジェクトが技術的な障壁によって推進できなくなるということはないと思っています。

こういった物事の考え方も一種の現場で得た知識なのかもしれません。

情報システムをつくるコツがある

さて、本には載っていない知識や、仮に本に載っていたりWEBで記事として情報があっても、それが重要か重要でないか区別がつけられない、仕事現場におけるナレッジみたいなものがあることは確かです。IT業界に通底する掟やルールもあります。業務経験があるということが、人に仕事を振るための1つ重要なファクターだったりするものは確かにあります。

だから、人材市場の項目やフリーランスを募る時に「業務経験1年以上」と書いてありますね。業務経験がない人に、仕事のバランス感覚を教えるのは骨が折れるので、そういった経験は新卒採用できるような企業によって一通り済ましてほしいというのが中途人材採用やフリーランス採用する人間の本音なのでしょう。

プログラミング初学者がプログラミングを仕事にする場合、なんとかしてその業務経験的な暗黙知をまず得なければいけないのです。

あなたが20代であれば「やる気」があればIT業界に飛び込むための門戸は開かれているので、勇気と行動力があれば、その業務経験という対価はいくらかは得られるのですが、それが何らかの事情があって得られない人もいるでしょう。そういう方のために、そのへんの業務知識や業務アプリ作成に明るい人が、実際に仕事をこなすのに近い形で作業をしてもらうことで、慣れていくという仕組みがあってもよいのではないでしょうか。

プロは技術を求めて転職する

私自身が学生や社会人3年目ぐらいの時は、業務的な技術の欲しさに転職したりしました。

技術は持っている人に聞いたほうが圧倒的に習得が早いのです。今も新しい技術は書籍などで読むだけではなく、第一人者や詳しい人がいそうな勉強会やセミナーに参加して情報を得るようにしています。また聞くだけではダメで、実際に使ってみます。実際に使った技術でなければ、仕事で使いようがないからです。

話が逸れましたが、技術というものは、すでにそのあたりの事情に詳しい人に聞いたほうが、話が早いのです。給料が上がって新しい技術が得られるならば、転職をしますよね。特に20代の人は貪欲にそのへんを見極めて行動すべきだと思います。

技術は基礎力の上にある

業務を遂行する上でWEBや書籍では得難い暗黙知を得るためには、IT業界へ飛び込むのが一番ですが、それでも情報科学や情報工学の基礎知識は持っておくべきです。

現場に飛び込めば勝手に育つと思っているデキるエンジニアの先輩方がいますが、基礎力があるから技術の選定ができていることをすっかり忘れています(苦笑)。現場で活用する応用力があるのは基礎力があるからに他なりません。現場にさえいれば優秀なエンジニアになれるならば、専門教育なんてそもそもいりません(苦笑)。わたしは基本的に学校は嫌いですが、基礎力の習得をないがしろにする気はありません。

技術を評価する基礎力と一般常識が必要

先にも述べましたが、この技術は使えるか使わないのか?この場合は、どうするのが最善手なのか?そういう判断ができるのは、ベースとなる基礎力があるからです。根本的に原理がわからないと、流されるままにそれらを受け入れて、それらが使えなくなったら、また流されるように技術を受動的に学ばされることになります。

技術を売る商売は、市場で技術が求められていなければなりません。したがって、市場で求める技術が何かを見極めないと、使えない人材になってしまいます。そういうものは情報科学や情報工学ではなくて、マーケットを理解する商売や経済の原則を知らないといけないことにもなります。

私はお金やマーケティングなどが好きで、興味を持ってブログにも書いていますが、そのへんの知識が課題ではあります。何が言いたいのかと言うと、技術は技術そのものを定義する基礎知識の他に幅広い一般常識も持っていたほうがよいということです。

まとめ

業務的暗黙知、情報工学や情報技術の基礎技術、経済、マーケティング、総じて一般常識。これらを最短で得られる手段を用意しています。簡単な話で、それらを持っている人と対話を繰り返したり、擬似的にそういった知識を得る体験をすればよいだけです。詳しくは当ブログの上部にある「プログラミングを学べ!」というリンク先をご確認下さい。

コメント

タイトルとURLをコピーしました