テクノロジー
文系・未経験からWEB系エンジニアになるために学んできたこと
はじめに
皆さん、初めまして!
WEBアプリケーション開発系のエンジニアとして採用された、2024年新卒入社のK.Iです。
私は学生時代は文系の出身でプログラミングとは無縁の学生生活でした。
そこから、とあることをきっかけにプログラミングやアプリ開発に興味を持ち、学習を続けてきた結果、ご縁あってマイナビに入社しました。
今回は、そんな僕が学生時代にWEB系のエンジニアとしてキャリアをスタートさせるために学んできたことを僭越ながら皆さんに共有させていただこうと思います。
現在WEB系エンジニアとしての就職を考えている方や、これからエンジニアを目指していく学生の方にとって少しでもヒントとなるように、なるべく再現性の高い内容に絞ってお伝えしていくので是非最後まで目を通していただけますと幸いです。
(※注意)
今回紹介する内容はあくまで個人の経験による内容を多く含むものとなるので、必ずしもすべての人に等しくあてはまる内容とは限らないということをあらかじご理解いただきたいと思います。
一個人がエンジニアになるまでにどんなことを考え、何を実践してきたのかということを事実としてとらえていただけると記事の意図が伝わるかと思います。
学習のゴールを設定する
学んだことを紹介する前に、私がエンジニアとして就職を検討する際に行った「ゴール設定」をお伝えさせていただきます。
私がエンジニアとして就職するにあたって、まずはじめに行ったこととしては、「技術をどこまで学習したら就職活動を開始するか」
ということを先に定めるようにしました。
目的にもよるかと思いますが、私の場合、WEB系エンジニアとしての就職がメインだったので下記のようなゴール設定で学習を本格的にスタートさせました。
「企業に見せる成果物(WEBアプリケーション)を1つ作成する」
私の場合、文系でしたので企業にとっては「プログラミングやWEBに関して何の経験もない人」と判断されることは当然の事実としてありました。
そのため、
- ある程度、技術的な興味関心がある
- この業界で長く続けていける素養がある
ことを示すために上記のような目標を設定しました。
学んできたこと
ここから本題の私がWEB系エンジニアとして内定をもらうまでに学んできた技術的な内容に関してお伝えさせていただきます。
先に結論から述べさせていただくと、、
- コンピュータサイエンス
- Linux
- HTML, CSS
- JavaScript
- Ruby
- RDB, SQL
- Git, Github
- Ruby on Rails
上記の順番で学習を継続してきました。
全体として、約3か月程度の学習期間を設けました。
そののちに、就職活動をスタートさせ無事、エンジニアとして就職することができました。
ここからは、上記の内容に関して実際にどんなことを学んできたかを深堀りしていきたいと思います。
コンピュータサイエンス
はじめに、コンピュータサイエンスの基礎的な内容に関して学び始めました。
現在学生の方ですでに情報の分野を専攻しているorいた方は、このパートをスキップしてしまったも問題ないかもしれません。
私の場合、情報専攻ではなかったので下記のような内容を中心にコンピュータの基礎的な内容を一通り学びました。
- n進数
- デジタルデータ(ビットとバイトなど)
- CPU・メモリ
- ハードウェア・ソフトウェア
- データベース
- ネットワーク
- セキュリティ
実際に利用した参考文献も記載しておきます。
エンジニアとして実務にかかわる上で、上記のような内容を知っているのといないのでは、理解に差が生まれるので情報系以外の方は改めて学習しておくことをお勧めします。
Linux
Linuxは、Windows, Macと同様にOSの一種で、アプリケーションのサーバーのOSとして利用されることが多いので、エンジニアとして業務を行っていく上では必須の概念になります。
主にCLI(Command Line Interface)でのコマンド操作を扱うことになるため、Linuxの基礎的な概念と併せてよくつかわれる基本コマンドを押さえておくと、今後の作業がスムーズになります。
HTML, CSS
HTMLはWEBページを表示するための骨組みのようなもので、CSSはHTMLに色を付けたり大きさを変えたり等の装飾を加えるための技術になります。
HTML, CSSの学習を通じて、WEBサイトが表示される基本的な仕組みを学習しました。
基礎的な内容に関しては、オンラインの学習教材(Progate, ドットインストール)を使って一通り学習し、その後は他のWEBサイトを模写する形でアウトプットを行いました。
模写に使用したおすすめサイト:https://code-jump.com/
JavaScript
JavaScriptはWEBアプリケーション開発でよく用いられるプログラミング言語で、フロントエンドと呼ばれるユーザーの目に触れる部分の仕組みを実装することができます。
HTML, CSS同様、基礎的なインプットに関してはオンラインの学習教材を使用しました。
アウトプットとして、先述のHTML, CSSで模写したサイトに動き(ユーザーのアクションに対するイベント処理等)をつけながら改良したり、アルゴリズムの問題をJSを使って解きながら文法を身に着けていきました。
Ruby
RubyはWEBアプリケーションのバックエンドと呼ばれる裏側の仕組みを構築できるバックエンド言語になります。
フロントエンドの言語であるJavaScriptと合わせて、一連のWEBアプリケーションを構築するために、バックエンド言語のRubyを学習しました。
Rubyを選んだ理由としては、
- 文法が簡単で、初学者でも学びやすいため。
- 日本語のリファレンス等も豊富で調べやすいため。(日本人が開発した言語のため?)
- フレームワークやライブラリが豊富でWEBアプリケーションを開発しやすいため。
また、日本の企業では比較的Ruby, Railsを採用している企業が多く、求人数も多かったたことも選択した理由の一つです。
ここでも、オンラインの学習教材メインで使用して学習を進めました。
アウトプットに関しては後述のRuby on Railsでまとめて行いました。
RDB, SQL
続いて、データベースの学習です。
RDB(Relational Database)は現在のWEBアプリケーション開発で主流のデータベースになります。
主な特徴として、テーブルと呼ばれるデータをExcelの表のような形式で管理し、それぞれのテーブル間の関係性を定義していきます。
また、RDBに格納されたデータに対して問い合わせを行い、データの取得・削除・追加・更新等の操作を行うための命令を記述する言語がSQL(Structured Query Language)になります。
いずれもWEBアプリケーションのバックエンドを実装する上では必須の知識となります。
なお、RDBを管理する仕組みにはいくつか種類があります。
- MySQL
- PostgreSQL
- OracleSQL
主流かつ代表的なものとしてはMySQL, PostgreSQLになりますので、その辺りを学習しておけば問題ないかと思います。
学習方法に関しては、私の場合、SQLは書籍を使用し、RDBに関してはオンライン学習教材使用して学習を行いました。
RDB(RDBMS)の種類や役割、基本的なSQL文の文法が理解できていれば問題ないかと思います。
Git, Github
Gitはプログラミングコードの変更履歴を管理するためのツールになります。
実務では複数人のチーム単位で行うことが一般的なのでその際に、ファイルの変更や最新版のファイルの管理等を円滑に行うためにGitがほぼ確実に使われます。
まずはGithubのアカウントを作成し、そこに学習で使用したソースコードを挙げておくようにすると、Gitの練習になるのでお勧めです。
Git, Githubの学習に関しては実際の動きを確認できる方がよりイメージしやすいかと思いますので、動画で行うのがおすすめです。(参考資料の中にも動画教材を挙げています。)
ただし、Gitを学習する際の注意点として、動画等でインプットしたら必ずアプトプットまでセットで行うことをお勧めします。
概念・ルールを理解することより「操作できる」ことが重要になるため、教材で学んだらそれをご自身の環境でも実践してみる形で並行して進めていくことをお勧めします。
Ruby on Rails
Ruby on RailsはWEBアプリケーションの開発を効率的に行えるようにするためのRuby言語のフレームワークになります。
要するに、Rubyでアプリ開発する際に必要となる機能をはじめから準備してくれている便利ツールです。
学習の流れとしては、、
- Railsで開発する全体像を把握する
- チュートリアル等を使用して実践する
になります。
1の全体像に関してはオンライン学習教材のProgateの講座等を活用して、Railsがどんなもので、どんな流れで開発してくのかをざっくり理解するとよいでしょう。
次のステップとして、Railsで記述するコードの内容やGemの使い方等を詳細に理解しながら、チュートリアルを進めていくことをお勧めします。
環境構築でいろいろなソフトをインストールしたりバージョンを合わせたりする必要があり、思った以上に苦労した経験があるので、一つ一つの手順を把握しつつ進めることをお勧めします。
まずは、見よう見まねで手順通りに動かして、徐々に理解できて来たら自分なりに改良しながら理解を深めるような流れで行うと良いかと思います。
Railsを学ぶ上での代表的な教材としてRailsチュートリアルがあります。
こちらの内容が大まかに理解できれば成果物のアプリケーションを作成する上で困ることはほとんどありません。
Railsの学習まで一通り終えることができたら、チュートリアルで完成したアプリの延長線上で独自のテーマを設定して自作のアプリケーションの作成に取り掛かりましょう。
テーマは~クローン等ありきたりなものではなく、身の回りで感じた悩み等を解決できるような独創性の感じられるテーマで作成しましょう。
ちなみに筆者は、コロナ禍で自宅にいる時間に料理を通じてつながりを増やしたいという発想から、SNS×レシピサイトのようなテーマで作成しました。(なぜこういう発想に至ったのかに関してはあまり覚えていません(笑))
学習のポイント
最後に学習のポイントについていくつかお伝えしようと思います。
5, 6割理解できたら進める
内容が理解できず何度も何度も反復してしまうという方も中にはいるかもしれません。
私自身も文系で何の知識もないところからのスタートだったので、非常に気持ちは理解できますが、学習の目的は、「成果物を完成させること」なので、内容をはじめのうちから内容を100%近く完璧に理解しておく必要はありません。
実践していく中で理解できてくることも多いと思いますし、そこに何時間もとらわれてしまうのは非効率になってしまっていることの方が多いと思います。
なので、「やった内容がざっくり頭に残っている」ぐらいの状態でさっさと先に進むようにすると挫折することなくスムーズに基礎学習を終えることができます。
アウトプットを重視する
経験上、書籍や教材でインプットしているだけでは、用語や一定の知識は多少身に付きますが本質的な理解につながらず、いつまでたってもプログラミングができるようにはならないと思います。
そのため、インプットを行ったら併せて必ずアプトプットも一緒にするべきだと思います。
割合としては 7:3 (アウトプット:インプット) ぐらいがちょうどよいかと思います。
先述の「5, 6割理解できたら進める」の話ともつながりますが、半分以上内容を理解できたらさっさと実践してみるとより効率的に身に着けられると思います。
何よりも、そっちの方が楽しいですよね!
ググりまくる
エンジニアは実務において、実装方法に関して調べる場面が多々あります。
特に実装したことのない機能や、新しい技術を使用して実装するときなどはその割合が多くなります。
初学者であれば、なおさらわからないことや知らない知識・用語が多く出てくるかと思います。
ただ、安心してください。
そういった悩みはほとんど全てどこかの誰かしらが解消してくれています。
世界中の誰も遭遇したことのない目新しいエラーを引き当てる方が難しくなっています。
そのため、現在であればChat GPTなどの生成AI等の力も借りられるので、それらも活用しつつ自力で解決して、自力で実装する力をつけることがエンジニアとしてジョインしてからの苦労を減らすことにもつながると思います。
なので、わからなくてもとにかくググりまくって解決する癖をつけておくとよいかと思います。
※本記事は2024年10月時点の内容です。