私は優れたコーディングスタイルの大ファンであり、うまく動作し、使いやすく、大規模なシステムに統合できる、クリーンで明確なコードを生成しています。私たちのプログラマーは、本質的に私たちの仕事、すべてのラインに誇りを持つべき職人です。一貫性のない形式のコード、コメントアウトされた実験的なコードが散らかっていて、役に立たない、または誤解を招く関数や変数名がたくさんあるコードは好きではありません。しかし、基本的に機能するこのようなコードについては、議論するのが難しい場合があります。
コーディングスタイルが重要であると思われる場合は、私の下層のジュニアプログラマーに優れたプロのコーディングスタイルを教える方法についての推奨事項を探しています。私は彼らに彼らの仕事を誇りに思ってもらいたいのですが、私の懸念は、彼らのコードがほとんど機能しないときに満足するように見え、私のような専門家がプロのコードと見なすものを作成することに関心がないように見えることです。一方、コーディングスタイルが特に価値がないと思われる場合は、コメントを歓迎します。私の基準と許容範囲を再検討することもできます。
わかりやすさ、メンテナンスのしやすさなど、優れたコードを支持する通常の引数を知っていますが、「機能しますが、これ以上何が必要ですか?」などの引数に対する反論も聞きたいです。
私たちの業界では、コンパイラを使用して多数の罪を隠すことができます。クリーンなコードと乱雑なコードはどちらも同じように機能するプログラムにつながる可能性があるため、クリーン度は重要であり、そうであればなぜですか?
[コーディングスタイルに関する既存の質問はいくつかありますが、ジュニアプログラマーに優れたコーディングスタイルを導入する方法や方法を教えることに関連する質問は見つかりませんでした。]
良い印象を与える
有名な本、例えば クリーンコード 、 コード完了 、 Coders at Work 、 The Clean Coder:A Code of Conduct for Professional Programmers など。( 完全なリストについてはこちらを参照 )そして、それらを読むために数日与えてください-仕事場、プライベートオフィスで。それらを間隔をあけて、例えば月に1冊または四半期に1本としましょう。彼らは努力から、あなたが個人的に言っていることが本当に重要であるということを理解するでしょう。明らかに、これに沿った管理が行われていることを確認してください。「えっと、Xの人は何ですか?ドアを閉めたままそこに穴をあけていますか?」
最新のテクノロジーに関する継続的で正式なトレーニングクラスに加えて。
また、物事が行われると「正しい方法」は大きな励ましと報酬さえ与えました。そうでなければ、それはポジティブでやりがいのある環境というよりは、むしろネガティブで罰則的な環境になる可能性があります。ほとんどの人は、それを行うためのツールがあれば、「良い仕事」をしたいと考え、そのことで知られることを望んでいます。
あなたが説教することを実践し、あなたが実践することを説教してください
コードについて話し、良い原則について話し、新しいツールについて話し、「コード」で知られるようにします。
スクリーンキャスト、ビデオ、ピープコード、その他のオンラインチュートリアルやクラスを提供/サポート/提案します。
http://www.meetup.com のようなサイトのグループを含む、適切なローカルユーザーグループをサポートおよび提案する
オフィスにいる場合(つまり仮想ではない場合)、実際に使用する本の在庫が豊富な本棚が適しています。これを「隅のほこりだらけの本棚」だけでなく、目立つように配置したり、本を移動したりする方法を見つけてください。あなたの想像力も使用してください。たぶん、すべてのプログラマーが1か月に1冊の本を「宿題」として受け取り、毎月のミーティングで「調査結果を発表」します。
これは、10分間の会話だけで、「批評家」の役割からあなたを取り除き、彼らが自分で釣りをする方法を学ぶことができるという印象をはるかに強くします(彼らに魚を与えるのではなく、あなたは取引を知っています)。ジュニアスタッフの中には、シニアスタッフに常に説明してもらうのが怖い場合もあります。
学習と卓越性の文化を植え付ける
基本的には、「学習と卓越性の文化」を作成して、自分が教えることを実践し、他の人に同じことをするように促すことができます。
これは、原則が実際の作業に適用されるかどうか/どのように適用されるかを確認するために、コードレビューと組み合わせて行う必要があります。逆に、コードレビューをせずに上記(---)なしで行うと、教師の意向に関係なく、生徒へのセッションをむち打ちするような気分になります。
すべてのプログラマーは、コードの変更をコミット/マージする前に、上級プログラマーと常にコードレビューを行う必要があります。
また、ほとんどのIDEには、大まかなコーディングスタイルの設定を適用するために構成できるツールがあり、ハンサムな小さな波線とオプションを使用して、ファイル全体でスタイルを自動的に修正できます。ジュニアプログラマーはそれをかなり早く取り上げます。
若い開発者からのこの振る舞いを奨励する最良の方法は、自分で練習し、彼らのロールモデルになることだと思います。可能であれば、プログラムを頻繁にペアにして、プログラムを作成する際にコードの品質を強調する必要があります。ペアリングしている間、あなたはそれらを作るときに良いコーディングの選択を説明し、正当化することができます。あなたは「悪い」オプションを探求し、説明することができますなぜそれらは長期的には良い解決策ではありません。手作業でこの種の開発に参加することは、コードの品質の重要性について新しい開発者に教えるための最良の方法の1つでしょう。チームの全員がコードの品質が重要であると考える場合、彼らもそれを尊重することを学びます。
コーディング標準は以下によってのみ処理されるため、適用するのは簡単なようです。
個人的には、これを優先しすぎたマネージャーの話です。重要なことに焦点を当て、細かいことに気を配らないでください。あなたは理由を正当化できるはずですが、標準を選ぶだけの場合もあります(あなたが単にメンタルであること以外に、4スペースのインデントが5よりも優れている理由を知っている人はいます)。
標準についてチームの合意を得る。これにより、付着の品質とレベルが向上します。議論に時間をかけすぎないでください。結局、リーダーはインプットの量に基づいて決定を下します。
変更(およびテスト)してから書き直し(およびテスト)するために本当にひどく書かれたコードユニットを与え、変更(およびテスト)するためのユニットテストを含む非常によく書かれたコードユニットを与えて、経験について尋ねます。
この後、(前の演習からの)コードを読み取り、リファクタリングして、慣例としてそれらの標準に一致させるための標準のリストを提供します。
これに先立って、標準化された文書が必要になります。
次の理由により、特定のコーディングスタイルを教えるべきではないと思います:
ジュニアプログラマーは間違いから学ぶ必要があります。彼らは、自分の仕事を評価し、上級開発者とコードレビューを行うことにより、継続的に改善します。
コーディングのガイドラインは、あなたが働いている会社の文化によって異なります。あなたがクリーンなコードであると考えるものに反対するかもしれません。
ジュニアプログラマーは通常、エンタープライズシステムにあまり触れないため、クリーンなコードが通常存在します。
大学の講師は、何十年にもわたって学界で立ち往生していることがよくあります。私は個人的に、彼らのガイドラインとフィードバックが、現在の業界標準と比較して、あまり役に立たず貧弱であることに気づきました。もちろん、いくつかはとても良いです。
要約すると:
解決策は、特定のガイドラインやコーディングスタイルを教えることではなく、さまざまなサイズのプロジェクトにおけるそれらの重要性を説明することです。
あなたが教室で、そして本から説明できることはあまりありません。
開発者は、テーマ自体の真の利点を確認するために手を汚さなければなりません。
ジュニア開発者を割り当ててプログラムをペアにし、彼らの仕事をレビューしてフィードバックを与える。結局、彼らは利益を見始めるべきです。
システムエンジニアリングと同様に、常に機能する特効薬のコーディングスタイルはありません。
実際の問題は、クリーンなコードとは何かについて人々が意見を異にしていることです。細部まで正確に記述された完璧なコードを書いたとしても、次の人はそれが駄目だと考えるでしょう。すべてのプログラマーは、コードのさまざまな部分を調べ、自分が気に入らないものを見つけながら、同時に良い部分をすべて無視しています。プログラマーが初めてバージョン管理に入る前に、悪いものを見つける必要があるため、これはプログラミングの必要な部分です。そのため、プログラマーは不良コードを簡単に再認識できます。それはすべてのプログラマーによって異なるというだけです。
チームでは、この機能は、規則の規則が厳しすぎる場合、または他の人が作成したコードを保守および操作する必要がある場合に問題を引き起こします。最善の解決策は、規約を守ることですが、強制しないことです。そして、誰もがコードの各部分の責任者を知っていることを確認してください。
今、ジュニアプログラマーを教えることは難しいです。ほとんどの試みは、彼の最後のコードがどういうわけか悪いと思って、それが原因で教育セッションが必要であると思って、ジュニアプログラマーで終わります。以前に起こったいくつかのエラーに対する罰のように。
クリーンなコードと乱雑なコードはどちらも同じように機能するプログラムにつながる可能性があるため、クリーン度は重要であり、そうであればなぜですか?
クリーンなコードと乱雑なコードの違いはとても大きいです:
一方、コードがすっきりしているので、チーム内の誰もが背後のロジックを簡単に理解し、多くの労力をかけずに新しい機能を追加できます。
もし重要な場合は checkstyle のようなものを使用し、それをpre-commitフックに入れます。チェックスタイルが失敗した場合、コードをコミットできません。 Checkstyleは、フィードバックメッセージを提供するのにかなり優れています。人々は、コードが標準に適合しなかった理由と、それを達成するために何をする必要があるかを理解します。
私は過去のプロジェクトの1つから、上級開発者の1人から優れたコーディングスタイルを学びました。彼はコードレビューミーティング中にすべてのコミットについて私のコードをレビューし、そこで何か改善できる場合は1行ずつ説明してくれます。
彼は、変数とメソッドのそれぞれの命名について説明し、それらをより適切に命名する方法を説明します。
彼はそれぞれの方法を説明し、読みやすく効率的な方法を教えてくれます。
彼はとても丁寧でしたが、彼のメンタリングは私を大いに助けてくれました。
私が彼と自分自身を合わせるのに3か月しかかかりませんでしたが、今では彼が私のコードに間違いを見つけることはほとんどありません。
私は、ジュニア開発者に教えるのと同じ方法に従い、それは機能します。
D.クヌースの文芸的プログラミングについて話し合う。
プログラムのドキュメンテーションを大幅に改善する時期がきていると思います。プログラムを文学作品と見なすことで、これを実現することができます。したがって、私のタイトルは「文芸的プログラミング」です。
プログラムの構築に対する従来の態度を変えましょう:主なタスクはコンピュータに何をすべきかを指示することであると想像するのではなく、私たちが望むことを人間に説明することに集中することにしましょう実行するコンピュータ
ドナルド・クヌース、約 文芸的プログラミング 。
私の控えめな意見では、コンピュータープログラムの主な目的が知的エンティティを他のプログラマーに伝達することであるという事実は、コーディングスタイルの重要性に関する決定的な議論です。
コーディングスタイルの過小評価されている側面は、それが自然に現れることです。私がずっと前に書いたソースコードを見ると、通常、時空の連続体を突破して、そのソースで実行した(認識された)怪物に直面するために自分自身を打ちのめそうとする説得力のある願望を感じます。あなたは後輩を指導していて、彼らは(必要があるため)早く学習する傾向があるので、可能な限り単純な解決策を実行します:悪いコードを(一度だけ)書けるようにし、それを彼らに維持させます。おそらく、彼らがソフトウェアエンジニアリングに長けていれば、罪を悔い改め、コードを適切にリファクタリングするでしょう。もちろん、スパゲッティコレクションを製品レベルのコードとしてリリースしないでください。ジュニア開発者が何かを小さく、ほとんど「使い捨て」に書く機会がたくさんあると私は確信しています。
実生活のようなソフトウェアスクールはありません
DRYは、コピーして貼り付けた行を4回編集する必要があり、3回しか編集しなかった場合に最適です。そのため、コードがnullポインターを逆参照し、アプリがクラッシュします...
また、「良い」方法論を彼らに伝えるために費やすであろうエネルギーはおそらく多くなるでしょう、そしてあなたが指摘したように、彼らがそれを「何でも、それがうまくいく」と却下しないことは確かではありません。
そのため、コードスタイルが重要であることを、実際に読みやすくすることで自分たちにも示します。
サポートするソフトウェアはプログラマーが思っているよりもずっと便利です
別のトピックだと思いますが、ほとんどの人は本能的に良いコードを書いていると思い込んでいます(有罪を認めます)。ですから、他人の混乱を修正することは、自分の習慣にとって良いことです。地獄での休暇から戻ったばかりなら、罪を犯さないでしょう(そうです、宗教的な見方は別として)?
名前付け規則のテクニックを使用して新しいプログラマーをトレーニングすることは、すばらしい方法だと思います[変数、メソッド、またはクラスに名前を付けるための標準です]。コードに触れるプログラマの流れをよりよくフォローするために、使用されている関連する名前を知ることで、そのようなものを簡単に処理できます。
たとえば、静的変数はsで始まり、引数変数はaで始まります。
私はまず、よく書かれたプログラムを渡されてプログラムを学び、それを1行ずつ説明しました。 (私は学位課程全体では得られなかった数時間で多くのことを学びました。)同じようにそれらを試してみて、どのようにしてそのように構成され、スタイル設定されているかを示す最高のモジュールの1つを紹介します。これはグループセッションで行うことができます。
可能であれば、慈悲深い独裁者を演じてください。リビジョン管理システムによっては、それを使用して支援できる場合があります。ただし、開発プロセスのボトルネックになる可能性があります。
自動スタイルチェッカーを導入して、できるだけ多くのスタイルルールを確認します。 (多くのチェックスタイルルールは、JavaとC++の間で移植可能である必要があります。)これにより、途中でコードをレビューできますが、コードレビューに代わるものではありません。 。
自動スタイルチェッカーを実装している場合は、静的コード分析ツールを実装することもできます。これは、コードレビューで見逃される可能性があるバグのいくつかを排除するのに役立ちます。また、静的コード分析ツールがカバーするエラーを探すのではなく、スタイルの問題に集中することもできます。確認する必要がある一般的なケースがまだある場合があります。
コードをチェックインする前に、開発者が使用するチェックリストを作成します。これには、チェックインの前に発生させたい他のものが含まれる場合があります。チェックリストがエラーの削減に役立つという証拠が増えています。開発者がよく犯す間違いのチェックリストを独自に作成して、繰り返しの発生を回避できるように開発者を奨励します。
コードレビューを行う
特に、不適切なコーディングスタイルによって発生する問題、または適切なコーディングスタイルによって防止される問題を指摘します。
なぜこれが重要なのか、たくさん話してください。
同僚のジュニアの程度に応じて、美しいコードを書く前に、コードを書くことを学ぶ必要があることを理解してください。
1つのアイデア:故意に読みやすく理解しにくいようにコードを作成した場合にどのようなコードになるかを示します( http://www.ioccc.org/2011/konno/konno.c は短いですたとえば)。維持するためにこのようなコードを受け取りたいと依頼しますか?
の重要性を強調する
コンピュータ言語は、コンピュータに操作を実行させるための単なる方法ではありません...人々が読むためにプログラムを書く必要があり、偶然にマシンが実行するためだけに書かなければなりません。
( [〜#〜] sicp [〜#〜] からの引用)