風のさざめきブログ

現代GUIプログラマのレベル分け

はじめに

Cocoa / Cocoa Touch プログラマとしての視点から、現代のアプリケーション・プログラマに不可欠だと思われる事項とそのレベルをまとめてみました。これくらいの事ができれば大抵の技術が楽しく扱えると思います。

当たり前のことが当たり前にできるように、自分に不足している部分を見つけられるようにするというのがこのレベル分けのねらいです。

ここに書いてあるレベル分けの順で教えるべきだという主張ではありません。

下のレベルの技能がなくても上のレベルの技能を持っていることも多いと思いますが、下の技能なしでは応用分野を広くもてないケースが多いと思います。

PAK88_iroenpintuyoko500

レベル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, JSON などの標準形式を利用して、データの受け渡し、保存、読み込みが行える。
  • 文字コードの変換、Base64 などを用いたデータ表現の変換、UUID などの一意な識別子の利用ができる。
  • 正規表現や SQL を利用して、パターン解析やデータベースの操作ができる。
外部コンポーネントやフレームワークの利用
  • 自分のプログラムに HTML を表示できるコンポーネントを埋め込んで、CSS で装飾して、リッチな見た目で情報を提示するなど、他者が用意したコンポーネントやフレームワークを利用して、効果的なプログラミングができる。
  • 特定の操作のために必要な情報をまとめた「コンテキスト」という用語を理解して、クラスベースではない低レベルなフレームワークを利用できる。

レベル5(専門家レベル)

いずれかの項目に該当すれば、特定の分野の専門的な技能を有していると考えられる。

応用数学
  • ベクトルの内積・外積の使い方を理解し、マウスやタッチで各種の線を自由自在につまんで移動する処理や、ゲームにおけるホーミング処理を書ける。
  • 行列演算とクォータニオンを理解し、2D/3D の回転、スケーリング、平行移動を記述できる。
  • 高速フーリエ変換などを行い、音声や画像の信号処理を行える。
画像処理
  • RGB の画素を操るためのビット演算、色空間変換やぼかし処理などを理解し、基礎的な画像処理を行い、画像認識や OpenGL のテクスチャ生成などの処理が記述できる。
インタープリタやパーサの開発
  • 独自のインタープリタを開発してゲームのスクリプトエンジンなどを実装できる。
  • 任意の形式のデータを読み込んで内容を理解するためのパーサを実装できる。
セキュリティ
  • デバイスレベルで用意されたセキュリティ機構、OS レベルで用意されたセキュリティ機構、フレームワークレベルで用意されたセキュリティ機構を適切に利用して、ユーザに安全な環境を提供できる。
アルゴリズムの解析
  • 任意のデータ構造とそれを利用するアルゴリズムについて、O記法などで計算量を推定し、適切に比較して利用の検討ができる。
  • B+木などの木構造を適切に利用して、大量のデータに対する効率的な検索を実装できる。
  • ハッシュ法によるキャッシュを、ガベッジコレクションなどのタイミング設計も含めて効率的に利用できる。
開発手法の運用
  • 最新の技術動向を常に把握し、チームメンバの能力を考慮した上で、プロジェクトに導入すべき技術を適切に判断できる。

Comments are closed.