みなさんよーーーいしょ!
本日はお日柄もよく、ブログ書き日和ですね。
とはいっても、「ブログ書くぞ――!」と肩ひじ張ってしまうと、
なんか取り掛かるのしんどいんで、
「ブログ書いてみてもええんちゃうー?」みたいなラフな感じでブログを今書き始めています。
取り掛かったら作業興奮でどんどん書けちゃうんで、取り掛かりのハードルを低くしていきたいですねー。
15分だけ書く。とかね♫
「プログラマって仕事何してまんのん?」という話
さて、
今回は、「プログラマって仕事何してまんのん?」という話をします。
プログラマってなんか人材不足とか言ったりして、
プログラミング教育とか流行ってきているけども、
実際の仕事として何してるかイメージ沸きづらいですよね。
パソコンカタカタしてるだけ?
人とは話さない?
みんなメガネかけてるだけ?
そのような様々な憶測があると思います。
私自身もそんな憶測をしていました。
私自身のプログラマになる前の妄想イメージ
私自身がプログラマになる前に抱いていたイメージはこんな感じ。
・ずっとPCの前でポテチ食いながらハッキングとかしてそー
・意味なくフード被って顔見えないようにしてそー
・隣にいるのにチャットでしゃべってそー
・2ちゃんとか好きそーーーー
・webサービスとか作っててかっけーーー
・IT業界とかざっくりわからんけどすごそーーー
という感じの妄想イメージしていました笑
当時は周りにプログラマさんがいなかったので、
想像の種が映画とかしかないからこんなイメージでしたね笑
もっとちゃんとプログラマさんの仕事内容を前もって把握しておけばよかったなー、
と今となっては思います。
なので、今回は読者の方が、そんなお茶目な妄想イメージをしないように
現役プログラマの私がプログラマの仕事内容をちゃんとお伝え出来ればと思います。
この記事はこんな人におすすめ
・プログラマに変な妄想イメージがある人
・プログラマに興味がある人
・実際にプログラマがどんな仕事をしているのか知りたい人
・既にプログラマだけど、他の人がどんな仕事内容なのか知りたい人
などなど
この記事の目的
私自身、プログラマになる前に、
プログラマの仕事内容を知りたかったなーということもあり、
この記事を書きました。
プログラマの種類
プログラマーにも種類がありまして、主に以下の6つの種類があります。
- WEBプログラマ
→WEBサービスやホームページをつくるるプログラマ
- スマホアプリプログラマ
→iphoneやandroidなどスマホのアプリをつくするプログラマ
- ゲームプログラマ
→テレビゲームやスマホゲームを開発するプログラマ
- 業務系プログラマ
→在庫管理システムや経理システムなど業務に携わるシステムを扱うプログラマ
- 組み込み系プログラマ
→洗濯機や炊飯器といった家電製品など電子機器を扱い、組み込むプログラマ
- 汎用系プログラマ
→生命保険のデータベースの構築など汎用機で動くシステムを開発するプログラマ
以上のように、様々なプログラマの種類がありますが、
どの種類のプログラマでも、先ほどの6つのフェーズを通ります。
プログラマの仕事内容6つのフェーズ
まず前提として、
「今どのフェーズにいるか?」
で今日やる仕事内容は変わります。
フェーズの流れとしては以下の通りです。
要件定義から、リリースまでの作業内容を書くと、
- 要件定義:何作る〜?
- 基本設計:どうやって作る〜?(ざっくり)
- 詳細設計:どうやって作る〜?(しっかり)
- 実装:ソースコードで作るね〜
- テスト:ちゃんと動いてるかな〜?
- リリース:作ったもの公開するね〜
という流れです。
この1~6を順番に回して運用していくのが
プログラマの仕事です。
開発手法の種類
ソフトウェア開発の現場では、様々な開発手法があります。
開発手法とは、
「ソフトウェアをうまく作るための方法」のことです。
ここでは、有名な2つの方法だけご紹介します。
- ウォーターフォール開発
ウォーターフォール開発とは、
「全部終わったら次のフェーズにいくよー」という開発手法です。ソフトウェア全体の設計が終わり次第、
次のフェーズである実装に取り掛かります。この開発手法の
メリットは、
・進捗管理が楽
・初心者でもできる簡単な開発手法(学習コストなし)
・要件がしっかり固まっていれば、開発スピードが速いデメリットは、
・仕様変更に弱い
・リリース期限がズラしずらい
・設計の遅れは、実装やテストで取り戻さなければならない
など、一長一短あります。ただ、社会の変化が著しい今の時代に、
変化に弱いこの手法で開発するかどうかは考え物です。 - アジャイル開発
アジャイル開発とは、ウォーターフォール開発のデメリットを
補うために考えられた概念です。2001年にアメリカの有識者たちが、
「アジャイルソフトウェア開発宣言」を行いました。
内容としては以下です。
プロセスやツールよりも個人と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を、
価値とする。すなわち、左記のことがらに価値があることを
認めながらも、私たちは右記のことがらにより価値をおく。
まとめると、
「会話・デモ・協調・柔軟性」を優先する開発手法です。
私、あきらお兄さんも現在アジャイル開発現場で働いておりますが、
ウォーターフォール開発に比べ、
かなり会話が多く、仕様変更にも柔軟に対応しやすいなーと実感しております。
メリットとしては、
・変更に柔軟
・開発者としてのやりがい感じやすい
・作業範囲が広いのでかなり成長する
デメリットは、
・スクラムイベントもあるため、
工数が大きくなりがち(発注者からすると金額高い)
・大規模開発には向いていない
・難易度が高い(学習コスト高い)
というように、こちらも一長一短あります。
ただ、開発者としてはアジャイル開発に身を置いた方が
成長が速いので、私はアジャイルの方が好きですね笑
プログラマの仕事例(1日スケジュール)
それでは、プログラマはどんな1日を過ごしているのか、
例を3つほど上げたいと思います。(あくまで例です。)
1日のタイムスケジュール例1
(ウォーターフォール開発 & 詳細設計フェーズ)
9:00~9:15 | 朝会 |
---|---|
9:30~10:00 | 部品別共有会 →直近で発見した要件定義&基本設計の不具合や注意点の共有する |
10:00~12:00 | 詳細設計作成 |
12:00~13:00 | 昼休み |
13:00~14:00 | 顧客打ち合わせ |
14:00~14:30 | 詳細設計レビュー指摘 |
14:30~15:00 | 詳細設計レビュー指摘反映 |
15:00~18:00 | 詳細設計作成の繰り返し |
この現場では、ウォーターフォール開発手法で、
詳細設計フェーズは、ずうううううっと詳細設計を作りまくります。
朝会で今日やるTODO、今週の見通しを決めて、
決まった量を都度こなしていくルーティンですね。
大規模開発だと、設計、実装、テスト、
その期間は設計なら設計のみ、実装なら実装のみを何か月かずっと続けていく流れですね。
1日のタイムスケジュール例2
(アジャイル開発 & 要件定義フェーズ)
9:00~9:15 | デイリースクラム(朝会) |
---|---|
9:30~11:00 | 顧客訪問&要件ヒアリング →お客さんに「何作りますー?」を聞いて、 ユーザーストーリー洗い出し |
11:00~12:00 | ペルソナ、MVP作成 |
12:00~13:00 | 昼休み |
13:00~15:00 | バックログ作成&ポイント見積&スプリント計画 |
15:00~17:00 | ふりかえり |
17:00~18:00 | ペーパープロトタイプ作成 |
こちらはアジャイル開発現場の、案件出来立てホヤホヤの1日の例です。
まずは、契約取れましたーおめでとう!て感じで一日始まります!
そして、「朝会」のことを「デイリースクラム」といいますwかっけーw
で、さっそくお客さんの所へ訪問orビデオ電話で作りたいものをブラッシュアップ。
ユーザーストーリーとは、
「役割」として 「機能や性能」が出来る、それは「ビジネス価値」のためだ。
のような書き方をするもので、ターゲットと機能と価値を書き表したものです。
顧客ユーザーと価値を結びつけるような物語みたいなものですかね。
まずこれを洗い出したり、ペルソナ、MVPを作成します。
午後は事務所に戻り、
今スプリントやることを決めたり、前のスプリントをふりかえったりします。
そして、必要最低限のプロトタイプを紙芝居形式で作成して
メンバー同士のイメージ共有や機能改善に役立てます。
てな感じで、アジャイル開発現場の最初はこんな感じです。
次は、アジャイル開発現場の中盤のスケジュールを見てみましょう。
1日のタイムスケジュール例3
(アジャイル開発 & 設計、開発、リリースのフェーズ)
9:00~9:15 | デイリースクラム(朝会) |
---|---|
9:15~9:30 | 昨日のチーム全体進捗共有 |
9:30~12:00 | 機能設計(基本&詳細設計)←午前中だけで設計終わらないとやばいw |
12:00~13:00 | 昼休み |
13:00~14:00 | 各チームのメンバーがLTやる |
14:00~17:00 | 実装&テスト(ペアプログラミング) |
17:00~18:00 | スプリントPOレビュー |
こんな感じで、1日の中で、設計→実装→テストがよくあります。
もちろん、機能はウォーターフォール開発の大規模開発のように
大きくはありませんが、なかなか大変です。
まだ存在していないものを、その日の終わりにデモできるように動かすところまで
持っていかなければならないときもあるので、頭に汗をかきます笑
しかし、やりがいも大きいです。
チームメンバーと密にコミュニケーションを取りながら役割分担を明確にし、
一人の開発者が行う裁量も大きいですし、
毎日バックログ完了することによる達成感がたまらんです。
また、メンバー同士のLT(ライトニングトークという軽いプレゼン退会みたいなもの)も
自分の知らない新技術情報収集として好奇心をくすぐられ、これまたやる気が上がったりします。
そして、最後にPO(プロダクトオーナー)から
完了の承認を毎回頂けるので、これまたやりがいありますね。
(もちろん、急にPOからの仕様変更はありますが、、、苦笑)
こんな感じで、変化に柔軟に対応していきながら、
日々ソフトウェアの機能を積み重ねていきます。
以上のように、
プログラマの仕事の1日は様々なことが起こります。
(アジャイル開発現場だと特にね。)
嫌なことや嬉しいことが起こります。
多分、8割はしんどいことが起こります。笑
で、私自身「プログラマってすげえな」と思います。
何もないところから、頭で考えたものを、作り上げるんですもの。
無から有を生み出す感じ、こりゃすごいと思います。
かっけーーなと。
また、
周りにいるほとんどのプログラマがそうなんですが、
予算削減、度重なる仕様変更など
様々な嫌なことがあっても、
「なんとか、いいものをつくろう」
と、
チームメンバーみんなで四苦八苦しながらも
毎日そのゴール向かっていく感じ。
これまた、かっけーーなと、思いますね。
私自身、
そんなかっけープログラマの一員になれたことを誇りに思います。
いろいろしんどいこともあったけど、
プログラマになれてよかったなと今思います。
おかげさまで、
今仕事が大好きです。
まあそんな感じで、
プログラマの一日を読者の方にお伝えしたいな、
と思って、この記事を書きました。
「プログラマって仕事何してまんのん?」の
イメージ沸いたら幸いです。
読んで頂きありがとうございました。
・プログラミング教える3児のパパ
・現役エンジニア(7年くらい)
・エンジニア育成の企業研修講師リピート多数
・焼肉とJavascriptとお酒とアジャイルが大好物
…etc
【SNS】
・twitter
日々、情報収集しているサイトをシェアしたり、僕の考えを軽くつぶやいてます。
ID: @akira_papa_IT
・Facebookページ
自分に関連する重要な出来事(ITや生活など)を書いたり、Youtubeやブログの告知を投稿しています。
ページ名: @あきらパパ【プログラミング教えるパパ】
・Line@
プログラマならではの悩みや相談を受けたり、プログラミングの知識をシェアしています。
公式アカウント名: @あきらパパのIT時短学習部屋
・tiktok
tiktok試しにプログラミング系の話をめちゃ短く軽く喋ってます。
ユーザー名: @akira_papa_it
ぜひフォローお願いしますー♫