Bad habits are hard to break and even harder if you don’t realize what you’re doing is underminage your work. 知っていても気にしないのであれば、それは最悪です。 しかし、あなたはここにいますよね。
As a programmer, I have seen a lot of poor practices, not only around code, but also around teamwork skills. 私自身、これらの悪い習慣の多くを実践してきたことに罪の意識を感じています。 ここでは、私の悪いプログラミング習慣のトップ 35 を、コード編成、チームワーク、コードを書くこと、およびテストとメンテナンスの 4 つのカテゴリに分けて紹介します。
コード編成
1. 後で修正しますと言う
コード修正を延期する習慣は単に優先順位の問題ではありません。 課題追跡システムを整理することで、ある程度の進歩が得られるかもしれませんが、出てきた小さな問題を追跡する方法も必要です。 TODO」コメントを追加することは、何も見逃していないことを確認する手っ取り早い方法です。
2. 一行の解決策にこだわる
効率的でエレガントなコードを書くことに執着することは、プログラマーの共通の特徴です。 それはまるでパズルを解くようなもので、20行のコードを2~3行にする関数と正規表現の組み合わせを見つけるのです。 しかし残念なことに、それは必ずしも読みやすいコードにつながるとは限らず、一般的にはそちらの方がはるかに重要です。 コードをまずアクセスしやすくし、次に賢くすることです。 Web サイトのサイズを数バイト小さくすることは素晴らしいことに聞こえますが、どうせ gzip で補うのではありませんか? また、リクエストの方が重要ではないでしょうか? なぜなら、多くの場合、要件が変更され、時間が無駄になるからです。
「早すぎる最適化はすべての悪の根源である」
-Donald Knuth
4.最適化を行うには、プロジェクトの終わりに対処する。 スタイルの問題はそれほど重要ではないと自分に言い聞かせること
If I’ve learned anything over years of looking at other people’s code, it’s the dealing with coding style issues is the most likely to postponeing the developmenters. 経験の浅いコーダーにとっては、スタイルの問題に対処することでどんな良いことがあるのかわかりにくいかもしれませんが、時間が経つにつれて、いったんコードの品質が狂うと、雪だるま式にあらゆるプロジェクトが完全に混乱することが明らかになるでしょう。 ベストプラクティスには、たとえそれが無視できるものであっても、厳しく対応しましょう。 コードチェックとリンティングツールをセットアップして、より重要なことを心配するためのスペースを確保してください。 例外をキャッチして無視したり、エラーを報告しないライブラリ (jQuery など) を使用したりすることで、物事を一掃する方法がたくさんあります。 しかし、これらのエラーの 1 つが優先事項となった場合、どこから手をつければよいのかわからないことを考えると、それを修正する難易度は何倍も高くなります。 これを回避する簡単な方法は、無視されたエラーをログに記録して、後でそれらを研究できるようにすることです。 情報を追加しない名前を使用する
名前付けは難しいですが、変数名と関数名が少なくともまともな品質であることを確認する簡単な方法があります。 名前がコードの残りの部分で伝えられない何らかの情報を追加している限り、他の開発者はあなたのコードを読みやすくなります。 名前付けが重要なのは、名前によってコードが何をするのかが大体わかるからです。 コードの一部が何をするのか把握するために計算を掘り下げる必要がある場合はより時間がかかりますが、良い名前であれば、コードが何をするのか数秒で理解できます。
7. 実績あるベスト プラクティスを無視する
コード レビュー、テスト駆動開発、品質保証、デプロイの自動化など、これらのプラクティスや他のいくつかのプラクティスは無数のプロジェクトでその価値が証明されており、だからこそ開発者が常にそれについてブログを書く理由なのです。 これらのベストプラクティスに関する素晴らしい参考文献は、「Making Software: What Really Works, and Why We Believe It」という本があります。 時間をかけてこれらを正しく行う方法を学べば、あなたの開発プロセスはすべてのプロジェクトにおいて、あなたを驚かせるような方法で改善されることでしょう。 計画を早期に放棄する
システムを不可解なものにする確実な方法は、計画にコミットしないことです。 あなたのコードが批判されるときはいつでも、 計画が完全でないと言うことができます。 しかし、中途半端なモジュールを抱えていると、それらの未完成なモジュール同士を動作させようとした途端、コードが密結合してしまうことになります。 この種の複雑さは、プロジェクトのリーダーの役割が変わり、新しいリーダーがアーキテクチャの一貫性よりも自分たちのやり方を持つことが重要だと判断した場合にも出てきます。 うまくいく見込みのない計画に固執する
計画を放棄することが問題を引き起こすことがあるように、うまくいかない計画に固執することもあります。 だからこそ、自分のアイデアをチームと共有し、困難なときにはフィードバックやアドバイスを受けるべきです。 時には、異なる視点がすべての違いを生むこともあります
10. いつも一人で仕事をしている
自分の進捗状況やアイデアをチームと共有するように努力すべきである。 自分では正しい方法で作っているつもりでも、そうでない場合もあるので、常にコミュニケーションをとることはとても貴重です。 また、一緒に仕事をすることで、他の人のためにもなります。 あなたが彼らとアイデアを議論し、行き詰まりやすい経験の浅いメンバーを指導すると、彼らの仕事はしばしば改善されます。 悪いコードを書くことを拒否する
どの開発者の人生にも、締め切りに追われてひどいコードを書かざるを得ない時がやってきますが、それはそれでいいのです。 あなたは、その結果についてクライアントやマネージャに警告しようとしましたが、彼らは締め切りにこだわるので、今はコードを書く時です。 あるいは、緊急のバグが発生し、きれいな解決策を出すまで待てないかもしれません。 だからこそ、プログラマーとして多才であること、良いコードだけでなく、貧弱なコードも非常に素早く書けることが重要なのです。 うまくいけば、コードを再検討して、技術的負債を返済することができます。
12. 他人のせいにする
開発者やその他の技術専門家の間で、傲慢さがあまりにも一般的な特徴であることは周知のとおりです。 自分のミスに責任を持つことは、同業者の中であなたを輝かせる美徳です。 失敗を認めることを恐れないでください。 そうすれば、なぜそのような間違いをしたのか、どうすればそれを避けることができるのかを学ぶことに集中することができます。 もしあなたがそれを認めなければ、学習は不可能になる。
13. 学んだことをチームと共有しない
開発者としてのあなたの価値は、あなたが書いたコードだけでなく、それを書くときに何を学んだかにも置かれているのです。 自分の経験を共有し、それについてコメントを書き、なぜ物事がそのようになるのかを他の人に知らせ、プロジェクトとその複雑さについて新しいことを学ぶ手助けをしましょう
14. マネージャーやクライアントへのフィードバックが遅すぎる
職人の最も価値ある性格的特徴の1つは、仕事についてできるだけ全員が同じ考えを持っていることを確認することにある。 その理由は、上司がスプレッドシートを埋めるためではありません。 自分自身のためでもあるのです。 不安が少なくなり、プロジェクトの寿命や将来についての不安も減ります。
15. Googleを十分に使っていない
複雑な問題を素早く解決する最善の方法は、それを全く解決する必要がないことです。 迷ったらググれ。 もちろん、隣のエンジニアを困らせることもできますが、Stack Overflowのような詳細な回答が得られることは稀ですし、言うまでもなく、彼の仕事を邪魔することにもなります
16.
個人的なスタイルを過大評価する
常に自分の作業スタイルと環境設定をチームと調整することを目指します。 理想的には、チームの全員が同じ条件下で、同じコーディングスタイルに従って作業することです。 自分のやり方でやるほうが楽しいかもしれませんが、同僚はあなたのコーディングスタイルに慣れていないかもしれませんし、もしそれが普通でなければ、次の開発者があなたの作ったものに取り組むのは難しくなるでしょう。 自分のコードに個人的な愛着を持つこと
誰かがあなたのコードにコメントしたとき、それを個人的に受け止めてはいけません。 つまり、なぜそのように書いたのかを説明できるようにしなければなりません。
コードの書き方
18. 最適化の方法がわからない
優れた最適化戦略を正しく行うには、ある程度の経験が必要です。 探索、分析、そしてプロセスに関わるすべてのシステムを知ることが必要です。 これらについて自分自身で情報を得ることです。 アルゴリズムの複雑さ、データベースクエリの評価、プロトコル、そして一般的な性能の測定方法について学んでください
19. しかし、学び続けなければならない理由は、それぞれの新しい問題が異なるコンテキストをもたらし、異なるツール、つまり手元のタスクにより適用可能なツールを必要とするからです。 新しいライブラリや言語に対してオープンであること。 自分が知っていることだけに基づいた決定をしないでください。 ツールおよび IDE をマスターすることを気にしない
毎日使用するツールを使用しながら学ぶ各新しいホットキー、ショートカット、またはパラメーターは、あなたが思っている以上にコーディング速度にプラスの効果をもたらします。 ホットキーを使用することによって数秒を節約するのではなく、コンテキスト スイッチングを減らすことが重要です。 小さな動作の一つ一つに時間をかければかけるほど、なぜそれをするのか、次に何が来るのかを考える時間は少なくなります。 ショートカットを使いこなすと、心が解放されます
21. エラーメッセージを無視する
エラーメッセージを読まずに、自分のコードに何が問題なのかわかったと思い込んだり、すぐに解決できると思い込んだりしないでください。 問題に関してより多くの情報を持っていることは常に良いことであり、その情報を収集するために時間をかけることは、長い目で見ればより多くの時間を節約することになります。 開発者ツールキットをロマンチックにする
好みのエディターやコマンドライン ツールが、目下の仕事に最適なツールでないことがあります。 Visual Studio は IDE を書くのに最適、Sublime は動的言語に最適、Eclipse は Java に最適、などなど。 あなたはvimやemacsが好きかもしれませんが、それがすべての仕事に適したツールであることを意味するものではありません。 設定可能にする代わりに値をハードコードする
常に、どのような変更が来るか、それにどう対処するかについて考えておく。 動く部分を切り離さなければ、技術的負債はとんでもない速度で膨れ上がります。 定数や設定ファイルを適切に使用する。 常に車輪を再発明する
必要ないコードを書かないこと。 おそらく他の誰かがあなたの問題にすでにかなりの時間を費やしており、彼または彼女は、あなたが再利用できる十分にテストされたソリューションを持っているかもしれません。 自分自身の手間を省くことです。
25. 盲目的にコードをコピー/ペーストする
再利用する前にコードを理解する。 一見しただけでは、コードが行っていることのすべてにすぐに気がつかないことがあります。 また、時間をかけてコードを詳細に読むと、問題についてより深く知ることができます。
26. 26.物事が本当にどのように動くのかを学ぶ時間を取らない
物事がどのように動くのかを考え、その根本的な問題について読むことによって、常に自分の知識を広げる機会を持つようにします。 今は気にしないことで時間を節約できるかもしれませんが、プロジェクトで学んだことは、実際にそれを成し遂げるよりも長期的に重要なものになるはずです。 自分のコードに過度の自信を持つこと
自分が書いたからと言って、それが素晴らしいに違いないと思い込むのは危険です。 プログラミングは、新しいことに取り組み、経験を積むことでより深く学べるので、時々古いコードを見て、自分がどのように進歩したかを振り返りましょう。 各デザイン、ソリューション、またはライブラリのトレードオフについて考えない
どんな製品にも、使って分析することで初めてわかる細かい点があります。 あるライブラリの使用例をいくつか見ただけでは、そのライブラリのマスターにはなれませんし、プロジェクトで出てくるすべての状況に完璧に適合するわけでもありません。 使用するものすべてに対して常に批判的であれ
29. 行き詰まったときに助けを求めない
短いフィードバックループを維持することは、常に自分にとって苦痛が少ない。 助けを求めることは、あなたが無能であることを意味するものではありません。 適切な人は、あなたの努力と無知を認めることを学習意欲と見なし、それは素晴らしい美徳となります。 合格するテストを書く
合格することがわかっているテストを書くことは必要です。 それらは、プロジェクトのリファクタリングや再編成をより安全に行うことができるようになります。 一方、通らないとわかっているテストも書かなければなりません。 これらはプロジェクトを前進させ、問題を追跡するために必要なのです。 重要なケースのパフォーマンステストを無視する
プロジェクトの開発プロセスのほぼ中間地点で自動パフォーマンステストの設定を準備し、パフォーマンスの問題がエスカレートしないようにすることができる
32. ビルドが動作することを確認しない
ビルドが合格しても実際に動作しないことは稀ですが、起こり得ます。 すべてのビルドをすばやくテストすることは、重要な習慣です。 大きな変更を遅れてプッシュする、または大きなプッシュをした後に離れる
これは過信が招いたことであり、なぜこれをやってはいけないかを学ぶために何度も火傷をすることがあります。 自分が書いたコードを否定する
自分が書いたコードを喜んでサポートすること。 あなたは、他の人がそれを理解するのを助けるのに最も適した人です。 自分のコードが何年経っても自分にも他人にも読みやすいままであるように努力すべきです。
35. 非機能要件を無視する
何かを提供しようとするとき、パフォーマンスやセキュリティといったいくつかの重要な分野を忘れがちになることがあります。 それらのためのチェックリストを保管してください。
What are your worst programming habits?
よく言われるように、私たちは習慣の生き物です。 習慣によって仕事のやり方を改善することは、あらゆる状況について考えすぎることを避けるための素晴らしい方法です。 一度、良い方法を同化してしまえば、それは楽なものになるのです。