こんちは!ちょらすかです!
今回は現役組み込みエンジニアの僕が初心者プログラマーの人へ
プログラマーの仕事内容の実際と実務上で必須となる知識についてお話をしていこうと思います。
この記事を見ている初心者プログラマーの皆さんはこれから業務としてプログラミングをして
給料をもらって生計を立てていくことと思いますが、僕が仕事としてのプログラミングをする上で
学校や趣味でやっていた状態では気づけなかった必要な知識について解説します!
プログラマーの仕事内容
まずはプログラマーの仕事内容について解説します。
僕は組み込みエンジニアでして、基本は下のような流れで設計をします。
(組み込みエンジニア= プログラミング+電気回路図 の知識を持っている人)
ベース情報収集
↓
要求から仕様へ落とし込み
↓
アーキテクチャ設計
↓
コーディング
↓
テスト設計
↓
テスト
↓
リリース
一つずつ解説します!
ベース情報収集
これはベースからの変更となる場合が前提でのお話となります。
多分、まっさらな状態からプログラミングするという状況はそうないと思います。
ベース情報がないと仕様を追加するときにどの部分に実装するのか分からなくなりますよね?
ですから最初はまずベース情報の収集して変更元のファイルを探し出す必要があります。
要求から仕様へ落とし込み
これは要するに『曖昧な言葉をロジックへ変換する』ということです。
例えば要求が
スイッチがOFFのときランプが光って スイッチONのときランプが光らないでほしい
であればロジックは下のようになると思います。
if ( スイッチ == ON )
{
ランプ = 点灯
}
else
{
ランプ = 消灯
}
このように要求→ロジックへ変換していきます。
ただ実は「今後ランプは微点灯という機能を追加するかも~」みたいな話があることもあるので
「今後のためにif文は使わずにswich文を使っておいたほうがよさそうだな・・・」と
拡張性も考えて設計する必要があったりします。
プログラマーあるある!
納品直前に「これできる?」と追加要求が飛んでくる。
アーキテクチャ設計
ここでは『検討したロジック/機能をどの関数やクラスへ持たせるか』を設計します。
ぱっと見ではプログラミングに関係なさそうですが、結構重要です。
ここでアーキテクチャ設計することで機能の割り当てが決まり
それによって関数名やクラス名が決まり、変数名が決まり・・・ と連鎖的に決まっていきます。
大抵はコーディングルールが設定されていて関数名、クラス名、変数名の決め方が
ルールになっているはずです。
ですからアーキテクチャ設計をしっかりしないとなかなか関数名とかが決められなくなるのです。
もし「そのプロジェクトが1人だけで今後も自分がバージョンアップしていくことが決まってる」
という超限定的な状況でなければアーキテクチャ設計が必要となります。
ここがしっかり設計されないと引継ぎされる人が
めちゃくちゃ大変な思いをすることになります。
(経験者は語る)
コーディング
コードを書いていきます。
初心者や未経験者の人は恐らくこの部分をプログラミングと認識されてるかと思います。
テスト設計
新しい機能を入れた、もしくは機能を変更したからには
設計通り動いているのかを確認する必要があります。
テスト設計は下のように大体3つの粒度に分かれます。
- 単体テスト:追加/修正関数が設計通り動いているかを確認する
- 結合テスト:追加/修正関数を呼んでいる関数を含めた動作を確認する
- システムテスト:システム(商材)として大きな機能が要求を満たす動きをしているか
確認する
テスト
テスト設計で検討したテスト項目に沿ってテストを実施します。
(ここは開発環境に依存しているので詳しく書くことが難しいです・・・。)
リリース
最終ステップです。
ここでは『これまでに設計した内容や実装したコード、テストの結果、作成した仕様書などを
新たなバージョンとしてカッチリ管理』します。
客先に納品する前の最後の防波堤となります。
ここをきっちりやらないとやばいです。
いわゆるリコール問題に発展したり、このプロジェクト情報をベースにした次期プロジェクトへ
不正な情報を提供することになりかねません。
大規模開発をしている会社だとリリースを専門に取り組む「リリーサー」と呼ばれる人が
いるくらいです。
意外と抜けている知識① グローバル検索機能
ここからは初心者プログラマーが意外と抜けていることが多い知識を紹介していきます。
一つ目は『グローバル検索機能』です。Grep機能ともいいます。
これは検索したいワードを指定したフォルダ内にある全てのソースファイルから検索してくれる機能
のことで、ほとんどのコードエディターで備わっている機能です。
大体は「Ctrl + G」とか「Shift + Ctrl + F」にショートカットが割り当たってます。
学校の授業や趣味では一つのソースファイルに全ての機能を実装するって感じだと思います。
しかし仕事ではプロジェクトの規模に関係なく機能毎にソースファイルを分けられています。
(こうなってない場合は設計をまともにやっていないヤバイ会社です・・・)
いちいちソースファイルを一つずつ開いて検索して、とやっていると
時間がいくらあっても足りません。
グローバル検索機能なら一発で全てのソースファイルから検索できます。
絶対に利用する機能ですので使えるようになる必要があります。
ちなみに画像で使っているエディターは僕が愛用している『gPad』です!無料で利用できます。
もはやこの機能がないと仕事が成り立たないレベルです。
意外と抜けている知識② ファイルのバージョン管理ソフト
初心者プログラマーが意外と抜けていることが多い知識の二つ目は
『ファイルのバージョン管理ソフト』の利用価値です。
代表的なソフトは「Git」、「Subversion」だと思います。
このソフトの利用はこの記事の中間あたりに書いたリリースに関連してます。
実はファイルのバージョン管理ができることで受けられる恩恵は大きいです。
例えば趣味で作っているアプリに機能を追加しようしてコードを書いてみたものの
うまく動かなくてコードを戻しても戻し切れてなくて前と同じ状態に戻せなくなった、
みたいな経験ありませんか?
これは「Git」や「Subversion」でバージョン管理することで解決できます。
元のバージョンに戻す機能があるのでワンクリックで元のコードに戻せるようになります。
またこれまで登録してきたバージョンでどんな変更をしてきたか差分も簡単に確認できる
ようになります。
業務でプロジェクトファイルを管理するためにもはや必須のツールなので
使い方を覚えておく必要はあります。
詳しい使い方はググるとありがたい解説がたくさん出てくるかと思いますので
ここでは必ず利用する機能を紹介します。
下に書いてある機能だけは自分のパソコンでしっかりと使用できるよう練習しておいてください。
- 登録ファイルのチェックアウト機能 ⇒ プロジェクトのベース情報をロードする
- コミット機能(ファイル登録) ⇒ 情報を登録する
- マージ機能(登録ファイルの競合時) ⇒ 複数の人がコミットして発生した競合を
解決する
まとめ
この記事では
- プログラマーの仕事内容の流れ
- 初心者向けのプログラマー必須の知識
についてまとめてみました。
コメント