当たり前ですがPythonも正しく書けば非常に読みやすいです。正しく書くというのは例えば以下のような点です。
- 変数や関数の名前が適切につけられていて意図が分かるようになっている
- 関数が長すぎず、適切な単位で分割されている
- 関数の引数を直接変えるような書き方をせず、戻り値をきちんと使用している
- formatterでコードが統一的に整えられている
- linterで警告文が出てこない
- type hintを適切につけ、変数の型がAnyにならずにすべて解決できている
これらの事柄はもちろん他の言語で書く場合でも同じです。ただ、Pythonは単体ではこれらの事柄を強制することができず書き手にゆだねられている部分が大きいです。また、言語自体はかなり古い部類なのでformatterやlinter、そのおすすめ設定もいろいろ変遷しており、その上入門記事ではこういった設定は扱われることがほぼないので知らないまま書いている人が多いため、読みにくいコードが量産されているのだと推測されます。GoやRustなどであればそもそも静的型付け言語な上に標準でformatterやlinterもついてくるので特に意識せずともある程度読みやすいコードが書けるようになっています。
Pythonについては現在の私のお勧めは以下の通りです。
- 依存ライブラリ管理: PDM
- formatter: black + ruff
- linter: pyright + ruff (vscodeから使用する場合はpyrightを内包しているpylanceを利用する)
- test: pytest
これらの設定はすべてpyproject.tomlに書くことができ、他にもVSCodeで開発する場合の設定をテンプレート化したプロジェクトを公開していますので興味がある人はこちらを利用してください。GitHubのテンプレートプロジェクトなので新しくレポジトリを作る際に直接使用することができます。
有料版のChatGPT4の回答も貼った後、私の意見を書きます。
Pythonが他のプログラミング言語よりも読みにくいと感じるかどうかは主観的な問題であり、一般的な意見とは言えません。実際には、多くの開発者はPythonを他の多くの言語よりも読みやすいと感じることが多いです。Pythonの設計哲学の1つは「読みやすさは重要である」という原則に基づいています。
ただし、なぜある人々がPythonを読みにくく感じるのか、いくつかの考えられる理由があります:
- インデント: Pythonはブロックを表すためにインデント(空白)を使用します。これは、C言語やJavaなどの波括弧
{}
を使う言語とは異なります。このスタイルに慣れていない人にとっては、最初は戸惑うかもしれません。 - 一部の省略: Pythonは、たとえばセミコロン
;
で命令を終了させる必要がないなど、他の言語と比べてシンタックスが簡潔です。これにより、コードがクリーンになる一方で、他の言語の背景を持つ開発者には不慣れに感じることがあります。 - 動的型付け: Pythonは動的に型付けされており、変数の型を明示的に宣言する必要はありません。これによりコードが簡潔になりますが、一部の開発者は型の情報が欠落しているためにコードの意図を理解するのが難しくなると感じることがあります。
- 文化と慣習: Pythonコミュニティには独自の慣習やベストプラクティスがあります。これに慣れていない開発者は、Pythonicでないコードを読むのが難しく感じることがあります。
最終的には、Pythonの読みやすさは、個々の経験や背景に大きく依存します。多くの人々がPythonのシンタックスや設計哲学を高く評価していますが、それに慣れるまでには時間がかかる場合もあります。
以下、回答者の意見です。
型宣言が無いコードが多いってのと、IDEやエディタでの静的解析が弱いのが原因だと思いますけど、動的言語だと、共通する部分ではあります。Pythonだとconstが無いのも割とイヤですね。どこで変更されてるか、疑心暗鬼になります。個人的にはPythonは、運用とかの使い捨てコード、AIやデータ分析以外では、使ってほしくないですね。隔離したいです。
Pythonは一般に比較的読みやすい言語とみなされていますが、一部の例外があります。
例えば以下のものがあります。
- 記述の省略のために独特な記法や仕様をあえて選んでいる
- オランダ語の影響を受けた文法が存在する
[1] 記述の省略のために採用された独特の記法
これは例えばwith文によるtry-catch構文の省略などです。仕組みが分かれば非常に便利ですが、1行で何が起きているのか分かりにくいため、最初は理解しづらいかもしれません。
他にもmapやfilterなど、Pythonには配列に対する処理の優れた記法がたくさんあります。ラムダ式も書けますね。今では他の多くの言語でも似た機能が実装されていますが、当時は画期的でした。とはいえぱっと見複雑な数学の式にしか見えない(しかも大量に繋いで書ける)ため、初めは読み解くのに苦労するかもしれません。
[2] オランダ語の影響を受けた文法が一部存在する
有名なのはif文の省略記法ですね。
- # 普通のif文
- if b > a:
- print(“b”)
- else:
- print(“a”)
- # ワンライナーif文
- print(“b”) if b > a else print(“=”) if b == a else print(“a”)
いやいやいや、なんで省略記法になった途端に処理が条件より先に来るんだよ、と最初は私も頭を抱えました。
これは多くの人にとって同じようで、Pythonには「この文法(仕様)はオランダ人にしかわからない」という言葉があります。Pythonの生みの親がオランダ人(グイド・ヴァンロッサム)だからですね。ただこれはPythonを高レベルに使いこなす人々が言ってるので、むしろ親しみをこめたジョークだと思います。
コンピュータ言語も言語ですから使えるようになりたいなら慣れるしかありません。ちなみにこの回答に書いたポイントは、全部私自身がつまずいた箇所です。でも慣れたら案外悪くないですよ。勉強頑張ってくださいね。
どこからどこまでがブロックなのか文字列検索では追えないから
Pascal,C等をやっていた人は、
BEGIN,END、{,}等を用いず、「インデント」のみでブロックを表すのは可読性が悪いと思います。
個人の感想です。また、自分がPythonに゙習熟していないというのも大きな要因です。
- importの構文が統一が取れておらず読みにくい。
- 変数への初回代入が変数定義と宣言を兼ねており、ある変数のスコープがどこからかを局所的に知ることが出来ず読みにくい
- 内包表記が読みにくい。特にネストした時
- 無名関数が読みにくい。かつ複数行にまたがれず書きにくい。
- メソッドチェーンが書きづらい
- 関数型サポートが弱くfor文が多用される傾向があり読みにくい
- 結果代入文の羅列になって、変数名が増え、似た変数が並ぶので読みにくい
- 上に加え、再代入禁止の変数がないので代入文多用の結果、「変数に今何が入っているか」を常に意識しなければならず読みにくい。
- インデントでブロックを表現するのがわかりにくい。たとえば、関数定義が1画面で表示されている時、最下行の次の行を見ないと関数が終わっているかどうかがわからない。ブロックとじの記号がある言語であれば、閉じていれば終わっている、閉じていなければ終わっていないことが一目瞭然でわかるが、Pythonではブロックや函数が終わっているかは、画面外の次の行が同じインデントか減っているかどうかで変わってしまう。
上記の一部はMojoが改善しているということなので、ぜひ普及してCPythonを駆逐いただきたい。
どうやら Mojo には関数定義が2パターンあるらしい。
def
: Python と完全互換ができる。動的性をもつ関数定義。fn
:def
の "strict mode" にあたる。より pedantic で strict な(要するに安全側に倒した)def
がfn
になるらしい。
たとえば下記のような違いがある。逆にいうと
def
にはこれらが求められない:
- 関数のボディ部分はデフォルトでイミュータブルになるらしい。内部の変数宣言とか操作とかが全部イミュータブルになるっていうことかな?で、可変な操作が関数内部にある場合やコピー不可能な型を引数として使用できるようになるらしい。
- 引数には型の指定が必要になる。戻り値の型指定も厳密寄りになる。指定しないと None を返してると見なすようになる。
- ローカル変数をちゃんと
let
とvar
を用いて宣言して使用する必要が出てくる。- def も fn も例外をサポートしているが、fn 側では raises を使用して明示的に宣言する必要がある。
慣れている言語次第で変わります。
Rubyに慣れている人であれば、似た特徴が多いこともあり読みやすいはずです。一方、BasicやCやJavaに慣れている人から見れば、それなりに理不尽な記述を要求するので可読性は低く感じるのでは?
PowerShellなんかは、Pythonに似た特徴があるので他のMS系のスクリプトや言語に慣れていると戸惑う部分が多いですね。
慣れです。私はPerlとかPHPは読みにくいと感じます。Cなんかも読みにくい部類になりますよ。
覚えなければならない標準の組み込み関数や型が多いからです。
特にmap()は「なぞなぞ」のような使い方が多い。
アンダーバーだらけ、だからだと思います。
もちろん、極端に長いコードは読みにくいですが、それは何もPythonに限ったことではないでしょう。
Pythonは完全にオブジェクト指向で設計されていることを知らないプログラマーが多いんです。
例えば
- a = 1
というコードを書いたとします。
一般的なスクリプト言語では a という整数型変数を用意して、整数値 1 を代入する。という処理を行います。
Pythonでは 1 という整数型(クラス)のオブジェクトを作り、 a というリファレンスで紐づけするという、関数型ではなく完全にオブジェクト指向型の処理を行うのです。
だからリスト型のオブジェクトの中に複数の型を混在させたり、階層化するのも容易でとても柔軟性が高い設計が可能なのですが、こういうオブジェクトを介したデータのやり取りではキチンとしたドキュメントをプログラム内に書いておかないと混乱が生じると思います。
だけど、普段からPythonを使っている人達は、このドキュメントを作ることが当たり前化しているPython環境でコードを書く人が多いのでそんなに困ったことにはなりません。
「他のプログラミング言語」が Python以外の全てを意味しているなら、この質問は暴言といってもよいのではないでしょうか。例えば、他の特定の言語と比べて読みにくいということなら、単に Pythonの流儀に慣れていないだけのような気がします。そうでもないのであれば、よっぽどサンプリングが偏っているのではないでしょうか。
さておき
リスト内包表記は便利なんですけど、初めて見る人には戸惑いがあるかもしれません。あと、変数のスコープに関しては紛らわしいと感じるかもしれません。まあ、結局どのプログラミング言語にしても慣れだと思いますけどね。
読みやすいか、読みにくいかは属人的なので、賛同は得にくいと思います。
実際、私はC、C++、C#、Java、Pascal、PHP、Rubyなどいろいろな言語を用いますが、Pythonは比較的読みやすい方と感じています。
当然、見やすいコードを書く人とそうでない人がいるので、書く人の性格にも依存する話です。
少なくともC言語よりは遙かに読みやすいと思います。
Pythonで代表的なWebアプリケーションフレームワークであるFlaskで、Webアプリをデバッグモードで開発サーバで起動すると、例外時にブラウザ画面にスタックトレースが表示されます。
そこまでは普通です。
驚くのはここからです。
ブラウザで表示されているスタックトレースの各行の右端に、ちいさなターミナルのアイコンが表示されています。何の気なしにクリックすると、起動時にコンソール側に表示されるDEBUG PIN値というものの入力プロンプトが表示されるので、入力してみると。
あれ不思議、ブラウザに表示されているその例外行の直ぐ下が、REPLとして入力可能になって、スタックトレースのその段階でのスコープでの、各変数の値や、式の計算やメソッド呼び出しができます。
初めに知らずにやって見たときはびっくりしました。
理想のデバッグ方法ぢゃないか。
たぶん、JupyterでもやっているようなPythonインタプリタとブラウザの接続をデバッガインターフェイスでやってるんでしょうが、これはすごい便利。デバッグ効率が格段に高まります。
それはPythonの上っ面しか眺めていないからです。
あえて一つ挙げるとすれば、コードの読み書きが簡単という点かと思います。
もし、Pythonなどのご興味ありましたら、Udemyでオンラインコースで講師をしておりますので、以下のリンクから無料サンプルなど見ていただけますと幸いです。
Python 3入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学び、実践的なアプリ開発の準備をする
Pythonは、pythonicで書くべきだと言われているように、他の読み手が読みやすいようにインテンドを言語のルールとしております。読みやすい書きやすいということは、開発のスピードも非常に上がるうえ、新しい開発メンバーが参加しても保守やメンテナンスが容易になり、障害のない良いシステムを提供できることにも繋がるかと思います。また習得も容易なので、Pythonを知らない人にも比較的習得しやすいことかと思います。
その他にいくつか挙げると
良い点
- オブジェクト指向で書ける
- ライブラリも豊富で、少ないコードで実装しやすい
- WEBフレームワークも充実
- テストフレームワークも充実
- インタラクティブシェルが便利
- CやC++のライブラリと連携が可能
- Raspberry Pi、データー解析など流行りのアプリケーションに多く使用されている
- アメリカシリコンバレーの上場企業も使用している (Google, Splunk, Yahoo etc)
悪い点
- 遅い
- モバイル開発には向かない
- マルチスレッドには向かない
などなどありますが、私はやはりコードの読み書きが簡単という点が最も優れていると思います。
最近は、Pythonの遅さを補うGo Langなど速い言語も流行ってきております。そのため、速さが必要なアプリケーションであればGo Langでも良いかと思いますが、速さをそれほど求めないアプリで、とにかくはやくアプリを完成させたい場合は、pythonなどを使うというのも良いのかもしれません。
例えばの例ですが、中国のWebサーバーでは数億人の人がアクセスするため、pythonではなく、Go langのWebアプリケーションなどが流行っているそうです。しかし、日本でアクセスがさほどない一般的なサイトであれば、DjangoなどのPythonのフレームワークを使えば、すぐにサイトを開発して運営ができます。あまり速度を求めないのであれば、最も読み書きしやすいPythonは開発スピードも保守運用にも優れていると思います。
何をしたいかによって「最も書くのが簡単」な言語は色々です。前提を置かずに「もっとも簡単」を評価することは困難だし、それに値するのがpythonであるともないとも答えることはできません。
たとえばテキスト加工ならawkの方がpythonよりは遥かに簡単です。あるいはperlの方が簡単です。
画像の加工ならImageMagickを利用したシェルスクリプトあたりを組むのが簡単でしょう。
楽譜の作成ならABC、組織図やマインドマップのようなものならdot言語などの専用言語があり、pythonでえっちらおっちら 書くよりも数十倍簡単でしょう。
基本的には、LISPからマクロ機能を取り除き、他のオブジェクト指向言語に似た構文を採用し、ブロックをインデントで表現する言語と考えればよいかと。
最初に習うべきかと言われると、疑問がある点が多いが、便利な言語ではあるね。
自由度が高い。これはある意味リスクを抱える。変数の概念がなく、値に型があってラベルを付けて管理するあたりは、昔の機械語ニーモニックのコーディングスタイルに近いものがある。
新旧の要素が混ざった様な面白いプログラム言語
プログラム言語自体の研究の素材としては最高です。目的は無いけどなんとなくプログラム言語に触ってみようという目的ならPythonはベストチョイスになる。
日本にある多くの開発現場でやってる様な仕様を先にガチガチに固めて、確実に動くプログラムを作るのならPythonじゃなくJavaの方が良い。業務システムならJavaだね。
Pythonはどちらかというとプログラマーのアイデアをそのまま形にするという使い方に向いている。研究者やベンチャー企業によく使われる。
Googleも設立当初はPythonの少ないコードで動くプログラムを作れる点に着目して急速にサービスを増やした会社として有名ですね。
プログラミング言語の人気をどう定義しましょうか。おそらく一意に決まる人気測定法はありません。たとえばインターネットでの検索数をベースにしたTIOBEインデックスというプログラミング言語人気ランキングがありますし、Stackoverflowでの言及数をベースにしたランキングもあります。あるいはDice.comのような求人サイトでの求人数をベースにしたランキングもあり、それぞれかなり異なった順序になっています。また、それぞれのランキングにおいても国ごとに順位はかなり異なります。
基本的に人気ランキングなど話のタネ以上の価値はないんですが、それにしてもなんのためにランキングを知りたいかが自覚できると、どのランキングを調べればよいのか解ると思います。
- データ分析
- 機械学習
- データ可視化
- webアプリケーション
- ネットワークプログラミング
- データベースプログラミング
- ゲーム
- 業務アプリケーション
- スクリプティング
- 数値計算
汎用プログラミング言語といって差し支えないのではないでしょうか。
YES/NOで答えるならNOです。
言語に意味があるわけではないです。
今後のビジネスマンは英語を学んだ方がいいと思いますか?
と同義な質問だと思いますよ。
そりゃ知ってらいいにこしたことはないけど、知らなくても普通に食べていけます。
必要が無ければプログラム言語なんて習得する必要はありません。
日常の細々とした作業をスクリプトを書いて便利に処理したいというだけなら Python だけで十分だと思います。何も考えずにスクリプトを書たら数ギガバイトのテキストファイルをそのまま普通に処理してくれたりするのでそれだけでも便利だと思います。もう、テキストエディタで開けるかどうか悩まなくても済みますよ。
もし、仕事で Python 以外の言語が必要になっても、Python をある程度身に付けた経験が役に立つでしょう。
とりあえず、スクリプトに任せられる作業を Python で書いて実行させる事から始められたら如何でしょうか?
それ以上は、これから起こる事次第です。
例えば、pythonインタプリタがないと動作できない。処理速度を向上させたいということで Go言語が作成されています。
どの言語を押さえるべきかは、プログラミングスキルをどの方向に生かすつもりかを確定した後で考えるべきことです。
どのプログラミング言語にも向き不向きがあり、どのようなソフトウェアを開発する必要があるかによって使うべき言語は変わります。そして、ひとつプログラミング言語をマスターすれば、他の言語の習得はそれほど難しい話ではありません。
pythonをそれなりに理解したという自信が得られたのなら、次は、プログラミング言語自体の勉強よりも、アルゴリズムとか数学とか論理学とか、そういうのの理解を深める勉強をした方がいいと思います。
・人工知能開発
・デスクトップアプリの製作
・WEBアプリの製作
・ネットから情報の自動取り寄せ
・Androidのアプリの開発というのを聞いたことはあるが経験がないのでわからない
・ローカルサーバー構築
・ゲーム作成(しかしこれは Pygameというゲーム作成するためのライブラリを使っても2Dのファミコンのようなゲームしか作れないためオススメできない。だが、 PythonはC言語系と連携できるので、描画や動作処理はC#などにしてイベント処理等を Pythonで行うのは良いかもしれない)
言語によるのではなくプロジェクトによります。
ちゃんと開発規約があって、コメントの書き方が決められていて、コードレビューがしっかり行われてるなら良いですが、そうでなければ…
AIの基礎知識
まずは、AIとはどういった技術なのか、AIの基礎知識について説明します。
AIとは
AIとは、「Artificial Intelligence」の略称で、人間が行う知的活動をコンピュータプログラムとして実現することを意味します。しかし、現時点ではAIの厳密な定義は定められておらず、その解釈や認識については企業や研究機関によってさまざまです。いずれにせよ、「人が実現するさまざまな知覚や知性を人工的に再現するもの」という意味合いで広く理解されていることを覚えておくと良いでしょう。
AIプログラミングでなにを開発できる?
AIプログラミングで開発できる分野としては「過去のデータから予測する回帰分析」「機械で画像を認識できる画像解析」「コミュニケーションを可能にする自然言語処理」などが挙げられます。
回帰分析の代表サービス:AI資産運用サービスや株価予測ツールなど。
画像解析の代表サービス:自動運転技術や、メルカリのクラウドAI分析サービスなど。
自然言語処理の代表サービス:iPhoneに標準搭載されているSiriや、LINEのチャットボット機能など。
AIを活用したサービスの作成手順
ここからは、サービスにAIを導入するまでの基本的な流れを説明します。
1.必要なデータを収集してAIに機械学習させる
まずは、AIに学習させるために必要なデータを利用目的に合わせて収集します。ただし、収集したデータが整理されていなかったり、不必要なデータが混ざっていたりすると機械学習は実行できません。そのため、データを機械学習に適したかたちに加工した上で取り込むようにしましょう。
2.学習済みモデルを作成する
次に、収集したデータを元に学習済みモデルを作成します。学習モデルとはいわゆるプログラムのことで、プログラミング言語を使って作成します。
3.プログラミング言語でAIを組み込む
モデル作成が終了したら、プログラミング言語を用いてAIをシステムに組み込み、動作状況を確認します。この際、テスト用データを用いて、AIの判別具合の精度もチェックすることが重要です。精度が低い場合には再度データの収集をするなど、見直しを行ってください。
AIプログラミングにおすすめの言語8選
プログラミングでAIを開発する際に使用する言語は多岐に渡ります。ここからは、AIプログラミングにおすすめの言語を8つ紹介します。
Python
AIプログラミングに最も使われている言語の1つがPythonです。シンプルなコードで読みやすい点が特徴で、AI開発だけではなくWeb開発など、幅広い用途で使用することができます。
Java
Javaは実務に活用されており、世界的に見ても需要が高いプログラミング言語です。処理速度もC++の次に速く、プラットフォームに依存しないことから、Windows・Linux・iOSなど、どのOSでも起動可能です。
Julia
近年、人気を集めているプログラミング言語がJuliaです。Juliaは2009年に開発が開始され、2012年にはオープンソースとして公開されました。その歴史は数あるプログラミング言語の中では圧倒的に浅いものの、JITコンパイラという技術によってスクリプト言語とは思えないほどの高速処理を実現しています。結果、爆発的な人気となり、現在では世界中で開発が進められています。
JavaScript
JavaScriptは、WebサイトやWebアプリケーション開発によく使われるスクリプト言語です。機械学習用のライブラリが豊富に用意されている点が特長で、既存のWebシステムにAIを搭載する際には、ライブラリを使用して簡単に扱えます。
C++
C++は、コンパイル言語を用いたプログラミング言語です。現在実用的に使われている言語の中では最高水準の速度を出せるので、C++を活用できるようになれば、コンピュータのeb性能を100%発揮できるようになります。ただし、メモリ管理の難しさや、言語仕様の大きさといった問題から、初心者にはあまりおすすめできません。
R言語
R言語は、AIプログラムの開発に向いている言語として有名です。もともとは統計学やデータ解析に使用されており、主に学術分野で用いられていました。R言語でWebアプリなどを作ることはできませんが、統計や機械学習に関するプログラムはPythonよりも簡単に記述できます。
Matlab
Matlabは科学技術計算や数値解析に強みを持つプログラミング言語です。使用時には、ライセンスを購入しなければなりません。しかし、ツールボックスを購入して追加することにより、多彩な機能を使用できるようになります。
Haskell
Haskellは、純粋関数型言語のひとつです。間違いが発生しないことや数学と相性が良いことから、主に金融投資関係、株や為替の自動取引(システムトレード)などの場面で使われています。
AIプログラミング言語はPythonがおすすめ
Pythonは、プログラミング言語界において長年人気のトップを占め続けています。なぜこれほどまでにPythonが人気なのか、その理由について見ていきましょう。
コードが分かりやすい
Pythonの最大の魅力は、なんといっても書式と文法がシンプルで分かりやすく、プログラミング初心者でも学びやすい点にあります。これほどまでにわかりやすい構文構造で、可読性が高いプログラミング言語は類を見ません。
ライブラリやフレームワークが充実している
Pythonには開発をサポートするライブラリやフレームワークも充実しています。これにより、少ないコードで機能を実装することができ、開発のスピードと質の向上に寄与しています。
世界的に流行していて需要が高い
前述の通りPythonはAIプログラミング開発分野において最大シェアを誇っており、求人でも需要が高いため、最初に学ぶプログラミング言語として最適です。
ユーザーコミュニティが活発
Pythonはユーザーコミュニティが活発であるため、ライブラリに関する意見や問題点が提起されやすく、開発者の機能更新・改善が早いことも利点となっています。
データ分析のサポートが充実している
PythonにはWebからのデータ収集に必要なパッケージである「BeautifulSoup」や「Requests」、「Selenium」が集約されています。また、分析ライブラリには、タスクをサポートする機能が数多く用意されているため、データ分析に費やす時間を大幅に削減可能です。
Webアプリの開発に強い
Webアプリケーション開発に適したフレームワークが豊富に揃っている点もPythonの強みです。実際に、世界的なサービスであるYouTubeやInstagramといったアプリケーションは、Pythonで構築されています。
AIプログラミング言語を覚えるのは難しい?
習得することでさまざまな恩恵を享受できるプログラミング知識。しかし、AIに関する分野は非常に専門性が高く、未経験者が独学でマスターすることは、現実的には容易ではありません。
「UMWELT」ならプログラミング不要でAIが活用できる!
「プログラミング言語をいちから学ぶには時間がない」「すぐにでも業務でAIを活用したい」などでお悩みの方には、TRYETINGの「UMWELT」がおすすめです。UMWELTは、数多くのアルゴリズムを搭載したノーコードAIであるため、AIのスキルを持った人材がいなくとも、自社に必要なアルゴリズムを簡単に組み立てることができます。
SB - agaroot
0 コメント:
コメントを投稿