大学でのプログラミング講義が苦手な人へ

:::note warn
- この記事は筆者が酒を３杯飲んで書いたため文章が拙いです
- 筆者の独断と偏見が100%入ってます
- あまり参考になる。。。いや、ならないかもしれないです。
:::

# はじめに
どうもGadgeloggeだ。なんか酒飲んでたら急に記事を書いてみてぇなって欲が出てきたためこの記事を随筆することにする。
タイトルの通り「プログラミングに苦手意識を持つ人」への助言っつうかアドバイス的なことを書こうと思う。

もしかしたら教授方を敵に回してしまいそうな記事になっちゃうかもしれないが、正直に俺が思っていることをつらつらと書いていこうかなと思う。

ちな完全に俺の勝手な考え方と偏見が混じっているので批判は勘弁してな。。。（笑）

# 書いている人のスペック
- プログラミング基礎と応プロを落単
- 独学でアプリ作ってる
- コーディングテストとかアルゴリズムを求めるコーディングは未だに苦手

# プログラミング好きですか？
突然質問で申し訳ないな。この質問をして「好き」って答えた人
ええやん最高やで。そのまま突き進んで頑張れ！

逆に「嫌いやわ。。。」「何やってるかわかんない」「大学の講義で嫌いになった」「なんか違う」
って答えた人。俺と同じやなwわかるでその気持ち。

今回は嫌いやわって答えた人を主軸としてこの記事の内容を書いていこうと思う。

# そもそもなぜ嫌いなのか？
多分嫌いになる理由は複数あって、まあ代表的な例で言うと以下の通りかな。

- 大学の講義がよくわからん(基礎プロ・応プロ・その他の講義など）
- なんか入学前に思ってた講義と違う

もうちょい細かく掘って話すと

### 大学の講義がよくわからん
1つ目の原因はこれ。
多分これがみんなが思っていることやろ。

**「IFとかポインタとか再起処理とかわかんねぇよしらねぇよ何やってんのかよくわからねぇよ。というかやってることが地味すぎて面白くないし興味もたねぇよ。俺はゲームとか作りたいんだよ。」**

な感じで思っているんじゃないのかな？

### 入学前に想像していた講義と違う
多分2つ目の原因はこれ

入学前：「俺はプログラミングを学んでゲームとか作れるようになるんや！」
入学後：「え？プログラミングくっそ地味じゃね？これなんのためにやってるのか全くわからんし意味わかんねー興味湧かんわー」

だいたいこんな感じやろ。
大学側が思っているプログラミング教育の方針と生徒側が大学に求めているプログラミング方針の考え方が合っていなくてお互いに”ミスマッチ”が起こっている状況ではないのかな？
と思う。

ただこういう考え方をしている人にちょっと次のセクションで厳しいことを言うんやけど・・・・
# 大学は研究機関←コレ大事
そもそも大学は研究機関なんよね。なので必然的に学ぶ内容も卒業研究とかで使うために必要な知識を学ぶことになる。
なので”アプリ作りたい”・”ゲーム作りたい”って人はどちらかというと大学よりも専門学校とか高専とかの方が合っていると思う。（違ってたらごめん）

なので学ぶ内容が研究をする上で必要な部分になってしまうから
基本的には**プログラミングの基礎的なテクニックと数学的な考え方を身につける**ことに焦点が置かれているんよね。

要するに「アプリを作る・ゲームを作るなどのプロダクトを作る教育方針とはまた別」ってこと。
# そもそもできない方が普通だし面白くなくて当たり前

もちろん大学の講義のやり方だと”意味がない”訳ではないんよ。確かにプログラミングをする上での最低限の知識は身につく。

。。。。がそんなの面白くねぇよな。90分間よくわからんことをさせられてたら途中でモチベーションが落ちて居眠りしだしてDream .........な感じでな。

ぶっちゃけ俺は応プロを3回再履修してるけど（くそ）、最後の課題までクリアしている人は半分くらいだと思う。
またクリアした人でも
「稀で単位取れたわーw教科書暗記したらいけたw」
「できる友達に答え見せてもらって単位取れたわ」
「単位取れたからプログラミングはもういいわ」
みたいなことを言う人が大半だと思う。（それってプログラミングの力身についているのか疑問）

というかこの学科に入ってきて初めてプログラミングやパソコンに触る人も多いのではないだろうか？(ファイルのコピーとかの操作の段階で苦戦している人がいる）

正直、講義という限られた時間の中で完全な初心者にプログラミングを学習させるのは無理があると思う。



# 嫌いにならないようにするためには

 ここまでネガティブなことばかり言ってきたんだけど、読んでる人はこう思ったはず。

**「じゃあ嫌いにならないようにする方法教えてくれよ」**

ってな。じゃあ教えるんやけど、個人的には
**プログラミングは反応がわかりやすくなれば面白い**と感じるんよね。

。。。ん？どゆこと？？って思った人がいたらわかりにくくてごめん。
多分今までのやり方だと**反応がわかりにくい**と思ってるんよね。
例えばコード書いて動かしても、
- 黒背景に白い文字が出てきてなんかしてるわ
- 教えたとおりにやっても文字が変わったり数値が変わったりするだけだわ

みたいな感じだと思う。ちょっとなんか**一生懸命コード書いて得られた成果**が薄い気がするな。

じゃあ逆に**反応がわかりやすいようにすれば**モチベーションが上がると思ってて
例えば
- コントローラーやキーボード・マウスを動かすと画面に表示された何かが動いて、目的を達成するようにする。（ゲームのキャラクターとかが移動したりね）
- スマホの画面に表示されたボタンを押すと、音が鳴ったり光ったりするようにする。
- どこかのサイトから画像や文字を取得して、表示するようにする。
とか結構あるな。さて、ここで**反応がわかりにくい・わかりやすい例**を紹介したんやけど
この2つには共通点があるんよ。
それは**入力と出力**やな。ほらC言語で習ったと思うけどsscanfとprintfってやつね。

講義内ではキーボードで文字(値)を入力して、出力はディスプレイに表示みたいな感じだったんだけど
俺は
入力をこんな感じで考えて
- 画面のタップ・キーボードのキーを押す・マウスのクリック
- センサーの入力（例えばモーションセンサーでスマホを振る反応する）

出力をこのような感じに考えてやれば
- ゲームのキャラがジャンプをする・移動をする・タップすると画面の色が変わる
- センサーに反応して、ライトが光る・スマホが振動する


プログラミングに対する興味というか面白さ・やってみたいなってモチベーションが上がると思うんよ。

。。。。どう？モチベーション上がった？もし興味が湧いた人は次のセクションを見てほしい

# じゃあそれを実現するためには
ここまで読んでくれたなら
「じゃあ反応がわかりやすいプログラミングをするにはどうすればいいねん」
と思うかもしれん。どストレートで言うと


**大学の講義だけではなく、講義外でプログラミングを勉強してなんでもいいから作品を作ってみよう。**

例えば
- ゲームとか
- スマホのアプリとか
- Webサイトとか
色々あるな。とりあえず
「俺ゲームに興味あるなー」
「スマホのアプリ作ってみたいなー」
「Webサイトで自己紹介ページ作ってみようかなー」
みたいにやりたいこと(目標を定めたら)を思いついたら、すぐに取り掛かろう。

え？何からやれば良いかわからないって？？？

**ググろう**

「Webサイト　作り方」
「iPhoneアプリ　作り方」
「Unity ゲーム　作り方」

なんかでググれば今はたくさん情報が出てくる。基本的に俺もスマホのアプリを作るときはひたすらググってるし、現役のエンジニアの人もググってる。
みんなググってる。（あとこのサイトでも情報を扱ってたりするね）

ググる→試行錯誤して作る→わからん→またググる（以下略
この繰り返し。最初は検索の仕方がおぼつかなかったりするけど、慣れてくればググることも上手くなってくる。
調べるスキルは大切やで。（意外とみんなわからなかったらググろうとする人いない）

**そして完成させよう**。クオリティーとかはどうでもいいい。とりあえずやり切ることが大切だと思う。
ここまでできたならば
- 調べる能力
- 行動力
- できた時の達成感

とか大学の講義では得られない経験を得ることができると思う。。。。！

### 要するに
「自分で作りたいものを決めて、自力で頑張れ」

# そしてC(というか講義）の大切さを知ってほしい
そしてまた大学の講義の話に戻るんだけど、なんらかの作品を作っていると
「あれ？ここ大学の講義で学んだとこじゃね？（IFとかFORとか）」と思う場面が出てくると思う。

そうなんよ。ここで大学の講義で学んでいる基礎的な部分の知識が関わってくるんよね。
あと個人で作品を作っているとプログラミングの理解力の無さに絶望すると思う。（この部分のコードの意味がよくわからないとか）

その時に基礎プロや応プロで使った資料や教科書を見返してみて、コードを読み解いていく・・・みたいなことをするとすごくNiceだと思うわ。

あと意外とC言語は他の言語の元となっていたりしてて、例えば俺がiPhoneのアプリを作る際に使っているSwiftなんだけど
ドキュメント（プログラミング言語の説明書）にこんなことが書かれている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1657253/68508282-63fe-d733-74c6-615f841ace99.png)
【該当ページ(更新で画像の文言は消えてる)】
https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics#app-top

**「Swift は、iOS、macOS、watchOS、tvOS アプリ開発用のプログラミング言語です。C または Objective-C での開発経験がある場合は、Swift の多くの部分に精通しているでしょう。」**

ってな。なのでC言語での理解がある程度あると、今後何かを作っていきたいときにすごく助けられると思うし、他の言語を学ぶ際のハードルが下がったりする。

# まとめ
長々と俺のクソみたいな助言というか話に付き合ってくれてありがとう。色々と語ってしまったけど、プログラミングをする上で1番重要なことは

**楽しむこと**

だと思ってる。
もしこの記事を見て応プロや基礎プロでプログラミングへの苦手意識を少しでも和らげることができたのであれば幸いやわ。
俺もプログラミングはまだまだ理解できていない部分もあるので、一緒に頑張っていこうや。

それじゃ、また別の記事で会おう😁