ホームページ  >  記事  >  バックエンド開発  >  さまざまなプログラミング言語の長所と短所を合理的に評価するにはどうすればよいでしょうか?

さまざまなプログラミング言語の長所と短所を合理的に評価するにはどうすればよいでしょうか?

WBOY
WBOYオリジナル
2016-06-17 08:30:291084ブラウズ

私は特効薬を探しているわけではありませんし、個々の PHPer に戦争を始めるよう求めているわけでもありません。Zhihu についても同様の質問がありますが、PHP、Java、それぞれのプログラミング言語の特徴や利点は何ですか。 Python、C、C++? - C (プログラミング言語) ですが、とてもかわいくて賢いので、初心者が本当に知りたい質問はいくつかありません。

たとえば、PHP は WEB 開発とデスクトップ開発に使用できますが、PHP で開発されたデスクトップ ソフトウェアは存在しないため、実際には PHP という言語の方が Web 開発に適しており、これは正しい PHP のいくつかのレビューです。言語はツールであると言われますが、適切なタイミングで適切なツールを使用する必要があります。その機能を理解していなければ、どうやって使えばよいのでしょうか。しかし、言語の特性を理解するには、それを使用する一定の経験がある人だけが聞く必要があります。私がこの質問をする理由は、経験豊富な人々からこれらの特性を理解し、そこから学ぶためです。本当は言語戦争などを始めるつもりはなかった。

ご回答ありがとうございます ~ > _ 返信内容: まず、「合理的」の定義が明確ではなく、「良いか悪い」という言葉も明確ではないため、この質問に明確に答える方法はありません。私は自分の意見しか表現できません。

ここでは、シリコンバレーの起業家精神のゴッドファーザーである Paul Graham の記事「Beating the Average」をおすすめします。まずは読んでみてください。

質問者が言うように、「PHP は WEB 開発とデスクトップ開発に使用できますが、PHP で開発されたデスクトップ ソフトウェアは存在しないため、PHP という言語は実際には Web 開発に適しているという評価です。」 PHP 「すべての汎用プログラミング言語 (General Purpose Programming Language) はチューリングと同等であり、計算能力に違いはありません。しかし、多くの人がデスクトップやネットワークのプログラミングにチューリング マシンを使用することを好まないのはなぜですか?」アプリケーション? !なぜみんなアセンブリを使わないのでしょうか? !したがって、コンピューター言語の長所と短所を議論する場合、チューリングの等価性に頼るのは非常に低コストな方法にすぎません。しかし、計算パフォーマンスの観点から見ると、すべての言語がパワーを待っているのは事実です。では、私たちが通常、ある言語が他の言語よりも強力であると主張するとき、私たちは何を議論しているのでしょうか。 !それとも、同じ主題の新しいバージョンが古いバージョンよりも強力であるということでしょうか? あるいは、もっと明確に言うと、Java 1.8 にはラムダがあるため、Java 1.7 よりも強力なのでしょうか? Java 1.5 ではジェネリックスが導入されていますが、1.4 よりも強力ですか? Python 3.5 には async コルーチンと await コルーチンがありますが、Python 3.5 は Python 3.4 よりも強力ですか?まず、新しいバージョンはより強力だと思います。ジェネリックの導入により、Lambda では関数を明示的に含めなくてもオブジェクトにラップできるようになりました。 Python のコルーチンは、プログラム フローの制御をある程度自由にします。また、ほとんどすべての機能は古いバージョンでも実装できるため、言語がさらに強力になっていないとも感じますが、それはよりイライラさせられます。 でも、でも1.5 で導入されたジェネリックを補うためにライブラリを使用できますか?明らかにうまくいかないようです。したがって、ライブラリで補える機能とライブラリで補えない機能に分けることができるため、1.4 よりも 1.5​​ のほうが本当に優れているという議論は起こらないはずです。この点。しかし、Java 1.8 が 1.7 よりも優れているかどうかについては、また議論していただいても構いませんが、この議論には何の成果もないと思います。

言語の方が優れているかどうかについては、私の定義では、言語 A の特性は言語 B のライブラリで補うことはできず、B が言語 B を使用できる場合、この特性では言語 A の方が優れています。 library A のこの特性を補うために、A の方が優れているかどうかは議論の余地があります。 私は通常、この種の論争を避けるか脇に置きます。

明らかに、C 言語はアセンブリよりも優れているはずです。まず、C 言語はより多くの型と構造を定義できますが、第 2 に、C 言語には 3 種類の制御フローがあります。ステートメント、シーケンス、条件、ループ (最初に提案したのがマッカーシーかダイクストラかホールだったか忘れましたが、知っているなら教えてください) アセンブリ ライブラリがどれほど強力であっても、C 言語の文法上の利点を補うことは不可能です。しばらくの間のように。

以下は純粋に個人的な意見です:
では、Java は C++ よりも優れているのでしょうか? Java には自動メモリ リサイクルがあり、C++ にもスマート ポインターがあります。唯一の違いは学習コストです。他の場所では、Java には C++ ライブラリでは補えない機能もいくつかあります。

Java は C 言語よりも優れていますか? Java のオブジェクト指向の考え方は抽象的な問題にすぎず、C 言語でもオブジェクト指向プログラミングが可能です。しかし、範囲外の配列インデックスなど、Java の方が実際に優れている側面もあります。

Haskell は Java よりも優れていますか?答えは「はい」です。 Haskell には、Java では利用できない数百行または数千行のコードの作成を節約できる機能が多数あります。

この記事は Blub と呼ばれるパラドックスを示しています:
Cobol やアセンブリ言語よりも強力な言語である Blub 言語 (架空の言語) を使用するプログラマーがいます。アセンブリの場合、それがコンパイラが望んでいることだからです。 Cobol に関しては、Blub を使用するプログラマは、Cobol プログラマが Cobol を使用して物事を成し遂げる方法を知りません。Cobol には XXX 機能さえないため、このプログラマは Cobol やアセンブリの使用方法を知りません。

この Blub プログラマーが Blub ほど強力ではない他の言語を見下すたびに、この能力の欠如は非常に明らかです。なぜなら、これらの言語には Blub プログラマーが使い慣れている機能がないからです。そして、彼らはより強力な言語に目を向けても、自分が上を向いているとは感じません。彼らが目にしているのは奇妙な言語 (ここで著者は Lisp を指しているはずです) だけであり、彼らは Blub がそれと同じくらい強力であるが、その中には奇妙なものがたくさん含まれていると考えています。 Blub で十分です。Blub の観点から考えます。

パラドックスはここで終わります。
これが言語論争の原因かもしれません。ほとんどの人は、使い慣れた言語が 1 つあれば十分です。この言語での考え方にすでに慣れています。後者はひどいです。

(ここで誰かが中国人に尋ねました。なぜ勉強するのですか? ここの「なぜ」の後には動詞が続きます。私たちは習慣的に目標について考えます。たとえば、中国の台頭のために勉強するなどです。巡礼のため、学び続けること、すべての世代に平和をもたらすには、常に目標が必要です。なぜここが英語で「for」に相当するのでしょうか。外国人はこの質問に次のように答えるでしょう。「知識自体が学ぶ価値があるからです。」外国人はユークリッドです。彼はギリシャ人で英語は話せないかもしれませんが、コンピュータ言語はもちろんのこと、自然言語は私たちの思考を制限すると言いたいだけです)

たとえば、再帰言語では、 、アセンブリでは、あなたが考える言語は常にいくつかのことをループするだけであり、これらのレジスタの山を処理するためにどの命令を使用するべきかだけを考えます。だから、飛び出して、今慣れ親しんでいるものを壊して、忘れてもう一度始めるべきです。Haskell、F#、Lisp、Scala、Scheme、Clojure、Ocaml、Erlang を見てみると、世界は豊かでカラフルです。 Haskell や F# には、Java、C++、C# のライブラリでは決して補うことができない機能がたくさんあります。しかし、これは Haskell と F# を使用しなければならないという意味ではありません。私が見たくないのは、あなたが長年 C 言語と C++ 言語を専門としていて、その後 Go の勉強に多くの時間を費やしたということです。 Python は十分ではないと思うので、新しいアイデアが得られるでしょう。

最後に Beating the Average からの引用:
アセンブリですべてのプログラムを手書きするのは間違いであることは誰もが知っていますが、より一般的な原則に気づいている人はほとんどいません。から、ほとんどが同じなら強力なものを使わないと間違いです。

もちろん、この原則には例外があります。既存のプログラムと連動するプログラムを作成する必要がある場合は、元のプログラムと同じ言語を使用することをお勧めします。ビットを操作するような非常に単純なプログラムを書く必要がある場合は、抽象化能力の低い言語で十分であり、高速になります。作成後に破棄されるような短いプログラムを作成したい場合は、作業を迅速に完了できる最も強力なライブラリを備えた言語を使用する必要があります。しかし、一般的なアプリケーション ソフトウェアの場合は、自分が知っている最も強力な (そして効率的な) 言語を使用する必要があります。アセンブリ言語など、他の同様の言語を使用するのは間違いです。 以下は、Wang Xiaobo の記事「就業経験」からの転載です。
出典、王暁波氏の著書
オンラインで読める最も静かな小説
テキスト作業体験
ソフトウェア会社の上司が以下の例に従わないことを願っています。

私は米国に留学していたとき、さまざまな雑務を働きました。あるとき、上海から来た老操さんと私は、中華料理店のために家を改築しに行きました。このレストランのオーナーは上海人で、口は尖っていて、頬は猿のようで、非常にケチです。人生の半分を料理人として過ごし、お金を貯めて、自分のレストランを開きたいと考えていますが、ちょっとしたことです。緊張している。曹操の言葉で言えば、この顔は本当に醜いです。仕事の初日、彼は私たちにこう言いました。「お金を節約するためだけにあなたたち二人を雇ったのです。そうでなければアメリカ人を雇ったほうがいいでしょう。」このプロジェクトは私の希望通りに行われなければなりません。使いたい道具や材料を教えていただければ、購入させていただきます。私を利用しようとしないでください...

以前、アメリカが先進的な技術とビジネスを持っていることは知っていましたが、アメリカがまださまざまな国であるとは知りませんでした職人たち。私たちが働いている通りには、電気技師、配管工、大工などの大規模なグループのほか、装飾プロジェクトを担当する小さな請負業者もいます。彼らは私たちが仕事を始めると聞くとすぐに見に来ました。私たち。まず、私たちが大ハンマーやハンマーを振り回す姿を笑顔で見ていたが、それから私たちはボスを見つけるために後ろに走って行き、こう言った、「もしあなたが雇ったこの二つの宝物が今世紀中にこのレストランの改装を完了できたら、私は負けます」あなたは百ドルです。本当に耐えられず、ドリルを捨てたかったです。しかし、老操は歯に唾を吐き、「無視する!」と言いました。今世紀中に仕事を終わらせることはできないし、次の世紀もあるでしょう。とにかく、チーラオは私たちに賃金を支払わなければなりません...

諺にあるように、ダイヤモンドを持っていないならやめてください。磁器の仕事に就かないでください。家を飾る方法を知らずにこの仕事を引き受けるのは私たちの責任です。よくわかりませんが、力があれば小さな仕事をする資格はあります。老曹はもともと湖東造船所の出身で、船室の装飾を専門とする銅の労働者から昇進した技術者でした。彼は常々、レストランの装飾方法を知りませんでした。今はそれが最優先事項だといつも言っていました。道具を買ったりレンタルしたりすることはできますが、チラオのボスはいつも、他人を利用しようとしないでくださいと言いました。些細な利益に貪欲であると疑われるよりは、一生懸命働いてお金を稼ぐ方が良いでしょう。

徹底的に叩きのめした後、私たちはこのストリートで一定レベルの尊敬を獲得しました。ちなみに、私はセメントブロックを一つずつ取り出してゴミ箱に捨てました。 上司は台車を借りることに消極的でした。人件費を払ってから道具をレンタルすると損をすると感じたのだ。アメリカの職人たちが通りかかると、いつも雑談をしに来て、私たちの勤勉な仕事に深い敬意を表します。しかし彼らは、これはあなた方二人の仕事のやり方ではないと言いました。正直に言うと、彼らは皆、この改修プロジェクトを引き継ぎたいと考えていますが、価格については合意できません。次のステップは、古い間仕切り壁を取り壊すことです。とても簡単なことだと思って、大ハンマーを振って叩いただけで、たった一撃で上司に止められました。壁の木が壊れるだろうと彼は言った。隔壁にあった木はボロボロの木切れだけだった。しかし、上司はそれを床を作るために使うと言った。そこで、腐った木から釘を一本ずつ掘り出しました。アメリカ人たちは私たちを見て、何をしているのかと尋ねました。私が真実を話すと、アメリカ人たちはお腹を覆い、地面にしゃがみ込み、その場で転がりながら笑いました。今回は、老曹も我慢できず、私が話しすぎたと責めました...

釘を仕上げた後、新しい木材をいくつか購入しました。上司が私たちの大工仕事を試したいと言っています。まずはドアを作りましょう。老曹は木を切るのに鋸を使いました。「この鋸はそんなものではないと思います。木をまっすぐに丸く切ります。」なぜこれまで見てきた鋸とこれほど違うのでしょうか?私が仕事をしていると、アメリカ人の大工さんが来ました。彼は微笑んで、私たちが何をしたのか尋ねました。私は留学する前は大学の教師をしていましたが、学校に恥をかかせるわけにはいかないので言えません。老操の出自を語ることは湖東造船所の恥となるので言えない。私は言いました:私たちはアーティストです。これはまったくの嘘ではありません。私は海外に行く前に小説を出版していましたが、老曹は絵がとても上手で、彼の作品は上海の労働者芸術展にも出品されていました。私はひそかに誇りに思っています。私たちの芸術的気質は、他の人が一目見てわかるほど強いのです。思いがけず、彼はこう付け加えた。「あなたほど働く労働者はいないよ!」老いた美女が立ち去るとすぐに、老操はのこぎりを落として叫び始めました。このノコギリの正しい使い方は、庭の枝を切ることだということが分かりました...

私たちはチラオのボスの下で 1 か月以上働き、数百ドルの給料を稼いでいましたが、レストランは依然としてレストランではなく、冷蔵倉庫ではなく、廃品置き場のように見えました。あっという間に夏が過ぎ、秋が来て、学校に戻る時期が来ました。上司の顔はますます醜くなり、私たちに毎日残業するように促しました。彼は促しても無駄で、手にはハンマーと鉄の棒を持っていて、いくら頑張っても仕事ができませんでした。その通りにいるアメリカ人の職人たちもその匂いを嗅ぎ、私たち二人がバカにしているのを見ながら、全員がドアの前に集まり、チーラオのボスが彼らにプロジェクトを引き渡すのを待っていました。そんな状況下では老操も耐えられなくなり、ついに私との仕事を辞めてしまいました。したがって、このプロジェクトは熟した桃のようにアメリカ人の巨匠の腕の中に落ちました。元々は仕事を辞めて退職するタイミングでした。しかし、老曹は依然としてアメリカ人がどのように働くのかを見たいと考えている。彼は、このプロジェクトは卑劣に行われたが、それは彼のせいではなく、すべて悪い考えに満ちた赤い男のせいだと言いました。もし彼が望むようにやれば、外国の悪魔に中国人がどのように働くかを示すことができます...

アメリカの請負業者がプロジェクトを引き継ぎ、すぐに電気技師に分担しました、大工、配管工、今朝はあなたの午後、今日の午後は彼の午後、明後日は私の午後など。何度か電話をした後、トラックにいっぱいの道具を積んで誰かがやって来ました。私のことは言わないでください、老曹ですらこんなものは見たことがありません。電動ノコギリやカンナのほかに、屋内で運転できるバッテリー駆動のフォークリフトもあり、5 を 2 で割った 3 ストロークで、置き去りにされたガラクタを家の外に押し出すことができます。電気屋さんは電動昇降台に乗り、天井からワイヤーを上下に張り巡らせ、その下では大工さんが非常に熟練した技術で床を組み立てていました。既製のコンポーネントを使用していますが、作業が非常に速いことは認めざるを得ません。設置後、電気カンナが走り去り、明るくなったので、作業が終わると、すぐに機械を運び出し、新しい作業員と機械が入ってきて、あっという間にレストランの様子になりました。 .. 老曹と私は見てみました しばらくすると、彼は落胆して立ち去りました。なぜなら、私たちは皆労働者であり、尊厳を持って働く方法を知っているからです。
今の若者は本当に頭を使わず、ただ論文を書くために使える知識を求めているだけなんです、甘いと言うか悪意があると言うか本当に分かりません。学校では宿題をサボってばかりで、社会に出ると盗作ばかりしてしまう彼らは負け組です。

合理的な評価を遵守したいのであれば、科学的評価は合理的な評価です。
科学的評価の場合、再現可能な検証または実験方法を確立するだけで済みます。

参照のみの検証または実験方法の手順は次のとおりです。

1. プログラムで解決できる一般的な問題を選択します。
2. 解決できる候補のプログラミング言語を選択します。言語対策、ライブラリなどの範囲
3. 合意された範囲内でこの問題を解決するためのコードを作成するために、中級以上のプログラマーを招待する
4. この問題をアップグレードするか、この問題の適用を拡張します。問題範囲

は上記の手順に従って反復され、問題を解決する各言語のコードの変更が反復ごとに (つまり、問題が変化したとき) カウントされます。

候補となるプログラミングの問題に関しては、主流の開発環境が解決する必要がある問題に適合するよう最善を尽くす必要があります。
---
言語品質の基準が何であるかについて議論することに関しては、それは別の問題です。 プログラミング言語の経済 OpenClassroom
さまざまなプログラミング言語の長所と短所を合理的に評価するにはどうすればよいでしょうか? プログラミング言語についてあまり合理的になる必要はないと思います。まず、プログラミング言語は選べるものではないことも多く、選べるとしても選択肢はそれほど多くありません。趣味としては、あまり合理的になる必要はありません。個人的には Clojure の方が好きですが、実際に自分で何か作るなら絶対に使いたいと思っていますが、この時期は仕事が忙しいので作る時間がありません。本当にこの言語が好きです。

さらに、JavaScript、Python、Ruby など、より柔軟で低レベルの詳細をあまり扱う必要のない言語も好みます。私は無限の詳細と非常に複雑なルールを扱う必要がある言語が嫌いです。その代表的なものは C++ です。

優れた言語とは、シンプルで、信頼性が高く、柔軟である必要があります。
機能には、機能性とオブジェクト指向の両方のサポート、柔軟性の高い構文、巨大なクラス ライブラリ、ガベージ コレクション メカニズム、例外処理メカニズム、高度なマルチスレッド モデル (アクターなど)、および最小限の機能を使用する機能が含まれる必要があります。コードはほとんどのことを実行します。実際、これらの要件を満たすのは Clojure だけです。

しかし、アプリケーションの開発に clojure を使用すると決めた後、人材を採用できないというジレンマに直面しなければなりませんでした。ここはシアトルではなく西安です。 私はコードを書くのが好きではないので、使用する必要のある言語を使用した開発も難しくありません。 一般的に、新人が彼をサポートするのは、彼があまり学ぶ必要がないからであり、上司が彼をサポートするのは、彼の仕事の多くを新人が行う必要があるからだと思います。これは悪い言葉です。 これが歴史を読むことの大切さです。各プログラミング言語の遺伝子は基本的に、最初に設計されたときの目的によって決まりますが、後天的な変更も影響しますが、魚をクマの足に変えることは、クマに直接クマの足を求めることほど良いものではありません。

前の写真は少し古いので削除されました。

さまざまなプログラミング言語の長所と短所を合理的に評価するにはどうすればよいでしょうか? 私はバード兄弟の言葉に非常に同意します。
おそらく彼らは、複雑なことをマスターするのは恥ずかしいことだと感じていますが、言語は学ぶべきものであるということを忘れています。実際の問題を解決し、アイデアを実際のツールに変換することで、言語スキルの成長ではなく、それらを使用して問題を解決するプロセスにおける問題解決の経験が成長する必要があります。
PHP プログラマー。他の言語とは異なり、プログラマーは最適化作業の一部をコンパイラーに任せることができます。 実際、さまざまな言語間の最も根本的な違いは、思考哲学の違いです。
php は実用的で、すべてが最も単純なコード補完機能に基づいており、開発、展開、更新が簡単です。
Python は非常に簡潔で、最も単純な構文を使用してタスクを効率的に完了するよう努めています。
Java は厳密であり、構文にはさまざまな必須型、必須の try catch などが必要です。
他の言語にも独自の思考哲学があり、ある程度言語を習得すると、自分の性格に合わない言語を使うことはできても、どんどん嫌になっていきます。 、気に入らないでしょう。
さまざまな言語の応用分野は異なりますが、新しいプロジェクト開発でどの言語を使用するかは、基本的に、どれがより適しているかというよりも、ディレクターの好みと会社のマンパワーによって決まります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。