個人的に新人のうちにやっていてよかったこと、悪かったこと

[新人プログラマ応援 - みんなで新人を育てよう！※期間延長 - Qiita](https://qiita.com/official-events/4967800652a001e13ebb)
このテーマで書いてみます。

滑り込みで思ったことをざざっと書いて見ようかなと思います。
筆者はこの春で7年目？ 8年目？のエンジニアになりました（記憶がややあいまい）。
新卒当時はSESをやっている会社に入り、研修を受け配属という形でした。
現在は何回か転職して、自社サービスの開発会社のエンジニアとして開発しています。

あまり体系的な話ではないですが、今回のテーマを期に、これまで考えていた新人のうちにやっていてよかったこと、悪かったことを書き出してみようかと思います。

## 良かったこと
### 基礎をしっかりと固めるようにしていた

私自身は情報系の大学を出ていることもあり、ネットワークやデータベースといったものを理解している状態で業界に入りました。一応学生時代の間に基本情報も取っています。

当時、合同研修に参加していましたが、未経験エンジニアの方や、プログラミングをあまりやってこなかった新卒の方も多い環境でした。
そういった人たちを観察した記憶としては、プログラミングと並行してネットワークやデータベースの知識のキャッチアップに苦労している方が多かった印象です。

自分自身も理論は理解していても実践的に使うことができていなかった部分があり、理解できないところは人に聞きながらなぜこれでうまくいくのか、ということを理解していきました。
その時、Web系の仕事をするのであれば、どのデータがどこからきてどう通信して、どうデータベースに格納されるのか、ということは理解を避けられない部分だと感じました。

現在だと、DockerやKubernetes、クラウド環境での開発も増えており、一層知らなければいけないサービス、ツール、概念は増えていると感じています。
自分が作っているアプリケーションや機能がなぜ実現できるのか、というところの理解は業務理解の第一歩として大事な部分であり、それを理解する基礎力は大事だったなと思います。
（最も、年々新卒のレベルが上がっているので、それらのサービス、ツールについて自分よりも詳しい方は多いと思っています。本当に自分自身も頑張らねばという気持ちでいっぱいです…）

力をつけるためには資格試験の勉強や各種プログラミング言語・フレームワークでの開発、クラウドサービスの活用などで、理論も実践も大事かなと思っています。

### 勉強会・カンファレンスに参加した

1年目の中ごろから余裕が出てきたこともあり、外部の勉強会やカンファレンスに参加するようになりました。

発表している方の話を聞いているだけでも面白く、また自分自身の技術力の課題なども発見できました。
懇親会などで同世代や少し上のキャリアのエンジニアと話すことで、自分自身に足りないものや逆に武器となりそうなものが見えてくる部分もありました。
会社の先輩と話す中でも見えてくるものはありますが、外部の方にぼかしつつ伝わるように説明するのは別のスキルが必要だったりするので、良い壁打ちになったり自分自身の知識の棚卸にもなりました。

私自身のその後のキャリアも勉強会やカンファレンスに支えられることが多く、早めに経験できてよかったと思っています。
現在はオフラインでの勉強会やカンファレンスも少しづつですが開催されつつあります。
オンラインでの勉強会もよいのですが、インタラクティブに様々な会話が発生するオフラインの勉強会も面白いので、まだ参加されたことがない方は一度参加してみるとよいかと思います。

自分が携わっているクラウドサービスやプログラミング言語の勉強会を探してみると、まずは良いかもしれません。
PHP, Pythonであれば月一で勉強会が開かれていたような気がします。

地方にいると勉強会にオンライン参加するのは難しいかもしれませんが、機会を見て参加してみてください…（私も学生時代は地方におり、勉強会文化に触れてこなかったのですが、もっと参加しておけばと後悔しました。一回肌で感じてみるのが大事かと思っています。また最近は地方でもカンファレンスが行われるケースが増えてきたので、そちらに参加してみるのも手かもしれません。）

初めて参加したのがPyCon JPだったか、PHPカンファレンスだったかは忘れましたが、どちらも非常に刺激になったのを覚えています。

### 仕事道具をそろえる（追記）

思い出したのですが、仕事道具をそろえるのも大事です。
1日8時間働くのであれば、8時間使うキーボード、マウス、マイク、ヘッドホンといったものは当然良いもののほうがいいです。

長時間使うので疲れにくく、働きやすいものを選びましょう。
また周りへの配慮も忘れずに…（メカニカルな青軸などはタイピングが気持ちよいですが、ミーティング中には音が大きすぎて不評です）。

長く使うことを前提にするのであれば、キーボードは掃除しやすいものを選んだほうがいいです。分解して掃除すると長く使えます（私も4年くらい同じキーボードをたまに洗いながら使っています）。

私はARCHISSのProgresTouch RETRO TKLを使っています。
https://archisite.co.jp/products/archiss/progres-touch/retro-tkl-jp/

またソフトウェアのインストールに関しても制限を確認しつつ、自分の手に合うものを選びましょう。
私はJetBrainsの製品をよく使っていたり、brewでいろいろなコマンドを入れ、業務を最適化しています。

入れているコマンドとしてはぱっと思い出せないのですが、[jq](https://github.com/stedolan/jq), [rg](https://github.com/BurntSushi/ripgrep), [bat](https://github.com/sharkdp/bat) などです。

## 悪かったこと
### コミュニケーション能力

新卒の頃の自分を思い出すと、言葉選びがへたくそだった、と思っています。
良くも悪くも大学というコミュニティに参加していると、知識レベルがある程度均一化されているため、話の文脈が伝わりやすかった、ということを新卒の頃に自覚しました。
社会に出るとさまざまな文脈の方がエンジニアという職に就いているので、必ずしも自分と同じバックボーンを持っていないということは常に心掛けたほうが良いです。

これに関してどう改善していったのかは余り覚えがないのですが、いろいろな本を読み語彙力をつけたり、先輩社員の話し方や説明の仕方をよく観察し、たまにその立場を代理することで学んでいったように思います。

またLTをしてみるのもいい経験になると思います。
自分はTED Talk系の本を読んで練習していましたが、知識をまとめ自分の言葉で説明し話す良い練習になるかと思います。

### キャリア戦略

何とか東京で就職したいということで頑張っていましたが、当時はどんなエンジニアになりたいのか？という点は何も意識がなく、考えもほぼありませんでした。
その辺りがあいまいだったためか、就職活動でもうまくいかなかった部分は今考えるとあったかもしれません。

Web技術は変遷が激しく、3年後, 5年後に同じ働き方ができるかといえばそうではないと思います。
とはいえ、自分がどの領域をやっていきたいか、どう働いていきたいか、というところは定めておいたほうが良いでしょう。
フレームワーク、ライブラリ周りのアーキテクチャを整えて開発することを目標としてもよし、プロダクトと並走してよりあるべき形を考えUXを改善するもよし、エンジニアではなくマネージャーになるでもよしだと思います。

しかしどうなりたいか、という意識がないとなっていく方向性の仕事のチャンスがあること自体に気付くのも難しいですし、プロジェクト・プロダクトのアサインとしても難しい部分があります。
他にも会社の評価制度との兼ね合いなどもありますし、自分自身が大切にしている価値観と評価の問題もあります。

自分が大切にしている価値観を考えているうちに3年後にこのポジションやこの仕事をしているためには、今自分は何をして1か月後、半年後、1年後こうならなければならない、というのが見えてきます。
そういった目標はないよりもあったほうが活動はしやすいですし、結果としてもふりかえりやすいと思います。

また3年後の姿が変化してしまっても構わないと思います。
筆者も新卒だったころに働こうと思っていた像とはかけ離れていますが、新しい方向性を考えながら働いています。
新卒当時、研修の講師というのもいいなと思っていましたが、今はプロダクト開発の中心人物となるエンジニア、リード、そしてその先にも手を伸ばしていきたいと思ってキャリアを考えています。

## 終わりに

散文的になってしまいましたが、まとめると基礎力を付けつつ自分自身を客観視しながら、目標に向かって成長していく、ということが大事ではないかと思っています。

私自身もまだまだエンジニアとして伸びしろがある状態なので、これからエンジニア業界に入ってくる新人プログラマの皆さんに負けないよう頑張りたいです。