開発未経験が初案件で溺れそうになった時の話🌊

## はじめに
こんにちは！ITスクールRareTECHにてCS（Customer Support）を担当している池村です。今回の記事は、私が初めてIT業界でお仕事をもらえた時のお話です。
  
私にとっては軽いトラウマなのですが、今思えば全部自分が弱々だったのが原因です。結論は、勉強の仕方がよくなかったというお話なんですが。

#### agenda
1. 私のIT業界に来た理由
1. 案件を獲得した話
1. 案件中に苦しんだ話（本題）
1. ITの勉強方法について

## まず私がなぜIT業界にきたのか？というお話
私の前職は介護士で、福祉業界で20代を過ごし、30になったタイミングで転職を決意しました。転職した理由は省きますが、決意したのは2020年の秋くらいだったと思います。

ちょうどコロナが来るちょっと前ですね。
コロナが猛威を振るい始めた頃、私は転職の準備を着々と進めていたのですが、漠然と何か作る仕事に就きたいと考えていました。

:::note info
私は学がなかったので、ITか建設なのかな〜とか考えていました。
業界に喧嘩を売っているわけではなく、割と『誰でも来ていいよ〜😄』みたいなイメージがあっただけです。
:::

ある程度の準備資金を確保して、職場を退職。実家に戻り、安く住まわせてもらって勉強を開始しました。まあもちろん全然わからなかったわけですが。



## とあるCEOから案件をいただけた
私は現在勤めているベンチャー企業のCEOからお仕事をいただくことができました。
初対面はX（旧Twitter）で、誰でもいいからキャリア相談乗るよ〜と投稿しているのを見た時でした。まあ何も考えず相談を希望して、Zoomで学習方法などを相談した記憶があります。

その企業ではまだ小規模ではありましたが、ITスクールを運営していたこともあり、当時月額¥3,980という破格のお安さから入学を決めました。そこで学習をしつつ、半年後にある大きな案件の募集があったので手をあげた、という流れになります。

そこから少しずつその方から頂けたお仕事（雑務とか）をやりつつ、勉強をしていました。

### ただ、今回のお話はその案件の話ではなく！！

## 【本題】地上で溺れかけた話
さて、ここからが本題です。
私は半年後に控えている大きな案件（開発ではない）の前に、ちょっとしたお仕事をいただけました。それはとある企業さんの社内研修のためのアプリと資料作りです。
内容は以下です。
- アジャイル開発を体験するための研修
- 研修資料の作成（スライドやその他資料）
- 研修で使うSlack風チャットアプリの作成（Java）

一緒に案件を行うのは以下のメンバーでした。
- CEO：お仕事のお声をかけてくれた張本人（AWS出身のエンジニア）
- CTO：会社の最高技術責任者（ホワイトハッカー）
- 〇〇：当時22~23歳の強エンジニア兼、会社役員
- 自分：激弱の極み

:::note alert
私以外お化けのようなエンジニアさんでした。
:::

### PowerPointで研修資料作りにアサイン
私は開発未経験だったこともあり、最初は資料作りから開始しました。
PowerPointに研修の内容を作成していくことですね。これも初体験だったので、四苦八苦しながら作成していた記憶があります。

![6851ea07-8efe-46b5-bae1-679bb0152de9_720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/84a33877-114c-4d52-cdcc-705794a0e9f0.png)

沢山のレビューをいただいて、なんとか形にしたのですが、資料作りってかなり大変だなと改めて思いました。
- 一枚の資料に文字が多すぎる
- 研修受けてる人は資料の文字なんてほぼ見ない
- 図が何を言いたいのかわからない
- スライドは多くなっていい、だから1枚のスライドの情報量を減らせ
- スライド内の図や文字のグループ化がぐちゃぐちゃで修正しにくい
- この研修の目的を念頭に入れて資料作りをしているのか

このような様々な指摘がありました。
そもそもIT業界にいなかった自分は、スライド作成なんて学生以来でしたので苦しみました。ただ、本当にきつかったのはこの後の研修用アプリ作りです。


### JavaのSlack風チャットアプリの作成にアサイン
当たり前ですが、資料作りが先に終わり、あとはチャットアプリのスクショなどを入れるだけとなりました。そうなると、アプリ制作に私も入るわけです。その時点で、DockerによるJavaのWebアプリ開発環境は出来上がっていました。


ちなみに、このメンバーは実務でJavaのWebアプリを開発したことはない面々です。ただ、そこは往年のカンと、その場でのキャッチアップで難なくこなしていました。

そもそも
- Javaでの開発はいまだにEclipse（IDE）を使っている環境が多い
- Tomcat（JavaのWebサーバー）の理解が必須
- まだGPTなどのAIツールは広まっていない
- フレームワークなし

こんな状況で開発の環境構築を数日で終わらせているんです。

:::note info
この人たちやばい！と素人ながら思いました。
:::



私はというと、とりあえずJavaの基本構文を学習した状態。サーブレット（JavaのWebアプリ用ライブラリ）も少しかじったくらい。フロントなんて全然理解していなかったです。

```Java:サーブレットの例
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/hello")
public class HelloWorldServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html");

        response.getWriter().println("<html><body>");
        response.getWriter().println("<h1>Hello, World!</h1>");
        response.getWriter().println("</body></html>");
    }
}
```

上記のコードを初学者が見てもよくわからないですよね。
Javaは堅牢なシステムによく使われますが、記述量もかなり多くていまだに難しい言語と思っています。**要はHTTPのリクエスト受け取って、レスポンス返しているだけのコード**なんですけどね。

Webの基本である、**クライアントはサーバーにリクエストを送って、サーバーはレスポンスを返す**、がまるでわかっていなかったので、私はこの時点で詰んでいました。

もちろんGitも使うので、そのあたりの理解も弱い私はそもそも開発の入り口にすら立っていなかったというわけです。

### 使えない私、案の定詰められる
私が担当したのは、チャットアプリのチャンネル周りのコードでした。
- チャンネル一覧をサーブレットに返すメソッド
- チャンネルの登録を行うメソッド
- チャンネルの編集を行うメソッド
- チャンネルの削除を行うメソッド
- その他チャンネル周り

今思えば、なんてことのないCRUDの操作です。データベースはPostgreSQLを使っていて、その操作もよくわかっていなかった状態、JavaBeansも訳わからん状態。

:::note alert
そもそも関数がどういった動きをしているのかもわかっていなかったです。
:::

#### この引数は何を受け取っていますか？
#### このメソッドの戻り値はなんですか？
#### GETリクエストとPOSTリクエストの違いはなんですか？
#### `curl`コマンドって知っていますか？

上記のような質問を淡々と聞かれました。
私は何一つしっかり言語化することができなかったです。その時、***喉がカラカラになり、冷や汗が止まらず、うまく喋れず、うまく息ができず***。

### あれ？俺、地上にいるのに溺れてない？

と思いました。
これは貴重な体験です。後にも先にもこれほど苦しかった思い出がない。
結局のところ、私はコードを1行も書けずに終わりました。

:::note alert
何より、期待してアサインしてくれた周りの面々に申し訳がない。
:::

![0cde60cf-6c56-4848-84a0-089bea737861_720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/8cf000f0-797c-2537-6cf7-0a3e43611b8e.png)


## なんでこんなことになったのか？
この案件以来、1ヶ月くらいコードを書けなかった気がします。
まあ実力不足なのは私の問題なのですが。

:::note warn
もちろん、何がダメだったのか？をひたすら考えました。
:::



### そもそも勉強の方法が間違っていた
そもそも学生の頃から真面目に勉強をしていない私は、勉強方法が完全にダメでした。あまり手を動かさず、黒板を写すようにノートに書き込みを行っていました。

断言できます。
- ノートに写すだけの行為はなんの意味もない
- IT関係は手を動かさないと意味がない
- 自分の中で体系化させないといけない
- 小学生にもわかるように説明できなければいけない
- 深ぼるのは後にする

:::note warn
まずは手を動かせ。挙動を確かめろ。挙動を確かめたら、それメモっとけ。体系的にまとめるのは後でいい。
:::

### アウトプットが大事すぎる
インプットも大事だが、アウトプットはそれ以上に大事です。
- コマンドを叩くこと
- コードを書くこと
- 実際にアプリを作ってみること
- 実際にクラウド上にデプロイしてみること

このアウトプット中にうまくいったこと、うまくいかなかったことをNotionにでもメモしておいて下さい。それを後で、QiitaやZennなどにまとめればいいんです。

:::note info
記事にまとめるなら、どうやったら相手に伝わるかをひたすらに考えます。
:::

:::note warn
**自分で理解することと、相手にうまく説明できることは別の技術であること**を押さえた方がいいです。相手にうまく伝えられると、それも自分の知識になり、より深まります。
:::

### 技術書を読むだけでは意味がない
初学者ほど技術書を読もうとしますが、あまり意味がないです。
技術書を読むなら、その後に感想をまとめるとか、自分なりの言葉にして外部に発信するなどをしないと意味がありません。

弊社のCTOは

:::note info
本はまとまりすぎている。自分なりに体系化しにくい。
:::

と言っていました。長らくこの意味がわからなかったのですが、Qiitaに記事を書き始めて理解が深まりました。もちろん本には筆者がいます。筆者の体験談から技術を体系化したものが技術書です。自分の言葉にする際、参考にする程度にはいいのですが、引っ張られすぎても良くないんです。

かといって初学者が本に手を出すのはしょうがないです。私もそうでした。
全部読む必要はないです。言語には公式のドキュメントがありますし、手軽にコードを実行できるところもあります。

:::note info
大事なのは併用です。色々使って、自分なりにまとめましょう。
:::


## おわりに
今はどうなの？という疑問が浮かぶかもしれません。
私は今、とても楽しんで勉強しています。Qiitaに記事を書き始めて良かったと思います。勉強熱がさらに上がりました。うちの受講生にも相手を小学生だと思って技術を説明して下さいと伝えていますが、ここはとても大事な部分。世の中の初学者たちはここを意識してほしいです。


記事を書くきっかけになった、RareTECHメンターのもりさん、RareTECH受講生のほんださんに感謝🙏とても良いアウトプット体験ができています。

もりさん👇

https://qiita.com/hosomatu


ほんださん👇（アウトプット量半端ない人）

https://qiita.com/free-honda

## 余談
約3年以上も前の話を掘り返しましたが、懐かしいですね。
過去は気にしなくていいという人もいますが、私にとって初案件の思い出（トラウマ）はずっと残るでしょう。でもここで少し供養できた気がします（笑）

## 宣伝
ITスクールRareTECHを運営しています！スクール受講生の皆さんがたくさん記事を投稿しているので、よかったらみていってください！
Organizationはこちら👇

https://qiita.com/organizations/raretech