こんにちは
本ブログにたどり着く方で、このような記事に興味がある方がいるかは疑問ですが、万年筆が欲しいので書いてみます。
この言語のこういった思想が好き、コンセプトが好き、仕様が好き、といった技術的なことは書きません。
私個人が、どういった経緯でその言語を触るようになったのかということを書きます。
あとは、今からプログラミングを始めてみたいといった方向けに、アドバイス的なこともちょろちょろっと書いておきます。
結論
プログラミング言語っていろんなのがあってそれぞれ得意不得意もあるけど、一番大事なのは何を作りたいか・成し遂げたいかということです。
目的ありきのツールです。何か一つの言語の関数や特性をマスターしたところで、良いものが作れるかどうかは全く別問題です。
私がプログラミングを人に教えるときに一番大事にしているのは、何をやりたいか?ということを言語化させることです。
ぜひ、プログラミングできるようになりたいという方は、なんとなくメジャーな言語の勉強をするのではなく、実現したい事を具体的にメモ帳でもいいのでまとめてみてください。
一番の近道です。
では、なんとなく手を付けていった順番で書きますね。
どんな言語かの参考程度にFIZZ-BUZZ問題のコードもつけておきます。
1.C言語(小学校時代)
#include <stdio.h> int main(void) { int i; for (i = 1; i <= 100; i++) { if (i % 3 == 0 && i % 5 == 0) { printf("FizzBuzz\n"); } else if (i % 3 == 0) { printf("Fizz\n"); } else if (i % 5 == 0) { printf("Buzz\n"); } else { printf("%d\n", i); } } return 0; }
私が人生で一番最初に触れたプログラミング言語です。
触った経緯は、当時小学校高学年ぐらいでゲームを作りたいなぁと考えとりあえず最もメジャーだったC言語に手を出した感じです。
勉強には以下のサイトを利用しました。
9cguide.appspot.com
この時勉強したことは別に何にも役に立ってません。(苦C自体は素晴らしいと思います)
HelloWolrdやソートなど、動くことに嬉しさはありましたが、これで何ができるんだ?という感じでした。
当時の過ちとしては、プログラミングを勉強したら無条件で何か作れるようなると考えていたことです。
作りたいものを1つ具体的に決め、それを実現するためにはどの言語が一番楽か?などで勉強を進めるべきです。
ここでいう楽というのは、文献がどれだけあるかということです。
C#やC++におけるゲーム開発の文献は多くあっても、R言語などでゲーム開発の文献なんかないですよね?
どんな言語でも作れないことはないと思いますが、文献は多い方がいいに決まってます。
2.javascript(中学校時代)
function fizzbuzz(){ for(i=1; i<=100; i++){ if(i%3 === 0 && i%5 !== 0){ console.log('Fizz'); }else if(i%3 !== 0 && i%5 === 0){ console.log('Buzz'); }else if(i%3 === 0 && i%5 === 0){ console.log('FizzBuzz'); }else{ console.log(i); } } } fizzbuzz();
2つ目はjavascriptです。
C言語でゲームを作るのは難しいらしいぞ、ということでUnityに目をつけました
当時Unityでの開発は、javascriptが主流でした。
勉強に使った本は以下のものです。(広告ブロックしてると表示されないかもです)
本屋で見かけて、よくわからんけどUnityでゲームが作れる!と思って購入しました。
結果としては、つまらなくて続きませんでした。
というのも、C言語の時と同じで具体的な作りたいゲームイメージが無かったからですね。
参考書通りに進めると丸い球体をキーボードで動かせるようになったりするのですが、だからなんなんだろうと当時は思っていました。
この時もまだプログラミングを勉強すれば何かすごいものが作れるようになるという思考でした。
ちなみに、javascriptのことをJavaと書いたり発したりしてはいけません。
別物です。
3.BASIC言語(高校時代)
10 I=0 20 I=I+1 30 IF I%15=0 PRINT "Fizz Buzz" : GOTO 40 IF I%3 =0 PRINT "Fizz" : GOTO 20 50 IF I%5 = 0 PRINT "Bizz" : GOTO 20 60 PRINT I:GOTO 20
高校時代に情報の授業で使っていたので一応入れときました。
これって何に使われるんでしょうね?わかりません。
学習用の言語だということを授業で聞いたような聞いてないような気がします。
と思って調べたら、教育用に開発されたとのことでばっちり学習用でした。
1964年、米国ダートマス大学にて、数学者ジョン・ケメニー(1926年-1992年)とトーマス・カーツ(1928年 - )により、教育用などを目的としてダートマスBASICが開発された。
書き方としてはアセンブラのような低級言語寄りでした。
今思うと、プログラミングをなんとなく勉強したいという方は低級言語をした方が良いのかもしれませんね。
今で言う、プログラミング的思考能力が身に付きやすいと思います。
(オブジェクト指向はまた別ですが・・・)
4.Python(高校~大学時代)
for i in range(1, 101): if i % 15 == 0: print("Fizz Buzz!") elif i % 3 == 0: print("Fizz!") elif i % 5 == 0: print("Buzz!") else: print(i)
みんなご存じPythonです。
機械学習とかAIってかっこいいよね。というノリで触りました。
今現在、趣味でも実務でも一番使用している言語です。
何がいいって、Jupyter Notebookとフレームワーク・文献量の多さです。
とにかく手軽にデータの分析や自動化ができる
主に私は、Webスクレイピング・データ分析・機械学習、Webのバックエンド処理・・・
割と何でも使っています。文献の多さは正義です。
5.C#
public static void Main(string[] args) { for (int i = 1; i <= 100; i++) { if (i % 15 == 0) { Console.WriteLine("FizzBuzz"); } else if (i % 5 == 0) { Console.WriteLine("Buzz"); } else if (i % 3 == 0) { Console.WriteLine("Fizz"); } else { Console.WriteLine(i); } } }
大学のプログラミングの講義で扱っていた言語です。
講義内容はメソッドを作ってみよう!で終了したので特筆すべきことはありません。
ただ、後にWindowsで動くGUIアプリを作りたいとなったときにC#が猛威を振るいました。
具体的にはVisualStudioのWindowsフォームアプリケーションです。
とんでもなく手軽にGUIアプリが作れます。
今でもGUIが欲しいなぁってものを開発しているときはC#を使います。
6.Velilog-HDL(大学時代)
面倒くさいですごめんなさい
さて急によくわからない言語が来ました。
私は一応電気電子系の学部を卒業しています。
なので、後輩などの授業を少し見てあげる機会があり、その際にVelilogを使っていたので勉強した感じです。
今まで上で挙げた、PCで動くものを作る言語ではなくFPGAなどの組み込み系で使われる言語ですね。
正味詳しいことは忘れましたが、かなり低級言語寄りでプログラミングの勉強には良いと思います。
ただ、これを勉強しても個人レベルでは有効に使えない可能性が高いですが・・・
7.アセンブリ言語(PIC)(大学時代)
面倒くさいですごめんなさい
これも後輩の授業で使っていたものです。
PICという、Arduinoなどの頭脳に当たる部品を制御するためにアセンブリ言語を使っていました。
一般的にIF文といえば、変数の値を比較して一致するか?といった感じで分岐します。
これがアセンブリでは、このPICのファイルレジスタのbit2がB'1'であれば次の行をスキップ、みたいな感じで分岐します。
多くはGOTO文と併せて分岐が実装されるので、複雑になると俗にいうスパゲッティコードになります。
画像引用:第285話 忌み嫌われたgoto文 | 日経クロステック(xTECH)
スパゲッティコードは初心者という風潮がある気がしますが、正直低水準言語であれば仕方ない気はします。 高水準言語であれば、意図的に狙わなければスパゲティになることもないですし。
別に何でもいいんですが、授業で教えるとしたらPythonやC言語などではなく、機械に近い低水準言語教えればいいんじゃないでしょうか。
どうせPython等を授業でやったところで実戦的な能力なんてつかないですし、だとしたら低水準言語でコンピュータの得意不得意みたいな部分を知る方が有意義かと思います。
8.Java
public static void useForLoop(int end) { for (int i=1; i<=end; i++) { if (i%3==0 && i%5==0) { System.out.println("Fizz Buzz"); } else if (i%3==0) { System.out.println("Fizz"); } else if (i%5==0) { System.out.println("Buzz"); } else { System.out.println(i); } } }
Javaです。
あるコンテストに参加することになって、物体検出AIを用いたAndroidアプリを開発するために勉強しました。
時間がなく、2週間という急ピッチで知識0の状態からAIアプリ開発までもっていったのはいい思い出ですが、短期間で完了してしまったがゆえにあまり記憶がないですね
9.PHP(大学院時代)
declare(strict_types=1); for ($i = 1; $i <= 100; $i++) { if ($i % 15 === 0) { echo 'FizzBuzz'; } elseif ($i % 3 === 0) { echo 'Fizz'; } elseif ($i % 5 === 0) { echo 'Buzz'; //上記以外 } else { echo $i; } }
これは結構最近触りだしたもので、以下のサイトを作るために勉強しました。
作った動機などは以下の記事で書いています。 atarms.hatenablog.com
大規模データに対してどこからでも検索できるシステムを作るにはどうすればよいだろう?と考えた結果、データベースをPHPで検索し、Webサイト上に表示するというロジックになりました。
今回の開発で概ねWebアプリ開発のノウハウは手に入れられたので、今後は積極的に作っていく予定です。
Webアプリだと環境を選ばずどこでも使えますからね。
10.R言語(大学院時代)
fb1<-function(n){ fb<-character(n) for(i in 1:n){ if(i%%3==0&&i%%5==0) fb[i]<-"FizzBuzz" else if(i%%3==0) fb[i]<-"Fizz" else if(i%%5==0) fb[i]<-"Buzz" else fb[i]<-i } fb }
研究室の教授がおすすめしていたので、勉強してみました。
Pythonでいいやってなりました。
まとめ
後半ネタ切れで若干雑になりましたが、こんなところです。
今でも使ってる言語はPythonとC#、PHPあたりです。
ということではてなブログさん、万年筆ありがとうございます。