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