念願のソフトウェアエンジニアへ!文系でもコンピュータサイエンスを学び成功した実例

今回は、長年経営企画からソフトウェア部門へとキャリアチェンジを成功させたRyoさんに、どのようにプログラミング学習に取り組んだかについてインタビューを行いました。

  • 文系職からソフトウェアエンジニアにキャリアチェンジしたい
  • プログラミングの効率的な学習方法がわからない
  • 非情報系出身のため、経歴に対して不安がある

そんな方にRyoさんの成功体験をお伝えします。

Ryoさん

大学では法学部を専攻。卒業後メーカーに事務系で就職し、経営企画業務を10年ほど経験。コンピュータサイエンスを学習し、組み込みエンジニアとしてキャリアチェンジに成功。

文系出身でプログラミングの基礎がないことが不安だった

――Ryoさん、インタビューをお受けいただいてありがとうございます。それでは、簡単な経歴とプログラミング経験の有無について教えていただけますか?

大学の専攻は法学部です。私大なので受験で数学を使っていないド文系。理系に進まなかったことを後悔しています。大学卒業後メーカーに事務系で就職し、経営企画業務を10年弱やっています。

非エンジニアのため、業務でのプログラミング経験はもちろんありません。社外でも通用するスキルを付けたいという想いから、独学(本、Udemy等)でPythonを数ヶ月勉強していました。

――Recursionを始めたのはどうしてですか?

独学でプログラミングを勉強していたのですが、もやもやの中勉強しているというか、全体感や基礎がないまま進んでいるような感覚を持ち続けていました。そんな中たまたま創業者の方のツイートが流れてきて、「Recursionでコンピュータサイエンスを学べば、プログラミングの土台や基礎が作れる」と思い、その日からすぐ始めました!当時ナイス判断したなと思います。

また、僕は本や動画を見ただけで理解出来た気になってしまうタイプなので、アウトプットが強制的に求められて自分が本当に理解出来ているか分かるとこも魅力的だなと思いました。

――Recursionをどのように利用しているか教えていただけますか?

最初は独学で学んでいたPythonでコンピュータサイエンス基礎コースを上級まで一周しました。その後、JavaScript, Javaでそれぞれ一周しました。現在は今後の業務を意識してC++に挑戦し始めたところです。

最初の一周は普通にテキストを読んで、問題解いていただけでしたが、知識定着のために、テキストの内容をメモ取りながら勉強する等、工夫をしていました。

ソフトウェアエンジニアになるため、コンピュータサイエンスを徹底的に学習

――1日どれくらい学習していますか?

社会人かつ子供がいるので、まとまった時間が取れないのですが、平日は夜1~2時間、休日は子供の昼寝中と夜でだいたい3~5時間くらいやってました。今もおおよそそんな感じです。

――Recursionのカリキュラムの内、どれを一番注力して勉強していますか?

全ての基本となるコンピュータサイエンスの基礎を一番勉強しました。再帰やデータ構造など、本などで読んでもよく分からなかったものが理解できたのがとても嬉しかったです。他の項目だと、デザインパターンは個人的にとても好きでマスターしたいのですが、まだ僕には難しくて、全てはクリアできていません。

――コンピュータサイエンスプロジェクトの進捗状況はどうですか?

1~4と6は終わりました。Vueコースを一通り終えて、今はDjangoコースに取り組んでいます。ブラックジャックはまだ出来ていないので、いずれ挑戦したいと思っています。

――ポートフォリオを作っていますか?あるならどのような点を意識して作りましたか?

ポートフォリオは、他の方と比べると完成度は低いのですが、例えばプロジェクト6はデザインパターンを活用し、オブジェクトに責務を与え、条件分岐をなるべく減らし、機能拡張に柔軟に対応出来るような設計を意識しました。

――Recursion以外の他のサービスを利用しましたか?

通勤中のインプットとしてUdemy講座を購入して学んだりしています。あとはRecursionをやり始めて「コンピュータサイエンスを学ぶには高校数学レベルが必要」と感じたので、スタディサプリで数IA~数Ⅲまで勉強しました。

本については、色々読んだので一部ではありますが、個人的なおすすめは以下です。

――Recursion以外にネットワークなどWeb周りの知識を勉強しましたか?

基本的なところは、以下の本を読んで勉強しました。

――Ryoさんはチーム開発にも参加されましたよね。参加してみてどうでしたか?

チーム開発はRecursionで学んでいるメンバーとチームを組んで、与えられた課題に取り組む活動です。個人開発では経験出来ない、より実務に近い状況で開発にチャレンジ出来るメリットがあると考えています。

例えば、環境構築は個人であれば自分が開発できれば良いですが、チーム開発だとPCやOSの異なる全員が開発できる環境構築をしなくてはいけません。実際僕のチームもそこで詰まりました。そうすると、やはりDocker勉強した方が良いかなとか色々実感できます。

またGitに関しても、個人だとGithubに草生やすだけにpushしているだけでしたが、チーム開発だとメンバーからのプルリクエストをレビューしたり、時にコンフリクトを起こした際の対処など個人では出来ない経験ができます。また、納期も設定されているため、時間と機能のバランスも考えながら開発する必要があります。

このように色々と経験できるチーム開発ですが、一番のメリットは何より楽しいということです。チームで色々議論して、学んで、悩んで、課題をクリア出来た時の爽快感は癖になります。

Recursionで学習し、公式ドキュメントが理解できるようになった

――Recursionを始める前と比べて何ができるようになったと感じますか?

いずれも絶対値としてはまだまだで、過去の自分と比較して出来るようになったことですが、特に感じるのは以下2点です。

  • 「より良いコード(計算量/可読性等)とは」を考えることが出来るようになった
  • 「ドキュメントやコードを突き詰めて調べていけば理解できるはず」という自信がついた

1つ目については、例えばこれまでだったらfor文のネストで無理矢理解くような問題も、一度立ち止まってハッシュマップは使えないか?と考えるなど、様々なデータ構造を知っているからこそ、選択肢が増えたと思います。また、関数の分割やDRYもコードに反映させることができるようになりました。

2つ目については、最近Djangoを学んでいますが、ググってすぐ解決しない時はドキュメントをしっかり読むことで、解決できることが増えてきました。公式ドキュメントは単語自体が難しいことが多いと思っていましたが、Recursionで一通りコンピュータサイエンスの用語に触れてきたからか、段々読めるようになってきました。また、抽象化されたクラスの挙動が分からないときも、OOP(オブジェクト指向プログラミング)を学んだからこそ、大元のコードまで戻り、挙動を理解することが出来るようになったと思います。

コンピュータサイエンスを学習したことが評価され、念願のソフトウェアエンジニアへ

――Ryoさんの転職活動についても教えてください。念願のソフトウェアエンジニアとしての仕事が決まったそうですね。おめでとうございます。新しい業務内容の概要を差し支えない範囲で教えていただけますか?

社内でソフトウェアエンジニアの公募があり、そこに応募し選考を通過しました。今夏からソフトウェアの職場に異動となります。正式な部署・業務は未定なのですが、組み込みエンジニアになる可能性が高いです。そうなるとC言語もしくはC++を使うことになります。

――採用試験はどのように行われましたか?また自分のどんなところをアピールしましたか?

面接はなく適正試験と書類だけの評価でした。コーディング試験もありません。僕は事務系なので、基本的に技術系職場への異動はありません。実は公募も技術系が対象でしたが、これまで学んできたことをしっかりアピールすれば可能性はあると思い挑戦しました。

具体的には以下3点アピールしました。

  • 継続的に学ぶ習慣があり、これからも学び続ける自信がある
  • 単にプログラミングを勉強しているだけでなく、根幹のコンピュータサイエンスを学んでいる
  • 学んできたことに対する成果物がある(GitHubのURLを書類に記載しました)

――自分のどんなところが評価されたと感じましたか?

フィードバックはないので本当のところは分からないのですが、全く違う職場に異動するので、学び続ける姿勢が評価されたのかなと思っています。また、学問として確立されているコンピュータサイエンスを学んでいることにより、事務系でもついていけると感じてもらえたのかなと考えています。

――今後仕事としてどうしていきたいとお考えですか?

僕はこれまで経営に近い場所で業務を行っていたため、新たな職場でソフトウェアのスキルを身につけ、将来的にはソフトウェアを用いたビジネスを創出、社会に新たな価値を提供出来るようなことができれば良いなと考えています。また、いずれは海外で働きたいです。

――最後にRecursionを始めたばかりのユーザーさんに向けて、やっておいた方が良いことをアドバイスしていただけますか?

やっておいた方が良いことではないですが、焦らずコツコツ進めることが重要かなと思います。自分への戒めも込めてですが、周りの皆さんが先のコンテンツを進めていると、自分も早くそのコンテンツをやりたいとなって、理解することではなく、進めることが目的になりがちだと思います。

ゆっくりでも理解しながら進めることが、最終的には強いエンジニアへの近道なのかなと思います。

――Ryoさん貴重なお話を聞かせていただいてありがとうございました。