序文
前回の記事では、SE業務とどのような知識が求められるのか、概要レベルで記載いたしました。(「SEはどこまでプログラミングを理解しておくべき?」)
当記事では、もう一歩踏み込んで、SE業務に必須のプログラミング知識をご紹介いたします。これらを知っておくことで、設計業務はもちろん、タスクの割り振りやシステム障害の原因究明まで、考え方に役立つ基本的知識となりますので、要チェックです。
1.ハードウェアとソフトウェアとは
IT機器に慣れ親しんでいる方も多いとは思いますが、まずハードウェア・ソフトウェアについておさらいします。
ハードウェアとは、物理的な機械です。パソコン、スマホ、タブレット、ゲーム機器、USB、CD、ケーブル…etc。パソコンのパーツでは、CPUやメモリ、ハードディスクといったものが重要です。
ソフトウェアとは、まさにプログラムのことです。スマホのアプリケーション、ゲームソフト、インターネットブラウザなど、今世の中に多くのソフトウェアが存在しています。最近流行りの人工知能もソフトウェアといえます。
SE業務での設計においては、ハードウェアの構成を設計することも、ソフトウェアの構成を設計することもあります。
ハードウェア設計の例としては、サーバー(パソコン)を何台用意するか、保存容量はいくらにするか、メモリは何GBにするか、CPUは何が搭載されているものを選ぶかが挙げられます。加えて、5年後10年後を見通して、拡張性やメンテナンス性を意識した提案ができると、頼もしいSEさんということになります。
次に、ソフトウェア設計の例です。プログラミング言語や命名規則など、開発の前提を定めることや、画面を設計すること、システムのフローを明確にすること。そして、プログラムをどのような機能単位で区切るか、などが挙げられます。また、どのようなシステムテストを実施するか(テスト設計)もあります。
SEにとっての多くの仕事はソフトウェアに関わる業務になります。今回は、プログラミング知識をご紹介しながら、ソフトウェア設計について、もう少し深くご説明します。
2.ソフトウェア設計に必要なプログラミング知識
2.1.アルゴリズム
まず理解しておくべき概念は、アルゴリズムという言葉です。これは、一言でいえば、手順です。たとえば、「ユーザーIDから名前を表示する」という機能があったとします。これを達成するための回答例はこちらです。
①システム側でユーザーIDを取得する
②データベースからユーザーIDを指定した情報を取得する
③取得した情報の中から名前の部分を取得する
④名前を表示する
このように、「◯◯して、◯◯して、〇〇して…」という手順のことをアルゴリズムといいます。ちなみに解は1つとは限らず、回答例はいくつも考えられます。
アルゴリズムという概念を理解しておくことで、どのようなプログラムが必要かが洗い出すことができたり、例外ケースを想定することにつながります。
2.2.関数
数学の授業で聞いたことがあると思いますが、プログラミングでも関数というものが必ず登場します。一言でいえば、関数とは、とある処理のまとまりです。数学では、f(x)=2x+3などと定義され、xに5を代入すると、答えは13のように算出する使われ方をしました。プログラミングでもほとんど一緒です。あらかじめ決められていた処理に、数字や文字列を与えると結果をだしてきます。数学では、数字のみの処理でしたが、プログラミングでは文字列も処理できます。
たとえば、2.1.アルゴリズムにだした例を1つの関数とします。すると、この関数は「ユーザーIDを与えるとそのユーザーの名前を表示する関数である」という言い方ができます。
この関数の考え方を理解すると、機能や処理の区切り方を工夫することにつながります。似たような別の機能に応用できることもできるのです。上例では、名前検索でしたが、住所検索があり得るとします。その場合に対応するには、データベースから名前を検索する部分を1つの関数「名前取得関数」という名前で切り出すことが考えられます。さらに「住所取得関数」などを用意しておき、状況によって、どちらの関数を呼び出すかをスイッチすることで、似たような処理をもう一度記述する必要性がなくなります。
どのような処理単位を1つの関数にするのか。これはソフトウェア設計における腕の見せどころでもあります。ただ、毎回毎回すべての処理を関数にしていくのは大変、ということで登場するのが、「ライブラリ」です。
2.3.ライブラリ
ライブラリとは、関数の集まりです。ライブラリは、自作することもできますし、インターネットからダウンロードして無料で使うこともできます。みんな共通して使いたいような処理は、あらかじめまとめておこうという発想です。
もちろん、ライブラリをシステムに導入することで、プログラミングが楽になります。
たとえば、webサービスに決済機能をつけようというとき、0から決済機能のプログラミングをして関数を作成することは難易度が高く、大変時間がかかります。そのようなときには、決済機能向けのライブラリの導入を検討することが定石です。同機能のライブラリも複数種類存在するので、どのライブラリを導入するのか比較検討することもSEの仕事になります。
ちなみに、1つ注意点としては、バージョンがあることです。プログラミング言語もそうですが、バージョンが複数存在していて日々改善されています。より便利になっているのですが、そのバージョンにずれがあると上手く動かないことがあります。
2.4.フレームワーク
最後にフレームワークというものについてご説明します。直訳すると「枠組み」であるフレームワーク。システム開発以外の場面でもたびたび使われる言葉で、たとえば市場分析の手段を指すこともあります。PDCAというものがあったり、考え方をフレームワークと呼んだりします。
では、システム開発においてのフレームワークとはどのようなものか。それはずばり「プログラミングの土台」です。ここまで、アルゴリズム、関数、ライブラリと説明してきました。これらすべてをひとまとめにツールとして提供されたもの、それがフレームワークといえます。
たとえば、webサイト開発のとき、慣れた人がフレームワークを導入すれば、ほんの数分で大枠のシステムがパッと出来上がります。あとはそれにログイン機能を足したり、メニューバーを作ったりと機能を充実させていくようなイメージです。これらの機能も既に関数として用意されていることも多く、関数辞典(いわゆるリファレンス)も本やインターネット上に存在します。加えたい機能から関数を探し、プログラム上で呼び出して使うという開発プロセスが基本です。ちょうどいい関数が存在しない場合には自作するケースもあるでしょう。
フレームワークも、多様に存在していて、様々なプログラミング言語に複数のフレームワークが用意されています。既存システムの改善プロジェクトの方が機会が多いはずなので、フレームワークから決めることは稀です。ただ、各フレームワークにも特徴があります。既存システムで使われているフレームワークはどのようなことに長けているのかを把握しておくこともきっと役に立つはずです。興味をもっておきましょう。
3.まとめ
当記事では、ハードウェアとソフトウェアの違いから、ソフトウェア設計に必要なプログラミング知識として、アルゴリズム、関数、ライブラリ、フレームワークという言葉をご紹介しました。これらを理解しておくことで、設計の際には想定できることを増やし、システムトラブルの際には原因がどこにありそうなのか当たりをつけることにつながります。トラブルがハードウェア的な問題なのか、ソフトウェア的な問題なのか、予想できることも必要な能力です。
また、今回はプログラミング知識に特化した内容でしたが、上流工程(要件定義や設計)では、UMLというモデリング言語を使うことになります。SEを志す方は一度、画像検索して、どのようなものを作るのか調べていただければと思います。
SEの道も奥が深く、追求し続ける姿勢が重要です。日々進化し続ける技術に興味関心を抱いて取り組めるとよいと思います。
自分では探せない、理想の会社に出会えるかも?
自分に合った会社、仕事は、自分だけでは十分に探せないもの。就活サイトで検索するだけでなく、経験豊富な先輩やエージェントに話をしてみることも極めて有効な手段です。シンクトワイスでは、エージェントによる面談を常時行なっていますので、まずは会員登録を。もちろん、登録・利用はすべて無料です。