見出し画像

エンジニアとして成長に役立ったこと


こんにちは。みこせんです。本日は私が過去にどんな勉強してきたのか、どこに投資してきたのか、をご紹介しようと思います。

私のエンジニア歴は10年です(フリーザ様

私のワークスペースはトップ画です(フリーザ様


その長いとも短いとも言えないエンジニア生活は主に三つのキャリアで成り立っています。

■ 大学時代に組み込みのOSレスCエンジニアとして仕事をしながら大学へ通っていた時代

■ 某大手ERPパッケージ会社で給与計算システムの開発者として働いていた時代

■ AIソリューション開発会社で製品開発者として働いている今

この三つです。

それぞれの時代に何を意識し、何を勉強してきたのかを詳しく話していこうと思います。

いつものお約束。この記事の通りに実行しようとすると大抵失敗するよ。気をつけてね。

■ 大学時代に組み込みのOSレスCエンジニアとして仕事をしながら大学へ通っていた時代

このころはいわゆる駆け出し期。とにかくちゃんと動く、を目指してコードを書いてました。
多くの駆け出しエンジニアと同じように、参考書のソースコードを丸写ししてたくさんの本を何週も愚直に書く
ということをしていた時代です。

C言語のミソはポインタ構造体です。だいたいこれを意識して便利さがわかり、率先して使うようになるまで4ヶ月くらいかかりました。
一日10時間仕事という名の勉強で、まぁ大体1000時間くらいの勉強かな。そこまで色々書きまくって、ようやくC言語の記法はだいたいあつかえるようになったというところ。
このころから、応用して効率的に書く、ということをやりだします。関数ポインタを使ってswitch~caseなどを使わずに処理を分岐させよう、とか、どのように関数を分けたらもっと読みやすくなるだろうか、とかね。
自分のコードを見ながら、ここが醜い、ここが汚い、ここが無駄、を繰り返し直していました。

自分のC言語の書き方が大きく代わったのは、WindowsアプリケーションをCで作るという経験をしたことです。WindowsAPIを生のC言語で扱ったことで、C言語について、いままで自分が知らなかった構造体やポインタマクロなどの使い方に触れることができました。


「あ〜構造体ってこうやって使うのか、ポインタってこんな風に扱うんだ、マクロはこういうときに使うと良いんだ、こんなときは関数定義したほうがいいのか」


など多くの気付きがあり、私はそれ以降、WindowsAPIのように、C言語でオブジェクト指向っぽく書く、ということを夢中になってやっていました(ただ、当時オブジェクト指向なんて言葉は知りません)


私この頃から会社の技術者にコメントしっかり書け、と言われていまして、ただね、コードの一行一行全部にコメントが入ってんスよ。書きたくないでしょ?だからコメント書かなくてもわかるようにしようと、読みやすいコードにする、とかわかりやすいコードを書く
とかにやっきになってました。これは私のなかでは今でも正義で、十分に構造化され、可読性を担保された実装にはいっさいのコメントは不要である、というのは曲がらない教えです。

■ 某大手ERPパッケージ会社で給与計算システムの開発者として働いていた時代

新卒でIT企業に入社して初めて、Web系の言語とか、クラサバのシステム構成なんてものに触れます。研修では Java基礎 -> HTML/CSS , JS , SQL -> Servlet+JSPという内容で研修を受け、その後本社配属後にCobolやObject Pascalなんてものも使って製品開発にあたっていました。

実際あまり会社の製品開発で学んだことは、申し訳ないけどありません。自分がこの時期学んだことは、手を上げて仕事を取ることの大切さとか、コミュニケーション力の大事さ。


コミュニケーションではとくに、

- 相手の言葉を正確に理解するために、必要な情報を的確に引き出す質問力

- 自分の真意を相手に一切の誤解を与えることなく、過不足なく情報を伝え理解させる説明力

- 人をひきつけて話に耳を傾けさせるプレゼン力

という三つです。こちらはあまり技術の話ではないので割愛しますね。

手を上げて仕事を取ることの大切さ、というのは、「はいそれやりたいです!」と声を出すこと。これができると、技術力つくんですよ。

私新人の頃、サーバー管理者に手を上げて、

・JenkinsによるCI/CD
・gitのホスティングサービス構築
・redmine構築
・Windowsのサービス管理方法
・UnixやLinuxのコマンド操作
・Pythonによるツール開発

みたいな普通にぬくぬくと手元のWindows機で業務内の開発しているだけでは絶対に身につかない技術を数多く身につけました。これはすごく大事なことだったと感じています。そして何より、サーバー管理者は私含めて3人のチーム。だったので、聞いてもわからないことが多く、とにかく調べて勉強してやらないととてもできなかったことです。その結果問題解決するのにいろいろな回り道をしたおかげで急速に成長できたと思います。


こういうサーバーの管理とかね、いっぱいコンピュータのある、企業でないとなかなか経験詰めません。個人宅で駆け出し、未経験から1年目、なんて自宅にPC2台、ルータ1 台あれば良い方でしょう?そんな小規模なホームネットワークじゃ経験なんてろくにできませんよね。5年目とかの先輩が、ターミナルにパスワードが打てない!!!って言って大騒ぎして質問に来た時とか笑っちゃいましたよ。表示されてないだけですよ〜って教えて上げたけど。

■ AIソリューション開発会社で製品開発者として働いている今

今日の話題の本題はここです。実はERPパッケージ会社でもね、成長できたとは言っても、現在の会社で積んできた経験や学習からしたらぜんぜん少なかったです。今回は「普通とは言えないエンジニアが家でやってる学びのためのおかしな遊び」についての紹介と思ってもいいですよ。


まず私が今の会社に転職が決まったとき、手元にはWindowsとLinuxのデュアルブートしたデスクトップと、Windowsのラップトップが2台あるだけでした。前職の有給消化中に、現職での開発機のMacに慣れようと、MacBookAirを買います。これでPC4台目。


面接時に

「現在開発は一部Go、あとはPython、JavaScript、Typescriptで行っている、DBは基本postgresでIDEはPycharmだがIntelliJを持ってるひとは自分のライセンスを使っている。フロントはReactで、サーバーはExpressとか、Pythonのその時々でかわったりする。デプロイは全てDocker」

という話を聞いていたので、有給消化中にこれらを全部扱えるようになるぞ、と意気込みました。

まずIntelliJのライセンスをサブスク。

Pythonはすくなからず書いてきた経験があったので後回しで、node,ts,react,expressでTodoのアプリを作ろうとしたけれど、初っ端のReact+TSは、当時まだ解説資料も全然なくて、環境構築でつまづきました。


まだ[create-react-app]がなかったから、Webpackとかの設定をもりもり書くんだけど、そもそもJSONで設定ファイルを書くなんて経験もなかったし、そもそもnpm installってなんすか?package.json?依存関係?は?メンヘラ?みたいな感覚。


そこでまず自分はReactに達することもできないことに気づき、いそいでNodeでなんかやる、ってことを考えます。ターミナルで動くHighAndLowを作ろうとおもってやるわけですけど、外部パッケージいらんもんだからそもそもnpm init する必要もないわけです。ただのJavascriptの復習になってましたね。

そんなことしてたらね、ジモティで「プログラミング教えてください」っていう女子大生二人組を見つけまして。大学の課題を一緒にやってくれるひと!みたいな感じで募集してたわけです。


こりゃ良いやと思って「教えてあげるよ〜なんなら課題代わりに作って上げるよ」と甘い言葉をいって近づき課題を横取りします。で都合よくその課題がフロントがRiot.js(Reactより簡単なフロントエンドのフレームワーク)で、サーバーがSpringBootだったかな?

都合よくNodeを使う課題でした。で、Riot.jsの使いかた調べながら、なんなくnpmとかyarn、package.jsonとか周りの色々を理解できまして、で、送ってあげてあとは知らん顔でドロンしたわけです(なんかビルド通らないとかで単位もらえなかった!みたいなクレームあったけどそりゃ知らん。私の環境では動いちょる。嫌なら自分で作り直せ。できるもんならな。はっはっは。)

その後再度React+TSの勉強。もうこのあたりから普通に躓くことなく進んでいって、expressだけでなくkoajsのサーバーも書いたりしてました。作った物をDockerImageにしてDocker-composeで起動してみるってとこまでやりましたね。だから入社したときすでに開発に必要な知識はキャッチアップしてました。

入社後も色々遊びます。

会社の人たちはセキュリティからネットワークから色々詳しい。自分もついていくならネットワーク周り強くなりたいな、と思って、自宅にPC一台追加、計五台。さらにタブレットが3台、スマホが3台と、ネットワークを利用する機器が11台になったので、このあたりをネットワーク区切っていろいろ実験して遊びました。

そのためにルータ5個くらいもってます。一個はNAS機能があったので現在は1TBのHDD繋いでNAS君になってますが、他三台稼働してて一台は予備として休眠中。2LDKのマンションに必要か?と言われると明らかにいらないです。前述の通り「おかしな遊び」なんですよ。

「こんなことできないかな?できたらすごくね?」って思ってやってみるわけです。それでできないとなんでだろ〜って調べたりしてどんどん詳しくなってきた。という感じですね。


【私の端末選定の流れ】

1台はエントリーモデル。Corei3のメモリ4GBでした。勉強が進み、最初のPCがスペック不足になると、もう少しハイスペックなPCが欲しくなります。その時にラップトップかデスクトップか、を悩みましたが、あまり外でノートPCを使わずに家の中でひたすら勉強していると、デスクトップでもいいんじゃないか、と思えてしまう。何と言っても同等の値段ならデスクトップの方がはるかにハイスペの筐体になります。よって2台目にそこそこ高性能のデスクトップ。Corei7-2700K メモリ8GB、HDD1TBを購入し、ノートPCはサブ機になります。

Web系の開発をするようになってしばらくすると、メモリ不足に悩み出します。当時はVMいっぱい立てて、サーバー群作ってました。一個のVMにメモリ4GBとか割り当てるとなかなかしんどいんですね。それはDockerに移行したのちも変わらず(Dockerに移行したら常時10個くらいコンテナ動いてるから当然無理)で、メモリ増設を考えます。で、8GBから32GBに拡張。ついでにディスクもHDD1TBからSSD1TBに換装してそれなりにハイエンドな筐体になりました。

ついでのついでにサブのWindowsも4Gから8Gに増設しましたが、ここで問題が起こります。Windows、32bitだったんですね。なのでメモリ4GB以上は認識しない。64bitにしようと再セットアップを試みるもエラーで無理。頭にきてUbuntu化します。ここからUbuntuの方が使いやすくなってしまい、メインマシンもWindowsを捨ててLinux化します。

で、色々勉強やってるうちに今度は外に勉強会に行く機会が増えて、改めて軽くて持ち運びしやすいラップトップが一台欲しくなります。Windowsの小さめのラップトップを買い、即Linux化します。

転職先に合わせてMacBookAirを購入。最初はMacになれるために買いました。

家ではデスクトップ、外ではラップトップということをやっていると、データを自宅に置きっ放しにしてしまう、ということが良く発生します。しかももう勉強の内容がラップトップではどうしようもなく重くてしんどいクラスにさしかかってました。ここで考えます、「外出先から自宅にリモート接続して勉強できないかな」

しかし外出時のネットワークは基本シェアードIP、自宅は当時すでにIPを固定していましたが、セキュリティ上良くない。AWSのサーバーを踏み台にしても良いけど利用料もかかる。

そこで、 sshで接続できるレンタルサーバーに目をつけます。基本フォーム認証で管理コンソールにログインしたのち、そこから現在のIPを許可して、自宅にssh tunnelできるようにしようと、早速設定を開始。今はこの方式で無料で踏み台サーバーを手に入れ、どこからでも割とセキュアに自宅にアクセスできるようになってます。


この方法で、実はVNCとかのリモートデスクトップもできるんですが、いかんせんネットワークの速度が遅くて無理!となります。 sshは比較的快適で、ターミナル操作は不自由なくできます。ただ、設定が煩雑すぎてめんどくさい。使い方に耐えられなくなっていきます。で、限界を感じてMacBookProやらThinkPadも使い出してます。

基本外で記事書いたりは今MacBookAirです。軽いしバッテリーも持つしね。重い処理をやらせるときはMBPです。

で、こんな感じで、こういう風にしたい!が、できない!となった時にどうする!を考えて実行してきたら詳しくなれてきたわけです。

いろんな人に言いますが、強くなるためには好きであること、好きになるためには楽しむこと、楽しむためには悩むことです。

ちなみにラップトップはもう一切使ってなかったので、人にあげちゃいました。


最後の方はもう面倒になって太字使うのやめちゃった(アハハ


エンジニア全員そうか、と言われると多分違うんですが、私は以上のようなことをして遊ぶ中で色々詳しくなってきた気が強いです。

さて長々と話しましたが、PC最低3台持つといいですよ!私は大いに勉強になりました。

参考にならないかもしれませんが、ほんの一部ですが自分がやってきた内容をちょっと紹介しました。巷に溢れる情報を自分なりに取捨選択して、みなさんも楽しく素敵なエンジニアライフを送ってください。

Enjoy Computing!

では

あでぅ!


この記事が気に入ったらサポートをしてみませんか?