「目的未定でも覚えておくと役立ちそう」と思うプログラミング言語

「目的未定でも覚えておくと役立ちそう」と思うプログラミング言語:


TL;DR

というかタグで終わってた。

とりあえずこのリストだけ見てページ閉じても差し支えない。


  • Go言語 ... 特に「サーバー」という単語に関わる人。

  • JavaScript (ES2016+) ... 特に「Web」という単語に関わる人。

  • Swift, Kotlin, C# ... スマンホホ三銃士。
基準は主に

  • 今から修めても武器にできそう。
  • 習得が前提のような業種がある。
  • 数ある代替手段の中でも、2018年末に選ぶならコレがいいと筆者が考える。
など。詳しくは本文に続ける。

Python を入れようか迷ったが、機械学習や AI の話題はただの流行り廃りな気がする派なので外した。

ちなみに例のアレは、元記事のタイトルと、マサカリ記事しか読んでない。


はじめに

Qiitaは、プログラミングに関する知識を記録・共有するためのサービス なので

単なるポエムにならないよう、昨今の技術動向を絡めて評価意見を添えつつ書きたいと思う。

「目的未定でも」とタイトルでうたってはいるものの、しっくりこない場合は

  • 良質な開発案件を勝ち取るために
  • 技術の前線を走るような会社に就職するために

  • #本当にあったIT怖い話 のような目に遭わないで済む会社に転職するために
  • これから開発業界に入ろうとする学生さんへの知識インデックスとして
などを目的として据えると、より自然に読めるかもしれない。

なお、あくまで「役立ちそうなプログラミング言語」についての意見の1つであり、

これらの言語を極めたからといって「システム開発者」として一流になれるという話ではない。

プログラミング言語は、目的を実現するための道具のひとつである。

一流になりたければ、それを使ってどのように書くかという「設計思想」も必要になってくるし、

作り上げたアプリケーションの運用手法や、開発サイクル自体の手法も知ったほうが良いと思う。

お客の求めるものによって、その時々で要件に合致するプログラミング言語は異なるであろうし、

そもそもシステムを作らずに既成品とその使い方を紹介したほうが喜ばれる場合もあるかもしれない。

とにかく、「システム開発」という業種をやるために必要な知識はたくさんある。

この記事も、山ほどある知識・意見のうちの1つにすぎない。

…なので、この記事を読んでいて「は?」「いやいや…」と思った部分があったら
その文章の末尾に「~と筆者は思っている」と脳内補完していただきたい。


選出にあたって考えたこと

「プログラミング言語を使って何かを開発しよう(※)」と思った時、パッと思いつくだけでも次のようなジャンルがある。

そもそもこの一文、目的と手段が逆な点は置いといて。)


  • Web フロント開発

    • 求人要項では「Web サイト制作」とか言われるかもしれないやつ。
    • URL 開いたときに目に見えるページを開発するのに時間と力を注ぐタイプの仕事。

  • ネイティブアプリケーション開発

    • iOS/Android アプリ、Windows アプリ、macOS アプリなどの開発をする仕事。

  • クライアント&サーバーシステム開発

    • スマホアプリ、Web 通販サイト、業務ソフトなどの「クライアントサイド」と、その通信先の「サーバーサイド」を開発する仕事。
    • 上の Web フロント開発・ネイティブアプリ開発と重なる部分も多い。
    • 「総合的なシステム支援」を目的とし、結果としてこのタイプになる仕事もある。SI事業とか受託開発とか。
当然ジャンルごとに役立ちそうなプログラミング言語は異なってくるので、

これを念頭に置きつつ選定し、それぞれ紹介することにした。


役立ちそうなプログラミング言語


Webフロント開発

ちょっとしたアプリなら Web で何でも出来る時代になってきた。

Electron や React Native を使えばデスクトップやスマフォアプリ化もできる。Discord とか凄い。

HTML5 や関連ブラウザ API の知識ももちろん必要になるが、本稿ではプログラミング言語ということで…


JavaScript (ES2016+)

役立つと言うか、避けて通れない。

WebAssembly (wasm) によって選択肢が増えそうな気配はあるが、wasm は乱暴に言えばネイティブアプリをブラウザ上に持ち込む技術であり、2018年末現在ではまだ各ブラウザのサポートも十分とは言えない。

わざわざカッコ書きしたように、 ES2016 以降の仕様をしっかり追いかけ続けたほうが良いと思う。

ES2015 以前は要らないというワケではなく、古いものと新しいものの両方を知っておく必要がある。

ES のエディションによってブラウザサポート状況が異なったり、

それを補完するためのライブラリがあったりするので、あわせてチェックしたい。

もしかしたら「Web サイトコーダーなのにプログラミング言語なんて」と思う人がいるかもしれないが、

現在の Web フロント界隈において「良質」とされる開発をするには、

JavaScript および周辺ライブラリを駆使して書かれたコードを読解できたほうが良い。

さもなくば

「情報どおりツールを入れて実行してみたけど、正直何が起こっているのか分からない」

「せっかく作ったサイトがうまく本番配備できなくて、どこでコケているのか分からない」

といった目に遭うのではないかと思う。

JavaScript および ES の各種記法は、それくらい当たり前のように利用されている。

Web フロント界隈の仕事に限って言うと、これ単体では武器になりにくい。

本稿においては蛇足になるが、次のようなツール類・ライブラリもおさえておくと良いと思う。


ネイティブアプリケーション開発

事業やサービスの立ち上げに伴って、ネイティブアプリ(特にスマホ)を開発することは多い。

そういった仕事もまだまだたくさんあるし、これからも増えていきそうなので、役立つと思う。


Swift

iOS, macOS アプリを開発する場合はこれ。

より古い Objective-C というのもあるが、いまから勉強するなら Swift でいいと思う。

ただ、ObjC が読めて損をするということもないので、知っておく分にはプラスになる。


Kotlin

Android アプリを開発する場合はこれ。昔は Java が主に使用されていた。

Android については、未だに Java で保守されているライブラリを使うケースも

そこそこあるように思えるので、Kotlin だけでなく Java も読めるようになっておくといいかもしれない。

基本的には「Java をより良くしようとした言語」なので、両方知っておくと理解も深まると思う。


C#

Windows アプリを開発する場合はこれ。

また Windows アプリ以外にも、Xamarin を使用して iOS/Android アプリの開発もできる。

適切に利用すれば、iOS/Android それぞれに最適な UI を提供しつつ、コードを C# に一本化できる。

ゲームアプリのように高度なパフォーマンスチューニングを要するケースでは適さないかもしれないが、

iOS/Android のアプリを別々に開発するよりも工数(所要時間)を少なく収めることができる可能性が高いため、

C# と Xamarin を扱うことができれば武器になると思う。


クライアント&サーバーシステム開発


Go 言語

これは正直「せやろか」「ホンマか」「攻めすぎ」と思われる人が多いかもしれないが

今回のお題は「覚えておくと役に立ちそう」なのでこれにした。

具体的には、次のような理由による。

  • Java / PHP / Ruby / .NET などの人材は、玉石混交ながらも既にたくさんいる。
  • 開発対象のシステム自体よりも、開発サイクルや運用サイクルが原因で大炎上することが多い。
  • 大炎上を防ぐ手段として、アジャイル開発手法や、コンテナ技術、 DevOps / BizDevOps() が盛り上がっている。


    • 蛇足ながら「役割の垣根を取り払い、プロジェクト関係者が文字通り一丸となって、合理的に課題を解決していくこと」が DevOps / BizDevOps であると個人的には思っている。
  • そういった手法を実現するツールは、Go 言語で作られているものが少なくない。
クラサバシステム開発案件に関わりそうな Go 製ツールで有名どころと言えば、Docker, Kubernetes, Terraform などが挙げられる。

こういったツールは成長が早く、バグっていたり、ドキュメントが追いついていなかったりすることもある。

実際に使ってみると GitHub リポジトリ上の Issue やコミット詳細を読みにいく機会も多く、「Go 言語をちゃんと読めればなぁ…」と思うことが少なくない。(私はまだ読めないのだが)

Go 言語は、 Java / PHP / Ruby などに比べればまだまだ人材が少ない。

なので、競争力的な意味でも技術的な意味でも、きっと役に立つと思う。


以上。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)