奇妙なことに、プログラミングにおいてどのような誘惑があなたのプロジェクトに本当に有害であることが判明しましたか?
何かをしたいという衝動を本当に感じて、それがプロジェクトに利益をもたらすと信じているときや、それを信じて自分をだまし、1週間後に何も解決していないことに気づいたときreal問題ですが、代わりに新しい問題が作成されました。または、最良の場合は、目に見える影響なしに内臓を満足させました。
個人的には、不良コードをリファクタリングしないのは非常に難しいと思います。私は多くの悪いレガシーコードを扱っており、私のリファクタリングが何も壊していないことを証明するテストがないとき、それに触れないようにするためには深い呼吸が必要です。
ユーザーインターフェイスのもう1つの悪魔です。UIレイアウトを変更するのが楽しいからといって、文字どおり何時間もUIレイアウトを変更できます。時々私はユーザビリティに取り組んでいると自分に言い聞かせますが、真実は私がボタンを動かすのが好きなだけです。
あなたのプログラミングの悪魔は何ですか、そしてどのようにそれらを避けるのですか?
早すぎる一般化は私の大きなバガブーです。手元の問題を解決するfirstのではなく、一般的なケースで実際に解決する必要があるまで待つのではなく、常に一般的なケースの前に行き、必要以上に複雑な大量のコードを作成する必要があります。
更新:
詳細な説明については、「 罪#1-早期の汎化 」を参照してください。
「これに戻って後で修正します。今すぐ機能させるだけです!」
締め切りは遠く離れているので、私にはそれを行うのに十分な時間があります。それで、ウェブをサーフィンするのに少し時間を費やしてみませんか?
「これは使い捨ての概念実証コードに過ぎません。気に入ったら、私はそれを本当に良くします。」
既存のフレームワークとライブラリがある場合、すべてを社内で構築しようとする犠牲になります。
私の繰り返しの悪魔:時期尚早の最適化とオーバーエンジニアリング。
それでも100%避けられない...
マネージャーがあなたをじっと見つめていて、あなたの直感があなたの腸があなたに言っているよりも低い見積もりを与えるために燃えている感じを感じるとき...それをしないでください!
結局のところ、あなたの腸はおそらくすでに低すぎる!
テクノロジー/ツール/言語をプロジェクトで使用するには、単にそれを学習したばかりだからです。
あなたがどれほど優秀な開発者であるかを証明しようとすること。
自分で作成したコードを自分のものと考える。
ちょっと休憩して、stackoverflow.comを見てみましょう;)
コードを書くことは問題を解決する最後の手段 であることを忘れてください。
計画を立て、それを守り、配備します。そしてthen戻って、人々が求めているものを追加します。
私はこれを何度も見ました。座ってデザインを練り、コーディングを始めます。ユーザーは、お気に入りの機能が「欠けている」ことについて混乱したナンセンスを聞き、ロビー活動を始めます。上司は、11時間目に追加するように要求し、展開を妨害し、どこにでもバグを導入し、3か月後に全員が落ち着くと、誰があなたが置く理由を理解できないので、それを削除するように求められますそもそものレトロな機能が最初に!デザインの残りの部分が無意味になったとは言えませんか?
さらに機能を追加
競争にはこの特徴があります。したがって、これは必須の機能であるため、戦略の分析、位置付けなどよりも多くのプログラミングが必要です。
コンテストにはこの機能はありません。したがって、これは差別化機能であるため、分析戦略、位置付けなどよりもプログラミングが多くなります。
より多くのプログラミングでビジネス問題を解決します。たとえば、WebサイトがホストされているLinuxサーバーの管理に関するより優れた専門知識は、より多くの機能をプログラミングすることでは得られません。場合によっては、すべてをC#.Netに再コーディングするのではなく、問題を修正する方法を学ぶ必要がある
より多くのプログラミングでマーケティング問題を解決します。たとえば、製品に「紫色の牛」にするためにより多くの機能をプログラムすることにより、マーケティングの問題を間接的に解決しているというセスゴディンの紫牛の概念を悪用します。時々、それはただの突然変異体のモンスターです。
このスクリプトの記述に費やされた時間は、実際にプログラミングする代わりに、将来数時間で節約できると主張して、生産性の問題を解決します本当に重要なもの
コーディングを計画しているが、「正しく理解したい」ため、まだコーディングしていない
ダーティバージョンをコーディングし、「後でそれをより良くする」ことを約束するが、「より良くする」には戻らなかった
「とても面倒」なので、モックアップやサイトマップを作成しない。競合他社のページのスクリーンショットを撮って、モックアップとフリーハンドでサイトマップを「後で」描くことはできません。そして、私の頭の中で視覚化した最初のページのプログラミングにまっすぐ進みます。
告白:私は個人的に1、3、7、8の間違いを犯しました。2、4、5、6も犯しましたが、自分が犯したのではないと誤解してしまうことがよくありました。
私は現在9を治療しています。
[〜#〜] edit [〜#〜]質問に答える必要があることに気づかなかった。
1)機能を追加しますやらないでください。ビジネス、マーケティング、創設者、アドバイザーなどと協力して、アプリケーションを1つだけにしてください。
Twitterについて Groupon などを読んで、成功につながったものを1つに減らしてみてください。
大企業を作りたい場合にのみ機能すると思うなら、もう一度考えてみてください。この行のCtrl + F「ソフトウェアに追加する機能が多ければ多いほど、売り上げは悪化します。これは言うまでもなく、ほとんどのソフトウェア開発者にとって非常に直感的ではありません。」in this link
2)コンテストにはこの機能があります。だからこれは必須機能です
ソリューション1を見る
3)コンテストにはこの機能はありません。これは差別化機能です
ソリューション1を見る
4)より多くのプログラミングでビジネス上の問題を解決します。
あなたが教えるために誰かを雇う必要がある場合は、相談するか、またはあなたのためにそれを行い、次に彼がそれをどのようにしたかを文書化してください。早くやれよ!!コードを書き換えたり、GOをパスしたり、$ 200を集めたりしないでください。
5)プログラミングを増やしてマーケティングの問題を解決します。
人々があなたが何を売っているのか理解していない場合、それはISマーケティングの問題です。ソリューション1に戻ってピボットしてください。
6)プログラミングを増やして生産性の問題を解決する
待つ。
特定の生産性の問題が2週間を超えて発生し、さらに2週間は合理的に発生すると感じるまで待ちます。
次に、この問題を解決するためのスクリプトのプログラミングに費やされた時間を評価します。最悪の見積もりを取り、2を掛けることを忘れないでください。
見積もりに時間給を掛けます。
次に、代替ソリューションを確認します。アウトソーシング、既製のソリューションを購入する、何もしないなど
最も費用効果の高いソリューションを選択してください。
それに固執。
7)コーディングを計画しているが、「正しく理解したい」ため、まだコーディングしていない
運動してください。あなたはお尻に動機を与え、行動するようにさせるエンドルフィンのラッシュを感じるでしょう。 5x5のベンチプレスと5x5のスクワットを実行しただけなので、これはわかっています。
8)ダーティバージョンをコーディングして、「後でより良くする」ことを約束するが、「より良くする」には戻らない
GTDでticklerファイルシステムをセットアップします。積極的にフォローアップします。自分や他の人へのすべての約束をフォローアップしてください。
9)モックアップやサイトマップは「とても面倒」なので行わない。
Balsamiqモックアップデスクトップ版に75米ドルを費やしてください。 3週間前に購入したので、これを知っています。私のモックアップをやり直したのは、現実の世界で描いた絵が下手なのに、アーティスト、建築家、ビジョナリーが1つになっているような気分だからです。 balsamiqで使用されているフォントは、これが単なるモックアップであり、RADで役立つ石に設定されていないことを無意識に思い出させます。
編集の終了
ビールを2杯飲めば、仕事が長持ちします。
「ええ、2000行のスパゲッティのこの巨大な混乱を1日でリファクタリングできます...」
「そのためのテストがなくても問題はない。テストするのは難しい。」
そしてそれは邪悪な兄弟です、
「テストを書いたり理解したりするのがいかに難しいとしても、そのためのテストが必要です。」
先延ばしと楽観的タスク推定は私の最大の罪です。
2番目の推定を行う前に、1番目のストレッチング、プッシュアップまたはプルアップ(またはその他の身体運動)と悲観的な気分。
「既存のコードを理解するよりも、「簡単」を機能を最初から再実装するよりもはるかに簡単です。」
私が取り組んでいるプロジェクトが受けた非常に有害な誘惑の1つは、「内部プラットフォーム効果」です。これは、長い年月を経たアーキテクトが彼らの無限の知恵を打ち固めたアプローチであり、年間約2,000万ドルを生み出すが、更新と維持に6,000万ドルの費用がかかるプロジェクトを作成しました問題の)。
私はサードパーティのソリューションに公平な機会を与えるのに本当に苦労しています。誰もが彼らのために特別に作られたものではないサードパーティのソリューションには当然懐疑的である必要がありますが、私はそれについて100%客観的になるのに苦労しています。
時間の節約は非常に大きくなる可能性があるため、10回のうち9回サードパーティソリューションを回避する必要がある場合でも、1つを実現するのに十分な客観的である必要がありますうまくいきます。
それをどこかで行うライブラリが必要ですシンドローム。
に密接に関連
プラグインフェチ
顧客の実際のデータベースのコピーを分析する代わりに、提供された「サンプルデータ」に対する設計、コーディング、またはユニットテスト。締め切りは短かった、そして彼らはそれが来ていると言い続けたが、決して来なかった。それが配備されたとき、爆発は壮観でした。本当に、1人の顧客が3つの親顧客を持っていると予想していたでしょう。
realデータのコピーを取得するまで、プロジェクトを再び開始することはありません。
完全主義は殺害する;おそらくプロジェクトが成功しない最大の理由です。
リファクタリングの代わりに書き換え。
まあ、プログラミングは時々私をボトルに追いやります。
これを行うには、もっと良い方法があるはずだと考えています。私は「十分に良い」かもしれない何かのために解決するつもりはありません。私は完璧にほかならない!通常、これは、問題について別の見方をしている人と話したり、別の角度から解決策を見たりすることで回避されます。
すべてを自動化するには、実際の作業よりもツールのメンテナンスに多くの時間が費やされます。
解決策:コードの最適化の場合と同様に、最初に生産性のボトルネックを見つけ、発見された後でのみ、いくつかの優れた自動化で解決します。
あなたのプログラミングの悪魔は何ですか?
他の何人かが述べたこととは別に。
優先順位付け:プロジェクトに関する優先度の高い作業を無視し、プロジェクト内の他の作業に最初に取り組みます。
それらをどのように回避しますか?
もう少し自己規律を持ちます。真剣に、正しいことをする自己規律と自己動機は、これらの「悪魔」のほとんどを回避するのに役立ちます。
このプロジェクトで私の脳はすり減っています。この短いサイドプロジェクトをちょっと休憩して、活性化させます。
"There must be a better solution to this."
そして、あなたは考えて考えてしまい、あなたがあまりにも長い間いなくなったことに気づくまで、あなたの心を遠く離れた土地に漂わせてしまいます。それは問題ないはずですが、期限がある場合はそうではありません。
クライアントからの承認はまだ得られていませんが、締め切りが近づいているため、開始できるようにいくつかの予備的なコンプがあります...
後で、コンプと一致するようにプロジェクトの構築を完了した後...
ああ、ここにクライアントの改訂があります、彼らはいくつかのマイナーなものを変更したいだけです*
(*主要な機能は完全に異なります)
その後、短い期限のプレッシャーにさらされ、それらが最後のリビジョンであると想定するため、最初からやり直すのではなく、元の欠陥モデルに基づいて元のコードをリファクタリングし続けます。
私はいつもこれに噛み付きます。 Web開発者として避けるのは難しいです。最善のアドバイスは、変更を正しい方法で行えるように、より長い時間プッシュすることです。
コード凍結日後に新しいコードを記述します。
コードの凍結日は厳しく設定する必要があります。すべての種類の回帰テストが必要になる可能性があるため、その後に作成された新しいコードは、将来のリリースに移動する必要があります。
それらを回避することについての質問に答えるために: Anti-Patterns をよく理解して、それらを認識したときにそれらを呼び出すことができるようにします。
賢さ。もちろん、常にではありません。ある程度の巧妙さと簡潔さにより、コードは非常に見栄えがよく、保守しやすくなります。しかし、あなたができるからといって
x=foo?true:bar?biz,FooBar(true)?!foo:baz,FooBar(false):baz;
ifステートメントの数行の代わりに、そうする必要があるという意味ではありません。
ところで、はい、私の例には少し冗長性があることを知っています...あなたがそれを自分で捕まえたとしても:)
他のすべてに加えて機能のクリープ:「これを実行すれば本当にすばらしいでしょう。お客様がそれを気に入って、彼らがそれを考えていたら仕様に入れていただろうと思います」。実際のスペックのどこにこの本当にクールな機能の要件が存在するかを尋ねることで、これを回避しようとします。
繰り返しになりますが、私は仕様書をあまり入手しません。
「これはパイロットに過ぎないため、保守や拡張を容易にする必要はありません」。
私の経験では、パイロットがスクラップされ、実際の製品が生産準備完了状態に開発されるよりも、パイロットがスクラップされることになっている製品とパイロットが生産に入るのを見るのがより一般的です。
エディターの調整に時間がかかりすぎています。プログラミングに最適なフォントと配色を見つけようとしています。
「[software/eg:sharepoint]と連動する機能が割り当てられています。そのソフトウェアについて知っておくべきことはすべて知っているはずです。」
次に、その製品の調査に数週間を費やしますが、その機能が1〜2日で作成およびテストされた可能性があります。知識への飢えは、腹が暗い。生
「後でコメント/文書化します」
それが起こることは決してなく、作者は先へ進み、そしてあなたは仕事があなたに割り当てられたとき彼らが彼らのコードにコメントしないことを知る。
理解せずに新しいプロジェクトへの攻撃を開始するには、実際に作業を始める前にプロジェクトドメインについて少し調査することでこれを回避します。良い出発点を持ち、プロジェクトがより複雑であることを証明するためです。最初はそれでした。
ボタンを使って動き回るのも好きだし、かっこいい!マルチメディアシステムとユーザーインターフェイスの設計を行っているためかもしれません...私にとってこの問題の解決策は、実際にそれをカリキュラムに組み込み、それについて何かを研究することでした。私はUIをたくさん遊んでいます。 (これには、背景を緑に、テキストをオレンジに、アイコンに黄色を多く入れることも含まれます。)
非常に完全なリスト: anti-patterns 。
/**
* Calculates the return value for humptyDumpty
*
* return int modifiedHumptyDumpty
*/
function awesomeWayToCalculateSomething(int humptyDumpty) {
..
}
TODO:これを適切に文書化する必要があります。
Will_never_happen
言語機能、イディオム、またはデザインパターンを使用することは、それが問題の最善の解決策であるからではなく、純粋にそれを使用するためです。
Enumは、Javaで実際に使用するよりもはるかに有用であることが頭の中にあると思います。私はそれらを試してやりすぎて、多態性を実際にサポートしていないために行き詰まる傾向があります。
社内開発を回避するために自分自身をコミットし過ぎると、ホイールの90%は、それを発明するよりも良くありません。
フレームワークを完全には理解せずに使用する。しかし、再び。フレームワークはその作成者(ほとんどの場合)によってのみ完全に理解されます。私にはその項目の実際の解決策はありませんが、フレームワークから可能な限り理解しようとしています。
「非常に単純」であるために悩まされていたバグを修正しますが、QCや顧客には伝えません。
これらの修正は常にプロダクションをクラッシュさせます。
誰かが時期尚早な一般化を言ったが、時期尚早な専門化も同様に悪いことがある。時期尚早な汎化を使用すると、ケースの50%で機能するソフトウェアを入手できますが、時期尚早な専門化は5%で機能するか、まったく機能しません。結局のところ、経営陣は5%ではなく50%を持つべきです。
私の休み時間に会社のために数え切れないほどの時間の余分な仕事をして、「それが彼らが探していた方向ではなかった」ことを知るだけでした。
あなたのプログラミングの悪魔は何ですか、
既に言及されていることすべて、特に気違いのようなリファクタリングへの衝動。
そして、どのようにそれらを回避しますか?
重要な編集を開始する前に、キーボードから5秒間手を離し、変更と残した場合の考えられる結果をすばやく比較します。次に、コミットする前に、同じ結果を約1分間検討します。
仕事やベッドで横になる仕事に快適なソファを見つけること。
初めてそれを正しく回避することは問題ですが、完全性への不朽の焦点ほど悪くはありません。 それを完了するだけで、完璧なものはありません、そしてもしあれば、それは純粋に一時的なものであるか、すでに行われていて、もう一度やる価値はありません。