大2でPythonを始めてから1年経過して、学んだこと・夏インターンの結果・挫折しないためのTips

## なぜ書こうと思ったか
　1番の目的は備忘録ですが、プログラミング初学者の1つのロードマップとして参考にしたいただきたいと感じたからです。夏インターンの体験談や初学者が挫折しないためのTipsも書きました。

## Pythonを始めたきっかけ
　2023年10月に大学の授業でチーム開発をすることになり、スクレイピングアプリを作るためにPythonを学び始めました。理系ですが、電気回路・電子回路が専門で、プログラミングはほとんど未経験でした。

## 期間と学習内容

2022-2023年
<details><summary>プログラミングを始める前・きっかけ(大学1~2年前期)</summary>
私は電気電子系の学科で半導体にも興味があったので、就職先は漠然と東京エレクトロンやSONYセミコンダクタを考えていました。しかし、半導体工場はどこも地方で工場で作業服を着るのも抵抗がありました。

### 転機が訪れ、半導体 → 苦手だった情報系へ
もともとB1のプログラミングの授業でC++を学びましたが、いきなり型・クラスと言われて拒否反応が出てしまい、「プログラミングは全てこんな感じなのか」と挫折しました。(確かにC++も大切だが、まずはシンプルなPythonから学ぶべき！！)

その後、B2の後期に好きなプログラミング言語で成果物を作る授業がありました。そこでスクレイピングアプリを作るためにPythonを学び始めました。(C++は絶対やりたくなかったw)なぜスクレイピングかというと、Amazon,楽天,メルカリなどの価格を一覧化できたら便利だと思ったからです。


</details>
2023年
<details><summary>10~1月 スクレイピングアプリ開発</summary>

* Python, HTML/CSS, Flask, GitHub
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810395/bdb08a81-80a8-654f-6df7-b7e247ffe5b4.png)

* 学習方法
paizaラーニング(Python入門・Flask入門講座)
YouTube([Python VTuber サプー](https://www.youtube.com/@pythonvtuber9917))
大学の書籍↓
> * Python1年生 プログラミングの仕組み
> * Python2年生 スクレイピングの仕組み
</details>

<details><summary>1~3月 Pythonで出来ることを一通り知る</summary>

* RPA, SQLite3, GUIアプリ, データ分析, 機械学習
* 学習方法
大学の書籍↓
> * 仕事が捗るPython自動処理の教科書
> * 世界一優しいPython自動化ツール開発の始め方
>
> * SQL1年生 データベースの仕組み
>
> * Python2年生 デスクトップアプリ開発の仕組み
>
> * Python2年生 データ分析の仕組み
>  
> * Python3年生 機械学習の仕組み
</details>

<details><summary>3~4月 機械学習(深層学習)に興味を持つ</summary>

* 学習方法
大学の書籍↓
> *   Python3年生 ディープラーニングの仕組み
> *   ゼロから作るDeep Learning
> *   機械学習エンジニアになりたい人のための本
> *   一番優しいPython機械学習の教本
> *   クジラ飛行机 AI・機械学習・深層学習アプリの作り方
> *   Pythonで学ぶ画像認識
</details>

<details><summary>4月 大学の先輩からエンジニア長期インターンの存在を知る</summary>

### AIエンジニア長期インターン応募

個人開発を半年ほど行い、ある程度プログラミングについて理解ができてきた時に同じ学科の先輩がエンジニアの長期インターンに参加していることを知りました。

「試しに応募してみるか」ということで、大学公式の求人サイトからエンジニアのインターンに5社応募するも、全落ち。

やはり実務未経験を採用する企業は少ないため、以下の対策をしました。
### 1. ポートフォリオ作成
今までの成果物(スクレイピングアプリ/大学の課題で作ったWebサイトなど)をGitHubのREADMEにまとめて、技術力や自走力をアピールしました。([私のGitHub](https://github.com/Hiromu1612))
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810395/ce45a93d-cf09-e176-89db-d283289284a2.png)


### 2. プログラミングサークルに入会し、案件を紹介してもらう
先輩から「実務未経験だと採用してくれる企業少ないから、プログラミングサークル経由で実務経験を積むと良い」と教えていただいたので、求人サイトで全落ちした際の安全策としてプログラミングサークルに入会しました。(学生のサークルではなく、会社運営の実務経験が積めるサークル)

### 3. 複数のエンジニア求人サイトで応募
一度ESを書けば他の求人サイトでも使い回しができるので、そこまで大変ではなかったです。
以下は私が応募した求人サイトで、基本的にWantedly(サポーターズも良いかも？)だけで十分だと思います。

> *  Wantedly：20社(うちカジュアル面接6社→合格1社)　ベンチャーが多く、返信も多かったのでおすすめ
>東大発のベンチャーが多く、とりあえず面接だけならできるがレベルが高すぎて落選
>
> *  Infraインターン：4社　返信はあるが、求人数が少なくUIも見にくいからイマイチ
>
> *  UT-Board：3社 返信がなく、高学歴層向けのサイト。求人も少なくイマイチ
>
> * サポーターズ：4月当時は知りませんでしたが、9月現在プロフィールを入力しただけでWeb系企業からオファーがたくさん来ているので良いかもしれません。1on1面接で1万円もらえるみたいで、実際にサークルのエンジニア2人がもらってました。


</details>

<details><summary>5月 AIエンジニア長期インターン合格(20社中1社)・プログラミングサークル入会</summary>

### AIエンジニア長期インターン合格(20社中1社)
 Wantedlyで応募した20社→書類選考→カジュアル面接(6社)→合格(1社)しました。
 私は実務未経験でプログラミング歴も短かったですが、Pythonに対する熱意やポートフォリオのスクレイピングアプリが評価され、なんとか公共交通系のAIベンチャー企業から合格をいただきました。


### プログラミングサークル入会
入会時には長期インターンに合格していたので

「案件をもらうのではなく、優秀な学生エンジニアと繋がりをもつこと」

を目的に入会しました。

この頃から私はデータサイエンティストを志望していたので、データサイエンティストコースを受講し始めました。コース課題はNumpy/Pandas/Scikit-learnなどを使ったデータ分析で、書籍で独学していたこともあり3日間ほどで終え、最終課題のKaggleに挑戦することになりました。
 
</details>



<details><summary>6月 長期インターン</summary>

### 長期インターン
AIの分野は画像,音声,自然言語処理に分けられますが、私は画像処理に1番興味があり、大学の研究室でも同じようなことを扱うだろうと考え、物体検知AIの開発案件に携わらせて頂いています。

主な業務内容はYOLOという画像処理AIを用いて、駐車場の空き状況を検知するといったものです。(実務未経験で知識も少ないので、いきなり実際の業務を担当するではなく社員さんからステップアップ課題が渡されました。内容が難しく、9月現在もその課題に取り組んでいます)

* Docker : 基本的な操作はある程度理解できました
* MRCNN, YOLO : 内部のアルゴリズムまでは理解していませんが、なんとなくのイメージは掴みました(論文読んだりはB4の研究室配属後でも良いかな)

Dockerを学習する際に読んだ本 ↓
> *  Docker & Kubernetesのきほんのきほん(これが一番わかりやすかったのでオススメ)
> * 触って学ぶクラウドインフラ docker 基礎からのコンテナ構築
ちなみに、9月現在はまだdockerfileをいじっているだけなので、難しいKubernetesの勉強は不要だったと思います。もう忘れてます。


</details>


<details><summary>7月 大学の期末テスト・夏インターンのES作成</summary>

大学の前期試験が7月の下旬にあり、夏インターンのES作成に2週間ほど時間を費やしたため、プログラミングをする時間がありませんでした。
(ES書くの想像以上に時間取られる...)

### 夏インターンのES作成
データサイエンティストを志望していましたが、5月の20社落ちがトラウマだったのでとりあえず大手SIerにエントリーしまくりました。

結果は
#### ⭕️合格
* 伊藤忠テクノソリューションズ
* NTT東日本
* NTT東日本グループ
* 三菱インフォメーションテクノロジー
* みずほリサーチ＆テクノロジーズ

#### ❌書類落ち
* SONY
* NEC
* 村田製作所
* 富士フイルム
* 富士通
* 大和総研

#### 🔺面接落ち
* 野村総研
* キーエンス

合格と不合格の差は
「合格者ESを見ながら書いたか否か」
だと感じています。実際、合格した企業は全て合格者ESを見ながら書きました(落ちた企業は全て我流で書いてました..)

他の敗因は
* 業界分析が甘く、ミスマッチが起こった
 → SIerとWeb系の違いを理解しておらず、コードをバリバリ書きたいならWeb系に出すべきなのにSIerにしかエントリーしなかった
* 外資やメガベンはES締め切りが早く、7月時点で既に締め切られていた 
→ 就活スケジュールをもっと把握しておくべきだった
* 給料・交通費を出してくれない企業は候補から外していた 
→ 一旦出してから考えても良かった..
* 企業理念や人物像を調べずに、惰性で出していた節がある 
→ エントリーを絞って入念に書くべきだった
* 面接・ES添削不足 
→ M1の就活本番には早い段階から入念な準備を行う
* 技術不足
 → AWSやReactを使うプログラムには応募できず、応募の選択肢が狭まった

</details>



<details><summary>8月 Kaggle(メルカリ価格予測)・JavaScript(React)の独学</summary>

#### Kaggle(メルカリ価格予測)
5月のプログラミングサークルの最終課題に着手しました。色々なコンペがありましたが、身近なテーマが良いと思い、[メルカリの価格予想コンペ](https://www.kaggle.com/c/mercari-price-suggestion-challenge)を選びました。
前処理や機械学習の実際の活用方法を学びました。時間があれば画像や物体検知のコンペにも参加してみたいです。

使った書籍↓
> *   データサイエンスの森 Kaggleの歩き方
> Kaggleのホーム画面から丁寧に解説されていて、最初に読むべきです
> *   Kaggleで学んでハイスコアを叩き出す!Python 
> 全体的に広く解説されていて、さまざまなコンペに取り組んでいる。メルカリコンペもあり、参考になりました　
> *   Kaggleで勝つ データ分析の技術
> 1番有名な本。手法の説明がとても詳しかったですが、長かったので流し読みしました。

#### JavaScript(React)の独学
元々ユーザーの目に見えるフロントエンドに興味はあり、大学の友人にReactガチ勢がいたのでその人と一緒にReactで何かアプリ開発をしようという話になりました。(ポートフォリオとしても利用できる)

10~1月のスクレイピングアプリの時は、全てが初めてだったこともありHTML/CSSは見よう見まねでやっていたので、もう一度0から学び始めました。
1週間HTML/CSSを復習し、2週間JavaScriptを学習しました。
このサイトは「1冊で全て身につく JavaScript入門講座」を読みながら作りました。
![画面収録 2024-08-14 14 54 40 (1)](https://github.com/user-attachments/assets/47c5237c-95bb-4562-a1e2-64ac57ff266a)
書籍↓
> *   一番やさしいJavaScriptの教本
>このシリーズは網羅的でわかり易い
> *   1冊で全て身につく JavaScript入門講座(ハンズオンでモダンなWebサイトを作成します、今まで読んできた本で一番面白かったです。ポートフォリオにもなるのでぜひ読んでほしい
> *   ゲームで学ぶJavaScript入門(途中まで読みましたが、canvasはWebサイトで使わない技術だと感じたのでやめました)

まだまだJavaScriptの学習が必要ですが、一旦Reactに触れてみました。
このサイトは「初めてつくるVueアプリ　三好アキ」を読みながら作りました。Reactではなく、Vueですがどちらも触ってみて、Reactの方がJavaScriptライクでスマホアプリも開発できるので、その後はReactの学習を進めることにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810395/94609bac-d9c8-3a45-0adb-1dde0e340787.png)

> * 初めてつくるReactアプリ　三好アキ　(ハンズオンでとりあえずアプリを作ってみたいというReact初学者にオススメです。三好さんの書籍はKindle Unlimitedで読み放題なので他の書籍も読むつもりです。)

</details>



<details><summary>9月 夏インターン</summary>

大学の予定や志望度の関係で、5社(合格したプログラムは7コース)のうち4社(4コース)に参加しました。

各プログラムの詳細は省きますが、他の就活生の動き・GDの進め方・就活生の中での自分の立ち位置などがわかりました。

#### 良かった点
* 自分はSIerでPMを目指すのではなく、Web系企業でゴリゴリにコードを書いていく方が向いていることがわかり、選択肢を絞ることができました
(SIerとWeb系企業の比較はこれからもしていきます)
* グループワーク自体初めてでしたが、積極的に議論に参加できました
(4社とも司会に立候補)
* SIerの業務内容やキャリアパスを知ることができました
* 学生エンジニアの中での自分の立ち位置がわかりました。理系の就活生は院生がほとんどで、学部時代から個人開発・長期インターンしている学生は少数派でかなり有利。
* 毎朝指を慣らすために「寿司打」をしている経験が活きて、素早く書記を行えました

#### 反省点
* 1,2dayではコーディングはなく、ヒアリングや課題解決といった上流しか体験できなかったです
→ 3day以上の長めのプログラム
* 全てオンライン開催で、GDが行いにくく現場の雰囲気などもわからなかったです 
→ 現場受け入れ型の対面プログラム


</details>

<details><summary>今後やりたいこと・目標</summary>

### B3の12月まで
* 長期インターンで実務経験を積む
今は社員さんから与えられた課題を一人で行なっている状態なので、実際の上流~下流工程を体験し、データサイエンティストの業務内容を具体化したいです。
* Reactで大学の友人とアプリ開発
まだ構想の段階でどんなアプリを作るか決めていないので、2人で話し合って最終的には収益化を目指しています。
今の所、大学の空き教室をスクレイピングなどを使ってSPAで作ってみたいと思っています。
* サポーターズで色々なweb系企業の話を聞く
9月の夏インターンを通して、私はSIerではなく、Web系企業でゴリゴリにコードを書く方が合っていると感じたのでサポーターズで色々なWeb系企業の話を聞いてみようと思います。(1on1面接で1万円もらえるみたいだし)

### それ以降
ここからは先の話なので漠然としています。
* AWSに触れてみたい
長期インターンやReactのアプリ開発で触れる気がしますが、本格的に学んでみたいです。
1番基本的なAWS資格である「[AWS Certified Cloud Practitioner](https://aws.amazon.com/jp/certification/certified-cloud-practitioner/)」は就活時までにとっておけば、他の学生と差別化できそう。

* 画像処理AI関係の論文を読み漁りたい
時間がかかりそうなのでまだ読めていませんが、B4の研究室配属後には読むはずなので先に読んでおきたいです。
特にYOLOは現段階で動かしているだけで内部アルゴリズムなど理解できていないので、じっくり理解する時間が必要です。

</details>

## さいごに
　去年の10月にPythonに触れてから新たな世界が広がり、新たな出会いもありました。まだまだ知識・経験不足ですが、1年間挫折せずにここまで来れたのは
「作りたいアプリがあったから」
だと感じています。学びたてはエラーの連続でモチベーションの維持が難しいと思いますが、作りたいサービスを目標に楽しんでプログラミングすることが大切だと感じました。

　以下はプログラミング学習で挫折しないための自分なりのTipsです。
### 挫折しないためのTips
* 作りたいサービスを決める
　ただ漠然とプログラミングを始めても、学んで終わりになってしまうので、
　「作りたいサービス→技術選定(言語・フレームワーク)」
 の順に目的を持って学習を始めた方が良いです。

   私の場合..
  「スクレイピングアプリ → Python(HTML/CSS)・Flask」
  
<br>

* いきなり全てを理解(暗記)しようとしない
　これは色々なサイトに書いてありますが、今書いてあるコードを全て暗記する必要はありません。なんとなくのイメージさえあればそれを基にネット検索で解決できます。
まずは教材と全く同じコードでいいので、プログラミングが出来たことへの楽しさ・達成感を感じるとモチベーションが維持できます。
<br>

* 基礎は程々に。応用は後から身につける
　これも色々なサイトに書いてありますが、paizaラーニングなどオンライン教材でプログラミングの基礎を学ぶのは1回で十分です。何度も繰り返す必要はありません。
ある程度基礎がわかったら、作りたいサービスをネット検索orチャットGPTで必要な技術を聞いて、足りない知識はその都度補いながら開発していく方が応用力が身につきやすいです。

<br>

* エラー発生時はGitHub Copilotを使う (学生の場合 無料, 通常は10ドル/月)
Chat GPTでも良いですが、いちいちアプリを開いてコピペは面倒です。
GitHub Copilotなら、エラー修正からコード補完まで効率的に行え、作業効率が爆上がりします。特にコード補完が便利で同じような構造のコードは自動で作成してくれます。
[GitHub Copilotの学生申請方法](https://qiita.com/SNQ-2001/items/796dc5e794ac3f57a945)
大学のwifi環境で申請すると、すぐに申請が通るようです。私は家のwifi環境から申請したので3日間ほどかかりました。
　注意点は、GitHub CopilotやChat GPTに頼りすぎないことです。自分でネット検索したり、英語の文献をGoogle翻訳を使って読んだ方が早く解決できることもあります。

<br>

* VScodeの拡張機能を活用して効率アップ
GitHub Copilotも便利ですが、VSCodeの拡張機能も作業効率を上げる大切な要素です。
1.[VSCodeおすすめ拡張機能一覧](https://zenn.dev/pike/articles/92a05557989b8b)　← 基本的な拡張機能がまとまっています
2.[https://pythonsoba.tech/vscode-extension/](https://pythonsoba.tech/vscode-extension/) ← 1つ目のサイトに含まれていない拡張機能を追加で入れると良いです