こんにちは!
セカンドセレクションのUmeharaです。
今回はパソコンの使い方も大してわからず、プログラミング未経験でIT会社に入社した僕が感じた「ソフトウェア開発とプログラミングの違い」を書いていきます。開発業務においてプログラミングができることは必要な事ですが、決して十分ではありません。システム開発にはそれ以上に必要な事があると感じました。
IT系に興味はあるけどいまいち理解ができていない方に「システム開発におけるプログラミングの位置」を理解してもらえると嬉しいです。
システム開発とは
まずはシステム開発としてソフトウェアを納品する流れを確認しましょう。
システム開発は大きく分けると「設計」「実装」「試験」が存在します。
難しい言葉が出てきたので、木造住宅の建設で考えてみます。
もし家を建てる際、大工さんはいきなり、さあ柱の木を切ろう!とはなりませんよね?
何かを開発する際にはまず設計図を作成する必要があります。
その設計で家のデザイン、壁の厚さ、部屋の広さ、水まわり、電気の導線をすべて考え、建築家と現場監督のOKが出てから建設を始めます。
そして次は実際に家を建てていきます。
ここでやっと大工さんが柱の木を切って、くぎを打ち、壁紙を貼って、お風呂を作り、コンセントをつけ、「家」を作っていきます。
(最近では工場で作られた木を組み立てるだけでしょうか?)
その後、お客様の要望はすべて満たせているか?
実際に作った家の高さは違法じゃないか?
他に何か改善点はないか?を確認していきます。
私事ですが、今年実家の建て替えを行いまして、完成した!と思ったらまさかの仏壇2㎝の差で指定の場所に入らず、再度その部分だけ木を切って修正してもらいました。しっかり設計できてなかったんですかね…
家の話はさておき、開発業務におけるプログラミングはどこに当たるのかと言えば、先ほどの例で2番目の作業に当たります。
ズバリ、プログラミングが開発業務の占める割合としては20%くらいでしょう。
つまりプログラミングができる=ソフトウェア開発ができる!とはなりません。
開発業務で重要なことは「お客様のニーズを正確に読み取り、それを設計する部分」になります。
システムエンジニアとプログラマーの違い
ソフトウェア開発においてシステムエンジニアの仕事は以下になります。
- 要件定義
- ソフトウェアの外部設計と内部設計
- 実装(プログラミング)
- 単体テスト、結合テスト、システムテスト、運用テスト
- リリースとメンテナンス
ざっくりいうと、お客様が求めているものを書き出して、どうすればソフトウェアで実現できるか設計書を書いて、プログラミングして、しっかり動くかテストを行い、世に出した後も責任を持つという感じでしょうか。
僕(プログラマー)の仕事はシステムエンジニアの「実装」部分を一生懸命プログラミングしていくのが仕事です。大工さんで言うときれいに木を切って、くぎを打つことでしょうか?
最近では木の種類が多く、素材の使い方もたくさんあるので勉強が非常に大変です。
またお客様の要件をもれなく満たせているか、テストを行うこともあります。どうしても一人の人間が確認すると抜け漏れが出てしまうので、全員で協力しソフトウェアを作り上げていきます。
ソフトウェア開発の言語
ここまで聞いてプログラミングとソフトウェア開発の違いは分かっていただけたと思うので、ここからは具体的にソフトウェア開発の言語を解説していきます。
ソフトウェアといってもアプリ開発、ウェブサイト、AIやIoTといったように日々知識が移り変わっています。
今回は弊社が得意としている「制御系」と「WEB系」について2つの観点から紹介していきます。
ソフトウェアと聞いて、まず皆さんが思い浮かべるのは「Webサイト」ではないでしょうか。
WEB系はクライアント(上記の図では画面3つ)・サーバーに分類され、それぞれ別の言語でプログラミングされます。
- 自分のブラウザ側ではHTML、CSS、JavaScriptという言語
- 相手のサーバー側ではPHPという言語
僕からしたら「なんで2つに分けてややこしいことするんだ!」と最初はWEB系の仕組みが全然理解できず、クライアントサーバーについて先輩方に熱心に指導してもらいました。
プログラミングスクールではHTMLやCSSを学ぶことも多いようですね。
「制御系」というのはエアコンやテレビ、車、スマートフォン、ロボットなど、日常生活に関わる電気製品に使用する言語だと思ってください。最近ではIoT(Internet of Things)でも注目を浴びています。
制御プログラムの記述には主にCやJAVAといった言語を使用します。高速処理にはアセンブリ言語を使用する事もあります。IoT化が進む現代、最先端の製品開発に関われるのが制御系エンジニアのやりがいです。
僕は入社してから社長直々にC言語の研修をつけていただき、構造体やポインターの理解に苦しみました。正直なところ、処理をまとめる構造化や変数の参照についてはまだまだ勉強中です。
プログラミング独学勉強法
プログラミングは手を動かさなくてはできるようになりません。
ピアニストや野球選手、大工さんと同じです。見ているだけでうまくなるものではないです。
とはいえどこから手を付ければいいのかわからないからおそらくこの記事にたどり着いたんですよね。ただやみくもに木を切ったとしても技術は上達はしないので、ある程度は先輩方の真似をする必要があります。
今日ではYoutubeやドットインストールといった動画で学ぶ機会はたくさんあるので、ある程度基礎力がつくまでは真似をしてプログラムを作ってみましょう。
ドットインストール:https://dotinstall.com/
おすすめ参考書紹介
僕が実際に研修中にC言語の勉強に使ってきたおすすめの参考書を紹介しておきます。
① (株)アンクの「○○の絵本シリーズ」
プログラミングが全くわからない場合にはこのシリーズで概要をつかむのが良いと思います。
僕は頭が悪いので、この本に非常に助けられました。
② 明解C言語 入門編
絵本を読んだ後は、入門書系の参考書を1冊読破しましょう。
絵本と見返しながら「1冊やりきること」が重要です。
山積み参考書マニアになることは控えましょう。
③ リーダブルコード
変数・関数・ポインターなどの概念は理解できた方は、「エンジニアの暗黙知」も勉強しましょう。
「コードが書ける」のではなく「美しいコードが書ける」ように励みましょう。
僕も頑張ります!
美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているかが伝わってくる。そういうコードは使うのが楽しいし、自分のコードもそうあるべきだと思わせてくれる。本書の目的は、君のコードを良くすることだ。(はじめに)
まとめ
今回は「プログラミング初心者がソフトウェア開発について知っておくべきポイント」を紹介しました。
僕もまだまだですが、いい設計ができるシステムエンジニアになるため日々勉強中です。とはいえプログラミング自体も非常に楽しいものです!皆さんも是非チャレンジしてみてくださいね。
未経験にして非接触体温計を作ってみた!が非常に人気の記事です。お時間がある方は是非読んでみてください✨
https://blog.secondselection.com/blog/non-contact-thermometer/
初心者の方はNode-redやブロックプログラミングから入ってみても良いかもしれません。