Ойлгохгүй зүйлээ хөгжүүлэхийг бүү зөвшөөр

Ойлгохгүй зүйлээ хөгжүүлэхийг бүү зөвшөөр

2018 оны эхнээс би багийн ахлах/дарга/тэргүүлэх хөгжүүлэгчийн албан тушаалыг хашиж байна - үүнийг хүссэнээр нь нэрлэ, гэхдээ гол зүйл бол би модулиудын аль нэгийг болон ажилладаг бүх хөгжүүлэгчдэд бүрэн хариуцлага хүлээдэг. үүндээр. Энэ байр суурь нь надад илүү олон төсөл хөтөлбөрт оролцож, шийдвэр гаргахад илүү идэвхтэй оролцож байгаа тул хөгжлийн үйл явцыг шинэ өнцгөөс харах боломжийг олгож байна. Ойлгомжийн хэмжүүр код, хэрэглээнд ямар их нөлөөлж байгааг энэ хоёр зүйлийн ачаар гэнэт мэдэрсэн юм.

Миний хэлэхийг хүсч буй зүйл бол кодын чанар (мөн эцсийн бүтээгдэхүүн) нь кодыг боловсруулж, бичиж байгаа хүмүүс юу хийж байгаагаа хэр мэддэгтэй нягт холбоотой байдаг.

Та яг одоо “Баярлалаа, кап. Мэдээжийн хэрэг, юу бичиж байгаагаа ерөнхийд нь ойлгоход таатай байх болно. Үгүй бол та дур зоргоороо товчлуур дарахын тулд хэсэг сармагчин хөлсөлж, зүгээр орхиж болно." Мөн та туйлын зөв. Үүний дагуу та юу хийж байгаа талаар ерөнхий ойлголттой байх шаардлагатай гэдгийг ойлгож байна гэж би хүлээн зөвшөөрч байна. Үүнийг ойлголтын тэг түвшин гэж нэрлэж болох бөгөөд бид үүнийг нарийвчлан шинжлэхгүй. Та яг юуг ойлгох хэрэгтэй, энэ нь таны өдөр бүр гаргадаг шийдвэрт хэрхэн нөлөөлж байгааг бид нарийвчлан авч үзэх болно. Хэрэв би эдгээр зүйлсийг урьдчилан мэдэж байсан бол энэ нь надад маш их дэмий цаг хугацаа, эргэлзээтэй кодыг хэмнэх байсан.

Хэдийгээр та доороос ганц мөр код харахгүй ч энд хэлсэн бүхэн өндөр чанартай, ойлгомжтой код бичихэд маш чухал гэдэгт би итгэдэг.

Эхний түвшний ойлголт: Яагаад ажиллахгүй байна вэ?

Хөгжүүлэгчид ихэвчлэн карьерынхаа эхэнд, заримдаа бусдын тусламжгүйгээр ийм түвшинд хүрдэг - миний туршлагаас харахад. Та алдааны тайлан хүлээн авсан гэж төсөөлөөд үз дээ: програмын зарим функц ажиллахгүй байна, үүнийг засах шаардлагатай байна. Та яаж цаашаа явах вэ?

Стандарт схем дараах байдалтай байна.

  1. Асуудлыг үүсгэж буй кодын хэсгийг олоорой (үүнийг хэрхэн хийх нь тусдаа сэдэв, би үүнийг хуучин кодын тухай номондоо тусгасан)
  2. Энэ хэсэгчилсэн хэсэгт өөрчлөлт оруулна уу
  3. Алдаа зассан, регрессийн алдаа гараагүй эсэхийг шалгаарай

Одоо хоёр дахь цэг дээр анхаарлаа хандуулцгаая - кодод өөрчлөлт оруулах. Энэ үйл явцад хоёр хандлага бий. Эхнийх нь одоогийн кодонд яг юу болж байгааг судалж, алдааг олж, засах явдал юм. Хоёрдугаарт: мэдрэмжээр шилжих - нөхцөлт мэдэгдэл эсвэл гогцоонд +1 нэмэх, хэлэх, функц нь хүссэн хувилбараар ажиллаж байгаа эсэхийг харах, дараа нь өөр зүйл туршиж үзэх гэх мэт хязгааргүй үргэлжлэх болно.

Эхний арга нь зөв юм. Стив МакКоннелл "Code Complete" номондоо тайлбарласнаар (дашрамд хэлэхэд би үүнийг маш их зөвлөж байна) бид кодонд ямар нэг зүйлийг өөрчлөх бүрт энэ нь програмд ​​хэрхэн нөлөөлөхийг итгэлтэйгээр таамаглах боломжтой байх ёстой. Би санах ойгоос иш татаж байна, гэхдээ алдаа засах нь таны бодож байсан шиг ажиллахгүй бол та маш их сандарч, үйл ажиллагааныхаа төлөвлөгөөг бүхэлд нь асуух хэрэгтэй.

Хэлсэн зүйлийг нэгтгэн дүгнэхийн тулд кодын чанарыг муутгахгүй сайн алдаа засахын тулд кодын бүх бүтэц, тодорхой асуудлын эх сурвалжийг хоёуланг нь ойлгох хэрэгтэй.

Хоёр дахь түвшний ойлголт: Энэ яагаад ажилладаг вэ?

Энэ түвшинг өмнөхөөсөө хамаагүй бага ойлгодог. Би шинэхэн хөгжүүлэгч байхдаа даргынхаа ачаар үүнийг олж мэдсэн бөгөөд дараа нь шинээр ирсэн хүмүүст асуудлын мөн чанарыг олон удаа тайлбарласан.

Энэ удаад та хоёр алдааны мэдээг нэг дор хүлээн авлаа гэж төсөөлье: эхнийх нь А хувилбарын тухай, хоёр дахь нь В хувилбарын тухай. Хоёр хувилбарт ямар нэг зүйл буруу болсон. Үүний дагуу та эхлээд эхний алдааг арилгах хэрэгтэй. XNUMX-р түвшний ойлголтыг бий болгохын тулд бидний боловсруулсан зарчмуудыг ашиглан та асуудалтай холбоотой кодыг гүнзгий судалж, энэ нь програм яагаад А хувилбарт байгаа шиг ажиллахад хүргэж байгааг олж мэдээд, таны хүссэн үр дүнд хүрэх боломжтой тохируулга хийнэ. . Бүх зүйл сайхан болж байна.

Дараа нь та В хувилбар руу шилжинэ. Та алдаа гаргах гэж оролдсон хувилбарыг давтаарай, гэхдээ гайхах болно! - Одоо бүх зүйл байх ёстой шигээ ажиллаж байна. Таамаглалаа баталгаажуулахын тулд та алдаа А дээр ажиллаж байхдаа хийсэн өөрчлөлтөө буцаах ба B алдаа буцаж ирнэ. Таны алдаа засвар хоёр асуудлыг шийдсэн. Азтай!

Та үүнийг огт тооцоогүй. Та А хувилбарын алдааг засах арга бодож олоод байгаа бөгөөд энэ нь яагаад В хувилбарт тохирсныг мэдэхгүй байна. Энэ үе шатанд хоёуланг нь амжилттай гүйцэтгэсэн гэж бодох нь маш их сонирхол татаж байна. Энэ нь нэлээд логик юм: гол зорилго нь алдааг арилгах явдал байсан, тийм үү? Гэхдээ ажил хараахан дуусаагүй байна: таны үйлдлүүд яагаад В хувилбарт алдааг зассаныг олж мэдэх хэрэгтэй. Яагаад? Учир нь энэ нь буруу зарчмууд дээр ажиллаж магадгүй бөгөөд дараа нь та өөр гарц хайх хэрэгтэй болно. Ийм тохиолдлын хэд хэдэн жишээ энд байна:

  • Шийдэл нь бүх хүчин зүйлийг харгалзан үзсэн В алдаанд тохируулагдаагүй тул та өөрийн мэдэлгүй C функц эвдэрсэн байж магадгүй юм.
  • Үүнтэй ижил функцтэй холбоотой гуравдагч алдаа хаа нэгтээ нуугдаж байж магадгүй бөгөөд таны алдааг засах нь В хувилбарт системийн зөв ажиллах эсэхээс хамаарна. Одоо бүх зүйл сайхан харагдаж байна, гэхдээ нэг л өдөр энэ гурав дахь алдааг анзаарч, засах болно. Дараа нь В хувилбарт алдаа дахин гарах бөгөөд зөвхөн тэнд байвал сайн.

Энэ бүхэн кодонд эмх замбараагүй байдлыг нэмж, хэзээ нэгэн цагт таны толгой дээр унах болно - магадгүй хамгийн тохиромжгүй мөчид. Бүх зүйл яагаад бүтэж байгааг ойлгоход цаг зарцуулахын тулд та өөрийн хүсэл зоригоо цуглуулах хэрэгтэй болно, гэхдээ энэ нь үнэ цэнэтэй юм.

Ойлголтын гурав дахь түвшин: Энэ яагаад ажилладаг вэ?

Миний сүүлийн үеийн ойлголт яг энэ түвшинтэй холбоотой бөгөөд хэрэв би энэ санааг өмнө нь гаргасан бол надад хамгийн их ашиг тусыг өгөх байсан байх.

Үүнийг илүү ойлгомжтой болгохын тулд нэг жишээг харцгаая: таны модулийг X функцтэй нийцүүлэх шаардлагатай. Та X функцийг сайн мэдэхгүй ч үүнтэй нийцтэй байхын тулд F хүрээг ашиглах хэрэгтэй гэж танд хэлсэн. X-тэй нэгдсэн модулиуд түүнтэй яг таарч ажилладаг.

Таны код амьдралынхаа эхний өдрөөс хойш F хүрээтэй огт холбогдоогүй тул үүнийг хэрэгжүүлэх нь тийм ч амар биш байх болно. Энэ нь модулийн зарим хэсэгт ноцтой үр дагаварт хүргэх болно. Гэсэн хэдий ч та өөрийгөө хөгжилд зориулдаг: код бичих, туршилт хийх, туршилтын хувилбаруудыг гаргах, санал хүсэлт авах, регрессийн алдааг засах, урьдчилан таамаглаагүй хүндрэлийг илрүүлэх, анх тохиролцсон хугацааг биелүүлэхгүй байх, нэмэлт код бичих, туршилт хийх, санал хүсэлт хүлээн авах, регрессийн алдааг засах - энэ бүхэн F хүрээг хэрэгжүүлэхийн тулд.

Хэзээ нэгэн цагт та F framework нь танд X функцтэй огт нийцэхгүй байж магадгүй гэдгийг гэнэт ухаарч, эсвэл хэн нэгнээс сонссон байж магадгүй. Магадгүй энэ бүх цаг хугацаа, хүчин чармайлт үүнд буруу зарцуулагдсан байж магадгүй юм.

Миний хариуцаж байсан төсөл дээр ажиллаж байхад үүнтэй төстэй зүйл тохиолдсон. Яагаад ийм зүйл болсон бэ? Учир нь би X функц гэж юу болох, F фреймворктой хэрхэн холбогдох талаар бага ойлголттой байсан. Би юу хийх ёстой байсан бэ? Бусад модулиудад зориулж хийсэн зүйлийг зүгээр л давтах эсвэл X-ийн хийх ёстой функц гэж тэдний үгэнд орохын оронд төлөвлөсөн арга хэмжээ нь хүссэн үр дүндээ хэрхэн хүргэдгийг тодорхой тайлбарлаж өгөхийг хөгжүүлэх ажлыг даалгасан хүнээс хүс.

Энэ төслийн туршлага надад яагаад тодорхой зүйлийг биднээс шаардаж байгаа талаар тодорхой ойлголттой болтол хөгжлийн үйл явцыг эхлүүлэхээс татгалзахыг надад заасан. Шууд татгалз. Даалгавраа хүлээж авахдаа эхний түлхэц бол цагийг дэмий үрэхгүйн тулд үүнийг даруй авах явдал юм. Гэхдээ "бүх нарийн ширийнийг нь олж мэдэх хүртэл төслийг царцаах" бодлого нь дэмий цаг хугацааг багасгаж чадна.

Тэд таныг дарамталж, ажил эхлүүлэхийг оролдсон ч гэсэн та үүний шалтгааныг ойлгохгүй байгаа ч эсэргүүц. Эхлээд яагаад танд ийм даалгавар өгч байгааг олж мэдээд, энэ нь зорилгодоо хүрэх зөв зам мөн эсэхийг шийд. Би энэ бүхнийг хэцүү аргаар сурах ёстой байсан - миний үлгэр жишээ үүнийг уншсан хүмүүсийн амьдралыг хөнгөвчлөх болно гэж найдаж байна.

Ойлголтын дөрөв дэх түвшин: ???

Програмчлалд суралцах зүйл үргэлж байдаг бөгөөд би ойлгох сэдвийн гадаргууг л маажиж чадсан гэдэгт би итгэдэг. Олон жилийн турш кодтой ажиллахдаа өөр ямар түвшний ойлголтыг олж мэдсэн бэ? Код болон хэрэглээний чанарт эерэг нөлөө үзүүлсэн ямар шийдвэр гаргасан бэ? Ямар шийдвэрүүд буруу болж, танд үнэ цэнэтэй сургамж өгсөн бэ? Сэтгэгдэл хэсэгт туршлагаа хуваалцаарай.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх