もずくです。
長かった(そして誰が読むんだよという)このシリーズも最終回です。
ちょっと長いです。
前の大学はなんだかんだあって逃げるように辞めてしまいました。そのことを以前にALISで記事にしたような気がするのですが、見つかりませんでした(なぜ)。
ということで、現在は文理融合というか実質ほぼ文系の学科でプログラミングを教えています。研究はほとんどしておらず、教育メインです。
いまの大学に来てから、私のプログラミング言語の選択基準が「理解しやすくてモチベーションを維持しやすいこと」や「基礎の範囲でも実用的なものづくりができること」になりました。
そういう観点から、1年後期に開講している「プログラミング入門」という科目(学生が最初に受講するプログラミング科目)ではProcessingを選びました。
Processingは背後でJavaが動いているのですが、C言語に似たシンプルな文法で、図形やアニメーションが描画できるので出力がわかりやすいです。ちょっとしたアニメーションなら初心者でも半年勉強すれば作れるようになるでしょう。
そして、5年目の今年度から、Processingをp5.jsに変更しました。p5.jsはProcessingのJavaScript版なので、できることはほぼ同じです。興味のある人はトライしてみてください。
Processingをp5.jsに変更したのは、p5.jsのウェブエディタが使い物になるようになったということもありますが、「プログラミング言語を増やすと学生が混乱する」「できるだけ同じプログラミング言語を繰り返し学ぶ」ということが理由です。
私の授業では3年生でJavaScriptとVue.js(JavaScriptのフレームワーク)をやります。Processingの文法はJavaScriptとは微妙に違って混乱を招くので、JavaScriptで統一しました。(とはいえ、他の先生の授業ではJavaをやっているのでいずれにせよ混乱はしているのですが)
実のところ、2015年にいまの大学に移ってくるまで、JavaScriptなどプログラミング言語ではない…と思っていた古い人間の一人でした。しかし、ウェブ技術の授業をするにあたってJavaScriptを調べてみると、ちょうどES2015(JavaScriptの大きな仕様刷新)もあって、当時は一番熱いプログラミング言語といってもよいほどでした。
フロントエンドエンジニアという仕事が生まれていて、ウェブデザインをする人にもJavaScriptの知識が要される時代。うちの学科の学生には本格的なシステムプログラマや組み込みプログラマに興味のある人は少ないのですが、ウェブやスマホアプリのデザイン・開発には興味のある人が多いということで、JavaScriptに目をつけました。
このJavaScript、ブラウザ上で動作する唯一のプログラミング言語ということで、他の言語に追随を許さない「The 王者」です。iOSの開発にSwift、Androidの開発にKotlin/Javaとプログラミング言語を使い分けないといけない時代ですが、どちらのスマホでも動き、さらにWindows/Mac/Linuxでも動作するWebアプリケーションは汎用性が高く、卒研で扱うのに便利です。
さらに、ウェブ・iOS・Androidのいずれでもネイティブに動作するクロスプラットフォームなプログラミング開発環境として不動の地位を築きつつあるReact NativeもJavaScriptで記述します。ちなみに、ALISのUIにはReactの対抗馬であるVue.jsが使用されています。
とにかく、いつの間にやらコンシューマ向けアプリに関してはJavaScriptが王様として君臨しつつありました。
それから、私がいま必要に迫られて使用している言語にPythonがあります。研究はもうしたくないのですが、さすがに何もしないわけにはいかないので、共同研究として機械学習のプログラムをちょっと作ったりしています。Googleの機械学習ツールであるTensorFlow(をもうちょっと簡単に使えるKerasというAPI)をPythonから使っています。
Pythonといえば、アメリカの有名大学のプログラミング教育に使われている言語No.1の座にあり、各種のプログラミングランキングでもJavaScriptもしくはJavaに次いでNo.2の座に躍り出ています(どの分野のランキングかによってトップがJavaScriptかJavaか変わるのですが、そのいずれでもNo.2につけているという意味です)。ALISでもまずPythonから勉強する…という人たちが多く、2021年には生誕30周年を迎えるほど古いプログラミング言語とは思えない躍進ぶりです。
ただ、個人的にはPythonは好きではありません。いまはPythonのバージョン3にほぼ移行してトラブルは減りましたが、長らく互換性のないPython バージョン2との共存問題があり、開発環境を整えるだけで苦労させられました。言語の仕様も古く、JavaScriptと同様、オブジェクト指向な記述とそうでない記述が混在しているような印象です。そしてなにより、私の推し言語であるRubyと完全に対立する位置にあり、その勝負に勝利してRubyを駆逐しつつある…というのがなんだか悲しいのです。
その他、Unityというゲームエンジンをゼミで使うこともあり、Unityで採用されているC#にもわずかに触れています。C#は、C++に代わってWindowsでのアプリ開発のメイン言語でもあります。
使用感ですが、C#は悪くないですね。JavaとC++の問題点が十分明らかになったあとに出てきた言語とあって、比較的シンプルでわかりやすい文法だと思います。
2000年以降に登場したモダンな言語、WindowsのC#(2002年)、AndroidのKotlin(2011年)、iOSのSwift(2014年)はいずれもプログラミング言語としては概ね完成されていて、初心者が使うのに特に問題になる点は無いように思います。しかし、OS毎にここまでプログラミング言語が分散してしまうと、文系の学生にはなかなか辛いものがあります。どれか一つを選べ…と言われると、いずれでも動作するWebを押さえておくのが教育機関としてはまず大事なのでは…というのが私の考えです。
なお、国内では、いまなお断トツでJavaの需要があるそうです。上記のKotlinはJavaの完全な上位互換言語でJavaと混在して書くことができ、なおかつJavaの開発環境を整えたら自動的にKotlinも使えるようになるので、実質的に障害となっているのは「新しいことを覚えたくない年寄り」だけです。各社には積極的にKotlinに移行していただきたいものです。
とまあ偉そうなことを言いつつ、自分自身、KotlinもSwiftもC#もほとんど触ったことはありません。ネットサーフィンして文法を調べては「ほお~」と感心しているだけです。
さて、話をJavaScriptに戻します。
JavaScriptは古い言語です。ES2015という仕様刷新でかなりモダンな言語に近づいたとはいえ、大規模な開発には不向きということで、実際の現場ではAltJSと呼ばれるJavaScriptの代替言語が一般的には使われているようです。AltJSはそのままではブラウザ上で動かないので、ターミナル(黒い画面)でデプロイという操作をしてJavaScriptに変換する必要があります。
AltJSにはいくつかありますが、2020年現在、Microsoftが主導して開発するTypeScriptがデファクトスタンダードです。JavaScriptを置き換える!と意気込んでDartという言語を発表したGoogleが、結局Dartよりも先にTypeScriptをGoogleの標準開発言語に追加したことからも他のAltJSに対して頭一つ抜けた感があります。
私は現状、素のJavaScript(○○JSが多過ぎることを揶揄してVanilla JSとも言われます)を授業では採用していますが、p5.jsが対応次第、全体的にTypeScriptに乗り換えるつもりです。
それからAltJSではないのですが、JavaScript(およびTypeScript)でフロントエンド開発をよりやりやすくするためのフレームワークがあります。そのデファクトスタンダードといってよいのが前述したReactです。しかしReactはFacebookが主導して開発している言語ということで、私は嫌いです(どーん)。
もう少しちゃんとした理由として、Reactは本格的なプログラマ寄りの設計なので、文理融合系/文系の学生にはちょっと難しいかな…ということがあります。後述するVue.jsに比べると、Reactはがっつりプログラム!という感じになります。Vue.jsのほうがHTMLの中にプログラムを埋め込んでいく感じなので、コーダー(HTMLやCSSを書く人)には馴染みがあります。
JavaScriptのフロントエンドフレームワークとしては、Reactの他にVue.jsとAngularが代表的です。AngularはGoogleが開発したものですが、評判はあまりよくない感じ(もう使いたくないという人の割合が多い)です。
一方、Vue.jsはEvan Youという人が個人開発したもので(もちろん今はオープンソースでチーム開発されています)、コーダーやデザイナーに優しい記法になっています。中国版AmazonであるAlibabaがバックに付いていると思われます。中国?!と怪訝な顔をするなかれ、10億人を超える人間がいるのですから、天才も日本の10倍います。Even Youさんは好感の持てる人物だと思っています。
私の授業では、3年前期にJavaScriptを教えたあと、3年後期にVue.jsの基本を教えています(私も基本までしかわかりません)。Vue.jsとWeb APIを使うと、結構それっぽいウェブアプリを作ることができます。
あと、JavaScriptのフロントエンドフレームワークで私が注目しているものにSvelteがあります。Githubのフロントエンドフレームワークランキングで2019年にVue.jsを抜いて一気に2位の座に位置しています。コンセプトとしてはVue.jsと同じで、コーダーに馴染みのよいスタイルです。
Svelteを動かすにはターミナル(黒い画面のやつ)が必要になるのですが、ReactもVue.jsも本格的なことをしようとするとターミナルが必須なので、いずれにせよ授業で取り扱うようにしたいと考えています。
さらに現在、以下のやりとりを通して私の中でにわかに盛り上がっているのがFlutterです。
Flutterは、Dartというプログラミング言語を使用したフレームワークです。もともとiOS/Androidのネイティブアプリを単一のソースコードから生成するために出てきましたが、2019年にウェブアプリとデスクトップアプリにも対応していくことが発表されました。
学生が「アプリを作りたい」といったとき、それは「=スマホアプリ」です。デスクトップアプリでもなければWebアプリでもありません。しかし、私にはKotlinやSwiftをきちんと教えられるほどの知識もないので(身につける気も無し)、Webアプリでの実装にしてもらっています。そこにAndroidもiOSもウェブも組み込みも全部同じソースコード(プログラム)で対応するよ!というFlutterが出てきたので、いまかなり心惹かれています。
Flutterで使われるプログラミング言語であるDartは、元々はブラウザ上のJavaScriptを置き換える目的でGoogle主導で開発されたもので(いまは置き換えは断念)、モダンなプログラミング言語の特徴はあらかた備えています。ウェブアプリを開発するときにもHTMLやCSSを直接書く必要がなく(隠蔽される)、ボタンやフォームなどをFlutterの文法に従って記述・配置していきます。そうなると、HTMLやCSSを授業で習得した意味が薄れてしまうのがちょっと悩みどころですね。JavaScriptもやらない…というわけにはいかない言語なので。。
とにかく、自分でFlutterを使ったアプリを一度作ってみないとなんともいえません。がんばります。
以上、プログラミング遍歴についていろいろと書きましたが、現在は、どのプログラミング言語が良い/悪いというよりも、学生がものづくりのために如何に自主的に勉強してくれるプログラミング体験を提供できるかがポイントだと思っています。
自主的な学びがないと、私が授業形式で教えてもおそらく右の耳から左の耳にほとんど抜けていくと思うからです。その部分をどう強化するか、現在も思案中です。