ソフトウェアエンジニアが効率的にスキルアップ出来た方法とは?日本人と外国人での違いを部署の環境から解説!
ソフトウェアエンジニア必見!「日本人 vs 外国人」のスキルアップの違い
今回は外国人部署にいる我々ソフトウェアエンジニアは1日のうち、どれぐらい自分のスキルを高めるために時間を割いているのか?について書いていきたいと思います。
前回は外国人ソフトウェアエンジニアと働く為に必要が英語力を話しましたが、今回は外国人ソフトウェアエンジニアとの接し方を中心に書いていきたいと思います。 どれだ…
ソフトウェアエンジニアが「外国人が沢山いる部署」で働けば、働いているだけで勉強になりました!
私自身、日本人部署で働いている時と違い、外国人が沢山いる部署で働いてからはほとんど自分の時間を使って勉強する事が事がなくなりました。
何故かというと、外国人が沢山いる部署では9時~17時働いたらその間に自分のスキルはかなり上がるので、9時~17時のその就業時間の後とか、土日祝日の時間を使って自分で勉強する事はなくなりました。
外国人ソフトウェアエンジニアのGoogle出身上司のソースコードを読むだけで本では得られない知見を得た!
何故かというと、やはりこう自分の身の回りのソフトウェアエンジニアがかなり優秀な方ばかりというところもありますし、様々な方から、以前は技術を教えてもらったり、もちろん私も教えるということはするんですけども、優秀なソフトウェアエンジニアが集まって仕事をしますので、他の人のソースコードを読むだけでも勉強になったりします。
さらに、海外のGAFA等から優秀なソフトウェアエンジニアを日本に招きいれ、彼らはどんどん転職を繰り返してきた人たちですので、例えば私の前のマネージャーはgoogle出身の人だったので、そういった方から色々とコーディングなんかを教えてもらったりなんてもしています。
2年くらい前に、トランスポート層の通信を制御するソフトを構築する際のプロジェクトに所属しており、そのGoogle出身の上司が作成したECUモジュールの.pyファイルのコード5000~6000ステップ文を見れてもらい、チームレビューも行った事がありました。
その際に、今まで見たことのない部類のソース実装手法で書かれていたことに驚かされました。そのGoogle出身の上司のソースコードは以下の点で、従来の日本人が書くコードより優れていました。
- 拡張性のある命名規則が適用されていた
- ソースコードのデザインが最適かされていた
- 再利用可能なコードで実装されていた
このような書き方は自分のみの勉強だけは得られない知識なので、とても参考になったことを覚えています。
※GAFA(ガーファ)とは?
アメリカの大手IT企業であるGoogle(グーグル)、Apple(アップル)、Facebook(フェイスブック)、Amazon(アマゾン)の頭文字を取った言葉です。
※トランスポート層とは?
アプリケーション層からのサービス要求に応じ、また下位のインターネット層に対してサービス要求する層
※ECUとは?
ECU(Electronic Control Unit)とは、電子機器を制御する装置のこと。
このように働いているだけで勉強になるというところは、正直かなりあります。ただ私が日本人部署にいたころ、今と同様にソフトウェアエンジニアをしていたのですが、その時は自分のスキルは全然高くはなくて、ちょっと不平不満というわけではないですが、転職したい!みたいな状況に正直なってまた。
ソフトウェアエンジニアを日本人のみの環境でやっていた際は雑用をやらされることが多かった…
私が日本人部署にいた時は、例えば営業さんに一緒についていくとか、あとは無駄なミーティングとかもめちゃくちゃ多かったです。さらに、ソフトウェアエンジニアにパワーポイントを作らせたりしていました。
一番嫌だったのは、社内調整とかでメールで人員調整や日程調整の業務をした時でした。本当に「こんなことやって自分の技術は上がるんだろうか?」ってすっごい不安でした。ただ、上司等に苦情を言っても、「色々な知識が身についているじゃないか」と言われるだけでした。
日本人のソフトウェアエンジニアとして技術が伸びなかった理由はこれ!
「これって大事なことだよ」、とかいうふうに言う上司の方ばかりでした。なので、「これって技術力が全然高まってないよなあ」という感じでした。
最大の理由は大雑把で多様な知識のみにフォーカスし、深い技術を重んじていない日本人部署の風習でした。
日本人部署で働いたとき私も自分の技術力がなかなか伸びないということがあったので、就業時間終わった後に自分でプログラミングしたりとか土日も技術情報雑誌をめちゃくちゃ読んでいました。
独学でプログラミングを勉強していたという時があったので、その頃は大変でした。ですので日本人部署にいた頃は技術スキルはなかなか高くならなく、幅広いフワフワとしたような知識だけで、実際に手を動かす事は少なかったので技術は身に付かないわけです。
それはそれで日本人部署の文化であり、自分の給料を上げるという方針でも全然いいとは思うのですが、そんな環境だったので私は自分で勉強しなきゃってことで、家帰ってから勉強したり土日に勉強していました。
ですので、日本人部署にいた頃は「かなり自分でも働いているなー」、さらに「よく勉強してるなあ」、と思っており、土日も勉強してるからこれだったら外国人が沢山いる部署にいるような優秀なソフトウェアエンジニアに追いつけるんじゃないか、と思っていました。
しかし、現在、外国人が沢山いる部署で優秀なソフトウェアエンジニアが集まった中で8時間毎日一緒に彼らと仕事をすれば、実践的なスキルがどんどん毎日高まるわけです。
日本人部署で働いているときは実践的なスキルは伸びずに、夜の2時間とか土日だけを合わせても、やはり外国人が沢山いる部署で8時間働いてる人とかと比べると、どんどんスキルが離されていってしまうのです。
外国人ソフトウェアエンジニアと一緒に働いて私が体験した「働きながらpythonスキルアップ事例」を紹介!
外国人が沢山いる部署でソフトウェアエンジニアをやれば、働くだけでスキルが上がるんですけども、日本人部署で独学してもスキルはなかなか伸びないと私は正直なところを思います。
ソフトウェアエンジニアがpythonでのコア以外の周辺知識を自然と身に着けた方法がこちら!
実際に、私も外国人が沢山いる部署で働いているときに、仕事でわからないことがある際は、例えば自分で与えられたタスクとかプロジェクトがあってその中でこれは極端な例かもしれないですけど、シンボリックリンク(特定のファイルあるいはディレクトリへのリンク先を格納した別のファイルのこと)をpythonのコードの中で実装しなければいけないことが、過去にありました。
そのシンボリックリンクはどうやって実装するんだろうとpythonのドキュメントを見ますが、「こうすればーできるんだ」とそのまま、コードに書いて終わりみたいなことをするのではなく、シンボリックリンクの作り方を見たら、これをリネームするときとかリムーブするときはどうやってやるんだろう?とかその周辺のことも私は結構読むようにしてます。
あとは、ハードリンクシンボリック、リングジャンプ、ハードリンクはどうやってやるんだろう?とかその周辺に関わるようなドキュメントもまとめて読んでおくという事をすると、就業時間でも一応仕事に関わるような内容なので、ちょっと広くその範囲を学ぶようにする事は心がけています。
あとは単純な例でいえば、webフレームワークを作ってログインやサインアップを実装しなければいけない時に、もちろんその自分でスクラッチで書いて、実装するのもありなのでしょうけど、すでにサードパーティーのライブラリーは世の中に落ちているのが実際のところです。
そのときに様々なライブラリーを見てドキュメントを見て、「こういったやり方の方が確かに実装しやすいなぁ」とかっていうようなことを調べたりとか、このライブラリーを自分のプロジェクターが取り込もうとして、取り込んだ時に、そのまま取り込んで「動いたオーケー、次に行こう」ではなく、そのライブラリーの中身も私は結構読んだりします。
そうすれば「あぁこの人こんな感じ例えばサインアップするときにmd5でパスワードをコンバートした後にeメールでこのような形にして送っているんだ」とか、その人のソースコードを見ると「こんな書き方して結構面白い書き方だな」という感じで、いろいろ学べたりします。
ですので、他のサードパーティーのライブラリーのコードを見ると、自分の書き方を見直したりとか、ちょっと違うような方向性で面白い書き方をしている人も結構いますので、そういったのを見て自分の知識を深めていくことをすれば良いです。
なので、それぞれで一応その業務の中で関わっているようなサードパーティーのライブラリーの中を見ても全然大丈夫です。
就業時間を使っても大丈夫ですし、さらにそのサードパーティーのライブラリーが問題起きたときに自分ですぐに調べられるっていう時にも、そのソースコードの方がいいという理由を言えば就業時間に他のサードパーティーのライブラリー読んでても大丈夫です。
私はこの経験のおかげで、通常は1か月くらいかかるpythonのサインアップツールを1週間程度で実装する事が出来ました。
外国人ソフトウェアエンジニアと一緒に働いた際に効果があった「スキルアップの為のテクニック」を紹介!
私自身としても、実戦的なプロジェクトで実際働いていて、それに関わるその周辺の知識を覚えてくっていうほうが、やはり身につきます。
例えば私がpythonのプロジェクトを組んでいたときに、他の同僚の外国人ソフトウェアエンジニアが、rubyonレールのこんなのがいいよ、とか言った時に私がそれを聞いてrubyonレールも知っておいた方が良いのか?とそっちを学んだとしても自分の業務と全然違うことなので全く覚えられなかった事がありました。
自分の業務に関わるようなことを覚えていった方が、自分の頭の中に入っている、というところはあります。もちろん、他の外国人ソフトウェアエンジニアの人の面白そうな技術等は、パラパラっと勉強する時はありますが、一応自分のプロジェクトに関わる実践的なスキルの周辺を調べていくということをして、私は自分のスキルを高めていっています。
やはり自分のスキルを高めるには、良い環境に自分の身をおいて優秀な人が周りにいるような環境に飛び込んだほうが自分のスキルは上昇しやすいです。
これはスポーツでもそうなんですけど、自分よりもうまい人と一緒にプレーして行ったほうが、スポーツはうまくなります。ですので、自分よりも身の回りが優秀な人がいるような場所に飛び込んでいく事が一番スキルを高めるためには重要です。
もし、このブログを見ている日本人ソフトウェアエンジニアの皆さんが、日本の企業で雑用とかいろんなことをやらされていて、なかなかスキルが伸びなく、自分のスキルがないから就業時間が終わった後に勉強したり、土日に勉強しなければダメなんだ!と言って頑張ったとします。
それでも、例えば弊社のような外国人が沢山いる部署で外人と一緒に働いている日本人ソフトウェアエンジニアのようなスキルが毎日伸びるような社員と比べると、自分でいくら独学で勉強してもやはり差が付けられてしまいます。
一番ベストなのはまあ転職できるのであれば、転職して自分のスキルが高められるような場所に入って働くのが一番スキルを伸ばしやすいとは思います。もちろん日本は転職社会ではないので、転職した後になかなか給料が伸びなかったり、変な方向に行っちゃってその後なかなか転職もうまくいかずにキャリア構成がうまくいかないというリスクもあります。
転職するのも一つのオプションかなと言う感じでしょうか。その辺は皆さんのリスクとかその辺を考えていただくといいんじゃないでしょうか。
そうはいっても、このブログを見ている人はサラリーマンのソフトウェアエンジニアが多いと思いますが、私個人としては転職よりもまずは自社内の外国人が沢山いる部署に異動して英語力を鍛えることをお勧めします。
コメント