初心者

プログラミング初学者はこれを見ろ!

傲慢なタイトルでごめんなさい。

質問が来た

お花見の季節が来たのに外出を自粛させられたりなんか極寒の中雪が降ったりしていた時、質問箱に

Annotation 2020-04-01 215508

というのが届いたわけです。140字で答えるには敵が多すぎるのでここに回答したいと思います。

偉大な先人たちの記事

全くの初心者からの機械学習ロードマップ

音楽班紹介Ⅴ ~DTMと制作環境~

自己紹介

こんにちは、箇条書き好きのFastriverです。春から電気情報工学科2年になりました。新歓で特設ページを作った人です。

どうでもいいので本題に行きましょう。

対象

  • これからプログラミングを学びたい人
  • 1,2個プログラミング言語を習得して次を考えている人

つよつよはお呼びでない

何を最初に学ぶべきか?

プログラミング言語は数多あり、それぞれに特徴があります。まして初学者にはそこから自分にあったものを選ぶのは難しいでしょう。そのため私の(基本的にあてにならないと言われている)経験から選定基準をあげていこうと思います。

1. なにをしたいか

個人的にはこれが一番重要だと思ってます。目的意識があるだけでもプログラミングの継続率は十分高くなります。特になにをしようとでもなく「流行っているから」「プログラミング言語を学びたい」みたいな感じで学習に入る人は多いですが、基本で挫折するか、基本を終えてもその後何していいのか分からずやめてしまう、というケースが散見されます[独自研究?]。意識があるのは素晴らしいですが、せっかく勉強するのだから私としては楽しさを分かってもらいたいです。

Webサイト、人工知能、アプリ、ゲーム、音楽…自分の興味の方向でなにか作品を作るために勉強する、としたほうが楽しいし、やることが明確になるので進む方向を決めやすくなります。プログラミングは「道具」であり「手段」であることを忘れてはいけません。

2. 情報は豊富か、周りに経験者はいるか

メジャーな言語の良いところは情報が豊富なところです。偉大な先人たちがその疑問に対する答えを用意してくれています。ググり方については

習うよりググれ

を参照してください。

本文では色々言ってますが、周りに経験者がいるのといないのでは問題解決速度が桁違いです。(私は周りに誰もいなかったのでTwitterで人を捕まえて質問してました…)

こういった人材、経験者や仲間と出会えるのはKCSに入ることの大きな強みだと思っています。とりあえず入って損はないですよ!

あと、情報は豊富であればあるほどいいというわけではなく、初心者が入門することの多い言語などは質の低い記事による検索汚染がなされていることもあります(最近GASで似たような状況になった)。逆にマイナーな言語でも熱心なユーザーが数人いて記事をたくさん書いてくれていると情報が多く流れているということもあります。まあこの辺は初心者にはどうしようもないので気にしなくてもよいです。

3. 学習コスト

当然プログラミング言語によって習得するまでのコストは大きく違います。比較的容易なPythonから、「完全に理解した」が常に偽となるC++まで、色々言われていますが、重要なのは

  • その言語の基本文法を書けるようになるコスト
  • それを使って成果物を作るコスト

の2つです。これらのバランスで最低限の学習コストが算出されます。基本文法が簡単でもそこから成果物を作るのに多大なコストがかかるのであれば中々作品が仕上がりません。また多少難しい言語でも、それに付随するフレームワークが優秀であれば、もはや言語の理解が及んでいなくても作品制作まで進むことができます。そのため目的が決まっているのであれば、フレームワークから選ぶのも十分アリだと思います。

4. 環境構築

なんとプログラミングというのはパソコンを用意すればすぐにできるわけではなく、プログラミング言語ごとにコーディング環境、実行環境を用意せねばならないのです。C++ならコンパイラ、PHPなら仮想サーバーなどです。

Mac、Linuxを使っている人はそこまで困らないかもしれません。ただWindowsは環境構築で躓く確率が非常に高くなっています(Qiitaとかで初手 brew installしてるやつ!!! 許さんからな!!!!!)。環境は人によって異なるので、ここは経験者と一緒にやるのがよいでしょう。

環境構築を楽にする方法:

  1. Linuxを使う -> 真理(WindowsならWSLというものがあるぞ!)
  2. VisualStudio等の神IDE(統合開発環境)を使う -> 容量がすごいが楽。私はVS温室で育ちました
  3. オンラインでやる -> 簡単なものを動かすならこれが楽。

IDEとか大きいものをパソコンに入れていくと環境汚染が進みがち(いつの間にかPythonが4つくらい入ってたりする)なので最初はオンラインのサイトを使うのがいいと思います(Google Colaboratoryとか)。

考慮しなくていいこと

将来の役に立つかどうか

就職などを見据えて始める人も多いと思いますが、遠い未来を見すぎると挫折の原因になります。プログラミング言語は多種多様といえど基本は同じなので1つ習得してしまえば他の言語もすぐに習得することができます。現時点でやれそう/やりたい言語を勉強したほうが効果的です。

学ぶために必要なもの

  • パソコン(できるだけスペックの高いやつ)
  • やる気

以上!

どうやって勉強すればいいのか

さて、どのプログラミング言語を勉強するか決めたところで、どうやって学べばよいのでしょうか。

基本は書籍です。入門書はその言語の大事なところを体系的にまとめてくれているので、しっかり読めば応用が効くようになります。でも高い?図書館とかにもたくさん置いてあるので借りるといいぞ! 読みたい本が無い? KCSには技術書が多くあるし読みたい本があれば部費から買うこともできるぞ!

注意点としては、言語というのは日進月歩なので古い本は往々にして役に立たないということです。なるべく最新のを選びましょう。

プログラミング学習サイト

最近(最近でもないか?)、Progateなどオンラインで特定の言語について学習できるサイトが増えてきています。基本文法をわかりやすく、マイペースに学べるのでとてもいいと思います(私は使ったことがないので詳しくは分からないです)。ただ実際に自分で作りたいものを書かないと中々覚えられないと思うので、一通り回ったら他で実践してみましょう。

公式リファレンス

稀に公式が超有能な場合があります。その時はブログなど漁るより圧倒的に質の良い情報が手に入るので、優先的に見ましょう。ただし基本英語です。

【独断】適当な言語紹介

迷える子羊のために、私の独断で言語の紹介をしていきたいと思います。アルファベット順に並べています。情報が変だったら突っ込んでください。でも僕の悪口は言わないでください。

BASIC

読み方: べーしっく

学習コスト: 低

用途: Excel VBAとか?

あまり書いている人は見かけないが、古くからある偉大な言語。Excelの自動化とかに書ける。Visual BasicにはMicrosoftの後ろ盾があるのでライブラリが豊富。

C言語

読み方: しー

学習コスト: 中

用途: OS制作

これも古くからの言語。実行速度が速いぶん人間にとっては少し扱いづらい。殆どはこれの拡張言語であるC++を使うのかな?私はC言語から入門したが、ポインタで挫折した。入門にはあまりおすすめしない。

C++

読み方: しーぷらすぷらす, しーぷらぷら

学習コスト: 高

用途: OS制作, 競技プログラミング, グラフィック, ゲーム, マイコン, ロボットプログラミング等

C言語の進化系。使える機能が増えている。実行速度が速いので競技プログラミングや、ロボットプログラミングに用いられる。ロ技研で主に教えているのはこれだぞ!スマホアプリなんかも作れるが、道のりは険しい。

C#

読み方: しーしゃーぷ

学習コスト: 中

用途: Windowsのソフト, ゲーム(Unity), スマホアプリ(Xamarin), Web等

巨人Microsoftの主力言語。C++に名前が似ているが、中身はJavaに近い。Rxなどモダンな言語に大きく影響力を与えた機能も多い。.NET Frameworkの一員なので、すごく色々なところで使える。Unityでゲームを作るなら避けては通れない。VisualStudio IDEの恩恵を受けられるので環境構築などはとても楽。

Dart

読み方: だーと

学習コスト: 低

用途: Web(Angular), スマホアプリ(Flutter)等

ここはメジャーな言語を紹介する場では?と言われるほどマイナーな言語だが、周りのフレームワークが有能なので紹介。JavaScriptに近い言語だが、より書きやすくなっている。Googleの推進するFlutterを書くために必要な言語。書きやすくて作品もすぐに作れておすすめ!(宣伝)

HTML/CSS

読み方: えいちてぃーえむえる/しーえすえす

学習コスト: 低

用途: Webサイトのデザイン

Webサイトを作るときに必須の言語。小中高で学んだことのある人は多いと思う。ただ実際のHTML5/CSS3は書き方がほとんど違うのでご注意。厳密にはマークアップ言語と言い、プログラミング言語でないとされる。私は書けません…

HTML(Hyper Text Markup Language)はタグで画面を構築していくやつ

CSS(Cascading Style Sheets)は色とかの見た目を整えるやつです

Java

読み方: じゃば, じゃゔぁ

学習コスト: 中

用途: PCソフト, サーバー, Androidアプリ, ゲーム等

30億のデバイスで走るJava。様々なデバイスで動く。それなりの古参言語だが新しいバージョンでは機能も豊富でモダンな言語にも負けない。Androidアプリ開発にもAndroid Javaが用いられるが、別物と考えたほうがいい(古いし書き方が独特)。学習コストも高くなく他の言語との類似性も高いので、結構おすすめ。

JavaScript

読み方: じゃばすくりぷと

学習コスト: 低

用途: Webサイト, サーバー, GAS等

Javaと名前は似ているが、中身はメロンとメロンソーダくらい違う。Webをやろうとすると逃げられない。基本文法は簡単なので軽く学習するのはおすすめ。ただしそれ以上踏み込むのは非常に危険。これは中間言語である。

※中間言語 … 人間の書くプログラミング言語から機械語に翻訳するときに一度経由する言語。人間には読みづらい。

というのもJavaScriptを書きたくない先人たちは、そのために新しい言語を作ってそれをJavaScriptに翻訳するという荒業に出た。DartやTypeScript、CoffeeScriptなどがそうである。実用にはこれらを使うことをおすすめする。

Kotlin

読み方: ことりん♪

学習コスト: 中

用途: Androidアプリ, サーバー等

Android Javaを書きたくない人のための言語。世界最高峰[要出典]のIDEことIntellij IDEAの全面サポートがあり嬉しい。モダンな言語ともあり色々なテクニックが使える。これからアプリをやりたい人には非常におすすめ。Javaをやったことがある人はすぐ使えるようになると思う。私はインターン先で使ってます。

PHP

読み方: ぴーえいちぴー

学習コスト: 低

用途: Web

よくわからないと思うが「PHP: Hypertext Preprocessor」の略。サーバーサイドで動く言語で、HTMLを動的に生成することで動きのあるWebサイトを作れる。環境構築が多少面倒。去年(2019)のWeb班ではこれを中心に講習をやりました。

Python

読み方: ぱいそん, ぴーとん

学習コスト: 低

用途: 機械学習, Web, 競技プログラミング等

機械学習といえばPython。学習コストが低くanacondaやGoogle Colaboratoryなど優秀な環境も多くライブラリも豊富なので大人気。基本は速くないがライブラリがC++でチューニングされているため全体として実行速度は優秀。機械学習だけでなくWebやソフトウェアにも使えるので便利。ただ中・大規模開発には向かない(読みにくくなるので)。AI班では必然として学びます。

Ruby

読み方: るびー

学習コスト: 低

用途: Web(Ruby on Rails)とか?

日本産の言語。初心者には結構人気らしい(あまり良く知らない)。Railsは学習コスト高めなので注意[要出典]。書き方が結構独特で読めないっす…

Swift

読み方: すうぃふと

学習コスト: 中

用途: iOSアプリ, Macアプリ

林檎さんの言語。iOSアプリ開発するならこれでやったほうがいい。書きやすいと評判です(使ったこと無い)。ただし流石Apple、Windowsだと全然使えないです…

TypeScript

読み方: たいぷすくりぷと

学習コスト: 低

用途: JavaScriptの顔出すところ

MicrosoftによるAltJS。AltJSとはJavaScriptに翻訳できるためJavaScriptを書かなくて済む言語である。情報も豊富なのでJavaScriptに嫌気が指したらとりあえず試してみると良い。

 

目にしそうな言語は一通りあげてみましたが、プログラミング言語は無数にあります。頑張ってお気に入りの言語を見つけてみてください。

さいごに

  • プログラミング言語はたしかに「手段」だが、目的にしたほうがたぶん楽しいので是非プログラミングを目的にプログラミングをしてほしい
  • プログラマは基本みんなやさしいのでリアルでもTwitterでも質問はガンガンやってOK(ググって分かることはググろうね!)
  • KCS入ろう