第1章 コンピュータ、人、プログラミング
1.1 はじめに
- プログラミングはなぜ価値ある行為なのか?
- 現代文明におけるプログラミングの役割は何か?
- プログラマが立派に貢献できる場所はどこか
- 現代文明はソフトウェアの上に成り立っている。ソフトウェアを改良し、ソフトウェアの新しい用途を見つけることで、多くの人々に貢献できる。プログラミングはそのことに関して不可欠な役割を果たす。
1.2 ソフトウェア
- 操作系とそれ以外→生活の中にプログラミングは溶け込んでいる
1.3 人
1.4 コンピュータサイエンス
1.5 偏在するコンピュータ
時計、運輸、電気通信、医学、情報、垂直視野
1.6 プログラマの基準
- 正確さを求め、信頼性を求める、うまく設計されていることを望む、手ごろな価格であることを望む、メンテナンス可能である必要がある
- コンピュータは細かいことにうるさく、容赦のない、愚かな機械である。
- 世の中は私たちが望む以上に複雑で、私たちは自分たちが要求するものの実際の意味をよく分かっていない。
- わたしたちは常識を前提にしがちである。
- プログラミングは理解することである。=タスクをプログラムできる=理解している
- プログラミングはテーマを完全に理解する試みの一部ある。
- プログラムはテーマの理解度を正確に写す鏡である。
プログラムの開発の4つのステージ
- 分析 =>問題は何か?ユーザーは何を求めているか?ユーザーは何を必要とするか?ユーザーは何ができるか?どのような信頼性が必要か?
- 設計 =>問題をどのようにして解決するか?システムの全体的な構造はどのようなものにすべきか?それはどのようなパーツで構成されるか?パーツとパーツはどのようにやり取りするか?システムとユーザーはどのようにやりとりするか?
- プログラミング =>問題への解決策(設計)をコードで表現する。すべての制約(時間、スペース、資金、信頼性など)を満たす方法でコードをする記述する。正確でメンテナンス可能なコードにする。
- テスト =>体系的に試してみることによって、すべての状況下でシステムが正しく動作することを確認する。
- プログラミングとテストはよく実装と呼ばれる。これらの開発ステージは順序よく進んでいくとは必ずしも限らない。
- フィードバックが重要である。私たちは経験から学び、学んだことに基づいて行動を変える
- アイデア段階においては、設計上のアイデアを書き、それらを友人たちに説明してフィードバックを得るほうが簡単である。1人きりで設計することはなるべく避け、自分のアイデアを誰かに説明して試してみるまで、コーディングを開始してはならない。単にアイデアを明確にしようとするだけで、驚くほど多くのことを学べる。
- プログラムの実装で行き詰ったときは、問題そのものに関して考えてみる。誰かと話をする。自分が何をしたいのか、そしてなぜそれが上手くいかないのかを説明する。問題を誰かに丁寧に説明するだけで解決策が見つかることは意外と多い。必要がない限り、1人きりでデバックを行うことは適策ではない。
- アイデアをコードで直接表現することは、プログラミングの基本原理である。
- 複素数型 int型 文字列 string型 複素数 complex型 グラフィックス Sharp型 Circle型 Color型 Dialog_box型 データストリーム isream型
- 最も基本的なレベルにおいて、アイデア、概念、エンティティ、【もの】として考える何か、ホワイトボードに描けるもの、言葉で表せるものがあるときにその何かをプログラムに名前付きのエンティティ(型)として存在させ、それにふさわしいと思われる操作を提供する。
復習
Q1
コンピュータ上で実行されるプログラムの集まり
Q2
現代の便利な生活はコンピュータを基盤に成り立っており、従ってそれらの働きを規定する役割になるソフトウェアも当然重要と言えるから
Q3
電話機、カメラ、ホームベーカリー、車、風力タービン、食料倉庫、牛舎などなどその他多数の場面
Q4
携帯電話のソフトウェアが正しく動作しない場合、画面の強制終了が発生する
エンジンの燃料噴射装置のソフトウェアが正しく動作しない悪燃費での運転を強いられる
Q5
カーナビゲーションシステムにおいて最短距離を進む道を高度なアルゴリズムによって導出する
Q6
ユーザーのニーズを考えること、他人と活発に意見を交換すること、実際にコーディングを行うこと
Q7
コンピュータサイエンスはコンピュータを用いて創造的な活動を行うために考慮すべき要因の全体集合を指し、プログラミングはその体系を形成する1部分になる
Q8
設計:
空間や部品の視覚化、計算全般、部品のシミュレーション
構造:
溶接ロボット、CAD/CAMによる銅板の切断'()
エンジン:
EFI(電子制御式燃料噴射装置)の制御
マネージメント:
運行経路のシミュレーション
監視:
商船の位置をいつで確認できるようなWEBサイト
Q9
WEBサービスを提供するコンピュータの集まり
2008年2月に211の地域から発信された通話の数
山田太郎はがんにかかったことがあるか
染野良一郎の注文したコーヒーメーカーは発送されたのか
Q11
ヒトゲノムの解析、人間の脳の構造の解析、テキストマイニング
Q12
CTスキャナ、執刀補助システム、カルテの閲覧システム
Q13
オンラインゲーム、映画におけるCG表現、漫画ソフト
Q14
正確さ、信頼性、うまく設計されていること、手ごろな価格であること、メンテナンス可能であること
Q15
ソフトウェアに求められる要求を満たしながら、設計、プログラムなどの諸活動を周囲との調和を保ちながら行う人
Q16
分析→設計→プログラミング→テスト
Q17
コンピュータは細かいことに厳しい愚かな機械であるから
現実の社会は私たちが思っている以上に複雑なものであるから
Q18
ヤマト運輸の商品配送システム
=いつ何を注文したとしても基本的には遅滞なく商品を届けてくれるから
Amazonのレコメンドエンジン
=自分の興味のある商品について推薦してくれるので商品購入の幅が広がる
図書館の在庫検索WEBシステム
=家にいながらにして、県内すべての蔵書の状態を知ることができる
Q19
う~ん、特に思いつかない
練習問題
Q1
テレビをつける
=リモコンからの操作受付はコンピュータによって行われている
=視聴者参加型の番組の場合、専門ソフトウェアで記述されていることになる
=制作されている番組じたい、コンピュータによって動く高性能ビデオカメラによって撮影されている
=映像の編集には、編集ソフトウェアが使用されている
Q2
中小企業/官公庁向け経営コンサルタント
=タブレットコンピュータによって相手方にプレゼンテーションを行う
=システム導入自体を提案することがある
Q4
図書館の在庫情報を調べること
東京に行くときの最も安い行き方を調べること
Q5
映像を編集する
最短経路を調べる
調べ物をする
ゲームをする
Q6
寝る
歩く
あくびをする
人と話をする
孤独に考えことをする
好きな人を思う
絵を描く
海に潜る
Q7
店頭での接客
街頭でのビラ配り
単純ライン工
教師による授業
車の運転
Q8
私がコンピュータプログラマになりたいのは、自分の作った何らか形あるものをこの社会に残したいからである。そして、現代において価値ある生産物を生み出そうと思うならばもはやコンピュータが必ず関与してくることは自明のことであるように思う。
自分の思い描いたアイデアをすぐに形にできることによって、その他の優秀なプログラマともコミュニケーションが取れる。そのことによってはじめて組織システムを統括する資格を得ることができる、価値ある創造物作りに関与することができるようになると考えるのである。
Q9
顧客のニーズをくみ取り(あるいは顧客が真に抱えている問題を特定し)、プログラマに伝える役割を担いたいと思う。技術偏重になるばかりでユーザーの声に耳を傾けない技術者は驚くほど大勢存在するのではないかと私は考えており、そういった不幸を生み出さないためにも正しい道を示す先導者としての役割をソフトウェア開発において演じてみたいとは思うのである
私はコンピュータが思考体にまで発展する可能性は大いにあると考えている。
なぜなら私たちのを構成しているものは間違いなくこの地球に存在している物質であり、その構成さえ判明すれば人類がそれと全く同じものを作り出すのは不可能ではないと考えるからである。我々が抱く感情というものも所詮は物質同士反応、共鳴しておこる物理現象にすぎないと考えるわけである。
Q11
社交的である
あらゆる方面に好奇心旺盛である
コードを書く前の前段階の時間が長い
Q12
流通システムの管理
電車内の車内放送、発券システム、ブレーキ
ロケット制御
時計
カルテ管理システム
ロケット制御
=>夢がある