はじめまして、えせると申します。インターネッツでは、どちらかというと絵を描いている人です。
自分はこの春から未経験からSEになりまして、今日で半年とちょっとが経過しているわけですけれども、この半年だけでもかなり多くのことを学ばせていただいたので、今回はその振り返りをしておきたいなと思います。要はポエムです。
自分語り
先述の通り自分は未経験でこの業界に入ったので、入社するまでプログラミング知識はほぼゼロでした。パソコン歴自体は長かったので基本的な操作に問題はなかったのと、あとはゲームなんかをするので自作PCを組んだりとかでハード面の知識はそこそこあったと思いますけど、とは言え未経験は未経験。入社前にProgateでちょっぴりJavaを触ってみたくらいでした。
さて、今使える(とりあえず実用に耐える)言語は以下のとおりです。
- VB.NET
- C#
- Java
- HTML+CSS
- Javascript
- Typescript
あとはSQLとかも最低限は書けるっていう感じ。あくまで本業は.NET系開発で、たまーにWebアプリ系のお仕事があったりとか。
とはいえ、この半年でずいぶんたくさん書けるようになったな、という感じです。
ただ、VBね……
残念なことに、これまでに一番使った言語はVBでした。C#も書ける、とは書いたんですが、それは.NETの調べ物をするためには、書いてる言語がVBだろうが、C#でググらないといけないからっていうだけです。C#を読み書きできないとVB書けない、っていう謎の依存関係。
言語機能として、別にVBが不足していると感じたことはないです。C#にせよVBにせよ、結局CLIにコンパイルされるわけですから、.NETという文脈上で両者はある程度イコールです。
ただ、文化的な側面で言うのであれば、VBとC#には大きな優劣があります。
まず情報量。これはもう、C#が圧倒的です。Microsoftの公式ドキュメントですら、いまやVBのサンプルコードは載せてくれていません。
超初歩的な情報はVBでも得られたりしますが、ちょっとでも特殊だったり、専門的な情報になった途端、VBの具体例は消滅します。
自分の場合は、EntityFrameworkというO/Rマッパー周りの調べ物をしている時に、否応なくC#を読めるようになった、って感じでした。なぜなら、StackOverflowの利用者にVBerは誰一人としていないから。これは、「アメリカに住むことになったから否応なしに英語が話せるようになった(日本語話者がいないので)」と同義です。
次に、VBを開発言語として採用しちゃう業界の問題。
上記のような業界は、どうしてか悪い日系IT企業の悪いところ全部盛りになってしまっているんですよね。
- コードに変更加えたら、変更前のコードはコメントアウトして、コメントに日付書け。バージョン管理?なんですかそれ
- 一つの画面のコードは一つのファイルにしろ。OOP?クラス設計?デザインパターン?横文字むずかしいね
- グローバル変数!参照渡し!副作用たっぷりメソッド!単一責任原則?DRY?カプセル化?変更容易性?マネジメントの話ですか
自分が最初にアサインされたプロジェクトの環境が良すぎたっていうのはあります。左記のプロジェクトは技術検証っていう名目の自社開発で、かつチームのメンバーが、プログラミングに対してそこそこ意識が高い人達だったので、新入社員だった僕が「いいコードとはこういうコード」を学ぶには絶好の環境でした。実際、コードレビューも充実していましたし、自分の直属の先輩も設計やプログラミング手法といった抽象的な観点をたくさん提供してくれました。だからVBに対して、特に悪い印象は抱いていなかったのですが……。
この秋からアサインされたプロジェクトは、もうやばいです。上記のとおりです。ドキュメントなんてあるわけないし、頼みのコメントは' 変更 2000.01.01 XX. T.Yamada
みてえな。いらん、そのコメントは。'☆ ここにコメント
← あと謎に☆つける文化。なんだこれ。
SIerってこんなもんなんかな……
VBを(しゃーなし)書いてるエンジニアは、みんな同じことを言ってるような気がします。
プログラマって本来、コンパクトで、シンプルで、エレガントなコードをなるたけ書きたいって思ってると思うんです。ホントは。
でもそれはプログラミングが好きな人だけのお話で、別にそうでもない人はとりあえず動けばいいコードを書く。
DRY原則?別に必要なときに必要な場所にコピペすればいいじゃない。
可読性?どうせコードは誰も読まないんだから動けばいいじゃない。
で、なんでこんな思考に陥っていくかって、Sierのお客さんである企業がITについてな~んにも知らない(USBもわからない)くせに障害と納期にはとことん厳しいからで、そのニーズに適応した結果なのかなあと思っています。大きいシステムだとリファクタリング禁止ってルールがあるとかいうじゃないですか。リファクタリングってシステム的には機能は増えたりしないし、それが原因でシステムが動かなくなったりしたら大変ですしね。そういう足踏みが、業界のコンクリ化につながってるのかなあと。
自社開発最高
うちの会社は、自社開発をやっているチームもあれば、SIer的な仕事がメインの部署もある、ハイブリッドな感じの会社です。自分はそこの自社開発がメインのところに入れさせてもらったので、出だしは順調だったのは前述の通り。
ただ、この秋からSIer的な部署に二ヶ月だけ貸し出されるということになって、上述の問題に直面しているわけですナウ。
一番ガックリきたのが、今自分がにらめっこしているクソコードを書いたのが自社の前任者(退社済み) だったこと。同じ社内で、ここまでコードの品質に差が出るのかと愕然としました。
そこで尚更、自社開発とSIerの環境の差を感じました。自社開発は、やっぱり「コードをより良いものにしよう」という行動を起こしやすい。それは、チームが小さかったり、自社が一次請けであったり、いろんな要因でフットワークが軽いから、そこに尽きると思います。
SIerは逆で、本人にその意思があっても、環境がそれを許容できない、し辛いというのがありそうです。実際にこの規模のシステムと積み重ねられた秘伝のソースを目の当たりにしてしまうと、そういった意思が削がれてしまう、萎えてしまうのを自分でも感じます。
まとめ
それはもう、一日が経つのがおそいおそい。自社開発期は毎日アレコレ勉強して、調べ物して、試行錯誤して…だったのであっという間でしたが、今は前任者が残したクソコード(ドキュメントなし)と8時間にらめっこです。
とはいえ、アサインされてしまったものは仕方がないし、二ヶ月というお約束までついているので、むしろ「バッド・ノウハウのお勉強」だと思って最近は業務に就いています(先輩の受け売り)。このページにも書いたようなフラストレーションが、きっといつかの品質向上につながってくれるでしょう。つなげるのは僕だけど。
追記(2022/11/30)
☆★☆5ヶ月に延びました☆★☆
つらい