Loading...
keep
書いたもの

ソフトウェアエンジニアとして思うこと

領域ごとに、やっていて何を面白いと思っているかを書き出しておく。

フロントエンド

UI コンポーネントを共通化させるなどが難しいなぁと思いつつ、綺麗に構造化できた時は嬉しいなと思う。キャッシュ戦略をどう取るのかを考えるのも何気に大変。

バックエンド

個人的には一番好き。ある程度抽象的で汎用化された API を設計し、その事業が長期的にどういう方向性になるのかによって遊び・拡張性を残しておくみたいなことが問われるので、やっていて楽しい。

あとはフロントエンドよりは比較的汎用的な設計が許容されるので、プロジェクトによってどういうアーキテクチャにすべきか?みたいな思考の余地が残っていて、そこも面白いなとは思う。そのほかレスポンスで返すデータをある程度扱いやすく・汎用的なデータ構造にしてあげる必要があり、そこを考えるのも楽しい。

DB

一番難しいと思う。テーブル設計を制するものがシステムを制するといっても過言ではないので、毎回テーブル設計はとても悩むし白熱した議論をしている。

テーブル名の付け方一つをとっても抽象と具体の間のいい感じのバランスをとって、わかりやすい命名規則にしないといけないので、毎回悩んでいる。また、RDB 以外にも挑戦していきたい。NoSQL の良さをもっと知っていきたい。

ネットワーク

あまりお仕事としてはやったことがないが、自宅サーバー(Proxmox)でやったことはある。

以前、大きめの会社のサーバールームに入ってどんな機器があるのか調べるといった仕事をしたことがあるが、その道のプロは形状を見ただけでどの機器かを言い当てたりしていてすごいなぁと思った。その時はセキュリティの厳しい会社だったので、PowerShell で自作の nmap みたいなものを作って、全 NW に対して 22, 25, 80, 443, 3389 番のポートにアクセスして死活を確認したりとか、クライアントに交渉して ARP テーブルを見せてもらってどこが生きていそうかなどを調べたりする仕事をしていたが、割と面白かった。

機会があるならば NW のお仕事も引き受けたい。夢は FUJITSU の PRIMERGY RX200 を家に置くことだが、めちゃくちゃうるさいので地下室のある家に住む必要がある。Ubiquiti の L3SW も欲しい。

全体

プログラマではなくソフトウェアエンジニアとしてお仕事をさせていただいている以上、ある程度の設計思想みたいなものを持つのはとても重要だと思っている。

ただし銀の弾丸は存在せず、新しいプロジェクトを経験するたびに自分が持っていた設計思想が崩れて新たに作り直されていくので、ある程度寛容になって取り組んだほうがいいなぁと思う。

フロントエンドやバックエンド、ネットワーク・インフラなどとソフトウェアエンジニアの中でも分業されているが、プログラミング自体は手続きの抽象化とデータ構造がその本質であると思っているので、個人的にはあんまり特化した人材になってもしょうがないなぁと考えている。

登大遊さんが言っていたことではあるが、システム技術領域を拡大すると、OS・プログラミング・コンテナ・クラウド・ストレージ・セキュリティなど、さまざまな技術領域が複雑に混じり合って存在しており、個別に理解しようとすると中途半端な理解に終わるので、システム技術領域全体を理解した方が良い(『秘密の NTT 電話局、フレッツ光、およびインターネット入門(1)』より意訳)とのことで、自分もまさにその通りだなと思っている。

長期的にはシステム技術領域全体への理解だけではなく、そのシステムに関わるステークホルダーが何を望んでいるのか、最大公約数的な利益の追求ができるかといったところまで含めて考えられるようになりたい。

書いたもの ni modoru