過去12か月間に学んだ最も重要な、役に立つ、または啓発的なことは何ですか?[閉まっている]


14

コーディングコミュニティの多くの人々は、継続的な改善、意図的な実践などについて語っていますが、彼らが現在の実践について語っていると、「ゼウスの腰から完全に形成された」ように聞こえます。彼らの意見は時間とともに変化したか、最近学んだことです。

たまに話をしたり、本を読んだり、誰かと話をしたりすると、彼らはもう少し開き、これらの洞察から多くのことを学びます。

それで、もしあなたが過去12ヶ月からあなたがそれが何であるかを学んだことから一つを選ばなければならなかったら?

回答:


18

腐ったマネージャーが1人でプロジェクト全体を台無しにするだけで済むことを学びましたが、その後、多くの優秀なプログラマーが混乱を解消する必要があります。


マーティン、あなたのメッセージが土曜日の雨のこの寒い朝に私を笑顔にさせるので、私は賛成しましたが、あなたは質問に答えません;)

「私が学んだこと...」を追加
マーティンウィックマン

+1は、今月私がプログラマの1人だからです。先週70時間以上==「樽の中の私のターン」。
ダン・レイ

私はそれを認識しています!引用する必要があります!「プロジェクト全体を台無しにするのに腐ったマネージャーは1人しか必要ありませんが、その後、多くの優秀なプログラマーが混乱を片付けるのに必要です。」
アミールRezaei

12

Clojureをいくつか学んだ後、関数型プログラミングの有用性に気づき始めました。Javaコーディングスタイルはそれによって大きな影響を受けました。一般的な考えに反して、関数型プログラミング言語は、関数型プログラミングを行うための絶対的な前提条件ではありません。

関数型プログラミングの非常に多くの要素をJavaなどの命令型言語に組み込むことができ、常に慣用的であるとは限らない場合でも、問題によっては非常に有益な場合があります。たとえば、ウィキペディアで説明されているように、匿名クラスはクロージャーとほぼ同じです。遅延評価は異常なものではなく、標準である必要があります。不変性はほとんど使い物になりません。既存のオブジェクトを変更するのではなく、新しいオブジェクトを構築することは、GCとヒープの消費のために費用がかかるという(ほぼ)時代遅れのアイデアを克服するだけです。実際、並列処理は効率性の議論を他の方法でひっくり返すことができます。新しい不変オブジェクトを作成することは、ロックを取り除くため、既存のオブジェクトを変更するより安価です。

純粋なJava での FPの実行に関する詳細は、こちらこちらこちらこちらご覧ください


+1同意します。Javaが関数型プログラミングをあまり良くサポートしていないのは悲しいことです。
ジョナス

私はFP(私の最初の仕事関係のLisp)における長年の関心を持っていたと私はそれがここ数年で、それが最終的になどOOと並んでかなり「共通の」パラダイムなってきていることは非常にエキサイティングだと思う
FinnNk

Java 7には少なくともより良いクロージャーが必要です。そして、lambdajのような賢いライブラリを使用すると、言語自体の欠陥にパッチを当てることができます。
ジョナスプラッカ

Java / JVMでの末尾再帰のサポートを改善したいと思います。
ジョナス

1
@Helperメソッド:私の答えの最初の2つのリンクは、FP with Javaの記事です。私はこのテーマに関する本を知りません。「取得」するための最良の方法は、実際のFP言語を学習し、Javaコードでより不変のオブジェクトを使用し始めることだと思います。
ジョナスプラッカ

10

優秀なチームとそのチームの有能な経営者がいるとしても、あなたの仕事はまだ安全ではありません。上級管理職は、取締役会全体を解散させるなど、依然として愚かなことを行うことができます。

要するに、政治が重要であり、時にはあなたに影響を与える政治は、あなたが制御することはできません。


マーティンはすでに同様の答えで私を笑わせるので、仮想+1を与えます;)あなたはデッドマーチを読みましたか?これは、あなたが話しているかについての本である

(私は本当の1に仮想アップ票を変換)

9

ソフトウェアテストの目的はバグを見つけることだと学びました。システムが正しいことを確認することではありません

重要な心理的要因があります。プログラムが「正しい」ことを示すことが目標である場合、合格することがわかっているテストに引き寄せられます。しかし、バグを見つけることが目標である場合は、システムを限界まで押し進めるテストに引き寄せられます。

使用する言語にも重要な変更があります。テストでバグが見つかった場合、成功と呼びます。テストが成功しない場合(つまり、プログラムが合格する場合)、失敗と呼びます。私は「検証」思考の線に沿って進むことに気づきました、そしてそれは大きな違いを生みます。

この心理的影響については、The Art of Software Testingで詳しく説明しています。著者のMyersは、プログラムをテストしている人は誰でも著者であってはならず、同じ管理チェーンのメンバーであってはならないと推奨しています。あなたが自分でコーディングしている場合、これを行うことができますので、規律がかかります。


8

顧客への配信の最初からテスト駆動開発を行い、それがコード品質にどのように影響するかを確認し、EclipseのJUnitランチャー内からのみ実行します。それはより良い製品をもたらしました。


「最新の単体テストの再実行」をキーにバインドする方法が見つからなかったことに注意してください。これは少し面倒です。

5

エゴレスプログラミングの真の価値。

あるレベルでは、エゴとプログラミングが混ざらないことを常に知っていましたが、結果をまったく推論しませんでした。あなたが積極的に見直して自分の慣行の過ちを見つけなければならないという考えは、私が昨年実現し始めたばかりのものです。また、(UIとコードの両方で)自分のデザインに対する批判を積極的に探すことも学んでいます。

しかし、正直に言うと、私はまだ自我を落とす方法を学んでおり、おそらく私はプログラミングのキャリアの残りのためにそれを行う方法を学んでいるでしょう。


3

私自身の質問に対する私の答えは次のとおりです。

約1年前、自動化された受け入れテストは、テスターが手動で行っていたテストの自動化されたバージョンではない必要があるとクリックしました。単一のパスで可能な限りヒットしようとするのではなく、単一の仕様に対するテストに焦点を当てることで、テストがはるかにシンプルで読みやすくなり、インクリメンタル配信が促進されました。


3

Semiringsのような数学的概念がアルゴリズムにどのように適用されるかを学びました。これにより、異なるセミリングを使用することを除いて、いくつかのアルゴリズムが同じである方法を示すことができます。これはプログラマーとして私にとって奇妙なことではないはずですが、頭が吹き飛ばされました。


1
例を挙げましたか?
マークC

O(log n)時間でfibを計算するパワーとフィボナッチなどを計算する関数を使用する「プログラミングの要素」の例があります。この例はcpp-next.com/archive/2010/03/eop-ch3-previewにあると思いますが、そのWebサイトは内部サーバーエラーで応答します。
ピータースチュイフザンド

3

フランク・シェラーが言及した政治に加えて、私は最近QUnitJSCoverageを発見しました。そして月。コードカバレッジを使用して JavaScriptを単体テストすることは可能だとは考えていませんでしたが、... :-)


これは来年の私のレーダーにあります。私はjsの単体テストに少し手を出しましたが、まだ実際のプロジェクトにはありません。カバレッジツールが利用可能であることを知りませんでした!
FinnNk

2

プログラミングの最後の年に対する私のトップ3の感謝は、次のようになります(重要度と感謝の降順)。

  • コードでアイデアやアルゴリズムを表現する、よりエレガントで簡潔な他の方法に心を開くための関数型プログラミングパラダイム。関数型プログラミングのアイデアのおかげで、私の全体的なプログラミングスキルは非常に短時間で大幅に向上したと感じています。

    (個人的な感謝は、彼の優れた本「Real-world関数型プログラミング」のTomášPetříčekに感謝します。)

  • 依存性注入単体テストの両方から、オブジェクトの構成が間違いなく複雑な(オブジェクト指向の)システムを作成するための最良の方法であることがわかりました(そして、クラスの継承は私が考えていたほど重要ではありません)。どちらも私に教えてくれ、システムを最適に構成する方法と、使いやすく、しかも再利用に十分な柔軟性を備えたコンポーネントを作成する方法を考えさせました。

    (優れた教育リソースに言及しなければならなかった場合、Roy OsheroveのArt of Unit Testingと言います。)

これらすべてを組み合わせることで、以前よりもはるかに理解しやすく、間違っているコードを記述しているため、一般に以前よりもバグの少ないコードを書くことになりました。


2

急速に進化するソフトウェア業界でこれまでに変化があったものは、学習曲線が常にここにあります。「学習に時間をかけずに学習する方法しかなかった場合」


学ぶべき新しいものが常にあるという事実は、私にとって、この職業の大きな魅力の1つです。ITシステムは、多くの場合、複雑さの増大に最適に対処する方法に関するものであり、その方向で新しい理論と概念を発見するのが大好きです。一方で、最新技術に遅れずについていく必要があるのは、一定のレースのように感じることがあるためです。
stakx

1

新しい会社に売られることで、あなたの仕事が本当に良くなることを学びました。私の組織は5月に旧会社から購入されましたが、状況は改善し続けているようです。新しい会社は、新しいオフィスで費用をほとんど、またはまったく節約し、廃止された開発マシンを21世紀の機器に置き換え、プロジェクトを管理する柔軟性を示し、一般的に歓迎されていると感じました。

ちょっと売られて気分が落ち込んでいるような気がします(彼が手を変えた土地に縛られているので、新しい封建領主を持っている農奴に少し似ています)が、最終的な結果は思ったよりもずっと良くなっています。


0

Visual Studio 2010内でMicrosoftの単体テストを使用すると言います。

特定のテスト方法をデバッグするのは本当に簡単だとわかりました。

ビジネスレイヤーアプリケーションが正常に動作しているかどうかを確認するために、テストプロジェクトをいつでも実行できました。テストプロセスにより、当社のWebサイト訪問者向けの完全なソリューションを展開する際に、私のチームに問題がないことが保証されます。


0
  • Basic Pythonを学習しました(これを使用して、簡単なスクリプトを作成することもあります)

  • VMにArchLinuxをインストールしました(以前VMにUbuntuがあったので、私のPCは高速になりました!)

  • MATLABで開始(特にグラフのプロットと迅速な数値チェック用)

  • (SVNから)Mercurialに切り替え(分岐とマージ!)


0

MVVMパターンを学習することで、ハッキングを減らすことができました。


-1

Python Webアプリケーションの保守を開始する必要があったので、Vimを学ぶのも良い時期だと判断しました。現在、JavaとFlexの開発にIntellijのIdeaVimプラグインを使用していますが、タイピングがより速く効率的になったと確信しています。


1
本当に--1?あなたは私のためにそれを解凍したい-人々はVIMが啓発的または有用であるとは思わない?
ワトソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.