こんにちは!はじめまして!!
私は、モバイルアプリ開発から、AWSを中心としたサーバサイドの開発まで幅広く経験している現役エンジニアです。エンジニア歴を計算してみると2007年から17年目のエンジニアをしており、エンジニアの楽しさも大変さも身をもって経験しています。
現役エンジニアの私が、今までのエンジニア人生でのOJTの経験や新卒教育に関わらせていただいた経験から、
「エンジニアとして成功している人ってどんなスキルや経験を積んだ人なの?」
をお伝えしたいと思います。
この記事を読んでいる人は、未経験者の人が多いと思いますので、
- エンジニアってプログラミングができればなれるんじゃないの?
- プログラミングを勉強してみたけど本当にシステム開発ができるか不安。
- エンジニアって決められた仕様でプログラミングするだけなのになんで忙しそうなの?
というようなことを疑問に思っている人がほとんどかと思います。
この質問の答えを先にいうと、プログラミングができることやシステムの技術的な要素を知っている・扱えることはエンジニアに必要な1要素にしか過ぎません。
時にはプログラミングスキルよりも、いろんな人と正しくコミュニケーションをとることがプログラミングスキルよりも大事だったりします。
なぜなら、システム開発は1人ではなく複数人で構成されたチームで開発することが多いからです。
開発チームも複数チーム(フロントエンドやバックエンドなど)で開発することは多いですし、開発チームだけでなく、デザイナーチームや統括するプロジェクトマネージャー、顧客、システムを使って運用をするチームなど、開発チーム以外のチームや人とも関わっていく必要があります。
この全ての人と正しくコミュニケーションが取れないと、正しく動かない(顧客にとっては意味のない)システム開発に時間を費やす結果となり、プログラミングやシステム設計に使っていた時間が無駄(手戻り)になってしまいます。
それでは、プログラミングよりも大事かもしれないエンジニアに必要なチーム開発のためのコミュニケーションスキルやツール、そのスキルの磨き方を「チーム開発とはなにか?」を説明しながら解説していきます!
本記事でわかること
チーム開発を学べるプログラミングスクール【3選】
ポテパンキャンプ | ディープロ | DMM WEBCAMP エンジニア転職 | Rubyを現場で通用するレベルになるまで学習できる。自社開発・自社サービス企業への転職支援も手厚い! | 本気であれば年齢・性別など関係なく学習可能。転職・就職やフリーランス・独立などの実績も豊富なスクール! | 未経験でも3ヶ月でエンジニアを目指す、転職保証付きスクールです。転職できなければ全額返金も! |
---|---|---|
国の給付金制度を利用可能 | 国の給付金制度を利用可能 | 国の給付金制度を利用可能 |
転職支援あり | 転職支援あり | 転職保証付き |
→ 無料カンセリング | → 無料個別相談 | → 無料カンセリング |
目次
チーム開発とは
一つのシステムや同じ機能の開発に複数人で取り組むことをチーム開発といいます。
通常、ユーザ操作をするためのスマホアプリやWebアプリのフロントエンドの開発、ユーザが操作したデータの受け渡しをサーバ側で効率的に行うためのバックエンドの開発、AWSやAzureなどのインフラ開発など、それぞれの専門チームごとにチームが結成されそれぞれで開発を行います。
もちろん、小規模なシステムの場合、フロントエンドからバックエンド、インフラ構築までフルスタックエンジニアとして1人で行う場合もありますが、1人で行った場合、病気などの場合に対応できなくなるなどのリスクもありますので、フルスタックエンジニアが1人で開発するようなシステム開発の現場は少ないです。
特に未経験者が関わるシステム開発は、先輩エンジニアのいる複数人のチームで同じ機能を開発することが多いと思います。
この章ではチーム開発で必要なスキルと、チーム開発を進める上での難しさやポイントを説明します。
チーム開発に必要なスキル・ツール
スケジュール管理能力
チーム内の一人一人ががそれぞれ別々に開発したものは、チームのアウトプットとしてひとまとめにします。そのため、チームで決められたスケジュールを一人一人が守って作業する必要があります。
また、チーム開発を進めていると、例え一人一人が期限を守って作業をしていても、計画時に取りこぼしていた作業などが発生します。そのため、計画時に決められたタスクを進めるだけではシステムとして成り立たないことが多く、チームの中のスケジュールの進捗状況を把握して進捗状況が悪い人をサポートしたり、進捗状況のいい人は割当たっていないタスクを進めてもらったりと、リーダー的な役回りをする人が必要になってきます。
スケジュールは、WBS(Work Breakdown Structure)やガントチャートという情報にまとめられ、チーム全体の状況が全員がわかるように可視化して管理することが多いです。
認識齟齬に気づき是正できる能力
チーム開発中は、会話の中の文脈によって同じ言葉でも違う意味に取られる事態が度々発生します。
そのため、面倒でも時々「このドキュメントのこの図のこの部分の話をしている」と、お互いの話している対象が同じかの確認をおこなうことで、この認識齟齬を解消することができます。
特に、他のチームと話をする時はこの点に注意して、一つ一つのことを確認をする必要があります。なぜならば、開発している対象が違うため同じ言葉でも違う対象のことを話していることがあるからです。
例えば、「データ」と一言に言っても、サーバ側にあるDBにある「データ」なのか、スマホアプリが内部的に保持している「データ」なのか分かりません。そのため、サーバーの開発をしている人とスマホアプリを開発している人での打ち合わせでは、話が噛み合っているように見えても実際はそれぞれ違うことを言っている場合があります。
チーム内外の認識齟齬を解消させるための補助的なツールとして、下記のようなツールを使ってタスク管理やアウトプットの管理をして開発することが多いです。
- 構成管理ツール(GitHubやGitLabなど)
→ドキュメントやソースコードをバージョンで管理する - チケット管理やかんばん管理ツール(Jira, Redmineなど)
→それぞれの人が進めているタスクをチケット単位で管理する
開発環境の統一
チームで開発する場合、後ほど1つのシステムとして動かす必要があるため、同じ言語や同じ言語のバージョンを揃えるなど、開発する環境をチーム内で統一する必要があります。
チーム内で開発環境を統一していないと、1つのシステムにまとめた時に、一部が動かないなどの不具合が後々生じてしまうためです。
開発環境の一番簡単な統一の仕方は、Readme(リードミー)などの開発環境を作るためのドキュメントを用意して、同じ操作で開発者それぞれのPC上で動く開発環境を構築することです。
また、構成管理ツール(GitHubなど)を使って、それぞれが開発したコードを一緒にするツールを導入してベースのソースコードを一緒にして開発することもします。
最近では、Dockerでの開発環境の統一や、クラウド上で動作するIDE(統合開発環境)を用意し、ローカルPC環境の差異をなくすやり方をとっている現場も多いです。
チーム開発の難しさ
スケジュール管理能力など、ツールを使ってチーム開発を進めているのに開発の成功率は約30%といわれています。
様々な要因はありますが、チームの規模が大きくなることで「統制をとってチーム内外のコミュニケーションが難しくなる」ことも、要因のひとつとして挙げられます。
昨今では、リモート環境での開発チームも多く、コミュニケーションが食い違ったまま気づかないまま開発が進み、開発したものを結合してテストとした時に齟齬に気づくようなケースもあるのではないでしょうか。その時は納品まで日にちがない状態…。
「あれ?ちょっと話が噛み合っていないかも」
と思った時に、めんどくさいけども少しでも確認するような声がけをすることで齟齬に早く気づくこともあるかもしれません。
また、チームで開発するためのルールを決めて正しく運用していても、うまくチームで開発が進まないこともあります。
こういう場合は、チームメンバーの関係性に目を向けてみてもいいかもしれません。
ヒントとして「Team Geek
「Humility(謙虚)」
「Respect(尊敬)」
「Trust(信頼)」
この頭文字をとってHRTとよばれます。
自分が関わっている開発チームや、関わる他のチームの間でHRTを軸とした行動やコミュニケーションが取れていれば、きっと良いチームで、次々生じる問題や課題にも立ち向かえるチームづくりができていると思います。
私も長年エンジニアとして現場で開発していますが、相手への尊敬や自分への謙虚さを見失ったことにより、チーム内外の信頼関係が崩れていく経験をしたことがあります。
思った成果が出せないな、というときはこのHRTを思い出し、
「自分が見落としている何かがあるかもしれない(謙虚さ)」
「相手は自分が気づかないことに気づいてくれる(尊敬)」
「あのチームが約束したことは守ってくれる。こちらも守らないと(信頼)」
と忙しさにかまけて、ほんの少しのスケジュール遅れを許容したり約束の反故をしそうになったりすることを、”いかんいかん”と襟を正して活動することも多いです。
私自身、HRTのマインドセットを知ってマインドセットに即した行動指針に変えたところ、自分だけが大変で忙しい、損していると感じることが少なくなりました。
むしろ、めんどくさいと思っていたレビュー指摘対応も、他の人が気づいてくれたから不具合が減った、という風に、チームで開発しているメリットとして捉えられるようになりましたので、おすすめです。
OJTをした経験から
余談として、OJTの教える側の経験や他の人のOJTの経験からみたチーム開発について話したいと思います。
いずれの方も、最初はチーム開発に必要なコミュニケーションの取り方がわからないまま進めていたため、開発が思ったように進まなかったり、孤立していたりとチームに貢献できていなかったのですが、「必要なスキルや自分のやれる事をした」結果、チームに良い成果・結果をあたえることができました。
文系大学卒のAさん(23歳)の場合
開発現場のOJTにはよくあるのですが、プログラミングの経験やシステムの理解が少ない新人は、テストから開発経験をスタートする場合があります。自分が担当する現場で開発しているシステムの設計書・仕様書を読み、システムのテスト項目を作ったり、テストを実施していきます。
文系大学卒のAさんは、会社の新人カリキュラムを一通りこなした後、はじめての配属先が決まりました。しかし、その時丁度よい開発(コーディング)のタスクがなく、文系出身でプログラミングのスキルも他の新人よりも経験がなく低かったため、納品の近いシステムのテストの実施担当にアサインされました。
私は、AさんのOJTの教育担当ではなかったので、教育プランの概要程度しか把握していなかったのですが、たまたまAさんとランチをした時に話をしたところ、
「テスト仕様書に書いてあることがなんで必要なのかわからない。決まったことをしているだけでつまらない。もっとプログラミングスキルを磨いてシステム開発に携わりたい」
という相談を受けます。
やっていることを聞くと、納期も近いためテストを進めるためのこと以外はあまり教えられておらず、Aさん本人からも他の資料にアクセスしようとはしていませんでした。
そのため、テスト仕様書やテストする対象のバイナリファイル以外の情報がないまま、納期に追われてシステムを深く理解しないままテストを進めている事がわかりました。
たまたま、私も一時期開発を手伝っていたシステムだったため、資料の場所やGitHubのリポジトリを知っていたこともあり、GitHubの使い方、バイナリファイルの元のソースコード、テスト仕様書を作ルためのインプット資料のシーケンス図などを、さっと伝えました。
私が教えた情報により、テスト仕様書の背景には「Aさんが学びたかったシステム開発の理解や、プログラミングスキルを向上させる情報がいくつもある」ことに、Aさん本人が気づきました。
それまでは、業務のほとんどを「テストを消化するだけの時間」に費やしていたAさんですが、この事をきっかけにテスト項目やシステムの構成に疑問をもち、そのドキュメントを書いた先輩エンジニアに質問をしに行くことで疑問を解消し、テストしているシステムの中身についても徐々に詳しくなっていきました。
Aさんはシステムに詳しくなったことで、テスト仕様書から抜けているテスト項目にも気づいたりと、チームに貢献できるようになりました。
専門学校卒のOさん(20歳)の場合
私とひと回り以上も年齢の離れたOさんのOJTをした時の話です。
Oさんは新卒研修を終えた後、適当に参画できるプロジェクトがありませんでした。加えて、専門学校の卒業研究でAndroidアプリの開発の経験をしたものの、公式ドキュメントの読解能力や仕様書の読解能力が低く感じられたため、プロジェクトにはつかずに擬似プロジェクトの課題を与えてOJTをしていました。
最初は、ちょっとしたプログラムの課題を与えても調べ方が悪く、明後日の方向に課題解決をすることが多かったのですが、基本情報技術者試験レベルの単語を覚えるようにしてもらい、GitHubの使い方を教え、公式ドキュメントの読み方や調べ方を教えたところ、徐々に公式のドキュメントやGitHubに公開されているソースコードを読めるようになりました。
エンジニアとしての基礎的な知識や調べ方を身につけたことによって、
- その人が知っている情報は何か?
→どういう情報を伝えれば、伝えたいことが伝わるのかが分かるようになった - その人にどういう情報を聞けば、自力で調べることができるのか?
→その人が知っていることと自分が知らないことの差が分かり、必要な情報の聞き出し方ができるようになった
を捉え、OJTの私やその他の先輩エンジニアに相談・質問することで、最初は解決できなかった課題も進める方向を見失うことがなく正しく解決できるようになりました。
このレベルになってから通常のチーム開発に参加したので、新人エンジニアにありがちな「間違ったまま進める」「GitHubに適切なコメントを入れずにコミットする」などのミスも少なく、周囲からもOさんの同期の新人より高い評価を聞くことができました。
このように、チーム開発では、プログラミングのスキルだけでなくコミュニケーションを正しく取るための用語やツールの使い方も重要になってきます。
Oさんのエンジニアとしての基礎力を養うためにOJTとして指導したことをまとめると、以下の通りです。
- コミュニケーションを正しく取るための標準的な言葉を知ること(基本情報技術者試験やITパスポートレベルの用語)
- GitHubを利用したり、公式ドキュメントの読み方や調べ方を知ること。このことによりオープンソースのコミット履歴をみることで一般的な作法(コミュニケーションミスを起こしにくい所作)を学無ことができた
まとめ
エンジニアには、プログラミングスキルやシステムに対する知識以外にも、チームで開発を進めるためのコミュニケーションスキルや、ツールの操作方法も必要になります。
今回の記事で必要な情報をまとめます。
<必要な能力・ルール>
- スケジュール管理能力
- 認識齟齬を是正する能力
<利用するツール>
- 構成管理ツール(GitHubなど)
- チケット管理/かんばん管理ツール(Jira、Redmineなど)
- Docker、IDEなど(開発環境の統一)
<必要なマインドセット>
- Humility(謙虚)
- Respect(尊敬)
- Trust(信頼)
特に、HRTのエンジニアのマインドセットが身につくと、チーム開発が楽しくなりますので、早いうちに見つけることをおすすめします。
さて、これらを身につけるためには、どうしたらいいのでしょうか?
OJTの事例のように「実際の開発現場で身につける」という方法もありますが、効率よく学べるかは「配属先のOJTの担当者や現場の状況によりけり」というのが実情といえます。※実際、エンジニア志望の若手のうち教育が不十分で3割しか残らない会社も多くあります
また、チーム開発のスキルやプログラミングスキルなどに対して自信が持てていない状態だと、先輩エンジニアと話すことに対して億してしまい、良い関係性が作りにくい場合があります。
未経験の方であれば、チーム開発のスキルも一緒に学べるプログラミングスクールの受講がおすすめです。チーム開発は独学や自力では身につきにくい経験・スキルになりますので、ぜひご検討いただければと思います。
もう一度「チーム開発とは?難しさや大事なことなどを徹底解説【初心者必見】」を読む ↑
チーム開発が学べるプログラミングスクールおすすめ5選【比較・ランキング】!
ここでは、カリキュラムの中でチーム開発を経験できるプログラミングスクールを、ランキング形式で紹介します。
いずれも実際の現場を想定した実践的なチーム開発ができるので、未経験からエンジニア転職を最速で実現したい方には特におすすめです。
少しでも気になったら、まずは気軽に無料カウンセリング/説明会に参加してみましょう!
1位:ポテパンキャンプ
- 実践的な課題とレビューで現場で通用するスキルがつく
- オンラインでも挫折せずにやりきれるサポート体制
- Webエンジニア輩出No1のカリキュラムで転職を確実に
ポテパンキャンプでは、実際の現場を想定して、入社から開発を行うまでの『模擬開発』をおこなっています。開発環境の構築やコードリーディング、Gitを用いた『チーム開発』やRspecを使用してのテストまで、網羅的に経験することが可能です。
この模擬開発を『2ヶ月間』かけておこなうことで高い自走力を身につけ、就職・転職の内定率アップを実現しています。
Webエンジニア輩出No1!実践的カリキュラムで転職を確実に
ポテパンキャンプ
Rubyを現場で通用するレベルになるまで学習できる。自社開発・自社サービス企業への転職支援も手厚い!
2位:ディープロ(旧:DIVE INTO CODE)|4か月短期集中コース
- 「本気」なら経験や年齢関係なし!40代未経験での転職実績あり!
- 即戦力エンジニアなるための実践的なスキルを習得!
- 国の給付金制度を利用してキャッシュバックを受けられる
※最大45万円!
ディープロでは、同期の受講生同士による『チーム開発』がおこなわれます。オリジナルアプリケーションの開発を通して、要件定義や同期生とのペアプログラミング、現役エンジニアによるコードレビューなどを経験し、Webエンジニアとしての思考力を習得します。
1/10
keep
・ログイン機能の課題をクリアした🙂
・チーム開発のワークを通じてブランチを作って開発する大切さを学んだ!problem
動画でなるほどと思っても実際に手を動かしてみると、あれれ(ᯅ̈;)ってなるので手を動かして明日のチーム開発に向けて学習する(´._.`)
#ディープロ— ふー@DPro202311期生 (@miruhi_kun) January 10, 2024
実践的なカリキュラムでプロのWebエンジニアを目指す
ディープロ(旧:DIVE INTO CODE)
本気であれば年齢・性別など関係なく学習可能。転職・就職やフリーランス・独立などの実績も豊富なスクール
3位:DMM WEBCAMP エンジニア転職
- 実践的なカリキュラムで転職を確実なものに
- 現役エンジニアによる徹底した学習サポート
- 企業からも大好評なビジネス研修がある
DMM WEBCAMP エンジニア転職では、他のエンジニアやWebデザイナー・ディレクターなど、様々なメンバーとチーム開発をおこなうことが可能です。開発工数やスケジューリング、コミュニケーションなど、実際の開発現場に近い経験を積めるため、転職活動でも即戦力をアピールできます。
チーム開発時でのGit活用方法をメンターさんに教わって、点と点が繋がりました。
就業両立だと触りの部分しかやらなかったし、それをいいことに逃げてた自分もいる←
これからはGitHubを意識した、開発を心掛けます🫡#DMMWEBCAMP #駆け出しエンジニアと繋がりたい #プログラミング初学者— K @RUNTEQ_pro3期A @DQW (@k1997022023) August 3, 2022
成功率98.8%!【転職保証付き】のプログラミングスクール
DMM WEBCAMP エンジニア転職
未経験でも3ヶ月でエンジニアを目指す、転職保証付きスクールです。転職できなければ全額返金も
4位:テックキャンプ エンジニア転職
- 実践レベルまで高めた質の高い学習カリキュラム
- 専属ライフコーチや講師による徹底的な学習サポート
- マンツーマンのキャリア支援で転職を徹底サポート
テックキャンプ エンジニア転職では、『通学プラン』のみチーム開発を経験することが可能です。実際にあるサービスのコピーサイトを、同期とチームを組んでアジャイル開発で進めていくため、実践に近い経験を積むことが可能です。
テックキャンプ短期コースも半ばにさしかかり、今数人でチーム開発をしている。これまで学んだことを利用してでいざ実装しようとすると、理解不足だった所が見つかり、論理的に考えて正しくはこうすべきだなと気付くことが多い。チームでやるとメンバーからの指摘ももらえるので、ありがたい。
— Mitsu.Tamo (@Tamo2305) June 24, 2023
最高の学習環境と厳選したカリキュラムによる600時間短期集中プログラム
テックキャンプ エンジニア転職
30代以上でも受講可能なスクール。エンジニア転職に向け実践的なカリキュラムでスキルを身につけます
5位:COACHTECH(コーチテック)
- 業界初の案件保証サービス『COACHTECH Pro』!
- 挫折率3%!現役エンジニアの専属コーチがしっかり伴走!
- フリーランス・転職までのキャリアを徹底的にサポート!
COACHTECH(コーチテック)が提供する案件保証サービス『COACHTECH Pro』では、チームによる案件開発を経験できます。単にプログラミング業務だけをおこなうのではなく、要件定義や顧客対応、納品など実際の業務を一連の流れで経験することが可能です。
フリーランスエンジニア特化のプログラミングスクール!
COACHTECH(コーチテック)
現役エンジニアによるコーチングで、未経験でも挫折することなくフリーランスを目指すことできます
もっと詳しくチーム開発を学べるプログラミングスクールを比較したい方は、「チーム開発を学べる!おすすめプログラミングスクール5選【転職に強い】」という記事をご覧ください。実際の現場を想定した経験を積みながら、エンジニアとして理想のキャリアを目指せるスクールのみを厳選しています。