現代 GUI プログラマのレベル分け
Cocoa / Cocoa Touch プログラマとしての視点から、現代のアプリケーション・プログラマに不可欠だと思われる事項とそのレベルをまとめてみました。最低これくらいできれば大抵の技術が楽しく扱えると思います。
ここに書いてあるレベル分けの順で教えるべきだという主張ではありませんので、ご注意ください。
なお、下のレベルの技能がなくても上のレベルの技能を持っていることも多いと思いますが、下の技能なしでは応用分野を広くもてないケースが多いと思います。点数化するならば、レベル1が4点、レベル2が2点、レベル3は1点、レベル4が2点、レベル5が1点の10点満点くらいでしょうか。
「当たり前のことが当たり前にできる」というのがこのレベル分けのねらいです。
ご意見等あれば、ぜひ Twitter @sazameki までお寄せください。
レベル1(入門者レベル)
環境が整えられた状態であれば、与えられたプログラムを実行できる。簡単なものであれば、特定の機能を実現しているコード箇所を特定して、思い通りの動作に修正できる。
- 基本のプログラム記述
- int 型と文字列型のリテラルや変数を使い、四則演算や文字列の連結、比較などの操作ができる。また必要に応じて if 文、for 文、while 文、switch 文を使った制御を記述できる。
- インデント
- 制御構造の内容に応じた適切なインデント処理を行うことの重要性を理解できる。
レベル2(初級者レベル)
有名な環境であれば、自分でプログラミング環境を用意できる。問題点があれば主に printf() デバッグで修正できる。
- 関数・メソッドの利用
- 関数(メソッド)を利用して、1つの処理を複数の段階に分けて記述できる。また複数の関数を組み合わせて、必要な処理を実現できる。
bool 型の戻り値か int 型のエラー番号の戻り値で、エラーを処理できる。 - 基本のデータ処理
- bool 型の変数を利用した動作記述ができる(AND, OR, NOT の論理演算ができる)。
文字列と数値を相互に変換できる。区切り文字で文字列を分割したり、先頭の文字をチェックしたり、部分文字列を取り出したりすることができる。
また配列や動的配列を利用して、複数の要素を管理できる。
任意のデータを OS のファイルシステムに書き出したり、読み込んだりできるが、パスの取り扱いが複雑な場合には対処できない。 - 基本の GUI 処理
- ウィンドウ上のビューに対して、直線や矩形や画像などの簡単な描画が行える。また、ボタンやスライダなどをビューに追加し、操作に合わせて内部情報を変更できる。
レベル3(中級者レベル)
コンパイラが出力する問題点を適切に修正することができる。キーワードを適切に判断して、インターネット検索で多くの問題解決ができる。
- オブジェクト指向の利用
- クラスを利用したシステム設計が行え、UML を用いた設計記述を理解できる。また変数や関数などに、適切な名前を付けられる。
何らかのコーディング規約に則ったコードが書ける。
エラーオブジェクトの取得や例外処理により、より詳細なエラー処理が記述できる。 - より細かなデータ処理
- 配列と連結リストを適切に使い分けることができる。辞書を利用して簡易なデータベースを実現できる。
パスや URL を環境依存にならないように注意深く扱える。
対象システムに用意された方法で、動的なメモリの確保と解放を間違いなく処理できる。 - 基礎の数学
- 三角関数を利用した計算が行える。ベジェ曲線のクラスを利用して思い通りの曲線を描画できる。
- アニメーション記述
- タイマを用いて、アニメーションを実現できる。
Core Animation などの技術を使い、「この絵を5秒でココに動かしたい」という形式でアニメーションを記述できる。
フレームベースのゲーム作成環境においては、状態遷移によってアニメーションを記述できる。 - テーブルの表示
- 複数の項目を GUI のテーブルにまとめてユーザに提示することができる。
- GUI 設計
- さまざまな環境で利用できる GUI コントロールについての知識をもっており、ペーパープロトタイピングなどを利用して、ユーザに対するより良いインタフェースを考えることができる。
- デバッガ・計測ツールの利用
- デバッガ、計測ツールや静的解析ツールなどを適切に利用して、プログラムの問題点や改善点を発見し、解決できる。
レベル4(上級者レベル)
リンカが出力する問題点を適切に修正することができる。
- オブジェクト指向開発手法の理解
- UML を用いてシステム設計を記述でき、拡張 BNF を用いてメッセージ通信などの形式を記述できる。
ソースコード管理システムを利用したり、テスト駆動開発に基づいた効果的な開発ができる。デザインパターンの用語を理解し、同レベルのプログラマとクラス設計について意見を交換できる。
プログラミング言語の特性を理解し、ターゲットの言語に合わせた設計ができる。
Key-Value コーディングなどを用い、MVC を分離した保守性の高いプログラムを書くことができる。
リファクタリングを安全かつ適切に行い、外部からの見た目を変えずに実行速度や保守性を向上させることができる。 - 問題の把握とスマートな解決
- システムに対して意識的・無意識的に求められている事項を理解し、それを言葉や図によって他者に伝えることができる。またその要求事項と矛盾のないように、開発対象の OS などに用意されている、ヒューマンインタフェースなどのガイドラインに沿ってシステム設計・GUI 設計が行える。
- より細かなアプリケーション記述
- スクロールビューを利用して、画面に収まりきらない大きなデータを効率的にユーザに提示できる。
XOR の論理演算が理解でき、アプリケーション内で応用できる。 - アプリケーションの動作の理解
- イベント駆動の仕組みやリスナの概念を理解し、適切なメモリ管理とタイマ処理が行える。必要に応じて、描画システムに独自のダブルバッファリングの機構を組み込むことができる。
また、タスク処理やスレッドクラスなどを利用して、効果的な並列処理が記述できる。 - データ通信
- バッファリングの重要性を理解した上で、パイプとストリームについて理解しており、TCP/IP を基本としたサーバ・クライアント型のネットワーク通信やアプリケーション間通信が行える。また XML や Plist などの標準形式を利用して、データの受け渡し、保存、読み込みが行える。必要に応じて、文字コードの変換や、Base64 などを用いたデータ表現の変換や、UUID などの一意な識別子の利用ができる。
正規表現や SQL を利用して、パターン解析やデータベースの操作ができる。 - 外部コンポーネントやフレームワークの利用
- 自分のプログラムに HTML を表示できるコンポーネントを埋め込んで、CSS で装飾して、リッチな見た目で情報を提示するなど、他者が用意したコンポーネントやフレームワークを利用して、効果的なプログラミングができる。
特定の操作のために必要な情報をまとめた「コンテキスト」という用語を理解して、クラスベースではない低レベルなフレームワークを利用できる。
レベル5(専門家レベル)
いずれかの項目に該当すれば、特定の分野の専門的な技能を有していると考えられる。
- 応用数学
- ベクトルの内積・外積の使い方を理解し、マウスやタッチで各種の線を自由自在につまんで移動する処理や、ゲームにおけるホーミング処理を書ける。行列演算を理解し、2D/3D の回転などを記述できる。高速フーリエ変換などを行い、音声や画像の信号処理を行える。
- 画像処理
- RGB の画素を操るためのビット演算、色空間変換やぼかし処理などを理解し、基礎的な画像処理を行い、画像認識や OpenGL のテクスチャ生成などの処理が記述できる。
- インタープリタやパーサの開発
- 独自のインタープリタを開発してゲームのスクリプトエンジンなどを実装できる。また、任意の形式のデータを読み込んで内容を理解するためのパーサを実装できる。
- セキュリティ
- デバイスレベルで用意されたセキュリティ機構、OS レベルで用意されたセキュリティ機構、フレームワークレベルで用意されたセキュリティ機構を適切に利用して、ユーザに安全な環境を提供できる。
- アルゴリズムの解析
- 任意のデータ構造とそれを利用するアルゴリズムについて、O記法などで計算量を推定し、適切に比較して利用の検討ができる。
B+木などの木構造を適切に利用して、大量のデータに対する効率的な検索を実装できる。
ハッシュ法によるキャッシュを、ガベッジコレクションなどのタイミング設計も含めて効率的に利用できる。 - 開発手法の運用
- eXtreme Programming (XP) や UML などをより有効に活用するための ICONIXプロセスなど、最新の技術動向を常に把握し、独自のプロジェクトを進める上で導入すべき技術を判断できる。

モバイルページ向けの画像をリアルタイムで作成するために「lsyncd」を使ってみた – GIGAZINE と4件… | プログラム、いろいろ。
2010年7月4日 at 04:40
[...] – SH2の日記 プログラマーだけど、なんか質問ある? : 社会生活VIP現代プログラマのレベル分け ? Sazameki Lab40時間ゲームプログラミングコンテスト – 筑波大学 Linux User Group [...]
links for 2010-07-03 « 個人的な雑記
2010年7月4日 at 07:04
[...] 現代プログラマのレベル分け « Sazameki Lab (tags: programming) [...]
プログラマーのレベル分け
2010年7月4日 at 15:11
[...] レベル分け [...]