回答:
腐ったマネージャーが1人でプロジェクト全体を台無しにするだけで済むことを学びましたが、その後、多くの優秀なプログラマーが混乱を解消する必要があります。
Clojureをいくつか学んだ後、関数型プログラミングの有用性に気づき始めました。Javaコーディングスタイルはそれによって大きな影響を受けました。一般的な考えに反して、関数型プログラミング言語は、関数型プログラミングを行うための絶対的な前提条件ではありません。
関数型プログラミングの非常に多くの要素をJavaなどの命令型言語に組み込むことができ、常に慣用的であるとは限らない場合でも、問題によっては非常に有益な場合があります。たとえば、ウィキペディアで説明されているように、匿名クラスはクロージャーとほぼ同じです。遅延評価は異常なものではなく、標準である必要があります。不変性はほとんど使い物になりません。既存のオブジェクトを変更するのではなく、新しいオブジェクトを構築することは、GCとヒープの消費のために費用がかかるという(ほぼ)時代遅れのアイデアを克服するだけです。実際、並列処理は効率性の議論を他の方法でひっくり返すことができます。新しい不変オブジェクトを作成することは、ロックを取り除くため、既存のオブジェクトを変更するよりも安価です。
ソフトウェアテストの目的はバグを見つけることだと学びました。システムが正しいことを確認することではありません。
重要な心理的要因があります。プログラムが「正しい」ことを示すことが目標である場合、合格することがわかっているテストに引き寄せられます。しかし、バグを見つけることが目標である場合は、システムを限界まで押し進めるテストに引き寄せられます。
使用する言語にも重要な変更があります。テストでバグが見つかった場合、成功と呼びます。テストが成功しない場合(つまり、プログラムが合格する場合)、失敗と呼びます。私は「検証」思考の線に沿って進むことに気づきました、そしてそれは大きな違いを生みます。
この心理的影響については、The Art of Software Testingで詳しく説明しています。著者のMyersは、プログラムをテストしている人は誰でも著者であってはならず、同じ管理チェーンのメンバーであってはならないと推奨しています。あなたが自分でコーディングしている場合、これを行うことができますので、規律がかかります。
エゴレスプログラミングの真の価値。
あるレベルでは、エゴとプログラミングが混ざらないことを常に知っていましたが、結果をまったく推論しませんでした。あなたが積極的に見直して自分の慣行の過ちを見つけなければならないという考えは、私が昨年実現し始めたばかりのものです。また、(UIとコードの両方で)自分のデザインに対する批判を積極的に探すことも学んでいます。
しかし、正直に言うと、私はまだ自我を落とす方法を学んでおり、おそらく私はプログラミングのキャリアの残りのためにそれを行う方法を学んでいるでしょう。
Semiringsのような数学的概念がアルゴリズムにどのように適用されるかを学びました。これにより、異なるセミリングを使用することを除いて、いくつかのアルゴリズムが同じである方法を示すことができます。これはプログラマーとして私にとって奇妙なことではないはずですが、頭が吹き飛ばされました。
フランク・シェラーが言及した政治に加えて、私は最近QUnitとJSCoverageを発見しました。そして月。コードカバレッジを使用して JavaScriptを単体テストすることは可能だとは考えていませんでしたが、... :-)
プログラミングの最後の年に対する私のトップ3の感謝は、次のようになります(重要度と感謝の降順)。
コードでアイデアやアルゴリズムを表現する、よりエレガントで簡潔な他の方法に心を開くための関数型プログラミングパラダイム。関数型プログラミングのアイデアのおかげで、私の全体的なプログラミングスキルは非常に短時間で大幅に向上したと感じています。
(個人的な感謝は、彼の優れた本「Real-world関数型プログラミング」のTomášPetříčekに感謝します。)
依存性注入と単体テストの両方から、オブジェクトの構成が間違いなく複雑な(オブジェクト指向の)システムを作成するための最良の方法であることがわかりました(そして、クラスの継承は私が考えていたほど重要ではありません)。どちらも私に教えてくれ、システムを最適に構成する方法と、使いやすく、しかも再利用に十分な柔軟性を備えたコンポーネントを作成する方法を考えさせました。
(優れた教育リソースに言及しなければならなかった場合、Roy OsheroveのArt of Unit Testingと言います。)
これらすべてを組み合わせることで、以前よりもはるかに理解しやすく、間違っているコードを記述しているため、一般に以前よりもバグの少ないコードを書くことになりました。
Basic Pythonを学習しました(これを使用して、簡単なスクリプトを作成することもあります)
VMにArchLinuxをインストールしました(以前VMにUbuntuがあったので、私のPCは高速になりました!)
MATLABで開始(特にグラフのプロットと迅速な数値チェック用)
(SVNから)Mercurialに切り替え(分岐とマージ!)