web-dev-qa-db-ja.com

プログラミングを学ぶときに自分自身の将来を保証する

必要に応じて、「将来を見据えた」方法でプログラミングを学びたいと思います。 Windowsが(今のところ)デスクトップOS市場を支配している一方で、明らかにその言語/フレームワーク/ APIなどを学ぶことには多くの価値があります。これは、新しいデバイスが登場したり、Windowsが足を踏み入れたり(Windows -Windows 8のフレンドリーなプレビューはあまり魅力的に見えません...)。

Java GUIなど)のような非常に移植性の高い言語と組み合わせて、バックエンドロジック/低レベルプログラミングなどのC/C++に関する確かな知識があると思いますか。は、ほとんどのシステムで役立つソフトウェア開発の良い基盤となるでしょうか?-私はデスクトップPC、タブレット、電話について話しています。

10
Anonymous

将来の証拠になりたい場合、私があなたに与えることができる最良のアドバイスは、自分をテクノロジーに囲まないことです。

したがって、APIを盲目的に学習しないでください。彼らがどのように考え出されているかを学びましょう。舞台裏の哲学は何ですか?それらの利点と欠点は何ですか?特定のテクノロジーではなく、ソフトウェア一般を考えてください。

OOPに移動して、プログラムの優れた概念に取り組むこともできます。AOPはIMOの良い選択です。しかし、メカニズムを理解するだけでなく、メカニズムの背後にある哲学に真に取り組みます。

データ構造やアルゴリズムなどの一般的なコンピューターサイエンスは、常に役立つクロステクノロジーの知識であるため、無視しないでください。

また、良い習慣を身につけてください。多くの場合、何かを行う方法は12通りありますが、それらのほとんどはくだらないものです。バグが発生しやすく、保守が難しい、後で理解するのが難しい、または別のプログラマが行うなどです。 。 。通常、コードは書くより読むのが難しいです。だから、読みやすくするためにもう少し努力して書く方法を学びましょう(書くよりもコードを読むため)。

デバッグ(ログとデバッガーのスマートな使用)およびテスト(簡単に単体テストできるコードの記述方法とこれらのテストの自動化方法)に効果的な手法を学びます。

次に、一般的な技術の背景が必要になります。プロセッサのしくみ(キャッシュミスまたは分岐予測が適切なスタート)、UNIXシステム、IPなどのネットワークプロトコル、TCPおよびイーサネットなど)などの非常に幅広い知識について話している…….

最後に、学ぶ方法を学びます。あなたが学ぶ方法を知っているなら、あなたは適応することができます。

仕事を見つけられるようにするには、特定のテクノロジーに関するいくつかの強力な知識が必要ですが、それらは非常に古くなっています(たとえば、COBOL、またはIE/Netscape戦争のときのWebプログラミングについて考えてください)。そのため、将来性を保証するためにそれらに依存しないでください。彼らは採用するための鍵となりますが、優れたプログラマーを作るものや、長期にわたってスキルを持続させるものは間違いなくありません。

編集:始めたばかりの場合は、間違いなく何かを行う必要があります。なんでも、本当に。テトリスやヘビのようなゲームは良いスタートであり、楽しいです。物事を成し遂げないと、学習に多くの時間を費やしてしまい、学んだことを完全に理解するために必要な経験が得られません。

デザインパターンを使って例を挙げましょう。デザインパターンはすばらしいので、それらを明確に使用する必要があります。しかし、過度に使用すると、コードが複雑になり、理解しにくくなります。設計パターンが何であるかを完全に理解するには、設計パターンが解決する問題に直面し、それを解決しようとする時間を少し失う必要があります。デザインパターンは、コードが大きくなると、時間の経過とともに小さなリファクタリングとして使用する必要があります。また、デザインパターンの利点が、その使用によって引き起こされるコードの複雑さよりも大きい場合に、デザインパターンがいつ必要になるかがわかります。これには経験が必要です。

決定的に、物事を成し遂げ、彼らはあなたの過ちから学びます。これ以上は主張できません:GET THINGS DONE

31
deadalnix

良いプログラマと悪いプログラマを区別するのは、あらゆる言語でプログラミングできる能力です。他のポスターが指摘しているように、重要なオブジェクト指向言語を知ることは、優れたプログラムを作成し、需要があるためのツールを提供します。

また、まだ学校に通っている場合は、ライティングクラスを受講してください。最高のエンジニアとプログラマーは、彼らのアイデアをうまく​​伝えるものでもあります。

時代遅れにならないようにするための最善の方法は、現在のトレンドを維持することです。彼らが現在のテクノロジーを使用していないか、ひどいプロセスを持っている場合など、別の仕事に去ることを恐れないでください。あなたのキャリアのためにあなたができる最悪のことは、あなたが古いテクノロジーまたは弱いプロセスで働いている仕事を取ることです。

4
Bill Leeper

@deadalnixからの答えはいいです。私はそれに3つ追加します:

  1. 再利用可能な情報は、極端ではなく中間から取得されます。ミンスキーはこのことを彼の著書「Society of Mind」で詳しく説明しているので、要約すると次のようになります。一番上のレイヤーは特定のソリューションに近すぎて次の問題に適用できず、一番下のレイヤーはその多くが次の問題に適用するための特定のプラットフォーム。中間層は再利用可能な情報が見つかる場所です-アルゴリズム、パターン、分類法、戦術、戦略、手法、組織、プロトコルなどは、ドメイン(トップレイヤー)またはプラットフォーム(ボトムレイヤー)に関係なく、同様の問題を解決するのに一般的に役立ちます)。注:これらのレイヤーは3層アーキテクチャーとは何の関係もありません。ここでは、問題空間/ソリューション空間のセマンティクスについて説明します。
  2. 少なくとも2つのインスタンスが見られるまで、何が一般的/一般的/再利用可能かはわかりません。したがって、Windowsが内部でどのように動作するかを調べ、次にlinux/unixが内部でどのように動作するかを調べ、2つを比較します。一般的なものは再利用可能です。異なるのは設計上の決定であり、再利用可能な洞察をもたらす可能性もあります。
  3. 特定の状況または問題について、ソリューションを実装する方法を検討し、アームチェアソリューションを実際のソリューションと比較して、違いの背後にある考えられる理由を理解してください。
4
Steven A. Lowe

あなたが最初にいるので、私は言語を学ぶだけだと思います、それはどちらの言語でもかまいません。難しさは、言語(構文)自体にあるのではなく、概念を理解することにあります。これらの一般的なプログラミングの概念はすべてのプログラミング言語に適用されるため、2番目と3番目と4番目(...)の言語の学習willの方がはるかに簡単です。

したがって、最初は「将来を見据えた」ことについてあまり考えないでください。ただし、進歩するにつれて、互いに非常に異なる言語に習熟するようにしてください。基本的に、(あなたが言ったように)C/C++のような低水準(-ish)言語、Javaなどの高水準プログラミング言語、そしてスクリプト言語( Python、Rubyなど)。本当に高度な機能を使いたい場合は、Assemblyも知っている必要があります。

しかし、今このことについてあまり気にしないでください。プログラムの学習には何年もかかります。とりあえず、JavaまたはC#などの言語を選択して、それを実行してください。)

2
Paul

Java GUIなど)のような非常に移植性の高い言語と組み合わせて、バックエンドロジック/低レベルプログラミングなどのC/C++に関する確かな知識があると思いますか。は、ほとんどのシステムで有用であることが判明するソフトウェア開発の良い基盤になるでしょうか?

私はデスクトップPC、タブレット、電話を話している。

いいえ、それは役に立ちません。

特定のプログラミング言語に関係なく、データ構造とアルゴリズムについての確かな知識は、「低レベルのプログラミングなど」よりも価値があります。

「Javaのような非常に移植可能な言語」は、Cと同様に移植可能であり、役に立ちません。 Next Big Thingはこれらの言語とは非常に異なるため、スーパーポータブルJavaは資産ではなく負債になります。

Mac OS(デスクトップ、タブレット、および電話)はすべてObjective Cで行われます。

Windows(デスクトップ、テーブル、電話)はすべてC#で行われます。それが出発点になるかもしれません。

1
S.Lott