1 シラバスの確認
1.1 基本情報 プログラミング1
- 学年・学科: 2年 総合工学システム学科
- 単位数: 2単位 (通年・履修単位)
- 分類: 知能情報コースの基盤専門科目
- 卒業要件: DP-D
- 担当教員: Takeshi Wada
本科目の通称は「PG1」です。
1.2 担当教員の自己紹介
- 別資料 PPT
- 各種連絡や質問などは、すべて
TeamsChat で受付けます。チャット宛先欄に
@z21707rを入力すると和田が検索できます。- (この科目では) 原則として、電子メールによる連絡はしないでください。
1.3 関連科目
知能情報コースの専門科目は ソフトウェア系、ハードウェア系、応用情報科学系 の 3系統 があります。ここでは、ソフトウェア系 と 応用情報科学系 の科目のなかで、特に 本科目との関連が深い科目 を挙げています。
- 2年 後期 (履修単位) マイクロコンピュータ
- 3年 前期 (学修単位) プログラミング2 (C言語)
- 3年 後期 (学修単位) プログラミング3
(ウェブ系開発) 講義資料(参考)
- JavaScript/TypeScript/HTML/CSS, React/Next.js
- 3年 前期 (学修単位) アルゴリズムとデータ構造1
- 3年 通年 (履修単位) 知能情報実験実習1
- 前期にPythonを使用した ウェブスクレイピング のテーマがあります。
- 後期にPythonを使用した 画像処理 のテーマがあります。
- 4年 前期 (学修単位) アルゴリズムとデータ構造2
- 4年 後期 (学修単位) データベース工学
- 4年 通年 (履修単位) マルチメディア情報処理
「進取の精神」を大切にして興味関心のある分野は、授業の開講を待つことなくウェブや書籍を活用し、先取りして学んでください。もし、特定の分野に興味関心があるものの「取っ掛かり」や「ロードマップ (= 学習の道筋・体系的な学習方法)」がない場合は、知能情報コースの先生に相談してアドバイスをもらってください。
どの先生に相談すれば分からないときは、まずは 和田 か 土井先生 (主任) に相談してみましょう。
例えば、人工知能の理論を学びたくて知能情報コースを選択したのに、5年の「人工知能」の開講を3年間も待つことは、時間的にも学習の意欲・効率の面からも非合理です。
情報分野のことを 「一緒に学ぶ友人を募りやすい」「相談や質問ができる教員がいる」 といった「知能情報コースという環境」を有効に活用してください。同じ技術や分野に興味を持つクラスメイトが高確率で存在するはずです。
1.4 授業概要
プログラミング はICTエンジニア(特に ソフトウェアエンジニア )にとって最重要スキルのひとつに位置づけられます。また、プログラミングは理工学分野の学び(情報工学系科目をはじめ「数学」や「物理」などの学び)においても 理解深化のための強力な ツール (=道具・手段) として役立ちます。
(Pythonを使ったベクトルの幾何変換の可視化の例)
本科目では、そのような位置付けである プログラミングの導入教育 として、主に「Python言語 (パイソン言語)」を使ってプログラムに関する概念や用語、設計、実装、デバック、管理 (GitHubなど) について 経験的に習得すること を目指します。
なお、Python言語 の特徴や長所・短所特性を知ってもらうために、その他のプログラミング言語(C言語やJavaScriptなど)についても簡単なコードを示すこともあります。また、就職やインターンシップに向けて ポートフォリオ を作成してもらうために HTML/CSS についても授業のなかで学びます。
- ポートフォリオの作成例 2024-2I (学内のみ OneDrive)
- ポートフォリオの作成例 2024-3I (学内のみ OneDrive)
さらに、実装演習では 高専1・2年の数学や物理を題材としたもの も取り上げ、実装力の向上と同時に「数学」や「物理」について、プログラミングを通じて理解を深めるようなこともします。
1.5 科目の達成目標
達成目標 ( =2026年2月における皆さんのあるべき姿) として、次の事項を設定しています。シラバスからの抜粋です。
- Pythonの 開発環境および実行環境 を構築できる。
- IDE (統合開発環境) や バージョン管理システム などの各種開発ツールを効果的に利用できる。
- 条件分岐、繰り返し処理、関数、クラスを使用して基本的な 構造化プログラミング ができる。
- Pythonの多様なライブラリを活用して 日常生活や学習 に有用な小規模アプリの開発ができる。
- エラーや意図せぬ結果が生じたとき、その原因特定と解決に向けて適切なアプローチができる。
1.6 成績評価法
総合成績(学年末の最終成績)は、次のように評価します。
- 課題の提出状況とその内容 70% ならびに授業中に実施する小テスト 30% を総合して評価する。
- 100点法により評価し、60点以上を合格とする。
中間試験や期末試験などの筆記形式の定期試験は実施しません。小テスト実施するときは、その前回講義でアナウンスします。なお、昨年度は 全6回 の小テストを実施しました (本年度は少し回数が増えるかもしれません)。
小テストを欠席した場合
遅刻や欠席(公欠や出欠停止を含む)により、小テストを受験できず追試験を希望する者は 当該授業日を含めて2日以内 に、学生から和田宛に TeamsChat で追試験の実施依頼 をしてください。
小テストの追試験は、公欠や忌引を含めて理由に関わらず 1人あたり最大3回まで対応します。4回目以降の欠席・遅刻による小テスト未受験に対して、追試は実施せず「0点」で評価します。
1.7 授業の進め方
本科目では、最初の2~3回の講義を除いて セルフペースド学習 (自己調整学習) を前提に授業を提供していきます。
皆さんは「2年知能情報コース」という括りでは同じですが、一人ひとりのプログラミングのスキル・経験には相当な個人差があるはずです。趣味などで日常的にプログラミングをしてきた学生と、学校授業の枠内でしか体験してきていない学生では 学習時間に軽く数百時間の差 があります。
そのため、教員主導の一斉進行スタイルで授業をしてしまうと、どうしても個人レベルでは不満 (=授業が簡単すぎる/難しすぎる、展開が遅すぎる/早すぎるという不満) がでてきます。そのため、この科目では、教員からは、皆さんの属性(公大高専の知能情報コースの2年生)に最適化した学習ロードマップに沿った講義資料 (ウェブテキスト) を提供するので、学生の皆さんは、それを用いて 自分自身で学習の速度(ペース)と理解の深さ(どこまで深掘りするか)を調整しながら学習を進めてほしい と思っています。講義資料を読んで試行錯誤しても解決しないことがあれば、教員の机間巡視中に声をかけてください。
これまでにプログラムを自学してきた学生は、1回分の講義資料の表面的な内容は 30分 もあれば終わってしまうと思います。余った時間は深い掘り下げや、別のプログラミング関連の学習に使ってください (プログラミングや情報工学に関係のない取り組みはNGです)。また、周囲の学生からヘルプを求められたときは、サポートしてもらえると教員としては大変ありがたいです。昨年度の講義資料で、先取りして学んでもらってもOKです。
一方で、これまで授業の範囲内でしかプログラミングに触れてこなかった学生の場合、90分の授業時間では1回分の講義資料の最後まで到達しないこともあると思います。その際は、多少大変であっても授業時間外に必死に取り組んでほしいと思います。
中級者向けの情報
中級者向けの情報は、この紫色のコラムで提供します。初学者は読み飛ばしてください。学習の初期段階では、かえって混乱するような内容を含みます。
1.8 AI共創時代において「プログラミング」を学ぶ意義
最近「もうAIがプログラムを書いてくれるから、プログラミングを学ぶ必要なんてないよね~」という声を耳にすることが増えました。確かに ChatGPT のような生成AIでは、自然言語での指示だけで、少なくとも中級者レベルを超える高品質なプログラムコードを生成してくれるようになっています。それも、人間には到底不可能な短時間で…。
こうした状況において大事なことは「プログラミングを学ぶ「意味」や「価値」は何なのか」、そして「プログラミングの知識・スキルを持つ人と、そうでない人とでは、AI支援で開発したときに プロダクトにどのような質的な差 が生じるのか」を常に考えて学ぶことです。学びの「方法」や「内容」を常に修正・調整していくことが重要になります。
AI共創・AI補完型労働の時代、学習の仕方によっては学習者に実務的・市場的な価値をもたらさないプログラミングの勉強 も存在しえると思います。皆さんには、自身のキャリア形成に寄与するような「学び」をしてほしいと考えています。
1.8.1 ヒント💡
プログラミングの知識やスキルがなくても、自然言語で指示を与えれば生成AIからコードを得ることは十分可能です。しかし、専門知識がない人にとって、その「コード」は「意味不明の呪文」でしかありません。皮肉なことに、プログラムの特性上、意味不明な「呪文」であってもビルドして実行すれば、目的の機能が実現できるか表面的の確認はできてしまいます (このことが「プログラミングを学ぶ必要があるの?」という疑問や不安を生むのかもしれません)。
しかし、そのコードが、以下に示すような観点 (プロダクトとして無視できない要素) で適切であるかの判断は、素人にはできません。特にトレードオフが存在する要素 (例えば、パフォーマンスと保守性の両立など) の評価には、プロンプトに落とし込めない要素も含むため、AIに判断してもらうこともできません。
- 拡張性・汎用性:将来的な機能追加や変更に対応できるか
- 保守性:他の開発者が理解・修正しやすいコードか
- パフォーマンス (実行効率):メモリ効率や処理速度に問題はないか
- セキュリティ:潜在的な脆弱性やリスクはないか
また、生成AIは同一のプロンプトに対しても毎回異なるコードを生成してきますが、そのうち、どのコード (実装) が最適であるかの見極めには、高度な知識と経験が要求されます。
プログラミングから少し話が逸れますが、例えば、次のようなプロンプトを AI に与えるとします。実際に試してみてください (PortalAI for OMU) 。
次の要件に沿って、教員から保護者に向けてのメッセージを作成してください。
# 内容
- 大変かもしれないが九九を確実に習得しておかないと後々に困ることになる。
- 家庭でも協力してほしい。
- アナロジーを用いて伝える。
# 条件
- 対象は小学2年生の保護者
- 文字数は250文字前後
- 3つの案を提案
皆さんであれば、AIが提案してきた3案を比較し、最も効果的であろうメッセージを選定することができると思います。また、表現を微調整したり、各案のいいところを切り貼りしてより良いメッセージにすることもできると思います。
しかし、次のように「条件」を変えてみるとどうでしょうか?
# 条件
- 対象はアルジェリア出身・在住で、基礎学校2年生(日本の小学2年生相当)の子どもの保護者
- アルジェリアの公用語であるアラビア語で出力
- 文字数は250文字前後
- 3つの案を提案
このときのAIの回答は、もはや「意味不明の呪文」でしかなく、最適なメッセージを見極めることは不可能です。仮に日本語に翻訳したとしても、アルジェリア特有の文化や慣習、教育事情に詳しくなければ、そのメッセージが効果的かどうかを適切に判断することはできません。
この例が示すように、AIがどれほど高度なコードを生成できるようになったとしても、それを正しく評価し、責任をもってプロダクトに組み込むためには、プログラミングの基礎的な知識や経験、背景理解が絶対的に必要となります。コードの「可読性と実行効率」、「汎用性と実行効率」といったトレードオフか絡む判断も、人間が多角的に考慮して責任をもって決定しなければなりません。さらに、ドメイン固有の文化や技術背景を理解している必要もあります。
新しい発想に基づいて価値あるプロダクトを創造し、それに責任をもつことがエンジニアの本質的な仕事です。AIを補完や共創のパートナーとして活用し、そうした仕事を担えるようになるためにも、プログラミングを上手に学んでください。
2 プログラムとプログラミング
そもそも「プログラム (Program)」とは?「プログラミング (Programming)」とは?それらの違いは?
2.1 プログラム (Program)
プログラムとは コンピュータに対する作業指示を記述したもの です。
何らかのプログラミング言語によって記述されて、人間が編集可能な段階(読み書きできる状態)のプログラム のことを「ソースコード」「ソースファイル」「ソースプログラム」「ソースリスト」「スクリプト」「原始プログラム」のように表現します。
一方で、機械語(2進数)によって記述され、コンピュータ (CPU) が直接的に実行可能な段階(読み込みできる状態)になったプログラム のことを「実行ファイル」「ソフトウェア」「アプリ(アプリケーションの略)」「バイナリファイル」「EXEファイル(エグゼファイル)」のように表現します。
単に「プログラム」といっても二通り意味合いがあるので注意してください。どちらを指すかは文脈 (コンテキスト) から判断してください。
なお、プログラミング言語によって記述されたソースコード(=テキストファイル)から、機械語(2進数)で記述される実行ファイルを生成する操作を コンパイル(Compile) または ビルド(Build) といいます。コンパイルには機械語に翻訳するという意味があります。
コンパイルとビルドの違い
厳密には「コンパイル」と「リンク」の2つの作業を総称して「ビルド」と表現します。
(プロンプト例)
コンパイルとビルドの違いについて解説してください。
プログラムは、人間がコンピュータを相手に最も「効率良く」かつ「齟齬なく正確に」コミュニケーション をとるための手段・媒体とも言えます。
2.2 プログラミング (Programming)
プログラミングとは「ソースコード」を作成・記述する行為や作業を指します。ほぼ同じような意味で 「コーディング」「実装」「開発」という言葉が使われます。厳密には、それぞれニュアンスは異なります。興味がある人はネットで検索してみてください。
2.3 プログラミングスキル (Programming Skill)
ラフな表現になりますが、次のような能力がプログラミングスキルといえるのではないかと思います。
「こんなことが(気軽に効率的に)できたらいいよね 」と思うことをデジタル技術を使って実現するために、どんな構成や手順が必要か をデジタル技術の特性や制約を踏まえながらロジカルに設計/検討し、実際にアプリやウェブサービスなどのプロダクトを実装してリリースできる能力
3 プログラミング学習をはじめる前に…
これから、皆さんは プログラミング未経験者(未学習者) から プログラミング初心者 に向かって「学び」を深めていきます。それに先立ち、ぜひ視聴して欲しい動画があります。以下、「エンジニアチャンネル」というYouTubeチャンネルの動画になります (授業時間外にみておいてください)。
- プログラミングを始める前に知りたかったことトップ3 (9:28)
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} \]
です。たとえ1回の授業につき宿題で90分を学びにあてたとしても総時間は90時間にしかなりません。授業のなかだけの取組みでは、「プログラミング超初心者」が「プログラミング初心者」になるために必要な250時間の半分にも到達しないのです。
残念ながら、マス教育の宿命である集団教育は「亀の歩み🐢」です。独学なら 休日の午前中で終わる学習内容 でも、授業では3週間もの時間をかけて (1週間の間隔をあけて90分を3回で) 提供することになります。通常、1週間も学習間隔があけば、記憶も薄れるので、その復習を授業中でやるとすれば、独学なら休日午前で終わる内容を、授業では4週間から5週間もかけて提供 することになります。
週1のペースを待たずに先々勉強したい学生は、昨年度の講義資料を利用してください。
3.3 1000~2000時間という差はなに?
- 才能? 個人の能力差? 質の差?
- ・・・もありますが、それよりも 「適切な学習ロードマップ に沿って学んでいるか」「効率的・効果的な学習方法で学んでいるか」「適切な助言や助けをもらえる環境で学んでいるか」 の影響がはるかに大きいです。
3.4 教員としての願い
和田が理想と考える高専生とは 自己効力感を持って、仲間と共に、創造的なモノづくり活動を楽しめる学生 です。
砕けた言い方をすれば、自分なりの武器と自信を持って、仲間と一緒に何かクリエイティブな「モノづくり(アウトプット活動)」に取り組むことが「楽しい」「充実している」と思える学生 になってほしいと思います。
この授業では、そのためのチュートリアル(導入やきっかけ)になるような内容を提供しています。
4 生成AIの利用について
この授業では生成AIの利用に関して特に制限はありません。ChatGPT、PortalAI for OMU、Gemini、Microsoft Copilot、GitHub Copilot、Cursor などを、プログラミング学習に賢く活用すること推奨します。
ただし、本質を見失わないように十分に注意 してください。授業のなかで演習や課題を課す目的は「皆さんの理解を深めてもらうため」「皆さんにスキルアップしてもらうため」です。理解深化やスキルアップに結びつかないような AI の使い方をしていると、早ければ1年後には詰みます。遅くとも進学や就職の段階で詰み状態になります (あるいは極端に選択肢が限られた状態になります)。
小学校で習う「九九」や「分数」について理解しないまま、中学校に進むことを想像してください、悲惨😱です。同様に、(AIを使って誤魔化して) 基礎的なプログラミングスキルを身に付けないまま卒業してしまうこと…を想像してください。
皆さんが授業を受ける理由は 「進級」や「卒業」という記号を得るためではありません。自己の知識と技術の向上 が目的です。演習や課題に取り組むのは、そのための「手段」です。単位取得や進級、卒業は単なる目標 (≠目的) にすぎず、その過程で獲得する知識やスキルに価値があります。もし、この点に気付いていないクラスメイトがいれば、その誤解を解くよう助けてあげてください。
5 Python実行開発環境 GoogleColab
これからしばらくは、Pythonの実行開発環境として GoogleColab(グーグルコラボ)というクラウドサービスを利用していきます。GoogleColab はネット接続が必須ですが、ウェブブラウザだけで簡単にプログラミングをはじめることができます。
- GoogleColaboratory
- ブラウザにブックマークしておいてください。
また、6月下旬には 個人PCの内部にもPythonの実行・開発環境を構築し、VSCode を IDE ( Integrated Development Environment: 統合開発環境) として利用して開発するスタイルに移行します。さらに、皆さんが想定以上に意欲的に取り組んでくれれば、Docker を活用した開発・実行環境の構築なども体験させたい、と思っています (前年度は Docker には到達しませんでした)。
Tips:もし、GoogleColab.が有料化されたり、サービス終了してしまったら?
ローカルPCに JupyterNotebook(ジュピターノートブック/ジュパイターノートブック)という環境を構築すれば、GoogleColab. とほぼ同様の開発ができます。そもそも、JupyterNotebook を Google が独自拡張し、ウェブサービス(クラウド型)として提供したものが GoogleColab. です。
仮に、GoogleColab. のサービスが終了しても、それまでに開発したプログラムはローカルPCの JupyterNotebook に引き継ぐことができます。授業のなかでも JupyterNotebook の環境構築を取り上げます。
GoogleColab.についての詳しい情報(FAQ)はこちら
5.1 ノートブックの新規作成
- GoogleColaboratory にアクセスして「ノートブックを新規作成」を選択してください。
- ノートブックの名前は
PG1-第01回講義.ipynbとしてください。拡張子は IPython Notebook の略であり、Interactive Python NodeBook と覚えるとよいです。Interactive は「対話的」という意味です。
5.2 設定 (AIアシスタントの設定)
AIアシスタントを次のように設定してください (必要に応じてカスタマイズしてください)。
❷の「コード補完」は、実務では非常に有用ですが、学習時には無効化しておくことを推奨します。
5.3 コードセルの追加と編集・実行
- コードセルの実行は [Ctrl]+[Enter]
- コードセル移動と削除
5.4 テキストセルの追加と編集
- 箇条書き
- 文字の強調
**文字**
5.5 ノートブックの保存と再開
- ノートブックのデフォルトの保存先は、Googleドライブの
Colab Notebooksフォルダのなかになります。
6 ノートブックがフリーズしたときの対処法
Colab のノートブックが フリーズしたとき (=処理が終わらない、操作を受付けない状態になったとき) は、次の手順で「セッションを再起動する」あるいは「セッションを再起動してすべて実行する」を実行してください。
その後、再度、コードセルで Ctrl+Enter
で実行してみてください。
それでも解決しないときはウェブブラウザを再起動してください。それでもなお解決しない場合は、新規にノートブックを作成してください。
7 文字列の扱いと出力
7.1 文字の出力1
文字を画面出力するためには print 関数 (Function)
を使用します。厳密な表現をすると「文字列リテラルを標準出力に出力するためには、組込み関数の
print を使用します」という表現になります。
- どこにスペースや改行を挿入するとエラーになるのか。実験して、そこからどんな規則があるのか、法則があるのか推察してみましょう。
- 具体的にどのようなエラーが出力されるのかを確認して、また、エラーを翻訳してみましょう。
%reset -fは何のために存在するのでしょうか。少しでも疑問に思ったことは調べてみましょう- 調べることが大事、現時点で解決できなくても…。
- どんな検索キーワードと共に調べるとよいのか。
7.2 Geminiの活用法
- チャットタブの位置変更
- チャットウィンドウからのコード挿入
- コードセルからの呼び出し
7.3 文字の出力2
- 標準出力 (Standard Output)
print関数- 「シングルクォーテーション」と「ダブルクォーテーション」
7.4 AIアシスト
8 演習
次のような文字列を出力するPythonプログラムを GoogleColab. 環境 (Jupyter環境) で作成して、その動作について検証してください。ただし、異なるアプローチによるプログラムを2つ以上作成してください。
Pythonの世界へようこそ!
Hello, World!
これがあなたの最初のプログラム出力です。
8.1 参考
%reset -f
import time
msg = 'Pythonの世界へようこそ!\nHello, World!\nこれがあなたの最初のプログラム出力です。'
for char in msg:
print(char, end='')
time.sleep(0.1)
print()%reset -f
from IPython.display import display, HTML
html = '''
<style>
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.fade-in {
animation: fadeIn 4s ease-in-out;
}
</style>
<div id="animated-text" style="background-color: black; color: white; padding: 10px; text-align: center; ">
<p class="fade-in">Pythonの世界へようこそ!<br>Hello, World!<br>これがあなたの最初のプログラム出力です。</p>
</div>
'''
display(HTML(html))この演習で伝えたいことは、プログラミングには「正解」というものがひとつだけとは限らない ということです。創造性を発揮し、異なる角度から問題にアプローチする気持ちを持ってください。ある問題に対して多様な解決策が存在し、それぞれが独自の価値を持っていることを理解することが、深い学びにつながります。
同時に 遊び心 を持つことも極めて重要です。標準的でない方法を試すことが、予想外の発見や理解進化につながります。プログラミングは技術だけでなく、創造的な表現の場でもあります (エンジニアにくわえて クリエイタ としてのマインドも持ってください)。
また「プログラムコード」と「その実行結果」から、その背後にあるメカニズムや規則性を理解し、自分なりのメンタルモデルを構築することが大切です。「メンタルモデル」とは、物事の仕組みを自分なりに解釈・理解して、頭のなかに構築する内的なモデルのことを指します。。たとえば、スマートフォンのアプリがどのように動くかを理解するために、ユーザーの操作とアプリの反応の関係を頭のなかでイメージする のがメンタルモデルです。ユーザーが特定のボタンをタップしたとき、なぜ画面が切り替わるのか、どのようにデータが処理されるのかを想像することです。プログラミングでも、書いたコードがどのように動作するかを理解し、予測するためにこのモデルを使います。
さらに、学んだことを定着させるためには 実際に自分でコードを書いてみること (打ち込んでみること) が重要です。新しい内容を学んだら、それに関するプログラムをコピペではなく自分で打ち込んで、それを実行して、その結果を確認・検証する習慣を身につけてください。習って「理解してた」と思っても、実際にはそれが錯覚であることが常です。