講師のつぶやき

2019-8-31(金)

OS自作!

3月に卒業した生徒さんから近況があった。研修も終盤に差し掛かっており、今はOSの自作に取り組んでいるという。同期のほとんどは大学で情報処理を学んでいるようで遅れをとっているが、なんとか食らいついているようだ。

最初は同期との差を意識するが、10年経てば、誤差の範囲でしかない。こればかりは10年経たないと実感が湧かないのでしょうがないが、今は周りを気にせず、基礎体力作りに没頭してほしい。

オブジェクト指向については授業でしっかりと教えたので、周りと比較すると理解が進んでいるようだ。

どのような業務に就くのかは聞いていないが、与えられた業務を積極的にこなし、10年後には会社を背負うくらいになってくれたらと願っている。

2019-8-16(金)

Djangoチャレンジ中

ASP.NET Core、Spring Bootに続き、ようやくDjangoに着手出来た。

ルーティングはASP.NET CoreやLaravelなどのように、ファイルに集中して記述するタイプ。ただ、Djangoの場合、プロジェクトにアプリケーションを追加していくことによってプロジェクトを組み立てていくので、アプリケーションにもルーティング用のファイルが置けるようになっている。Spring Bootのようにアノテーションによるルーティングはないようだ。私の好みはどちらかというとファイルにまとめて記述できるタイプの方だ。その方が全体としての動きが俯瞰しやすいと思う。

Djangoにもテンプレートは存在し、DTL(Django Template Language)を使うことができる。テンプレートの継承やフィルターなどは他のテンプレートと大きな差異は感じられない。

また、コマンドラインベースの作り方も、今のフレームワークらしさを感じる。メニューから辿っていくよりも、コマンドをたたいて、枠組みを作る方が私には合っている。GUIのメニューベースの作り方は初学者には向いているが、慣れてくるとコマンドの方が圧倒的に生産性は高くなる

マイグレーション機能もシンプルで使いやすそうに見える。マイグレーションも最近のフレームワークにはなくてはならないものになっている。

O/Rマッパーは今はあって当たり前なので特筆すべきところはない。今のところ、Djangoだけの素晴らしい機能というのを発見できていないが、フレームワークとしての機能としては十分だと判断している。

2019-8-8(木)

Spring Bootチャレンジ中

Spring Framework自体は随分前に触ったことがある。DI(Dependency Injection:依存性注入)の仕方が素晴らしく感銘した記憶がある。

記憶があいまいだが、Java EEのDIはSpring Frameworkを参考に作られたと思う。その当時の私はJava EEを使って多くのシステムを作っていたわけだが、Spring FrameworkのDIは素晴らしいと感じた。

Java EEでもDIが使えるようになってからは、Spring Frameworkから遠ざかっていたが、ある生徒さんとSpring Bootを勉強することになった。

私が知っているSpring Frameworkはシンプルで分かりやすい作りであったが、久しぶりに見たSpring Frameworkは肥大化し、お世辞にも扱いやすいものではなかった。Java EEの肥大化を思わせるものがあった。

おそらく、そのように感じているのは私だけではないはずだ。その証拠がSpring Bootの出現だと思う。内臓アプリケーションサーバを持ち、Ruby on Railsのように「構成より規約」に従うスタイルも、今のシステムづくりとマッチする。

PHPのLaravel、ASP.NET Coreもほぼ同じような感覚で作ることができる。正式にコース化していないが、いずれコースを開講したいと考えている。

2019-8-2(金)

LINQ再び

久しぶりにLINQを使っているが、改めてその簡潔さと、他のデータソースと同様の記述ができることに改めて感心している。

試しに、リストを3つ用意し、join句またはJoinメソッドで連結する練習をしたが、実に素晴らしい。特にjoin句はほぼSQLライクに使用できる。

group by句またはGroupByメソッドも2つ以上のプロパティを使いこなす練習をした。JoinとGroupByを自由に扱えるようになると、一挙に世界が広がるように感じられる。

5、6年ぶりに触ったLINQ、改めてC#のアーキテクチャ設計能力に圧倒された。

2019-7-23(火)

誤解してた

ASP.NET framworkとASP.NET coreの多くはクラスを共有しあっていると勘違いしてた。「プログラミング ASP.NET Core」を読んで、ASP.NET Coreは一から作り直されたものだと知った。

ということで、今までのいろんな誤解が解けてすっきりした。知らないというのは時として大きな誤解を生むことを再認識。また一歩前進!

2019-7-14(土)

WebAssemblyって気になるね

JavaScriptも面白い言語に成長しているが、やはり速度的に限界がある。JavaScriptがなくなるわけではないが、今後は、パフォーマンスを必要とする部分はWebAssemblyに置き換わっていくだろう。

C/C++、Rust、GoなどがWebAssemblyを吐き出すことができるようになっている。RustやGo言語界隈もにぎわっている。C/C++は相変わらず人気があるが、RustやGoも目が離せなくなってきている。

今すぐという訳にはいかないが、RustやGoのどちらかをコースに含めたいと考えている。この業界、いつまで経っても刺激があっていいよね。

2019-7-11(木)

多態性・デザインパターンつまみ食い

前回のつぶやきで触れたコンソールベースのネットショップアプリだが、多態性とは何か、疎結合とは何か、データソースやアプリの形態に依存しない作りにするには?など、今までは簡単なサンプルコードでしか経験していないものを、このアプリでは本格的に経験し理解できる仕組みになっている。

Blackjackなどのゲーム作りも面白いが、上記のような概念を使いづらいと感じている。特にデザインパターンを導入することでうまく整理できるものがあることを、少しだけだが実感してもらっている。

このアプリに真面目に取り組んだ生徒さんは一気にオブジェクト指向に目覚める。地味だがいい訓練なのである。参考書を100回読んでも理解できないものがすっと頭にはいる瞬間である。

2019-7-5(金)

アハ体験?

Javaの中級コースでコンソールベースのネットショップアプリを作るが、今まで勉強してきたオブジェクト指向とまったくかけ離れたコードを書く生徒さんがほとんどである。COBOLやBASICの世界に戻ったようなコードである。

しかし、これでいいと思っている。とにかく課題を形にしてみる。最初は要求したものが出来ればいいのだ。そこから徐々にヒントを出してゆく。そうすると参考書に出てきたオブジェクト指向の概念と結びつくようで、一種のアハ体験をしてもらっている。

徐々に改良を加えてゆくと最初とは見違えるようなコードに変化してゆく。まるで錬金術である。

基礎をしっかり押さえた生徒さんほど、この課題で一気にオブジェクト指向の考え方が身に着くのである。教えている私の方も感動を覚える瞬間である。「オブジェクト指向おもしれーっ」と叫んだ生徒さんの時は痛快だった。

2019-6-29(土)

とにかく、やり抜く!

プログラミングをはじめとしたIT技術は確かに習得は大変だが、継続してやり抜く力が必要である。頭を動かし、手を動かし、体を動かし、目を動かし、耳を動かす。たまには味覚も動かす。五感をフル動員できるようになることが大切である。これは決して比喩ではない。人間の脳はそれだけで駆動するのではないと思っている。脳の周りのものを動かして駆動すると日ごろから考えている。

いくら優秀な者でも、本を読むだけでは無理である。本を読んだら実践する。サンプルコードを打ち込む。意味を考える。サンプルコードをいじくり倒す。サンプルコードが原形を留めないくらいになるのがちょうどいい。モニタだけ眺めてもだめで、たまには紙に書き、ホワイトボードで頭を整理し、人と議論する。キーボードをすごい勢いで叩き、問題を解決するのはテレビや映画の話である。キーボードを叩くのがIT屋の仕事ではない。IT屋は自分のアイデアを形にしたり、お客様の要望を的確に捉え、より良い提案を行った後に、それを実現するためにコミットするのがその仕事である。

じっと待っていても理解することはできない。能動的な思考が必要である。学生のように解答が用意されているわけでもなく、自らゴールを決め、厳しいテストに耐えるものを作り上げてゆく。誰かのせいにしている暇はない。継続し、やり抜くこと。それだけのことである。

2019-6-20(木)

今宿キャンプ場

毎日、長時間教室で授業をしているため、たまに外に出たくなる。とは言っても遠出はできないので、近場をドライブすることが多い。

糸島をグルっと回った後、今宿のキャンプ場に寄ってみた。天気も上々、気温は30度超えているはずなのだが、木陰に入ると海から吹き上げてくる風が心地よく、しばらく腰を下ろして寛いだ。

本格的な夏に向けて、剪定する作業員の方がいるだけで、この綺麗な木々がもったいなく感じた。土日ともなると親子連れでいっぱいなのだろうが、まだ夏休みでもないので平日は非常に静かだ。

山登りもしたかったが、作業員の方曰く、低い山だが急な斜面も多いとのことで、途中の鉢伏観音まで行き引き返した。不覚にも途中道に迷ってしまった。標高も低く、キャンプ場から聞こえる芝刈り機の音を頼りに無事降りることが出来た。

2019-6-15(土)

Django

Pythonのフレームワーク。2005年に登場したフレームワークである。その頃から機械学習の芽が出始めたと記憶している。そう思えば、結構年季の入ったフレームワークになってきたと思われる。

私自身、最初に触ったのは2008年、海外旅行のついでに参考書を買って遊んでいたのだが、激務中だったこともあり、その後すっかり忘れてしまっていた。

ある生徒さんがWebアプリを作りたいというので、思い出した次第である。どんなフレームワークだったかも全く記憶にない。機械学習ブームということもあり、Pythonを習いたいという生徒さんが増えてきたが、ついにWebアプリもPythonという生徒さんが出てきて少々慌てているところもあるが、楽しみがまた一つ増えたと思っている。

2019-6-8(土)

Spring Boot

JavaとPythonのWebフレームワークコースを追加予定。JavaはSpring Bootを、PythonはFlaskも考えられたが、技術情報の豊富さからDjangoを選択。

Javaのフレームワークについては私も2000年当時関わっており、そのフレームワークを使用したプロジェクトは大成功したが、フレームワーク自体はその直後にオープンソースとして登場したStrutsにあっという間に負けてしまった。

そういう苦い経験もあるが、生産性を考えるとフレームワークの授業も必要か考え、9月ころにSpring Bootを、今年の冬頃にDjangoを開講予定。どうぞお楽しみに!

2019-6-2(日)

プログラムを習得したいという生徒さんは多いが、データベースやSQLを勉強したいという方は100人中1人くらいだ。

業務アプリ、Webアプリなどアプリの形態に依らず、データベースはその中心となるし、システムの価値は突き詰めるとデータの価値であったりする。

初級コースの終わりや中級コースの頃になると、それに気づきはじめる方も多く、次はSQLを受講したいとなることも多い。まずは簡単なSELECT文を書ければいいが、できればテーブル結合、サブクエリ(相関サブクエリも含め)くらいは習得しておくに越したことはないと考えている。

2019-5-29(水)

福岡に引っ越してからは食事に気を遣うようになった。いい食材を調達し、添加物のない(もしくは少ない)食事を心がけている。それ以前の食事はコンビニ中心だったが、食生活を変えることによって記憶力が格段と上がったような気がする。

会社員時代は物忘れがひどく、年齢のせいかと思っていたが、そうではないようだ。健康的な食事と適度な運動は記憶力を増進させているように感じる。みなさんも、添加物の入った食材を極力避け、適度な運動を試してください。記憶力が増すはず。(効果が出なかったらゴメンナサイ。でも健康にはなれるはずcc)

2019-5-25(土)

機械学習、深層学習については授業しないという方針だった。確かにあの時は。それはネットで授業をしている生徒さんから「人工知能を勉強したい」と言われ、人工知能を勉強するには、線形代数や微積分の素養が必要であると断った時のことだ。

もちろん、事実を言っただけだが、もちろん断る口実でもあった。しかし、1年後「先生、代数学・微積分学習終わりました。人工知能教えてください」と言われ衝撃。

まさか、そこまでやっていたとは。ここで私も火が付いた。大学以来、代数学・微積分を復習した。復習したが、大学時代は何も理解していないことにも気づいた。それだけでも大きな収穫だ。代数学に至っては考え方がまったく変わった。単なる行列計算と思っていたがそれだけではないのだ。

ということで、どうにか間に合わせ、Pythonを使ってまずは統計学を二人でやることにした。統計学も大学時代やったはずだが、意味が分からずやっていたことに気づく。

やってみるとこれが楽しい。検定・推定からはじめ、一般化線形モデルまでどうにか、一通りではあるが理解できるようになった。

で、今はscikit-learnを使った機械学習を一緒に勉強している。思った以上に面白い。このあたりのことはまた、いずれ!

2019-5-22(水)

私のkindle本のコレクションに「ぼのぼの」がある。忙しすぎてあまり読む暇ないが、読むと肩の力が抜けていく感じがする。

ぼのぼのの焦り方も好きだ。ああいう風な性格になりたいと思うのだが、30数年の社会人生活を経て、ああはなれないと諦めている。シマリスくんにもなれないが、アライグマくんやスナドリネコさんくらいにはなれるかもね。

2019-5-20(月)

関数と聞いただけで逃げ出しそうになる人も多い。再帰関数や高階関数となるとみんな寝たふりや死んだふりをする(うそ)。確かに私も最初のころは苦手だったのでわからないでもない。

しかし、世の中には再帰的なデータ構造はたくさんある。それを解くには再帰関数の方が効率的だし、分かりやすくもある。ただ、慣れてくると非再帰的表現でプログラムすることが非常に難しく感じることもある。

再帰から非再帰、非再帰から再帰への相互変換の訓練は役立つのでいずれ授業に取り入れようかと考えている。

2019-5-18(土)

諦めないで

粘る。諦める。休む。また、粘る。諦める。休む。また、粘る。難しいことにチャンレジするときはこのようなものである。最初から1発で問題を解決できるのは天才だけで、天才以外は1歩ずつ進めることである。粘り勝ちはよくあることで、すぐに諦めるのはもったいないと思っている。

2019-5-13(月)

React、Vue、AngularとJavaScriptのライブラリ・フレームワークは移り変わりとバージョンアップが激しくついていくのが大変である。

これらが流行りだした頃、jQueryは今から使われなくなると根拠のないことを言う人が多かったが、今でも健在である。

今日、Google Apps Script(GAS)を使ったアプリの問題を生徒さんと解決したが、小回りが効くjQueryはやはり重宝する。まだまだ身につけておきたい技術のひとつである。

2019-5-12(日)

Robert Sedgewickと聞いてピン来れば、アルゴリズムに明るいと思う。4、5年前CourseraでAlgorithmsの1と2を受講したが、楽しかった。

宿題は忙しいこともあり徹夜で解いていたがそれもまた楽しいと感じれた。日本語の翻訳書もあるのでアルゴリズムに興味のある人にはおススメである。

ただし、答えがどこにもないので、根気がある方向け。「ACM Karl V. Karlstrom Outstanding Educator Award」を受賞されたとのこと。おめでとうございます!

2019-5-11(土)

薄くて多くの絵やマンガがあり、難しい言葉がなく、というようにプログラミングの教科書も変わりつつある。それはそれで時代の流れとしてあるのかもしれない。

しかし、残念ながらそのような本の多くがプログラミングを習得できるほどの内容がない。ないから絵やマンガにしてごまかしているのだろう。分かったかどうかの基準を自分の中で築いていく作業こそ、匠の世界である(おっと大きく出てしまった)。いつも言ってることだが、プログラムを習得する工程は料理人、大工、スポーツマンと似ている。

基礎が大切で、その基礎が身についたかは自分の中に基準を作り、それを何回も作っては壊し作っては壊し新しい基準を作っていく作業である。海外の入門書には1000ページを超えるような入門書もざらである。海外との差が開くのもしかたない。

2019-5-9(木)

プログラミングに数学は必要かとよく聞かれる。必要であるし、必要でない。簡単な答えはないと思っている。Webアプリでフロントエンドを作るのであれば必要ないと言えるが、機械学習などの新しいアルゴリズムを考えたりするには、代数学、解析学、統計学などの素養が必要である。しかし、機械学習のライブラリを使って遊ぶだけであれば数学は必要ない。

企業システムなどであれば適材適所となるので、数学ができなくとも多くのことを任せることができる。数学に関連する部分はそう多くない。数学を得意とする者に任せれば十分である。

とは言え、私はもともと数学が好きなので、3年近く前から代数学、解析学、統計学を密かに(という割には多くの生徒さんに話しているが)勉強している。要するに自分の長所を活かせるような技術を見つけ出し、それに没頭し、その分野であれば任せてくれというくらいになればいいと思っている。

2019-5-5(日)

現在、5月5日21時半。ゴールデンウイークも残り1日。サザエさん症候群が既に始まっている方もいるのでは。10日も休みが続けば、それどころではないはず。

私の場合、憂鬱になり始めたと感じたら、すぐに明日からの仕事をどうするかという計画を立て、仕事モードにどっぷりと漬かることで回避していた。仕事のことを考えまい、考えまいとするから不安や憂鬱になるのであって、一旦仕事モードに入れば不思議なことに不安も憂鬱もなくなる。

それでもダメなときは近くにあったスポーツジムでひたすら泳いでいた時期もある。ひたすら泳ぐ、ひたすら走ることのメリットは息が整うことである。不安な精神状態のとき、人間は呼吸が浅くなる。それを強制的に深く長くすることで安定させるのである。

何事も工夫である。

2019-5-1(水)

平成31年4月30日23時から令和元年5月1日1時まで授業だったため、別の生徒さんからのSkypeチャットで令和に入ったのに気づいたのが0時20分。大晦日に年が切り替わったのに気づかなかった時以上にショック。

4月30日にJava、C、C#、Pythonをおしえた後、元号をまたいでjQueryと忙しい日だった。令和になっても、今以上に頑張って、多くの生徒さんの成長を助けたいですね。さあ、テレビを観るか。

2019-4-28(日)

昨日からゴールデンウイークに入った。いつも走っている道路もガラガラにすいており、安心して走れるけれども、寂しい感じもする。

走り始めて、5年程度経つが、毎日走り続けると意外と有名人になっていたりする。いろんな方から話しかけられるのだけれど、走っている最中はまったくわき目もふらないから、私はまったく相手の方が誰なのかは見当がつかない。そういう時は決まって「今日も元気ですね!」と言って走り去っている。

走り始めて変わりだしたのは体重だけでなく、頭の回転だ。iPS細胞の山中教授とタモリさんのNHKの番組でやっていたが、骨に振動を与えることは非常にいいという。走り出して、頭の回転が速くなったのも、このおかげかと納得した。皆さんも毎日、適度に歩いたり走ったりして頭の回転をよくしましょう!

2019-4-26(金)

人工知能が大流行だけど、そろそろ幻滅期に入りだしているようだ。幻滅期といっても否定的な意味合いも少なからずあるが、過剰な期待や興奮を通り越して、地に足をつけていく時期のことをそのように呼んだりもする。要するに技術の揺籃期から終焉期までにつけられる名前である。

人工知能と呼ぶのはやめましょうというのもよく聞く。機械学習、深層学習などが一般的になりつつある。魔法の杖ではないことに気づき、その技術を業務に取り込むための模索期に入ったということである。

ただし、メディア自体はまだ人工知能というおいしい言葉を使いたいらしく、テレビなどで聞かない日がないくらいである。

実は、機械学習や深層学習は膨大なデータが必要となる。なぜか?これは第2次人工知能ブームのルールベースに基づくものではなく、確率・統計に基づくものであるから、自ずと膨大なデータが必要となるのである。このことは自明の理であるが、そのことに今頃になって気づく企業が後を絶たない。日本は機械学習、深層学習では遅れを取ってしまったが、データを提供する技術については地道な研究がおこなわれており、期待できる分野でもある。

どうも、今日はかたい話になってしまった。次回からはもっと軽めに呟こう・・・

2019-4-24(水)「講師のつぶやき」はじめました!

新着情報も、授業雑記も更新できない状態であったため、ご心配をおかけしております。皆さんの予想に反して、私はいたって元気で、生徒さんとともに日々成長中である。

授業雑記ともなるとすぐ熱中し、ネットの技術記事みたいになってしまい、長続きしない。ということで、授業雑記も継続していくが、日々思うことなどをつらつらと書きたく「講師のつぶやき」を始めることにした。

そんなに君は手抜きしたいのかと怒られそうだが、そうでもなく、現在、私も日々進化しており、歳とともに進化速度が上がっていくような気(錯覚・妄想・耄碌)がしている。現在は、以下のことに取組中。

  • C#上級用にASP.NET Coreを勉強中。Unityはその後に勉強予定
  • 機械学習をはじめ、人工知能を呼ばれる分野には一切手を染めないことにしていたが、生徒さんの要望強く、機械学習の授業を非公式に始めた。(この経緯はいずれ)
  • 簡単なアルゴリズムを非公式だが(ここで呟いたら非公式ではないだろということは置いといて)、C言語とJavaで始めた。
  • プログラミング教室で特定のクラウドを教えるのは如何なものかと思っていたが、生徒さんの要望強く、講師の意志弱く、あっさり引き受け静的なサイトの移行などに手を染める。動的サイトとなると、ひとつ間違えば多額の請求となるため、思案中。
  • React JSも頼まれ教えていたが、生徒さんが休会中で一旦休止。うれしいことにその生徒さんは今ではIT企業の中でもリーダー格になり、仕事に忙殺されているようである。

・・・し、しまった。つぶやきなのに、つぶやいていない。また長文になるところだった。では、続きはまた。