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


10

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

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


11
そのようなことはありません
ジョブ

巣穴を作り、それを本で満たします。
エドワードストレンジ

4
巣穴を作り、それに缶詰を入れます。最も将来性のあるプログラマは、黙示録の後に生きているプログラマです。
トムアンダーソン

1
プログラミング言語やコーディングを学ぶのではなく、ほとんどの場合プログラミング学びます。これには何年もかかり、10 近くかかります。そして、一生学習し続ける必要があります
Basile Starynkevitch

回答:


31

あなたが将来を見据えたいのなら、私があなたに与えることができる最良のアドバイスは自分をテクノロジーに閉じ込めることではありません。

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

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

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

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

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

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

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

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

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

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

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


良い...素晴らしい*答えと私が理解できること-あなたが言及したトピックのそれぞれではなく、全体として「プログラミング」のトピックを理解する必要性を理解しています。私は、予見できることに間違いなく満足しているeコマースサイトを管理している給料の高いロールを持っているので、フィールドでの仕事を見つけることについてあまり心配していません。私のプログラミングへの関心は深刻な趣味に分類されますが、私の仕事と他の人のワークフローの両方を強化するためにそれを使用したいと思います。
匿名

初心者の視点として物事をより明確にするための編集を追加しました。
deadalnix、2011年

4

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

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

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


プログラミングの概念についての十分な知識が「このゲームで」上手に機能するために不可欠ですが、実際の言語構文/標準ライブラリと、すべての言語の機能(適切な場合)を利用するために不可欠でないことがわかっているものについての知識があります。残念ながら、私はまだ学校に通っていません。私は働いています。以前のコメントで言ったように、私はかなり給料が良いので、その点についてあまり心配していません。答えてくれてありがとう。=)
匿名で

4

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

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

素晴らしい追加!
deadalnix、2011年

2

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

したがって、最初は「将来を見据えた」ことについてあまり考えないでください。ただし、進歩するにつれて、互いに非常に異なる言語に習熟するようにしてください。基本的には、(おっしゃったように)C / C ++のような低レベル(-ish)言語、Javaなどの高レベルのプログラミング言語、そしてスクリプト言語(Python、Rubyなど)が便利です。あなたが本当に高度なものに行きたいなら、あなたはまた、アセンブリを知っている必要があります。

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


私は「1つを選ぶ」が好きで、その態度をとります...おそらくそれを採用します。1つの低レベル言語(C)、1つの高レベル言語(Java)、および1つのスクリプト(Python)言語を選択して、3つすべてを同時に学習することに賛成ですか?
匿名

プログラミングを始めたばかりですか?次に、一度に複数の言語を学習しないでください。混乱するだけです。最初に学ぶ必要があるのは概念であり、言語ではありません。新しい言語に移行する必要があるのは、必要な場合のみです。たとえば、スクリプト言語を使用する必要性を最近感じたのは、Pythonでゲームをスクリプト可能にすることにしたからです。
Paul

始めたばかりとは言えません-私は何年もhtml / cssを知っていて(実際には無関係/適格ではありません)、PHP / MySQL Webサイトを数か月間構築しています。私が「手に入れる」ことができるWeb開発、それは私が取り組んでいるソフトウェア開発です。私はあなたが言っていることに注意します。
匿名で

If you want to go into the really advanced stuff you must also know Assembly-これはどの階層でも実行できますが、課題は異なります。
sixtyfootersdude

1

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

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

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

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

「Javaのような非常に移植可能な言語」は、Cと同様に移植可能であり、役に立ちません。次の大きい事はあなたの超ポータブルJavaは責任はなく、資産になることをこれらの言語からそれほど異なるものになります。

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

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


私はJavaとCをどちらも移植可能な言語として比較していました-Javaはそれぞれ低レベルと高レベルであり、それは一種の真実です...あなたが今言ったように、Mac OS = Obj-C、Windows = C#、つまり私が1つに特化して私の選択肢を切り捨てるのではなく、私のドリフトを見つけた場合は「何もないマスター」になりたくありません。私はあなたが言っていることに感謝しますが、プログラミング言語の知識がないデータ構造とアルゴリズムの確かな知識は、後者のないプログラミング言語の知識と同じくらい役に立ちません。
匿名で

@クリス・ブリジット:あなたは完全に誤解している。普遍的な基礎があり、プログラミング言語もどちらでもありません。まず、基本を学びます。次に、言語(またはOS)は単にケーキの上で曇っています。ファンダメンタルズはケーキであり、将来に備えています。
S.Lott
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.