1 シラバスの確認
1.1 基本情報
- 学年・学科: 2年 総合工学システム学科 知能情報コース専門科目
- 単位数: 2単位 (通年・履修単位)
- 卒業要件: DP-D
- 担当教員: Takeshi Wada
1.2 関連科目
知能情報コースの専門科目は ソフトウェア系、ハードウェア系、応用情報科学系 の3系統があります。ここでは、ソフトウェア系 と 応用情報科学系 のなかで本科目と特に関連がある科目を挙げています。
- 2年 後期 (履修単位) マイクロコンピュータ
- 3年 前期 (学修単位) プログラミング2 (C言語)
- 3年 後期 (学修単位) プログラミング3
(ウェブ系開発)
- フロントエンド (JavaScript/HTML/CSS)・バックエンド (検討中・選定中)
- 3年 半期 (学修単位) アルゴリズムとデータ構造1
- 4年 半期 (学修単位) アルゴリズムとデータ構造2
- 4年 半期 (学修単位) データベース工学
- 4年 通年 (履修単位) マルチメディア情報処理
- 5年 半期 (学修単位) オートマントと形式言語
- 5年 半期 (学修単位) オペレーティングシステム(OS)
- 5年 半期 (学修単位) ソフトウェア工学
- 5年 通年 (履修単位) 人工知能
興味関心のある科目は、授業の開講を待つことなくウェブや書籍を活用 して学んでください。また、興味があるものの取っ掛かりがない場合は、知能情報コースの先生に相談してアドバイスをもらいましょう ( どの先生に相談すれば分からないときは、まずは担任に相談してみましょう )。
1.3 授業概要
プログラミング はICTエンジニア(特に ソフトウェアエンジニア )にとって最重要スキルのひとつに位置づけられます。また、プログラミングは理工学分野の学び(情報工学系科目をはじめ数学や物理などの学習)においても理解深化のための強力なツールにもなります。
本科目では、その 導入教育 として、主に Python言語 を使ってプログラムに関する概念や用語、設計、実装、デバックについて 経験的に習得すること を目指します。
なお、Python言語 の特長や特性を知ってもらうために、その他のプログラミング言語( C言語やJavaScriptなど )についても簡単に体験 (実装) してもらうこともあります。また、実装演習では高専1・2年の数学や物理を題材としたものも取り上げ、実装力の向上と同時に数学や物理についても理解を深めてもらいます。
1.4 科目の達成目標
達成目標 (=2024年2月における皆さんのあるべき姿) として、次の事項を設定しています。
- Pythonの 開発環境および実行環境 を構築できる。
- エディタや バージョン管理システム などの各種開発ツールを効果的に利用できる。
- 関数、条件分岐、繰り返し処理を使用して基本的な 構造化プログラミング ができる。
- Pythonの多様なライブラリを活用して 日常生活や学習 に有用な小規模アプリを開発できる。
- エラーや意図せぬ結果が生じたとき、その原因特定と解決に向けて適切なアプローチができる。
1.5 成績評価法
総合成績(年度末の最終成績)は、次のように評価します。
- 課題の提出状況とその内容 80% ならびに授業中に実施する小テスト 20% を総合して評価する。
- 100点法により評価し、60点以上を合格とする。
中間試験や期末試験などの筆記形式の定期試験は実施しません。
2 そもそも「プログラミング」とは
2.1 プログラム (Program)
プログラムとは コンピュータに対する作業指示を記述したもの です。
何らかのプログラミング言語によって記述されて、人間が編集可能な段階(読み書きできる状態)のプログラム のことを「ソースコード」「ソースファイル」「ソースプログラム」「ソースリスト」「スクリプト」「原始プログラム」のように表現します。
一方で、機械語(2進数)によって記述され、コンピュータ (CPU) が直接的に実行可能な段階(読み込みできる状態)になったプログラム のことを「実行ファイル」「ソフトウェア」「アプリ(アプリケーションの略)」「バイナリファイル」「EXEファイル(エグゼファイル)」のように表現します。
単に「プログラム」といっても2通り意味合いがあるので注意してください(どちらを指すかは文脈から判断してください)。
なお、プログラミング言語によって記述されたソースコード(=テキストファイル)から、機械語(2進数)で記述される実行ファイルを生成する操作を コンパイル(Compile) または ビルド(Build) といいます。コンパイルには機械語に翻訳するという意味があります。
コンパイルとビルドの違い
厳密には「コンパイル」と「リンク」の2つの作業を総称して「ビルド」と表現します。詳しくは「コンパイル ビルド 違い」などで検索してください。
プログラムは、コンピュータを相手に最も「効率良く」かつ「齟齬なく」コミュニケーション をとるための手段・媒体とも言えます。
2.2 プログラミング (Programming)
プログラミングとは、「ソースコード」を作成する行為や作業を指します。ほぼ同じような意味で 「コーディング」「実装」「開発」という言葉が使われます(厳密には、それぞれニュアンスは異なります。興味がある人はネットで検索してみてください)。
2.3 プログラミングスキル (Programming Skill)
ラフな表現になりますが、
- 「こんなことが(気軽に効率的に)できたらいいよね 」と思うことをデジタル技術を使って実現するために、どんな構成や手順が必要か をデジタル技術の特性や制約を踏まえながらロジカルに設計/検討し、実際にアプリやウェブサービスとして実装してリリースできる能力
がプログラミングスキルといえるのではないかと思います。
3 プログラミング学習をはじめる前に…
これから、皆さんはプログラミングの 未経験者(未学習者) から 初心者 に向かって「学び」をしていきます。それに先立ち、ぜひ視聴して欲しい動画があります。以下、「エンジニアチャンネル」というYouTubeチャンネルの動画になります。
- プログラミングを始める前に知りたかったことトップ3
- 【検証】現役プログラマーは30万円の案件を何時間で出来るのか?
- https://www.youtube.com/watch?v=rt_X6n9oWa4
3.1 プログラミングをものにするために投資すべき時間
- プログラミングを身に付けるために特別な才能や適性は 必要ない 。
- 「自分はプログラミングに向いていない」「全然できるようにならない」と思っても、悩んでも、それは単純に 学習時間の不足 が原因。ほとんどの人が経験すること。
- プロのエンジニアでも、過去を振り返れば、1日10時間超、本気の勉強を半年続けるなかで何度も挫折してしまいそうになっている。和田も高専時代 (@電気工学科) にプログラミング学習に挫折して遠回りをしている。
- ジュニアレベルのプログラマ(=ソフトウェアエンジニアのタマゴとして就職ができるレベル)に到達するために必要な学習時間は
1,000~2,000 時間と言われている。
- そもそも、プログラミング超初心者が、初心者になるまでには 約250時間 の学習(経験)が必要と言われている。
- 膨大な投資であるが そのリターンは一生のなかで継続的に得られる 。
- 高専在学中でもプログラミングスキルを活かした アルバイト ができる。
資格取得に必要とされる学習時間の目安
- 参考: 司法試験合格(弁護士)に必要な学習時間は 3,000~8,000 時間
- 参考: 電気主任技術者(電験3種)の取得に必要な学習時間は 1,000~2,000 時間
- 参考: ITパスポート試験合格に必要な学習時間は 100~150 時間
- 一説には、独学によるプログラミング学習は、挫折率9割 とも言われている。
- 挫折を回避し、プログラミングを楽しく意欲をもって学ぶためには、(自分が)
夢中になれるプロジェクト、没頭できるプロジェクトに飛び込んでみること、環境・仕組み(仕掛け)・枠組みのなかに身を置くこと。
- 学習の初期 (少なくとも 学習を初めて数か月から1年 ) は、とても過酷な期間がつづく。目的 (つくりたいアプリやサービス) を設定せずに、仲間もつくらずに、プロジェクトにも参加せずに取り組むと特に挫折しやすい。
- 目的は、ゲーム開発でも、スマホアプリ開発でも、ウェブサービス開発でも、なんでもOK。自分が「つくりたい」と思うものを定めて、それを意識に置きながら学びを進めると学習効果がとても高い。
3.2 学校の授業はゲームで言えば「XXXX」
学校の授業というものは、ゲームで言えば チュートリアル でしかありません。その先につづく 膨大な本編のほんの入口 にしかすぎません。試行錯誤や失敗の連続でも、自分の意思で好きなように自由に取り組む実開発(ゲームで言えば本編)のほうが、はるかに夢中になれて、格段に「学び」も大きく深いです。
事実、この授業は1回約90分の通年授業(約30回の講義)ですが、ここでの累積学習時間は
\[ 90 \times 30 = 2,700 \mathrm{min} = 45 \mathrm{hr} \]
です。たとえ宿題で毎回90分を費やしても、90時間です。授業のなかだけの取組みでは、超初心者が初心者になるたための250時間の半分にも到達しない・・・。
残念ながら、授業は亀の歩み。独学すれば休日の午前中に収まる学習内容でも、授業では3週間かけて (1週間の間隔をあけて90分を3回で) 提供することになります。特に、1週間も学習間隔があけば、覚えたことも忘れてしまうので、その復習も授業中でやっているとすれば、休日午前で終わる内容を、授業では4週間から5週間かけて提供するのかもしれません。
3.3 1000~2000時間の差はなに?
- 才能? 個人差? 質の差?
3.4 教員としての願い
和田が理想と考える高専生は 自己効力感を持って、仲間と共に、創造的なモノづくり活動を楽しめる高専生 です。
砕けた言い方をすれば、自分なりの武器と自信を持って、仲間と一緒に何かクリエイティブな「モノづくり(アウトプット活動)」に取り組むことが「楽しい」「充実している」と思える高専生 です。
そのためのチュートリアル(導入やきっかけ)になるような授業を提供したいと思っています。
4 Python開発・実行環境: Google Colab.
これからしばらくは、Pythonの開発・実行環境として GoogleColab.(グーグルコラボ)というクラウドサービスを利用していきます。GoogleColab.はネットの接続が必須ですが、ウェブブラウザだけで簡単にプログラミングをはじめることができます。
また、以降の授業のどこかのタイミングで、ローカルPCにも Python実行環境を構築し、VSCode (+各種拡張機能) を IDE として利用して開発するスタイルに移行します。さらに、皆さんが想定以上に意欲的に取り組んでくれれば、Docker を活用した開発・実行環境の構築なども体験させたい、と思っています。
Tips:GoogleColab.が有料化やサービス終了してしまったら?
ローカルPCに JupyterNotebook(ジュピターノートブック/ジュパイターノートブック)という環境を構築すれば、GoogleColab. とほぼ同様の開発ができます。そもそも、JupyterNotebook を Google が独自拡張し、ウェブサービス(クラウド型)として提供したものが GoogleColab. です。
仮に、GoogleColab. のサービスが終了しても、それまでに開発したプログラムは ローカルPCの JupyterNotebook に引き継ぐことができます。
GoogleColab.についての詳しい情報(FAQ)はこちら
4.1 ノートブックの新規作成
4.2 コードセルの追加と編集・実行
- コードセルの実行は [Ctrl]+[Enter]
- コードセル移動と削除
4.3 テキストセルの追加と編集
- 箇条書き
- 文字の強調
4.4 ノートブックの保存と再開
- ノートブックのデフォルトの保存先は、Googleドライブの ‘Colab Notebooks’ フォルダのなか。
5 文字列の扱いと出力
5.1 文字の出力1
文字の出力。きっちり表現すると「文字列リテラルを標準出力に送る」という表現になります。
- どこにスペースや改行を挿入するとエラーになるのか。実験して、そこからどんな規則があるのか、法則があるのか推察してみましょう。
- 具体的にどのようなエラーが出力されるのかを確認して、また、エラーを翻訳してみましょう。
%reset -fは何のために存在するのでしょうか。少しでも疑問に思ったことは調べてみましょう- 調べることが大事、現時点で解決できなくても…。
- どんな検索キーワードと共に調べるとよいのか。
5.2 文字の出力2
- 標準出力 (Standard Output)
print関数- シングルクォーテーションとダブルクォーテーション
6 宿題
次回の授業までに GitHubアカウント を準備しておいてください(授業中にアクセスできるようにしておいてください)。このアカウント(リポジトリ)は、インターンシップ、就職、進学において、皆さんのポートフォリオ ( 取組み実績やスキルを示すための作品集 ) という位置づけになります。
そのため、ユーザーネームは慎重に設定してください (1年次の実験実習で作成したアカウントを継続使用しても、新規に作成しても、個人使用しているものを利用してもOKです。ユーザーネームは変更可能ですが色々と面倒があるので、この機会に適切なものにしておきましょう)。
この授業で作成したプログラミングのほか、他の授業や実験実習で作成したものも、このGitHubアカウントのなかに蓄積していってもらいます (少なくとも教員とクラスメイトには閲覧されるものになります) 。