岩手県立大学のenPiT2020講義に参加
アプリ系全般の開発を担当している菅原です。
去年も参加した岩手県立大学のenPiT2020 システムデザイン実践論に、今年も連携企業として参加しました。
そこで学生達に伝えた知識・技術、逆に私が改めて感じさせられた大切なことについて紹介します。
システムデザイン実践論
このシステムデザイン実践論では、連携企業数社から提供される製品・開発ノウハウを学生達が使用して、活用アイデアを考え、議論し、それを実際に開発してみるという、企画や開発の流れを実践的に体験する内容となっているものです。
最前線の現場で使われている開発テクニックに生で触れられるので、学生達にとってとても刺激のある講義です。
今回で4回目の参加になりますが、毎回参加するたび、私も学生の頃にこういう講義を受けてみたかったなぁと思わされます。
今年の提供技術
弊社から提供したものは昨年度同様「センサ付きビーコン」です。これは任意のセンサデータをビーコンデータに載せて発信できるようにしたものです。
また、今年は弊社若手エンジニアの細川も連れていきました。彼が持つ組み込みLinuxやWi-Fi周りの制御ノウハウを活かせるよう、「Raspberry Piを使ったBLE/MQTTゲートウェイ」も提供技術として新規に追加しました。
ゲートウェイのプロトタイプ開発をするならAndroidスマホを使って開発させてもよいのですが、より本物っぽいシングルボード端末が使われるシステム構成も見てほしいと思ったので、今回はラズパイを選定しました。
開発言語は主にPythonを使用する作戦でいきました。学生の中にもPython経験者はチラホラといましたが、あくまでデータサイエンスの文脈でPythonを利用している方が多く、こうしたソフトウェア開発でPythonを使うのは初めてのようでした
アイデア構想演習
今年の講義では、「自分達の大学生活を豊かにするためのシステム企画」がロールプレイテーマとして設定されました。
これを学生たちに考えてもらった結果、「学生が自由に参画できるIoTデバイス・ネットワークの構築」を企画することになりました。これは、大学構内にBLE/MQTTゲートウェイを大量に設置することで、任意のIoTセンサデバイスのデータを収集できるようにし、学生達自身で自由にIoTアプリを構築できるようにするという構想です(ロールプレイですので費用面は多少目は瞑っておいて・・・)。
このネットワークの利用例として、構内の空調状態・人の密集度・駐車場の空き状況や路面凍結状況といったデータを可視化する案が出ていました。
特に、この「空調状態」「人の密集度検知」というアイデアは、かなり多くの学生から発案されました。日常での密な状況をできる限り避けたいという今年の世相がよく現れている現象だと思います。
開発演習
上記アイデアを実現できるよう、学生達とソフトウェア構造の設計・実装を行いました。
私は毎年、Visual Studio Code + Markdown Preview Enhanced + PlantUMLの環境で設計資料を記述していく様子を見せています。Markdownテキストの中にPlantUMLコードをそのまま書くことができるので、UML図の設計情報を日本語テキストで補いながら記述していくことができ、かつ、ファイル保存と同時に単一HTMLファイルとして自動出力させることもできます。全て普通のテキストで書かれるためgitとの相性も抜群であり、作業効率性も保守性も両立できます。
Pythonの開発ではPyCharmを使わせました。データサイエンス文脈ならばJupyter notebookなのでしょうが、大規模なツール・システム開発を行う場合はリファクタ機能やテスト実行支援のサポートが重要なので、JetBrains社のIDEが最適です。
また、最近のPythonの非データサイエンス系のプログラミングではType Hints文法が浸透してきているので、それも学生達に紹介しました。
開発を教えて改めて感じたこと
人に何かを教えると、自分も新たなことに気づくことが度々あります(ですから、私は教えるという行為が結構好きです)
今回感じた2点について紹介します。
兵は巧速を尊ぶ
批判するつもりで書くわけではないのですが、この講義ではスケジュールの都合もあって、開発演習に割ける工数が2、3日ととても少ないです。この数日でどれだけの成果を出せるかが勝負になります。
これは極端な状況にも思えますが、実際の日々の業務でも、迅速に、かつ、手戻りが出ないよう確実に作業することが求められています。
そのために、作業効率がいいツールを使いこなし、正しいやり方で設計し、細かく動作テストを積み上げていけるようにしていくのがプログラマの使命です。そして、それらの方法は日々世界中で進化が続いており、1つのやり方に固執することなく絶えず勉強を続けていかなければなりません。
「兵は拙速を尊ぶ」と言いますが、これはプログラミングには当てはまりません。下手なやり方を取って数日後・数ヶ月後に痛い目に遭うのがプログラミングの世界です。かといって、全てを上手くやろうとして作業が遅くなってはいけません。
巧速であり続けるために、滞りなく、様々なテクニックを開発・導入していきたいものです。
自分が知っている虹は本当に7色なのか
私が好きな言語学の話に、「人間が認識する虹の色の数は、自分が使ってる言語の影響を受ける」というものがあります。普通、日本人は虹を7色だと認識していますが、ある言語圏では5色で、また別の言語圏では8色に見えているらしいです。
逆に言えば、自分がもし8色に分類できる言語を習得した場合、これまで見えていなかった色を意識して区別できるようになると考えられます。
これと同じことがプログラミングでも通用すると私は考えています。
具体的に言えば、Pythonのメソッドの構文に出てくるself
は、C言語でのオブジェクト指向実装方法の1つとしてそのままC言語で活用することができます。
C言語しかまだ知らないような方がPythonのような他言語を学ぶと、自分が意識できるプログラミングにおける「色」を増やすことができ、元々の母語であったC言語でもその「色」を使うことができるようになるのです。
プログラミングを学んでいるとこういった関係性に出会うことがあり、ちょっと不思議で楽しい気持ちになります。なので、これからもより多くの言語を学習し、様々な考え方を習得していきたいと感じました。
以上、システムデザイン実践論への参加報告と、その所感についてでした。