web-dev-qa-db-ja.com

私の技術(プログラミング)を深く理解するために習得する必要があるプログラミング概念は何ですか?

重要な順に、それが可能であり、そうでない場合がある場合、プログラミング方法を知る上で最も重要な基礎は何ですか。アルゴリズム、反復、再帰など?

私がどこに置くかなどが私の質問があることに注意してください。私は最近、9人のプログラマのうち10人がgaspプログラムを実行できないと言っているインターネットの投稿を読みました!

http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

プログラミングのときに私が実際に達成しようとしていること、そして自由に使える基本的なツールを徹底的に理解していることについての深い知識が欲しいのです。基本的には、すべての風の色でペイントできるようになりたいです。

13
Kewigro

このリストは出発点です...あなたは大きな質問をしています!

  • 顧客が何を望んでいるかを明確にして書き留める方法(「要件」)。これはそれ自体が芸術です。これを行うことができれば、プログラミングの仕事ははるかに良くなります。
  • 見積もりとプロジェクト計画の方法。人々はあなたに見積もりを求めます、準備されます。
  • 他の人のコードを建設的にレビューする方法。
  • デザインパターン。これは大きな問題です。しかし、そのために熱心に使用しないでください。
  • バグ、問題、機能リクエストの違いを学ぶ
  • フレームワーク/ライブラリを最新の状態に保ちます。あなたはそれらを使用する必要はありませんが、あなたは彼らが何をするか、そして彼らのプロ/コンのことを知る必要があります。何かがあまりにも難しいと思われる場合は、おそらく(うまくいけば)もっと簡単な方法があるでしょう。
  • 複雑なアルゴリズムをフローチャートで文書化する方法、または英語で書き出す方法。誰かが2日間かけてコードのリバースエンジニアリングを試みることを期待しないでください。
  • 他の人が理解できるようにコード構造を編成する方法
  • コードにコメントする方法
  • 単体テストの書き方
  • フードの下で何が起こっているかを知っています。たとえば、Webサービスの呼び出し-実際には何をしていますか?
  • ロジックをクラスに抽象化する方法。
  • コードをリファクタリングする方法
  • 多数のプログラミング言語の要点を学びます。他の分野から学べることに驚かれるでしょう
  • 何を書くべきか他のプログラマーに教える方法。
  • あなたが何をしているか、なぜその理由を経営者に説明するか。
  • ピーターが言ったように、デバッグする方法。彼が言うことすべてに同意します。本当のプログラマは推測するだけでなくデバッグします。
  • マニアックな人との付き合い方。それらはたくさんあります。
  • STUFF DONEを取得する方法。あなたが物事を成し遂げることができないなら、世界のすべての理論はあなたを助けません。

私は同じような線に沿って(同じような内容で)別の質問に答えました:

プロ用のコードをレンダリングするためのヒント、ガイドライン、覚えておくべきポイント?

18
Rocklan

etc。」という見出しの下には、簡単に50%以上の時間がかかるものがあります。

デバッグする方法を学びます。

これは 科学的方法 を学ぶことを意味します。 本当にそれを学ぶことを意味します。そして、残忍な自己正直さでそれを適用します。あなたが知っていることは真実であると正確に述べる方法、あなたが知っていることは真ではない、そしてあなたが知らないことを学びましょう。アイテムを誤って間違ったカテゴリに割り当てると、あなたの人生はlot難しくなります。

「知っている」ではなく「思う」と言うことを学ぶ。何かが真(または偽)である(または偽である)と「考えて」、ときにのみ「知っている」と言って、それを証明します!

多くのバグは些細なものですが、コードがどうあるべきかを "知っている"ので、そうでない場合を除いて、それらを見つけるのは難しい場合があります。それを説明する友達を見つけてください。 「専門家の馬鹿者」になるように依頼してください。あなたのコードを知らないが、あなたがBSを打ち負かすことができないことを知っている人。彼らにそれを説明している最中に突然あなたが立ち止まって言ったとしても驚かないでください、そして「そうすることができます...見て...見てください... sh * t。ありがとう。」

自明ではないバグには、技術の武器庫が必要です。タイミングに関連しないほとんどのバグにすばやくスポットを当てることができるクラシックは、アラスカのウルフフェンスです。アラスカのどこかにオオカミがいます。状態を半分に切るフェンスを作ります。オオカミはどちら側にいますか?その辺を半分に切る。泡立て、すすぎ、繰り返します。コードの適切に選択された場所でこれを20回行うと、バグ(オオカミ)が存在する可能性のある領域が1/1048576に減少します。そのオオカミを殺します。

ヒント:handwaves-肉体的、精神的、またはその他の種類を探します。あなた(またはあなたの同僚)がコードの一部に注意を払い、気をそらす/そらす/最小限に抑えるとすぐに、完全に狂ったに移動します。あなたがd * mnのものを探して何時間/日も費やしてもそれを見つけることができないとしても、あなたがバグを知っていることができない領域だからです。 ..バグが発生する可能性が最も高い場所です。誰も 'bye' を取得しません。誰も(マシン、OS、コンパイラを含む)、またはyou)はあらゆる種類の「敬意」を取得しません。バグがあります。限目。文の終わり。さて、d * mnを殺してください。

私は、デバッグをそれ自体の主題として教える学校を知らない。 IMNSHO、これは、彼ら(大学/教授)があなたにプログラマーであることを教えていないという最も明白な証拠の1つかもしれません。厳しい?たぶん。ほんと?あなた自身の決心をしてください。今それを証明します。

22
Peter Rowell

これは特に優先順位の高いリストが必要であることを考えると、誰もが決定的または権威的に答えるにはかなり大きな質問だと思います。多くのプログラマーがいて、彼らは非常に異なることに取り組んでいます-確かに、ファンダメンタルズは同じままですが、メモリ内でアクティブに保つために必要なものは実際に異なる可能性があり、実際、あなたがかなり滞在できるタスクがたくさんあります深く行くことなく高レベル。

けれども、あなたは真に、優れた開発者になる方法を心配しているように見えます。私はそれが立派であると思います、そして、私がプログラムする方法を学ぶのを助けたいくつかのことを共有することができます。

プログラミングのほとんどすべては、アルゴリズムとデータ構造に要約されます。これらは、次に、より大きな問題の例です。現実世界の物事やプロセスを、コンピュータが理解できるような表現にどのようにモデル化するのでしょうか。始めたばかりの場合は、より高いレベルのプログラミング言語(Java、Pythonなど)を使用して、データ構造とアルゴリズムの実装に慣れると便利です。

ある時点で、データ構造とアルゴリズムをいじって、「コンピュータに何をすべきかを指示することから、実際にそれを実行するコンピュータにどうやって行くのか」という厄介な質問が出始めるかもしれません。次に、コンピュータが実際に計算する方法、つまりメモリとCPUが連携して命令を実行する方法、オペレーティングシステムがハードウェアを抽象化する方法を調べて、特定の低レベルにコーディングせずにファイルを開くプログラムを作成できるようにしますハードドライブインターフェース。

アルゴリズムとデータ構造が現実世界の問題をどのようにモデル化するか、およびコンピュータが実際に計算を実行する方法は、これから始めるのが良いでしょう。後者を知ることは、OOおよびスクリプト言語:)よりもはるかに少ない煙と鏡を利用するCなどの低レベル言語を習得するのに非常に役立ちます。

3
RuslanD

[〜#〜] yagni [〜#〜] :「実際に必要なときに常に実装し、必要があると予測しているときは決して実装しないでください。」

私の経験では、「プログラマ」が将来多くのケースを予測し、それらを予測するためにコードを追加することによってコードを「改善」しようとすることは一般的です!ほとんどの場合、彼らが追加したコードは、コードを膨らませ、コードを複雑にします。

2
Louis Rhys

プログラマーであることについて知っておくべき最も重要なことは、コードを書くことはグラインドであり、あなたが生み出すために支払われているものを生み出すことに対する労働者のような「ブルーカラー」の態度は、どんな難解な学習よりも遠くに届くということです。

ゾーンに入る方法を学びます。つまり、自分のタスクのみに集中していて、頭の中に非常に多くのことを維持し始め、それらが一度にどのように相互運用するかを理解できる精神状態を意味します。ゾーンに自由に入る習慣を身につけたら、残りについて心配し始めます。ある種のコードが何かを叩き出すようにコードを叩くことができるまで、残りは事実上役に立たない。

編集:

あなたがこれを信じておらず、私に反対票を投じた場合は、20年間それを行う決意があるかどうかはわかりません。これを受け入れるので、私はそうすることを知っています。 ;)

1

この問題に何らかの形で関連している最近の質問 Answer には このブログ へのリンクがあり、別の角度から同じ問題について議論しています。

おそらく、どの開発者にとっても最も重要な概念は「謙虚さ」です。..すべてを知らないことに同意したら、解決策を模索できます。プログラミングでブログを書く人のほとんどは上位パーセンタイルにあり、問題はまだ彼らのナルシスティックな傾向を制御していない...多くの人がブログを書いている理由です....これらのブロガーを特定し、そこに暴言を無視

リンクされたブログは、本当に暴言に過ぎません-すべての業界で、最近の卒業生は役に立たないと一般的に言っています。彼らを有用かつ生産的にするのに何年もかかるということです。おそらく問題は、これらの自己宣言した第一人者が実際に期待しすぎて、一度FizzBu​​zzを解決できなかったとしたらそれを忘れていたことです。誰もが上位10パーセンタイルになることはできません。定義により、プログラマーの半数は平均を下回っています......

0
mattnz