TECH::EXPERTでの2ヶ月半を振り返る
2ヶ月半TECH::EXPERTで学習してきました。
ここまでをストーリーっぽく書きました。長いです。
『テーマ』
・スピード感への意識
・アウトプットの大切さ
・ライバルの存在
・楽しむこと
この辺に注目してもらえらばと思います。
通うと決めたきっかけ
自分の事業をやめて、普通の就職活動をしてた、2019年9月。
こんなもんなのか、普通でいいのかと感じていた。
そんなある日、まこなり社長のyoutubeでエンジニアという道があるということと、TECH::EXPERTの存在を知った。
当時(今も)貯金は1円もなく、受講料60万円というとてつもない額にひるんだが、
迷っている暇があったら、やってみようと思い、飛び込む決意をした。
通うまでの2週間
無料カウンセリングをしてもらい。ついに入学日が決まった。
自分は、大学中退で学歴もない。実際に就職した経験もない。このまま飛び込んでしまっては意味はない。
と感じたので、事前学習として2週間、progateというサイトでHTML、CSS、Ruby、Railsだけを徹底的に勉強した。
はっきり言って当時は、全てを理解できていなかったが、後になってこの事前勉強は役に立った。
まったくの無知よりかは、こんなのあったなと感じることができたからだ。
何事も予習、復習は大切だということ。
初週の爆速
前置きが長くなったが、ここからついに入学(キックオフ)
やる気に満ち溢れていたし、負けたくないという気持ちも前面に出した。
とりあえずの目標として、まずはスピードを落とさずにカリキュラムを終わらせること。
早めに個人アプリの実装に取り掛かることで、周りと差をつけようと思った。
実際に勉強に取り掛かる。とにかくスピード学習を続けていた。しかし、隣の同期の受講生のパソコンをそっと覗くと、同じくらい進んでいた。
このままではやばい、必死にコーディング。隣もついてくる。必死にコーディング。隣もついてくる。の繰り返し。
気がつくと、HTMLとCSSの3日ほどで終わらせるカリキュラム。1日で終わっていた。
今ではその同期、O君とは、お友達であり、いいライバル。
それからも、スピードを意識して、カリキュラムを進め、2週間の基礎カリキュラムを半分の1週間で終わらせることができた。
アウトプットモンスターの誕生
スピードだけを意識していても、まったく頭に入ってこなければ意味がない。
そこで、"アウトプット"をテーマに掲げた。ここでいうアウトプットとは、発信すること。
カリキュラムを進めながら、同期の受講生と積極的にコミュニケーションをとった。
そして、自分が理解していることを、頼まれてもないのに教えた。これがアウトプットの始まりだった。
人に教えることが最高のアウトプットであるとそこで気づいた。そしていつの間にか、知識も身についていた。
自分一人で勉強してても飽きてくることや、もともと人と話すのが大好きな性格もいい方向に傾いたのだろう。
最強のライバル現る
基礎カリキュラムを終わらせ、応用に入った頃の話。スピード感を意識して、カリキュラムを進めていたこともあり、周りの人たちに"先生"と慕われるようになっていた。今思えば、少し天狗になっていたかもしれない。
そんなとき、自分よりも遥かに先のカリキュラムを進める男がいた。その名はU。
TECH::EXPERTでは同期の進捗度がわかるのだが、彼は、期の中でずば抜けていた。私が、進捗度180%(これでもかなり早い方)に対し、彼は300%近い進捗度だった。
そこで私は、彼と直接話すことにした。見た目は金髪ヤンキーみたいなやつだったが、話してみると、腰の低い、本当にいい人だった。そして同い年ということもわかり、すぐに意気投合できた。
そこからというもの、学習中わからないとこがあれば、彼にアドバイスをもらいに行く、という動きをひたすら繰り返した。できる人から盗むことが一番手っ取り早い。とにかく聞いて、聞いて聞きまくった。
アウトプットモンスターの覚醒
Twitter、ブログ、人に教えて回るなど、アウトプットをテーマに掲げていた私だが、ついに大きな行動を起こす。それが勉強会の開催だ。TECH::EXPERT短期スタイルの場合、土日は自宅学習となる。それがもったいないと感じた私は、同期全員に声をかけた。
「みんなで会場借りて、一緒に勉強しないか。」と
するとありがたいことに、当日、30名を超える同期が集まってくれた。
そしてみんなから質問や不安なところをピックアップし、それを私が前のホワイトボードで解説をした。
今覚えば、なんて偉そうなんだと思うが、最高級のアウトプットになったし、参加者からも感謝の言葉をたくさんいただけて、よかったと感じる。教室にいる時には、他チームとのコミュニケーションをとる機会も無かったのもあり、この勉強会により、64期全体が仲が良くなり、とてもいい雰囲気になったのではないかと思う。
壁を乗り越えろ
ここまで、順調に進めていたカリキュラムも、後半に入ってくると、壁にぶつかる。
非同期通信、インクリメンタルサーチ、自動更新機能(Ajax)だ。これらは、とても難しく、同期の中では"魔の三大カリキュラム"として恐れられたほど。
楽しかったプログラミングも、ここだけはかなりメンタルがやられた。しかし、そんな不安はすぐに解決した。閃いたのだ。アウトプットすれば良いと。
私は余裕を持ってカリキュラムを進めていたこともあり、時間があった。そこで、Qiitaというエンジニアのための投稿サイトに、3つのカリキュラムに関して、記事を投稿した。
そこでこだわったのが、できるだけコード1行1行にコメントを書くこと。
実際にコードが打てるようになることよりも、このコードは何を意味しているのかを理解することが大事だと考え、ひとつひとつしっかり解説を書いた。それにより、あんなにわけのわからなかったコードも、しっかりと理解することができた。
個人アプリ
カリキュラムも予定より2週間ほど早く終わり、個人アプリの開発期間に入った。
今まで作ったものは、ブログアプリ、写真投稿アプリ、チャットアプリだが、それと似たようなものを作っても仕方がない。と考えた私は、ゲームを作ろうと考えた。
ゲームと言っても、簡単なものしか作れないと思ったので、いわゆる"指スマ"のアプリを作成することにした。ルームを作って二人で対戦するようなアプリだ。
カリキュラムと違い、誰にも頼れない。難易度は高かった。でもそれ以上に楽しかった。やっぱり0から作るのは楽しい。エラーでさえも楽しめるようになっていた。これが個人アプリの面白さ。
答えは自分で見つけないといけないので、個人アプリの開発が最も成長できると私は思う。
ライバルとの共同開発
個人アプリの開発も1週間ほどで終わり、2つ目のアプリを作ろうと考えていた時に、TECH::EXPERTのメンターさんから、ある一言「U君(最強のライバル)と二人であぷりつくっちゃえば?」と。
そもそも個人アプリの開発期間に、共同でアプリを作るなんて考えもしなかったので、驚いたが、これはやらない理由がないと考えた。なぜなら、盗めるから。同期の中でトップの人間と共同開発をできるなんて、それ以上のことはないと思い。こちらからU君にお願いすると、快諾してくれたので、早速取りかかった。
さて、何を作るか。私は冗談半分で二人の共通の趣味である「ポケモン」と言った。
「じゃあそれで!」 と、まさかの展開で、ポケモンを作ることになった。
せっかくの共同開発だし、誰もやったことないことをしたいとは思っていたが、難易度のイメージもわかないまま、開発に取りかかった。
カーソルで主人公を動かす。ポケモンセンターに入ってガチャを引く。草むらに入ると一定の確率でバトルに移行する。相手と自分の攻撃力と体力で計算して戦える。
いろんな機能をつけるために、そして、ライバルにおいていかれないように、がむしゃらにコードを打ち続け、10日ほどで無事に完成した。
そこで思った。作れないものはない。
時間はかかるかもしれないし、最短で作れるわけではないけれど、頭の中でイメージしたものは大体実装できる。そう感じることができた。
ここでプログラミングの本当の面白さに気づけたような気がする。
そして、この時だけは、ライバルに肩を並べることができたと、ちょっとだけ思った。
チーム開発の始まり
個人アプリの発表会も終わり、ついに最終課題に取り掛かる。
メルカリのクローンサイトの作成だ。
チームが発表された。周りの10チームは5人で構成されたチームなのに対して、我々のチームのみ4人だけ。これは衝撃的だった。ほとんど話したことのないメンバーで、少し不安があった。
ありがたいことにスクラムマスターという全体の調整役に任命していただいた。
私はチームの主なテーマとして、3つ提案した。
一つは、コミュニケーション。チームでやっているので、一人で抱え込むのはやめてほしい。人と接することで、私は成長してこれたのでこれを伝えた。
二つ目はスピード。カリキュラムを早く終わらせたことで、得したことが多くあったので、余裕をもって開発できるよう、スタートダッシュを決めていこうと。
三つ目はポジティブ。当たり前のことだと思うが、できていない人が多い。マイナスの感情を持っている人とはだれも一緒にいたいとは思わないし、生産性も著しく低下する。
1人少ないチームだったが、終わってみれば、他のどのチームより、早く完成させることができたし、最後まで明るい雰囲気で開発ができた。
チームメンバーには、本当に感謝している。
※詳しい内容は、前回のブログに書いてあるので、そこをみてください
卒業
無事、TECH::EXPERTを卒業することができた。
終わってみればあっという間の2ヶ月半。楽しかった。
今現在は、就活をしている。
そして、それと並行して、同期の仲間4人(ライバルU君含む)でグループを作り、お客様から案件をいただき実際にwebアプリを開発をしている。
2年以内に、成長したこの4人で会社を立ち上げる。これが今の夢。
まとめ
こんなに長い文章を読んでいただき、本当にありがとうございました。
このブログをみて、何かの励みになったり、私自身を知ってもらう機会になれば幸いです。
ちなみに、こんな長文を書いたのは、初めてです。(4254文字)
2週間のチーム開発の振り返り
ここまでの振り返り
ブログの更新、少しバタバタして滞っていました。。ごめんなさい。
現在チーム開発で、メルカリのクローンサイトを作成する、
という最終課題に取り掛かっています。
開発から2週間が経過しようとしているので、この辺で振り返りをしておきます。
初日の衝撃
同期の受講生が10チームほどに分かれて、開発を行っていくわけなのですが。
初日に驚いたこと。。我々のチームだけ一人少ない!!!
そう。他のチームは5人体制なのですが、自分のチームだけ4人体制となりました。
最初は、ブーブー言ってましたが、もう決まってしまったものは仕方ないと
腹を括って開発に取り掛かることにしました。
私はチームのメンバーから”スクラムマスター”という役に抜擢していただきました。
スクラムマスターはタスクの管理や、全体の調整役を担います。
とても難しそうでしたが、やりがいのある仕事だと感じたので快く引き受けました。
テーマ1(スピード感)
チームとしての目標はスピード感。
人数が少ないこともありますし、負けたくないという気持ちを皆に伝えました。
早めに最低限の実装を終わらせれば、後からは気持ちも楽に微調整や追加機能の実装も行えるのではないか、と考えた末の結論でした。
ひとりで実装するには重いタスクを各自に割り振りました。
ユーザー登録機能。基本はフロントやサーバーなど細かく分けるのが普通なのですが、我々のチームは、ユーザー登録担当はひとりですべてやってほしいといいました。
しかし、この形を取るためには、スクラムマスターが全員の状況を把握し、アドバイスやサポートができる状態でないといけません。
そこで私は、もちろん自分も重めのタスクをこなすが、圧倒的なスピード感で終わらせて、後半の時間全てをサポートに回せるように必死にコーディングしました。
他のチームではトップページのフロント実装をヘッダーやフッターなど細かく分担し、何日かかけて行うところを、私は1日で終わらせました。
自分の得意なところは短期集中スピードコーディングであるということに気づいた日でもありました。
チームのみんなも毎日必死に自分のタスクを終わらせてくれて、4人とは思えないスピード感で実装が進んでいます。
毎日、感謝の気持ちを伝えるとともに、今なぜこんな本気になっているのかのリマインドまでしっかり継続できるようにこれからも努力していきます。
テーマ2(他チームとのコミュニケーション)
各自、スピード感を持って開発を進めてくれているのですが。もちろん壁にもぶち当たります。調べてもうまくいかないこともたくさんあると思います。
その時に役に立つのは、"できる人から聞く"ことです。
私は、開発初日から、いろいろなチームを回って、進捗や、担当の割り振り、課題などいろんな情報を収集する動きをしてきました。それによって、チームのメンバーが、ここがわからないと相談してきた場合に。「〇〇チームの〇〇がそこの実装やっていたよ!」という風に、つなぐことができます。そうすることで最も効率よく開発を進めることができると考えたのでした。
もちろん教えてもらうばかりではいけないので、チームで取り組んで良かったことや、詰まったところ、解決策などは積極的に他チームにもアウトプットしていきました。
これら以外にも、他チームで取り入れている動きでいいと思ったものは積極的に取り入れていきました。
ここまででやってみて良かったこと
・とりあえずスピード感をもって実装をおこなう
→それができるようにスクラムマスターはフォローする
・常に進捗を把握する
→いまだれがどこを実装していて、どこに詰まっているかをチーム全員が把握している状態が理想。
・タスクは細かく切り分ける
→タスク全体は重くても、細かく分類することが大事。
→それによって必然的に、マスターへマージする機会が増えるので、コンフリクトの対処もしやすい。
→最低1人1日1マージできるようなタスクの管理
・他チームとのコミュニケーションを取る
→情報収集はスクラムマスターの役目、より良い方法を持ってくる
・ネガティブな発言はしない
→チームの士気が下がるようなマイナスの発言は極力控える
→仲間の成果はみんなで褒めあう
現在の進捗
最終課題の提出日は12/26なのですが、12/14時点でユーザー登録、出品、購入、編集、削除などの基本的な動きは全て実装できています。なかなかのスピード感であると感じていますし、来週からは微調整や追加機能実装に時間をゆっくり使えるので、ここまで駆け抜けてきたことは間違いではなかったと感じています。
どれもチームの仲間のおかげですし、本当に感謝しています。
ここから、さらにステップアップするためには、スクラムマスターとしての動きがとても重要になってくると思うので、チーム内での
コミュニケーションを活性化し、一つのゴールに向かって突き進みたいと思います。
最後に、結構頑張ったフッターの実装。
これが本物のメルカリ
これが私の作ったフッター
以上
38日目の振り返り
11/28 38日目
今日の振り返り
○勉強時間 13時から21時半
○学んだ内容、身についた内容
ポケモンアプリ、トップページの作成
新言語の取得に向けての情報収集
swiftの学習開始
○見つかった課題
・特になし
○今日の気づき
・まだまだ知らないことがたくさんある
カリキュラムでやったことはあくまで初級
○明日の目標
・ポケモンアプリビューの調整とアプリ完成
・swiftの学習
○感想、まとめ
今日は転職活動に向けての履歴書の作成と添削から行った。このスクールのゴールは転職することであることを再認識した。その後は個人アプリの実装に移ったがある程度機能も備わってきたのでだんだんやることがなくなってきて、何をしていいか分からず全体的なスピード感が落ちてきてしまった。そこでリフレッシュがてら新言語の取得をしようと考えた。来週からはチーム開発が始まるのでなかなか自分のことができなくなってしまうのでこの時期はピッタリだと思う。案件が取りやすいWordPress技術習得のためのPHP、今流行のPython、これからくるであろうGoなど色々加味した結果、比較的取得もしやすく、やってて楽しいことが大事だと思ったのでiPhoneアプリが作れるswiftを選んでみた。これを極めるか否かはやってみてから決めればいいので今はとりあえずいろんな方面を見てみようと感じた。
36日目の振り返り
11/25 36日目
土日も含む、3日分の振り返り
○勉強時間 13時から21時半
○学んだ内容、身についた内容
ポケモンアプリの実装
・ログイン、ログアウト機能
・所持モンスターの一覧
・モンスターの詳細
・ガチャ機能
・戦闘に先頭のポケモンを出す機能
・場所によってモンスター出現変更
・ページ移動の際、今いる場所をブラウザに保存
指スマアプリの実装
・ルーム作成者のみがグループの解体や試合開始、ターン推移が行えるようにする
・双方の入力が完了したらページ推移
○見つかった課題
・Railsは重い処理が苦手、機能の詰め込みすぎは危険
○今日の気づき
・テストを受けたがRailsに関してはほぼ完璧だった。大体の処理の流れは把握できているので自信になった。
○明日の目標
・トップページのビュー作成、相方と相談して決める
○感想、まとめ
土日合わせて3日間、欠かさずアプリの実装を行った。モンスターに対してタイプを設定し、それに合わせて出現場所が変わる設定、所持モンスター一覧ページから戦闘用のモンスターの選択可能、今いるマップの情報をブラウザに保存して別のページに行って戻ってきても使えるようになど、かなり多くの実装を行い、なかなかのクオリティに進化してきた。また、コードが長くなってきているのでリファクタリングを意識してできるだけコードはまとめていった。最近は自分のアプリでいっぱいいっぱいになっていたが、今日は出来るだけアウトプットをしにいろんな人のところに行ってアドバイスやエラー解決を行った。やっぱりこの時間は必要だし、成長にもつながるので、自分の得意分野、コミュニケーションを意識して日々学習していく。
33日目の振り返り
11/22 33日目
今日の振り返り
○勉強時間 12時から21時半
○学んだ内容、身についた内容
・波乗り機能の追加
・ユーザー登録機能追加
・ページのリダイレクト
○見つかった課題
・deviseを使わずにユーザー機能を実装しようとしたが難しすぎた
○今日の気づき
・同じくらいだと思っていた相方は何歩も先を行っていた
○明日の目標
・ログイン、新規登録、モンスター、一覧、詳細のビューを完成させる
○感想、まとめふ
今日もアプリの実装を行った。昨日できなかった波乗りを最低限実装できた。その後はエンカウントした時のアニメーションをつけて、臨場感を出してみた。そしてユーザー登録機能を実装しようとしたのだが、deviseを使わずに行ったこともありかなりてこずってしまい、そのエラー解決に数時間を要してしまった。また、相方は将来のためにポートフォリオサイトの作成やコードの綺麗さへの意識、次のアプリの制作など、自分よりも何歩も先を行っていた。正直いってかなりメンタルに来た。才能だけでトップをいってるのではなく、それに合わせてしっかり努力をしてるのだと感じたし、一つ一つのスピード感も桁が違う。このままではいけない。土日で取り戻す。
32日目の振り返り
11/21 32日目
今日の振り返り
○勉強時間 12時から21時半
○学んだ内容、身についた内容
・ビューの強化
→主人公の動き、左右対応
・草むらエンカウントの完成
・リファクタリング
○見つかった課題
・波乗り機能がむずすぎる
○今日の気づき
・特になし
○明日の目標
・2人で実装の流れ、プランをしっかりと共有してから実装に移る。
○感想、まとめ
今日もアプリの実装を行った。相方がバトル画面の実装をしていたので、ビューを整え、動きをつけることを目標に動いた。波乗り機能の実装をしたかったが、
最終的にまた実装に至らなかった。ここに時間をかけすぎて先に進まないのはとてももったいないと感じたので、明日は挑戦する時間を決めて実装に入る。今日は相方がいたものの、スタート時にあまりプランを練らずにお互い始めてしまったので、なあなあになってしまった部分がある。明日はまず初めに優先順位をつけて担当をしっかりと割り振ってから実装に取り掛かることにする。
31日目の振り返り
11/20 31日目
今日の振り返り
○勉強時間 12時から21時半
○学んだ内容、身についた内容
・ビューの超美化
→本家に徹底的に近づける
・ある一定の条件では進めないようにする
○見つかった課題
・特になし
○今日の気づき
・やりたいと思ったことはとりあえず条件分岐しておけば、なんとかなる
○明日の目標
・波乗り機能の追加
・ランダムエンカウント関数の完成
○感想、まとめ
今日もアプリの実装を行った。今日は相方がいなかったのでひたすらビューを整えようと思って画像編集をしながら、本家ポケモンに徹底的に寄せた。我ながらなかなかのクオリティになったのでとても満足している。その後、木や海などの進めないところの設定でどうやればいいかをしっかり考えて一つの答えにたどり着けた。結局はif文だったりの条件分岐によって何とでもなるということが分かったし、このレベルなら実装できると思う。といったプログラミング脳が少しずつ身になってきた気がする。明日も大好きif文を使い、波乗り機能の追加などを行っていく。