見出し画像

ソフトウェアエンジニアとして大事にしていること

こういう記事は凄腕のソフトウェアエンジニアの人が書くモンだとは思ってますが、この2年ぐらいマジメにソフトウェア開発してきたので、現時点の僕が大事にしていることを明文化しておくことに何か自分にとって意味があるかなと思って書いてみます(人の参考になるかはわかりませんが……)。

数えてみたら22個になりました。

(開発)

リーダブルなコードを書く

変数の名前とか、関数の名前とか、読んで意味がわかるものにしましょうね、というのは「リーダブルコード」を読んでから常に意識しています。

コードではなくテストで担保をとる

ある程度コードが書けるようになると、「このぐらい大丈夫っしょ」「テストめんどくさいしいいか」と思いがちなんですが、やりましょう。特に自分の書いたコードに不安がある場合、テストで担保を取ることにしています。(そもそも簡単にテストできない構造にすることを避けたいですね)

個人開発でアプリのデータの保存先をiCloudに変更したとき、自分でもロジックの安全性が保証できなかったので、全パターンを網羅するテストをやりました。やりながら「個人開発でそこまでするか……?」と思いましたが、結果的には何ヶ所かミスってたのを拾えたので、やってよかったです。

個人的にはリーダブルなコード書く意識があって、ちゃんとテストで動作確認できるという二点ができていれば、プログラミングのスキルが低くても、会社でコード書かせても、事故らない人になれるんじゃないかと思っています。

DRY原則、KISS原則を常に意識する

なるべく効率よく、なるべくシンプルに。

言語仕様/開発環境のベストプラクティクスに従う

最近だとC#をちょっと書いていて、

if (true)
{
  // 何かの処理
}

という{ }の使い方に驚きました。個人的には違和感が強いですが、C#の世界の常識に従おうということで、そっちで書いています。言語や開発環境ごとにベストプラクティクスは結構違うので、「俺のルール」ではなく、そっちに従うようにしています。

ツールにこだわる

「弘法筆を選ばず」と言いますが、ツールにはこだわった方がいいです。個人的には初心者のうちはツールの良し悪しが判断できるレベルに達していないので、そんなの気にせずにがむしゃらにやって、ある程度レベルが上がってきたら道具にこだわり出すと良いと思っています。

Git/Githubを使いこなす

Gitもツールなんですが、ここ2年Git使った開発をやってみて、ものすごく重要だと感じたので、わざわざ書きます。現在のソフトウェア開発において、Git/Githubを使いこなせてるか否かで全然変わってくると思います。

(基本スタンス)

常に楽なやり方を探す

プログラミングの美徳に怠惰があると言われますが、そんな感じです。

わからないことはとりあえず自分で調べる

「わからない!」となったとき、人に聞く前に自分で調べるようにしています。結果自己解決できなかったとしても、それから人に聞けばいいですし。経験的に、何もわからないまま人に聞くと混乱が広がるだけの結果になりやすいです。

なるべく一次情報に触れる

Qiitaやクラスメソッドの記事はわかりやすいし、詳しい人が書いてくれているので割と当たってるんですが、たとえわかりづらくても公式ドキュメントにあたった方が良いと思っています。

公式ドキュメントが間違ってたり、アップデートされてなかったりもしょっちゅうありますが、それを差し置いても一次情報は重要です。

(会社での振る舞い)

自説に固執しない

どうしても自分の主張を通したくなるときはありますが、本当に大事なのはチーム全体の意思決定が良い方向に着地することなので、なるべく自説に固執しないようにしています。

自説をゴリ押ししてよかったことは経験上ないですね。

スピード感を持つ

僕自身はそんなにソフトウェアエンジニアとして優れてるわけではないですが、そんな中でもとにかく与えられたタスクを速く解決するのは大事にしています。ミスがあったとしても、そのミスを素早く解決すればいいだけなので、スピードは正義です。

一人で考えたことは人に話す

「わからないことはとりあえず自分で調べる」とちょっと矛盾する感じもしますが、自分一人だけで調べたり考えたりしたことは、「おそらくこれで合ってるだろう」ということでも、可能な限り人に話します。チームメンバーでもマネージャーでもいいですし、口頭でもSlackでもいいでしょう。

不思議な現象なのですが、どれだけ調べても解決法がわからなかった問題を、人に説明している中で突然解決する、という現象があります。これとあと夜中まで格闘してわからなかった難問が、一晩寝て朝見てみるとすぐに解決する現象もあります。IT業界で働いていくなら、この二つの現象は有効に使いたいですね。

たぶん、話す中で情報が整理されて、解決の糸口になるんだと思います。

その「壁打ち効果」は副産物ですが、メインは人に話すことでひとりよがりな考えになっていないかの簡単なチェックです。自分の頭の中では完璧でも、客観的に見ると「とんでもないことを言ってるぞこいつ」となることがありますね。

他人が指摘しやすい状態をつくる

ミスらない人間を目指すよりは、ミスっていることを周りが指摘しやすいキャラとして振る舞っています。

自分の知識は出し惜しみしない

Give and TakeのGiveを増やしたいですね。

自分にしかわからないことをつくらない

たまーに「この機能は僕が一人で開発して、ドキュメントも一切ないので、何かあったら僕に聞いてください」みたいな人がいますが、僕は絶対にやらないようにしています。

悪いエンジニアの処世術として、自分にしかわからないブラックボックスをつくって、会社に対して立場を優位にするというのがあるんですが、まあよくはないですね。

ボーイスカウトルールを守る

他人が出したゴミでも拾って、なるべくきれいな開発環境を保つようにしています。

ナイスガイとして振る舞う

僕はけしてナイスガイな人間ではないですが、会社ではなるべくそれに近いように振る舞っています(周りが僕をナイスガイだと思っているかは不明ですが……)。

ナイスガイ、というと言い過ぎかもしれませんが、「クソ野郎にならない」というのはマジで大事です。「IT業界は人間性を見ない、実力が全て」みたいなのは過去の話です。というか、過去も正確には同じ実力なら人間性がいい方がよかったんだと思いますが……

(抽象的な事柄)

完璧より必要十分をゴールにする

プログラミングしていると、なんかたまに「これは芸術じゃないか?」と思うときがあります。ロジックの美しさに芸術性を見るわけです。そういう感性が刺激されてしまうと、僕なりの完璧を目指したくなる悪い傾向があります。

例えば変数名やメソッド名を究極までキレイにしたくなったり、ロジックの共通化を限界まで進めたくくなったり。

ただまつもとひろゆきさんも言っていましたが、プログラミングは文学ではありません。コードをクリーンにするのは大事ですが、究極のところ我々はコンピューターへの命令を記述しているだけですから、その意味合いで「動けばいい」は正しいのです。

だから、目指すゴールは常に「必要十分」であると思います。

バズワードに(安易に)飛びつかない

AIとか機械学習とかになるべく飛びつかないようにしています。

知識の深さと広さを意識する

専門知識を深めるのは重要なのですが、その一方で広さも重要です。

何を言っているかというと、僕は2019年からiOS開発というジャンルをメインで掘っています。例えばこのまま5年間iOS開発をやり続けたとすると、それは相当詳しくなれるでしょう。

しかしその一方で、1年ごとにジャンルを変えてみる、という方法もあります。Android開発、Webフロントエンド開発、Webバックエンド開発、みたいに毎年やることを変えていったとすると、おそらくどの分野も中途半端な知識がついた、器用貧乏なソフトウェアエンジニアが誕生すると思います。更に5年後には今存在しない何らかの新技術も出てくるでしょう。。。

「その道の専門知識がきちんとある人」になるためには、どんなに優秀な人でも3年ぐらいは必要かな〜というのが僕の今の感覚です。現実的にWebフロント/Webバック/iOS/Android/その他全ジャンルに精通したソフトウェアエンジニアというのは存在しないでしょう。

深めつつ、広めつつが重要だと思っています。

単純に開発を楽しむ

ふつーにプログラミング書いて動いて、「すげー!」っていう感覚は大事にしています。「すごいやろ俺!どや?!」っていう感覚。

「いやこのぐらいのコード、もっとすごい人だったら俺の半分の時間でできていただろうな……」とか「うわー障害出しちゃったよ」とか、「一生勉強し続けなきゃいけないのつらすぎ」とか、そんなネガティブな感情にとらわれる必要は全然なくて、楽しいことをしてしかも金もらってるっていう感覚を持ち続けられるか? が勝負だと思っています。

自分の限界を意識する

僕はスーパーマンではないので、どんなに頑張ってもタスクの難易度が高いと「できない!」となることは当然あるんですね。それが自分の限界です。それを認めています。

自分には限界があるので、人の力を借りますし、人の力を借りてもできなければ、それはそもそも達成不可能なタスクだったのでしょう。あるいはもっと時間が必要なのかもしれません。

限界や妥協点をどこまで低く見積もるかで、結果の質は変わります。けれど経験上、全力でやって見えてきた限界というのは、マジの限界だというケースが多いです。

限界を意識することで、「ここまでは(たぶん)いける」という見極めもできると思います。

マンガやアニメの世界では「うおおおおおおおおおおおお限界突破あああああああああああああ」みたいな描写がありますが、現実で限界を突破すると心身を壊して終わりになるっぽいので、やめた方がいいです。

「死ぬ気でやれよ。死なないから」みたいな言葉がありますが、実際のところは「死なない程度を見極めて、全力でやる」というのが良さそうです。

(了)

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