Үз коды өстендә тырышып эшләүче яхшы программист аны, математик үзе шөгыльләнгән мәсьәләне башында тоткан кебек, үз акылында тота ала. Математиклар сорауларга, мәктәп балаларын өйрәткәнчә, кәгазьдә язып кына җавап бирмиләр. Алар күбрәк үз башларында эшли: алар мәсьәлә даирәсен шундый дәрәҗәдә яхшы аңларга тырышалар ки, сез үзегез үскән йорт хатирәләре буенча йөри алган кебек, алар да шул даирә буйлап җиңел йөри алалар. Иң яхшы очракларда программалаштыру да нәкъ шундый. Сез бөтен программаны башыгызда тотасыз һәм аны үз теләгегез буенча идарә итә аласыз.
Бу проект башында аеруча кыйммәтле, чөнки иң элек иң мөһиме — ни эшләгәнегезне үзгәртә алу. Мәсьәләне башка ысул белән чишү генә түгел, ә сез чишә торган мәсьәләнең үзен үзгәртү мөмкинлеге.
Сезнең кодыгыз — бу сез өйрәнә торган мәсьәләне аңлавыгыз. Димәк, кодыгыз башыгызда булганда гына сез мәсьәләне чынлап аңлыйсыз.
Программаны баш эченә урнаштыру җиңел түгел. Әгәр сез проектны берничә айга ташлап торсагыз, аңа кире кайткач, аны яңадан чынлап аңлау өчен берничә көн кирәк булырга мөмкин. Хәтта программа өстендә актив эшләгәндә дә, һәр эш көнен башлаганда аны башка йөкләп алуга ярты сәгать вакыт китә ала. Һәм бу — иң яхшы очракта. Гадәти офис шартларында эшләүче гади программистлар беркайчан да бу халәткә кермиләр. Яисә тагын да драматиграк әйтсәк, гадәти офис шартларында эшләүче гади программистлар үзләре чишә торган мәсьәләләрне беркайчан да чынлап аңламыйлар.
Хәтта иң яхшы программистлар да һәрвакыт үзләре эшләгән бөтен программаны башларына йөкләп бетерә алмый. Ләкин моңа ярдәм итә алырлык кайбер нәрсәләр бар:
Игътибарны бүлүче нәрсәләрдән сакланыгыз. Игътибарның читкә тайпылуы күп төрле эш өчен зарарлы, ләкин программалаштыру өчен аеруча начар, чөнки программистлар үзләре эшкәртә ала торган детальләрнең чигендә эшләүчән булалар.
Игътибар бүленүенең куркынычлыгы аның никадәр озак дәвам итүенә түгел, ә миегезне никадәр чуалтуына бәйле. Программист офистан чыгып, сэндвич алып килә ала һәм шул ук вакытта башындагы кодны югалтмый. Әмма ярамаган бүлдерү исә башыгыздагы бөтен нәрсәне 30 секунд эчендә сөртеп ташларга мөмкин.
Сәер булса да, алдан планлаштырылган бүлдерүләр планлаштырылмаганнарына караганда начаррак булырга мөмкин. Әгәр сез бер сәгатьтән җыелыш буласын белсәгез, сез хәтта катлаулы берәр эшкә керешмисез дә.
Озак вакытлы өзлексез аралыклар белән эшләгез. Һәрвакыт программа өстендә эш башлаганда билгеле бер чыгымнар кирәк булганлыктан, күп санлы кыска сессияләргә караганда берничә озак сессия белән эшләү нәтиҗәлерәк. Әлбәттә, арып, миегез эшләми башлаган мизгел җитәчәк. Бу кешедән кешегә төрлечә була. Мин өзлексез 36 сәгать буе код язган кешеләр турында ишеткәнем бар, ләкин минем иң күбе башкара алганым — 18 сәгать чамасы, ә иң яхшы эш нәтиҗәм 12 сәгатьтән артмаган кисәкләрдә була.
Оптималь вакыт — сез физик яктан чыдый алган чик түгел. Проектны өзеклекләргә бүлүнең чыгымнары гына түгел, өстенлекләре дә бар. Кайвакыт ял иткәннән соң мәсьәләгә кайткач, аңыгызның асты (зиһенегез) сезне көтеп торган әзер җавап калдырганын күрәсез.
Кыска һәм төгәл телләр кулланыгыз. Көчлерәк программалаштыру телләре программаларны кыскарак итә. Ә программистлар үз программалары турында ким дигәндә өлешчә аларны язу өчен кулланган телдә уйлыйлар кебек. Тел никадәр кыска һәм төгәл булса, программа шулкадәр кыскарак, һәм аны башка йөкләү һәм анда тоту шулкадәр җиңелрәк була.
Сез аска-өскә (bottom-up) программалаштыру дип аталган стиль кулланып, көчле телнең тәэсирен арттыра аласыз; анда сез программаларны берничә катлам итеп язасыз, түбәнге катламнар югарыдагылар өчен программалаштыру телләре ролен үти. Моны дөрес эшләсәгез, сезгә башыгызда иң өске катламны гына тотарга кирәк булачак.
Программагызны яңадан язуны дәвам итегез. Программаны яңадан язу еш кына чистарак дизайн бирә. Ләкин ул болай булмаган очракта да файдалы булыр иде: программаны яңадан язу өчен аны тулысынча аңларга кирәк, шуңа күрә аны башка йөкләүнең моннан да яхшырак ысулы юк.
Кабат укырлык код языгыз. Барлык программистлар да укырлык код язуның яхшы булуын белә. Ләкин иң мөһим укучы — сез үзегез. Аеруча башында; прототип — ул үзең белән үзең сөйләшү. Ә үзегез өчен язганда сезнең өстенлекләрегез башкача була. Башка кешеләр өчен язсагыз, кодны артык тыгыз итәргә теләмәскә мөмкинсез. Программаның кайбер өлешләрен, кереш дәреслектәге кебек, киңрәк җәеп язсагыз, уку иң җиңеле булырга мөмкин. Ләкин кодны башыгызга кабат җиңел йөкләр өчен язсагыз, кыскалыкны сайлау иң яхшысы булырга мөмкин.
Кечкенә төркемнәрдә эшләгез. Башыгызда программа белән эш иткәндә, карашыгыз сез хуҗа булган код чигендә тукталырга омтыла. Башка өлешләрне сез шулкадәр үк яхшы аңламыйсыз һәм, иң мөһиме, аларга карата иркен эш итә алмыйсыз. Шуңа күрә программистлар саны никадәр азрак булса, проект шулкадәр тирәнрәк үзгәрә ала. Әгәр нибары бер генә программист булса (башында еш кына шулай була), сез бөтен нәрсәне үз эченә алган төптән яңа дизайн ясый аласыз.
Бер үк код кисәген берничә кеше үзгәртмәсен. Башкаларның кодын беркайчан да үзегезнеке кебек үк яхшы аңламыйсыз. Аны никадәр җентекләп укысагыз да, сез аны бары тик укыдыгыз гына, язмадыгыз. Шуңа күрә, әгәр бер код кисәге берничә автор тарафыннан язылган булса, аларның берсе дә аны бердәнбер автор кебек үк яхшы аңламый.
Һәм, әлбәттә, сез башка кешеләр эшли торган нәрсәне имин рәвештә үзгәртә алмыйсыз. Мәсьәлә рөхсәт сорарга туры килүдә генә түгел. Сез үзегезгә мондый нәрсәләр турында уйларга да ирек бирмисез. Берничә авторы булган кодның дизайнын үзгәртү — законнар үзгәртү кебек; үзегез генә контрольдә тоткан кодның дизайнын үзгәртү — ике мәгънәле сурәтнең икенче аңлатмасын күрү кебек ул.
Әгәр сез проект өстендә берничә кешене эшләтергә теләсәгез, аны компонентларга бүлегез һәм һәрберсен бер кешегә бирегез.
Кечкенәдән башлагыз. Программа белән танышкан саен, аны башта тоту җиңелрәк була бара. Аларны тулысынча өйрәнеп чыкканыгызга ышангач, аерым өлешләргә «кара тартмалар» кебек карый башлый аласыз. Ләкин проект өстендә эш башлаганда, сез бөтен нәрсәне күрергә мәҗбүр. Әгәр сез артык зур мәсьәләдән башласагыз, бәлки аны беркайчан да тулысынча колачлый алмассыз. Шуңа күрә, сезгә зур, катлаулы программа язарга кирәк булса, эш башлауның иң яхшы ысулы — аңа спецификация язу түгел, ә мәсьәләнең бер өлешен чишүче прототип язу булырга мөмкин. Планлаштыруның өстенлекләре нинди генә булмасын, программаны башта тота алу өстенлекләре еш кына алардан өстен чыга. Программистларның бу сигез пунктның барысына да очраклы рәвештә туры килүләре таң калдыра. Кемнеңдер яңа проект өчен идеясе бар, ләкин ул рәсми рәвештә хупланмаганлыктан, ул аны эштән тыш вакытта эшләргә мәҗбүр була — бу исә нәтиҗәлерәк булып чыга, чөнки игътибарны бүлүче нәрсәләр юк. Яңа проектка булган дәрт белән рухланып, ул аның өстендә берьюлы күп сәгатьләр эшли. Башта бу бары тик эксперимент кына булганлыктан, «җитештерү» теле урынына ул гади генә «скрипт» телен куллана — ә ул чынлыкта күпкә көчлерәк. Ул программаны берничә тапкыр тулысынча яңадан яза; бу рәсми проект өчен акланмас иде, ләкин бу яратып башкарылган эш, һәм ул аның камил булуын тели. Һәм аны үзеннән башка беркем күрмәячәк булганлыктан, ул «үзем өчен язмалар» төреннән тыш бернинди аңлатмалар да (комментарийлар) калдырмый. Ул теләмичә генә кечкенә төркемдә эшли, чөнки я бу идея турында беркемгә дә әйтмәгән, яисә ул шулкадәр өметсез булып күренә ки, аның өстендә башка беркемгә дә эшләргә рөхсәт ителми. Төркем булган очракта да, алар бер үк кодны берничә кеше үзгәртә алмыйлар, чөнки ул моның өчен артык тиз үзгәрә. Һәм проект кечкенәдән башлана, чөнки идея башта чыннан да кечкенә була; аның бары тик үзе сынап карарга теләгән шәп кенә бер хәйләсе (hack) бар.
Рәсми рәвештә расланган проектларның сигез нәрсәнең барысын да дөрес эшләмәве тагын да ныграк гаҗәпләндерә. Чынлыкта, күпчелек оешмаларда программа тәэминаты ничек язылганына карасагыз, алар бөтен нәрсәне махсус рәвештә ялгыш эшләргә тырышалар кебек тоела. Ниндидер мәгънәдә, алар нәкъ шулай итәләр дә. Оешмалар барлыкка килгәннән бирле аларның билгеләүче сыйфатларының берсе — аерым кешеләргә бер-берсен алыштыра торган детальләр кебек карау. Бу сугыш алып бару кебек параллельләштерелә торган бурычлар өчен яхшы эшли. Тарихның күпчелек өлешендә яхшы өйрәтелгән профессиональ солдатлар армиясе, шәхси сугышчылар никадәр батыр булмасын, аларның армиясен җиңәр дип ышанырга мөмкин иде. Ләкин идеяләр табу бик параллельләштерелә торган нәрсә түгел. Ә программалар нәкъ менә шул: идеяләр.
Оешмаларның аерым даһига бәйле булу академиясен өнәмәве генә түгел, бу — тавтология. Бу оешма билгеләмәсенең бер өлеше — бәйле булмау. Ким дигәндә, оешма турындагы хәзерге төшенчәбез буенча шулай.
Бәлки, без аерым кешеләрнең тырышлыгын берләштергән, ләкин алардан бер-берсен алыштыруны таләп итмәгән яңа төрдәге оешма булдыра алыр идек. Бәхәсле булса да, базар — оешманың шундый бер формасы, гәрчә базарны деградацияләнгән очрак дип тасвирлау дөресрәк булыр, бәлки — оешу мөмкин булмаганда килеп чыга торган гадәти халәт буларак.
Иң яхшысы, без ниндидер бер «хәйлә» (hack) табарбыз, мәсәлән, оешманың программалаштыру өлешләрен калганнарыннан аерым эшләтү. Бәлки, зур компанияләр өчен иң кулай чишелеш — идеяләрне үз эчләрендә үстерергә тырышмау, ә аларны гади генә итеп сатып алудыр. Ләкин чишелеш нинди генә булмасын, беренче адым — проблема барлыгын аңлау. «Программа тәэминаты компаниясе» дигән гыйбарәнең үзендә каршылык бар. Бу ике сүз капма-каршы якларга тарта. Зур оешмадагы теләсә кайсы яхшы программист аның белән каршылыкка керәчәк, чөнки оешмалар программистлар омтылган нәрсәне булдырмау өчен корылган.
Шулай да яхшы программистлар күп нәрсәне эшләп чыгара алалар. Ләкин еш кына бу аларны эшкә алган оешмаларга каршы фактик баш күтәрүне таләп итә. Бәлки, программистларның үз-үзләрен тотышы алар башкарган эшнең таләпләреннән килеп чыкканын күбрәк кеше аңласа, бу ярдәм итәр. Аларның озак вакытлы марафоннар белән эшләп, башка бөтен бурычларын читкә куюлары, башта спецификация язу урынына туп-туры программалаштыруга чумулары һәм инде эшли торган кодны яңадан язулары җавапсызлыктан түгел. Аларның ялгыз эшләргә өстенлек бирүләре яки исәнләшер өчен ишектән башын тыккан кешеләргә мыгырдап караулары аларның дошманлыгыннан түгел. Бу карашка очраклы кебек тоелган күңелсез гадәтләр коллекциясенең бер генә аңлатмасы бар: программаны баш эчендә тоту көче.
Моны аңлау зур оешмаларга ярдәм итә аламы, юкмы — ләкин бу аларның көндәшләренә һичшиксез ярдәм итә ала. Зур компанияләрнең иң зәгыйфь ягы — алар аерым программистларга бөек эшләр башкарырга ирек бирмиләр. Шуңа күрә, сез кечкенә стартап булсагыз, аларга һөҗүм итәр урын нәкъ менә шул. Бер зур мидә чишелергә тиеш булган мәсьәләләргә алыныгыз.
Мондагы караламаларны укыганнары өчен Сэм Альтманга, Дэвид Гринспанга, Аарон Ибага, Джессика Ливингстонга, Роберт Морриска, Питер Норвигка, Лиза Рэндаллга, Эмметт Ширга, Сергей Царевга һәм Стивен Вольфрамга рәхмәт белдерәм.