毎年新しいプログラミング言語を習得する場合、リストはどうあるべきですか?[閉まっている]


19

「実用的なプログラマー」の第1 章の最初の学習目標は次のとおりです。

毎年少なくとも1つの新しい言語を学びます。異なる言語は同じ問題を異なる方法で解決します。いくつかの異なるアプローチを学習することで、思考を広げ、ゲッターがruに陥るのを防ぐことができます。[...]

キャリア全体でこれを達成するために、言語のリストはかなり長くなる可能性があります(特に管理に「進歩」したくない場合)。明らかに、プログラマー(または任意の形式)の教育は、商業的に有用な言語のコア(求人掲載からの通常のリスト:C、C ++、Ruby、Python、JavaScript、C#、Java、VB、.. 。)。さらに、公式または非公式の学習プログラムは、機能的なアプローチ(Haskell、LISP、ML派生言語など)をカバーしている可能性があります

しかし、一度そのリストの合理的なサブセットが学習されると、次は何で、なぜですか?


3
、この答えは、私はあなたの能力を広げるために勉強することができ、言語のパラダイムのいくつかをリストアップ。言語に焦点を当てるのではなく、これらのすべてのパラダイムを学習しようとすることから始めるので、現在の言語で使用しているすべてのパラダイムにチェックを入れてから、あなたが慣れているものと同じくらい多くの異なるものを持つ言語を選択します。C#で始めてJavaで始めるのはあまり意味がありません。最初はもっと多様化してください。すべての基本タイプをカバーしたら、他の一般的な言語を選択できます。
サイモンPスティーブンス

@サイモン:これをここで答えてみませんか?
リチャード

1
あなたは、JavaからC#に行く多くのことを学ぶことが、そんなに他の方法でのラウンドを行っていないだろう
Casebash

@リチャード。私はそれが完全な答えを正当化するとは本当に思っていませんでした、私はあなたに私が他の場所で書いた関連性のあるものを参照していました。
サイモンPスティーブンス

1
あなたが数年間数人に集中するまで、1年に言語を学んでいるほとんどの人々は「すべての取引のジャックであるが、どれもマスターしない」でしょう。多くの経験に基づいて、「フルスタック」プログラマーの概念は、開発者の1〜5%を除いて間違っていると思います。私が知っているほとんどのハードコアバックエンドの人々は、優れたフロントエンドスキルを持っていません。
ジャンキー

回答:


19

それを面白くして、毎年プログラミング言語を使用したことのないニッチを埋める独自のプログラミング言語のインタプリタまたはコンパイラを書くのに費やしてください。毎年、前の年に書いた言語を使用して次のコンパイラ/インタプリタを書きます。


7
サインをお願いします。:
クリスチャンダヴェン

1
+1ブリリアントアンサー。おそらくユーモラスな意味であっても。
ジョーD

1
@ジョーD完全にユーモラスな意味ではありません。これを行うことができれば、すべてのニッチをマスターしました。
代替案

-1は完全にユーモラスな方法で意味しないため。(半ば放棄された言語/実装が十分に存在しないなど)
-ZJR

2
@ZJR 99%ユーモラスで、1%ユーモラスでないのは悪いですか?さあ また、コメントに基づいて回答をダウンボットするのはなぜですか?
代替案

13

「限界関連性」を最大限に高める必要があります。つまり、常に自分がまだ得意でない新しい分野に進出します。プログラミング言語と概念の両方を変えてください。オブジェクト指向言語を知らない場合は、JavaとHibernateなどの抽象度の高いフレームワークを試してください。次に、PythonやPerlなどのスクリプト言語でシステム管理の一部を記述します。次に、CまたはC ++で低レベルのスキルをいくつか習得し、高性能なマルチスレッドサーバーコードを作成します。関数型プログラミングを知らない場合は、Peg Solitaireの解法などのグラフ理論の問題でHaskellを試してみてください。学習するすべてが即座に市場価値を持つようにするのは非常に実行可能です。オブジェクト機能セキュリティとして、プロローグまたはVHDL

ところで良い運動!これにより、プラットフォーム固有のテクニックが少なすぎることに頼るのではなく、横方向に考えて、言語に依存しない用語で問題を想定することができます。たとえば、C ++とPythonの間の仮想メソッドディスパッチの類似点と相違点を習得すると、他の言語でもすぐに「取得」できます。


9

プログラミングについての考え方に影響を与えない言語は、知る価値がありません。-アラン・ペルリス

他の答えのいくつかに触れたように、あなたが毎年1つの新しい言語を学習している場合、その理由は何ですか?プログラマーとしての能力を拡張することです。どうやって?すでに知っている言語のパラダイムとは異なるパラダイムを持つ言語を学習し、既に知っているパラダイムを検討することで、次に学習する言語が決まります。

これらのパラダイムは何ですか?高度な書籍の概念、技術、およびコンピュータープログラミングのモデルは、グラフィカルなマップで優れた概要を提供します

したがって、Cのような命令型言語のみを知っている場合、Scheme / Lispの学習は非常に役立ちます。命令的で機能的な言語を既に知っているなら、Prologを学ぶことは役に立つでしょう。

複数の言語とパラダイムを教えようとする最近の本はSeven WeeksのSeven Languagesです。もちろん、1週間の学習の後、各言語に堪能になることはありませんが、実践的で実践的なマルチパラダイムの観点を提供できるようです。

別のパラダイムを理解するとき、それは本当に禅の瞬間です。命令型プログラミングから関数型プログラミングに移行することで、コンピューティングの世界をまったく新しい観点から見ることができました。幸せな学習!


そして、言語はあなたの思考に、それがあなたが表現できるようにするものによってではなく、それがあなたにあなたに表現させなければならないことによってもっと影響します。
フロリアンF

9

C-必須の「すべての根底にある」システムプログラミング言語として

Lisp(Scheme)-偉大なハッカーがクールだと考える奇妙で強力なウル言語

Smalltalk-これはオブジェクト指向が意図されたものだからです

俳優を理解するためのアーラン(または他の俳優言語)

Haskell-モナドを理解する

Javascript-ブラウザのスクリプトを作成するためにどこにでも不可欠であるため

Python / Ruby / Perlの1つ(ただし、実際はどちらでも構いません)-優れたライブラリサポートを備えた、人気のある最新の高レベルスクリプト言語がどのようなものかを知っています

SQL-リレーショナルデータベースと通信できる

プロローグ-あなたはまだあなたの心を爆破する必要があるため


2
Haskellを学んだ理由は、(以前に知っていたすべての手続き型言語とは対照的に)関数型言語を学習したかったためです。また、Haskellは関数型言語のポスターの子のように思えました。私がHaskellが好きな理由は、それが高水準言語であり、優れたライブラリサポートを持ち、高速であるためです(Cの約50%の速度ですが、実行内容によって異なります)。また、私はたくさんのコードを書くことができるのが好きで、それはすべてコンパイルするようになってから1回目または2回目に動作します。
ジョーイアダムス

Perl、Python、Rubyのいずれを学ぶかは、間違いなく重要です。例として、Pythonにはリスト内包表記があり、これはRubyには存在せず、RubyにはPythonに存在しないモジュールがあります。両方の結果をどちらの言語でも複製できますが、どちらかを学習すると、考え方に大きく影響します。
哲学者

1
プロローグ-あなたはまだあなたの心を爆破する必要があるため-史上最高のコメント1
ザカリーK

1
Haskellを学ぶことの主な利点は、必ずしもモナドの抽象化を理解することではなく、実際の強力で強力な型システムの利点を学ぶことだと思います。「静的型システム」という考え方がJavaのようなものである場合、haskellは息を吹き返します。
サラ

4
  • Go(それほど一般的ではない並行性と概念を十分にサポートする新しいシステムレベルのプログラミング言語)
  • Lua(スクリプト言語、シンプルで表現力豊か、非常に柔軟でバランスの取れたパラダイムが必須、機能的、メタプログラミングであり、OOPが可能)
  • D(C / C ++は正しく実行されました)
  • Groovy(Javaの世界での表現力とメタプログラミング)
  • エッフェル(契約による設計とOOPへの異なるアプローチ)
  • プロローグ(論理プログラミング言語)

1
なぜこれらを学ぶ必要がありますか?(なぜここに興味深いの、真にユニークなプログラミング言語はほとんどありません。すべてのパラダイムが複数回実装されています。)
リチャード

DCで正しく行われたと思うのを見るのは興味深い。個人的には、Cを使用するときは、OOP抽象化をまったく必要としない低レベルのものに主に使用します。
ジョナス

@ジョナス:私たちはまだ適切に行われたシンプルな言語を必要としていますが、この言語は来ませんDは命令的な方法でうまく使うことができます。あなたにとって、D2はより機能的です。完成すると、主に必須の言語に対するパラダイムの最適な実装になるでしょう。
マニエロ

正しいことは主観的です。私にとって、Erlangは非常に小さくてシンプルな言語です。不足している部分は優れたGUIフレームワークであり、複雑なシステムを実行する場合は、静的な型付き言語が必要になります。
ジョナス

@Jonas:Erlangは優れた言語ですが、C / C ++が正しく実行されているわけではなく、まったく異なるものです。
マニエロ

2

1)プロローグ:これまで使用してきたすべての命令型言語とはまったく異なり、問題に対する考え方が変わります

2)Lisp:それなしで、Viを使用しているかもしれません

3)Erlang:繰り返しますが、まったく異なっています。また、かなりファッショナブルなようです。

4)Turing Tarpitの何か(例:Brainfuck)、おそらくコンパイラーまたはインタープリターを作成します。これを行う理由は考えられませんが、良いアイデアのように感じます。


1
「それなしでは、Viを使用することもできます」。私は誰もそれを拾い上げなかったことに驚いている:)
ゴーティエ

私はviを使用します!(まあgvim)
ザカリーK

1

リストしたものに加えて、

Haskell、F#、Clojure、OCaml、Lua、Go、D、Erlang、Objective C


1

私は新しい言語を学ぶのは良いことであることに同意しますが(長いキャリアを通じて必須ですら)、1年に1回は最初の5年から10年を過ぎていると思います。私が見たいのは、すでに知っている言語について新しいことを学んだ経験のある人です。ある時点で、深い知識と幅広い知識が必要になります。したがって、12の言語でIf構文を作成できます。少なくとも一つのことを本当に掘り下げて専門家になる人に会いたいです。そして、今後数年間は他の何かの専門家になります。30年以上のキャリアの中で、私は誰かが多くのことの基礎だけでなく、深い知識を持つことを望んでいます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.