こんにちは!
seiです!
- エンジニアになった人は何を勉強したんだろう?
- 具体的に何を勉強すればよいか知りたい!
今回は現役フルスタックエンジニアのseiが具体的に何を勉強すればよいのか解説します!
この記事の信頼性
僕はニートから独学でエンジニアになりました。
実務一年で転職して年収を500万にすることができたので、この記事を読めば年収500万くらいのエンジニアがどのように勉強してきたかが分かります。
エンジニアになるために勉強すべき項目を紹介します
エンジニアにはたくさん種類がありますが、ここではWebエンジニアに絞って紹介します。
Webエンジニアの中でもフロントエンドエンジニアとバックエンドエンジニアに分けて紹介します。
フロントエンドエンジニアが学ぶべきこと
フロントエンドエンジニアが学ぶべきことは以下です。
バックエンドエンジニアと比べると、意外と覚えることは少ないです。
- Javascript
- HTML,CSS(SASS)
- npm,yarn
- フレームワーク(VueやReact)
- 状態管理
- HTTPプロトコル
Javascript
フロントエンドエンジニアになりたいのであれば、Javascriptは必須の知識です。ブラウザで見える部分を担当するフロントエンドにとって、ブラウザで動作するJavascriptは絶対に学ばなければいけません。
HTML/CSS(SASS)
おなじくHTMLとCSSはWebページの基盤となるもので、これらを理解していなければJavascriptの力を最大限に引き出すことはできません。HTMLはページの構造を、CSSはその見た目を定義します。SASS(Syntactically Awesome Stylesheets)はCSSの拡張で、より複雑なスタイリング(書き方)を可能にする機能を持っています。
npm/yarn
npm (Node Package Manager) と yarn はパッケージ管理ツールです。
パッケージとは開発に必要なツール群だと思ってください。パッケージを適当にインストールすると「あれ?何インストールしてたんだっけ?」「削除したいのに!」みたいな事が起こりがちです。
パッケージを管理しやすくするのがこのnpmとyarnになります。
これらのツールの使い方を知っておくことで、効率的な開発が可能です。
フレームワーク(VueやReact)
フレームワークは、特定の言語でプログラムを書くための一連のルールとツールです。
つまりフロントエンドを構築するのにめっちゃ便利なツールだと思ってください。
Vue.js や React.js といったJavascriptのフレームワークを学ぶことで、大規模なプロジェクトを効率的に開発することが可能になります。これらのフレームワークはコンポーネントベースのアーキテクチャを提供し、コードの再利用が容易になります。
状態管理
状態管理とは、アプリケーションの状態(データ)を効率的に管理することです。ReactならばRedux、VueならばVuexなど、各フレームワークには対応する状態管理ライブラリがあります。これらを理解し、使用できるようになることは、複雑なアプリケーションの開発において重要です。
実際に開発しないとイメージ湧かないのが状態管理だと思います。
HTTPプロトコル
HTTPプロトコルについての理解も必須です。ブラウザとサーバー間でデータを送受信するためのルールだと思ってください。HTTPリクエスト(GET、POSTなど)の仕組みを理解していると、APIからデータを取得したり、ユーザーデータをサーバーに送信する際の作業がスムーズに行えます。というか行えないとまずいです(笑)
バックエンドエンジニアが学ぶべきこと
バックエンドエンジニアはフロントエンドとインフラに挟まれているので、これらの知識も知っておいた方が良いです。
今回は純粋にバックエンドのみに絞ってお伝えします。
- プログラミング言語(Python,Java,Ruby,PHPなどから一つ)
- データベース
- フレームワーク
- HTTPプロトコル
- RESTfulAPI
- セキュリティ
プログラミング言語(Python, Java, Ruby, PHPなど)
バックエンドエンジニアに最も基本的なスキルは、一つ以上のプログラミング言語を理解し使用する能力です。Python、Java、Ruby、PHPは、バックエンド開発でよく使用される言語です。各言語はその特性と用途によって適した状況が異なります。それぞれの言語の特徴を理解したうえで、学習する言語を決めましょう。
データベース
データベースとはその名の通りデータを管理するものです。会員登録サイトにログインすると自分の情報が表示されますよね?あれはデータベースにあなたの情報が保存されているからです。
バックエンドエンジニアは、大量のデータを管理、操作する必要があります。データベースの設計、クエリの書き方、トランザクション管理などの基本的な概念を学習しましょう。
フレームワーク
フレームワークは、アプリケーション開発を効率化するすごく便利なツールです。バックエンド開発では、Django(Python)、Spring(Java)、Rails(Ruby)、Laravel(PHP)などのフレームワークがよく使われます。
HTTPプロトコル
フロントエンドエンジニアと同じく、バックエンドエンジニアにとってもHTTPプロトコルの理解は不可欠です。HTTPプロトコルは、クライアント(通常はWebブラウザ)とサーバー間の通信を規定するもので、リクエストとレスポンスの形式、メソッド、ステータスコードなどを学習しましょう。
RESTful API
RESTful APIは、フロントとバックエンドの通信(API)設計原則です。URLありますよね。あれはRESTful APIのリソース指向という概念です。バックエンドエンジニアは、RESTful APIの設計原則と使用方法を理解し、フロントエンドとデータをやり取りするためのAPIを設計・実装する必要があります。
RESTful APIについて詳しく書くと、これで一記事になっちゃうので詳しくは以下の記事をご覧ください。
REST API(RESTful API)とは…
セキュリティ
バックエンドエンジニアは、データを扱うのでセキュリティについてしっかり知っておく必要があります。データ保護(パスワードの保存の仕方)、認証と認可のメカニズム(JWT,OAuth)、サイバーセキュリティの脅威(SQLインジェクション,XSS)について学習すると良いです。
バックエンドエンジニアの学習項目は一つ一つが結構重いので学習するのが大変だと思いますが、頑張りましょう!
エンジニアになるために必要なスキルとは?
実はプログラミングスキルだけではエンジニアにはなれません。
エンジニアになるためには、様々なスキルが必要となりますが、大きく分けて以下の3つを考えてみましょう。
フロントエンド、バックエンドエンジニアのどちらにとっても大切なスキルです。
プログラミングスキル
エンジニアとして最も基本的で重要なスキルです。コードを全く書かないエンジニアはエンジニアとは言えないと思います。様々なプログラミング言語がありますが、JavaScriptやPythonなどの基本的な言語から始めることをおすすめします。最終的にはアプリケーションを作成できるように学習しましょう。
ちなみに僕はPHPから勉強しました。
こんばんは! seiです! プログラミング始めてみたいけど、言語がたくさんありすぎる... プログラミング初心者に優しい言語って何? 今はたくさんのプログラミング言語があり[…]
論理的思考力
プログラムを書くときには順序だてて論理的に考える必要があります。また、バグの原因やシステムの内部的なことを理解するのにも論理的思考力が不可欠です。
僕の場合は、競技プログラミングを学習することで論理的思考力を鍛えました。
競技プログラミングにおすすめのサイトがあります
Atcoderがおすすめです。
他に有名なサイトでLeetCodeがあります。比較記事を書きましたので迷っている方はどうぞ。
こんにちは!seiです!LeetCodeとAtCoderは、どちらもアルゴリズムやデータ構造を学ぶことができるプラットフォームですが、以下のような悩みはありませんか? LeetCodeとAtCoderどちらを始める[…]
注意点があります
競技プログラミングはある程度のところまでで良いです。
AtcoderならC問題まで大体解けるようになれば、コードの実装力は大丈夫だと思います。
競技プログラミング以外に優先して学ぶ事があるので、C問題まで解けるようになったら別の学習に移りましょう。
コミュニケーション能力
もともとニートだった僕が言うのもなんですが、エンジニアには意外とコミュニケーション能力が必要です。
もう少し具体的にお伝えすると、以下の3つの力が必要です。
- 物事をわかりやすく伝える力
- 物事を体系的にまとめて話す力
- きつい言い方にならないような配慮
物事をわかりやすく伝える力
エンジニアは一人でシステム全部を作ることは少なく、必ずチームのエンジニアやデザイナー、マネージャーと連携しながら仕事を進めることが多いです。そのため、自分がやっている作業や任せたい作業をわかりやすく的確に伝える必要があります。
さらに知識がエンジニア間で偏っている場合も補えるように説明する必要がある場合も多いです。
物事を体系的にまとめて話す力
分かりやすく伝えるのは良いのですが、細部にこだわりすぎてしまうとうまく伝わりません。
例えばイチゴを思い浮かべてもらうように、イチゴという単語を使わないで説明するとします。
「種が黒色か白色で細長い形をしていて…」みたいな超具体的で細かい話をしていても伝わりませんよね。
具体的な話の部分はちゃんとわかりやすいのですが、全体的なことが分かりにくいエンジニアって結構多いです。(僕も陥りがちです)
多少間違ってても良いので全体的にイメージしやすく伝えると良いです。
きつい言い方にならないような配慮
エンジニアは細かい事を伝えようとしたり、難しい話になりがちなので言い方がきつくなる時があります。チームメンバーの士気が下がるので、なるべくきつい言い方にならないように気を付けましょう。
あなた一人のアウトプットより、チーム全体のアウトプットを高めたほうが良いです。
勉強していた過去を振り返って思うこと
当時僕は無職だったので、がむしゃらに勉強していました。一日最低8時間、土日も休まずに学習して6か月くらいで自分の作りたかったアプリケーションを完成させました。
これを成果物にして就職活動をして、外資系IT企業に入社できて涙が出るほどうれしかったです。やっと親に頼りっぱなしで迷惑をかけている自分とおさらばできるうれしさでいっぱいでした。
がむしゃらにやったのはすごく良い経験でした。そのおかげで自己学習に研鑽を重ね、今では現場で他のエンジニアから技術的な質問をされるので、かなり頼りにされていると感じています。
しかし、がむしゃらに勉強してきたので知識に穴がたくさんありました。これは就職活動の時にかなりきつかったです。「こんなことも分からないのか自分」と思うことも何度もありました。
独学で学習するのは素晴らしいことですが、やはり現役のエンジニアが身近にいたほうが圧倒的に成長が早いと思います。僕も企業に入社してからエンジニアとしての成長が加速しました。
そこでエンジニアのコミュニティを作ろうと思います。
最初は10人くらいで小規模に進めようとと思います。僕がプログラミング初心者の方に向けて相談対応する形を考えています。
ご興味がある方はお問い合わせからお気軽にご連絡ください。