2020年3月11日水曜日

IT業界の今後について

こんにちは。

今日は、IT業界について書いてみようと思います。

新型コロナウィルスの影響で、2021年卒業の学生が就職活動に困っているようなので、実際にIT業界で働いているエンジニアの一人として実状を書いていきます。

結論から言うと、これからもIT業界には需要があります。

しかし、これからのIT業界は、これまでとは違い、プログラムが組める程度では通用しなくなるのも事実です。

IT業界の今後について

新型コロナウィルスの影響で、在宅で働くテレワークが多くの企業で行われています。

本来、東京五輪の開催時に行うはずだったテレワークが、このような形で実施され多くの企業では実証実験ができたのではないでしょうか。

そのため、今後は、テレワークを主軸にシステム開発を行うIT企業も多くなると考えられます。

テレワークで働けるようになると、日本全国、世界から優秀なエンジニア に働いてもらうことが可能となります。

また、AIやブロックチェーン といった高度の開発も普通に行われるようになるでしょう。

AIやブロックチェーン は、フロントエンド側の開発とバックエンド側の開発で大きな違いがあります。

フロントエンドでは、AIやブロックチェーンサービスのWebAPIを使用することで、開発期間がさらに短くなるのではないでしょうか。

また、バックエンドは、より高度な数学が必要となり、これまでのシステムとは桁外れのソースコードとなることが考えられます。

中小のシステム企業では、フロントエンドの仕事が多くなり、さらに納期が短くなることが考えられます。

そうなると、フットワークの軽いフリーランスの需要が高まることは分かりますよね。

では、企業に就職せずにフリーランス として働いた方がいいのでしょうか。
私は、企業に就職することをお勧めします。

プログラミングができる方

まずは、プログラミングができる方に焦点を当てて書いていきます。

すでにプログラミングがきますと言って入社して来る方がいますが、正直、実戦では全く使えません。

実際に行う作業は、お客様のビジネスモデルに沿ったシステムの開発です。

PCに向かってする仕事は半分くらいで、残り半分は、お客様との話し合いなど人との関わりです。

お客様の前に出せるだけのビジネスの知識が、新卒では持ち合わせていません。

そのため、教育制度のある企業に就職し、エンジニア の勉強をしつつ、ビジネスの勉強をお勧めします。

また、プログラミングができる方は、いろいろなプロジェクトに参加できるような企業がお勧めです。

企業によっては、SES(システム・エンジニアリング・サービス)を主軸としている企業もあります。

SESは、お客様先に常駐してシステム開発を行うのですが、実際は、古い基幹システムの不具合改修や機能追加などが多いです。

古いシステムを相手にするため、技術力も思った以上に上がりません。

また、古いシステムを長年扱ってきた方を相手とするため、自分でアンテナを張っていないと、最新技術から遅れをとることになります。

なので、主軸を自社開発や受託開発に置いている会社がお勧めです。

プログラミングができない方

では次に、プログラミングができない方や文系の方などに焦点を当てて書いていきます。

プログラミングができない方は、まず教育制度の整っている企業をお勧めします。

まずは、システムに抵抗を感じなくなることを優先した方がいいでしょう。

PCは、幼い頃からそばにあった世代でしょうが、システムとなると抵抗を感じる方が多いようです。

通常自分が仕事で使うPCでさえも、自由に使えるようになるのに時間がかかる場合があります。

しかし、文系の方は、ビジネスに対する知識を持っている方も多いため、お客様との話し合いには最適だったりします。

ですので、教育制度の整った企業に就職し、エンジニア知識を着ければ、すぐにでも実戦へ投入できると私は考えています。

まとめ

実際、入社時にプログラミングができるかどうかは、ほとんど関係ありません

文系、理系もほとんど関係ありません

大切なのは、社会に出てからどれだけ努力するかです。

あともう一つ言っておきたいことがあります。

試験を受ける企業のことは、できるだけ情報を収集しましょう。

特に経営状態は重要です。

IT業界は、景気に左右されやすい業界でもあります。

ですので、入社時の経営状態はしっかりと収集しておかないと、新入社員研修が終わると営業に回されることもよくある話です。

ピンチはチャンスです。

新型コロナウィルスのために就職活動の開始が遅れたとしても、それをバネに頑張ってください。

では、今日はこの辺で。

(追記)IT業界の今後については、以下の記事も参考にしてください。


2020年3月10日火曜日

ウォーターフォールモデルとは

こんにちは。

今日は、システムの開発手法の一つであるウォーターフォールモデルについて書いてみます。

最近では、アジャイル開発の方が効率的と言われていますが、
大手のシステム企業では、ウォーターフォールモデルを使っています。

ウォーターフォールモデルとは

先ほども書きましたが、ウォーターフォールモデルとはシステム開発手法の一つです。

以下のように工程を分けてシステム開発を進めていきます。
  • 仕様書作成
  • 基本設計
  • 詳細設計
  • 製造(コーディング)
  • 単体試験
  • 結合試験
  • 運用試験
  • 納品
各工程で納品物が決まっており、納品物のレビューしたのち、作成者、作成企業、発注企業で押印し納品されます。

そもそもウォータフォールとは滝の意味で、水が上から下へ流れ落ちるように開発する手法です。

工程も、上流工程と下流工程とに分けられ、上流工程は、仕様書作成、基本設計が含まれ、下流工程には、詳細設計、製造、単体試験、結合試験、運用試験が含まれます。

メリット

各工程において、全員が納得した納品物を作成するため、明文化された書類、設計書があり次の工程へすぐに入ることが可能です。

また、後戻り作業が発生しないというのもウォーターフォールモデルの特徴です。

技術者は前工程で納品されたものに集中し作業することができ、スケジュールの遅れも少ないとされています。(実際には、技術者の経験等によりスケジュールが遅れることがよくあります。)

見積りも工程ごとに行うことが可能で、上流工程(仕様書作成、基本設計)と下流工程(製造、単体試験、結合試験、運用試験)で金額が変わることがよくあります。

そのため、上流工程をベテラン技術者が行い、下流工程を若手が行うことで、若手の育成を行うことも可能です。

デメリット

デメリットとしてまず上げられるのは、仕様書作成から納品までが長いということです。

時には数年を費やすこともあります。

そのため、納品され実働に投入される頃には、開発言語が古くなっていたり、時にはセキュリティ上の不具合が含まれることもあります。

また、納品までに時間がかかるため、金額も高くなります。

そして、1番のデメリットは、機能の追加・修正ができないということです。

実際には、機能の追加も同時に行うのですが、前工程の納品物から作り直しになり、再度、レビューや押印が必要となるので、さらに時間がかかります。

まとめ

ウォーターフォールモデルでは、若手の育成ができる良い面もありますが、システム開発の期間が長く、金額も高くなるなります。

しかし、工程ごとにきちんとした物が出来上がるため、大手システム企業では今だに使用されている手法でもあります。

そのため、これからプログラマーを目指す方は、ウォーターフォールモデルでの開発を調べておくと、実戦で役に立つかもしれません。

では、今日はこの辺で。

2020年3月9日月曜日

クラス設計とは

こんにちは。

今日は、クラス設計について書いてみようと思います。

クラス設計で大切なのは以下の3点です。

  • 基底クラスを作る
  • 継承を使う
  • リファクタリングを行う
最近は、フレームワークを使うため、いちからクラス設計することはありませんが、クラス設計は、知っていると結構役に立ちます。

クラス設計とは

クラス設計とは、システム開発の詳細設計の工程で作成する設計書の1つです。

クラス図とも呼ばれ、クラスの関連性を図示したものです。

クラス設計がなぜ大切かと言うと、同じ処理を何度も書かないためです。

同じ処理を異なるクラスで書くと、修正する際に大変になりますし、不具合の原因となります。

どのクラスで、どの処理を行うかで、ソースコードが綺麗な読みやすいものになるかを左右します。

綺麗なソースコードは、不具合が少なくなります。

では、以降でクラス設計で大切なことを説明していきます。

基底クラスを作る

基底クラスとは、継承元となるクラスです。

スーパークラスとも呼ばれ、全てのクラスで使用できる変数や関数をコーディングします。

フレームワークを使用していると、基底クラスを作らず、フレームワークのクラスを直接継承し作成することもあるのですが、なるべくフレームワークのクラスを継承する基底クラスを作ることをお勧めします。

経験上、設計・コーディング・リファクタリングしていくと、同じ値を保持することがよくあります。

例えば、状態を保持する変数は、基底クラスで設定し、状態繊維の処理も基底クラスにコーディングすることで、状態の不一致で不具合となることが減ります。

また、例外処理を基底クラスでコーディングするとで、継承先のクラスでは処理に専念することができます。

継承を使う

新しいクラスを作る時は、継承して作成しましょう。

単体のクラスをすぐに作るプログラマーも多いのですが、フレームワークを使用すると、ある程度の必要な処理はフレームワークに含まれています

せっかく信用あるフレームワークを使用するのですから、フレームワークで用意されている処理は使うようにしましょう。

無理に独自処理を組み込むことは、セキュリティ上の脆弱性を組み込んでしまう可能性もあります。

昔々は、ステップ数が多い方がいいという時代もありましたが、現在は、安全性が重視されます。

リファクタリングを行う

ソースコードは、リファクタリングしましょう

動くソースコードが出来上がったら、試験の工程へ移行しますが、ソースコードは、何度もリファクタリングを行うことで、より綺麗なソースコードとなります。

リファクタリングでまず必要となるのが、クラス設計の見直しになります。

特に継承先のクラスで何度も使用する変数や処理は、継承元のクラスに移すことで、より洗練されたソースコードになります。

システムは、動作するものができたら終わりではありません。

定期的にソースコードをリファクタリングを行うことで、セキュリティ上の脆弱性を防ぐこともできます。

大きなシステムほど、過去のソースコードには手を加えないという暗黙の了解のあるプロジェクトがありますが、そのようなシステムは、スパゲティコードになっていることがよくあります。

まとめ

クラス設計書は、詳細設計の工程で作成される設計書ですが、何度もリファクタリングを行い、それに伴って改訂をしていきましょう。

クラス設計書があることで、新たな機能の追加や変更にも早い対応ができます。

また、クラス設計を行うツールも多く出ていて、クラス設計からソースコードを生成してくれくツールもありますので、用途に応じて探してみるのもいいかと思います。

では、今日はこの辺で。


2020年3月8日日曜日

良く使われるデザインパターンMVC

こんにちは。

今回は、よく使われるデザインパターンについて書いていきます。

結論から言うと、よく使われるデザインパターンは、「MVC」というデザインパターンです。

おそらく、ほとんどのシステム開発で採用されているのではないでしょうか。

私が携わったシステム開発は、ほとんどがMVCで開発を行っていました。

デザインパターン

デザインパターンとは、GoF の著書『オブジェクト指向における再利用のためのデザインパターン』で記した23種類のパターンをいいます。

オブジェクト指向の良いところは、再利用可能であるということです。

再利用できるため、システム開発の生産性は上がるはずなのです。

別の機会に書こうと思いますが、実際は、生産性が上がらないことも良くある話です。

MVCは以下の頭文字です。
  • Model(モデル)
  • View(ビュー)
  • Controller(コントローラ)

MVCは、良く使われるフレームワークで使用されており、MVCに分けて設計・製造することで、綺麗なソースコードとなります。

Model(モデル)

Modelは、データを扱うクラスです。

データベースを使っている場合は、テーブルごとにModelクラスを作成することが多いです。

フレームワークによって違うのですが、テーブルごとにModelクラスを作成することで、テーブルの外部キーを使用して、テーブルの連結を行うことができ便利です。

SQLを記載しデータを取得するのも、このModelクラスとなります。

View

Viewは、画面表示のクラスです。

Webシステムでは、ViewにHTMLなどが書かれます。

また、Webシステムでは、ViewはControllerから受け取ったデータをHTMLに取り込み、ブラウザへ渡します。

CSSやJavascriptは、Viewではなく別に管理されることが多いようです。

私の経験では、Viewは、動的な画面のHTMLに値を設定する処理を書いて、静的な画面のHTMLやCSS、Javascriptは、別のディレクトリで管理していました。

Controller

Controllerは、制御をするクラスです。

Webシステムの場合は、まずControllerクラスが呼び出されます。

ControllerからModelを呼び出し、画面表示に必要なデータをViewに渡す処理を行います。

フレームワークにもよりますが、Controllerから返すのは画面表示に必要なデータのみで、実際にViewでデータを埋め込むのは、フレームワークが処理することが多いです。

MVCパターンでビジネスロジックをどこに書くか

MVCのフレームワークを使用する時に良く起きる問題が、ビジネスロジックをどこに書くかです。

結論を言うと、私にも分かりません。

ビジネスロジックとは、実際の処理のことです。

例えば、ボタンを押して、データベースから値を取ってきて、加工して表示するとします。

  1. ボタンを押して、Controllerへ処理がきます。
  2. ControllerでModelを呼び出し、データベースからデータを取得します。
  3. データを加工します。
  4. Controllerがデータを返します。
上の処理だと、3の工程をControllerで行うかModelで行うかという問題です。

私の経験から言うと、半々くらいです。

ただし、ビジネスロジックが入るとソースコードが複雑になり、場合によってはソースコードが汚くなることがあります。

ビジネスロジックを書くクラスを作るプロジェクトもあるくらいです。

この問題は、プロジェクトに合わせて設計・製造するしかないと思います。

まとめ

フレームワークでは、良くMVCのデザインパターンが使われています。

そのため、これからプログラマーを目指すのでしたら、MVCを意識して勉強することで、実践で困ることも少ないのではないでしょうか。

では、今日はこの辺で。

2020年3月7日土曜日

プログラムの基本処理

こんにちは。

今日は、プログラムを学習するときに押さえておきたい点について書いていきます。

結論から言うと以下の処理を押さえておけば、プログラムを読むことはできるようになります。

  • 分岐(if文)
  • ループ(for文、while文)
  • 関数

プログラムの基本処理

プログラムは、全てが四則演算でできています。

入力された値を変数に入れて、足したり、引いたりと加工し、出力した値を作り上げます。

私は、いろいろなプログラム言語で開発した経験があるのですが、コーディングを開始する前に、まず確認するのが、分岐、ループ、関数の書き方、呼び出し方です。

分岐(if文)

まず必ずと言って良いほど必要なのが「分岐(if文)」です。

条件によって処理を分岐することは必ず発生します。

Javascriptだと以下のような書き方になります。

if (<条件>) {
// 処理
}


分岐を理解するだけでも、プログラムは読めるようになります。

ループ(for文、while文)

同じ処理を繰り返し行う場合は、ループで処理します。

同じ処理を何度も書かないということは、不具合を減らすためにとても大切なことです。

Javascriptでは以下のように書きます。
for (<初期値> ;<条件> ; <加算> ) {
// 条件が不一致となるまで実行する処理
}


ちょっとわかり辛いですかね。
具体的なソースコードを書いておきます。

var a = 0;
for ( var i = 1 ; i < 5 ; i++) {
a = a + i;
}
// a = 10


a の初期値は0です。
i の初期値は1で、5より小さい値の間、i を1づつ加えて処理します。
つまり、a の値は以下のように変化します。

a = 0;
a = 1;     // i = 1
a = 3;     // i = 2
a = 6;     // i = 3
a = 10;   // i = 4

i は 5 まで変わりますが、条件に不一致となるので、ループを抜けます。

ループには、while文という処理もあります。

while文は、条件判定は処理した後に行う時によく使用します。

つまり、一度はループ内の処理を行った後条件を判定する場合です。

Javascriptでは以下のようになります。


do {
// 処理が不一致の場合に実行する処理
} while (<条件>);


while文で気を付けないといけないのは、条件の部分です。

while文は、条件が一致した場合にループを抜けます

また、無限ループを作成し、処理内で分岐してループを抜ける場合もあります。


while(1) {
// 処理
if (<条件>) {
break;
}
}


ただ、このような書き方は、できるだけしない方がいいです。
できるだけ条件を入れて無限ループは作らないようにしましょう

関数

最後に必要となるのは、関数です。

ループ処理でも書きましたが、同じ処理は何度も書くと不具合の原因となります

同じ処理と何度も必要となる時は、関数にして呼び出すようにしましょう。

また、最近の書き方だと、1関数1処理で書くようにすると綺麗なソースコードになります。

Javascriptだと以下のような書き方になります。


function <関数名> (<引数>) {
// 処理
}


プログラミングの経験を積んだ方でも、処理を関数化せずにダラダラと書く方がいます。
そういうソースコードをスパゲティコードといいます。

処理が長くなって、少し修正するだけで不具合の原因となったりします。

まとめ

プログラムを読む際の基本となるのは、この3点です。
  • 分岐
  • ループ
  • 関数
そして、後は多くのソースコードを読んで、処理の書き方や、綺麗なソースコードの書き方を学んでください。ソースコードは人によって書き方が違います。読むだけでも結構勉強になったりしますよ。

では、今日はこの辺で。