このブログは現在リブート中です。予告なく変更、削除、停止を行う場合があります。持て囃され、人工知能が将棋界に席巻し、巷のみんなはスマホを片手にwebでサービスを受ける時代。スピーカーにまでAIが搭載されて、みんながユビキタスなりIoTなりを自然と享受する時代。TwitterなりyoutubeなりLINEなりInstagramなり。様々なSNSと多くの人が日々べっとり癒着し続けている昨今、義務教育にプログラミング教科の導入まで検討され。プログラミングが出来たほうが就職に有利とか、嘘かホントかわからんような話まで聞かれるようになりました。なんで、やはりプログラミングなりIT技術を独学でも学び始めたいという人もいるだろうなーととは言えプログラミング言語には色々、本当に色々あります。=>初心者向けなものを適当に見繕って紹介したいと思います。大まかにオブジェクト指向系で「動的言語」と「静的言語」。「番外編」を加えて各々3つづつ。10という区切り数字のために+1で。注:この記事は私の勝手な私見です。静的(型付)プログラミング言語:安定性と拡張性抜群の一般的なプログラミングJava:脅威の汎用性と登場頻度。はじめにプログラミング言語を学ぶにあたって大切なことプログラミングは手段です何かしたいから、プログラミングを用いて達成するのであって、プログラミングをしたいからプログラミングをするのは良くないです。本末転倒ん?このブログ「プログラミングを趣味に」の文字を全否定しているような・・・・・まぁ、それはそれこれはこれ。確かに各方面で「コーディングスキル」ってのは年々需要が増えてきています。何をしたいかによって千差万別。プログラミング言語はただのツールということは努々忘れないように「フロントエンド」と「バックエンド」について雑な説明プログラミングで作るソフトウェア開発時、例えばWEBサービスは下記のようにユーザーに届けられますそう!プログラミングで作るシステムは2つあるのですその際両側を「ユーザーなどと直接やり取りをする側」をフロントエンドデータ(テキスト、画像、動画などなど)の入力処理、UI等のユーザーへの指示、処理した結果の出力や表示などなど「フロントエンドで受け取ったデータの処理、データの保存」をバックエンドサービスの処理、ログインするIDの付き合わせ、結果の保存・セーブなどなどと呼びます。サーバー側のPCの動作とざっくり考えてください。詳しくはググってください。ライブラリとはなんぞやめっちゃ適当なこと言うと、読んで名のごとく「何かしたい時に参照する本棚」です。詳しく、でも雑に言うと「そのシステムを開発する上で、面倒くさい処理を事前にプログラミングしてある便利な部品群のパッケージ」です。色んな人が開発し、無償(商用利用は有償なものもある)で提供してくれています。このパッケージに、「あれやって」といえばすでに出来上がっているプログラミングコードがそれをやってくれます。「文章を画面に表示する」のには文章を1文字単位にバラす1文字1文字に対応するコード確認する1つづつ、何処に表示するかPCに指定するPCはそのコードを元に対応する文字の画像を画面に表示する=>2から繰り返しとなるのですが、それをパッケージに"この文字をいい感じに表示させておいて”というだけで終わるわけです。オブジェクト指向系はこのライブラリが充実しているか(その目的に合った部品がどれだけ多くて便利か)がプログラミング言語選びの要になります。言語によって得意とするライブラリの種類やそのジャンルの充実具合が変わります。軽く説明を終えたところで、10の言語の紹介と行きましょう。dynamicなんです!ダイナミックないいところがいっぱいありますコンパイル(書いたものを実行する前の下準備)がいらない=>書いてすぐ試して、また書いてがやりやすいコードが短いもの(簡潔)が多い=>長々と長文を書く必要がなくダレませんプログラムの文面に型システムが登場しない(ものが多い)=>覚える事が少ないため、学習の際に面倒な手間を省けます!まぁ、静的に比べると遅かったり、実行前に注意してくれなかったり、コンパイラという赤ペン先生がいないから致命的ミスが起こったり、やっぱり型はほしいよねとか欠点も多いんですが。それでも、一般的には初心者にとってはわかりやすく柔軟で楽しい言語それが、dynamicさんです。コードの行数を減らして、アイディアがすぐ形に!厳しいコンパイラ先生が見ていないので、規則を多少破っても問題なし!(一般的に)非常に高水準・・・つまり人間にわかりやすい言語で、覚えることが少ない!書いたらすぐ実行できるので、すばやく結果を確認できる!まぁ、そんな言語です。その性質上、アイディアをすぐ形にする必要性があり、機能追加の即応性が求められるwebサービス系で良く使われます。他にも、”プログラミング”自体を漠然と習おうとする初心者や、日々の同じ繰り返し作業をパソコンに自動で処理させる(作業の肩代わり)目的ならば動的言語は素晴らしい言語でしょう。JavaScript:サイトの見た目を劇的に変えるスクリプト全てのブラウザで動くフロントエンドシステム開発の汎用性が魅力のスクリプト言語webアプリ系のライブラリが豊富。webサービス系が得意。ブラウザを介して、ユーザーと相互にやり取りするようなシステムが作れます。一応サーバー側のシステム開発も可能(Node.js)よくjavaと間違われますが、全く違う言語です。Webサイト等webサービスの開発によく使われ、ユーザーとサービスの相互やりとり(インタラクティブ)を円滑に熟します。大体のwebサービスで使われているので、身近な言語ですね。得意分野はそのままwebサービスやブラウザ上で動かすサービス。スマホ時代は誰もがブラウザで世界とつながっているため、知らず知らずにjavaScriptのお世話になっています。反面、JavaScriptは型がなくコンパイラもなく、エラーを吐いたときのデバッグが難しいです。大きな、または複雑なシステムを作ろうとすると難儀するでしょう。ブラウザで動くちょろっとしたサービスや、サイトの飾り付けならjavaScriptは良い言語です。ブログをもっと豪華に魅せたいという人も必見でしょう。Railsフレームワークの強力さ日本人が開発した言語としては、はじめて国際企画認証されたプログラミング言語。そのため、様々な良質ガイドが日本語化され、開発者まつもとゆきひろさん本人による読本も出ているところが英語が苦手な人にも嬉しい。「開発者が楽しく生産性を高めるための言語」として開発されたことに偽りなく、非常に初心者向け。入門者が「プログラミングで何かシステムやサービスを作りたいなー」と思ったときは、Rubyから始めるのは賢い選択でしょう。Railsはwebシステムやwebサービスを作る上で、面倒事を尽く自動的に処理してくれる頼もしい相棒となります。Rails)で創られています。その初心者向けの代償に様々な負債を祓います。そもそも動的言語の宿命なのですが、副作用や難解なテストコーディングは規模の大きいシステムをデスマーチへと導きます。遅めの実行速度は大量のユーザーをさばく時ネックになりやすく、Twitterは当初Rubyで開発したシステムをJAVAへと転換しました。「お目付け役がいないため文法が自由」な利点は、大勢でプログラミングすると「統一性がなく管理が難しい」欠点へと変貌します。貴方の求めるwebサービスの規模や、付随していく追加機能が増えていく場合、Rubyには不満だけが募っていくでしょう。何らかのサービスを思いつた時、さくっとスタートアップするならばRubyは良い言語です。初心者のプログラミング学習用としても最適でしょう。そもそもストレスを最大限に軽減した言語思想と、大量の日本語ドキュメントは初心者向けとしては破格のものがあります。見るRubyは検索すれば、ネット上に無料で日本語な詳細なガイドが色々あるのも大きいですね。4もこれで創られているPythonは、「初心者のための言語」として最も馴染みのあるプログラミング言語でしょう。初心者向けのためだけならば、日本人にはrubyのほうが良い人が多いとは思います。rubyは本当に日本語のドキュメントが多い。Pythonはその「初学者のための言語」としての長い歴史とつみあげてきたノウハウが違います。データ解析、バイオインフォマティクス。コンピュータで何かの学術や研究をやりたい人は必携、必須、絶対レベルの言語と言っていいでしょう。「その分野のその研究内容は自分しか理解できない」ことがよくある学術用途では、他人にシステム構築を頼むのも非常に不便です。高速数値処理numpy,多様な化学計算用ライブラリscipy,結果のプロットやグラフ化にmatplotlibを始めとする数々のシステムライブラリは唯一無二と言ってもいい利便性があります。機械学習のライブラリは特に多く、例えばGoogleさえも機械学習用のライブラリはPythonで出してます。webサービスへのアプローチも強くgoogleやinstagram、Redditなど、様々なシステムがPython開発です。日本語ガイドも少なく動的言語の問題点もかすかに残り、「明示的に書く」という文化もめんどくささに思える時があります。目的によっては最善とは全く言えません。いえオブジェクト指向プログラミングとはかくあるべしを知りたいならばベターな選択ですし、何と言っても学術目的や機械学習をかじりたい人にはバイブルになるでしょう。欠点らしい欠点を上げきれないところも含めて、魅力がつまった言語です。見る静的(型付)プログラミング言語:安定性と拡張性抜群の一般的なプログラミング今度は静的です。staticさんです。動的言語は柔軟といえば聞こえが良いですが、柔らかすぎてちゃんと創らないと簡単に崩壊します処理の速さまぁ、これは現在動的言語も早くなってきていますが。何より、(複数人等による)大規模開発が得意な点が大きいですね。後から作り込んでいくのにも安定感の高さがうれしいです。圧倒的な拡張性、あとから利用者や仕事の増大に合わせて適応していく寛容さ。処理の速さコンパイラと言う赤ペン先生がいるので、エラーを事前に知らせてくれるやっぱりプログラミングするなら型システムの理解はほしいというニーズが満たせる、プログラミング界のデファクトスタンダード。(一般的に)コンパイラによる型を始めとしたチェックが厳しく、「プロトタイプであっても多くの記述が必要」であったり、「覚えることが多い」であったり、開発環境を整えないと・・・であったりとややっこしい話が結構出てきますが、その寄りかかっても大丈夫な安心感は魅力です。ゲームエンジン、モバイルアプリ、エンタープライズレベルのバックエンドは、一般的に静的型付けされた言語で構築されます。動的では、比較的結構大変(やってるところも多いけど)ゲーム作りたいとか、アプリ作りたい的な初心者であれば、静的言語で入門したら便利かと思います。あと、ミスした時にちゃんと教えて欲しい系の人も、コンパイラの見守ってくれる感がありがたい存在になります。仕事のために・・・・という人も多くが静的言語を学ぶことになるかと思います。(中にはpythonやrailsが必要という所も多いですが)Java:脅威の汎用性と登場頻度。猫も杓子も老いも若きも脅威の汎用性。何にでも合うJVMさえ入っていれば、何処だって動くandroidのスマホアプリの推奨開発言語エンタープライズ系統なら非常に強い。多くの企業がJavaで開発しているため、就職にも強い古い上に肥大化していったんで問題点も多いどこでも使われてるんじゃないだろうか。なんでもライブラリあるんじゃないだろうか。そんな巨大な、大人気プログラミング言語。オブジェクト指向プログラミングで昔、そして現在も最も流行っていると言って遜色ない。Androidアプリ、デスクトップアプリ、ゲームを構築するために主に使用されているが、本当にいろんなことに使える。エンタープライズレベルのバックエンド開発のサーバー側言語としてもよく使用され、多くの企業がJavaを採用。フレームワークやライブラリも充実していて、強力なものも多い。学習の基本となる書籍や解説サイトも様々なものが用意されていて、困ることは少ない。簡単に言うと、古い上に全くシンプルじゃない。最初に設計されたのが古い上、機能を追加拡張しまくったせいでごちゃごちゃになっている。気になった機能を取り入れるんで、様々なものが重複しややこしい。小さなプログラムでもコードが長くなる点も拍車をかける。みんなが不満を口にするけれど、でもみんな手放せないし手放したくない。そんな難儀な、でもみんな使ってる標準的言語。なんかアプリを作ってみたい、適当なゲームを、動的言語ではし辛い中規模なシステムを、サーバー側を・・・・なんでもできる。使い所がいっぱいあるので、最初の学習結果を使いまわしたい入門者にもそういう意味ではうってつけ。ついでに、様々なプログラミング解説本がJavaを例にとって解説してるから知っておくとわかりやすい。オブジェクト指向の標準がつまった言語とも言える。5回この商品を含むブログを見るScala:javaを改良した新時代(予定)のプログラミング言語scalaいいよscala。オブジェクト指向と関数型の融合で、簡潔にかける。JVM上で動く、javaに簡単に置き換わる。揃えて並べて一気に処理するオブジェクト指向がキレイに、そう!きれいに書ける。副作用がない関数型でオブジェクト指向がかける。