先日、研究室の学生と話していた折に、知っておかないと、一人前のプログラマとしては恥ずかしいかなという知識はなんだ、という話をしまして。
とくに Cocoa プログラマとしての視点で、ものすごい沼田の主観でちょこちょこっと挙げてみると。。。
まず当たり前の基礎教養として、
- インデント
- 定数の作り方
- 変数や関数の名前の付け方(名詞、形容詞、動詞、副詞の適切な利用)
- BOOL 値の処理(ド・モルガンの定理とか)
- エラー処理(int や BOOL の返り値)
- 文字列処理(比較、切り抜き、数値との変換)
- クラス
- 可変長配列(動的拡張や連結リストについての理解)
- 辞書(マップ、ハッシュ表ともいう)
- 状態遷移
それより、もうちょっとだけ複雑なところで、
- ビット演算
- 数学(三角関数、内積、外積)
- 文字列処理(正規表現)
- 文字列処理(多言語(UTF8 とか、_tcs 系の処理とか))
- 木構造の処理(生成と探索)
- マルチスレッド処理
- リフレクション(関数や構造体のポインタ処理を含む)
- MVC モデル
- 永続化
- XML の処理
- パイプ処理
- コンパイラ(とリンカ)、インタプリタ、ヴァーチャルマシン。
- データストリームのバッファリング(Java で言うところの BufferedReader の必要性。C言語で言えば、read() に対する fread() の必要性)
- テスト駆動開発
- バージョン管理システム
といったことの知識は必要ですよね。それからC言語に特化したお話ですが、
- 構造体
- ハンドラを使った関数の処理
- メモリの動的確保(C99 の記法を含む)
- ポインタの活用
- プリプロセッサ(#if とか defined とか #error とか)
Java などに特化したお話で、
- イテレータ(いわゆる foreach 文)
- 例外処理
- ガベッジコレクション
- プロトコル(インタフェース)
- UML(とくにユースケース図、クラス図、シーケンス図、アクティビティ図)
- デザインパターン(とくに Singleton、Factory Method、Composite、Observerあたり)
も重要かと思います。
インタフェースと言えば、かなり Microsoft の技術に偏っている感は否めないですが、COM (Component Object Model) についての知識があることも望ましい。
ウィンドウベースの UI 付きのアプリケーションを作るために、イベント駆動の概念も知っておきたいですね。イベントのポーリングとかディスパッチとか。再描画の最適化についても知っておきたい。
永続化をより深く考えると、データベース、とくに RDBS の知識も必要になってきて、
- SQL 文
- OR マッピング
といった知識は欠かせませんし、それを手軽に表示することを考えると、
- HTML
- CSS
- JavaScript (AJAX)
といった知識も必要になります。いわゆるエンタープライズ環境。ここら辺で、何かひとつスクリプト言語を知っていることも求められそう。
あとネットワークをより深くいじろうとすると、
- IP(アドレス、TCP、UDP)
- ソケット通信
- 拡張BNF記法
- デバイスやネットワークも含んだファイルという概念
- telnet の使い方
といった知識があることも望ましい。
ざっとこんなところでしょうか。
少なくとも、私が会社を立ち上げるとして、プログラマを雇うのであれば、これくらいの話題には全部普通に付いて来れる人でないと困るかな、と思います。
ま、それだけでもダメで、プログラミングに関する哲学があることが、いちばん重要だとは思うんですが。これは、ソースコードが一行も出てこないプログラミングの本を何冊読んだことがあるか、と言い換えても、割と間違っていない気がします。私がプログラミング系の会社の面接官であれば、読んだことのあるプログラミング関係の本を挙げてもらいますね。
コメントを書く