多くのプログラミング言語の一部を学ぶのは苦痛ですか?


37

9年生のときにBASICでプログラミングのキャリアを始めました。加算、減算、印刷を行う簡単なプログラムを書くことで、少し基本を学びました。それから私は大学に行き、コンピューター情報とシステム工学を学びました。最初の年に私はCを教えられました。

次に、2年目にC ++を学びました。OOPの知識を教えてくれただけです。今、PHPを(HTMLとともに)実行しています。私はC ++、BASIC、またはPHPをマスターしていません。現在、モバイル開発に移行する予定です。しかし、私は学んだ言語ですべてをカバーしていないと感じています。

それは本当に重要ですか?

回答:


50

私たちはみなプログラミング言語のほんの一部を学んでいます。言語の実装者は、言語の知識が10人中10人であると考えるだけです。

複数の言語とパラダイムを学ぶことが、好きなものと嫌いなものの「味」を開発する唯一の方法です。1つの言語しか学んでいない場合は、その言語が好きかどうかさえ本当に判断することさえできません。

あなたは実際にそれを正しい方法でやっています。さまざまな構文、ライブラリ、およびフレームワークに触れながら、それぞれで学ぶ最も重要な基礎を再利用できます。


16
私はこの答えが好きですが、「好きなもの」ではなく、「仕事に最適なツール」です。すべての問題を解決するために同じ言語を使用することはできません。それは悪いソフトウェア開発者になるでしょう。各言語とパラダイムには長所と短所があります。
user606723

1
コンパイラーとインタープリターにバグがあることを考えると、ほとんどの言語で10に達することは人間的に可能だとは思いません。
jmoreno

6
C ++コンパイラを書いている人でさえC ++を理解しているとは思いません。個々に、私は意味します。明らかに集合的に、彼らは何らかの形で言語全体を理解する必要がありますが、この惑星にすべてを理解している人が一人いるとは思いません。実際、委員会のメンバーは通常、全員が自分の専門分野のみを理解しているという事実について非常に明確です。同様にJavaでも:Martin Oderskyは最近、ワイルドカードを理解しているのは世界に3人しかいないと信じていると言いました。そして、電子メールの口調から、私は彼が自分を含めていないという印象を受けました
ヨルグWミットタグ

2
彼が実際にJava Genericsを設計したにもかかわらず(もちろんPhil Wadlerと一緒に)そのグループで。公平を期すために、ワイルドカードは、彼の同意なしに、実際に彼の明白な反対に反して彼のデザインに追加されました。
ヨルグWミットタグ

1
@brian、私を信じて、コンパイラを実装するために言語を知る必要はありません。仕様を盲目的にコードに変換することができます。しかし、そうすることの結果として、あなたは言語の少なくともいくつかの基礎を学ぶでしょう-それが新しい言語を学ぶ私の好ましい方法である理由です。
SKロジック

21

あなたがまだ大学にいる場合、あなたが知っている言語のいずれかですべてをカバーしていると感じていないことはまだ重要ではないはずです。これらの言語の背後にある一般的な基本理論を理解することは、はるかに重要です。基本を理解したら、必要なときに他の言語の詳細を学ぶことができます。


5
私の最初の2年間は、ほとんどのプロジェクト作業(1982〜85年)の基礎となったPascalに合わせて3〜4週間ごとに新しい言語を選択したと思います。ポイントの一部は、試してみて、私たちは「コーディング」から「プログラミング」を分離することを確実にするためだった
Murph

12

プログラミングで最も重要なのは、さまざまなパラダイムを理解することだと思います 。

あなたの質問で、オブジェクト指向プログラミング(OOP)について言及しました。このトピックをマスターした場合は、擬似コードと基本的にグラフィカルなモデリング表現(UMLクラス図など)のみを使用して説明できるはずです。

Java、C ++、またはC#(...)の使用を決定するかどうかは、あなた次第か、あなたが働く会社次第ですが、本当に重要なのは、さまざまな問題を理解/認識し、それらを解決する最適なモデルを決定することです。プログラミングの問題を解決するための非常に重要な方法は、このリファレンスブックで発見できるデザインパターンを使用することです。

埋め込み言語に関しては、重要なことはそのような技術に関連するさまざまな問題を理解することだと思います。

比meta的な方法で、私はこれを優れた科学本を書くことと比較します。重要なのは、あなたが暴露する理論、解決できる問題などです。本を英語で書くか、フランス語で書くか、日本語で書くかは、最終的にはそれほど重要ではありません。

ただし、特定の言語を非常に効率的に活用するために、その技術に特化したい場合は、特定の言語の詳細を知ることも重要です。


2
パラダイムの場合は+1。XまたはY言語の構文糖質に焦点を当てることは重要ではありません(もちろん、仕事でX言語を毎日使用する場合は必要です)。私見は彼らが問題解決においてよりオープンマインドで創造的になるのを助けるので、有用なのは異なるパラダイムを研究することです。
サヤスク

5

私の意見では、頻繁に言語を変更することにはほとんど意味がありません。実際にそれらを把握することは決してないでしょう。特にC ++のようなものは、言語を書くのに10年を費やしてもCのように見えるコードを持っています。

言語でベストプラクティスを記述できない場合は、先に進まないでください、IMO。それは、数十年ではないとしても、カップル以上をカバーするには何年もかかることを意味します。


5

少し多くの異なる言語を学ぶことは害にはならないと思いますが、同時に少なくとも1つまたは2つの深さを学ばなければなりません。


3

AMOS Basic、Java、C ++、PHP、VB6、Delphiなど、私のキャリアの中で多くの言語を使用しました。今日は仕事でC#、JavaScript、Ruby、Clojureを使用し、Pyhton、Erlang、 Common Lispおよびスキーム。

しかし、この秋、私のブログ用に特別なクリスマスカレンダーを作成したかったため、24の追加言語で特定の問題に精通し、解決することにしました。これは素晴らしい経験であり、多くのことを学びました。プログラミングの経験があれば、これを行うことを強くお勧めします。

あなたへの私の答えはこれです:いくつかの言語を本当によく学んでください(それらはかなり異なっているはずです)が、多くの言語をサンプリングして慣れることを確認してください。

今日では、OOPとFP(関数型プログラミング)の両方をよく理解することが重要です。また、非常に静的な言語と非常に動的な言語の両方に慣れている必要があります。

PS:私のブログはノルウェー語ですが、ここで取り上げた言語のリストをご覧になりたい場合は、こちらをご覧ください


2

何か新しいことを学ぶ必要があるとき、特定の言語で学ぶために必要なことを学びます。言語をさらに深く掘り下げる必要があると言う「トリガー」は、特定のコードがいまたは不器用に見える、保守不能に見える、またはテストやコメントが難しいということです。多くの場合、これらのトリガーは、特定のプログラミングのイディオム、スタイル、データ構造などに関する知識の不足を示しています。


2

複数のプログラミング言語を学ぶことは良い習慣であり、今日では必要です。多くの場合、常にすべての言語に選択した言語を使用できるとは限りません。

他の言語がどのように処理するかを見る利点は、プログラマーとして役立ちます。たまに飛び回っているときに、構文上の間違いを犯すことがあります(例:不等式のチェック!=~=または<>)。ただし、言語の構文だけでなく、言語内のベストプラクティスだけでなく、一般的な優れたソフトウェアエンジニアリングスキルを学ぶように注意する必要があります。Cを学習してからC ++を学習した場合、C ++コードを記述するときは、C ++コードのスタイルであることを確認する必要があります(いくつかの新しいキーワードを持つCだけではなく、複数のクラス/オブジェクトがあるため、参照を優先します) / smartポインターなどの生のポインターなど。


1
If x <b> = </ b> 5 Thenを始めないでください。BASICに関連する何かを保守した後、1週間ほどすべてのCコードを再確認する必要があります。
user606723

2

少なくとも異なるプログラミングパラダイムの言語を勉強するのは良いことです!手続き型、宣言型、関数型、オブジェクト指向、プロトタイプ、および動的な言語-プログラミングの各クラスは、問題を整理および解決する方法について独自の洞察を提供します。最終的に、最も生産的で満足している1つ以上のパラダイムを発見し、それを使用します。


2

絶対にありません。もちろん、さまざまなスタイルの言語を学習していることを確認する必要もあります。C#とJavaの両方を学習しても、大きな意味で心が広がることはありませんが、JavaとHaskellを学習することはできます。

7週間の Book Seven Languagesをご覧ください。Ruby、IO、Scala、Erlang、Prolog、Clojure、Haskellの紹介をご覧いただけます。言語が好きなら、あなたはその本が好きになるでしょう。


1
Javaの後にC#を学習すると、その機能的なプログラミング(およびJavaに欠けている他の機能)のおかげで、心が広がるかもしれません。しかし、もしそれが学習のためだけなら、Haskellはおそらくそれがどれほど純粋に機能的であるかのために、はるかに良くなるでしょう。
-svick

1

CとC ++は、モバイルプログラミングに害を及ぼすことはありません。Cocoa TouchまたはAndroid NDKの両方で使用できますが、パフォーマンスのために必要な場合があります。また、複数のプラットフォームで実行されるコードを作成するために、必要な場合があります。その場合、サードパーティのフレームワークを使用しているだけではないと仮定すると、C / C ++でアプリを記述し、必要なネイティブ要素用のプラットフォーム固有のラッパーでコンパイルできます(たとえば、OpenGLコンテキストを取得する唯一の方法iPhoneでは、ネイティブCAEAGLLayerクラスを使用しています)。

だから、引き出しにあるツールが増えれば増えるほど、仕事を終わらせるための選択肢が増えるようになります。さまざまな種類のタスクを専門とするため、特定のタスクを優先することがあります。UIのみを行う場合、Cがこれまでのお気に入りではないかもしれません。やりたいことをもっと心配し、それをするために必要なツールを学びます。


1

実際には、フランス語、スペイン語、英語、アラビア語、ヒンディー語、中国語を少しだけ学習するのと同じくらい役に立ちます。


6
それで何を言おうとしていたのか分かりません。
svick

あなたは私たちのほとんどが私たちの母国語でさえ「よく」知らないことを知っていますか?
スパイディー

1

それどころか、新しいプログラミング言語を学ぶことができない/できないと痛いものになると思います。時間の不足やその他の理由が原因である可能性があります。私の知る限り、プログラマー/ソフトウェア開発者は言語に挑戦し、より良いもの/製品を置きたいと思っており、いつも同じことをしているのを見ると気分が悪くなります。そのため、新しいチャレンジ、新しい言語、それによって新しい製品を学び、より多くの新しいものを求めています。

だから、新しい言語、新しいライブラリ、新しいアプローチ、新しいテクノロジーを追いかけることは私に興奮を与えてくれると思います。しかし、私はそれらすべてを手に入れる時間がないので、人々はいつも十分に深く行くことができないかもしれません。それで、それ以上学ぶことは痛い。しかし、より多くを学ぶために害はありません。


0

私はブライアン、FrustratedWithFormsDesign、SRKXに同意しますが、大学では複数のプログラミング言語とパラダイムで知識を広げることが、優れた専門家になるための望ましい方法であることを付け加えたいと思います。

あなたが形成されたプログラマーとして大学を卒業することは本当にありそうもないことです。プログラミングは難しい技術であり、優れたプログラマーと一緒に働き、優れたトレーニングプログラムやコミュニティミーティングに参加する業界での年数が必要になります。ほとんどの場合、習得する方法を学ぶまで、技術的な問題に直面し、多くの失敗を強いられますそれ。

複数のパラダイム、複数の言語を学び、私たちの地域の複数の問題を解決することで、業界の専門家として行動しながら、毎日自分で技術を学ぶための優れたサポート基盤が得られます。

Compilersクラスに参加することはできますが、言語のデザイナー、クリエーター、またはコンパイラーの開発者として出ることはありません。手順、プロセス、問題、基本的な解決策が得られます。これにより、この知識を幅広い問題に適応させることができます。


0

短い答え:いいえ。

長い答え:プログラマー、ソフトウェアエンジニア、またはデザイナーの仕事の多くは、特定の言語から独立していますが、特定の方法論に非常に依存しています。たとえば、オブジェクト指向プログラミングは、物事がメモリとランタイムのどこに存在するか、それらがどのようにアクセス可能であるか、そして後で使用する方法(継承とカプセル化)について非常に重要です。実装は異なります。たとえば、Javaは、好きかどうかにかかわらず最上位の継承クラスObjectを持ち、C ++は指定しないものを持ちません。

多くの言語は機能を共有しています(そして多くの言語が分かれています)。もちろん構文は異なりますが、命令型と関数型のようなまったく異なるパラダイムを比較するのは難しいです。しかし、文字列処理はどこに行っても同じです。構文、インデックス、および可変性の問題がわからなくなると、どこに行っても同じです。通常、静的型付けを使用する言語には、キャストと強制の何らかの方法がありますが、その方法と時期は言語設計者次第です。

言語はツールです。より多くのツールをベルトに入れているだけです。しかし、ツールはそれを振るう職人と同じくらい良いです。

さて、あなたが何人を学ぶかは個人的な選択です。新しい言語を学ぶために言語を学ぶことはありません。新しい言語を学ぶための選択は、コース要件(昨年、単一クラスのjs、php、Rを取得する必要がありました)、既存のプロジェクト要件(作業の90%がperl 6で行われる場合)あなたは雇われるので、残りの10%は後)またはアプリケーション固有の利益です(Rは、Javaが統計分析のためにいくつかの甘いライブラリと組み合わされたと言います)。

とは言うものの、あなたはそこにあり、利用可能なものを学びたいのです。私の大学は、このテーマ、プログラミング言語の概念に関するコースを教えました。厳密な数学やコーディング関連のコースではなく、理論的なコンピュータサイエンスではなく実用的と思われるものの基本をカバーする、広範な概要コースでした。それは素晴らしいコースであり、3〜4年目ではなく1〜2年目に提供されたものであったらいいのですが。テキストはプログラミング言語の概念でした。外に出てこの本を読む必要があるとは言わないが、それは確かに視野を広げるだろう。


0

まあ、私が見る方法は、あなたが言語のすべてのビットを学ぶ必要がないことです。しかし、他の言語でも必要となる非常に基本的な機能を学習してみてください。
たとえば、OOPSの概念は、JavaPHPなどのすべての言語で必要です。
メモリ割り当ての概念は、多くのプログラミング言語で非常に似ています。これらの種類のトピックをお見逃しなく。
どの言語にも文法と規則があり、プログラミング言語にも同じことが当てはまります。デニス・リッチー自身もその事実を受け入れました。そのため、その言語の文法を学ぶ必要があります。
しかし、私が見る方法は、2つのプログラミング言語間の非共通要因を学ぶ必要があるということです。それらは、どの言語が何を表しているのかを特定させます。 C ++はすべて基本的なOOP(Object Oriented Programming)であるため、OOPの概念を学習すると、PHPとJavaでも見られる文法を学習できます。
私の学習の流れだった:
Visual Basicの5(部分) - > HTML 2.0(部分) - > C(部分) - > CPP(部分) - > Javaの(部分)
、その後、私が学んだC言語が再び続くC ++は続いJAVA(今回完了します)その後、JavaXMLに精通していたのでアンドロイドに移動しました(部分)そして平均時間でそれを学びました。最初の試みではあまり教えられませんでしたが、2回目の試みでは、次回に役立つすべてを学ぶようにしてください。


この投稿は読みにくい(テキストの壁)。それをより良い形に編集してもいいですか?
ブヨ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.