上流工程のSEについて次のような意見を良く見かけます。
上流工程のSEはプログラミングなんてできなくても大丈夫!
上流工程のSEを目指す皆さん、騙されてはいけません。
実際に、新卒でSEになって下流工程を経験することなく最初から上流工程の仕事をしている人の中には、プログラミングの知識が全くない、もしくは苦手意識があって避けているという人がたくさんいるのも事実です。
しかし、上流工程の現場に約15年間携わってきた経験から言うと、プログラミングの知識なしにシステムエンジニアやプロジェクトマネージャーをするのは無理があると思っています。
たとえば、基本設計書(外部仕様書)を書く場合にも、実際のプログラムの挙動を意識して書かないと、プログラマがコーディングする際に頭を抱えるような仕様ができあがります。
あるいはさらに上流の要件定義をするときでさえ、その先のプログラミング工程を意識しておかないと、お客様に言われるがままに要望を聞いてしまい、コストや開発期間が長くなって赤字プロジェクトになることもあります。
もう一つ問題なのは、プログラミングの知識が全くないと、開発を委託する外注先から見積もりをとってもその妥当性の判断ができなかったり、納品されたプログラムの品質もよく分からない状態になってしまいます。
そこで、本記事では「上流工程のSEが本当に知っておくべき現場で使うプログラミング言語」と、「初心者や新人がまず最初に学習すべき言語」について書いてみたいと思います。
私の経歴は、ベンチャー企業、大手企業2社での下流から上流工程のSE、プロジェクトマネージャーとして20年以上働いてきました。これらの経験から、本物の現場で使える知識をお伝えしたいと思います。
SEとして就職を考えている方、就職が決まった方、プログラミングに苦手意識のある現役SEの方は、ぜひ本記事を参考にして効率的にプログラミングの学習を始めてみてください。
上流工程のSEに必要な現場で使うプログラミング言語12選
いきなりですが私のこれまでの経験上、現在の日本企業において最も一般的な上流工程SEが業務で使う可能性のある言語12種類について、「使用頻度」と「習得のし易さ」で分類したものを載せます。
分かりやすくするために、Pythonを基準にしてマッピングしてみました。
これらのプログラミング言語について少し解説します。
それぞれ購入するならこの1冊というおすすめ書籍も紹介しておきます。
Batch(使用頻度:高 難易度:易)
いわゆるWindowsのバッチです。
プログラミング言語に含めるのはどうかと思いましたが、実際の現場で使われているのは疑いようのない事実なのでランキングに入れました。
これ単体でバッチプログラムを作成したり、Windowsサーバーのタスクでは後述のVBScriptのプログラムやJavaのプログラムを呼び出す親として使われることがあります。
もちろん、個人の業務でちょっとしたファイル操作を自動化したりという用途でも使うため、SEとしては基本中の基本知識といえるでしょう。
以下はおすすめ書籍です。
VBScript(使用頻度:高 難易度:易)
Windowsであれば標準で使えるプログラミング言語です。
Excelマクロなどが基本的にVBScriptの言語をベースにしています。
正確にはWindowsに搭載されているWSH(Windows Script Host)という仕組みで標準的に使われる言語です。
これ以外にJavaScriptベースのJScriptもありますが、VBScriptの方が断然よく利用されます。
以下はおすすめ書籍です。
JavaScript(使用頻度:やや高 難易度:中)
もともとはブラウザの中でコンテンツを動的に変化させる用途として使われていましたが、最近ではブラウザの中だけでなく通常のプログラミング言語としての地位を確立しています。
とはいえ、基本的にはWebアプリケーション周りで利用されることがほとんどです。
今はたいていのシステムはブラウザで操作する流れですので、知っておくと便利です。
昔のJavaScriptの知識しかない方は、今のものは別物といってよいくらい変貌しているので、もう一度勉強することをお勧めします。
以下はおすすめ書籍です。
PowerShell(使用頻度:やや高 難易度:やや易)
WSHの後継としてWindowsに搭載された言語です。
Windowsを操作するコマンドなどがたくさん標準装備されているので、使いこなせば非常に強力ですがSE観点で見ると使いこなせる人が少ない印象です。
そのため、BatchやVBScriptに比べて利用頻度が低い気がします。
以下はおすすめ書籍です。
Java(使用頻度:中 難易度:やや難)
現在のエンタープライズ現場において大き目のシステムを開発する場合、最もよく使われる言語ではないかと思います。
ただし、上流工程のSEとして見たときにJavaでコーディングしたり、Javaのコードを見る機会は極めて低いです。
おそらくSEとしてもっともよく目にするJava関連のファイルは、「~.jar」(ジャーと呼びます)というものだと思います。
これは、バイトコンパイルされたJavaの実行ファイル群をまとめてzip圧縮したものなので、このファイルからJavaのソースコードを見ることはできないのですが、実はJavaの実行ファイルは「逆コンパイル」といってソースコードに変換することができます。
例えば外部ベンダーにjarの修正などを委託して納品物を渡されたときに、修正前のjarと修正後のjarをそれぞれ逆コンパイルして差分を取れば、何を変更したのかすぐに分かります。
Javaのコーディングができなくても、SEとしてはそれくらいの好奇心が必要かと思います。
ちなみに私がよく使う逆コンパイルツールは以下です。
上流工程のSEがJavaを使いこなせる様になる必要はないと思いますが、もしきっちり勉強してみたいという場合は以下の書籍がおすすめです。
Python(使用頻度:中 難易度:中)
AI界隈、ビッグデータ界隈で最もよく使われる言語です。
AI系のサービスを提供しているSEであれば必須知識でしょう。
プログラミング言語としての難易度はそれほど高くありませんが、Pythonを使うシチュエーションというのは、どうしてもAI関係、統計関係の知識が必要になってくるということで難易度”中”としました。
ライブラリが充実しており、世界的な利用人口も多いのでネット上でサンプルコードが見つけやすいメリットがあります。
ただしWindows環境の場合、実行には処理系のインストールが必要なので、厳しく管理されたPCやサーバーでは最初からPythonの利用を前提にしていないとハードルが高いと思います。
以下はおすすめ書籍です。Pythonを学びつつAIや機械学習の理解もできて一石二鳥です。
R(使用頻度:やや低 難易度:やや易)
ほぼデータ分析専用の言語です。
RStudioというIDEとセットで使うことで、簡単にデータ分析環境を構築できますが、Pythonに比べて利用人口は少ないため、情報は少なめです。
ビッグデータを扱う用途には向いていないですが、Pythonより言語的には分かりやすいので個人でデータ分析する用途としては良い言語だと思います。
私個人はPythonより好きですが、周りを見ても利用人口は少ないです。
以下はおすすめ書籍です。これからRを始めたいという方は絶対にこの本を買ってください。下手に正統派の入門書などを買ってしまうと余計な回り道をすることになります。
C#/VB.NET(使用頻度:やや低 難易度:やや難)
現在Windows10用のデスクトップアプリを開発する場合の標準ではないかと思います。
マイクロソフトのVisual Studioという開発環境が必要ですが、学習やフリーソフト開発用途であれば無償で利用できます。
当サイトで公開している「VaNT」もC#で作っています。このようなソフトを作りたい場合は習得しておくと便利ですが、勉強するのは必要性を感じてからで良いと思います。
勉強してみたいけどプログラミングが苦手という方は、VB.NETの方から始めるのが良いでしょう。
以下はおすすめ書籍です。
C/C++(使用頻度:低 難易度:高)
もともとUNIXというOSを作るために作成されたプログラミング言語です。
20年前はSEの現場でもまだ良く使われていましたが、今はほとんど使わなくなりました。
正直、これらを今から勉強するくらいなら、上で紹介した言語を複数習得する方が仕事には役立つと思います。ただ、CやC++には上記言語では使われない概念などが多数あり、OSやHWレベルで操作が必要なプログラムを作るには適しています。
私は大学生のときにC言語を使っていましたが、会社に入ってから使う機会といえば、Linuxで何かのソースを入手してコンパイルに失敗するときにソースを確認するという程度で、一からこれらの言語で開発をするということは一度もありません。
というわけでおすすめの本もありません。この記事の読者層を考えると、C/C++は勉強しなくてOKです。
Ruby(使用頻度:低 難易度:中)
今回リストアップした言語の中で唯一日本人が作った言語です。
あくまでも、「上流工程のSE」という視点で見た場合に使用頻度が低いというだけで、一般的にはよく使われています。
特に数年前に一斉を風靡したRuby on Rails(通称RoR)というフレームワークを使う必要があれば、ベースとなるRubyを習得しなければなりません。
私は個人的にRubyが好きだったので、ちょっとしたコマンドなどをRubyで作って現場で使ったりしていたのですが、Pythonと同じくWindowsで実行するにはRubyの実行環境をインストールする必要があります。
なので、せっかく作ったプログラムをRubyの実行環境を持たない人に渡す際は、ORCAというツールを使ってWindowsの実行形式ファイル(.exe)にする必要があります。
ただし、ORCAを使って作ったexeファイルはRubyの実行環境ごと実行ファイルにしてしまっているので、ファイルサイズが巨大になる点が問題です。
以下はおすすめ書籍です。Rubyを最初から勉強するならこれ一択でしょう。
Go(使用頻度:低 難易度:?)
Googleで開発された言語で、Linux、Mac、Windowsなど色々なプラットフォームの実行形式ファイルを作ることができます。
実際のところ、仕事で使うようになるのはまだまだ先だと思いますが、今から勉強しておけば役に立ちそうな気がしています。
Go言語については私自身勉強を始めたばかりなので、まだ偉そうなことを言える立場ではないため、私が購入した本を紹介するだけにします。
Lisp系(使用頻度:低 難易度:高)
おそらくLisp系言語で最も多くの人が接する機会があるのは、Emacsのマクロだと思います。
ただ、Emacsを使っている時点で本記事が対象としてる「初心者」とは言い難いので、普通の人はLispを学習する必要は全くないでしょう。
ちなみに私は、社会人になってすぐに、XMLを組版するために「DSSSL」という言語を使ったシステムを扱うことになり、SchemeというLisp系言語でかかれたプログラムの確認や修正をしていたことがありますが、この20年間で仕事で必要になったのはそれだけです。
ちなみに、今は「DSSSL」を使わなくても「Apache FOP」というものでほとんど用が済んでしまいます。
こちらはXSLというXMLを操作する言語を使います。本記事では取り扱いませんでしたが、XSLはSEとしても知っておく価値が高いので、これは今後別の記事で取り扱いたいと思います。
プログラミング未経験のSEがまず勉強すべき言語 💡ここが結論!
上で12種類の言語をリストアップしましたが、おそらく皆さんは以下のように思っているはずです。
こんなにたくさん勉強する時間も気力もないよ!
安心してください。上流工程のSEでプログラミング未経験であれば、上記のうちまず「VBScript」だけ勉強してみるのをお勧めします。
なぜなら、VBScriptを勉強するだけでプログラミングの基本的な知識が身につくからです。基本が身につけばプログラマとの会話もスムーズになりますし、他の言語の理解も早くなります。
なんか、先輩からオブジェクト指向が良いみたいなことを聞いたんですが?
大丈夫です。そんなものはプログラムの基本が理解できてからの話です。
私が2021年という時代でもVBScriptの学習をお勧めする理由は以下の通りです。
- 実行に特別な環境が不要(無料で勉強できます)
- 一般的な制御構造が備わっている
- 初心者を混乱させる省略記法などがない
- 情報が多い(書籍などを買わなくても勉強できます)
- 習得が簡単で、習得すればExcelのマクロもつくれるようになる
つまりコスパが良いということです。
ただ、VBScriptの勉強にそんなに時間を使わないでください。今となっては古いものですので、少なくとも上料工程のSEとしてはこれから極めるレベルに到達する意味はありません。
自分でインターネット上の情報をコピペしながら、かんたんなプログラムが作れるくらいで十分です。
もちろん上記で紹介した本が手元にあればより学習効率は高まりますが、基本的にインターネット上の情報だけで十分です。
すでにSEとして働いている場合は、おそらく会社の中には先輩たちが昔から作ってきたVBScriptがたくさんあると思います。これらのソースを見てやっていることがなんとなく分かるようになるレベルがゴールです。
それ以上プログラミングを勉強してみたくなったら、前章の情報を参考にして興味の湧いたものからチャレンジしてみると良いでしょう。
このサイトでも、ステップアップのための情報を発信していきたいと思います。
上流工程のSEに必要なプログラミング言語まとめ
プログラミング未経験で上流工程SEとなった方に対して、誤解や批判を恐れずにまとめると以下です。
あくまでも、コーディングの必要性という観点です。
言語 | 必要性 | |
---|---|---|
1 | Batch | 必須 |
2 | VBScript | 必須 |
3 | JavaScript | 必要と感じるまでは不要 |
4 | PowerShell | できると便利だが必須ということはない |
5 | Java | 不要 |
6 | Python | 不要(ただし仕事でAI系に携わっている場合は必須) |
7 | R | 不要 |
8 | C#/VB.NET | 不要 |
9 | C/C++ | 不要 |
10 | Ruby | 不要 |
11 | GO | 不要 |
12 | LISP系 | 不要 |
結局コーディング観点では「不要」が多くなってしまいましたが、興味が湧いたらぜひチェレンジしてみてくださいね。
上流工程SEやプロジェクトマネージャーでもプログラミングができるかどうかで、確実に市場価値が高くなります。
上流工程SEになりたい人こそ、プログラミングを勉強して欲しいです。
コメント