ソフトウェアエンジニアの面白さを書いていく


こんにちは、夏が大好きな、むっそです。

表題の通り、今回はポエム100%で書いていきます。
ポエム反対過激派の方、許してクレメンス。


# はじめに

古代ギリシャ時代（紀元前300年頃）の哲学者、アリストテレスは「弁論術」でこのようなことを記しています。

**人を動かすためには、「エトス（倫理）」「バトス（感情）」「ロゴス（論理）」 の３つの要素が重要である（アリストテレスの３要素）**

つまりここでなにが言いたいのかというと、
**ソースコードをただコピペしたような技術記事では、エトス / パトス / ロゴスが不十分なので、人の心を動かさない**ということです。

それでは、どんな技術記事が人の心を動かすのか？
それは **「ポエム」** です。そうです、作者の物語です。

**エトス / パトス / ロゴス** がうまく散りばめられたポエムは、それだけで人の心を動かすので、技術記事としての価値があるのです。

ということで、ソフトウェアエンジニア歴6年くらいの私ですが、人生を振り返ってみて **ソフトウェアエンジニアって一体全体なにが面白いんだろうか？** ということについて、エトスとパトスとロゴスを込めて書いていこうかと思います。

https://medium.com/@teruhisafukumoto/%E3%83%AD%E3%82%B4%E3%82%B9-%E3%82%A8%E3%83%88%E3%82%B9-%E3%83%91%E3%83%88%E3%82%B9-%E4%BA%BA%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF-b5e2d9811627

(インテリ気取り前置き終わり)


# ソフトウェアエンジニアの面白さ

## 国語力が上がる

**「プログラミング」って、専門性やテクニックが必要そう。** って一般ピープルから特別視されがちです。

しかしながら、プログラミングは結局文章を書いていく作業なので、その作業自体は**一般的な資料作成業務とほぼ同じ**です(知識がないと1行も書けないですが)。

たとえば難しい単語をイキって使いたがるひとの書く文章は、めちゃくちゃ読みにくいですよね。それと同じようなことがプログラミングでも起こるわけです。

やっぱりシンプルなロジックでわかりやすいコードを書いてくれる人がどの現場でも好かれます。だって**他人のコード(文章)なんて、ただでさえ読むのがつらいのに、そのうえトリッキーなことしてきたら激おこぷんぷん丸(死語?)です。**

ということを考えると、**プログラミングって国語力がメインなんだろうな**と私は思います。そして国語力が上がればクソリプを送ることはなくなるので、**国民皆プログラミング**しましょう(暴論)

ソフトウェアエンジニアの仕事は、ソースコードやネット上の記事を読んだり調査するのが基本なので**読み7割、書き3割くらい**ですかね(多分)。そうなると読解力も大事です。

今までの人生を振り返って、**ソフトウェアエンジニアの仕事を通じて文章構成能力や論理的思考みたいな部分は割と高まったのではないか**と思います。

あと個人的に思うのは、言語化能力や国語力が高いひとの書くプログラムは読みやすい印象があります。プログラミングって文系学問やんって感じしてます。**文系のひと、怖がらずにぜひ来てください笑**

https://atmarkit.itmedia.co.jp/ait/articles/0903/18/news121.html


## 英語力が上がる

ソフトウェアエンジニアの仕事で、最新技術や技術の中心となるアルゴリズムなどを調査するタスクをやることがあります。そのときにネット上でググって調査するのですが、日本語の記事やドキュメントがあまりないことが多いです。

**日本語検索でヒットしない場合は、英語で調べると良い記事が見つかることがあります。** またツールやライブラリを開発している会社の**公式ドキュメントが英語**だったりするので英語力が必要ですね。

また日本語が話せないエンジニアと協業したり、外資系に働くなどの可能性もある職業なので、**コミュニケーションしていく中で英語力が求められたり**します。

こういった仕事を通じて、英語できるようにならんとなぁと痛感することも多いですが、**英語を活用する機会はたくさんある職業**と思います。

https://mynavi-agent.jp/knowledge/it/279.html


あとプログラミングで作る関数や変数の名付けは基本英語なので、英語力がある方が適切な名付けができますね。

プログラミングしてていつも思うことですが、**なにかに名前をつけるのは難しい。** 赤ちゃんにどんな名前を付けてあげようかというレベルで難しい(過言)。


## 調査力が上がる

新米エンジニアと熟練エンジニアがいるとして、この2人になにかの技術調査をさせたときに、**彼らの出す調査結果にものすごい差が出たりします。**

新米エンジニアはググり方が分からなかったり、**分かりやすくて飲み込みやすい日本語記事ばかりを引用して**調査結果を作ってきます。

熟練エンジニアは**公式ドキュメントや論文や本、ソースコード、Github issueなど信頼性の高いサイトからちゃんと引用して**調査結果を作ってきます。調査に知的好奇心や熱が入って、余計な情報まで持ってくることもありますが笑

ググレカス(ggrks)という言葉はあながち間違いではなく、**大体答えはネット上にあって、人間のバイアスまたは眼精疲労で見逃していることは多い**というのは仕事をしていて感じていることです。

https://qiita.com/dodonki1223/items/955819806297ee554b31


この調査力ってエンジニアに限らず、**全ての物事に効いてくるんじゃないかと思います。** 新しい言語や技術を学んだり、まったく未知の分野について調査しなくてはならない状況でも、高い調査力でカバーできるはずです。

この**不確実性の高い社会で生き抜いていくラーニングアニマル**として、重要なスキルだと思います。


## 数学力が上がる(場合による)

難しい理論をいちいちプログラミングして実装するのは非常に骨が折れるので、**インターネット上には便利なライブラリが公開**されています。

ライブラリをインポートして使うだけで計算結果が求められるので、正直専門的な分野とかでない限りは、数学力は必要とされないかもしれません。

ただし数学力が求められる分野があります。それは**データ構造とアルゴリズム**です。アルゴリズムには種類があって圧縮、暗号、機械学習など多岐にわたります。

https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0#%E4%BB%A3%E8%A1%A8%E7%9A%84%E3%81%AA%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0


高度なアルゴリズム実装をしていくソフトウェアであれば、数学力は鍛えられていくでしょう。論文からアルゴリズムを実装するみたいな高度な仕事だと、数学がある程度強くないとできないと思われます。
しかし**数学が好きな人からすると数学を活かせるのが面白さ**でもありますね。


## 理論と実践の両輪が楽しい

世の中にはたくさんのIT資格があります。IT資格をたくさんもっているエンジニアは確かにすごいですが、**資格を持っていてもコードは書けない**みたいなエンジニアは結構います。

https://web-camp.io/magazine/archives/19999

**TOEICスコアは高いが、英語は話せないみたいな現象**です。

**理論(教科書的知識/論文)** と **実践(プログラミング)** の両方の知識をバランスよく持っているエンジニアはスーパーマンだし、どの企業もそういうスーパーマンを欲しがっています。

エンジニアとして働いていて面白いのが、理論が難しくて理解できなくても**実装(プログラミング)を見てしまえば「ああ、そういうことか」と理解**できることがあります。逆によくわからない実装でも、実は学術的な理論に基づいていたと分かった瞬間に、**点と点がつながった**みたいな気づきがあるのは面白いです。

IT界隈には**実装もろくにできない割に理論を振りかざして批評家ぶってるおじさん**はよく観測されますが、実装と理論の両輪ができたほうがエンジニアとしてはるかに楽しいです。


## 勉強量と年収が比例しやすい

**ITは勉強が辛い**という話はよくありますが、勉強さえ出来てればそれに比例してスキルも高まっていくので、年収が上がりやすいです。(おそらく)

学歴がなくて年齢が若いひとでも実装スキルがめちゃくちゃ高ければ、外資系イッセンマンという世界は全然あると思います。

**勉強して成果を示していれば、年収が上がる。** すごく単純な構造です。
私はこのシンプルな構造が大好きです。努力はやっぱり報われてほしいですもん。

あと、どこでも通用する力があれば転職がしやすいので、**転職を数回繰り返すことで年収を上げていく**という力技もありますね。

https://www.itmedia.co.jp/news/articles/2205/11/news170.html


## 毎日の仕事でスキル向上が目指せる

一般の仕事によくある定常業務みたいな仕事は、エンジニアだと忌み嫌われていて、**だいたいコード化されて自動化されてたりします**。(人間が関わってくるミーティングとかはまた別の話ですが)

https://tech-blog.rakus.co.jp/entry/20211125/automation


定常業務が自動化されている現場であれば、毎日新しい機能追加や改善を仕事にできるので、**毎日がなにかしらのタスクの調査/実装時間に使われます。** この毎日の調査/実装時間というもののスキルに与える効果はえげつないです。ちゃんと有効活用できていれば1か月だけでものすごいスキルアップすることもあります。(そういう超人が時々います)

そんな感じで、ソフトウェアエンジニアは毎日なにかしらの気づきやスキルを手に入れやすい職業だと思います。

なので**仕事や物事に飽きやすい性格の人には結構ソフトウェアエンジニアはおすすめ**です。私はそもそも社会人なりたての頃は、ソフトウェアエンジニア職ではなく総合職的な仕事でしたが、同じ作業をしてるのが飽きてしまうひとだったのでソフトウェアエンジニアは楽しいです。(いまのところは)


## 上には上がいることを知れる

インターネット上にはものすごいえげつない経歴のアウトプット魔人がいます。
**全ての分野においてオール5くらいの魔人**もいれば、**一つの分野でめちゃくちゃ尖ってる魔人**もいます。

**頑張っても頑張っても上には上がいる**という感覚はありますが、この感覚は生きる上で重要な気がしてます。

自分が頂点だと思ってると怠惰になって謙遜さを失ってしまったり、**人間として良くない方向に向かってしまう**と思うんですよね。

技術記事の読み手のときにはまったく意識してなかったのに、書き手になった瞬間にひとの作品のすごさに気づかされたりします。

アルゴリズムといえば、[けんちょんさん](https://qiita.com/drken)
分散システムといえば、[くまぎさん](https://qiita.com/kumagi)

みたいな感じで、**推しがいるのは人生において良い効果がある気がします。**


## フルリモートワークで働くこともできる

**クラウド技術が浸透してきて出社せずにリモートで働くことができる時代**になってきたのかなと思います。

クラウド側にだいたいすべてあるので、出社する意味がなくなってますね。
通信の暗号化やパスワードの変更などの最低限のセキュリティ対策をすれば、家からクラウド環境へ安全に接続して仕事ができます。

まだ売上がなくて初期投資を大きく出せない会社やスタートアップにとっては、**小さく事業を始められるクラウド技術は最高！** という感じでしょう。


## 働くエンジニア仲間で理屈が通じる人は比較的多い

ソフトウェアエンジニアで感情的な人間は少ないように思います。
もちろん**環境により人間は変化する**ので環境ガチャの要素はありますね。

仕事をしていて、理屈が通じない人間というのは、本当にどうしようもないですからね。
「嫌いだから却下」とか「面倒だからその仕事はしない」みたいな**幼稚な理屈を振りかざす人とはあまり仕事したくない**でしょう。そういう残念な人はソフトウェアエンジニアでは少ないと思います。

※仕事をめんどくさがる怠惰なソフトウェアエンジニアはいますが、理屈から考えて大事な仕事であればめんどくさくてもやる人は多いはず...(多分)


## 色んなドメイン(業界)の会社に行ける

ITはどこの分野でも使われてますね。今後ITを有効活用できない会社はどんどん淘汰されていくでしょう。

どこの業界でもITが使われるということは、
**飲食業界のソフトウェアエンジニア**から
**医療業界のソフトウェアエンジニア**に転職
といったことも可能になります。

まぁ転職する度に業界知識をインプットする必要はあります。しかしながら**いろんなドメインに飛べる選択肢を持っている**ということがすごく良くて自由を感じますね。


## 会社/人への依存度を低くできる

上記の通り、ソフトウェアエンジニアはどのドメインにでも羽ばたけるので **「この業界に20年働いたから他の業界には行けない」** みたいなことは起こりにくいでしょう。
(業界独自のスキルばかり高めてしまっていたら転職は難しいかもですが)

どこのドメインでも働けるということは、**仕事をする会社の選択肢はものすごく多くなる**ということです。やばい会社に入ったとしても **「まぁこの会社はひどいから次の転職先探そ！」** っていう切り替えはしやすいと思います。
(転職しすぎるとジョブホッパー的な経歴になるので、その危険性だけ注意いただければ)

このように**会社への依存度が低くなると、人への依存度も低くできます**。
一生同じ会社で働く愛社精神が強いならば会社や人に依存しても良いと思いますが、何事も深く依存するというのは良くないと個人的に思いますね。

人への依存度が高い例
・お局様の機嫌を取らないとこの会社で働けない
・スキルが乏しいので転職できず、パワハラっぽい上司のもとでも我慢しなければならない

https://kobito-kabu.com/kaisha-izon/

こういう依存関係は人を歪ませますよね。バランスを程良く保った関係が最高の人間関係を生む土台になるんじゃないかなと考えてます。


# あとがき

ということで、今回はソフトウェアエンジニアの面白さを100％ポエムで書きました。
ポエム反対派の方、誠に申し訳ございません。

比較的ちゃんとした記事も投稿しているので、温情がある方はぜひ見てあげてください。(良ければLGTMしていってください...)

https://qiita.com/muson0110/items/2379595f9bc1d5720478

https://qiita.com/muson0110/items/9e0ce53e0eeec91b3d54

読んでいただきありがとうございました。