ホームページ 見出し プログラマーとして、複数の言語に精通している必要があります

プログラマーとして、複数の言語に精通している必要があります

Mar 12, 2018 pm 05:57 PM
多言語 プログラマー

プログラマーとして、複数の言語に精通している必要があります

プロジェクトに着手するときに私たちプログラマーが行う必要がある重要な決定の 1 つは、システムの実装に使用する言語、または言語のセットを選択することです。この決定は、システムの実装だけでなく設計にも影響します。たとえば、オブジェクト指向言語を使用するべきですか? それとも手続き型言語を使用するべきですか? どの言語を選択するかは、プロジェクトとその一部であるプログラムのライフサイクルに大きな影響を与えます。言語を選択する: このタイプのシステムを実装するために通常使用する言語、私が最もよく理解している言語、この言語でのプログラミングを楽しんでいるなど。

この決定は重大かつ長期的な結果につながるため、この選択を行う際には、より現実的であるべきでしょうか? 多くの場合、私たちは選択した言語によって盲目的に偏見を抱くことになります。そして、場合によっては、その言語を選択したくない理由が、まさにその言語を選択する理由である可能性があります。

自分の偏見をオープンにして正直になれば、装飾するときに丸い穴に四角い釘をはめ込む苦労をいくらか和らげることができます。プロジェクトに最適な言語を選択するための秘訣はありませんが、より適切で適切な言語を選択するのに役立つ原則がいくつかあります。

完璧な言語などありません

これは初心者であっても誰にでも予想されることであり、私たちの多くは「もちろん、この言語は完璧な言語ではない」と認めますが、同時に、多くの人は私たちの中には今でも「この言語は最高のプログラミング言語だ」と言っている人がいます。ある言語がプロジェクトに最適な言語であると判断する鍵となるのは、プロジェクトのコンテキストです。つまり、最適な言語は特定の範囲内でのみ存在します。これが私たちの第一原則です:

完璧な言語はありません。どの言語にも長所と短所があります。

たとえば、通常 Java や Python などのランタイム言語を使用する多くの開発者は、メモリ管理などの低レベルの詳細に焦点を当てたり、コンパイル時の型を気にしたりするため、C や C++ は息が詰まると主張しています検査の粒度が厳しいその一方で、開発者には分散された責任が課せられます。これは、私たちが開発しているプロジェクトが、メモリ管理や単一ループで発生するコピー割り当ての数など、一見些細なタスクに焦点を当てていない限り当てはまります。

逆に、私たちがプロジェクトやプロジェクトの一部に取り組んでいる場合、コードがどれほど効率的であるべきか、プログラムがどれほど重要で安全であるべきかについて偏ったニーズがあるのは自然であり、これらの一見退屈な詳細はまさにそのレベルである可能性があります私たちが求めている粒度。この新しい状況では、Java や Python のランタイムの性質は、あまりにも無関心、またはあまりにもぼんやりしているように見えます。代わりに、メモリの割り当てと解放時に実行される移動代入とコピー代入の数を厳密に制御し、ランタイムにエラーを漏らすのではなく、コンパイル時にできるだけ多くのエラーをキャッチできるようにしたいと考えています (次のように動作します)。ランタイム異常)。

理論的には「完璧な言語はない」というのは明白に聞こえますが、開発者としての私たちの行動はしばしばこの概念から逸脱します。私たちは自分のお気に入りの言語が不完全であることを知っていると言いながら、開発するプロジェクトでは依然としてこの言語を使用し続けます。それが適切かどうかは関係なく。さらに、別の開発者が私たちの言語選択に疑問を抱いたとき、私たちはその反論の中に真実を見出すのではなく、私たちの選択を積極的に擁護します。どの言語にも長所と短所があることに注意してください。習得する言語の長所と短所を理解し、状況に応じて選択してください。

ある言語が嫌いな理由は、その言語を使用すべき理由である可能性があります

直観に反するように思えるかもしれませんが、場合によっては、ある言語が嫌いな理由がその言語を使用する理由である可能性があります。上記の例でも、C++ 開発者としての私の経験では、追跡すべきさまざまな概念 (メモリ管理やオブジェクトの有効期間、C++ プログラミングの 3 原則など) が非常に多いため、プロジェクトを完了するまでに時間がかかりすぎることがよくあります。 .) 単純な関数は煩雑になる可能性があります。 C++ で数週間開発した後、Python、Java、またはその他の「高級」言語を使用するのは才能のように思えますが、本当にそうですか?

場合によっては、言語が嫌いになることがあります。言語には理由があります。なぜそれを使うのか。私がドライバーや安全性が重要なリアルタイム システムを開発している場合、上で述べた面倒な理由がこの言語の最大の利点になるかもしれません。たとえば、C++ は、オブジェクトがコピーされるときに実行されるロジックを表現するためのメカニズムを提供します。これは、効率と厳密性を重視する場合に非常に役立ちます。

これはすべて良くて素晴らしく見えるかもしれないので、嫌いな言語がより役立つ可能性がある文脈を正確に特定するのは困難です。では、どの言語が嫌いなのかをどうやって知ることができるのでしょうか? これは私たちの 2 番目の原則につながります:

自分に正直になる: 言語が嫌いな理由を知り、自分を嫌いだと独断的に考えないでください。

たとえば、上記の C++ の例では、私が長い間 C++ でプログラムするのが好きではない理由は、この言語が厳密な思考を必要とするためです。そうしないと、ジャングルに閉じ込められたのと同じように間違いを犯しやすくなります (合格しました(森全体よりも木に重点を置きます)。この厳格さにより、開発者は「オブジェクトをスタック上に作成しているのか、それともヒープ上に作成しているのか、あるいは部分的にスタック上に作成し、部分的にヒープ上に作成しているのか?」「このクラスを拡張可能にするには、テンプレートを使用する必要がある」などの疑問を抱くことがなくなります。それとも相続?」などの決定を下します。他の言語では、開発者はそれぞれオブジェクトを作成し、オブジェクト指向の継承を使用するだけでこれらのタスクを実行でき、言語 (より正確にはコンパイラーまたはインタープリター) がこれらのタスクを処理するため、次の機能に進むことができます。詳細。

しかし、自分に正直に言うと、C++ のこれらの機能が好きではない理由は、これらの詳細を表現する責任が私に課せられるからであると認めます。他の言語では、これらの詳細について私に責任がないだけでなく、それらを表現する責任もありません。それらは開発者から抽象化されています。これらの詳細が不可欠な状況では、私が C++ を好まない理由は、まさにこの言語を使用する必要がある理由です。

これは、言語について眉をひそめたり、腹を立てたりする機能を使用する必要があるという意味ですか? その必要はありません。別の見方もできるかもしれません。これらの機能を欠点とみなすのではなく、仕事を遂行するための必需品として受け入れる必要があるのか​​もしれません。 「何という悲劇だろう」と言う代わりに、「この言語でこれができるのは神に感謝です」と言うべきです。状況によっては、これらの能力は賜物であり、別の場合には義務であることを覚えておいてください。言語の機能が気に入らない理由について自分に正直になってください。

他の言語に精通しているほど良いです

そのために、ここでお話したい 3 番目の原則があります:

もしあなたが持っている道具がハンマーだけなら、すべての問題は釘のように見えます。

このルールはソフトウェア エンジニアリングには適用されませんが、多くのソフトウェア開発状況を明確に特徴付けています。多くの場合、私たちは言語、または言語をサポートするツール (Java の JMS、Python の ASYNCIO、Rails の Ruby など) が存在することを知っているので、そのツールを選択します。私たちが精通している唯一の言語が Java である場合、遭遇するすべての問題を Java のコンテキストに適応させることになります。たとえば、「通信アプリケーション用のルーティング フレームワークを作成する必要があります。Java でこれを行うにはどうすればよいですか?」これにより、使用できるツールが制限され、ジョブに適切なツールを選択する能力が人為的に制限されます。

この問題を解決する方法は、視野を広げて、他の言語の機能と複雑さを理解することです。 Andrew Hunt と David Thomas が「The Pragmatic Programmer」で示唆しているように、毎年新しい言語を学ぶのが良い方法です。それは思っているほど簡単ではありません。言語を学ぶことの意味は人によって異なります。もう 1 つの派生的な問題は、進行中のプロジェクトではこの 1 つの言語しか使用しないことが多く、別の言語を学習するのが無駄になってしまうことです。たとえば、私が Android 開発者で、基本的に毎日 Java しか使用しない場合、C# を学ぶのは時機を逸した時間の無駄のように思えるかもしれません。

幻想に騙されないでください。別の言語を学ぶ利点は、問題を別の視点から見ることができ、問題に最適なツールを使用できることです。これを行うには、他の言語に関連する注意点と、開発者が問題を解決するためにそれらの言語を使用する方法を学ぶ必要があります。たとえば、開発者が C++ でメタプログラミングを実行したい場合、C++ でテンプレート メタプログラミング (TMP) を使用できますが、Java でリフレクションを使用することもできます。他の言語が同様の問題をどのように解決するかを理解することで、それが役に立たないと判断するリスクが軽減されます。

別の例として、クラスの実行時の特性を変更できるようにする必要がある場合、C++ の複雑さに精通している C++ 開発者は、このコンパイル時言語の境界を拡張するソリューションをでっち上げたくなるかもしれません。 。また、Java の知識もある別の C++ 開発者は、「私は C++ が好きですが、この問題を解決するには Java のランタイム リフレクションの方が適しています

プログラミングはたくさんあるので、開発者は言語を選択できます。」と言うことができます。 , そのため、どの言語を学ぶか優先順位を付けることが重要です。今日最も人気のある言語から始めるのもよいでしょう (「Github で最も人気のある言語」、「Github の言語トレンド」、「最も人気のある 9 つのコンピューター言語」、「プログラマー向け Facebook によると」を参照してください) 」など)。

言語は手段であり、目的ではありません

これは 4 番目で最後の原則であり、最も哲学的に聞こえるかもしれませんが、最も重要であるとも言えます:

プログラミング言語は手段であり、目的ではありません。

あなたが言語標準の作成者またはコンパイラの作成者でない限り、プログラミング言語を目的ではなく手段として扱うべきです。目的はプロジェクトを完了することであり、最終的な目標はプロジェクトを完了することです。特定の言語を使用します。これは、すべての開発者がその言語について好き嫌いを要求する権利がないという意味ではありません (実際、自分自身に正直であれば、これらの好き嫌いは有利に働く可能性があります。上記の 2 番目の原則) ですが、言語の機能がプロジェクトのニーズに本当に適合しない限り、「これは言語のこの機能を使用する素晴らしい機会です」などの決定を下す必要はありません。

言語は、目前の問題を解決する方法を表現する単なる手段であることを覚えておくことが重要です。解決している問題領域を最もよく表現する言語を選択するようにしてください。

その他の考慮事項

言語を選択する際に考慮する必要がある追加の事項がいくつかあります:

その言語が他の言語とどのように相互作用するかを考慮します。たとえば、Python がほとんどのプロジェクトに最適な言語であると判断したものの、プロジェクト内に非常に高いレベルの粒度または効率を必要とする明確に定義されたコンポーネントがある場合 (C または C++ の方が適しています)、このプロジェクトでは Python を使用できないという意味ではありません。代わりに、Python を使用し、C または C++ で特定のコンポーネントを記述してから、Python C API を使用してこのコンポーネントに接続することを検討してください。このようなソリューションを定式化するには、Python に C API があることを知る必要があることに注意してください。したがって、最も一般的な言語の機能を知っておくと役立ちます。

ミドルウェアは複数の言語の使用を許可できます。たとえば、モバイル デバイスとサーバー アプリケーションなど、通信する必要がある 2 つのアプリケーションがある場合、これはそれらが同じ言語を使用する必要があるという意味ではありません (もちろん、それが最善の決定であると判断した場合は、同じ言語を使用することもできます)。 。モバイル デバイスが Android フォンで、サーバー アプリケーションが Python アプリケーションとして最適な場合、RabbitMQ などのメッセージ ブローカーを使用すると、両方の言語を同時に使用して通信できます。Android アプリケーションは Java RabbitMQ を使用できます。 API を使用できますが、サーバー アプリケーションでは Python RabbitMQ API を使用できます。

他の言語の特徴を受け入れましょう。 Java 開発者であれば、パッケージを使用してソース コードの論理単位を分離します。Python 開発者であれば、Python のパッケージ構造を使用して同じことを行います。名前空間を使用するか、クラス名にプレフィックスを付けます (つまり、「DZone_MyClassName」)。自分が話している言語の特徴を理解し、それを受け入れてください。ローマでは、ローマ人と同じように行動してください。そうしないと、イタリア語の発音を好むためにイタリア語のアクセントでドイツ語を話すようなものになり、特徴のないものに聞こえてしまいます。もちろん、言語の機能が古くから存在している可能性もありますが、この場合は必ず理由があるはずです。その理由を必ず理解してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

どのAIプログラマーが一番優れているでしょうか? Devin、Tongyi Lingma、SWE エージェントの可能性を探る どのAIプログラマーが一番優れているでしょうか? Devin、Tongyi Lingma、SWE エージェントの可能性を探る Apr 07, 2024 am 09:10 AM

世界初の AI プログラマー Devin の誕生から 1 か月も経たない 2022 年 3 月 3 日、プリンストン大学の NLP チームはオープンソース AI プログラマー SWE-agent を開発しました。 GPT-4 モデルを利用して、GitHub リポジトリの問題を自動的に解決します。 SWE ベンチ テスト セットにおける SWE エージェントのパフォーマンスは Devin と同様で、平均 93 秒かかり、問題の 12.29% を解決しました。専用端末と対話することで、SWE エージェントはファイルの内容を開いて検索したり、自動構文チェックを使用したり、特定の行を編集したり、テストを作成して実行したりできます。 (注: 上記の内容は元の内容を若干調整したものですが、原文の重要な情報は保持されており、指定された文字数制限を超えていません。) SWE-A

520 人のプログラマーが恋愛感情を表現する独自の方法!断ることはできない! 520 人のプログラマーが恋愛感情を表現する独自の方法!断ることはできない! May 19, 2022 pm 03:07 PM

520 年が近づいています。彼は毎年恒例の犬を苦しめるショーのために再びここに来ました。最も合理的なコードと最もロマンチックな告白がどのように衝突するかを知りたいですか?最も完全で完全な広告コードを 1 つずつ見て、プログラマーのロマンスが女神の心を掴めるかどうかを確認してみましょう。

C言語の魅力に迫る ~プログラマーの可能性を引き出す~ C言語の魅力に迫る ~プログラマーの可能性を引き出す~ Feb 24, 2024 pm 11:21 PM

C言語学習の魅力:プログラマーの可能性を引き出す テクノロジーの発展に伴い、コンピュータプログラミングは大きな注目を集めている分野です。数あるプログラミング言語の中でもC言語は常にプログラマーに愛されています。そのシンプルさ、効率性、幅広い用途により、C 言語の学習は、多くの人にとってプログラミングの分野に入る最初のステップとなっています。この記事では、C言語を学ぶ魅力と、C言語を学ぶことでプログラマーの可能性を引き出す方法について解説します。 C言語学習の魅力は、まずその簡単さにあります。他のプログラミング言語と比較すると、C言語は

2023过年,又限制放烟花?程序猿有办法! 2023过年,又限制放烟花?程序猿有办法! Jan 20, 2023 pm 02:57 PM

本篇文章给大家介绍如何用前端代码实现一个烟花绽放的绚烂效果,其实主要就是用前端三剑客来实现,也就是HTML+CSS+JS,下面一起来看一下,作者会解说相应的代码,希望对需要的朋友有所帮助。

民間の仕事を引き受けてお金を稼ぎましょう! 2023 年のプログラマー向けの受注プラットフォームの完全なリスト! 民間の仕事を引き受けてお金を稼ぎましょう! 2023 年のプログラマー向けの受注プラットフォームの完全なリスト! Jan 09, 2023 am 09:50 AM

先週、「2023PHP起業家精神」について厚生生放送を行いましたが、多くの学生から具体的な受注プラットフォームについての質問がありましたので、以下のphp中国語サイトに比較的信頼できる22のプラットフォームをまとめましたので参考にしてください。

プログラマーは何をしますか プログラマーは何をしますか Aug 03, 2019 pm 01:40 PM

プログラマーの職務責任: 1. ソフトウェア プロジェクトの詳細な設計、コーディング、組織化と内部テストの実施に責任を負います; 2. プロジェクト マネージャーおよび関連担当者が顧客とコミュニケーションを取り、良好な顧客関係を維持できるように支援します; 3. 需要調査とプロジェクトに参加します実現可能性パフォーマンス分析、技術的実現可能性分析、需要分析 4. ソフトウェア部門が開発したソフトウェア プロジェクトを提供するための関連ソフトウェア テクノロジに精通しており、熟練している 5. ソフトウェア開発の状況についてプロジェクト マネージャーにタイムリーにフィードバックする責任がある 6. . ソフトウェアの開発および保守に参加する プロセス中の主要な技術的問題を解決する; 7. 関連する技術文書などの作成に責任を負います。

VSCode の過去のバージョンをダウンロードしてインストールする方法の簡単な分析 VSCode の過去のバージョンをダウンロードしてインストールする方法の簡単な分析 Apr 17, 2023 pm 07:18 PM

VSCode の過去のバージョンをダウンロードしてインストールする VSCode のインストール ダウンロード インストール リファレンス VSCode のインストール Windows バージョン: Windows10 VSCode バージョン: VScode1.65.0 (64 ビット ユーザー バージョン) この記事

2022 年の最高の Windows 11 ターミナル エミュレーターのリスト: 推奨事項トップ 15 2022 年の最高の Windows 11 ターミナル エミュレーターのリスト: 推奨事項トップ 15 Apr 24, 2023 pm 04:31 PM

端末エミュレータを使用すると、標準のコンピュータ端末の機能をエミュレートできます。これを使用すると、データ転送を実行したり、別のコンピュータにリモートでアクセスしたりできます。 Windows 11 などの高度なオペレーティング システムと組み合わせると、これらのツールの創造的な可能性は無限大になります。ただし、サードパーティ製の端末エミュレータが多数提供されています。したがって、適切なものを選択するのは困難です。ただし、必須の Windows 11 アプリと同様に、お客様が使用して生産性を向上できる最適なターミナルを選択しました。最適な Windows 11 ターミナル エミュレーターを選択するにはどうすればよいですか?このリストのツールを選択する前に、当社の専門家チームはまず Windows 11 との互換性をテストしました。私たちもチェックしました