マエカワの備忘録的な何か

思い立ったが吉日

ソフトウェア工学 其の三 20171019

 講義に出る人が減った。

ルールは大事

 プラットフォームにはハードウェアとソフトウェアの二種類がある。そのうち、ソフトウェアプラットフォームとは、いわゆる「ルール」と呼ばれるもの。
 話は変わるが、昔日本はスキー複合で無敵だったらしい。それが急に勝てなくなってしまった。ほかの国が強くなったのか?そうではなく、スキージャンプの配点割合が低くなってしまったのだ。ジャンプで稼いで勝つという戦略を練っていた日本は、ルール改正によって勝てなくなってしまったのだ。ルールは勝負において最重要といっても過言でないほど大切なものになる。
 ルールチェンジャーになることがこれから大事になってくる。ほかが決めたルールに従っていると没落してしまう。ルールを決められると、最初から相手有利で事が運んでしまうので、なかなか這い上がるのは難しい。まるで大貧民のように。
 この勝負に勝つためには、当然のことながら投資が必要なわけだが、個人や会社の力をつけて競争力を付けるのは割とすんなりできる。しかし、ルール作りはそう簡単にはいかない。税金はここを強くするためにも使われていることを忘れてはならない。お金のない分野では、国際会議に出席するにも研究者の自費になることがあるのだとか。
 また、こういった産業の仕組みを知っているのは新卒採用の時のいい判断材料になる。技術的なことよりも、むしろどれだけ大人な思考ができるのかを企業側は見ているらしいです。

会社を辞める

 これから先、会社を辞めること、転職することがデフォルトになってくる。その分、会社を自分のスキルアップの手段としてとらえていかなくてはならない。この心構え次第でその後のキャリアが違ってくる。転職する際、人に意見を求めてしまってはいけない。余計迷ってしまう。答えがないんだから。
 大学同士のレベルなんて大差ない。新卒採用時の個人スキルなんて、特別な人は除いて差があるわけではない。そこから何をしていくのかが大切なわけであって、何をしていくか次第でどんなものにもなれる。
 どんなことでも、3年やれば結構いいところまで行く。10年やり続けると、その道のプロフェッショナルと呼ばれる。最初に何をするのかは関係なく、やったのかやらないのかが大切になる。迷ってないでやる。そして、これを実践する最初の場が研究室選び。

研究室選びについて

 どの研究室も卒業しにくいし、卒業しやすい。しにくいといわれるのは

  • 配属されるも、卒業のための単位が足りない
  • バイトメインになって研究室に来なくなる
  • 先生と相性が悪くなる(レアケース)

などの理由が挙げられる。だが、普通にやっていれば卒業できる。
 また、研究室に関するうわさ話はほとんどがデマだという。
 時間に関しては基本的に仕事と同じ9時-17時で研究
 応用っぽい研究室が楽しそうだと思うかもしれないが、基本的にどの研究室でも基礎分野・応用分野の研究を行っている。また、アピールしている以外のところに面白さがあることも。じっくり見てみないと行っている研究の興味深さに気づかない。
 研究室配属の一番大切ことは、この選択が人生初の主体的にする選択だということだ。これまでは、なんとなくだったり、「普通行くよね」みたいな感じで、高校から大学へと進学してきた。本気で、「待てよ…。中卒で仕事始めたほうが自分にとっていいかもしれない」なんて考えたことはないだろう。この初めての選択をしっかりしておくと、この後の選択も同じようにしっかりと行うことができる。しかし、ここで適当にやってしまうと、これから一生そんな感じになってしまう。

ソフトウェアの種類について

組込みシステム

 前回にも出てきたが、今回は車を例にしてみる。車の中にはコンピュータ(ICU)が60個くらい、高いやつだと200個くらいある。このコンピュータは一つのネットワークを形成しているわけではなく、その特徴に合わせて複数のネットワークを形成している。例えば、文字化けを起こさないCanというネットワークは制御信号に使われており、高速で大容量のネットワークであるFlexRayは映像メディアの信号送信に用いられている。問題なのは、もうコンピュータを入れる場所が車の中にないということ。ワイヤの重量もかなりネック。
 面白い特徴として、ハードウェアとのバランスが必要になってくる点がある。スマホを例にすると、CPUの速度・バッテリーの大きさ・発熱などのバランスを最適化しなければならない。これまで説明した種類のソフトウェアにはなかったものだ。
 また、信頼性がとても重要になる。リコールされたら元も子もない。なので、OTAを用いて無線でアップデートデータの同期を行っていたりする。テレビや車のシステムアップデートは無線で、自分たちが知らないうちに行われている。これにより信頼性を高めているといえる。

クラウドシステム

 今や、これなしではローカルファイルのやり取りがめんどくさいと思ってしまうほどに普及しているクラウドシステム。しかし、この大元は単一のレポジトリで動いている。そして、常にテストコードが走っているという。ここで出てくるのがスケールアウトという考え方、手法。この説明をする前に、従来のスケールアップという考え方の説明をする。
 「規模を大きくする」や「壊れたところを修繕する」といったとき、自分の手でOSをインストールして、配線目見直して、一回全部の電源を落として…などと手間暇がかかりすぎてしまう。利益はリニアに上がっていくのに対して、負担は指数関数的に上がっていく。なので、利益と負担のグラフが重なるところが、規模拡大の上限になる。この考え方をスケールアップという。
 しかし、スケールアウトでは、周りのコンピュータが新しく入ってきたコンピュータにOSのインストールやデータ補完を自動的に行う。これにより、人の手をほとんど借りなくても、規模拡大ができるようになった。これは、利益と負担がともにリニアに上がっていくことをあらわしている。従って、規模を拡大すればするほど、利益も上がっていくという夢のような状態になる。これをスケールアウトという。
 また、お客さんにたくさん使ってもらって、たくさん変更・改善していくというスタンスも従来の手法とは異なるところ。これまでは、試験運用を重ねて、実用環境でも大丈夫と判断できた時点でリリースされていた。そして、このシステムはβサービス(CIともいう)と自動リリースを使って実現できている。「10 deployment per day」なんてことができるのも、このおかげといっても過言ではない。
 ここでいろいろと用語が出てきたので、用語の追加も兼ねておさらいしておきましょう。

  • βサービス:リリース前のサービスをテスターに使用してもらうこと。
  • CI:継続的インテグレーションの略。リリース前のチェックの自動化をしてくれるJenkinsが有名。
  • DevOps:開発担当者と運用担当者が連携を取り、スムーズにリリースまでもっていこうとするソフトウェア開発手法の一つ。これにはTDD(テスト駆動開発)が必要不可欠。
  • TDD:とりあえず、プログラムの枠組みを作って、そこから洗練していく作業を重ねていく開発スタイル。テストして、駆動するか確認して、洗練していく。

知っておくこと

 ここまでで、ソフトウェアの種類についての説明は終わり。だが、ソフトウェア工学で扱うものにはこれだけ種類があるということをわかっていないといけない。

ソフトウェアの特徴

  • 時空を超越できる
  • 劣化しないし、変更できる
  • 目に見えない・進捗が見えない

上の3つはハードウェアの性質と全く異なる。また、目に見えないので、目に見えないものを見る能力が必要になってくる。ちなみに、これが最初の課題のテーマだったりする。目に見えないものをより多く見た人は加算されるらしいです。難しい…。
 また、80:80の法則というのもありました。コードが書けて50%終了。デバッグにコードを書く時間と同じくらいに時間がかかってしまう。

Uber(ウーバー)について

 海外では移動手段を確保するのが大変。そこで、スマホで目的地を設定したら、現地の空いているドライバーがそこまで連れて行ってくれるというサービス「Uber」というものがあるらしい。しかし、日本に上陸したらタクシー業界が終わるので、日本人のほとんどはこのサービスについて知らないらしいです。

ソフトウェアに大切なもの

  • プログラム
  • 設計図:プログラムだけではなく、データや設定などの設計も必要。

プログラムはもちろん大切なのだが、それ以前に設計図が超重要になってくる。データの使用はプログラムに直接かかわってくるからだ。「アルゴリズムはデータ構造に従う」。

いいプログラマとは

  • お客さんの、その先まで想像できる。
  • 独断でやらない。
  • そのときそのときのコストを見ることができる

QCDについて

 Quality(品質)・Cost(コスト)・Delivery(納期)の頭文字をとったもの。現場ではDQCの順番で重視される(納期最優先)
 見えないものを見る目とも書いたが、虫の目(細部を見る)、鳥の目(俯瞰して見る)も必要になってくる。様々な視点で、新しい可能性を見つけるのが大切だろう。

付けたし

 次回は

  • Vモデル
  • 課題1をするための知識

がメインテーマだそうです。Vモデルは期末試験にも出るそうなので、必須ですね…。