以下はjavinpaul( Webサイト / Twitter / Facebook / dev.to )による記事、11 Essential Skills Software Developers should Learn in 2020の日本語訳です。
なおリンク先URLは元記事のままであり、和訳にあたり変更などは行っていません。
11 Essential Skills Software Developers should Learn in 2020
注意事項:この記事にはアフィリエイトリンクが含まれています。
この記事に記載されているリンクを踏んで製品やサービスを購入すると、私が利益を受けとることがあります。
ソフトウェア開発を始めてしばらくすると、優れたプログラマになるには何をすればいいのかという考えが時によぎるでしょう。
より良い開発者になるために、2020年には何を学ぶべきでしょうか?
コンピュータサイエンス学部の学生は、今後のキャリアのために事前に何を学べばよいでしょうか?
何が新人開発者に期待されているスキルであるかという質問は、Facebookやメールで私をフォローしている生徒から最も多く受ける質問のひとつです。
彼らのほとんどは大学を卒業したばかりで、インターネットのおかげで大量の情報にアクセスできるようになったため、就職面接に備えて事前にプログラミングのスキルを習得したいと考えている初心者です。
この記事では、2020年のプログラマ全員が知っているべき、あるいは学んでおくべき11のスキルを紹介します。
ここにはC++やJavaのようなプログラミング言語、データ構造やアルゴリズムといったコンピュータサイエンスの基礎、GitにDockerにKubernetesのような一般的に重要なツール、AWSとGCPとMicrosoft Azureなどのクラウドコンピューティングの概念とプラットフォーム、SQLにUNIXのような不朽のスキル、EclipseにVisual Studio Codeといったエディタ、VIMやNotePad++といったテキストエディタ、そしてその他の技術が含まれています。
このリストは決して完全なものではありませんが、プログラマが知っておくべきスキルの良い出発点となるでしょう。
ソフトウェア開発者としてのスキルアップを目指し、プログラミングの仕事を探しているのであれば、このリストはあなたが競争に勝つためにできる学びと改善点です。
Top 11 Essentials Skills for Software Developers in 2020
さっそく本題に入ると、ここに並んでいるものは、全てのプログラマが知っておくべきだと私が確信しているスキルたちです。
これらは不可欠なスキルであり、長期的に役立ちます。
時間、お金、労力をこれらに投資することが、やがてキャリアとなってあなたに返ってくるでしょう。
1) Containers (Docker and Kubernetes)
全てのプログラマ、ソフトウェア開発者、データサイエンティスト、プロジェクトマネージャは、DockerおよびKubernetesなどのコンテナ技術について知っておくべきです。
Dockerなどのコンテナは、統合環境でアプリケーションをテストするのに役立つだけではなく、デプロイのプロセスも簡略化できることが実証されています。
Dockerを使うと、アプリケーションの依存の全てを一発で素早くデプロイすることができます。
またプロセスの分離も提供します。
さらにオーケストレーションツールであるKubernetesはそれらを次のレベルに引き上げ、コンテナの管理を行うことが可能になります。
これはつまり、アプリケーションのスケーラビリティを心配する必要がなくなることを意味します。
Kubernetesがそれを自動的に行ってくれるからです。
2020年に新しいスキルを学びたいのであれば、まずはDockerとKubernetesから始めることをお勧めします。
これはあらゆる規模の企業が最も求めているスキルであり、現在の仕事に役立つだけでなく、次のポストを狙ううえでも役に立つでしょう。
コンテナの重要性をすでに認識しており、DockerとKubernetesを学ぶためのリソースを探しているのであれば、Stephen Griderによるベストセラーをお勧めします。
Docker and Kubernetes: The Complete Guideは、このふたつのスキルを学ぶための最良のコースのひとつです。
2) Cloud Platform (AWS, GCP, or Azure)
コンテナ以外で2020年に全てのソフトウェア開発者とデータサイエンティストが学ぶべき技術は、クラウドです。
あらゆる企業が、コスト削減とスケーラビリティのために環境をクラウドに移行しています。
すなわち、遅かれ早かれクラウドネイティブの知識が必要になってきます。
また、データサイエンス・機械学習、そしてAIの開発にも必要不可欠です。
これらのような、リソースを大量に消費するモデルが必要とするマシンパワーを提供できる唯一の環境が、クラウドだからです。
AWS、GCP、Azureといったクラウドプラットフォームを知っておくと、現在の仕事だけではなく、次の案件においても競合他社より一歩先を行くことができます。
全てを学ぶ必要はありません。
実際、一つでも学んでおけば知識を流用することができます。
最初に学ぶものとしては、最もシェアを持っていて成熟したプラットフォームであるAWSを選ぶとよいでしょう。
そこにはAWSの知識を持つ開発者とシステム管理者への強い需要が存在します。
学習リソースが必要であれば、Cloud GuruのRyna KroonenbergによるAWS Certified Solutions Architect - Associate 2020をお勧めします。
3) Data Structure and Algorithm
プログラマになるのであれば、データ構造とアルゴリズムについて知らなければなりません。
逃げ場はありません。
プログラミングの仕事の面接でも最も重要なトピックのひとつであり、そしてarray、linked list、map、setといった基本的なデータ構造は知っておかなければ、まともなアプリケーションを作成することはできません。
そのため、全てのプログラマは、コンピュータサイエンスの学習コースを受け、データ構造とアルゴリズムの学習に真剣に取り組む必要があります。
もしあなたは独学でプログラマになったのだとしたら、今からでもデータ構造とアルゴリズムを学習しなおすべきです。
実際、多くのブートキャンプでは、最初にデータ構造とアルゴリズムを教えます。
データ構造とアルゴリズムも独習したいというのであれば、Data Structures and Algorithms: Deep Dive Using Javaのコースを受けることが適切でしょう。
4) A Version Control Tool (Git)
ソース管理はコードを保つために使用されます。
コーダーやソフトウェア開発者になりたいのであれば、GitやSVNといったバージョン管理ツールを知っておかねばなりません。
幸いなことにGitとGitHubがシェアを独占しており、7割以上の企業がGitを使っています。
従って、Gitを学ぶだけでバージョンコントロールを学んだと言うことができます。
Gitをうまく学ぶためには、branchやmergeなどのバージョン管理にかかわる概念と、実際のツールの使い方を同時に学習する必要があります。
初心者であれば、The GitHub Ultimate: Master Git and GitHubがGitを始めるのに適切なコースです。
5) One Text Editors (VIM)
一日に一度もテキストエディタを使用しないプログラマはいません。
テキストエディタは、プログラマではないPCを使う人にとっても必要不可欠なツールのひとつです。
私は主に、WindowsではNotePadを、LinuxではVIMを使ってきました。
しかし最近では、IDEに近い高度な機能まで提供するSublimeやNotePad++など、非常に多くの選択肢が存在します。
お気に入りのエディタを見つけ、ショートカットに習熟することに時間を費やすことをお勧めします。
生産性となって返ってきます。
VIMが気に入ったならば、Jason CannonによるVIM MasterClassがVIMスキルを学ぶのに最適なコースです。
6) IDEs (VSCode or IntelliJIDEA)
EclipseやVisual Studio CodeといったモダンIDEは、プログラマにとって最も重要なツールです。
C、C++、C# プログラマの選ぶべきIDEはVisual Studio一択で、Python開発者にとってJupiter Notebookは日々良くなってきています。
Javaプログラマには、Eclipse、NetBeans、IntelliJという3つの選択肢があります。
私のお気に入りはEclipseですが、IntelliJも悪くありません。
IntelliJを選択したのであれば、IntelliJ IDEA Tricks to Boost Productivity for Java Devsを見てIDEにより詳しくなりましょう。
7) Database and SQL
SQLは古典であり、30年以上前から存在し、そして今後も30年は続くでしょう。
データベースが遍在していることを考えると、プログラマはSQLと共に、正規化やテーブル設計などデータベースの重要な概念にも親しんでおくことが求められます。
世界にはOracle、MySQL、Microsoft SQL Server、PostgreSQL、そしてその他諸々多数のデータベースが存在しますが、ひとつでも知っておけば十分です。
重要なのは、データベースの使い方に慣れておくことです。
データをINSERT / UPDATE / DELETEするSQLを記述する方法を知っておく必要があります。
集約関数など高度な概念の知識は大きなボーナスであり、それらを知りたい場合はThe Complete SQL BootCampのコースを受けるとよいでしょう。
8) UNIX (Linux)
SQL同様、Linuxも時の試練に打ち勝ってきました。
30年以上前から存在しており、そして今後も存在し続けるでしょう。
ほとんどのプログラマはLinuxマシン上で作業を行う必要があるため、Linuxコマンドに関する知識は非常に役立ちます。
ファイルを検索し、CPUとメモリの使用量を確認し、システムで何が起こっているのかを把握し、基本的なタスクと高度なタスクを実行することができます。
あなたの仕事の効率をぐっと上げてくれます。
Linuxコマンドを学習したい場合は、Learn Linux in 5 Days and Level Upのコースでキャリアを積むとよいでしょう。
9) An OOP Programming language (C++, Java or Python)
プログラマたるもの、C++かJavaかPythonかJavaScriptか、とにかく何らかのプログラミング言語は知っている必要があります。
何でも好きなものを選んでかまいませんが、個人的には少なくともJavaは知っておくべきだと考えています。
始めるのが簡単であるというのが初心者にとって重要である理由です。
またJavaは非常に強力であり、実質的に何でもできます。
Web開発からビッグデータまで、あらゆることを行うライブラリが存在します。
Javaを学習することにしたのであれば、きっとThe Complete Java MasterClassが最適なコースです。
10) Networking basics
こんにち世界は相互接続されており、どこにいても、学校で大学でオフィスで、LANでのインターネット接続をWifi経由で見つけることができます。
こんにち作成されるアプリケーションもそのほとんどがスタンドアロンではなく、ネットワークを介してリクエストをサーバに送信する、クライアント/サーバ型のプログラムです。
クライアントは、世界中のどこからでもアプリケーションにアクセスすることができます。
肝心なのは、アプリケーションを理解し、開発し、サポートするには、ネットワークの基礎を理解している必要があるということです。
初心者のよい出発点として、The Complete Networking Fundamentalsコースに参加することをお勧めします。
11) One Scripting language
8項目目ではプログラミング言語を学ぶように勧めましたが、こちらでさらに別のスクリプト言語を学習します。
なぜでしょう?
ひとつのプログラミング言語をスクリプト言語としても使うことはできませんか?
世の中にはたしかに、OOPとスクリプティングの両方に適したPythonのような言語も存在します。
しかしあなたがC/C++やJavaを選んでいたとしたら、これらはPythonやPerlの開発者ができるように迅速に何かをアウトプットすることはできません。
Pythonを使うのであれば、The Complete Python Bootcampを受講するとよいでしょう。
スクリプト言語を使うと、プログラミングの世界でよくでてくるちょっとした問題を解決するツールやスクリプトを簡単に作成できます。
ある程度の知識があれば、よくある作業はすぐに自動化することができます。
一石二鳥を狙うのならば、Pythonを学ぶのがおすすめです。
学習リソースがさらに必要であれば、フリーのコースもたくさん存在します。
以上、全てのプログラマが知っておくべき11のスキルです。
コンピュータサイエンスに進んだり、プログラマになりたい人は、このリストを参考に、成り上がるためのツールやスキルを見つけることができるでしょう。
ところで、プログラマが知っておくべきことについてもっと知りたいのであれば、多くのガイダンスが存在します。
たとえば97 Things Programmer should knowのような優れたアドバイスを、インターネットで見つけることができるでしょう。
あなたが気に入るかもしれない、ほかのプログラミング記事を紹介しておきます。
・全プログラマが読むべきアルゴリズムの書籍10冊
・フロントエンド開発者ロードマップ
・プログラミングスキルを上達させる10のヒント
・全プログラマが知っておくべきOOPの設計原則10選
・すべてのソフトウェアエンジニアが知っておくべき10のツール
・2020年のJava開発者ロードマップ
・高給を稼げるキャリアオプション10選
・より良いJava開発者になるための10のヒント
・アルゴリズムとデータ構造の面接質問100+
・Javaプログラマのためのユニットテストツール10選
この記事を読んでくれてありがとう。
役に立ったと思ったら、友人や同僚に共有してください。
質問やフィードバックがあればコメントください。
コメント欄
「これは2020年と関係ある?全ては2019年にも、2018年にも有効だ。」「せやな。長期に渡って色褪せない技術を選んだ。」
「SQLはあまり好かれてないしORMに隠されてるけど、いつかは直接SQLを触ることになる。」
「今年はコンテナとクラウドが伸びる、間違いない。もし間違ってたら木の下に埋めてもらっても構わないよ。」
「PyCharmが好きすぎて他のIDEに浮気できない。」「PyCharmもいいけどPython専用だからね。」
「VSCodeは優れたエディタだがIDEではない。」「いやIDEだろ。」
「コンテナは重要だけどDockerは複雑すぎていらない。vagrant使ってる。」「VagrantはコンテナではなくVMプロビジョニングツール。Dockerはもはや標準技術。」
「Atomはいいぞ。」
「型破りな提案だけど、今からCOBOLはどうよ。金融や小売を支える220億行のコードがあり、別言語に移行する見込みもなく、そして現在のCOBOL開発者はみな高齢で有限。」「COBOLを学ぶとしたらどこから始める?」「こことか。」
感想
まあアフィリエイト紹介記事なのですが、今後学んでおくべき知識の方向性としては参考になる記事だと思います。
特にアルゴリズムとデータ構造とかネットワークの基礎あたりは、昨今のスクリプティング全盛時代においてはすっ飛ばされがちですからね。
これらを全部学ぼうとすると範囲が広すぎますし、完璧に理解しろとか言われても無理ですが、最低限ある程度の概念は知っておくべきだと思います。
さて学ぶ順番ですが、個人的にはスクリプト言語とOOP言語は逆の方がいいと思います。
というか私が真っ先にC++とJavaに手を付けて死んだ経験があるというだけですが。1
初心者にはコードを変えたらすぐに結果が出てくるという経験が必要なのです。
あとJavaは今後ライセンス的にいろいろと面倒なので、単純に避けた方がいいと思います。
結局私はPHPから入りましたが、今なら最初はJavaScriptでいいんじゃないですかね。知らんけど。
今回紹介されているコースは何れも1-2万円程度で手を出しやすく、評価も高いようなので、定価で買っても損はしないと思います。
ただ、Udemyは時折99%オフとか無茶苦茶なセールをやっていたりするので、どうしても急ぎというのでなければセールまで待つのも手かもしれません。
個人的には、あんまりこういうセールを乱発するのは自ら価値を貶めている気がしてあまり好きではないんですけどね。
まあSteamで9割引きを乱獲してる私が言えた義理ではありませんが。
でもFactorioは定価で買った。
-
OOPは、ある程度プログラミングに慣れないとOOPという概念自体がよくわからない。C++(というかC)はポインタが理解できずに死んだ。今でもよくわからない。JavaはEEとかSEとかSDKとかJREとかJDKとかがわからずに死んだ。今でもよくわからない。 ↩