Pythonによるプログラミングに関する世界観(戯言)です。Pythonも参照のこと。
僕は、以下に昔「最初はPythonから入るべきだ」と記述しましたが、最近になってそれを改めました。
僕が思うに、最初はRubyが良いと思います。
人々が「Pythonは初心者向けの言語」だと述べるのは、Pythonは言語仕様がシンプルで習得しやすく、またC/C++のように低水準すぎずさまざまなことが簡単にできるためです。
僕も、最初からC/C++をすることはお勧めできないかもしれないと思います。パソコンの技術やプログラミングについて何も分からないド素人のような方は、Pythonから入った方が理解しやすいでしょう。
しかしながら、最低限パソコンの技術的な知識があり、C言語の基本ぐらい知っているという方は、僕はPythonから入門する意味は「まったくない」と思います。
僕は、Rubyをプログラミング入門者におすすめします。その理由は、Rubyが誰もが好きな言語であることということや、書きやすい・学びやすいというだけではありません。Rubyには、Railsがあります。僕はRubyの学習をしながら、Railsアプリを作ることで、「データベースとHTMLを繋ぐ高度なフレームワーク開発」を体験してほしいのです。
このページはPythonのページなので、あまりRubyについて書くことは適切であるとは思いませんが、われこそはプログラマになりたいと思っているのであれば、僕はPythonはお勧めしません。Pythonは本気で、一切パソコンの知識のない学生が工業大学で基本を学ぶような言語だと思います。僕はプログラマ志望のパソコン上級者にはRubyをお勧めします。
入門者におすすめしないとは言いましたが、Pythonは漠然とプログラミングを学びたい方や、純粋にプログラミングだけをしたい方におすすめです。
Rubyは、どちらかというと「Webにだけ偏向した言語」です。Web用途に使うととても大きな力を発揮しますが、Web以外の用途で使うことはあまりありません。
これに対して、Pythonは入門者向けでありながら、さまざまな広範囲に使える言語です。コマンド、バッチ、Web、人工知能、GUI(たとえばGTKやQt)など、さまざまな用途に広範囲に使えます。
また、情報も得やすいです。昔は「みんなのPython」が標準的でしたが、今ではもっと分かりやすい本が増えてきていますし、オライリーの人工知能や機械学習関連の本もたくさんあり、QiitaなどでもPythonのタグが上位に来るなど、初心者にとって必要な「ダイレクトに答えが検索エンジンでかかる」ということが学習のメリットとなるでしょう。
また、Pythonには「最新」であり「多機能」であり「ソースコードが読みやすい」ことや「同じように学んでいる人が(たとえばツイッターなどで)多い」などいったメリットもあります。
また、初心者向けと言われるのは最近だけで、昔はハッカー向けの言語でした。ハッカーとは悪い意味でのクラッキングを行うハッカーではなく、UNIXやオープンソースなどで大きなスキルと能力を持つ「スーパーエンジニア」のことです。昔から、彼らはPythonからプログラミングをすることを勧めます。その理由は、「C++やPerlをやればやるほど難解でわけの分からないコードを書くようになる」という点で、Perlよりも可読性の高いPythonを勧める声があります。今ではPythonが初心者向けになりましたが、昔はハッカー向けだったため、「Javaができる人間はJavaしかできない人間であると会社に認知されるが、Pythonができる人間はC/C++やJavaもできる人間であると会社に認知される」と言われたこともあります。
プログラマになりたいのであれば、Pythonから始めましょう。
Google三大言語では、C/C++, Java, そしてPythonが「標準的言語」として言われています。その中でも、初心者向けでかつさまざまなユースケースで使われるのがPythonです。
最近では、ちまたでもAIや機械学習のような技術のマスコミ報道が増えていますが、AIで使われる言語はPythonであることが多いのです。
また、昔から、スーパーハッカーの間ではPythonを推す声が強いです。オープンソースの伽藍とバザールを書いたことで有名なエリック・レイモンドも、Pythonをすすめています。
PythonはWindowsでも使えますし、Linuxを使えばまさにハッカーの仲間入りです。ハッカーの標準言語であると同時にGoogleのお墨付き言語であり、Webでもデスクトップでも、あるいはシステム開発や人工知能にも対応できます。
また、PythonにはITの最先端技術がつまっています。
一部では、RubyやJavaScriptを推す声もありますが、「Rubyエンジニアにはいつか限界が来る」とか、「JavaScriptは一部の最先端をかけるギークにしか分からない」ということがあり、初心者にはおすすめできません。
初心者、上級者、Linuxハッカーを目指すものは、間違いなくPythonをやるべきです。
また、Pythonの文法はとてもシンプルで、習得しやすい簡素なものです。ですから、そんなにたくさんの時間をかけなくても習得できます。これがC++だったとしたら、きっと初心者はすぐに迷宮から抜け出せなくなって諦めてしまいます。また、Perlも同様にシンプルですが、クセが強いです。Perlハッカーになるならばそれで良いですが、変な記法や書き方を学んでしまって、おかしなコードを書くようになります。そもそも、Perlは明らかにおかしな言語です。引数を$_[0]で書くようになると、人類は終わりだと思います。
Pythonをはじめる上で何から知れば良いかは永遠の課題だと思いますが、とりあえず公式のドキュメントを参照すると良いでしょう。Progateなどの初心者向けのサイトもあり、プログラミングのことを本当に何も知らない人には有益でしょう。また、WebフレームワークのDjangoを使えば、Webサービスの開発をいとも簡単に実現できるでしょう。GUIの開発はLinuxのGTKで行うことをおすすめします。
Pythonを一言で言えば、文法が簡素・シンプルで、何でも簡単で楽にできる言語だと言えます。
特に、覚えるべき言語要素が少ないです。簡単に短時間に習得することができます。
その代わり、できることは多いです。簡単に記述し、簡単に何でもできます。
科学技術計算やAI・人工知能(ニューラルネットワーク・ディープラーニング・機械学習)に使われることが多いPythonですが、Webのサービスを作ったりGUIアプリケーションを作ったりする用途でもとても簡単にアプリケーションを作れます。
ライバルのRubyと比べると、面白みの少ない言語です。Rubyは「楽しさ」を強調しており、プログラミングをすることの楽しさや面白さがありますが、Pythonは簡単なだけで、とてもつまらない言語です。
Pythonは、人工知能・AIで良く使われるほか、GAFA(Google, Amazon, Facebook, Apple)関係で良く使われます。
特に、PythonはGoogleやFacebookなどの「アメリカの一流プラットフォーム」で使われることの多い、かっこいい言語です。
人工知能やAIにおいて良く使われるのは、昔はLispでした(リスト構造のS式がプログラムとデータで共通に使われるため、「プログラムを操作するプログラム」を作りやすかった)が、最近はライブラリの整備状況などが考慮され、LispよりもPythonを使うことが増えました。
Pythonは決して、つまらないだけの言語ではありません。言語仕様が簡素でシンプルなため、言語処理系の挙動や機能を把握することがしやすく、「Pythonのことを全て分かった一流ハッカー」になりやすい言語だと言えます。C++やJavaに比べても、覚えるべきことが少なく、誰でも当たり前に考えるように動いてくれます。
初心者は、永遠の言語論争などを無視して、Pythonで我慢してコードを書きましょう。
Pythonで書いていれば、そのうちプログラミングはできるようになります。
おすすめなのは、Pythonならやはり人工知能・AIの開発です。僕の書いたロボットも参考にしてください。
最初は、オブジェクト指向は「用意されているクラスを利用する」ものだと考えて、変数を定義し、変数に値を格納し、条件分岐をするところから始めましょう。そのうち、繰り返しや関数定義も覚えられると良いでしょう。
Pythonの練習には、UNIXのコマンドの再実装がおすすめです。
たとえば、grepコマンドやsortコマンドなどを、自分で作ってみましょう。楽しいし、勉強にも練習にもなると思います。
その次は、具体的なデータベースのデータを用意し、そのデータを分析するAIを作ってみましょう。データは、自分で自動作成しても良いですし、郵便局からダウンロードできる郵便番号のデータなどを使うと良いでしょう。
それ以降は、Webフレームワークの習得がおすすめです。特にDjangoを使ってミニブログ(ツイッターのようなサービス)を作ってみましょう。投稿機能やフォロー機能を一通り実装しましょう。
GTK+やQtを使うことでX11によるGUIプログラミングもできます。僕はWebKitGTKを使ったタブブラウザや、Lispを実行できるテキストエディタ(もちろんLisp処理系もPythonで書く)を作ると良いと思います。
ほかの分野として挙げられるのは、ネットワークサーバーです。HTTPのマルチスレッドサーバーを書いてみましょう。それくらいで、あとは応用が利きます。それぐらいができるようであれば、どんなプログラムでも開発できるようになるでしょう。
PythonやRubyのいいところは、動的なところです。型宣言をつけなくても、実行時に適当に解釈してくれます。
Pythonは動的なインタープリタ言語で、何でも簡単ですが遅いです。全くスピードや性能を考えていないのでしょう。速さが必要な時にだけC言語を使う必要がありますが、あとはPythonで全て事が足ります。
後日注記:Pythonの遅さはよく指摘されますが、実用においては問題ありません。今のパソコンで、普通の用途でPythonの低速さが問題になる場合はそう多くないでしょう。
今日知ったこととして、僕は作業所で仕事の合間にPythonチュートリアルを読んでいた。
そこで、コーディングスタイルの話が出てきた。
なんでも、Pythonでは「タブではなく空白4つでインデントを行う」ことが推奨されているとのこと。
これに反して、僕のロボットのコードは、空白2つでインデントを行っている。
これは、ひとえに、僕の勉強不足である。チュートリアルすら読んでいないことが分かって恥ずかしい限りである。
空白2つでも問題なく動作はするが、新しいコードを書く時は空白4つを使おうと思う。
Pythonチュートリアルは、簡単に読めてPythonの実際のやり方が分かる素晴らしい文書である。RustのBookなどにも「エンパワーメント」という概念が出てくるが、「概念を知ることで自由な能力をつける」という意味では最適であり、プログラマの最初に読むべきであると同時に熟練したプログラマにとっても最適な文書である。
僕のように、「全てを順番通りに読むことが苦手」な人は、Pythonのチュートリアルをいきなり順番通り読むのではなく、まずどのような内容が書かれているかをざっと見て確認しながら、詳細を読み深めると良いと思う。
YouTubeには「プログラミング言語を学ぶ」という隠れた使い方がある。
YouTubeで学ぶことの利点は二つあります。
1.きちんと分かっているプログラマの方が動画で話しながら直接教えてくれるので、「プログラマがどのような考え方でプログラムを書いているのか」が分かる。
2.コードを書いているところやソフトウェアをインストールしたり触ったりしているところが直接画面で見れるので、「プログラマがどのような方法でプログラムを書いているのか」が分かる。
今の時代、書店にはたくさんのPython入門本が並んでいますが、IT系の書籍は値段が高額で、5,000円以上になることも少なくありません。そんな分厚い本を買っても、読めるわけがありません。YouTubeの動画なら、楽に見ることができて、「こんなに簡単なことを言っていたのか」ということが分かって面白く、「動画をただ見ているだけ」でいいので、さまざまなコードの入力作業を自分でしなければならない書籍による独学を行うよりも、続けやすいです。財布や時間と相談しながら、分からないことは動画で学ぶことをおすすめします。
Pythonの良いところは複数ありますが、まず、余計な費用もかからず、必要なプラットフォーム条件も少なく、無料でオープンソース、そしてWindowsに簡単にインストールできるほか、Linuxにはほとんどの場合標準でインストールされている、ということがあります。
Visual Studioのように、高価な代金を払って専門のソフトウェアを購入する必要もなく、全部無料です。Perl/CGIやPHPのように、サーバーを構築して自宅サーバーを運営する必要もなく、Windowsでプログラミングを行い、ローカルな環境で実行することが多いため、Linuxの知識もサーバーの運営責任も必要ありません。
Pythonのもう一つの良いところは、言語仕様がシンプルで覚えやすく、また、Rubyと同じ動的オブジェクト指向スクリプト言語であり、「ほとんどの処理がとても短く簡単に実現できる」ということが言えます。
C/C++のような冗長な記述は必要なく、Javaのように覚えるべきことがたくさんあるわけでもないため、簡単に習得できます。
また、一番初心者にとっていい点が、「人工知能・AIや機械学習の用途に使う」という「プログラミングの目的」がはっきりしているところです。
C/C++やJavaなどは、汎用的過ぎて目的がなく、結果「言語仕様を学ぶだけで、実際にモノを作らない」という結果になってしまいます。また、PHPやRubyには比較的はっきりとした「Webサービスを作る」という目的がありますが、いきなりWebサービスを外部に公開するのは、セキュリティや運営責任の観点から言って問題があります。
Pythonは、機械学習というはっきりとした目標があるため、プログラミングの勉強を楽しく行うことができます。
後日注記:しかしながら、僕はプログラミング初心者が人工知能から始めるのはおすすめしません。人工知能や機械学習は、プログラミングの中でも特殊な分野で、難しく、まったくプログラミングとは異なる数学的な考え方が必要だからです。初心者にはDjangoやRailsからWebサービスを構築することをおすすめします。
Pythonの最後のメリットは、仕事にも趣味にも使える、ということです。
エンジニアになることを将来的に目指すのであれば、PythonはJavaの次の新しいIT業界の主役言語です。世界シェアもJavaを抜いてNo.1になったはずです。Pythonができる人間は、日本国内でも活躍できるほか、海外や世界においても活躍できます。日本ローカルのRubyとはこの点が異なります。
また、趣味でオープンソースソフトウェアを作るのであれば、PythonはLinux界でもっとも流行りの言語です。ペイントソフトのMyPaintやパッケージ管理システムのPortageなど多くのソフトウェアがPythonを使って作られています。
Pythonは超高級言語であるため、なんでも簡単にできますが、その代わりパフォーマンスが悪いです。特に、C/C++と比べるとそこまで遅いと言われています。
こうした点は、コア部分をC言語で書いてそれをPythonからインターフェースで利用する形でプログラムを書くと、C/C++に近い速度でプログラムを実行できます。
また、Pythonの優れた点は、最近流行りの「データサイエンティスト」という職業になれる、ということがあります。
このためには、統計・解析の知識や、R言語やSQLなどの知識も必要になります。
特に、統計を勉強している数学部や社会学部の学生であれば、その学んだことをPythonで活かすことができると同時に、データサイエンティストになることで、高収入かつキャリアアップが実現できるでしょう。
まずは、公式のチュートリアルを最後まで読むことです。やる気を高めて頑張りましょう。
UNIXやLinuxでの、例えばPortageやYumなどのパッケージマネージャのような、中規模の基盤システムを開発するために良く使われる。
プログラミングの学習用途や教育目的として良く使われる。特に、アメリカでは日本でのRubyがそのままアメリカでのPythonになっている。
また、最近になって増えてきた分野として、機械学習やAIの分野がある。Pythonはこれらの技術が豊富で、ライブラリなども多い。Pythonの機械学習はアメリカなどのネットでとても流行っていて、たとえば日本ローカルだが技術系SNSのQiitaでは「Python」のタグがトップになっている。(2位はJavaScript、3位はRuby、4位はRails。C/C++などははるかに下。もっと詳しく知りたい方はエンジニア向け知識学習サービスPutiita - Qiitaのプチ良記事を集めたサービスなどにランキングがあるので参照のこと。)
(注記:良く見ていなかったのですが、公式のQiitaにもタグのランキングがありました。AWSなどのタグも上位に入っています。)
機械学習のトピックについてはQiitaの機械学習のタグを参照すると良いかもしれない。
Pythonと言う単語は、英語では「ニシキヘビ」を意味する。また、Pythonの科学技術計算用のライブラリを含むディストリビューションには、Anaconda(アナコンダ)という名前がつけられている。
これには、Pythonの作者がヘビが好きだったわけではなく、「空飛ぶモンティ・パイソン」と呼ばれるコメディ番組が元になっている。
だが、現在ではPythonの公式マスコットはヘビになっている。
Pythonのタブとインデントによるブロックの構文(オフサイドルール)には批判もあるが、元々はABCと呼ばれる教育用言語が元になっている。Pythonの作者グイド・ヴァンロッサムもABC言語の開発にかかわっていた。
僕が思うに、Python熱も冷めてきました。
確かに、Pythonは汎用性は高いですし、仕様が小さいため初心者でも学びやすく、機械学習やデータ処理などでもよく使われています。
ですが、ツイッターのさまざまなツイートを見ると、トップレベルの開発者の興味関心は既にPythonからGolangやRustへと移行しつつあるのだということが分かります。
Pythonを学んでいる人は今でもたくさんいるでしょうが、プログラミング言語的な流行から言って、Pythonは既に古い言語であり、GolangやRustこそが今、乗りに乗っている言語なのではないかと思います。
なので、皆さんもPythonが遅いとか書き方にクセがあるとか文句がある人は、「本当に今新しい言語」であるGolangやRustを学ぶことを推奨します。
2023.05.12
僕が思うに、Pythonは大規模な開発には向いていないと思います。
まず、Pythonには、オブジェクト指向といっても、privateやprotectedが存在しません。「__」のような接頭辞を付けて「できたら触らないでください」と慣習的に明示することはできますが、メソッドは原則すべてpublicで公開されます。
また、Pythonにはジェネリクスがありません(ただしタイプヒントにはジェネリクス的なものはある)。リストにはどのような型の要素であっても詰め込むことができます。なので、「リストにはこの種類の型しか追加できない」ということを指定できず、結果的にリストにどのような型の要素が入っているかということを保証できません。
また、Pythonにはインターフェースがありません。ダックタイピングが許されるため、「このクラスのメソッドしか使ってはいけない」ということを指定することが基本的に難しいです。基本的に動的型付けで、ひとつの変数にどのような型の要素でも入ってしまうため、「必ずこのクラスのメソッドが実行される」ということを保証できないのです。
このように、Pythonは「楽で手軽」な言語ではありますが、Javaのような冗長ではあるもののきちんとした言語に比べて、大規模な開発には向いていないという側面を持ちます。
これはRubyのような言語も同じで、Rubyは言語仕様が緩く、逆に言えば普通はできないことやあり得ないことをできてしまうため、逸脱した記述をすることが可能であり、これは大規模なチームでの開発では良い面と悪い面が両方あります。
Pythonは、大規模な開発には向いていません。大規模な開発を行うならばJava、あるいはシステムのような低水準レイヤーを書くならC/C++を選ぶべきだと思います。
最近はPythonやRubyでもタイプヒントなどを用いて静的型付けができるようになりましたが、まだ標準的には使われていません。静的型付けを使おうとしても、使用する外部モジュールの中では静的型付けが行われていないこともあります。最初から静的型付けが基本の言語を使ったほうが、チームにおける開発はやりやすいでしょう。
2023.05.14
僕が思うに、PythonやRubyのような、動的スクリプト言語が好まれていたのは過去の話です。
最近では、TypeScriptやRustのような、静的型付けの新しい言語が好まれます。
PythonやRubyは、動的型付け言語であるため、文字列や数値の区別を意識せずに、簡単に開発することができるように、一見見えます。
ですが、プログラミングが高度で大規模になると、動的型付け言語は破綻してしまいます。
静的型付け言語のほうが、結果的にプログラミングそのものがしやすいのです。
また、フレームワークについても、Railsなどが流行っていたのは既に過去の話であり、今ではNext.jsなどが新しいRailsの位置づけになっています。
Pythonは既に古い言語です。新しく学ぶなら、TypeScriptやRust、Golangなどをおすすめします。
2023.06.30