ハード増設に見る知識と経験


先日、職場の同僚とメモリの増設を行いました。
他部署にメモリが4つ(256MB×4)余っている情報を同僚が嗅ぎ付けてきました。
「これは、勿体ない」という事でリソースをフルに使い倒す我々が拝借です。( ̄+ー ̄)

メモリを2つずつ、2つのPCに入れます。
それぞれパラで動く事にはせず、最初に一つのPCに入れる事になりました。
まずは同僚のPCのメモリ増設です。

取りあえず、PCカバーを外してみると何やらゴチャゴチャ・・・
一応、自作PCの経験は二人ともありますが、自作PCマニアでは無く、どのパーツが必要か理解している程度です。

そんなレベルなので多少回り道しました。
メモリを挿せるスペースを確保するだけなのに、CPUクーラーのファンを外したり、筐体の前面部分を外したりして、無駄な作業をいくつかやってしまいました。
結局はPC筐体のベイを外すだけでメモリの増設は完了!30分も格闘しました。

いったん解れば2台目は簡単なものです、私1人で5分ほどで2台目のメモリ増設は完了しました。
1台目の失敗を教訓にして、2台目の作業はアッと言うまに終わりました。(その後、PCあんまり速くなってないけどバルク品だからかな!?)


2回目のトライ時に物事が容易に進む事はソフト開発でもよくある事です。


以下に新人に対して出されるような課題があったとします。

画面表示に対応するする為にエクセルで生成されたCSVデータの行データを文字データに分割し、文字データを返す関数をVB言語で作れ。

  1. ファイルストリームを開く
  2. 行データを取得
  3. 行データを分割して文字データに分解
  4. ファイルストリームを閉じる
  5. 文字データを返す

この実装作業を一度でも経験してればVB言語でファイル操作、文字列操作に関しては以前より何倍も早くできるようになっているでしょう。
そして規模は違えどシステム全体を組む時にも同じ事が言えます。

VBの課題であろうと、メモリ増設であろうと一度手順を覚えてしまえば、次は非常に簡単に物事を成しえます。
これが経験です。


最近のメモリの規格は、DDRDDR2が混在しており、今回増設するのは旧型のDDRである。もちろんマザーボードが対応していないといけない。
マザーボードチップセットも増設分のバイト以上に対応している必要がる。等など・・・・・
また、VB言語ではファイル・文字列を操作する時には最低限のファイル操作の仕方・文字列操作の仕方を学ばないといけません。

VBの課題であろうと、メモリ増設であろうと勉強して覚えておくべき事があります。
これが知識です。


私は勉強する時に、まず目的を明確に洗い出します。そしてその目的に対しての必要な知識レベルと経験レベルを設定する事を心がけてます。

    知識が無くても、メモリを増設する工程を覚えて増設するのは容易に出来ます。
    知識が無くても、VBのサンプルをいじくり回してファイル、文字列を操作す事は出来ます。

しかし、ちょっとしたトラブル、もしくは応用に発展した時には何も手がでないでしょう。
経験値だけでは限界があります。

そして、
    メモリを増設するのに論理回路の勉強はしません。
    VBで論理計算を勉強はしません

必要以上の知識はオーバースペックです。メモリ増設とVBを学ぶにはあまり役に立ちません。*1


以前、私は、本でPG言語の構文を理解して知識を増やしました、そのPG言語が出来る気になってました。そして、実務ではコテンパンにされた事があります。
全く経験値がなかったのです。おまけに無理やり知識を入れ込んだ結果、誤った概念を覚えたりしました。
アセンブラの勉強をする時にシリコンの仕組なんか勉強してました。コレは全く意味がありませんでした。
バランス良く勉強すればもっと楽だったでしょう。

もし、新人の人が新たに技術を身につけるならば以下の手順を踏んでください。

  1. 目的を徹底的に分析して分解
  2. 分解した目的の優先順位を決める(優先順位を決めるのはレベルからも考察する)
  3. 知識の設定
  4. 経験値の設定
  5. 実行

分析が間違っていないか、上司に指示を仰ぎましょう。
イケテナイ上司ならばネットで相談しましょう。(やる気があればみんな親切なはずです。)
知識と経験を同時に上げていきましょう。知識のみを先に仕入れるのはナンセンスです。*2

ただし、上記の手段はあくまで一般論です。
Geekになる才能がある人間はソースを書きなぐり、必要な時に必要な情報をgetしていきます。*3
イケテルGeekな上司は、そんな事を意識せずにダイナミックで洗練されたソースを書けるようになったかもしれませんが、凡人の教育は苦手です*4

こんな偉そうな事をほざいてますが・・・
私は、オブジェクト指向ってのが良く解っていません。
Rubyでテキスト操作する簡単なソフトを作ったり。C++の仕組みを理解して簡単なアプリを作った事はあります。
しかし、「嗚呼、これがオブジェクト指向なのか!?」って思い、何かを掴んだ感触は、未だ未体験です。

オブジェクト指向はソフト技術者として最低限の知識と思ってます。
私は、コレから本格的にオブジェクト指向を学んでいくつもりです。

もっと知識と経験を積む必要があります。
あと、半年後には自信をもって「オブジェクト指向の概念は理解できてますよ。」と言うつもりです。

ガンガレおれ!!

意識して知識と経験のバランスを取る為にブログにしてみました。

みなさんどうやって勉強してますか?何か間違いがあればドンドン突っ込んでください。

*1:この二つはプログラマーとして最低限のたしなみとは思ってますけれどね

*2:そうですオレはナンセンスなんですw

*3:頭の仕組が違います。

*4:まれに両方こなす凄い人もいらっしゃるようですが、オレは未遭遇。