Түшүнбөгөн нерсени иштеп чыгууга макул болбоңуз

Түшүнбөгөн нерсени иштеп чыгууга макул болбоңуз

2018-жылдын башынан бери мен командада жетектөөчү/жетекчи/жетекчи иштеп чыгуучунун позициясын ээлеп келем - аны өзүңүз каалагандай атаңыз, бирок мен модулдардын бири үчүн жана иштеген бардык иштеп чыгуучулар үчүн толугу менен жооп берем. ал боюнча. Бул позиция мага өнүгүү процессине жаңы көз карашты берет, анткени мен көбүрөөк долбоорлорго катышып, чечим кабыл алууга активдүүрөөк катышам. Жакында, ушул эки нерсенин аркасында, мен күтүлбөгөн жерден түшүнүү чарасы кодго жана тиркемеге канчалык таасир этээрин түшүндүм.

Мен айткым келген нерсе, коддун сапаты (жана акыркы продукт) кодду иштеп чыгуучу жана жазып жаткан адамдардын эмне кылып жатканын канчалык билиши менен тыгыз байланыштуу.

Сиз азыр ойлонуп жаткандырсыз: "Рахмат, кап. Албетте, жалпы эле жазып жатканыңызды түшүнсөңүз жакшы болмок. Болбосо, сиз маймылдардын тобун жалдап, каалаган баскычтарды басып, ошол бойдон калтырсаңыз болот». Жана сиз таптакыр туура. Демек, мен сиз эмне кылып жатканыңыз жөнүндө жалпы түшүнүккө ээ болуу зарыл экенин түшүнгөнүңүздү кадимкидей кабыл алам. Муну түшүнүүнүн нөлдүк деңгээли деп атоого болот, биз аны майда-чүйдөсүнө чейин талдабайбыз. Биз так эмнени түшүнүшүңүз керек экенин жана бул күн сайын кабыл алган чечимдериңизге кандай таасир этээрин майда-чүйдөсүнө чейин карап чыгабыз. Эгер мен бул нерселерди алдын ала билген болсом, анда бул мага көп убакытты жана шектүү кодду сактап калмак.

Төмөндө сиз коддун бир да сабын көрбөсөңүз да, бул жерде айтылгандардын баары жогорку сапаттагы, экспрессивдүү код жазуу үчүн чоң мааниге ээ деп эсептейм.

Түшүнүүнүн биринчи деңгээли: Эмне үчүн ал иштебейт?

Иштеп чыгуучулар, адатта, бул деңгээлге карьерасынын башында, кээде башкалардын жардамысыз эле жетишет - жок дегенде менин тажрыйбамда. Мүчүлүштүк тууралуу кабар алганыңызды элестетиңиз: тиркемедеги кээ бир функция иштебей жатат, аны оңдоо керек. Кантип улантасың?

Стандарттык схема төмөнкүдөй көрүнөт:

  1. Көйгөйдү жаратып жаткан коддун бөлүгүн табыңыз (бул өзүнчө тема, мен аны эски код жөнүндө китебимде чагылдырам)
  2. Бул үзүндүгө өзгөртүүлөрдү киргизиңиз
  3. Мүчүлүштүк оңдолгонуна жана эч кандай регрессия каталары болбогонуна ынаныңыз

Эми экинчи пунктка токтололу – кодго өзгөртүүлөрдү киргизүү. Бул процесстин эки жолу бар. Биринчиси, учурдагы коддо так эмне болуп жатканын изилдеп, катаны аныктоо жана аны оңдоо. Экинчиси: сезүү боюнча жылдыруу - шарттуу билдирүүгө же циклге +1 кошуңуз, айтыңыз, функция каалаган сценарийде иштейби же жокпу, көрүңүз, андан кийин дагы бир нерсени байкап көрүңүз, жана башкалар.

Биринчи мамиле туура. Стив МакКоннелл өзүнүн Code Complete китебинде түшүндүргөндөй (мен муну абдан сунуштайм), биз коддогу бир нерсени өзгөрткөн сайын, анын тиркемеге кандай таасир этээрин ишенимдүү айта алышыбыз керек. Мен эс-тутумдан цитата келтирип жатам, бирок мүчүлүштүктөрдү оңдоо сиз күткөндөй иштебесе, сиз абдан кооптонушуңуз керек жана бүт иш-аракеттер планыңызга шек келтиришиңиз керек.

Айтылгандарды жыйынтыктоо үчүн, коддун сапатын төмөндөтпөгөн мүчүлүштүктөрдү оңдоп-түзөө үчүн коддун бүт структурасын да, конкреттүү көйгөйдүн булагын да түшүнүү керек.

Түшүнүүнүн экинчи деңгээли: Эмне үчүн ал иштейт?

Бул деңгээл мурункуга караганда интуитивдик жактан азыраак түшүнүлөт. Мен жаңыдан иштеп жүргөн кезимде аны жетекчисимдин аркасы менен үйрөнүп, жаңы келгендерге иштин маңызын кайра-кайра түшүндүрдүм.

Бул жолу, келгиле, сиз бир эле учурда эки ката отчетун алдыңыз деп элестетип көрөлү: биринчиси А сценарийи жөнүндө, экинчиси Б сценарийи жөнүндө. Эки сценарийде тең туура эмес бир нерсе болот. Демек, сиз биринчи катаны чечесиз. 1-деңгээлди түшүнүү үчүн биз иштеп чыккан принциптерди колдонуу менен, сиз көйгөйгө тиешелүү кодду терең изилдейсиз, эмне үчүн ал тиркеменин А сценарийиндегидей жүрүш-турушуна себепкер болуп жатканын түшүнөсүз жана сиз каалаган натыйжаны берген акылга сыярлык оңдоолорду киргизесиз. . Баары сонун жүрүп жатат.

Андан кийин сиз B сценарийине өтөсүз. Сиз ката кетирүү үчүн сценарийди кайталайсыз, бирок таң калыштуу! — Азыр бардыгы ка-жети боюнча иштеп жатат. Божомолуңузду ырастоо үчүн, A мүчүлүштүктөрү менен иштөөдө киргизген өзгөртүүлөрүңүздү жокко чыгарасыз жана B мүчүлүштүгү кайра кайтып келет. Мүчүлүштүктөрдү оңдоо эки көйгөйдү тең чечти. Lucky!

Сиз муну такыр эсептеген жоксуз. Сиз А сценарийиндеги катаны оңдоонун жолун ойлоп таптыңыз жана ал эмне үчүн В сценарийи үчүн иштегенин билбейсиз. Бул этапта эки тапшырма тең ийгиликтүү аяктады деп ойлоо абдан кызык. Бул абдан логикалуу: кеп каталарды жоюу эле, туурабы? Бирок иш али бүтө элек: эмне үчүн сиздин аракеттериңиз В сценарийиндеги катаны оңдогондугун түшүнүшүңүз керек. Эмне үчүн? Анткени ал туура эмес принциптер менен иштеп жаткандыр, анан башка жолду издөөгө туура келет. Мына ушундай учурлардын бир нече мисалдары:

  • Чечим бардык факторлорду эске алуу менен B катасына ылайыкташтырылган эмес болгондуктан, сиз билбестен С функциясын бузуп коюшуңуз мүмкүн.
  • Мүмкүн, ошол эле функцияга байланыштуу үчүнчү мүчүлүштүк дагы бир жерде жашырылган болушу мүмкүн жана сиздин мүчүлүштүктөрдү оңдооңуз B сценарийинде системанын туура иштеши үчүн көз каранды. Азыр баары жакшы окшойт, бирок бир күнү бул үчүнчү мүчүлүштүк байкалып, оңдолот. Андан кийин В сценарийинде ката кайра пайда болот жана ал жерде болгону жакшы.

Мунун баары кодго баш аламандыкты кошот жана качандыр бир күнү башыңызга түшөт - эң ылайыксыз учурда. Эмне үчүн баары жакшы болуп жатканын түшүнүүгө убакыт бөлүү үчүн өзүңүздүн эркиңизди чогултушуңуз керек, бирок бул татыктуу.

Түшүнүүнүн үчүнчү деңгээли: Эмне үчүн ал иштейт?

Менин акыркы түшүнүгүм дал ушул деңгээлге тиешелүү жана эгер мен бул идеяга мурдараак келсем, мага эң чоң пайданы алмак.

Чтобы было понятнее, разберем на примере: ваш модуль нужно сделать совместимым с функцией X. Вы не особенно близко знакомы с функцией X, но вам сказали, что для совместимости с ней нужно использовать фреймворк F. Другие модули, которые интегрируются с X, работают именно ал менен.

Сиздин кодуңуз өмүрүнүн биринчи күнүнөн тартып F алкактары менен такыр байланышта болгон эмес, андыктан аны ишке ашыруу анчалык деле оңой болбойт. Бул модулдун кээ бир бөлүктөрү үчүн олуттуу кесепеттерге алып келет. Бирок, сиз өзүңүздү өнүгүүгө ыргытасыз: сиз жумалап код жазып, тестирлөө, пилоттук версияларды чыгаруу, пикирлерди алуу, регрессиялык каталарды оңдоо, күтүлбөгөн кыйынчылыктарды табуу, башында макулдашылган мөөнөттөрдү аткарбоо, дагы бир нече код жазуу, тестирлөө, пикир алмашуу, регрессиялык каталарды оңдоо - мунун баары F алкагын ишке ашыруу үчүн.

Жана кайсы бир учурда сиз күтүлбөгөн жерден түшүнөсүз - же балким, кимдир бирөөдөн угасыз - балким, F фреймви сизге X өзгөчөлүгү менен шайкештикти такыр бербейт.

Бир жолу мен жооптуу болгон долбоордун үстүндө иштеп жүргөндө ушундай окуя болгон. Эмне үчүн мындай болду? Анткени мен X кандай функция экенин жана анын F алкагында кандай байланышы бар экенин түшүнгөн эмесмин. Эмне кылышым керек эле? Өнүктүрүү тапшырмасын тапшырган адамдан башка модулдар үчүн жасалганды жөн эле кайталап же X өзгөчөлүгү ушуну жасашы керек деген сөздү кабыл алуунун ордуна, пландалган иш-аракет кандай натыйжага алып келерин так түшүндүрүп берүүсүн сураныңыз.

Бул долбоордун тажрыйбасы мени эмне үчүн бизден айрым нерселерди талап кылып жатышканын так түшүнгөнгө чейин иштеп чыгуу процессин баштоодон баш тартууга үйрөттү. Ачык эле баш тартуу. Тапшырма алганыңызда биринчи импульс - убакытты текке кетирбөө үчүн аны дароо колго алуу. Бирок "биз бардык майда-чүйдөсүнө чейин долбоорду тоңдуруу" саясаты масштабдуу буйруктар менен убакытты кыскарта алат.

Сизге кысым көрсөтүүгө, жумуш баштоого мажбурлоого аракет кылышса да, мунун жүйөсүн түшүнбөсөңүз да, каршы туруңуз. Биринчиден, эмне үчүн сизге мындай тапшырма берилип жатканын тактаңыз жана бул максатка жетүү туура жолбу деп чечиңиз. Мен мунун баарын оор жол менен үйрөнүшүм керек болчу - менин үлгүм муну окугандардын жашоосун жеңилдетет деп ишенем.

Түшүнүүнүн төртүнчү деңгээли: ???

Программалоодо үйрөнө турган ар дайым көп нерсе бар жана мен түшүнүү темасынын бетин гана тырмап алдым деп ойлойм. Код менен иштеген жылдар бою түшүнүүнүн дагы кандай деңгээлдерине ээ болдуңуз? Коддун жана колдонуунун сапатына оң таасирин тийгизген кандай чечимдерди кабыл алдыңыз? Кандай чечимдер туура эмес болуп чыкты жана сизге баалуу сабак болду? Комментарийлерде тажрыйбаңыз менен бөлүшүңүз.

Source: www.habr.com

Комментарий кошуу