みなさんこんにちは、サーバーサイドエンジニア的にPythonを最も触った1年だったと思う、まだまだ未熟なエンジニアの小幡です。
2021年も残すところわずかになりました。現在2021年12月です。
今回は、今年一年間で学んできたことについてまとめてみたいと思います。主にサーバーサイドの学びがありましたが、忘れていましたがKotlinでAndroidアプリを作ろうとしたり、Redisを使ってチャット機能を実装しようとしたり、Djangoで作ったサービスをXserverに無理やりデプロイしようとしたり、様々な学びがあった1年だったと思います。
その中でも、特にPythonに時間をかけてきた1年だったと思いますので、Pythonについてまとめてみます。と言っても、AIや機械学習のトピックスは出てきません。プログラミングにとって基本的な事を整理するような内容になるかと思いますが、この記事が何かのお役に立てば幸いです。
Pythonの扱いについて考えた日々
Pythonを真剣に扱う以前は、それほど自分のコーディングについて意識したことがなかったと思います。というのも、誰かにコードをレビューしてもらうということがほとんどなかったからです。
それまではフロントエンド的な仕事が多かったため、出来上がったサイトや画像を見て貰ってそれを修正するということがメインでした。コードよりもビューを見て貰って、ビューを修正するというやり方のイメージでしょうか。
そこからPythonを扱う事になったので、最初は戸惑う事も多かったような気がします。PHPやHTMLとは全くの別世界が広がっている様に感じましたが、今は慣れてしまったので、どの言語でも良いけれど、それを扱う人の意識だったり、作りたいものによって、コーディングが変わっていくだけなのかなぁと考えています。
Pythonと聞くと、最近話題のAIや機械学習のトピックスが目につきますが、私はほとんどそれらの知識を習得することはありませんでした。おそらく私自身が興味を持っていないという事と、ちょっと勉強しただけでは習得できない領域であること、プログラミングとは全く別の数学だったり、違う知識が必要になることなど、様々な要因があるかと思います。
Pythonに触れたおかげかわかりませんが、私がエンジニアとして進みたい道が、Webのフルスタックエンジニアのようなイメージだということがなんとなくわかってきました。Web周りのインフラ設計・構築からシステム設計からシーケンス図の作成、コーディング実装、クラス設計、テストからリリースまでの流れをスムーズに運用できるようになりたいと考えるようになりました。
そう思うのは、現在自分でもWebサービスを開発しているからだと思います。自分が作りたいと思うサービスの設計からリリースまでの作業を学べたのは大きいと感じています。しかし実際に自分でスムーズに運用できているとはまだ言えないレベルですので、そこのレベルアップができるように頑張っていきたいと思います。
動的型付け言語の難しさ
Pythonは型を指定しなくても、値から推測して型を付けてくれる動的型付け言語で、PHPもその1つです。これまでPHPとPythonで型を自分で指定しないことに慣れていたので、タイプヒントを付けて明示するということに、少し違和感を覚えていました。
今はどちらでも良いなぁくらいにしか思っていませんが、動的型付けの場合は、明示しない代わりに変数名や関数名にとても気を使う必要があると気が付き、その命名の難しさを痛感しました。名前に気を使うのは、どんな言語でも共通かもしれませんが。これは自分以外の人にコードを読まれるよいうことを意識していなかったからかもしれません。自分以外がコードを読むということを考慮すると、変数名や関数名に気を使えるようになってきたかなと感じます。
とても細かいことかもしれませんが、英語の単数名刺と複数名刺で変化がある単語や、複数形になる時にsを付けたりyがiになる(?)中学英語レベルの事がスッと書けないのが辛いです。英語ももっと勉強しないといけないなぁと感じています。
また実際にコードをテストしてみるまで、うまくいっているのか失敗しているのかよくわからないところが辛いところだなぁと感じます。もっと良い確認方法があるのかもしれませんが、おかげでpytestでのデバッグがそれなりに出来るようになったかなと思います。これも動的型付けが原因なのかよくわからないところでもあります。
Javaから見たPythonと、オブジェクト指向
私はJavaをほとんど触ったことが無いので、むしろ動的型付け的に、その場でとりあえずやってみる的なコーディングが多かったと思います。Javaをやっていた人からすると、そういうのは、今その型が何になっているのかよくわからないという状況がとても気持ちがわるい事らしいのですが、その気持ちが全くわかりませんでした。
やはり経験の違いというのは、様々な場所で差として出てきてしまうのかなと思いもっと頑張らなければならないと改めて感じました。
それとは逆に、「そういう意見が多いのであれば、最初から静的型付け言語を選択する方向性もあったのでは・・・。」と思ったりもしていました。動的型付け言語の良さが私にはよくわからないままです。少数で完全に作業を分けている場合は、速さをもとめてタイプヒントを書かないでガシガシ進めていくイメージなのでしょうか?
またAWSのLambda関数を作る場合などはレイヤーで共通処理を実装できるので、オブジェクト指向的なコードの使いまわしなどをあまりしないと思っていましたが、まだまだベストプラクティスを導き出せる領域には達していません。
ベタープラクティスくらいの何かがまとめらていたらいいのになぁと思っていたりします。
他には、オブジェクト指向の部分でとても曖昧だった多態性やインターフェイスについての学びが深まったと感じています。Pythonにはインターフェイスは無い事になっていますが、使わないからこそ、そういうものの有用性や不必要性が少し理解できたと思っています。
PythonとGo言語について考える
PythonでAIや機械学習についてまったく触れていないので、Pythonじゃなくて良いのではないか?と疑問に思う事が多々あります。
それならGo言語はどうだろうか?と最近はGo言語について調べたりしていました。コンパイラ言語なので早い、と聞いただけで、それならPythonじゃなくてGo言語にしましょうよ、となっています。
Go言語を採用しているプロジェクトは、日本では少ないと思いますし、日本語のドキュメントも少ないので不便な点も多いと思います。そうであるならばPythonの方が良いかと聞かれれば、Pythonも日本語のドキュメントはそこそこありますが、少し深い所の調べ物をするときは英語のサイトに頼ることになるので、Go言語と大差ないのかなと思っていたりします。
このように考える事ができるようになったのは、公式のドキュメントを読む習慣が出来たからだと思います。1年前は、個人のブログ記事を読んで問題解決することが多かったですが、関数の引数や戻り値を調べるときは、公式ドキュメントを読むことも多くなりました。そういわれてみれば、PHPの公式ドキュメントを読んでいた1年前は、日本語で書かれていても、どういう意味なのかわからなかった箇所が多く苦労していたと思いました。
PythonもGo言語も扱うには結局英語を読むスキルが必要だと感じますし、仕事の幅を広げるためには、より一層英語に慣れていく必要があると考えています。あわよくば英語を喋れるようになれればいいなぁなどと考えていたりします。
まとめ
最後までお付き合い頂きありがとうございました。今回の記事では私の2021年をエンジニア目線で振り返ってみました。
- 動的型付け言語としてのPython
- JavaからみたPython
- PythonとGo言語
以上三点について注目してみましたが、いかがだったでしょうか?少しでも何かのお役に立てば幸いです。
それではまた次回、またお会いできることを楽しみにしております。ありがとうございました。