未来のSIerの皆さんにJavaを教えることに。
最近のSIer企業さんは新人教育をしばしば外注してくださっているのですの。
皆さん、ハラショー。
新年度から、未来のSIerの皆さんの新人研修(プログラム言語Java講習)を担当することになった、すとうえいち(源氏名)が年の瀬にポエムいたします。
SIer企業さんにいる限り、研修を受ける新人さんたちの過半数は、近い将来、コードを書かずにエクセル方眼紙をいじくるようになるのだと思います。ですが、研修の場ではJavaを書いてみることを通じて、groovyなスクリプト言語魂やドメイン駆動開発(DDD;Domain-driven-development)なマインドなんかも伝えていきたいと(ちょっと真面目に)考えています。
もちろん、これはチャレンジングことなのですが、...SIer企業さんの下請けとして、エクセル方眼紙に書かれた仕様をJavaのコードに落としてきた私は、たとえ、waterfallな開発案件に従事するプロマネであったとしても、アジャイルやDDDなどの素養(理解)を持っていただきたいと思っているのです。
そんなこともあってか、年末に、ゲーム開発者からはじまった僕の開発者新人人生とこれまでに学んだり仕事で使ったりしてきたプログラム言語たちを走馬燈の如く振り返ってみたり。そうこうするうちに、アジャイルな開発文化がなじむゲーム開発をお題としたストーリー(空想科学小説)を通じ、スクリプト言語の良さやドメイン駆動開発の大切さを伝えることができたらいいなと考えるてみたり。
ということで、新人研修の「オブジェクト指向言語Java講習 《多態》の章」あたりで、DDDを知っておくことの大切さを多少熱く語ろうと思っている私が、講習後にポカンとしている、たぶん過半数の新人さんたちに、息抜きに読んでみてね、ストーリーのURIを参考リンクとして、紹介するイメージで。プログラミングを学ぶことについてのコンテンツ作成(ノベライズ)に挑戦してみることにした。今後も人間が講師をするのにはそれなりの意味があると思うのですが、一方で、講義時間というものにはどうしても限界があるわけで、コンテンツの助けを借りられるならばそれに越したことはないかと。
平成ヒトケタ、私の新人開発者時代。
そんて私ですが、何を隠そう、これまでの開発者人生はけっこう挫折&失敗続きでした。
振り返ってみるに、こんなところを知っておけば、こんなふうに開発者業界に入っていれば、という思いはいくつもあります。
12歳の時に、ゲームプログラミングに目覚めた私は、15歳の時に、(後の)日本一のSIer企業が冠スポンサーをしていたゲーム開発コンテストでは優勝できた私。高校に入り、コンテストの優勝賞金を使い果たして買い占めた何台かの8ビットマシンにて、簡易C言語とZ80アセンブラなるものを駆使した三次元描画ライブラリ作りに徹夜続きで挑戦するも挫折。その苦闘の過程で一応はマスターできた、大学教養課程レベルの線形代数の知識と力学計算の力と、初恋の英語の先生に気に入られる浪人生生活を経て、地元で一番偏差値が高い大学より偏差値が高い東京の大学に潜り込みます。が、大学にはほとんど通わずに、19歳の春にプロエンジニアとしてのデビューを目指すことになります。
アルバイト先(都営線沿線のゲーム開発会社)では、割り当てられたx86アセンブラを使っての描画エンジン作成業務に失敗。その後、渋谷の組込開発企業では、電通大出身のハッカー先生の指導を受けつつ、C言語でPostScript互換(たしか)のパーサーライブラリの実装に取り組むも挫折。
哀しみの中で、成人式で着物娘(どうきゅうせい)たちとカラオケデビューし、15歳の夜を描いた尾崎豊の唄を(音痴に)熱唱したのでした。
こんな経験を活かした話を若い人たちにできれば...と思う私でしたが気がつきました。
「あれ、当時(平成ヒトケタ時代)、新人エンジニアに割り当てる業務、難易度高すぎじゃね? 描画エンジン作りやパーサーライブラリ作成とかで、いきなりゴリゴリとコードを書かせるなんて、令和ヒトケタ時代の新人SIerさんたちには、ほとんど空想小説(SF)なのでは...」、と。そして、そんな経験を得意げに語るような人は、まんま説教好きなおっさんというわけです。。
平成の常識、これ、令和の常識ならず、なのだと。
令和を生きる人向けにノベライズ(小説化)してみた。
二十歳にして、ガリガリと書くスタイルのプログラミングにいったん挫折しカラオケも不得手と分かった私は、引きこもってひたすら小説を読むようになりました。ラノベなどは(たぶん)まだない時代、読んだのは、芥川賞作家などの純文学やSFなどです。都合1000冊以上は読んだ後、私は少しずつ社会復帰していったのてした。
まぁそんなことはさておき、令和を生きる人に向けて書くのは、私の経験を若干盛り込みつつもラノべテイストなものが良いのだろうと、年の瀬に3日ほどかけ、、さわりの部分を以下に書いてみました :
https://ncode.syosetu.com/n1175fy/
R15作品とさせていただいた、こちらは適宜ご笑覧いただくとして、以下、これを書きながら思うことになった、若者へのプログラミングの啓蒙という観点での気づきとアクションプラン(?)を書いておきます。
ノベライズしてみての気づき
①小説はプログラミング教育向きではない。
夜中に日本酒を飲みながらノベライズを考えたときに、《これはいける!!》と思ったことは、プログラム言語を学んでいたときのグクり経験。
10年ちょっと前、日本語情報が少なくScalaを学んていた私は、当時まだ低かったプログラム言語Scalaのググらビリティの低さゆえに、死はしば、ミラノのScala座関連のリンクに飛ばされることとなりました。そんなことに振り回されていた私は、Scala言語作者が構想していたであろう、オブジェクト指向アプローチへの関数型言語アプローチの導入といったコンセプトを十分な抽象度で学ぶことができなかったのでした。
☆ ↑のR15作品では、ビール好きの《すがじゅん》はじめ、この10年ほどのScalaコミュニティの様子を断片的に盛り込ませてもらっています。akkaもsparkも完全にネタですね。
で、プログラミングの大事な概念はなかなかグクれない、このことはブロクのネタとしては良いにしても、小説として表現しても、なんのこっちゃとなってしまうことに私は早々に気が付きました。
②マルチエンディングストーリーは、プログラミング教育に使えるかも。
さて、R15作品、戯れに書いたものでして、振り回されタイプの主人公ルカには、読む人が読めばすぐ分かるであろう、モチーフがあります。
アニメ化もされたゲーム『シュタインズ・ゲート』です。私はアニメを見ただけでゲームはしたことがないので、どんなものかは以下のリンクをお借りします。
『発売から9年。今更『シュタインズ・ゲート』を初プレイしてどハマりした感想』
肝要なことは、ゲームのプレイヤーに対し複数のエンディングが提供されているということです。
時間の成約がある実務の場で実装をすすめるにあたり、目の前の要求事項との将来を見据えてのリファクタリングのどちらを重視するかといった選択が求められることがあります。
しばしばいわゆる技術的負債と関わるこのあたり、戯画化すると@MinoDrivenさんのクソコード動画(=>良い意味で)、となります。
https://twitter.com/i/status/1127539251761909760
実務の場で選択を誤ると後がつらい(実は私も今辛くて、年明けまでに負債返済に取り組みます)。
ということで、ゲーム形式で、実務あるあるの事例を提供し、選択次第でこんなことになります、的なマルチエンディングストーリーはけっこう良いのではないかと思った次第。
※ 平成ヒトケタ時代に書かれたのであろう以下を見るに、マルチエンディングなゲーム自体は平成ヒトケタの頃からありふれていた模様。
http://www.remus.dti.ne.jp/~multi/column/multi.html
③プログラミング教育のノベライズゲームを作るならばWebIDEと連携して。
さて、マルチエンディング・ストーリーを作るにしても、ただカーソルキーで答えを選択するだけではプログラミング能力が身につかないのは明らかです。
"code smell"(ヤバげなコード)をIDEがガンガン指摘してくれる昨今ならば、WebIDEでプレイヤーに実際にコードを書いてもらい、コードの質を自動評価してゲームの方に講評(疑似コードレビュー)をフィードバックし、ゲームのエンディングも変えていくといったことができるではないかと。そして、ゲームをプレイしてコードを書いてみての感想をここQiitaを始めとした技術ブログ・サイトに気軽に投稿できる仕組みがあればよいのではないかと(入門者記事専用の投稿補助APIがあっても良い気がします。)。
もちろん、これらは、現時点ではただの妄想ですが。
ゲーム会社にアプローチを
さて、さて、ただ思っているだけでは絵に描いた餅。
さらに昼間はしがないバックエンドのデータエンジニアに過ぎない今の私にゲームを作ることなど無理。...ですが、今はメディアミックスの時代。たとえ妄想に過ぎない企画だって提案くらいはしてみたいもの。
ということで、取り急ぎ、↑のR15作品をゲーム開発会社さん協賛の以下のコンテストにエントリーしてみました:
※別のゲーム会社さんにも、別作品をエントリー予定。
まぁ、エントリーしてしまったからにはこれらの作品もそれなりに仕上げていきたいと考えていますが、目指すところはより良きプログラミング教育コンテンツ(例えば、WebIDEと連動したwebマルチエンディングゲーム)のためのノベライズ原作とすること。
となると、仮に企画が通ったとして、プログラミング教育コンテンツとしてクソだったとすると、ただのクソゲーとなってしまいます。
この点を思うに、プログラミング教育コンテンツの作成者としては、私は最適者とは思われない(一つの言語だけ提供すれば良いというものではないし)。ということで、例えば、以下のような言語を連動先WebIDEにリストアップしたプログラミング学習コンテンツを提供することになったら、協力してもいいよという方、いらっしゃらないでしょうか?また、「WebIDEと連動」といったくだりは当然にコンセプト実証(PoC)が必要となるかと。ほんとに作る際には一番の肝となろうこのあたり、条件次第で力貸してもいいかも、というゲーム開発関連の方、いらっしゃらないましたらお気軽にご連絡くださいませ(笑)
※以下のリスト、当然に趣味入ってます。静的型・動的型の分類も私の感覚値。
WebIDEにリストアップしたい言語① 静的型言語サイド
※あとでひとことふたこと各言語にコメントするかも。
Go
Java(8以降)### Scala
C#/TypeScript
Swift
Elm/Haskell
Nim/Objective C++
TypeScript
WebIDEにリストアップしたい言語② 動的型言語サイド
PHP
Ruby
Smalltalk
Lua
JavaScript
Perl
Python
julia
Erlang
Groovy
分類の適否はさておき、ここに列挙したような言語を、若いうちに、静的型言語系、動的型言語系のそれぞれを含む形で3つか4つくらいの言語をマスターしておけば、より良きエンジニア人生を送ることができるのではと思うのです(あ、C系言語だけでなくて、もちろん、D言語とか、アイフェル(綴り忘れた..)とか、F#とかも良い言語かと。ちょっとマイナーさんたちですが^^;)
プログラミング教育への文系的(?)な議論をする際には
小学校でいわゆるプログラミング教育なるものを受けている子供たちがスマフォのゲームをやっていることなどを目にし、これまでに、何度かqiitaにこの手のポエムを書いてきました。ですが、こうした無差別級のポエムを書くのならば、今回初参加してみた「小説家になろう」の方が適しているのではと考えました。「なろう」には、別にいわゆるラノベでなくとも、評論的なものや企画的なを書いている人もいらっしゃるし。
ということで、もし、プログラミング教育への文系的(?)なアプローチのアイデアがある方、いらっしゃいましたら、「なろう」の方にアプローチくださいませ。近いうちにプログラミング教育について、私も何か書き始めます。
また、↑に書かせていただいた《すがじゅん》さんに負けないキャラが立っている各言語の猛者をご存知で、小ネタとして提供したいから、いらっしゃいましたら、コメントなどくださいませ。また、誤字脱字やストーリー展開の問題点の指摘などもよろしければ...^^;
以上、年の瀬にプログラミング教育コンテンツのあるべき姿なるものを考えてみた、でした。