# プログラマになりたい人へ 現在のプログラマの市場や勉強法など 所詮著者は後述するレベルの3.8〜4.2ぐらいのレベルだし働いた経験もアルバイト含め2年ぐらいだからまあアテにならないところはならないと思う<br> ので、基本的にこの記事は俺はこうやったよって内容だからこれを猿真似する必要はない<br> これを持って自分なりに試行錯誤しろ<br> 現在の市場についてはエンジニア採用担当の知り合いに聞いたことをもとに書いてるからある程度の信憑性はある...はず ## 目次 - [予備知識・用語](##予備知識・前提・用語) - [現在のエンジニア市場](##現在のエンジニア市場) - [勉強の仕方](##勉強の仕方) - [おすすめサイト・サービス](##おすすめサイト・サービス) - [必要な基本スキル](##必要な基本スキル) <br> ## 予備知識・前提・用語 <br> 厳密には違うけどかエンジニア=プログラマとしとく <br> **6段階のレベル分けした時の大体の指標(ほぼ主観)** <br> * **レベル1 (勉強時間300時間未満):**<br> 専門書1冊を読み終えた程度、基本的なプログラミングの概念を理解している。<br> シンプルなコードなら書ける * **レベル2 (300~500時間):**<br> 複数のプログラミング言語やライブラリを学んでいる。<br> 学校の課題とかの実践的な経験を積み始めているぐらい * **レベル3 (500~1000時間):**<br> 基本的なアルゴリズムやデータ構造を把握、コードが書ける。<br> インターンシップなど、実務に近い経験を持っている。<br> 数ヶ月勉強しましたでたどりつけるのはここぐらいまで * **レベル4 (実務経験あり or 情報の専門、大学卒):**<br> エンジニアとして働いているか、情報科学やコンピュータサイエンスの学位を持っている。<br> 複数のプロジェクトやチームでの開発経験がある。<br> 情報だけの学内成績で言うと上位20%ぐらい * **レベル5 (小規模プロジェクトが一人で作れるレベル):**<br> 小規模プロジェクトを独力で設計、開発、運用できる。<br> 応用的なアルゴリズムや技術(動的計画法、機械学習など)に精通してる。<br> 高い問題解決能力を持つ。 * **レベル6 (神、バケモン):**<br> 業界の専門家や研究者として認知されている。<br> 革新的な技術やアイデアを開発・発表し、その分野に大きな影響を与えている。<br> 五条先生とかそういうレベルのバケモン 各レベルの分布も強さの基準も大体とあると一緒だからイメージわかなかったらとあるだと思って <br> ## 現在のエンジニア市場 技術革新やDXの推進、リモートワークの一般化によってエンジニアの需要は分野問わず高まっている。<br> 特に新興技術分野(Web開発、AI、データサイエンス、IoTなど) **市場で求められている人材**<br> * 短期間でスキルを習得して活躍できる人材 * 元から専門性のあるスキルを持ってる人材 <br> こっからは俺が聞いた噂と経験と所感とか <br> **結論から言うと、未経験エンジニア市場はガチでエグい... けどチャンスがないわけでもない** * レベル3以下とか<br> よく見るプログラミングスクール卒(te⚪︎academy的なやつ)が大体このくらいのレベル<br> 現状としてはこのくらいのレベルが市場に溢れてる<br> 新卒とかなら教育・研修制度があるから少し知識あるぐらいでも大丈夫だろうけど派遣SEとかの未経験向け案件はほぼ皆無らしい(仕事がない)<br> 転職とかに関してはほぼ無理ゲー<br> でも可能性が0とは言わない * レベル4以上<br> だいたいこの辺が即戦力ってやつ<br> ざっと見た感じ上見なければレベル4以上は市場全体での需要が供給を上回っているため超売り手市場<br> まあ当たり前だけど上見ようとするとそれなりの能力は必要になる * その他<br> 元々別の専門分野とかの知識がある場合、そのスキルや知識の拡張枠としてプログラミングのスキル持ってるとかは需要ある。以下は例 * デザイン、美術 <br> デザインとかのスキルに加えて基本的なウェブ開発技術を持ってればウェブデザインとかアプリ開発に携われる * 金融、経済学 <br> 金融等の知識に加えてpythonとかRの技術持ってればデータ解析、リスク管理、シミュレーションができる こういう場合、レベル1とか2ぐらいの知識でも十分活躍できる<br> RPGで例えると魔法攻撃特化育ててまだスキル枠余ってるならデバフとか覚えさせると汎用性上がっていいねって話 <br> みたいな感じで既に何か特化したスキルとか持ってる上でプログラミングとかをかけ合わせればいろんなことできるから意外と需要ある。 <br> **需要はかなりあるからほぼ未経験とかでも全然チャンスはあるけどスキルを持ってない場合、競争が激しい** <br> 未経験者とかでも全然チャンスはあるけどある程度の覚悟が必要 <br> ## 勉強の仕方 <br> 基本的に初学者向けの方法とかは書くけど後半は正直言うまでもないので省略する <br> * **レベル0、1とかの人**<br> 適当なプログラミング言語一個選んで適当な初学者向けテキスト一冊やる(優しいCとか)<br> またはオンラインコースとかチュートリアルを活用する<br> JavaScriptとかのいわゆるScript言語は選ばない方がいい<br> 困ったらCかpython選ぼう<br> わからないとこはすぐGoogle先生かchatGPTに聞けば大体解決する<br> この辺で躓くところはどのプログラマも躓くからたくさん情報がある これすら難しかったらscratchとかやってみる **おすすめ言語と特徴** * C<br> プログラミングだけでなくコンピュータの基礎理論とかから学びたいならおすすめ<br> 終わったらC++とかやってみよう * python<br> 文法がわかりやすくてかつ結構ゴリ押しでもなんとかなるガバガバ言語<br> かなり拡張性が高いからレベル上がっても継続的に使える * HTML/CSS/JavaScript<br> 個人的意見だけどHTMLとCSSはプログラミング言語ですらないと思ってる<br> パソコン触ったことないとかならこれから始めてもいいかも<br> JavaScriptはscript型の言語で初学者が触るにはクセが強すぎるから最悪JavaScriptは触らなくてもいいかも * **レベル2とかの人**<br> この辺から自分のしたいことに合わせた言語選ぶ<br> 具体的にやりたいこと決まってるならプロジェクトとか始めてもいいかも ライブラリとか触って少し拡張的なプログラムを書いてみる<br> 少し癖のある他の言語触ってみる<br> このあたりから競プロとか触り始めるとアルゴリズムとかデータ構造に強くなる * **レベル3**<br> 自分で具体的に目的とか作りたいもの決めてそれを作ったり(ex 資格取得、ゲーム開発)それに向けて必要な知識、スキルを勉強する<br> 学生で余裕あるならこの辺からインターンとか受けてみてもいいかも<br> モンハンで例えるとこの辺は剣士の汎用テンプレ装備組み終わったぐらい<br> まあ要は自分の使いたい武器種あるならそれに合わせた武器防具とスキルの組み合わせ調べたりしたいよねって段階 * **レベル4以降**<br> プログラミングから拡張できる他スキルとかを身につける(機械学習、CS、AWS、UI設計、プロジェクト管理)<br> 正直この辺にいるなら言うことはない<br> てか俺がこの辺だから言うことがない<br> 逆に何かいい方法あるなら教えて欲しい<br> 座学で身に付くレベルとしては4後半あたりでほぼカンスト<br> こっからレベル5に行けるか行けないかはほぼ才能で決まると思ってる <br> ## おすすめサイト・サービス 正直環境周りは戦争になるから好きなの使えって話だけど個人的なおすすめはこの辺 気になったらじぶんでいろいろ探そう<br> * **chatGPT**<br> みなさんご存知chatGPT、環境構築、コードのエラーとか丸投げしても答え返してくれる神AI どのレベルでも使える<br> なんならある程度のコードの生成ぐらいまでやってくれる <br> <a href="https://chat.openai.com/">chatGPT</a> <br> * **Ubuntu**<br> linuxベースのOS<br> mac使ってるなら最初っからターミナルにコマンド打てるからいらない<br> C/C++、pythonの環境をWindowsで作ろうとするとテキストとかに統合開発環境入れろ!って言われるけど統合開発環境は重いし初学者が急に始めるには機能が多すぎるからUbuntu導入した方が楽<br> 後述するVSCodeのターミナル設定をUbuntuにとかにするとさらに楽 * **VSCode**<br> オープンソースのコードエディタ<br> カスタマイズ性が高い<br> 拡張機能を追加することでさらに多機能にカスタマイズできる<br> 言語によって自分なりに拡張機能をカスタマイズする<br> (HTMLプレビューの拡張機能とか) * **atcorder**<br> 競技プログラミングサイト<br> データ構造とかアルゴリズムに強くなりたいならおすすめ<br> 強さに応じてポケモンみたいにレートがつく<br> <a href="https://atcoder.jp/">atcoder</a> * **Github**<br> ソースコードのバージョン管理や共有を行うためのプラットフォーム<br> プロジェクトの進行状況を共有したり、他のプロジェクトに参加したり、オープンソースプロジェクトに貢献することができる<br> これ使えると共同作業で有利、なんなら使えないと話にならないレベル<br> <a href="https://github.com/">GitHub</a> * **edX**<br> 海外の大学(MITとか)のオンラインコースを受けれるプラットフォーム<br> 独学でいろいろ学びたい人におすすめ<br> ものによるけど学校の授業よりわかりやすい授業とかがゴロゴロある<br> もちろん英語 <br> <a href="https://www.edx.org/">edX</a> * **CS50**<br> オンラインかつ無料で受けれるハーバード大学のコンピュータサイエンス入門講座、ありえんほどわかりやすい<br> ちゃんとした修了証受け取るならお金がかかる 全10回からなりscratchから始まりコンピュータやデータ構造とアルゴリズムの基礎理論から応用まで満遍なく学べる<br> 最後のプロジェクトでは独自のソフトウェア開発とかをやらされる たった10回でscratchから初めてソフト開発やらされてるのを見て分かる通り1回あたりの情報量はかなり多いし初学者には少しハードル高い ~~講義含め資料は全部英語~~ ~~<a href="https://cs50.harvard.edu">cs50</a>~~ <br>ごめん和訳されたサイトあった <a href="https://cs50.jp/">cs50 for japanese</a> * **wantedly**<br> 求人情報サイト<br> dud⚪︎?リ⚪︎ナビ? gm、中間マージン取られるカスサービスを使うのはやめましょう <br>学生インターンとかもここで募集してたりするのでオススメ * **考える技術・書く技術: 問題解決力を伸ばすピラミッド原則**<br> これはサービスとかではなく本<br> この本から得られるスキルあれば論理思考力とかにおいては十分<br> この内容マスターできれば論文作成とかでも無双できるようになる<br> 個人的に一生本棚に入れると決めてる一冊、おすすめ <br> ## 必要な基本スキル 以降説明するのは根本的に必要だったり学習中に身につくであろうスキル<br> 元からこれ持ってるなら学習する上で困ることはないだろうしこれらがない場合どっかで絶対躓くだろうってやつ * **プログラミング思考の基本** * 課題解決力 * 論理思考力 * アルゴリズム的思考 * **コミュニケーションスキル** * **自己学習能力** * 自主性 * 継続性 * 効率的な学習 * 効果的質問 <br> * **プログラミング思考の基本**<br> プログラミング言語に関する知識とかも必要だけどそれよりも根本的なとこ * 課題解決力<br> 基本的にプログラミングは問題解決型のプロセス<br> 与えられたり、自分で見つけた課題を解決するためにいろんな方法を考え実行できる能力がいる * 論理思考力<br> 基本的にコードは論理的構造で作られてるからプログラムやアルゴリズムを実装する際に必要 * **コミュニケーションスキル**<br> そりゃそうだろって話だけどチームで活動する上で他者の視点を理解すること、適切なフィードバックの提供等の基礎的なコミュニケーションスキルが必要 * **自己学習能力**<br> このトピックに関わらず学習する上で必要な能力 * 自主性<br> 独学で学習するなら特に自分で課題を見つける能力や解決策を実践する能力は必要 * 継続性<br> 先も書いたけど正直学校とかだけの力ではレベル3とかぐらいまでしか行けない<br> * → 独学でレベルアップを目指すなら個人的でかつ**継続的な努力**が必要<br> メタ的にいえば一朝一夕の努力で身につかないからプログラマの需要がある<br> * 効率的な学習<br> 言語やフレームワークはどんどんアップデートされる<br> 効率的に学習する能力が必要 * 効果的質問<br> コミュニケーションスキルに通ずるとこもあるがそれこそchat GPTなどの対話型AIが発達してる現状では自分のわからないことをAIや人間に対して効果的な質問をできる能力が必要 ## 著者 職業 学生<br> 最終学位 準学士(高専卒)<br> 実務経験 アルバイト含め2年<br> 専門 システム構築 ソフトウェア開発 ネットワークセキュリティ<br> 趣味 読書 映画鑑賞<br> 好きな言語 C++<br> <a href="https://twitter.com/RM7_mei">Twitter</a>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up