ソフトウェアエンジニアの育成、デザイナー、サイエンティスト、アーティスト
ソフトウェアエンジニアとして成長していくためには何を学ぶ必要があるんだろう。
どのように学べば効率的に知識、スキルの幅を広げていけるのだろうか。
それを明確にすることで後進を育て社会の継続的な発展に 貢献できないか。
そんな思いで自分の経験を思い返してみる。
良いコードがどんなものか、わかりやすさとはなにかをずっとモヤモヤとしていたけど、 コードコンプリートでのPPP(Pseudocode Programming Process)の解説などを通して、高凝集、疎結合とか防御的プログラミングとかモジュール境界について自信を持てるようになった。
またオブジェクト指向によるデータと処理のまとめ方、カプセル化、ポリモーフィズムなどを知り、 UMLで表現することでより大きなモジュールを扱えるようになった。
UML だけでコーディングができるようにはならないだろうし、集約記号は単なる気休め薬にしかならないと言うような興味深いコメントと共にスケッチとして素早く意図を共有するために、優れたUML表現を身につけることには意味があると感じる。設計も、設計図通りに作らせるデザインから、現場での交流を大事にするデザインに変わってきた。ここでUMLがなす役割は少なくないはずだ。
システム全体を UML で俯瞰しながら、モジュール、クラス、メソッドが高凝集疎結合になるよう、デザインパターンに近づけたり、デザインパターンから離れるようなリファクタリングを繰り返した。スペックアウトで要求、仕様を見つめ直した。
リファクタリングを支えるテスト駆動な考え方も重要だ。
そして簡潔なコードを書くための原則、SOLID原則やDRY、KISS、YAGNIなどでコードを磨き上げるプロセス、文化について思いをはせるようになった。
ソフトウェアエンジニアリング、デザイン、コンピュータ・サイエンスを学ぶうち、論理的には説明しきれない暗黙知の世界、歴史、哲学、文化、共感、美、職人技をソフトウェアにも感じるようになった。
https://v3.pubpub.org/pub/designandsciencej
ビジネスの限界はアートで超えろ! | GROVING BASE(グロービングベース)
サイエンス、エンジニアリングは論理的な課題解決。
定型的、因果的、再現性が高い。普遍。予測可能。
アート、デザインは感情的な課題解決・問題提起ねぇ……。
形式知はわかりやすさ故に軽んじられてしまうんだろうか。
非定型的、因縁的、再現性がない部分・予測できない部分が残り続ける。
エッセンスをうまくモデル化、可視化する力。80:20の法則からも少なくとも80%はノイズだと思っていい。
VUCAが溢れている現代、形式知化を待っていてはなにも始まらない。
- Volatility – 変動性
- Uncertainty – 不確実性
- Complexity – 複雑性
- Ambiguity – 曖昧性
形式知化されなくても何故かうまくいく機会をうまく捉えて行動していくしかない。AI、データサイエンスAgile/Leanの成功が、それを証明しているのではないか。
識者に聞く ソーシャルメディア進化論 | ダイヤモンド・オンライン
暗黙知を集団で共有し、形式知化して新たな形式知・暗黙知を生み出し成果を生み出す。知識創造のプロセスを素早く回すには、みんなで行動、共感するしかない。ただそれだと形式知化はあまり促進されないんだよね。暗黙知は失われやすいから形式知化して、どうにかしないといけないはずなんだけど。
こんな感じで、わかってるんだかわかってないんだかもわからないのに、生産性向上とか、イノベーションとかって狙ってできるもんじゃないな、なんて思い知らされるところもある。無駄なあがきかもしれないけれど少しでもこの社会がよくなればいいなって、楽しみながら頑張るしかないかなーって、お話でおしまい。
エンジニア、デザイナー、サイエンティスト、アーティストってレオナルド・ダ・ビンチにはなれないけど、憧れちゃうなー。