システムエンジニアの仕事をしていると、新たなプログラミング言語の習得がおろそかになりがちです。
極端なことを言ってしまえば、プログラミング言語が読めなくとも遂行できる仕事はありますし、ロジックやアルゴリズムを理解し、設計書の読み書きができれば良いという考えもあります。
しかしプログラミング言語は今まさに作ろうとしているシステムを構成する最重要な要素です。手を動かして製品を作るプログラマとの会話、顧客が要望する機能を実現するために思い描くロジックの本質はプログラムの中にあります。
この記事ではシステムエンジニアの言語習得について、言語を使えるメリットやどんな言語をターゲットに学習するべきか、また知らない言語が使われる現場に投入された際の対応法などをお伝えします。
これからシステムエンジニアとして活躍される方や仕事に行き詰まりを感じているシステムエンジニアには特に読んでほしい記事ですので、是非ご覧下さい。
システムエンジニアは言語習得するべきか
上にも書いたとおりシステムエンジニアはプログラミング言語を習得するべきだと筆者は思います。
もちろん業務によってプログラミング言語が不要な場合や言語習得より優先すべき勉強やスキルはありますが、システムを扱う以上、何らかのプログラミング言語に精通していることが理想です。
プログラミング言語に精通すれば見積り精度が上がる
プログラミング言語が理解できると見積もりの精度が格段にアップします。
例えば帳票の表示項目を変更する要望があった場合、言語を習得しているシステムエンジニアであれば、頭の中で「このロジックをこのように組み替えれば良い」「◎◎のモジュールに項目をひとつ加えれば良い」などプログラムをベースとして、実際の仕事を想定できます。
これができると変更の影響箇所やテスト範囲などもすぐにイメージすることができるため、高い精度で見積もることができるでしょう。
もしプログラムに疎い場合、これらの作業はすべて他のSEやプログラマに用件を伝えて見積もりしてもらったり、設計書を広げて調べたりと見積もり作業そのものに大きな時間を取られます。
またドキュメントが完璧に整備されていないといった状況では見積もりすら困難ですし、他のSEやプログラマの見積もりを検証するすべもありません。
ソースコードレビューはシステムエンジニアの仕事
ソースコードレビューの担当者はプロジェクトによって異なりますが、基本的にシステムエンジニアの仕事です。
実際の現場ではシステムエンジニアと上級プログラマ、担当プログラマが同席して行われるようですが、一般的なプロジェクトの指揮系統や責任分担から考えればシステムエンジニアが最終的な責任を負うことになるでしょう。
取り扱っているシステムのプログラミング言語を使ったことがないとしても、webならばweb系の言語、オブジェクト指向言語を使っているなら系統の言語を知っているだけで、ソースコードはある程度追えるようになります。
システムエンジニアに求められるのはソースコードの細かいバグを見つけることではありません。
全体のロジック構造を把握することやテストの際に影響が出ないかどうか、テストコードは適切に使われているかどうか、コーディング規約が遵守されているかどうかといった全体像の把握と理解、第三者として必要な意見を伝えられることです。
プログラムを書けないシステムエンジニア
筆者は大手SIerに勤務していましたが、入社した当初、システムエンジニアはソースをかけなくても良いと言われていました。
確かにSIerのエンジニアはコーディングスキルよりもマネジメントスキルが重要視されますが、設計書を読み解く力や顧客・プログラマ双方が読んでわかる設計書を作ろうとすれば、プログラムに精通していることは大きな助けになります。逆に言えば、プログラミング言語が読めることを前提とした設計書もあるわけですから、ある程度は勉強しておくべきです。
これは実際にあった話ですが、筆者があるシステムの機能設計書をプログラマと作った際、他のシステムエンジニアからクレームが来ました。
彼が言うにはSQL設計が読めないと言います。
その設計書にはSQLのSELECT文の構造やINSERTに必要な項目を記していただけでしたが、コード化されたSQL文に則って書いたもので、SQLが読めない方には難しい内容だったようです。
プログラマには「非常にわかりやすい」「ぱっと見ただけでSQL文が思い浮かぶ」と評判が良かったものの、SQLが読めない書けないエンジニアにはさっぱりわからないものだったようです。
これではプログラマに対する求心力は落ち、彼のSEとしての仕事は顧客とプログラマの間をつなぐだけの仕事になってしまいます。エンジニアとして大成するのにこれでは心もとありませんね。
システムエンジニアが習得すべきプログラミング言語
システムエンジニアはプログラマのように完璧に言語を使いこなす必要はないと思います。しかし業務に使われるであろう言語やその周辺言語を最低1つは習得しておくことが必要です。
フリーランス参画支援サービス「クラウドワークス テック」の求人検索を参考にして、エンジニアに求められる言語を一部抜粋します。
Android JAVA
C/C++
C#
COBOL
Go
HTML/XHTML
HTML5
Java
JavaScript
MySQL
Objective-C
Oracle
Perl
PHP
Python
Ruby
Scala
Swift
など
これらを見ると「web系」「スマホアプリ系」「DB系」「オブジェクト指向開発」「スクリプト言語」などに分けることができます。
参照:エンジニア・デザイナーを中心としたフリーランスエージェントサービス「クラウドワークス テック」
絶対押さえるべきDB系
言語というよりも仕組みや設定にですが、DBはほとんどのシステムで使われるため、絶対に押さえておきたいところです。MySQLやPostgreSQL、SQLServerなど一通り押さえるべきだと思います。
おすすめはJava
Javaを学習すると非常に幅広い勉強ができるためおすすめです。オブジェクト指向の学習や復習ができ、さらにAndroidアプリ開発方面への理解も深まります。
つまりつぶしのきく言語であり色々なスキルを身につける上でベースとなる言語だと言えます。
python・Ruby・PHPから選ぶ
これらの言語はエンジニアの将来像や携わりたい開発内容などから選ぶことができます。
Pythonはスクリプトに強く統計や分析システムの分野に強い言語ですから、分析系やマーケティング分野に関連するSEはおさえておく価値があるでしょう。
Rubyの学習はRuby on Railsといったwebアプリケーションフレームワークの理解の手助けになりますし、PHPはwebアプリケーション開発でよく用いられる言語です。
特にPHPはWordPressのカスタマイズにも使えるため、ブログ作成など趣味と実益を兼ねた活動をしながら学習することもできます。
またこれらの言語は学習コストが比較的低いため、業務の合間を縫って勉強するのに最適です。
未経験の言語を使うシステムを担当することになったらどうする?
担当する仕事で使われている言語が未経験の場合、システムエンジニアとしてはどうするべきでしょうか。
理想はその言語を勉強して一通り使えるようになることですが、現実にはなかなか難しいものです。
そこで業務の遂行に支障が出ないようにするための行動として筆者は最初に言語の特徴を押さえることからおすすめします。
言語の特徴を押さえると広がりが見える
例えばJavaを使うシステムの場合、オブジェクト指向であることを知れば、次にオブジェクト指向開発について自分の知識を再点検し、必要ならば書籍やwebをあたり学習するなど言語の特徴を押さえることで次にやるべきことが見えてきます。
Javaはメモリ管理が楽なことを知れば、ロジックの組み方を配慮することもできますね。
どんな場合でも言語の特徴を押さえ、設計やレビューにフィードバックできるようになることを目指しましょう。
システムエンジニアは言語を押さえて一歩先に行く
プログラミング言語を知らなくても業務を遂行できますが、言語の特徴を知っておくだけでもずいぶん仕事は楽になります。また言語を知っておけば人任せにすることもありませんし、将来の仕事の幅も広がります。
みなさんは使えるプログラミング言語はいくつありますか?
ぜひ言語を恐れず、果敢にチャレンジして下さいね。
フリーランスになるために必要な知識やスキルアップの方法等、様々なお役立ち情報を発信していきます。
(リモートワーク案件に強いフリーランスエージェント「クラウドワークス テック」を運営)