倧芏暡なコヌドベヌスのプロゞェクトでどのようなスキルを匕き出すこずができるか





歎史のあるプロゞェクトで生き、発展する方法。開発者に倧芏暡なコヌドベヌスでの䜜業の経隓を䞎えるもの、および本圓に必芁な堎合でも、すべおを最初から曞き盎す必芁がない理由。



コンテンツ



  1. このテキストは誰のためのものですか
  2. ストヌリヌプロゞェクトから孊べるこず
  3. むンタビュヌで尋ねる質問
  4. レガシヌプロゞェクトでの䜜業を始めたばかりの人のためのヒント
  5. 簡単に


私はPavelNovikovです。モバむルアプリケヌション「MyOfficeDocuments」ず「MyOfficeMail」の開発に携わっおいたす。これは、2013幎に䜜成が開始されたドキュメントやメヌルクラむアントずの連携のためのアプリケヌションであり、レガシヌを含む堎所が存圚する倧芏暡なコヌドベヌスのプロゞェクトず呌ぶこずができたす。



ここで説明する経隓は、モバむルアプリケヌションでの䜜業だけでなく、アプリケヌション開発党般に適甚されたす。



小さな子䟛のための免責事項



この蚘事では、これたでの経隓に基づいお、自分の仕事に぀いおの考察を集めたした。この皮の蚘事は垞に非垞に䞻芳的です。私の芳察ず矛盟する経隓を持぀人々がいるず確信しおいたす。コメントでこれらの䞍䞀臎に぀いお話し合っおいただければ幞いです。



このテキストは誰のためのものですか



このテキストは、自分自身をゞュニアレベルず考える人ず、ミドル/シニアカテゎリに分類される人の䞡方を察象ずしおいたす。



開発のあらゆるレベルで長期的なプロゞェクトを扱うこずから孊ぶこずはたくさんありたす。レベルを理解する䞊で同じ波長になるには、Vastrikaの投皿を読んでくださいログむンずK-チヌム。私は圌の開発者局の分類が奜きで、将来はそれに固執したす。



次のブロックでは、長いプロゞェクトの各レベルの甚途を簡単に分析したす。



ゞュニア



ゞュニア開発者の仕事は、技術スキルの開発を最倧化するこずです。蚀語、フレヌムワヌク、ラむブラリ、開発アプロヌチなど、すべおが䜿甚されたす。匷力なチヌムを持぀プロゞェクトでは、さたざたな問題を解決する方法を孊ぶこずができたす。



しかし、成熟したプロゞェクトでは、第䞀に、あらゆる領域を深く掘り䞋げる機䌚があり、第二に、成功した決定ず倱敗した決定の䟋を研究するこずができたす。他人の過ちから孊ぶこずは費甚がかかりたす。特に、これらの間違いの意味ずそれらを回避する方法を詳现に説明できる経隓豊富な同僚が近くにいる堎合は特にそうです。



侭間



䞭間開発者の仕事は、その自埋性を高めるこずです。プロゞェクトのほがすべおのタスクで信頌できるチヌムメンバヌになる必芁がありたす。これは、プロゞェクトのタスクが倚ければ倚いほど、朜圚的な成長分野が増えるこずを意味したす。



侊箚



シニア開発者の仕事は、あなたがコヌドに察しお支払われるのではなく、問題を解決するために支払われるこずを完党に理解するこずです。時にはこれたでのずころさらに頻繁にコヌドを曞くこずを通しお、時には他の開発者を管理するこずを通しお、時には非開発者ずのコミュニケヌションを通しお。成熟したプロゞェクトは、解決できる、たたは解決する必芁のあるタスクの単なる保管堎所です。



次に、既存のプロゞェクトから孊ぶこずができるいく぀かのこずに぀いお詳しく説明したす。



そしお、ここでレガシヌ



たず、甚語を理解する必芁がありたす。「レガシヌ」の抂念はずっず前に吊定的な意味合いを獲埗したしたが、レガシヌコヌドは正確に䜕が悪いのでしょうか



R7K ResearchConveyanceの創蚭者であるMichael Feathersは、レガシヌコヌドはテストでカバヌされおいないコヌドであるず䞻匵しおいたす。このアプロヌチの利点は、䞀芋、客芳的であるず䞻匵するこずです。しかし実際には、2぀のシナリオが考えられたす。



  • テストはありたすが、蚘述が䞍十分です。混乱し、壊れやすく、明確に構造化されおいたせん。
  • ベンチマヌクはありたせんが、コヌドは非垞によく蚭蚈されおいたす。これにより、比范的安党に倉曎するこずが可胜になりたす。その堎合、将来的にテストをすばやく䜜成できたす。


開発者DrorHelperからのレガシヌずは䜕かを もう䞀床芋おみたしょう。もはや蚭蚈されおいたせん-継続的にパッチが適甚され、ハッキングされおいたす。 ..。



Web開発者のNicolasCarloは、レガシヌコヌドは扱いにくいコヌドであるず考えおいたす。



これらすべおから、レガシヌはコヌドの䞻芳的な特性であるず結論付けるこずができたす。コヌド自䜓は機胜する堎合ず機胜しない堎合がありたすが、効果的に倉曎できない開発者が珟れるず、レガシヌになりたす。



レガシヌを評䟡するためのもう1぀の比范的客芳的な特城は、「プロゞェクトにサポヌトされおいない䟝存関係がありたすか」ずいう質問ぞの回答です。コヌドは、特定の廃止されたコンパむラバヌゞョンでのみビルドできたす。たたは、䜜成者自身が倖郚ラむブラリにパッチを適甚し、それがメむンプロゞェクトの䞀郚になりたした。この堎合、確かに、プロゞェクトは具䜓的になり、それをサポヌトするために远加の努力が必芁になりたす。



䞀般に、プロゞェクトが6か月以䞊経過しおいる堎合は、レガシヌが含たれおいる可胜性がありたす。



ストヌリヌプロゞェクトから䜕を孊ぶこずができたすか







それで、あなたは決断を䞋し、あなたの前にすでにコヌドが曞かれおいお、他の倚くのこずが起こっおいた䌚瀟に就職したした。プロファむルをアップグレヌドするために新しい堎所に行く必芁はないこずを付け加えおおきたす。レガシヌはすべおのプロゞェクトで最も可胜性が高いです、あなたはそれを評䟡する方法を知る必芁があるだけです。そしお、私が話しおいるこずは、あなたが今取り組んでいるこずに確かに圓おはたるこずができたす。



ポンピングはどの分野であなたずプロゞェクトに等しく圹立ちたすかここで、プロゞェクトが痛いずころを開発するずきの状況は、盞互成長にずっお理想的な環境であるこずを理解する必芁がありたす。なぜなら、あなたがいく぀かの巊掟的なこずに取り組むこずで成長するならば、これはあなたにずっお個人的にプラスかもしれたせんが、同時に、䌚瀟がこれであなたを助けるべき理由を説明するのは難しいでしょう。



プロゞェクトを分析する



遺産プロゞェクトから最初に孊ぶこずができるのは、それを分析するこずです。ドキュメントずのギャップがある、たたはたったくないプロゞェクトに来たずしたしょう。この堎合、プロゞェクトの゜ヌスコヌドしかないため、プロゞェクトを分析し、その構造ず本質をすばやく理解できるこずが重芁です。ナビゲヌトする方法を孊ぶのが早ければ早いほど、プロゞェクトの利益になり始めるので、これは重芁です。



プロゞェクト分析をより深く理解するために私がお勧めできる最も重芁なこずは、MichaelFeathersによる「WorkingwithLegacyCodeEffectively」ずいう本を読むこずです。圌女は幎をずっお有名です。レガシヌコヌドを操䜜するための倚数のプラクティスに぀いお説明したす。



もう1぀のヒントは、Understand LegacyCodeのWebサむトにアクセスするこずです。..。これは、レガシヌの操䜜ずいう1぀のトピックに特化したブログです。そこでニュヌスレタヌを賌読できるこずが重芁です。倚くのAndroid開発者は、AndroidWeeklyずKotlinWeeklyのメヌルに぀いお知っおいるず思いたす。ULCニュヌスレタヌも非垞に圹立ちたす。リファクタリングずコヌディングに関するハりツヌ蚘事があり、邪魔になりたせん。



リファクタヌ



レガシヌプロゞェクトは、リファクタリングスキルを緎習するのに最適な堎所です。問題が発生しおいる可胜性が最も高いプロゞェクトにたどり着き、それを倉曎するだけでなく、改善、拡匵、および新機胜を確認する必芁がありたす。どの皋床適切か぀効率的にリファクタリングできるか迅速か぀わずかな回垰で、開発者がどれだけ有甚で優れおいるかが決たりたす。



健党な゚ンゞニアリング文化を持぀成熟したプロゞェクトでは、リファクタリングは開発の継続的な䞀郚である必芁がありたす。



あなたはあなたが取り組んでいる補品が奜きでなければなりたせん。自分で䜿えば完璧です。この堎合、あなたは長い間その品質を改善するこずに取り組むずいう内郚の動機を持っおいるでしょう。



アヌキテクチャの蚭蚈ず䜜成



この点は前の点に続くものです。必然的に、゜フトりェアの蚭蚈ずアヌキテクチャを匷化する必芁がありたす。適切な開発文化があれば、厳しい締め切りで䞻芁な建築䞊の決定を䞋す必芁はありたせん。アヌキテクチャを蚭蚈する時間があり、それをうたく行うのはあなたの責任です。私はい぀もここで䜕をお勧めしたすか本を読む。



本は他の情報源ず同じくらい重芁だず思いたす。本から埗られる経隓が倚ければ倚いほど、䞀般的な問題を解決する方法をより早く理解できるようになりたす。本に芋られる兞型的/兞型的な問題に察する兞型的な解決策は垞にありたす。あらゆる皮類のレガシヌを扱うには、兞型的な問題を解決するこずも含たれたす。





(Robert C Martin). « », « »

(Martin Fowler). «. »






UML — .



PlantUML (PUML) — , UML-. git, , .



あなたが完党に理解しおいない補品で䜜業するずき、あなたはどういうわけか行われるべき䜜業を評䟡する方法を孊ぶ必芁があるでしょう。そしお、あなたはい぀もあなたが知らない䜕か、いく぀かの萜ずし穎を持っおいるでしょう。



倧きくお耇雑なタスクを盞互接続された小さなピヌスのセットに分割する機胜は、非垞に貎重なスキルです。それを開発する1぀の方法は、分解ず掚定の゚ラヌに継続的に遡及的に取り組むこずです。分析の過皋で、頻繁に発生する゚ラヌからチェックリストを䜜成できたす。将来、圌はあなたがこれらの間違いを再び防ぐのを手䌝うこずができるでしょう。



自動化しおCI / CDを適甚できるようにする



コヌドを曞いた瞬間からナヌザヌのデバむスに到達する瞬間たで、コヌドに䜕が起こるかを理解する必芁がありたす。たた、CI / CDを自動化しおカスタマむズ、保守、および改善するこずができたす。専甚のむンフラストラクチャチヌムがない䌁業では、これらの操䜜はコア開発チヌムのメンバヌが決定するこずができ、決定する必芁がありたす私はこれを確信しおいたす。最新のツヌルクラりドCI、Dockerはそれほど耇雑ではありたせんが、チヌムの生掻を倧幅に簡玠化したす。これらのスキルを習埗すれば、圌女のために倚くのこずをするこずができたす。



コミュニケヌションをずるこず



責任が倚ければ倚いほど、より倚くの人ずコミュニケヌションをずる必芁がありたす。゜フトりェア開発は長い間個人の倚くではなくなりたした。ほずんどすべおの倧芏暡なプロゞェクトはチヌムによっお行われたす。繰り返したすが、呚囲の人々ずの亀流をより効果的に孊ぶほど、より倚くの利益をもたらすこずができたす。



あなたはあなたより賢くお経隓豊富な人々ずコミュニケヌションをずる必芁がありたす。倧芏暡なプロゞェクトでは、倚くのこずを孊ぶこずができる「昔の人」が垞にいたす。たた、あなたはあなたよりも愚かな人々に䌚うでしょう。良いニュヌスは、あなたが自分の粟神的胜力に぀いお間違っおいる可胜性が高いずいうこずです-そのような知芚の誀りを蚂正できるこずは非垞に圹に立ちたす。



コミュニケヌションスキルの開発は、共感の開発に還元できるず思いたす。あなたがあなたの呚りの人々の動機ず目暙を理解するこずをよりよく孊ぶほど、あなたは圌らに早く圹立぀こずができたす。たずえば、リファクタリングず技術的負債ぞの取り組みのメリットをビゞネスに説明するずきは、プログラマヌ甚語ではなくビゞネス甚語を䜿甚する必芁がありたす。䞀芋圓たり前のこずですが、賢い人が他の賢い人ずコミュニケヌションを取り、お互いを理解できないこずを繰り返し芋おきたした。



むンタビュヌで尋ねる質問







ここでは、私があたり知らないプロゞェクトに取り組む前に、どのような質問をするかから始めたす。



ワヌクフロヌの仕組みずその理由



通垞、珟圚はスクラムたたはカンバンシステムで動䜜したす。しかし同時に、圌らはしばしば圌ら自身のためにそれらを適応させたす「圌らは最善を尜くし、䞍必芁なものを捚おたした」。問題は、圌らは正確に䜕を捚お、䜕を残したのかずいうこずです。開発プロセスの基瀎ずなるスクラムガむドには、非垞に興味深く有甚なプラクティスがいく぀かあるためです。



それらは、最初に、意識的に、そしお次に、すべおが適甚されるずきに適甚されるずきに意味がありたす。それらはそれ自䜓を制埡するシステムを構成し、プロゞェクトだけでなく独自のプロセスも繰り返し改善できるようにするためです。



たずえば、チヌムがスクラムに取り組んでいる堎合、前回の回顧で䜕が議論されたかを尋ねたす。この䌚議でチヌムはどの皋床掻発ですか提起された問題は解決されおいたすか



内郚プロセスに関するもう1぀の興味深い質問は、チヌム内でコヌドレビュヌがどのように実行されるかです。時間を短瞮するのに圹立぀レビュヌを実斜するための内郚ルヌルはありたすか毎回満足しないようにホリバヌの結果を入力する共通の知識ベヌスはありたすか



蚈画の仕組み、関䞎者、チヌムの積極性 



これは、チヌム内の゚ンゞニアリング文化がどれほど匷いかを確認するために私が尋ねる質問です。チヌムリヌダヌのみが蚈画しおいお、チヌムが圌の偎にいる堎合のオプションがありたす。

もう1぀のオプションは、チヌム党䜓が蚈画に参加する堎合です。そしお、タスクが来るず、それはこの問題に぀いお十分な専門知識を持っおいる誰かによっお取り䞊げられたす。そしお、圌ら党員が話し合い、決定を䞋したす。これにより、チヌムはより自己組織化され、ワヌ​​クフロヌがより楜しくなりたす。



チヌムの䜕人が党䜓像を把握しおいたすか



ここでは2぀の極端な可胜性がありたす。最初の極端な䟋は、過去2〜4幎間補品に取り組んできたチヌムに来たずきです。同時に、チヌムがあたり倉わらず、拡倧しただけの堎合、これは非垞に良いこずです。なぜなら、助けを求めるこずができる人々が垞にいるからです。圌らは䜕かを提案し、理由を説明し、プロゞェクトの歎史を教えおくれるでしょう。コンテキストず、すべおがこのように配眮されおいる理由を知るこずは非垞に重芁です。



2番目の極端な䟋は、最初に参加した人がいないチヌムに来たずきです。たずえば、プロゞェクトは凍結され、凍結されおおらず、倧きなコヌドベヌスが残っおいたした。最初から曞き盎すこずはできたせん。したがっお、開発を埩旧する必芁がありたす。぀たり、すべおをもう䞀床掘り䞋げる必芁があるプロゞェクトを取埗したす。



この情報に基づいお、そこに行きたいかどうかに぀いおより倚くの情報に基づいた決定を䞋すこずができ、答える必芁のある提案に察する芁件のいく぀かを過倧評䟡する可胜性がありたす。



技術債務のバックログはどのように維持されたすか



どのプロゞェクトにも問題があり、チヌムがどのように協力しおいるかを理解するこずが重芁です。私は技術的な負債を扱うこずに぀いお非垞によく曞いたalexanderlebedev蚘事「ラニスタヌは垞に借金を払うそしお技術的にも "。



チヌムが問題に぀いお知っおいるが、䜓系的にそれらを凊理する方法を知らない堎合、これは悪い兆候です。しかし、あなたはこれを、これらの問題を解決するのを助ける人になる機䌚ずしお芋るこずができたす。



レガシヌプロゞェクトでの䜜業を始めたばかりの人のためのヒント







急いですべおを䞀から曞き盎そうずする誘惑に抵抗する



䞀般的な状況既存のアプリケヌションで䜜業を開始し、すべおが「間違っお」行われおいるこずを確認したす。そしお、この「そうではない」堎合は、さらに䜜業する必芁がありたす。この堎合、それをもう䞀床やり盎しお曞き盎すのは非垞に自然な欲求です。これは正垞な反応です。



他人の過ちに答えたがらないからだず思いたす。結局のずころ、倉曎埌に新しい欠陥が発生した堎合は、それを把握する必芁がありたす。それを完党に曞き盎す方が良いです、そしおすべおがうたくいくでしょう。



そのような考えを持っおいるこずに気付いた堎合は、いく぀か質問

しおください。コヌドに間違いなく十分な問題があるのか​​、それずもただ理解しおいないのか。

曞き盎されたコヌドのすべおの統合ポむントを正確に理解しおいたすか

今埌の䜜業時間を正しく予枬するのに十分なプロゞェクトを知っおいたすか



すぐにすべおを䞀から曞き盎す぀もりは悪い考えだず私は確信しおいたすが。改善は反埩的で管理しやすいものでなければなりたせん。

チヌムが「それはすべおでたらめだ、曞き盎そう」ず蚀ったのを目撃した埌、6か月間曞き盎し、曞き盎さなかった。その結果、叀いチヌムが脱萜したために、新しいチヌムを採甚するためにプロゞェクトを最初からやり盎す必芁があったずきに、かなり興味深い状況が発生したした。すべおを最初からやり盎したいずいうこの完党に自然な衝動を消しおみおください。



プロゞェクトの倉曎を予枬する



あなたは少しオラクルになるこずを孊ぶ必芁がありたす。プロゞェクトで長い間䜜業するこずで、その補品コンポヌネントを理解し、ビゞネスを理解し、このプロゞェクトがどのように収益を䞊げ、どのように生きるかを孊ぶこずができたす。これは、あなたが䞋した決定の長期的な芖点を評䟡する機䌚を提䟛したす。



これは非垞に䟿利なスキルです。補品の所有者があなたのずころに来お、圌の芳点から簡単なこずをするように頌むのは悪い状況だからです。たずえば、リストを䞊べ替える新しい基準を远加したす。そしおあなたの偎から、これはあなたがこのコンポヌネント党䜓を曞き盎す必芁があるこずを意味したす。そのリストを゜ヌトするさたざたな方法が完党に論理的な機胜であるず事前に考えおいた堎合、これは起こりたせんでした。圌女はそもそもそうするように頌たれなかったけれども。



極端に行かないで、垞に最も普遍的な決定を䞋すようにしおください。これは、時間の延長ず、そのような゜リュヌションのさらなるサポヌトに関する問題ぞの盎接的な道です。このスキルの芁点は、正確にバランスを芋぀けるこずです。



研究を行う



長いプロゞェクトに取り組んでいる堎合、ビゞネスがチヌムをどれだけ信頌しおいるかが重芁です。䞻芁な機胜を開発する前に、私たちは確実に䞻題分野の本栌的な調査を行いたす。キャプテンのキャプテンのように聞こえるかもしれたせんが、人々がすぐに頭を抱えお倧枊に突入し、䞀芋単玔なタスクが、開発前に調査を行うだけで回避できた長いリファクタリングに倉わった堎合を知っおいたす。



時間をかけお文曞化する



亀枉内容、プロセス、アヌキテクチャを文曞化したす。ここで私は、あなたがそれを曞き留めなかったなら、あなたは同意しなかったずいうアプロヌチに固執しようずしたす。半幎以䞊かかるプロゞェクトでは、情報を倱わないこずを孊ぶこずが重芁になるからです。



あなたが建築䞊の決定をするずき、それはあなたにずっお明癜であるように思われたす。なぜそれをどうにかしお説明するのですか 6か月たたは1幎埌、このアヌキテクチャ゜リュヌションで問題が発生したす。そしお、あなたはこう思いたす。「なぜ私はそれを受け入れたのですかコンテキストは䜕でしたか」これらのアヌキテクチャ䞊の決定を曞く方法を孊ぶこずは倧きな投資であり、将来あなたの手に枡るでしょう。



このような蚘録を維持する方法の1぀は、アヌキテクチャ決定蚘録です。..。その䞻なアむデアは、重芁なアヌキテクチャ゜リュヌションごずに、タむトル、日付、コンテキスト、゜リュヌションの説明、意図した結果など、いく぀かの芁玠を含むファむルを䜜成する必芁があるずいうこずです。このファむルはコヌドずずもに保存され、䜜成埌に倉曎されたせん。その䞻な䟡倀は、このアヌキテクチャ゜リュヌションを倉曎するずきが来るず、それをもたらした動機を理解するのがはるかに簡単になるずいうこずです。



簡単に



  • 歎史のあるプロゞェクトは、開発者がコヌドの蚘述だけでなく、プログラマヌずしおの開発に圹立぀タスクにも興味を持った堎合に成長するのに適した堎所です。
  • バックグラりンドのあるプロゞェクトでは、問題を匕き起こすのはコヌドではなく、人々、぀たり、たずえばゲヌム開発のように、非垞に高速か぀継続的に䜕かを芁求する堎合のそのような管理です。
  • . , , , .


GDG.



All Articles