【エンジニア】サービス開発とアルゴリズムは別物?

こんにちはまくロロです。今回は「サービス開発とアルゴリズムは別物である」というお話しをしたいと思います。

ある程度エンジニアとして、サービス開発に携わってきたけど、コーディングインタビューを突破できる気がしないな。

サービス開発ができるのと競技プログラミングみたいな問題ができることは別物だよ!

アルゴリズムは独自に鍛えよう

サービス開発ができることと、アルゴリズムを鍛えることは別物です。

具体的にサービス開発で用いるスキルを挙げてみるとわかりやすいです。

サービスで開発で主に求められるハードスキル

  • ライブラリの使い方
  • サービス・フレームワークのアーキテクチャーの理解
  • ツールや言語などのベストプラクティスへの理解
  • 脆弱性に対するセキュリティの知識
  • SQLなどのクエリ操作
  • DBなどの設計能力
  • クラウドを始めとしたインフラに関する最低限の理解
  • 正直、業務で競技プログラミングなどで出題される難解なアルゴリズを使う場面はほとんどありません。

    上記に挙げたような知識を深めていけば、ある程度業務はこなせるようになると思います。(フロント、サーバーエンジニアに関しては)

    速度が求められる処理は、アルゴリズムが大切になってきますが、近年どんどん優秀なミドルウェアが登場してきているので、その辺の複雑な処理系は徐々にブラックボックス化していくでしょう。

    したがって、サービス開発とは別に時間をとってアルゴリズムを鍛える練習をするのがおすすめです。

    上記のリストに挙げたように、ロジックを考えるというより、ライブラリやサービスなどに関する知識の方が自然と使う頻度が高いので、業務では身につきにくいと思います。

    サービス開発と並行してアルゴリズムを鍛える訓練を日頃することが大事です。

    アルゴリズムを鍛えるメリット

    次にアルゴリズを鍛えるメリットを知っておきましょう。

    アルゴリズムを鍛えるメリットは主に3つです。

  • サービスの実装が楽になる
  • 論的思考が養われる
  • コーディングインタビューを突破できる
  • 実装が楽になる

    上記では、難解なアルゴリズムはあまり使わないということでした。

    しかし、当たり前ですがサービス開発も論理的にデータ処理や挙動をコードに落とし込んでいく作業です。

    最低限のロジックはもちろん必要です。

    そこで、競技プログラミングなどを通して、アルゴリズムを鍛えることで実装スピードは確実に上がっていきます。

    サービス開発の膨大なコードもライブラリ特有のコードと簡単な論理が複数積み重なって実装されるので、その1個1個を分割して捉えると、最低限のロジックを考える力は求められます。

    論的思考が養われる

    論理的思考はプログラミングだけで必要なものではありません。極論を言うと「生きていく上」で論理的思考を鍛えることは非常に大切なことです

    人生様々な選択がある中で、ロジカルに物事を考えられる力は確実に適切な選択をする上で役に立ちます。

    ロジカルな思考ができると、日々の生活で遭遇する矛盾点に気付きやすくなったりなど、プログラミング 以外のところでも生かせる機会が必ずあります。

    コーディングインタビューを突破できる

    エンジニアとしてキャリアを構築してくために、転職をすることが今後あると思います。

    もちろん、転職の場合は開発経験があるので、以前の会社でどのようなことをしていたかを聞かれることがメインかも知れません。しかし、それに加えてコーディングテストを実施する会社も多いです。

    また、将来アメリカなどの企業でエンジニアとして働く際は、コーディングインタビューが重視されるので、アルゴリズムを鍛えることは必須事項ですね。

    アルゴリズを鍛えるおすすめ教材

    最後にアルゴリズを鍛えるための学習教材を紹介します。主にWebサービスと書籍の二つをとりあげます。

  • AtCoder
  • Paizaトレーニング
  • 世界で闘うプログラミング力を鍛える本 コーディング面接189問とその解法
  • プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
  • AtCoder

    AtCoder公式サイト

    言わずと知れた競技プログラミングの有名サービス、「AtCoder」です。

    こちらは定期的に競技プログラミングのコンテストを開催していて、自分の実力に合ったレベル帯のコンテストに参加してレベル測ることができます

    また、コンテストに備えて沢山の練習問題が無償で用意されています。

    問題も簡単なものから難しいものまであるので、初心者の人でも気軽に始められると思います。

    Paizaトレーニング

    続いては、Paizaトレーニング。こちらも有名なサービスですね。

    Paizaは動画で様々な数理的問題をわかりやすく説明してくれる動画や、実際にコーディングを行ってプログラミング力をチェックしてくれるサービスなどもあります。

    また、プログラミングのコーディング テストを通して、企業にオファーされるなどのサービスもあるので、こちらを利用して転職を考えるのも良いですね。

    世界で闘うプログラミング力を鍛える本 コーディング面接189問とその解法

    続いては書籍です。こちらはGAFAなどの有名IT企業のコーディングインタビューの問題と解放が凝縮されている書籍です。

    Amazonリンク

    実際に有名企業のコーディングインタビューで出題されている問題を扱っている書籍なのでかなり再現性があります

    また、技術面接に臨む上でのノウハウなども載っているいるので、海外でエンジニアとして働きたい方には特にオススメです。

    標準的なアルゴリズとコンピューターサイエンスの知識が必要なので、難易度的には中級向けだと思います。

    ある程度AtCoderなどで基礎力を鍛えてから取り組むのがベターだと思います。

    プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

    こちらも書籍で、中級者向きです。

    Amazonリンク

    実際にテストが用意されており、オンラインジャッジシステムでコードを評価してくれるサービスがついているので理解がかなり深まります。

    アルゴリズムに関する基礎から標準レベルの事項が体系的にまとめられているので、非情報系の方にもオススメです。

    初級者向きの書籍も巷には沢山ありますが、正直初級向けのスキルはネットに落ちている情報で十分収集可能だと思います。なので、今回は、中級者向けの書籍ののみの紹介にしました。

    個人的にはアルゴリズに関する書籍を一冊読んで、あとはAtCoderでひたすら手を動かしながら鍛えていくのがおすすめです。

    まとめ

    今回は、アルゴリズムとサービス開発の相違について、またアルゴリズムを鍛えることのメリットを書きました。

    普段から、アルゴリズムを鍛える癖を意識することが大切であると思います。

    あまり、競技プログラミングなどの問題を解くのが好きではない人も、1日1問必ず解くようにするなどの習慣をつけると良いでしょう

    余談ですが、私は競技プログラミングを行うためだけにPythonを勉強をしました。非常に文法が簡単で、競技プログラミングではC++についで人気使用言語なのです。

    どの言語でアルゴリズムを勉強しようか迷っている方はPythonをオススメします。

    【おすすめ】具体的なGolang勉強手順前のページ

    未経験エンジニア学習順序【アプリリリースまで】次のページ

    関連記事

    1. プログラミング

      Dockerとは

      こんにちは、まくロロです。最近インフラ周りに興味が出てきて、今後do…

    2. プログラミング

      未経験エンジニア学習順序【アプリリリースまで】

      こんにちはまくロロです。今回は、未経験から一人でサービスをリ…

    3. プログラミング

      GCPの基本概要

      今回はGCP(Google cloud platform)について基…

    4. プログラミング

      react-reduxの基礎

      こんにちは、マクロロです!季節も巡り、もうすぐ夏がきますね。。…

    5. プログラミング

      【おすすめ】具体的なGolang勉強手順

      こんにちはマクロロです。前回は、RailsからGoを勉強する際の困難…

    6. プログラミング

      kubernetes(k8s)とは

      こんにちは、まくロロです。先日とある企業さんのk8sハンズオンに参加…

    コメント

    1. この記事へのコメントはありません。

    1. この記事へのトラックバックはありません。

    最近の記事

    PAGE TOP