汎用的なプログラミング力とは何か?
プログラマとしてある程度の経験を積んでくると大抵のコードは書けるようになってくるし、他人のコードを読んで理解できるようにもなってくる。
そして1つの言語に精通してくると公式ドキュメントを読むだけで大抵のことは理解できるようになってくる。
私もJavaを3年程やってきたので今ではAPI仕様書を読めば大体のことは分かるし、コーディングで困ることはもうあまりない。
でも言語が変わったらどうだろうか?
RubyやPythonになったら同じようにコーディングできるだろうか?
それに対して「Yes!」と言えるのが汎用的なプログラミング力だと言える。
優秀なエンジニアの頭の中
以前、私が一緒に仕事をしたことがあるTさんという人がいる。
Tさんは非常に優秀で、他の人がう~んと考えている内にすぐに答えを出してしまう。
考え方が非常にロジカルで無駄が無く、必ず何らかの根拠に基づいてるという点が特徴的だった。
「どうやったらそんな風になれるんですか?」と聞いたことがあったが、
Tさん曰く「常に考えているからだ」という。
常に問題意識を持ち、根拠になる情報源を漁り、答えに結び付くロジックを最短距離で構築しているのだそうだ。
常人にはマネできないなぁと思いながらも、思考方法はばっちり盗ませてもらった(笑
ロジカルシンキング
ロジカルシンキングというと何か難しそうに感じるのだが、実はそんなに難しくない。
Tさんに教わったのは「落としどころを最初に作っておく」ということだった。
その落としどころにトントンと話を運んでいくだけで勝手にロジカルシンキングになる。
難しいのは落としどころをどこにするか?ということと、
どんな落としどころが用意できるか?ということだ。
これができないから難しいのだが、教えられるようなものではなく、数稽古で身に着けていくしかないようだ。
これをプログラミングに応用すると、戻り値の型が落としどころになる。
型が決まれば中身は必要なだけ書けばよく、何を返すかだけをしっかりと定義しておけば問題ない。
設計力
TさんはJavaScriptとpythonを使いこなす元デザイナーなのだが、クラス設計もできるという凄腕エンジニアだった。
なのでJavaのプロダクトのクラス設計もできる。
というかその設計を手伝ったことがある。
Javaのオブジェクトが参照型であることも考慮しつつ、DBアクセスを最低限にし、フローチャートとクラス図を駆使してサクサクと設計を進める様子が圧巻だった。
その設計書はJavaを使うことが前提だったのでそのように設計した部分があるが、他の言語であればそれを考慮した設計にもできたと思う。
このようにプロダクトのあるべき姿を明確に描き、言語を問わずに設計できるのも汎用的なプログラミング力と言える。
ただこれだけだと曖昧過ぎるので、ここではデザインパターンを薦めたい。
デザインパターンは設計のカタログになっているので、言語を問わない設計力を身に着けることができる。
私自身、デザインパターンを実務で使えるようになってからレベルが上がったと感じているので、是非とも読んでほしい。
モデリング
ここいうモデリングは主に絵や図でシステムやロジックをシンプルに表現する能力を言う。
言語に関わらずロジックやシステム構成は絵や図として表現できるし、むしろそうしなければならない。
これが言語や何かに依存したものになると、途端に汎用性を失ってしまう。
つまり、言語特性を一切に盛り込まずにシンプルに絵や図で表現できる能力が汎用的なプログラミング力につながるのだ。
まとめ
- 落としどころを作るところから始まる思考のクセが大事。
- デザインパターンで言語を問わない設計力を磨く。
- 絵や図として表現する能力が汎用性につながる。
コメント