エンジニアのためのお仕事問題集
はじめに
いきなりですが、質問です。
「エンジニアの仕事とは何でしょうか?」
昔々は1チーム10人の様な仕事がたくさんあって、プログラムだけを書いている人も『エンジニア』として存在していました。しかし近年では1チーム2-3人の様な仕事が多く、プログラムだけを書いてればよいわけでもなさそうです。
言い換えると、近年の一般的なエンジニアは 「本来9人でやってた野球を3人でやるような仕事」 をしていそうです。
さらに、フィールドにいる9人以外にも、コーチや監督の業務もその場にいるメンバーで賄うことになります。足りない6人の穴を補おうと思ったら、全員が守備範囲の広いプレイングマネージャである必要もありそうです。
蛇足ですが、ベンチに控えも入れられないから 有給を取るのも難しい です。
そして、2024年以降はさらに状況が変わっています。 AI(GitHub Copilot, ChatGPT, Claude など)が急速に実用化され、エンジニアの仕事の進め方そのものが変わりつつあります。 良くも悪くも「AIという新しいチームメンバー」が加わった感覚です。詳しくは後述します。
…といったところで、『エンジニア』として仕事をするためには以下の様なスキルが必要そうです。
- ヒアリングスキル
- 知覚力・論理的思考力・問題解決力
- コミュニケーションスキル
- ドキュメンテーションスキル
- IT一般スキル
- プログラミングスキル
本リポジトリで提供するもの
『プログラム問題集』ではなく、『お仕事問題集』を提供したいと考えています。 前述の必要スキルのうち以下3項目について訓練できる問題集としています。
- 知覚力・論理的思考力・問題解決力
- ドキュメンテーションスキル
- プログラミングスキル
お客様から『こんなことがやりたい』とざっくりした依頼が来た時にどう考えるか、最低限どの様なドキュメントを残すか、などを考えながら取り組んでもらえればと思います。
※たまに趣味で、ただのプログラム問題集も混じっています。
プログラム学習について
プログラムの学習についても、本リポジトリの問題集で可能ですが量が少ないです。 Udemy や、書籍でとにかく身につくまで反復を繰り返すことをオススメします。 『言語』の習得には、とにもかくにも反復演習が必要です。テキストをなぞるだけではなく、パズルを解くように楽しみながら課題を整理、理解して、ロジックやアルゴリズムに落とし込んでプログラムを書く といったアウトプットを繰り返すことが重要かと思います。
環境
以下をインストールしてください。開発、および、本 README.md 以外のドキュメントを読むのに必要になります。
|ツール |説明 | |---|---| |Visual Studio Code |エディタ。プログラムの開発でも利用。以下VSCodeと記載。| |Markdown Preview Enhanced|VSCode 拡張機能。Markdown に拡張機能を追加したもの。スタイリングやUML表示ができる。 | |PlantUML |VSCode 拡張機能。コードでUMLが書ける。 | |Draw.io Integration| VSCode 拡張機能。図形描画ツール。 |
課題集
|課題|内容|要素技術| |---|---|---| |試験進捗集計ツール |試験項目書を解析して、試験結果・進捗の集計を行う。|nodejs, html, javascript, jQuery |試験進捗集計ツール2 |試験進捗集計ツール機能追加。デイリー/担当者単位集計|nodejs, html, javascript, jQuery, DataTable, Chart.js, Tailwind CSS, React |Switch ソフトウェア一覧|Nintendo SwitchのeShopからソフトウェア情報を収集し、表示するWebアプリケーション。|Node.js, Nuxt.js, Vue.js, Vuetify, スクレイピング関連ライブラリ |インタラクティブサイトマップ|爆速サイトマップ作成ツール | nodejs, html, jQuery |家計簿 | レシート読み取り(OCR)家計簿のPoCを行う。| nodejs, Cloud Vision API, Nuxt.js, Vue.js, Vuetify, 凸包 |労働問題と詐欺グラフ| バーチャートレース(グラフ)作成を行う。| Python, Pandas |共有地の悲劇 API|「共有地の悲劇」シミュレーションAPIの仕様書とスタブを作成する。|Python, FastAPI |きょうは何たべよ|現在地周辺の飲食店を検索・提案するWebアプリを作成する。|HTML, CSS, JavaScript, jQuery, Hot Pepper WebサービスAPI, Nominatim OpenStreetMap API JavaScript |Qiita記事簡易一覧|指定ユーザーのQiita記事一覧を生成する。|nodejs, axios |投票率データ処理|投票率のCSVデータを処理する。|nodejs, csv-parse |チケット管理システム(trak)|AIエージェントを活用してチケット管理システムを開発する。|Next.js, TypeScript, NextAuth |エンジニア年収自己診断|スキルの自己評価から年収や適職を診断するWebアプリを作成する。|HTML, CSS, JavaScript, Chart.js |ビジネスメールタイピング|ビジネスメールの返信を題材にしたタイピングゲームを作成する。|HTML, CSS, JavaScript |バグコードで学ぶ論理的思考|AIが事前生成したバグ入りコードを教材に、レベル別でデバッグ・トラブルシューティング能力を養う。解説・ヒント・テストケースをセットで提供。|TypeScript, React, Vite |上司・顧客にスッと伝わる。現場で役立つ実践プロンプト集|AIとの対話で報告書・返信・提案・落とし所交渉などのビジネスコミュニケーションを鍛えるVS Code拡張機能。使用履歴やバッジで継続を可視化。|TypeScript, VS Code Extension API |マルチプレイカードすごろく(爆弾魔 vs 解除班)|ババ抜き × すごろく × 人狼を組み合わせた3-6人用P2Pブラウザゲーム。ルール・例外処理の塊を企画から実装まで1日で完成させたベンチマーク的な課題。|HTML, CSS, JavaScript, PeerJS (WebRTC)
Note: 課題12以降は、GitHub Copilot / Claude / ChatGPT などのAIアシスタントを積極的に活用して設計・実装を行っています。
AIとのペアプログラミングを想定した問題構成になっており、「AIをどう使うか」自体も学習の一部です。
AI時代のエンジニアについて
「9人の野球を1〜2人でやる」時代へ
冒頭で「本来9人でやってた野球を3人でやる」という話をしました。 AIの実用化が進み、今後は1〜2人でやる時代も視野に入ってきています。
AIというチームメンバーが加わったことで、コード生成・調査・ドキュメント作成など「手を動かす作業」のかなりの部分を任せられるようになりました。
しかし、野球の監督・コーチにあたる「考える仕事」は人間にしかできません。
- 何を作るべきか判断する力
- AIの出力を批判的に検証する力
- 相手(上司・顧客・チーム)に伝える力
- バグや矛盾を論理的に追いかける力
AIは「心理的に安全な練習場」でもある
先輩や上司に何度も聞くのは気が引ける、添削を頼むのは相手の時間を奪う——そういった遠慮なく、AIは何度でも付き合ってくれます。
- コードを書く前にAIと設計を壁打ちする
- 上司に出す前に報告書をAIに添削してもらう
- バグの仮説をAIに話して論理の穴を指摘してもらう
vibe coding との違い
AIを使ったコーディングについて「vibe coding(雰囲気でいい感じに作らせる)」という言葉が広まっています。 「それっぽく動けばいい」という粒度でプロンプトを渡してアウトプットを祈る、いわばガチャ的な使い方です。
一方、本リポジトリ(特に課題16)で実践しているのはそれとは少しニュアンスが異なります。
たとえば課題16「爆弾魔 vs 解除班」は、ババ抜き × すごろく × 人狼を組み合わせたゲームです。 役職の秘匿、手番管理、カード効果の組み合わせ爆発、ロケーション効果——ルールが複雑で例外処理の塊になるジャンルです。こういった題材は、仕様があいまいなままAIに渡すと、簡単に破綻します。
にもかかわらず、企画から実装・デプロイまでを1日で完了できました。 これが可能だったのは、「何を作るか」「どう動くべきか」が明確にわかっていたからです。
- 仕様をきちんと言語化してAIに渡す
- 出力を批判的に読んで矛盾を検出する
- 「ここはAIに任せてよい」「ここは自分で判断する」を切り分ける
本リポジトリ(12以降)での取り組み
課題12以降は、AIをペアプログラマーとして開発を進めています。 プロンプトの工夫、AIの出力のレビュー、AIには任せられない判断の切り分けなど、AI時代のエンジニアが実践すべきワークフローを体験できる問題構成にしています。
「AIに全部やってもらう」のではなく、「AIを使って自分の思考を加速させる」 練習をしてもらえればと思います。