見出し画像

【全公開】プログラミング未経験者が42 Tokyoの入学試験「Piscine」に合格のするためにした、42日間にわたる「事前準備」

こんにちは、42tokyo Advent Calendar 2021 の7日目を担当する、在校生の「ほびんち」です。

2021年の5月に42 Tokyoの入学試験「Piscine」を受験し、無事合格することができました。

Piscineの合格率は4%(2021年6月21日時点)と、狭き門。

ぼくはプログラミングの経験はありませんでしたが、どうしても42 Tokyoに入学したかったのでPiscineの42日前から「事前準備」を始めました。

そして未経験のぼくでもPiscineに合格できた大きな理由がその「事前準備」だと考えています。

この記事では大きく分けて4つの分野の「事前準備」についてお話しさせていただこうと思います。

まずはPiscineと合格者の特徴を知るための「①情報収集」、42に合っているかどうかを確認するための「②マインドセット」、技術面でのストレスを最小化するための「③技術力」、持ち時間を最大化させるための「④生活の調整」です。

この記事では、未経験者が42 Tokyoの入学試験を合格するためにした事前準備を、試験のネタバレなしでご紹介。

これからPiscineを受ける方の参考になればと思います。

※当記事の内容はあくまでも「ぼくはこうやってPiscineの事前準備をしました」という話であり、Piscineの結果を保証するものではございません。

Piscineは合格基準は明かされていないため、そもそもぼくの事前準備のアプローチが正しかったのかどうかも不明で、本記事の内容はあくまでも一つのサンプルとしてお考えください。

プログラミングの事前準備についても書いていますが、Piscine前に全くプログラミングをしたことがない人でも合格している例があります。


⓪事前準備前の著者の状況

・無職で就活中でした。
・結婚しており妻は仕事をしていたため主夫でした。
・プログラミングはほぼ未経験でした。
・5時間ほど『独学プログラマー』に取り組み、演習でPythonを使って「Hello, world!」を表示させることぐらいのコードしか書いたことがありませんでした。
・六本木校舎までは40分程度で通学が可能でした。

①情報収集

42の公式のページや、書き込みなど満遍なく情報を収集していきました。

そして42 Tokyoで事務局長を務められている方の「42に合っているかどうかの一点が大切」というコメントを発見し、「42に合っている学生」とは何かを考えました。

その段階で詳しく学んだのは、42の特徴であるピアラーニング。

続いて入学試験合格者の特徴を抽出するため、再度さまざまな人の書き込みを読みました。

42 Tokyoは2020年に開校したばかりなので国内の情報は少ないのですが、本家本元のパリの42は2013年、シリコンバレーは2016年に開校しているので、情報が日本よりも多くあります。

フランス語は読めないので、アメリカのシリコンバレー校の学生が質問サイトなどに書いた書き込みを中心に一つ一つ収集。

中にはネガティブな意見もありましたが、これからPiscineを受ける人へのアドバイスや、合格する人の特徴が書かれてあり、「合格する人の特徴」を知るために勉強になりました。

アメリカのMike Brakeさんのように、Piscineの様子を毎日書き記している人もいました。(全部読むのは大変でした。)

これら全てをもとに「合格する人の特徴」をまとめていきました。

②マインドセット

情報収集で抽出した「入学試験に合格する人の特徴」と、「自分は具体的にはこうしたほうがいいのではないか」という点を何日もかけてA4一枚にまとめました。

何日もかかったのは、自分に刺さる言葉になるまで、なんども言葉遣いの修正を重ねたからです。

以下がまとめたものとなります。

このシートは自分なりに「42に合っている人」を抽出したもので、このシートを見ると、「自分がすでに当てはまっているもの」と「取り組まなければいけないもの」がわかります。

このシートを印刷し、Piscine中に機を見ては現在の自分を振り返るために使っていました。

特にぼくの場合はシートの中で「Communication」が弱いと感じていたので、特に意識をしていました。

Piscine中にこのシートに書かれてあることが全てができたわけではありませんが、このA4一枚のまとめが指針となり、より42の学生らしい人材に育つことができたのではと思います。

Piscineは過酷なので、いくら見繕っても素の自分がでます。

ですのでこのシートは42の合格のために自分を偽るためのものではく、あくまでも自分の中にある資質をより伸ばすための指針として使っていました。

③技術力

Piscineで使用される言語はC言語なので、C言語のに慣れるようにしました。

トータルのプログラミング学習時間は191時間ほど。

メインに学習教材はハーバード大学の無料のコンピュータサイエンス入門クラス「CS50x」

このCS50xはアメリカのシリコンバレー校の生徒がオススメしており、確かにわかりやすく学習が非常に捗りました。

特にぼくは視覚的に学ぶほうが学習効果が高まるので、動画や図を見ることで、よりいっそうコンピューターサイエンスへの理解が深まりました。

全部で11週間分の授業と課題があるのですが、C言語は6週目までだったので6週目まで受講。

CS50xは日本語にも翻訳されており、おすすめの教材です。

シリコンバレー校の生徒がオススメしていた本『プログラミング言語C第2版』も少しだけ演習を進めましたが、内容が難しく、今思い返すとやらなくてもよかったかと思います。

この本は42 Tokyoでの学習が進んでから再度取り組む予定です。

ひとつ気になっていたのが自宅で使っているMacのスペック。

13インチのMacbook Proで2015年のモデルなので6年前のものとなり古い機種です。

メモリが8GBだったので最低ラインだったとは思いますが、CS50xの課題でも問題なく使うことができたので問題ないかと判断しました。

もしMacのスペック不足で課題の進捗に影響が出るようであれば、六本木校舎まで通うことを考えていました。

新しいMacを購入するよりもPiscineの全期間、六本木校舎まで通う交通費のほうが明らかに安いので。

以下、やったことの一覧となります。
・CS50x、week5のlab5まで終わらせる
『Cの絵本』読了 ※視覚的にわかりやすかったです。
『プログラミング言語C第2版』途中まで読み、演習をこなす ※やらなくていいかと思いました
・Gitのダウンロード
・GitHubアカウント作成
・GitとGitHubの使い方をある程度知る
・Discordの自己紹介からプログラミング経験者の方をピックアップし、すぐに質問できるようにフレンド登録 ※必要ありませんでした。
・Unix Shellの使い方を学ぶ
・Vimのチュートリアルをこなす
・Vimでコードを書き始める
・MacVimのインストール ※結局使いませんでした
・コマンドショートカットを覚えはじめる(リストの印刷)
・校舎に持っていくもの準備(マウスや本など)
・Macのコマンドショートカットを学ぶ ※校舎のMacにマウスがついていないという書き込みを見つけMacのショートカットコマンドを学んだのですが、校舎のMacにマウスはついていました。

④生活の調整

生活全般の準備はとても大切だと考えていて、その理由はPiscine中にプログラミング以外のことを考えなくて良くするためです。

余計なことを考えなければ、プログラミングに全ての時間と集中力を投入することができます。

まず大前提として、当時のぼくは就活中ではありましたが専業主夫だったので、会社員の方や学生の方と比べると時間はありました。

※ 仕事をしながら、または学業を続けながらPiscineを受けて合格した人はたくさんいるので不可能ではありません。しかし「この人たち一体いつ寝てるんだろう?」というレベルで取り組まれており(実際はどうか分かりませんが)、ぼくが学生や会社勤めをしていたら絶対に合格は無理だったろうと思います。

時間はありましたがロングスリーパーなので、睡眠時間は最低7時間を取らなければ翌日は廃人のようになります。

ですので、起きている時間でプログラミング以外の時間を最小化するために、以下に取り組みました。

買い物の最小化
・買い物は基本ネットスーパーを使っていましたが、気分転換に週一回はスーパーに行くようにしていました
・買うものが多いと脳が疲れてしまうので、オートミールやお茶漬けなど、腐らずに買い込んでおけるものは、先に買っておきました。

曜日ごとに料理を何を作るかを決定、以下は基本メニュー
・朝→オートミール茶漬けに鯖缶
・昼→サラダ、味噌汁、ご飯
・夜→魚か肉、サラダ、味噌汁、ご飯
・妻には申し訳ないですが、妻のお弁当は冷凍食品を中心に

栄養食の買い込み
・チョコレートバーとカロリーメイトを買い込みましたが、最初の1週間で食べ尽くしました。

追加で買い物が必要にならないように、日用品はすべてストック
・ゴミ袋
・シンクのネット
・生ゴミネット
・サランラップ
・食器洗剤
・洗濯用洗剤
・トイレットペーパー
・ティッシュ

風邪を引いた時の備え
・薬
・アクエリアスの粉
・厚着用の服

プリンターとインク、A4の紙
・ぼくはアナログ人間なので、おそらく課題は一度印刷して、じっくりと線を引きながら目を通さないと頭に入らないため、これらが必要となります。

LINEアプリの通知を切る
・集中が途切れないようにするためです。

習い事を一時ストップ
・合気道に毎週1、2日通っていましたが、当時はコロナ禍でそもそも稽古が開かれていませんでした。稽古があった場合も、Piscine中は行かなかったと思います。

用事が入らないようにする
・友人に返信できないと伝える

健康保険料、年金の支払い
・毎月紙の振り込み用紙を使って支払いをしていましたが、Piscine中は支払いにいかなくてもいいように前もって支払いをすませました。

家賃の支払いをすませる
・上記と同様の理由。

アニメを見るのをやめる
・ストレス解消にピシン中は週に1本だけアニメを見ていました。

睡眠時間の調整
・ぼくは超朝型の人間なので(夜はゾンビ並みに知能が下がります)朝3時に起きて、夜8時に寝る習慣を2年間続けていました。
・毎日11:42pmが課題の提出期限と書き込みにあったので、Piscineに備えて朝7時に起き、夜の12時に寝る習慣に変更しました。※試験の運用法が代わったので、睡眠習慣を変える必要ありませんでした涙。

モデルスケジュールの作成
・一日の理想的な時間配分を考えました。

必要ないかもしれませんが「42」の名前の由来となっている『銀河ヒッチハイクガイド』を読了しました。イーロン・マスクやシリコンバレー起業家の愛読書とも言われており、痛快な展開が楽しめました。

⑤やらなかったこと

やらないことのリストはToDoリストよりも大切で、限られた時間の中でより重要なことに時間を使うために必要だと考えています。

『苦しんで覚えるC言語』を読むこと
過去42Tokyoの受験生のブログなどを見ていると多くの人が参照しているので、他のPiscineを受ける人の誰かが読んでいるだろうと考えました。Piscine中に分からないことがあれば『苦しんで覚えるC言語』を読んだ人たちに聞けばいいかと思いました。

・課題を確認すること
情報収集の段階で、海外の方がPiscineの課題をオンライン上にあげているものを発見しましたが規約違反ですし、そもそも同じ問題が出題されるかどうかも分からず、解いても恐らく意味が分からずにパニックを起こしそうだったので、見ないようにしていました。

・Visual Studio Codeのインストール
一番人気が高いツールですが、ぼくの使っているMacがそもそもWindowsではなく、環境設定にも時間がかかりそうだったのでインストールをしませんでした。ただ、Visual Studio Codeを使っている方は多かったので、分からないことがあればすぐに聞けるというのはうらやましいと思いました。

さいごに

以上がプログラミング未経験者が42 Tokyoの入学試験「Piscine」に合格のするためにしたすべての「事前準備」となります。

大きく分けて「①情報収集」、「②マインドセット」、「③技術力」、「④生活の調整」の4点に触れました。

いろいろなことに触れましたが、一番大切なのは「楽しめるかどうか」だと思います。

42を卒業しても学位は取れませんし、海外の校舎では有名企業への内定者がでているといっても、42 Tokyoは2020年に開講したばかりで実績がまだなく、知名度も現在は高くはありません(今後変わってくると思いますが)。

それでも42という学校のコンセプトに素直に「ワクワク」しているかどうか、そしてどんな状況でも「楽しめるかどうか」が大切です。

明日は、t_komatsuさんが「42intraのCLIツールgoftにコントリビュートする話」を書いてくれる予定ですので、そちらの記事もぜひお楽しみに!

おまけ:プログラミング学習記録(Piscine開始までの42日間)

各日付のすぐ下の行に、「その日の学習時間」と「累計学習時間」を記載しています。

振り返ってみると不要だったなと思う点については「※」のあとに、「※以降使いませんでした」のようにコメントを付け加えています。

3/29(Day1)
・0時間(累計5時間)
・以前に5時間ほど『独学プログラマー』でプログラミングに挑戦したので累計時間は8時間とカウント
・42についての情報を集め始める

3/30(Day2)
・0時間(累計5時間)
・情報収集

3/31(Day3)
・0時間(累計5時間)
・情報収集
・情報収集の結果、翌日からCS50xを受講することを決める

4/1 (Day4)
・3時間(累計8時間)
・CS50xで学習を始めるために、edX、GitHub、eDのアカウント作成
・CS50xの動画1本(Week0)見終わる

4/2 (Day5)
・1.5時間(累計9.5時間)
・Scratchで何ができるのか色々試し、短いアニメーションを作成

4/3 (Day6)
・3時間(累計12.5時間)
・他の学生が作ったScratchを見て、どんなことができるかを知る
・Scratchでチュートリアルを見まくり、操作方法を学ぶ
・Scratchにすでに実装されているキャラクターと背景から使うものを選ぶ

4/4 (Day7)
・3時間(累計15.5時間)
・Scratchでひたすら作業
・アイディアが形になってきた(アニメーションと簡単なゲームを併せたもの)

4/5 (Day8)
・4.5時間(累計20時間)
・Scratchでひたすら作業、音以外は完成
・図書館からプログラミング本を大量に借り、本の目次を眺め、読む順番の決定
 ※結局読みませんでした

4/6 (Day9)
・4時間(累計24時間)
・Scratchでひたすら作業→音も入れて完成→CS50xで提出
・CS50xの動画1本(Week1)を途中まで視聴

4/7 (Day10)
・3時間(累計27時間)
・CS50xの動画1本(Week1)視聴完了
・CS50x宿題のLab1(1)取り組む→完了→提出
・CS50x宿題のLab1(2)取り組み開始

4/8 (Day11)
・3時間(累計30時間)
・CS50xの宿題のLab1(2)完了→提出

4/9 (Day12)
・3時間(累計33時間)
・CS50xの宿題Problem set1に取り掛かる

4/10 (Day13)
・3時間(累計36時間)
・CS50xのProblem set1(cash)完了→提出
・CS50xのProblem set1(credit)に取り組む
・入門本で理解を深めようとするが、理解できない

4/11 (Day14)
・3時間(累計39時間)
・宿題のProblem set1(credit)完了→提出

4/12 (Day15)
・3時間(累計42時間)
・CS50xのWeek0とWeek1の講義の見直し
・1Byteがなぜ256の異なる値を示せるかを理解(0を入れて)
・スコープの問題について理解が深まる
・オリジナルファンクションの作り方への理解ができていない
・CS50x、Week1のShorts(補足解説動画)を見る
・DeclarationとAssignmentが合わさってInitializationになると知る
・ifの連続がnon mutually exclusive branchesだと知る
・CS50xの講義を参考に、自分で解くプログラミングの問題集を作成

4/13 (Day16)
・3時間(累計45時間)
・CS50x、Week1のShorts(補足解説動画)を見終わる
・Ctrl + bなどのショートカットを覚える
・自作問題集を解いていく

4/14 (Day17)
・3時間(累計48時間)
・自作問題集を解いていく
・ブックオフでプログラミング本3冊購入(1冊210円と激安)
 ※結局全ては読みませんでした

4/15 (Day18)
・4時間(累計52時間)
・CS50x、Week2の動画を見終わる
・CS50x、Lab2に取り掛かる
・CS50x、Week2 のShorts (補足解説動画)を見始める

4/16 (Day19)
・4時間(累計56時間)
・CS50x、Week2 のShorts (補足解説動画)を見終わる
・Lab2終了→提出
・Problem Set2のReadability終了→提出
・Week2の授業のソースコードで問題集作り
・arrayがいまいち分かっていない

4/17 (Day20)
・6時間(累計62時間)
・CS50x Problem Set2のCaesar終了→提出
・atoiの使い方に手こずる。使わなくても良いところに使おうとしていた。→ミスがあったらステップバイステップでprintfを使って探っていくことを学ぶ
・ブックオフでプログラミング本1冊購入(210円)

4/18 (Day21)
・5時間(累計67時間)
・CS50x Problem Set2のSubstitution終了→提出
・CS50x week3のレクチャーを聴き始める

4/19 (Day22)
・5時間(累計72時間)
・CS50x Week3のレクチャーを見終わる
・CS50x Week3 のShorts (補足解説動画)を見終わる
・CS50x Lab3終了→提出
・『プログラミング言語C第2版』を19pまで読む
・CS50x problem Set3に取り掛かる
・selection sort, bubble sort, merge sortを習うが、実際にどのようにコードに落とし込むかが分かっていない

4/20 (Day23)
・7時間(累計79時間)
・CS50x Week3のProblem Set3 Plurality終了→提出
・CS50x Week3のProblem Set3 Runoff終了→提出
・YouTubeで有志のレクチャーを参考にしてやっとコードを書き上げることができた、なんとか提出したが、完全に理解しているとは言い難い
・とりあえずはまず自分でわからないなりに作ってみて、どうしてもわからなければ、他の人の解説を読んでみるということを繰り返す。
・gitについて調べる

4/21 (Day24)
・3時間(累計82時間)
・『プログラミング言語C第2版』を読みすすめる

4/22 (Day25)
・0.25時間(累計82.25時間)
・自作問題集を眺める

4/23 (Day26)
・2.25時間(累計84.5時間)
・『プログラミング言語C第2版』を読みすすめる
・『プログラミング基礎の基礎』を少し読む

4/24 (Day27)
・2.5時間(累計87時間)
・CS50x Week3のProblem Set3 Tidemanに取り組む

4/25 (Day28)
・3.5時間(累計90.5時間)
・CS50x Week3のProblem Set3 Tidemanに取り組む

4/26 (Day29)
・7.5時間(累計98時間)
・CS50x Week3のProblem Set3 Tidemanなんとか終了→提出
・CS50x Week4の講義を見る
・CS50x Week4のLab4に取り組む→提出
・CS50x Week4のProblem Set 4のFilter(Less)にとりかかる
・ポインターが意味不明

4/27 (Day30)
・6時間(累計104時間)
・CS50x Week4のProblem Set 4 Filter(Less)に取りくむ
・写真にフィルターをかける演習だが、Blurに手こずる
・CS50x Week4 Shorts(補足動画)を一部見る
・tempを使ったswapの方法に慣れてきた
・16進法の考え方が面白い

4/28 (Day31)
・4.5時間(累計108.5時間)
・CS50x Week4のProblem Set 4 Filter(Less)完了→提出
・CS50x Week4のProblem Set 4 Filter(More)完了→提出

4/29 (Day32)
・6時間(累計114.5時間)
・CS50x Week4のProblem Set 4 Recoverに取り組む
・CS50x Week4 Shorts(補足動画)を全部見終わる

4/30 (Day33)
・8時間(累計122.5時間)
・CS50x Week4のProblem Set 4 Recover完了→提出
・jpgをjpegと記入しているのに気づかず、3時間ほどミス探しに時間を費やしてしまう
・CS50x Week4で問題集を作る
・4月の振り返り
・5月のPiscineまでの目標、学習計画を立てる
・CS50x Week5の講義を一部聞く

5/1 (Day34)
・7.5時間(累計130時間)
・CS50x Week5の講義を一部聞く
・『プログラミング言語C 第2版』に取り組む(演習1-8まで)
・『プログラミング言語C 第2版』の日本語訳が古めかしいため、一応英語版の本を発注 ※結局1ページも開きませんでした
・Gitの使い方の動画を見る

5/2 (Day35)
・6時間(累計136時間)
・CS50x Week5の講義を一部聞く
・『プログラミング言語C 第2版』に取り組む(演習1-12まで)

5/3 (Day36) ピシン7日前
・7.5時間(累計143.5時間)
・『プログラミング言語C 第2版』に取り組む(演習1-13まで)
・Vimチュートリアルをレッスン3まで終わらせる
・GitHub Desktopのダウンロード ※結局使わなかった
・MacVimのダウンロード ※結局使わなかった
・terateail登録(Q&Aサイト)※結局使わなかった

5/4 (Day37) ピシン6日前
・9.5時間(累計153時間)
・『プログラミング言語C 第2版』に取り組む(演習1-15まで)
・昨日学んだVimチュートリアルをもう一度最初から行い最後まで終わらせる
・CS50 Week 5 Lab5に取り組みかかる
・舌の付け根に痛みを感じる

5/5 (Day38) ピシン5日前
・8時間(累計161時間)
・Vimチュートリアルを最初から再度取り組む
・Piscineに備えて、マインドセットをまとめる
・昨日水を大量に飲んだおかげか、舌の付け根の痛みが治る
・毎日 15、6時間をピシンに費やした人をネットで発見。どうやったらできるのか。。。

5/6 (Day39) ピシン4日前
・6.5時間(累計167.5時間)
・CS50 IDEをVimモードにして、Vimでコードを書き始める

5/7 (Day40) ピシン3日前
・7.5時間(累計178時間)
・CS50x Week5 Lab5終了→提出 
・Piscineに備えてマインドセットを再ブラッシュアップし、プリントアウト
・Macのコマンドショートカットを印刷し、実際に使ってみる

5/8 (Day41) ピシン2日前
・9時間(累計186時間)
・『Cの絵本』を1日で読了→知らないことが多い、視覚的に勉強になる
・『プログラミング言語C 第2版』を頭から音読 第一章だけ
・Macのコマンドショートカットを使って、作業

5/9 (Day42) ピシン前日
・5時間(累計191時間)
・良い質問の型を学ぶ
・CS50xの自作問題集を眺める
・Linuxコマンドの印刷
・gccを使わなくてもmakeでコンパイルできる理由を確認する


コメントお待ちしています~☕ mondでは匿名の質問・メッセージを募集しています。なんでも送ってね👍 https://mond.how/ja/hovinci_jp