言語に依存しないようにするにはどうすればよいですか?


52

今ではasp.netとC#を使用しています。私もJavaでまともな仕事をしました。私はいつか言語にとらわれないように自分のキャリアを計画しています。私が学ぶ必要があることは何ですか?

最初に、OOPはクラスの設計について述べているようにパラダイムになります。他に何かありますか?


2
ラベル付けされることを避け、仕事の柔軟性を持ちますか、それともビジョンを追求しますか?
ジェフ

2
@ジェフはい!ラベル付けされるのを避け、私の言語が最高だと戦わないために;)
Gopi

私は私の意見に同意しない強い意見を持つ人を雇う可能性が高くなります。それは彼がJavaを書くことができたからです。
エリックReppen

その場合、採用担当者は履歴書をスキップします。
gonzobrains

回答:


67

言語にとらわれないためには、すべての一般的なスタイルと言語の種類の経験が必要です。

  • 命令的言語(あなたがステップバイステップで、何をすべきかということを教え例: - 。C)
  • 宣言型言語(あなたはそれをあなたの目標を教えて、それが何をすべきかを割り出し例: - 。SQL / HTML /プロローグ)

また:

  • 機能的な言語(関数は、鍵となる状態を回避し、副作用が目標であり、例えば- 。ハスケル/ OCamlで/ Lispの/ F番号)
  • オブジェクト指向(オブジェクトがそれらに作用することを関連データとメソッドをカプセル化アーキテクチャ)の言語。例-Java / C#)

いくつかの入力スタイル:

  • 静的型付け言語(データ型が定義されており、コンパイル時にチェックされている例: - 。C#)
  • 動的型付け言語(データ型は、実行時にチェックされます例: - 。パイソン/ Javascriptの)
    の経験強い弱い型付けも有用です。

いくつかの異なるランタイムスタイル:

低レベルのもの:

それに加えて、並行プログラミングイベント駆動型の経験が必要だと思います。また、Webプログラミング(クライアントとサーバー)、リッチクライアント開発/デスクトップ、ゲームなどのさまざまなドメインについて知っていることを確認する必要があります。また、組み込みプログラミングや専用ハードウェア(ゲームコンソールなど)についても学びたい場合があります。モバイル開発はますます重要なドメインになりつつあります。

また、ジェネリックプログラミングメタプログラミングアプローチの経験を積む価値があると述べた人もいます。

これらのパラダイムを学習するときは、単に構文を学習して古いスタイルで書くことを避けてください。多くのC#開発者がJavaScriptを静的に型付けされているように記述することを見てきました。これをしないでください、言語パラダイムを学び、それらを受け入れてみてください。

これらすべてを行った場合、言語間の違いは大部分が構文的になるため、切り替えは新しい構文を学習するかなり簡単な演習になります。

ただし、現代のプログラミングはほとんどの場合フレームワークに依存していることを忘れないでください。したがって、学習する各言語の一般的で人気のあるフレームワークを理解することも重要です。C#を知ることは、.netなしでは無関係です。


9
与えられた意味でのHTML宣言はどうですか?「目標->アクション」?それはしない本当に何を。
Felix Dombek

3
調べることをお勧めするだけの素晴らしい宣言型言語は、Prologです。それは他のものとは異なります-機能はありませんが(いずれかの方法で動作するリレーション)、明示的な制御フロー(インタープリターがすべてを解決します)、1つの優れたデータ構造(用語、他に何も必要ありません。)毎秒何百万もの統合と推論を行い、何かを開発するのに必要な時間は、C / C ++と比較してPythonと同程度です。
Felix Dombek

3
@Felix:HTML、目標=「ラベルとテキストボックスが欲しい」。アクション=レイアウトおよびグラフィックエンジンは、それらの描画方法を決定します。詳細は個々のブラウザにまで及びます。方法は定義せずに、必要なものだけを定義します。こちらをご覧ください。私は同意しますが、それは実際には「言語」ではありません。プロローグは良い例です。更新します。
サイモンPスティーブンス

1
+1型の良いリストのために、言語の選択は場所のパラダイムから少し離れていますが、全体的に優れています。
オーブリング

2
ちなみに、「異なるドメイン/抽象化レベル」を追加する必要があります。Web、インタラクティブWeb、デスクトップツール、デスクトップゲーム、永続ゲームは、制約やハードウェアまでの距離が異なるため、言語を選択できません。または存在)不可知論者であることが何であるかを理解したい人にとってより明白。
クライム

4

あなたは本当に言語にとらわれないようになるとは思いません。現在の言語(現時点ではC#)で「考える」ことがわかります。

ただし、そうは言っても、特定の言語ではなく擬似コードで考え、実際にこの形式で書き留めることで、デザインをコードから分離できる可能性があると思います。これにより、現在の言語での実装ではなく、設計とアーキテクチャの決定に集中できます。サイモンが指摘しているように、その欠点は、最終的に使用する言語とフレームワークが必然的に設計に影響することです。したがって、デザインが開発されると、言語とフレームワークにますます結び付けられていきます。


「真に言語にとらわれない」ための+1。しかし、2番目の段落にはまったく同意しません。使用する言語とフレームワークに合わせて設計することが重要だと思います。
サイモンPスティーブンス

@Simon-あなたはフレームワークのための設計について良い点を持っています。答えを更新します。
ChrisF

3

あなたの質問といくつかの答えを読むと、「言語不可知論」と「地球上のあらゆるパラダイムを知っている」に等しいという印象を受けることができます。

存在するすべてのパラダイムを知っているのか、いくつかのパラダイムと言語の種類にまたがるさまざまな言語の範囲を知っているのが、「言語にとらわれない」のかどうかはわかりません。

すべての宗教を実践したことは、自分を宗教的に不可知論者にすると言っているようなものです。

プログラミング言語に関する言語にとらわれない人は、どの言語でもプログラムする方法をまったく知らないか、プログラミングを依頼された言語を気にしない人でなければならないと思います。

そうは言っても、真のプログラマーは、その言語のドキュメントへのアクセスを与えられた任意の言語でプログラミングできると言う人もいます。

「言語にとらわれない」という意味であれば、経験豊富なプログラマーならだれでも、言語ドキュメントへのアクセスがあれば、仕事を余儀なくされる言語でプログラミングできます。

たぶん、あなたは「言語多神論者」になりたいかもしれません。

私自身はいくつかの言語のパラダイムに精通していますが、OOPが適用される場合はOOPを好むでしょう。だから私は不可知論者ではないと思います。

特定のパラダイムや言語を選択する自由が与えられていることを好まない人を見つけることはほとんどありません。


0

言語だけではなく、Java自体にもさまざまなモードがあり、それらすべてを学習するだけで何年も費やすことができます。あなたは学ぶことができます:

  • メッセージングや永続性などのJ2EE機能とさまざまなサーバー
  • jspおよびApache指向のツールキット
  • ant、maven、その他のビルドシステム(言語自体)。
  • Groovy / Grailsの世界全体
  • すべてのApache Commons API
  • テストシステム(モッキング、JUnit)
  • Swing、GWTなどのGUIビルダー...

そして、私が行方不明になっている100のこと-Java内だけで。

幅広い分野をカバーする(すべての言語を学ぶ)のに何年も費やすと、どの言語でも効果的に機能するための深みを得るのが難しくなります。

私は新しい言語を学ぶことは決して問題ではないと言っているのではありません。あなたは積極的にそうするべきです!学べること(まだ行っていないこと)に基づいて次の仕事を選びますが、ランダムな言語を選んでそれ以上学ぶことはあまりありません。やや謙虚に残った...


「全体のGroovy / Grailsの世界」あなた「は、全体のScala /プレイ!2世、全体のJRuby / Railsの世界、そして全体のClojure /ノワールの世界」を追加することができます。
ヴォルグヴァンガイア

1
私は同意し、しばらく前にそれを書いて、頭の上のものを引っ張っていました-おそらく、私はおそらくウェブフレームワークの1つを選んでそれと一緒に行きました。
ビルK
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.