非エンジニアが調べたプログラミング言語

##書いた理由
- 自分の既存知識が想像以上に古かったため、アップデートも込めて

##そもそもなんでこんなに言語いっぱいあるの？？
- 結論：目的最適化のため
    - 解決したい課題があって、既存の言語だけだと解決が難しい(できるけどめんどい…なら言語を開発した方が楽)  
    - 課題を解決する言語が出てくると、同じ目的を持つ開発者が同じ言語を集中的に使うようになる
    - 開発者が集まると、よく使われる機能や仕組みをライブラリやフレームワークとして開発し、より簡単になる
    - つまり、開発言語にはそれぞれ得意分野がある！弱点を言語に克服させるのではなく、強みを活かしつつ弱点は別の人に補ってもらう感じ。


##バックエンド
###Rust
- 特徴
    - C++の後継言語
    - インストールは簡単(ターミナルにコマンドをコピペでOK)
    - 安全性
    - 速度
    - 並行性
    - 言語仕様が複雑で難しい


###Go
- 特徴
    - Googleによって開発されたプログラミング言語
    - クックパッドとかYou Tubeのサーバー構築に使われている
    - 文法がシンプル(誰が読んでも分かりやすいコードしか書けない)
    - 標準ライブラリが充実している
    - 実行速度が早い
    - 習得が比較的簡単で誰でも理解しやすいコードになりやすい


###Scala
- 特徴
    - オブジェクト指向＋関数型の機能も使える、ハイブリットな言語(エンジニアからするとすごいことらしい)  
        - 呼吸を使える鬼的な
    - Javaとの互換性がある = JavaのライブラリをScalaで使える
    - Javaの便利な機能を使えて、今までに無い速度で開発ができる
    - コードの記述量が少ない(Javaだと20行書くコードがScalaだと1行で！)

###Kotlin
- 特徴
    - Javaとの互換性が100%ある(Scalaのライバル的存在) 亜種みたいな
    - コードが簡潔
    - 安全性が高い(Javaで頻繁に発生するエラーを未然に防いでくれる)
    - ScalaとKotlinどう違うの？？
        - 哲学の違い的な感じ(賃貸vs持ち家みたいな)
        - 実際検索すると英語での記事が検索結果に出てくる
        - 求人数で言うとJava>Scala>Kotlinの順番 

###Elixir
- 特徴
    - ベースは「Erlang(アーラン)」という言語
    - Rubyと似ている(Rubyに影響を受けたとか。開発した人がRailsのコアチームメンバーだったらしい)
    - 障害に強いので大規模なシステムで活躍できる


###Python
- 特徴
    - 文法がシンプルで書きやすく、読みやすい
        - 予約語(紛らわしくなるから決められたタイミング以外あんまり使っちゃいけない言葉)が33ワード。ちなみにRubyは40ワード
    - ライブラリが豊富にある = できることがめっちゃある
    - 「バッテリー同梱」：すぐに使える
- できること
    - 機械学習
    - インターネットのスクレイピング(決まったサイトから決まった情報を定期的に拾ってくること)
    - データの分析
- できないこと：JavaScriptのようなWebサイトの動的な仕組みづくり



##フロントエンド
###そもそもなんでJavaScriptはこんなにフレームワークが多いの？？
- 人気で使っている人が多いから
    - 人気 = 様々な課題解決に使える
    - 課題解決に使う = 用途がそれぞれ異なってくる

###Next.js
- 特徴
    - 読み込み速度が速い
        - JSは元々読み込み速度が遅い
        - 読み込み速度が速いことでSEO対策になる

###Nuxt.js
- 特徴
    - Vue.jsをベースとしたフレームワーク(=フレームワークのフレームワーク)
    - つまりVue.jsの弱点を補った形 (開発メンバーがVue.jsに慣れていたらこのフレームワークが活きそう)
    - 記述は結構独特らしい
    - フロントエンド寄り過ぎる = バックエンドで書いていたこともフロントで書けてしまう = 保守管理がしにくい

###Node.js
- サーバーサイドでもJavaScriptを書ける環境のこと (PythonやRubyのようにPCで動かせるようにしてくれる)
- 正確に言うとサーバーサイドでJavaScriptを実行してくれるプラットフォームのような役割
- Webサーバーとして使用できたり、スマホアプリを作ったりできる

###Flutter
- Googleが開発したフレームワーク。Dartという言語を使って開発する。
- クロスプラットフォーム：iOSやAndroidのアプリを一度に開発できる
- ホットリロード：ソースコードを書いた時点でリアルタイムに変更がアプリに反映される。従来はコードを変えたら再起動しなければいけなかった


###React Native
- Facebookが開発したクロスプラットフォームの開発用フレームワーク
- Reactの弟分にあたる
- ReactがWebアプリのUIを構築する。React Nativeはモバイルアプリの開発。


###まとめ：とにかくエンジニアは怠惰(良い意味で)
- 言語が沢山出てくるのは目的最適化のため。
- エンジニアは既存の考え方に囚われずに、「どうしたらこの目的を解決できるか」を考えている。
- 言語が人気になるかどうかは「シンプルである」という部分は関わってくる。
- 人気であればその言語をベースにしたフレームワークが多く出てくる。

###言語概要
https://note.com/sakamichiyuki/n/ndf4a80f7dc7f?utm_source=pocket_mylist 
https://qiita.com/ksilverwall/items/774b5950b4c373ddc2a4?utm_source=pocket_mylist 
https://qiita.com/ryuichi1208/items/cecd868dfa53c9808777?utm_source=pocket_mylist 

###バックエンド
https://type.jp/et/feature/9445/?utm_source=pocket_mylist 
https://seleck.cc/495?utm_source=pocket_mylist 
https://goworkship.com/magazine/what-can-do-golang/?utm_source=pocket_mylist 
https://www.fenet.jp/infla/column/technology/125-2/?utm_source=pocket_mylist 
https://agency-star.co.jp/column/rust-beginner-book?utm_source=pocket_mylist 
https://blog.codecamp.jp/programming-language-rust?utm_source=pocket_mylist 
https://techacademy.jp/magazine/17334?utm_source=pocket_mylist 
https://www.sejuku.net/blog/91925?utm_source=pocket_mylist 
https://www.fenet.jp/infla/column/engineer/137-2/?utm_source=pocket_mylist 
https://programming-world.net/language/elixir/?utm_source=pocket_mylist 
https://anken-hyouban.com/blog/2021/08/03/elixir/?utm_source=pocket_mylist 
https://www.ossnews.jp/oss_info/Elixir?utm_source=pocket_mylist 
https://tonari-it.com/python-start/?utm_source=pocket_mylist
https://qiita.com/atsukinov/items/e0d04f238465d8c4ac5d?utm_source=pocket_mylist
https://www.pasonatech.co.jp/workstyle/column/detail.html?p=2612&utm_source=pocket_mylist 
https://www.xamnation.com/java-vs-kotlin-vs-scala-which-one-should-you-choose/?utm_source=pocket_mylist 
https://note.com/ar_tama/n/n3ee10c2e56ec?utm_source=pocket_mylist

###フロントエンド
https://qiita.com/erukiti/items/f6e84f3547f9d47318ec?utm_source=pocket_mylist
https://webtan-tsushin.com/stock_201802_framework01?utm_source=pocket_mylist
https://tomomethod.com/javascript-framework-toomuch?utm_source=pocket_mylist
https://ssaits.jp/promapedia/technology/what-is-next-jsreact.html?utm_source=pocket_mylist
https://dev83.com/nuxtjs-about/?utm_source=pocket_mylist
http://tech.innovation.co.jp/2018/11/13/Nuxtjs.html?utm_source=pocket_mylist
https://kanazawa-homepage.jp/column/column-83/?utm_source=pocket_mylist
https://www.acrovision.jp/career/?p=2934&utm_source=pocket_mylist
https://hnavi.co.jp/knowledge/blog/flutter-description/?utm_source=pocket_mylist
https://qiita.com/nskydiving/items/4fcf0dbad923d50601f9?utm_source=pocket_mylist
https://pentagon.tokyo/app/1948/?utm_source=pocket_mylist
https://udemy.benesse.co.jp/development/app/react-native.html?utm_source=pocket_mylist
https://devskiller.com/jp/%E3%83%AA%E3%82%A2%E3%82%AF%E3%83%88%E3%81%A8%E3%83%AA%E3%82%A2%E3%82%AF%E3%83%88%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%81%AE%E9%81%95%E3%81%84%E3%81%AF%EF%BC%9F/?utm_source=pocket_mylist