もがき苦しみ明日を掴め

ITや海外旅行について書きます。

BeProudに入社して1年半が経ちました

何してるの

社会人3年目(4月で4年目)でPythonを使って、Webアプリの受託開発をしてます。ざっと以下の技術を触っています。入社1年数ヶ月ですが、キリが良いので、1年半ということにします。

  • Django
  • DRF
  • GraphQL
  • PostgreSQL
  • Docker
  • Nuxt.js
  • Vue.js

バックグラウンド

  • SIerにアプリ開発志望で入社したが、部署希望を出せず、1年間インフラエンジニア(ネットワークエンジニア)として働いていた。
  • 定型業務が多かったので、自動化したら楽じゃないと思って、以下のような日時でクローリングするサイトを作った。

github.com

  • 2年目にアプリ開発の部署に異動した。第一希望の部署ではなかった。
  • 部署異動のためにアプリ開発の部署に面談に行っていたのがバレて、社内でFree Agent的な感じになった。半強引に別の希望していない部署に異動させられた。
  • C#(.NET)やIonic(TypeScript)で開発を行っていたが、持っているスキルと必要なスキルの乖離が大きすぎて、ほとんど貢献できなかった。
  • 業務量的に他の開発メンバーに余裕がないのと心理的安全性がほとんどなかったので、技術的に困った時に相談ができなかった。
  • この時、転職のためにTwitterクローンアプリを作ったりしてました。

github.com

入社しようと思った理由

  • SIerでアプリ開発の仕事をしていたが、1次請け的な立ち位置だったので、PM寄りのスキルが求められることが多く、コードの品質を組織として向上させる文化がなかった。
  • コードを書くプログラマよりプログラマーを管理するプロジェクトマネージャーが偉くなるという社風に馴染めなかった。
  • セキュリティが厳しく、Wikipediaが見れなかった。
  • アプリをインストールするのに社内情シスの許可が必要だった。
  • アプリ開発のスキルが属人的すぎて、開発中に解決しなければならない問題を一人で抱え込んで解決しないといけなかった。
  • インフラの部署でアプリ開発できる能力を活かすのもアリだと思ったが、コードレビューとか受けてコードを書く能力を伸ばしたかった
  • 周りがコードを書くことに抵抗がある文化だったので、コードを書くことを業務とすることを説得するのに時間がかかった。
  • Python(Django)が書きたい・Macで開発がしたい・もっとプログラミングできるようになりたい

技術的な成長

  • 土日に趣味でPythonやDjangoを書いたことがあるレベルと業務で必要となるレベルには大きな乖離がありました。
  • 趣味ではとりあえず動くコードを書ければ良いという考えでも良いですが、そのような考えは百戦錬磨のベテランによるコードレビューで真っ赤な添削が返ってくるようになると修正を余儀なくされます。
  • 当たり前のようにテストコードを書く・コードの意図をコメントにしっかり書く・関数分割・共通化など最低限の知識は身につきつつあると感じています。
  • Dockerを使った開発とか憧れてたが、実際にできるようになるとは思わなかった。Dockerはハマると自己解決するのがなかなか大変なので、優秀な同僚から得る学びが多かったです。

DRF×jQuery

  • 入社して初めて触れたのがDRFだった。DRFやjQuery(JavaScript)で非同期処理などを理解せず書いていて、かなりハマった記憶があります。嫌な顔せず、ペアプロで助けてくれる先輩がいなかったらやめていたかもしれません。感謝しています。この頃はまだプログラマとしてやっていけるか全然分からず、日々のタスクを1つ1つ終わらせるのが大変だった。

GraphQL×Python

  • DRF慣れたと思ったらGraphQLを触ることになった。Query, Mutation何それ的なところから簡単なQuery, Mutationなら書けるようにはなったが、実装スピードの面で同僚と比較して、自己嫌悪に陥ってました。UnittestからPytestに慣れるのが地味に大変だった記憶。Pythonのpdbデバッグをこの時に覚えました。

DRF×Nuxt

  • 初めて本格的にVue.jsに触った。React触ったことあったので、Propsは理解していたが、分からないことが多い中、手探りで影響箇所をgrepして実装していた。案件を離れる際にバグを残してしまった。修正してくれた同僚に感謝。

GraphQL×Python×Nuxt

  • Nuxtにかなり苦戦しました。子コンポーネントから親コンポーネントにデータを渡すときに$emitを使ったり、v-modelの.syncを使った双方向バインディングを理解して、実装するのに苦労した。JavaScriptのdebuggerによるデバッグ方法をここで覚えました。

未経験のエンジニアをそこそこまで育てるために必要な環境

育てる側に必要な意識

  • 心理的安全性の保証された環境でペアプロやコードレビュー、レベル感のあったタスクを振る。
  • 仕事で大変なことがないかやメンタルがやられてないか気を配る。サポート大事。
  • 雑談で距離を縮める。雑草で抱えてるタスクの相談とかしやすいと仕事がしやすくなる。

未経験のエンジニアに必要な意識

  • コードレビューなどの指摘が人格否定ではないと理解すること。指摘されたことを改善するために努力すること。
  • できないこと、分からないことを言語化して、抱えきれなくなる前に先輩に相談すること
  • 自分もできていませんが、分からないことをすぐに質問できる能力は意外と侮れません。自分で調べるよりも聞いた方が早いことは意外に多いです。
  • 仕事で必要な知識を身につけようとする努力。土日いつも勉強する必要はないと思うけど、本当についていけなそうな時だけしてました。

現在

  • 優秀な同僚とリモートで仕事でできて、幸せです。いつも助けてもらってありがとうございます。転職して成功でした。
  • でも、プログラマー向いてないんじゃないと思ったり、愚痴をこぼしたことも1度ではなく、たくさんありました。
  • 愚痴をこぼしすぎて、彼女はなくしましたが、仕事を楽しめるようになりつつあります。
  • 仕事が辛い時はプライベートで仕事に関係ない技術(自分はSwift)でコードを書くと、プログラマになろうと思ったきっかけを思い出せるのでおすすめです。

これからプログラマを目指す人に伝えたいこと

  • プログラミングスクールに行った程度では年収1000万にはなれません。でも、プログラミングスクール行ったことないので、実際どうなのかは分かりません。
  • 最新の技術のキャッチアップが割と大変なので、技術的好奇心が低いとやめたくなります。
  • 自分はないのですが、同僚や先輩に分からないことを質問できる愛嬌の良さや人柄が意外に重要です。
  • Progateを何周やるよりも、自分で1からアプリを作って、ぶつかったエラーメッセージをGoogle検索だけで自力解決できる能力を身につける能力が大事です。
  • 論理的に正しくても人は動きませんが、プログラムは論理が破綻していなければ必ず動きます。動かないプログラムが悪いのではありません。プログラムを組んでいるあなたの頭が悪いのです。
  • 日本語で調べて見つからなければ、英語で探すのが大事です。エラーメッセージを英語で抽象化すると意外と見つかります。