中小企業ITエンジニア学習日誌ーWebエンジニアに必要なスキル編

こんにちは、ぶんです。
今回は、私がWebアプリケーション開発者として、必要だと思った知識やスキルを整理します。

スキルマップでググってみると、案外それらしい情報がヒットしない(ヒットしても、当事者としては疑問がかなり残る内容…)ので、
私なりに整理してみようと思います。

どなたかの一助となれば幸いです。

自己紹介はこちら↓

マガジンはこちら↓

前回

クラウド・運用エンジニアに必要なスキルを整理してみました。

前段

私は新卒から未経験にて、Webアプリケーション開発者としてキャリアをスタートしました。

約1年ほどは、アプリケーションの開発を行っています。
その後は、サービス基盤の構成などの担当に移っています。

なので、未経験の段階では、何を、どこから学習すればいいのか全くわかりませんでした。

職場を含め、そのような体系化された知識を持つ人も、そんな教育制度も無かったため、まともな教育を受けた記憶はありません。

わりとあるあるな気がしますが、そろそろこんな状況を打破すべきと思い、このような記事を書くこととしました。

言語学習

まずは、プロダクトを作れる段階に持っていくのが良いと思います。

個人的にはコンピュータサイエンス、基本情報技術者試験あたりを前もってやるのが良い気もしますが…

まずは、具体的なコード作成のスキルが必要だと思います。

  • フロントエンド
    Vue.js React.jsなど
    HTMLとCSSは、知識として必要かも?
    組織によって異なる

  • バックエンド
    Java Python Goなどなど
    こういった言語を利用したWebフレームワーク(PythonならDjangoなど)

  • データベース操作
    SQLなど

あせらずに、まずはプロダクト開発の基本的なコーディング知識を身につけるのが良いと思います。

設計論

とはいえ、コーディングがそれなりにできても、どう開発すればいいか?がわかりません。

そこで、具体的な開発のために、設計論を学習してみると良いと思います。

(私は設計論に出会ってから、やっとプロダクト開発ができるようになったと思います。)

  • 設計論
    ドメイン駆動
    クリーンアーキテクチャ
    などなど
    正直組織によって異なるかどうかもわかりません

言語学習と並行しても良いかもしれません。

各種ミドルウェアの学習

プログラマーとしてプロジェクトに参加する場合、各ミドルウェアについての細かいことは知らなくてもいいかもしれません。

ただ、使い方や性質は理解しておかないといけない場合もあります。

特に、データベースなんかはその一例かと思います。

  • 仮想化技術
    Dockerなど

  • データベース
    プロジェクトによって違うが
    MySQL PostgleSQLなどなど

ネットワーク

ここらへんはプログラマーからすると、すごく細かくは理解しなくても良い気はします。

ただ、最低限よく利用するプロトコルのこととかは理解しておいた方がいいです。

  • プロトコル
    TCP/IP
    HTTP通信の基礎知識
    とりあえず、API実装で困らないくらい

絶賛学習中です…

テスト

開発した製品は、品質の管理もせねばなりません。
ということで、テスト技法も理解しておく必要があります。

  • テストコードの書き方
    ここらへんは詳しくないのですが、言語ごとのフレームワークの学習をすると良いと思います。

  • テスト技術
    テストのやり方です。
    テストの考え方、技法などがまとまった一冊を読んでおくと良いです。

コーディング技術

どのようにコードを書いていくか、ということも理解しておく必要があります。

また、優れたコードを書くことで、アプリ自体のパフォーマンスを改善することも必要になってきます。(私は経験がないので、参考になりませんが…)

  • アルゴリズム
    より高速で動くコードを書く。
    私は経験がないです…すみません

  • コーディングの考え方
    上手なコードの書き方です。
    リーダブルコードとか、達人プログラマーあたりをご参照ください。

開発スタイル

どのように開発を進めるか、ということも理解しておく必要があります。

  • スタイル概論
    ウォーターフォール
    アジャイル
    などなど、様々なスタイルがあります。
    ここらへんはプロジェクトに合わせてで良いと思います。

セキュリティ

随時更新。

絶賛学習中です。

基礎学習

エンジニアとしての心構えだったり、必要となりそうなコンピュータに関する知識などです。

実務と密接な関係…とは言い切れないかもしれませんが、パフォーマンスチューニングなどでは必ず考える必要があります。

私はあまり詳しくないのですが…
(絶賛学習中)

  • ソフトウェア工学
    学術的な話になりますが、基礎的な工学知識があるととても良いです。
    世にある様々な開発技法の良し悪しをなんとなく判別できます。

  • コンピュータ基礎
    コンピュータやソフトウェアはなぜ動くのか?を理解しておくとよいです。
    パフォーマンスチューニングの際に必要な考えになります。
    私はあまり詳しくないのですが…

  • エンジニア基礎
    良くエンジニアが使う言葉を理解しておく必要があります。
    基本情報技術者試験が非常によくまとまっています。

その他ツール類

開発に必須の様々なツールがあると思います。

  • バージョン管理
    Gitなど

後々必要になるもの

エンジニアとして成長していくと、いずれはシステム要件の整理をすることになります。

その時に必要な設計論なども理解する必要があります。

  • 要件定義

  • 外部設計

  • 内部設計

などなど…
(経験が特にないので、あまり参考になさらず…)

余談

これ、エンジニアというか、プログラマー向けの話ですね。

書いてて思いました。

あと、結構書いたので、今度はこの学ぶ順序も整理しようと思います。

次回

今度はクラウド・運用エンジニアについて、
スキルマップをベースに、そのロードマップも書いてみようと思います。

サポートいただけますと幸いです。さらなる励みにして精進します。