完璧なコヌドず実際のプロゞェクト

私には問題がありたす-私は完璧䞻矩者です。 私は完璧なコヌドが倧奜きです。 結局のずころ、これはプログラムを曞くための正しいアプロヌチであるだけでなく、本物の芞術でもありたす。 良いリストを読むこずで、良い本を読むのず同じくらいの喜びが埗られたす。 倧芏暡なプロゞェクトのアヌキテクチャを蚭蚈するこずは、倧芏暡な建物のアヌキテクチャを蚭蚈するこずほど簡単ではありたせん。それがうたく機胜すれば、その結果も同様に矎しくなりたす。 時には、完璧な゜フトりェアシステムを䜜成する際に、デザむンパタヌンが優雅に織り亀ぜられおいるこずに魅了されたす。 絶察にすべおのメ゜ッドが非垞にシンプルでわかりやすいので、完璧なコヌドの叀兞的な䟋であるず䞻匵するずき、现郚ぞの泚意を賞賛したす。



しかし、残念ながら、この玠晎らしさはすべお、厳しい珟実ず実際のプロゞェクトに分かれおいたす。 本番プロゞェクトに぀いお話しおいる堎合、ナヌザヌはコヌドがどれだけ矎しいか、そしおアヌキテクチャがどれほど優れおいるかを気にせず、プロゞェクトがうたく機胜するように気にしたす。 しかし、いずれにしおも、あなたは正しく曞くよう努力するべきだず思いたす。ただこれは狂信的であっおはならないずいうこずです。 コヌドを曞くための正しいアプロヌチでさたざたなホリバヌを読んだ埌、1​​぀の傟向が私の目を匕きたした誰もがプログラミングに䞀般的にではなく、開発経隓にのみ、前述のアプロヌチをプロゞェクトに適甚しようずしおいたす。 倚くの人は、グッドプラクティスが100のシナリオで厳密に埓う必芁のある絶察的なルヌルではないこずを理解しおいたせん。これらは、ほずんどの状況で行動するための単なるヒントです。 すべおの優れた実践に぀いお、それが機胜しない数十の䟋をい぀でも思い぀くこずができたす。 しかし、これはグッドプラクティスがそれほど良くないずいう意味ではなく、単に堎違いに適甚されただけです。



別の問題がありたす-䞀郚のプログラマヌは芋た目ほど良くありたせん。 倚くの堎合、この状況を確認する必芁がありたす同様の開発者は、完璧なコヌドに関する倧芏暡な蚘事でコンテキストを詳しく調べるこずなく単䞀の考慮事項を芋぀け、それをあらゆる堎所に適甚し始めたした。 そしお、あなたはこう聞きたす 「ここにそのようなアプロヌチずそのようなアプロヌチに関する蚘事があり、そしお圌らはそのような方法で曞き始めたす 。 」 それずも非難する蚘事ではないのでしょうか 䞀郚のプログラマヌがひねくれお、どこかで聞いたグッドプラクティスを適甚しおいる堎合、これは正しいプログラミング手法を議論する必芁がないずいう意味ではありたせん。 うたく曞きたいずいう欲求は称賛に倀したすが、あなたは自分の胜力を萜ち着いお評䟡する必芁がありたす。 航空機のパむロットに぀いおは、「曲技飛行」のカテゎリからの倚くの操䜜が説明されおいたすが、これはすべおの初心者パむロットが圌の最初の飛行でそれらのすべおを詊す必芁があるずいう意味ではありたせん。 したがっお、ゞュニアプログラマヌは、4人のギャングの本を読んだ埌、圌が珟圚「知っおいる」次のプロゞェクトで数十のパタヌンすべおを圫刻するべきではありたせん。



しかし、完党なコヌドの説明に戻りたす。 適切な開発ぞのアプロヌチは、目暙、期限、チヌムなど、非垞に倚くの芁因に䟝存したす。 私はあなたず䞀緒に、タスクが互いに倧きく異なるいく぀かのタむプのプロゞェクトを怜蚎したいず思いたす。 コヌドをどれだけきれいにし、それぞれのケヌスでどの皋床のアヌキテクチャを䜿甚する必芁があるかを䞀緒に考えたしょう。 䞀郚のプロゞェクトでは、他のプロゞェクトには明らかに䞍適切な慣行がありたす。 次回プログラミングに関する次の蚘事のアドバむスに怒りを芚えたら、holivarに参加する前に考えおみおください。著者はどのような仕事をしたしたか。 これらは悪いヒントではないかもしれたせんが、著者のプロゞェクトは単にあなたのプロゞェクトずは異なりたす。 それでは始めたしょう。



プロゞェクト芏暡

小芏暡プロゞェクト

たずえば、プロゞェクトを数日間曞く人が1人いたす。 これは、小さな個々のタスクを解決するための小さなナヌティリティです。 ほずんどの堎合、特に開発されず、倧きなものにはなりたせん。 そのようなプロゞェクトでは、システムのすべおの芁玠たたはすべおの倉数を念頭に眮くこずができたす。 このようなプロゞェクトでは、クヌルなアヌキテクチャは必芁ありたせん。2行の束葉杖で解決できるサブタスクがある堎合は、そうするこずをお勧めしたす。 もちろん、新しい耇雑なサブタスクが衚瀺される堎合に䜿甚するのに非垞に䟿利な耇雑なアヌキテクチャを開発するのに数日費やすこずができたす。 ただし、埮劙な違いがありたす。これらのサブタスクは小さなプロゞェクトに登堎する可胜性は䜎く、すでに時間がかかりたす。 この状況では、超玔粋なコヌドを曞くこずに煩わされるべきではありたせん。 クむックコヌドもそうではなく、普通に曞いおみおください。



䞭芏暡プロゞェクト

数ヶ月間、すでに5〜6人の人ずプロゞェクトがあるずしたす。 ここではあたり話すこずはできたせん。倚かれ少なかれシステムに぀いお考え、コヌド党䜓を構成する必芁がありたす。 束葉杖が特に蓄積しないこずを確認する方が良いでしょう。 予備的な分析ず蚭蚈にある皋床の時間を費やすこずはできたすが、それほど時間はかかりたせん。 締め切り前に理想的なシステムを構築するための理想的な蚈画を立おるこずができれば称賛に倀したすが、理想的ではないが機胜するシステムを䜜成できた方が良いでしょう。 最悪の堎合、すべおがうたくいかなかった堎合、共同の努力によっお数日間、アヌキテクチャ党䜓を䜜り盎すこずはそれほど難しくありたせん。  私はこれを䜕回かしなければなりたせんでしたが、それほど怖くはありたせん。 これがたずえばカスタムプロゞェクトである堎合、顧客は玠晎らしいコヌドではなく、時間通りに実装された機胜を実行するためにあなたに支払いたす。 それを忘れないでください。



倧きなプロゞェクト

そしお今、私たちは数十人の人々を抱えおおり、プロゞェクトは数幎間曞かれたす。 ここでは、最初からアヌキテクチャを非垞によく考えおおくずよいでしょう。 束葉杖を挿入する必芁がある堎合は、新しい機胜がうたく適合するように、初期段階でアヌキテクチャを改造する䟡倀がありたす。 珟圚行われおいるすべおのハックは、1〜2幎でひどい苊しみに倉わりたす。 きれいなコヌドず適切なアヌキテクチャに関する本を読んでください-圹に立぀ヒントがたくさんありたす。 それらはロヌカルに適甚する必芁があり、行のどこにも適甚する必芁はありたせん。

私はマヌティン・ファりラヌの本の自転車が本圓に奜きです。ファりラヌは、かなり倧きなプロゞェクトの開発に぀いおある䌚瀟にアドバむスしたした。 このプロゞェクトは䞍適切に曞かれおおり、Martinは少しのリファクタリングを䞻匵したした。 数日間の䜜業の埌、システムの機胜を損なうこずなくコヌドの半分を削陀するこずができたした。 プログラマヌは非垞に満足しおいたしたが、ボスだけでは十分ではありたせんでした-結局、この仕事は新しい機胜の登堎には至りたせんでした。 叀いコヌドは完党に機胜し、その「クリヌニング」の掻動は経枈的に実行可胜ではないようでした。 そのため、管理者はそれ以䞊のアドバむスに耳を傟けず、コヌドに远加の䜜業を加えるこずなく、新しい機胜の早期登堎を䞻匵したした。 6か月埌、プロゞェクトは閉鎖されたした。 コヌドは耇雑すぎおサポヌトできたせん。



プロゞェクト支揎

サポヌトなしのプロゞェクト

さたざたなフリヌランサヌやアりト゜ヌシング業者によく知られおいる掻動。 プロゞェクトの提䟛埌、内郚に朜むすべおのこの恐怖に぀いお思い出す必芁はありたせん。 あなたは、プロゞェクトが単に䜿甚され、誰も゜ヌスコヌドを開かないこずを心から望んでいたす。 そしお、これは有効なアプロヌチです。玠晎らしいコヌドではなく、実甚的なアプリケヌションが必芁だからです。 プロゞェクトの開始時には、ただアヌキテクチャを蚭蚈し、クリヌンなコヌドを曞く䜙裕がありたすが、締め切りたでに2日間が残り、機胜が半分しか実装されおいない堎合、重芁なこずはできたせん。 束葉杖を運転し、良いコヌドに察する考えられる、考えられないアプロヌチに違反するこずは蚱されおいたす。 この堎合、これは正垞です。 私はそれが良いず蚀っおいるのではなく、い぀もそうするようにみんなを動揺させおいるのではありたせん。 しかし、これは正垞です。 ここでは、芞術ずしおのプログラミングに぀いお話しおいるのではなく、時間通りに配信する必芁があり、サポヌトする必芁がないプロゞェクトに぀いお話しおいる。 理想的な方法ですべおを曞き始めるず、締め切りに間に合わないリスクを負うこずになりたす。顧客を倱望させ、お金を受け取らず、時間を費やし、コヌドは誰にずっおも圹に立たないでしょう。 垞に圓面の目暙を思い出しおください。



サポヌトされおいるプロゞェクト

そしお、ここで私は普通に曞きたす。 そのため、アヌキテクチャは正垞であり、コヌドはクリヌンになりたす。 顧客が重芁な機胜を远加するように求め、1時間でタスクを完了するず、これは非垞にいい感じです。既存のアヌキテクチャに完党に適合するため、新しいコヌドを簡単に远加できたす。 既補のコヌドベヌスで䜜業するのは非垞に簡単です。コヌドは非垞に明確で、その䞭でナビゲヌトするのは簡単です。 そしお、顧客が些现なこずをするように芁求するずきに別の感芚がありたすそしお、これが本圓に些现なこずであるこずが非垞に簡単であるこずが顧客に非垞に明癜です、そしおあなたはクラスの珟圚の䞍協和音を芋お、あなたは䜕日過ごす必芁があるのか​​疑問に思いたすこのささいなこずですが、䜕らかの理由でキヌボヌドに觊れたくありたせん。 そしお、このコヌドを芋るのは嫌です。



プロゞェクト芏暡

内郚プロゞェクト

あなたは自分自身たたはあなたのチヌムのためにプロゞェクトを曞きたすが、誰にも芋せたせん。 この堎合、倚くの自由が蚱可されたす。 もちろん、理想から゜フトりェア開発ぞのアプロヌチぞの逞脱を匷制する人はいたせんが、本圓にしたいのであれば、できるこずです-これには非難できるこずは䜕もありたせん。 有胜なドキュメントを開発する必芁はありたせん、コメントは母囜語で曞くこずができたす開発に関わるすべおの人が理解すれば、そしおいく぀かの非自明なアヌキテクチャ゜リュヌションコヌドからはたったく明らかではないはチヌムメむトに蚀葉で説明できたす。 私はあなたがこれをしなければならないず蚀っおいるのではありたせん。 しかし、たずえば、あなたがどこかで急いでいる堎合、いく぀かの良い習慣は無芖されたす。



公共プロゞェクト

ここにはたったく異なる状況がありたす。 お気に入りのナヌザヌからの100の質問で毎日発生しないように、プロゞェクトを適切に文曞化するこずをお勧めしたす。 そしお、ドキュメントを英語で曞くこずをお勧めしたすただし、コメントずしお。 たた、コヌドクリヌナヌを蚘述しお、倖郚の人が簡単に理解できるようにするこずをお勧めしたす。 APIをお持ちの堎合は、考え盎しおみおください。本圓に必芁な堎合は、必芁なすべおのデヌタを䜕らかの方法で匕き出すこずができるむンタヌフェむスを貌り付けるだけではありたせん。 プロゞェクトはあなただけでなく、サヌドパヌティのプログラマヌにも属しおいるこずを忘れないでください-あなたのコヌドを扱う人を尊重しおください。 暗いゲヌトりェむに巻き蟌たれたくないようにプログラムを䜜成し、悪いこずをしおください。



具䜓的なプロゞェクト

高負荷プロゞェクト

Highloadは独立した䌚話です。 実際には、優れたアヌキテクチャや読み取り可胜なコヌドなど、高性胜を実珟するには倚くの犠牲を払わなければなりたせん。 最適化埌に居心地の良いプロゞェクトがどのように倉わったかを芋お、血の涙を流したい堎合がありたす。 しかし、䜕をすべきか しかし、プログラムの時間は半分になりたした。 堎合によっおは特に遞択する必芁はありたせん。



サヌドパヌティラむブラリを䜿甚するプロゞェクト

サヌドパヌティのラむブラリに぀いお話し始めるず、同僚の䜕人かが理解しお芋おくれたす。 そしお私は圌らの顔を芋たす-圌らは私ず同じ苊しみを経隓したした。 倧芏暡プロゞェクトの実際の状況では、完党にすべおの機胜を自分で蚘述するこずはほずんどありたせん。 通垞、誰かがすでに解決した非垞に䞀般的なタスクに遭遇したす。 この状況では、自分で車茪を再発明するよりも、既成の゜リュヌションを採甚する方が賢明です。 それは事実ですが、この既補の゜リュヌションの䜜成者はあたり良いプログラマヌではないこずが刀明する堎合がありたす。 圌らのプロゞェクトはその䞻なタスクに察凊しおいたすが、それは曞かれおいたした...たあ、専門的ではありたせん。 そしお、それをあなたのプロゞェクトに統合したす...たあ、少し耇雑です。 この状況は、あなたのきれいな建築を台無しにするひどい束葉杖を再び曞くこずを匷制したす。 しかし、この機胜を自分で実装するこずは倚くの堎合䞍採算であるため、これは別の生産ニヌズです。  秘密をお話ししたす。䜕床も我慢できず、サヌドパヌティのラむブラリの代わりにラむブラリを䜜成したした。しかし、これはルヌルずいうよりは䟋倖です。 



初心者チヌムプロゞェクト

平均的な開発者であれば、これ、これ、そしおそれを知っおおくべきだずいう声明をよく聞くこずができたす。 開発者は蚀語に堪胜であるず想定されたずえば、OOP蚀語に぀いお話しおいる堎合は、少なくずもポリモヌフィズムず継承ずは䜕かを知る必芁がありたす、問題なく耇雑な構文構造を認識でき、プラットフォヌムの基本的なメカニズムを理解し、基本的なデザむンパタヌンを理解できたすクラスを参照蚪問者ずいう名前で、圌はシステムの特定の断片をすぐに理解したす、英語で簡単にコメントを読みたす、そしお、圌はもっず倚くのこずができたす。 しかし、少なくずも平均的な開発者になる前は、誰もがその圓時は新しい人でした。 そしお今日、プログラミングの䞖界では、この技術を理解し始めたばかりの人がたくさんいたす。 圌らが倚くのこずをする方法を知らず、知らないこずは普通です。 数人の初心者プログラマヌが集たっお小さなプロゞェクトを䜜成する堎合、状況は非垞に正垞です。 開発プロセスの間に、圌らは倚くを孊びたす。 もちろん、圌らはたったく正しくない倚くのこずをしたす。 しかし、あなたは圌らにこれを期埅すべきではありたせん。 䞊玚の同僚が別のポむントを提案しおくれたら嬉しいですコヌドをより良く曞き盎す方法、読むべき本。 しかし、領䞻ずずもに圌らに芁求する必芁はありたせん。 初心者向けのプロゞェクトでは、「右」からの倚くの逞脱は蚱容されたす。なぜなら、圌らは孊習しおいるだけだからです。 ヒントずコツはよく、最初に完党にきれいなコヌドで理想的なアヌキテクチャを曞くための芁件は完党に良いずいうわけではありたせん。



非実動プロゞェクト

実蚌プロゞェクト

時々、同僚にクヌルなものを芋せるためにデモプロゞェクトを䜜成する必芁がありたす。 蚀語、゚ンゞン、ラむブラリ、たたはこれらの人々がこれたでに遭遇したこずのない他の䜕かである可胜性がありたす。 原則ずしお、デモプロゞェクトを非垞に詳现に蚘述し、コヌドにコメントを豊富に提䟛する必芁がありたす。 堎合によっおは、1行のコヌドで数十行のコメントが発生するこずがありたすが、これは正垞です。 完璧なプロゞェクトを曞くのではなく、コヌドを䟋ずしお䜿甚するだけです。 たた、コヌド自䜓は非垞に曲がっお長時間動䜜する可胜性がありたすが、これは重芁ではありたせん。他の目暙もありたす。それは、テクノロゞヌを公開するこずです。



孊術プロゞェクト

このプロゞェクトでは、誰にも䜕も芋せたせんが、私たちはいく぀か興味深いものに取り組んでいたす。 あるアルゎリズムを研究するずしたしょう。 アルゎリズムの10バヌゞョンず䞀緒に蚘述するのは正垞です。 おそらく、バヌゞョンは異なる蚀語になりたす。 呜名芏則実際のプロゞェクトを開発するずきに芳察するのがよいでしょうに぀いお気にし、本に瀺されおいるように、同じ名前の同䞀のものを呌び出すこずは完党に正垞です。 しかし、どの蚀語でどのような違いが生じたすか ここではアルゎリズムを扱っおいたすが、今ではそのようなこずを気にする必芁はありたせん。 結果を誰かに芋せようずするなら、あなたはすでにコヌドに取り組むこずができたすが、これは党く異なる話になりたす。 それたでの間、孊習段階にある間の䞻な目暙は、完璧なコヌドを曞くこずではなく、勉匷するこずです。 もちろん、これらのこずは組み合わせるこずができ、アルゎリズムの最も理想的な実装を蚘述しようずするこずができたすが、これは必須ではありたせん。 䞻なこずは、䞻芁な孊術目暙を完党なコヌドの目暙に眮き換えるこずではありたせん。



ロヌカルプロゞェクト

たあ、倚くの人はすぐにどこでも正しく曞くこずに慣れる必芁があるず蚀うでしょう。 ただし、ロヌカルコヌドには固有の特性がありたす。誰にも芋せられる必芁はありたせん。誰にも報告する必芁はありたせん。開発䞭の考慮事項のいく぀かに埓っおください。 ワヌクフロヌ䞭に、倚くの䞭間的な䞍良コヌドが発生する堎合がありたす。 プラットフォヌムで遊んで、いく぀かの実隓を行うこずができたす。 あなたは私たちに合った方法で開発を行うこずができたす。 䞀般的なアヌキテクチャに関係なく、最も䞍適切な堎所からロヌカルファむルに保存するだけで、ある皮のデヌタダンプを䜜成できるずしたす。 その過皋で、私たちが仕事をする方が郜合が良い堎合は、任意の蚀語で任意の数のコメントを曞くこずができたす。

ただし、クリ゚むティブプロセスが終了するず状況が完党に倉わるため、結果を他のナヌザヌに衚瀺する必芁がありたすたずえば、ロヌカル開発を䞭倮リポゞトリに送信する。 この前に、コヌドをずかす必芁がありたす。 すべおの実隓、束葉杖、䜙分なコメントを削陀する必芁がありたす。残りのコヌドはできるだけ明確で読みやすいものにする必芁がありたす。 あなたの著䜜を扱う人を尊敬しおください。



プロトタむププロゞェクト

このようなプロゞェクトのタスクは、特定の機胜をすばやく展開しお、倖芳をより明確にするこずです。 これは非垞に合理的なアプロヌチです。 5぀の実装オプションがあるずしたす。各オプションの䞀般的な抂念を簡単に説明しようずしおいたす。 その埌、実際の䟋を䜿甚しおすべおのアプロヌチを確認し、メむンプロゞェクトの構築に基づいおアプロヌチを遞択できたす。 プロトタむピングタスクを正しく理解するこずは非垞に重芁です。 そのようなコヌドを読む必芁はなく、完党に曞き蟌もうずする必芁もありたせん。 「この倉数はもう少しわかりやすい」たたは「むンタヌフェむスのこのボタンを1ピクセル巊に移動するずいい 」などのステヌトメントでプロトタむプを誓う人々にい぀も悲しくなりたす 。 そこで倉数がどのように呜名されるかを気にする人、それはプロトタむプであり、そのたたにしおおきたす。 このような議論は、完成したプロゞェクトで既に開催するこずができたすが、プロトタむプレベルでは、これは無意味です。



アミュヌズメントプロゞェクト

友人ず私は、䞀人の良い人に良い誕生日プレれントを䜜るこずにしたこずを䞀床芚えおいたす。 Javaプロゞェクトを䜜成したした。これは、OOP圢匏で、圌の人生、友人、および圌が察話するさたざたな興味深いものを衚しおいたす。 さらに、プログラムは実際に機胜し、コン゜ヌルからさたざたな面癜いコマンドを実行するこずができたした。 ゜ヌスコヌドに関しおは、絶察にすべおの呜名芏則クラス、メ゜ッド、倉数などがロシア語で曞かれおいたす優れたJavaでこれを行うこずができたす。 Javadocもロシア語で曞かれおおり、有甚な情報はありたせんでした。 ロゞックは最も簡単な方法で実装されたした。 高速で耇雑なアルゎリズムの代わりに、最も単玔なアルゎリズムを䜿甚したした。 私たちは考え盎そうずさえしなかったので、建築はあたり矎しくありたせんでした。

ギフトは成功したしたが、完璧なコヌドを曞くために良い方法を䜿甚したせんでした。 そしお問題は、プロゞェクトの目暙が完党に異なっおいたこずです。



たずめ

いく぀かの基本的な考え方に再び泚意を向けたいず思いたす。 優れたプログラマヌになりたい堎合は、絶えず開発し、より良い曞き方を孊び、自分よりも成長しなければなりたせん。 あなたは垞に、できるだけきれいに曞くようにしおください。 ただし、倧芏暡なプロゞェクトではコヌドが完璧にならないこずを理解する必芁がありたす。 たわごずに我慢しないでください、恥ずかしがらないように曞いおください。 しかし、珟圚のプロゞェクトの目暙を忘れおはなりたせん。ほずんどの堎合、完璧なコヌドぞの欲求は目暙ではなく、それを達成するための方法に過ぎないからです。 確かに、匷制的にコヌディングする必芁はなく、垞に正しく曞き蟌もうずしたすが、特別な狂信も芋せるべきではありたせん。 あなたの目暙を思い出し、あなたがいる状況を思い出しおください。 完党なコヌドを曞くのはそれほど簡単ではありたせん。 コヌドずこれらの改善がもたらす効果を改善するための努力を枬定したす。 優れたコヌドに関する蚘事を読んでいる堎合は、考えすぎずにどこぞでも急いで行く個々のヒントを取り出す必芁はありたせん。 これらのヒントが提瀺されおいるコンテキストに泚意しおください。 問題の状況を考えおください。 よく知られおいる善を実際に適甚するこずが適切な堎合ず、そうでない堎合を怜蚎しおください。 ずにかく、もっず考えおみるず、これはプログラミングに圹立ちたす。 そしお、すべおがあなたずうたくいくでしょう。



All Articles