たいむかぷせる2

何年か後に見なおして頭を抱えてくなるものたちのあつまり

プログラミングってなんだろう,を情報科から

     正式に情報科に配属になりました.思っていたよりコマは埋まっていなくて,なんだか自分の勉強ができそうな反面,大学生ってこんなものなのかなあと同時に思う毎日でもあるのです.せっかく4月ですし,情報科学生にとってきっと欠かせない「プログラミング」が僕にとってどういう意味をもっていて,これからどういう意味を持っていくであろうか,ちょっと書いてみます.これも4月病の1つであるとは思うのですが.

     この文章はなるべく「プログラミング?なにそれ美味しいの?」な人に向けて書くようにしますが,わかりにくいところがあったらごめんなさい.間違っている場所があったらなるべくご指摘いただきたいです.
     プログラミングってなんのためにやるの?とか,なんでそんなことしなくちゃいけないの?ということを言う人は周りに多いです.でも,最近は色んなところでプログラミングの重要性が指摘されているので,「なんだかよくわからないけど大事そうなもの」だと思ってくれている人は多いようです.せっかくプログラミングをがしがし使っていく道へ進んでいくわけですし,こういうことをパッと話せたら,なんかすごくカッコいいですよね(?).
     「情報科に進むんだよ」と伝えると大体の人が「じゃあがしがしプログラミングとかやるんだね!」って言います.まあ間違っていなくもないですね.実はプログラミング以外にも数学であったりとか,回路の話とか,色々とやらなければいけないことは多いのですが,長くなってしまうので割愛します.
     プログラミングをなんのためにやるのか,僕なりの考えは「コンピュータと人間の間の翻訳」ですね.(色々と異論はあるはずですけど)コンピュータはものすごく便利で,人間の生活を助けてくれる素晴らしい箱なのです.でもやっぱりちょっと融通がきかないところがあって,色んなことをやってもらうためには,人間の言語や論理体系をなんとかコンピュータがわかるように変えていかないといけません.そういうことをやっていく「プログラミング」っていう作業です.だいたいこんなところでしょうかね.
     ほとんどの人は知っていると思いますけど,コンピュータっていうのは単なる電子回路の集まりでしかありません.コンピュータの中では,バイナリといって,0と1でしか処理は行われていません.人間が0と1で組み合わされたものを読み書きできればいいけどそういうわけにもいきませんよね.そこでプログラミング言語っていうのが必要になります.
     プログラミングには色んな言語があります.上で僕が「翻訳」と書いていたり,左の方に「言語」と書いてあることからわかるように,プログラミングっていうのはある意味では言語みたいなものです.もちろんコンピュータには実際に計算をしてもらうわけなので,実際の言語とは大きく異なる部分もたくさんありますが.代表的なものだとC言語*1C++*2Java*3Objective-C*4Ruby*5Python*6PHP*7とか.この中のどれかを使って,がしがしコード*8を書いていくことになります.
     実際の言語においても,ラテン語は学術的だとか,フランス語は愛を語る言語だとか,英語は議論に向いているとか,(諸説ありますが)言語それぞれに対して「性格」であったり「用途」みたいなものはありますよね.上に挙げた言語もそんな感じです.色々と用途に応じて(例えば数値計算をして欲しいとか,なんかアプリを作りたいとか,データ管理をしてほしいとか)言語を変えていきます,言語が違うとそれはそれで書かなきゃいけないことも変わってきますし,コンパイル型とかスクリプト型とかオブジェクト型とかまあ色々あるんですけど,説明が難しいし,たぶん僕自身もあんまりよくわかっていないのでやめておきます.
     ただ,実際の言語だと文法がちょっとくらい違っていても通じるんですが,プログラミング言語だと1箇所でもスペルミスをすると通じません,面倒くさいですね.とはいえ人間がつくったものなので,ものすごく論理的で,通常の言語にある不規則変化みたいなものはあんまりないんですけどね.
 
     プログラミングそのものについてはこんなところです.そんなわけで,実際に僕はプログラミングによってこういうものを作っているんですよーって言えたら良かったんですけど,まだまだそのレベルに達するにはプログラミング力が足りないみたいです.加えてたぶん今はまだまだ基礎教養が重視なので,あんまり実用的なことはやらないのでしょう.
     学校の授業の一環でC言語というのを1年間やっていました.C言語というのはかなり古い言語で,まだまだコンピュータの性能も古いときに創りだされた言語です.色々とやっちゃいけないことが多くて,できることはあんまり多くありません.なにかアプリを作るとかいうよりは数値計算向き*9です.色々と気を遣わないといけない部分が多くて面倒くさい反面,コンピュータの内部がどうなっているかがわかるような気がします.
     最近だと僕達みたいな情報系以外の人でもプログラミングを学びたいとか,学んでいる人は多いみたいです.まあこういう高度情報化社会ですし就職にも有利なのでしょう.やっぱり普段つかうスマートフォンとかPCのアプリ,ソフト,はたまたWebアプリなんかを自分で作れたり,動かせたりできたらすごく楽しいしかっこいいですよね.
     僕達みたいな情報系学生が他の「プログラミングを学ぶ人達」とどう違うかもちょこっと書いておこうと思います.といってもなんとなくこんな感じなのかなあと思ったところを書くだけで,あんまり業界の中身を見てきたわけではないのですが.
     僕達はプログラミングで何かを作るだけの学科ではないので,「コンピュータ内部がどう動いているか」とか「どうやってコンピュータは情報を処理するのか」とかいう部分も学びます.このあたりの話は実は数学ぽかったり,ものすごく抽象的な概念を扱ったりします.学生は新しもの好きだったり,実用的な部分を重視したりするので(僕を含め)つまらないなあと思ってしまうものではあるんですが.こういうこともそのうち役に立つのかなあと思って頑張る毎日です.なんでもできる「魔法の箱」の仕組みをちょこっとずつ解き明かしていく感じですね.
     今は授業でJavaをやっています.C言語よりも色々と融通がきくような気がしてとても楽しいです.まだまだ「プログラミング初心者」のところからは抜けだせませんが,そのうち何か作れるレベルまでいけたらいいなあ.Web関係の知識が少ないので,htmlやJavaScriptPHPなんかにも手を出すつもりです.RubyPythonもやれたらいいなあ.やれたらいいなと思ってしまうだけになりそうな気もしますけど.
     「なんでもできる魔法の箱」を自分で操れるようにしていく感じかな.
 
    なるべく専門的な話はやめようと思っていたのに,ついつい専門的(?)な話が多くなってしまいましたね.コレも理系の悪い癖なので,もう少し一般向けな話ができるようになったり,文章がかけるようになったりしたら嬉しいのですが.やっぱり色んな概念やたとえ話を使ったほうがいいのかなあ.
 
     以下は現在のプログラミング環境について.プログラミングをやったことがない人にとってはさっぱりピーマンだろうと思うので,特に興味がある人以外は全く読む必要がないです.プログラミングを始めるときってなんだかんだ環境を用意するのが面倒なので「こういう環境で書いている人もいるんだなあ」くらいに思ってもらえばいいです.
     マシン: Apple MacBookAir(Mid-2012)((13inch,2GHz Intel Core i7,8GB DDR3メモリ,256GB SSD)
     OS:OS X 10.9 Mavericks
     シェル:zsh
     エディタ:gvim(MacVim)
     IDEを使おうかなと思っていた頃もあって,XcodeEclipseも一応インストールしてあるんですが,Vimでがしがし書くことが多いので,今でもターミナル+gvimで書いています.色々とカスタマイズ方法もわかってきて楽しい限りですね.Emacs?…知らない子ですね.
     

*1:世の中の基板のところを支えてくれています.PythonだってRubyだってCでできていますよ

*2:C言語に色々とくっつけたらできました

*3:有名な言語.色んなところで使われています.

*4:Apple好きな人のための言語.

*5:楽しくプログラミングができることを意識しているそうです.国産.

*6:コードがとっても綺麗!ニシキヘビ!),JavaScript((Webで色々できる言語です.

*7:Webアプリのための言語.お母さんはHTMLです.

*8:プログラムが書かれた文章のこと.エディタと呼ばれるソフトを使ってキーボードでぽちぽち打ち込んでいきます.

*9:そんな気がするってだけなので,批判は受け付けます.