(Бу эссе Гарвардтагы кунак лекциясенә нигезләнгән, аңа элек Нортистернда сөйләнгән чыгыш та кертелгән иде.)
Мин компьютер фәннәре буенча аспирантураны тәмамлагач, рәсем сәнгатен өйрәнү өчен сәнгать мәктәбенә укырга кердем. Компьютерлар белән кызыксынган кешенең рәсем сәнгате белән дә кызыксынуы бик күпләрне гаҗәпләндерде. Аларның фикеренчә, хакерлык һәм рәсем сәнгате бөтенләй төрле эш төрләре булган: хакерлык — салкын, төгәл һәм методик нәрсә, ә рәсем ясау исә ниндидер яшерен, башлангыч омтылышның ярсу чагылышы дип саныйлар иде.
Бу ике күзәтү дә ялгыш. Хакерлык белән рәсем ясауның уртак яклары бик күп. Дөресен генә әйткәндә, мин белгән бөтен төрле кешеләр арасында хакерлар һәм рәссамнар бер-берсенә иң нык охшаганнарның берсе.
Хакерлар белән рәссамнарның уртак ягы шунда: аларның икесе дә яратучылар, иҗат итүчеләр (maker). Композиторлар, архитекторлар һәм язучылар кебек үк, хакерлар һәм рәссамнар да яхшы әйберләр ясарга омтыла. Алар үзлегеннән фәнни тикшеренү белән шөгыльләнмиләр, гәрчә яхшы әйбер ясау барышында ниндидер яңа техника ачсалар, бу тагын да яхшырак, әлбәттә.
Миңа «computer science» (санак фәне) дигән термин беркайчан да ошамады. Моның төп сәбәбе — асылда мондый нәрсәнең бөтенләй булмавында. Санак фәне — тарихи очраклылык аркасында бергә җыелган, бер-берсе белән көчкә бәйләнгән өлкәләрнең буталчык җыелмасы, нәкъ Югославия кебек. Бер чиктә сездә асылда математик булган, ләкин DARPA грантларын алу өчен үз эшчәнлекләрен санак фәне дип атаган кешеләр тора. Уртада санакның «табигый тарихы» кебек нәрсә белән шөгыльләнүчеләр — мәсәлән, челтәрләр аша мәгълүмат маршрутлаштыру алгоритмнарының үз-үзен тотышын өйрәнүчеләр. Ә икенче чиктә кызыклы программа тәэминаты язарга тырышучы хакерлар тора; алар өчен компьютер — бары тик үз-үзеңне белдерү чарасы гына, архитектор өчен бетон яки рәссам өчен буяу кебек. Бу математикларны, физикларны һәм архитекторларны бер үк факультетка берләштергән кебек тоела.
Кайвакыт хакерларның эшен «программа инженериясе» (software engineering) дип атыйлар, ләкин бу термин да шулай ук ялгыштыргыч. Яхшы программа тәэминаты дизайнерлары архитекторлар ни дәрәҗәдә инженер булса, шуннан артык түгел. Архитектура белән инженерия арасындагы чик бик төгәл билгеләнмәгән, ләкин ул бар. Ул «нәрсә» һәм «ничек» арасына төшә: архитекторлар нәрсә эшләргә кирәклеген хәл итә, ә инженерлар моны ничек эшләргә икәнен таба.
«Нәрсә» белән «ничек»не бер-берсеннән артык аерырга ярамый. Әгәр сез эшнең ничек эшләнүен аңламыйча торып нәрсә эшләнәчәген хәл итәргә тырышсагыз, проблемаларга юлыгачаксыз. Ләкин хакерлык, һичшиксез, ниндидер спецификацияне гамәлгә ашыру (реализацияләү) юлын табудан күпкә киңрәк нәрсә була ала. Иң яхшы очракта ул — спецификациянең үзен булдыру; ләкин моның иң яхшы юлы аны реализацияләү икәне ачыклана.
Бәлки кайчан да булса «санак фәне», нәкъ Югославия кебек, үзенең өлешләренә таркалыр. Бу яхшы булыр иде. Аеруча бу минем туган җиремә — хакерлыкка мөстәкыйльлек алып килсә.
Бу барлык төрле эш төрләрен бер бүлеккә берләштерү административ яктан уңайлы булса да, интеллектуаль яктан буталчыклык тудыра. «Санак фәне» дигән исемнең миңа ошамавының икенче сәбәбе дә шул. Уртадагы кешеләр экспериментларга нигезләнгән фән кебек нәрсә белән шөгыльләнә, дип әйтергә буладыр. Ләкин ике чиктәге кешеләр — хакерлар һәм математиклар — чынлыкта фән белән шөгыльләнмиләр.
Математиклар бу хакта борчылмый кебек. Алар математика бүлегендәге башка математиклар кебек үк шатланып теоремалар исбатларга керешәләр, һәм тиздән үзләре эшли торган бинаның тышында «санак фәне» дип язылганын күрми дә башлыйлар. Ләкин хакерлар өчен бу тамга — зур проблема. Әгәр аларның эше фән дип аталса, бу аларга үзләрен фәнни тотарга тиеш дигән хис уята. Шуңа күрә үзләре чынлап теләгән нәрсәне — матур программа тәэминаты проектлауны эшләү урынына, университетлардагы һәм тикшеренү лабораторияләрендәге хакерлар үзләрен фәнни мәкаләләр язарга тиеш дип хис итәләр.
Иң яхшы очракта мәкаләләр — бары тик формальлек кенә. Хакерлар шәп программа язалар, аннары аның турында мәкалә язалар, һәм мәкалә программа тәэминаты аша ирешелгән казанышның күрсәткече (вәкиле) булып тора. Ләкин еш кына бу туры килмәү проблемалар тудыра. Матур әйберләр төзүдән фәнни мәкаләләр өчен кулайрак тема булган ямьсез әйберләр төзүгә тайпылу бик җиңел.
Кызганычка каршы, матур әйберләр һәрвакытта да мәкаләләр өчен иң яхшы тема булмый. Беренчедән, тикшеренү оригиналь булырга тиеш — һәм кандидатлык диссертациясе язган һәркем белгәнчә, сезнең яңа җирләрне тикшерүегезнең бердәнбер ышанычлы юлы — беркемгә дә кирәкмәгән җир кисәгенә хуҗа булу. Икенчедән, тикшеренү саллы булырга тиеш — ә уңайсыз, катлаулы системалар күпкә мәгънәлерәк мәкаләләр бирә, чөнки сез максатка ирешү өчен җиңәргә туры килгән киртәләр турында яза аласыз. Бернәрсә дә ялгыш фаразлардан башлау кебек саллы проблемалар тудырмый. Ясалма интеллектның (AI) күпчелек өлеше — бу кагыйдәнең ачык мисалы; әгәр сез белемне аргументлары абстракт төшенчәләрне аңлаткан предикатлар мантыйгы белдерүләре исемлеге рәвешендә күрсәтеп була дип уйласагыз, моны ничек эшләргә икәнлеге турында язарга бик күп мәкаләләрегез булачак. Рики Рикардо әйткәнчә: «Люси, сиңа бик күп нәрсәләрне аңлатырга туры киләчәк».
Матур нәрсә ясау юлы еш кына инде булган нәрсәгә нәфис үзгәрешләр кертүдән яисә булган идеяләрне бераз яңача берләштерүдән тора. Мондый эшне фәнни мәкаләдә җиткерү кыен.
Ни өчен соң университетлар һәм тикшеренү лабораторияләре хакерларны мәкаләләре буенча бәяләүне дәвам итә? Нәкъ шул сәбәп аркасында: «уку сәләте» беркатлы стандартлаштырылган тестлар белән үлчәнә, яки программистларның җитештерүчәнлеге код юллары белән үлчәнә. Бу тестларны куллану җиңел, ә җиңел һәм азмы-күпме эшли торган тесттан да кызыктыргычрак бернәрсә дә юк.
Хакерларның чынлыкта нәрсә эшләргә тырышуын — матур программа тәэминаты проектлауны үлчәү күпкә кыенрак булыр иде. Яхшы дизайнны бәяләү өчен сезгә яхшы дизайн тойгысы кирәк. Һәм кешеләрнең яхшы дизайнны таный белү сәләте белән аларның моны булдыра алам дигән ышанычлары арасында бернинди бәйләнеш юк, бары тик кире бәйләнеш кенә булырга мөмкин.
Бердәнбер тышкы сынов — вакыт. Вакыт узу белән матур әйберләр үсә һәм тамыр җәя, ә ямьсез нәрсәләр читкә ташлана. Кызганычка каршы, бу вакыт аралыгы кеше гомереннән озынрак булырга мөмкин. Сэмюэл Джонсон язучының абруе тотрыклансын өчен йөз ел кирәк дип әйткән. Сезгә башта язучының абруйлы дуслары үлгәнен, ә аннары аларның барлык тарафдарлары үлгәнен көтәргә туры килә.
Минемчә, хакерларга үз абруйларында зур очраклылык өлеше булуы белән килешергә генә кала. Бу яктан алар башка иҗатчылардан бернәрсә белән дә аерылмый. Дөресен генә әйткәндә, чагыштырмача алганда, аларның бәхете бар. Мода йогынтысы хакерлыкта рәсем сәнгатендәге кебек зур түгел.
Кешеләрнең сезнең эшегезне дөрес аңламавыннан да яманрак нәрсәләр бар. Иң зур куркыныч — үз эшегезне үзегез дөрес аңламавыгыз. Бәйләнешле өлкәләр — нәкъ менә идеяләр эзли торган урыннар. Әгәр сез санак фәннәре факультетына эләксәгез, мәсәлән, хакерлык — теоретик санак фәне теория булган нәрсәнең гамәли юрамасы гына дип уйлау коткысы барлыкка килә. Аспирантурада укыган бөтен вакытымда күңелем төбендә уңайсыз бер хис йөрттем: мин тагын да күбрәк теория белергә тиеш, һәм йомгаклау имтиханыннан соң өч атна эчендә ул бөтен нәрсәне онытуым бик зур җавапсызлык дип саный идем.
Хәзер мин моның ялгыш булганын аңлыйм. Хакерларга исәпләү теориясен аңлау рәссамнарга буяу химиясен белү ни дәрәҗәдә кирәк булса, шулкадәр генә кирәк. Сезгә вакыт һәм хәтер катлаулылыгын исәпләргә белү һәм Тьюринг тулылыгы турында белү җитә. Шулай ук парсер яки регуляр аңлатмалар китапханәсе язарга туры килгән очракта, ким дигәндә автоматлар теориясе (state machine) төшенчәсен истә калдыру яхшы булыр иде. Рәссамнарга исә, чынлыкта, буяу химиясе турында моннан күпкә күбрәк нәрсәне истә тотарга туры килә.
Мин шуны аңладым: идеяләрнең иң яхшы чыганаклары — исемнәрендә «санак» дигән сүз булган башка өлкәләр түгел, ә иҗатчылар яшәгән башка тармаклар. Рәсем сәнгате исәпләү теориясенә караганда күпкә баерак идеяләр чыганагы булды.
Мәсәлән, колледжда мине санак янына барыр алдыннан ук программаны кәгазьдә тулысынча уйлап бетерергә кирәк дип өйрәттеләр. Ләкин мин бу рәвешле программалаштырмавымны аңладым. Миңа кәгазь каршында түгел, ә санак каршында утырып программа язу ошый иде. Тагын да яманрагы — сабыр гына тулы программа язып, аның дөреслегенә инану урынына, мин бөтенләй эшләми торган яраксыз код чыгара һәм әкренләп аны кирәкле формага китерә идем. Debugging (көйләү, хаталарны төзәтү), мине өйрәтүләренчә, бары тик механик хаталарны һәм ялгышлыкларны эләктерә торган соңгы этап кына булырга тиеш иде. Минем эш рәвешемдә исә, бөтен программалаштыру нәкъ шул көйләүдән тора кебек тоелды.
Озак вакытлар мин моның өчен үземне начар хис иттем, нәкъ башлангыч сыйныфта укытучылар өйрәткәнчә карандаш тотмавым аркасында үземне гаепле тойган кебек. Әгәр мин башка иҗатчыларга — рәссамнарга яки архитекторларга күз салсам, минем эшемнең үз исеме барлыгын аңлар идем: нобай, эскиз ясау (sketching). Минем белүемчә, мине колледжда программалаштырырга өйрәтү рәвеше бөтенләй ялгыш булган. Сез программаларны язган саен ачыкларга, үстерергә тиешсез, нәкъ язучылар, рәссамнар һәм архитекторлар кебек.
Моны аңлау программа дизайны өчен зур әһәмияткә ия. Бу дигән сүз: программалаштыру теле, барыннан да элек, сыгылмалы, үзгәртүчән булырга тиеш. Программалаштыру теле — уйлап бетерелгән программаларны белдерү өчен түгел, ә программалар турында уйлау өчен кирәк. Ул ручка түгел, ә карандаш булырга тиеш. Әгәр кешеләр программаларны мине колледжда өйрәткәнчә язсалар, статик типлаштыру шәп фикер булыр иде. Ләкин мин белгән хакерларның берсе дә программаларны алай язмый. Безгә сырларга, буярга һәм сылап бетерергә мөмкинлек бирә торган тел кирәк; ә тездә сак кына чынаяк тотып, компиляторның кырыс карт апасы белән әдәпле әңгәмә корырга мәҗбүр итә торган тел түгел.
Статик типлаштыру турында сөйләшкәндә, иҗатчылар рәтенә керү безне фәннәрне газаплаучы тагын бер проблемадан коткарачак: математикага көнләшүдән. Фән белән шөгыльләнүче һәркем эчтән генә математикларның үзләреннән акыллырак булуына ышана. Минемчә, математиклар да моңа ышана. Ничек кенә булмасын, нәтиҗәдә галимнәр үз хезмәтләрен мөмкин кадәр математикага охшатырга тырышалар. Физика кебек өлкәдә бу, бәлки, зур зыян китермидер, ләкин табигый фәннәрдән ераклашкан саен, бу җитдирәк проблемага әйләнә бара.
Формулалар тулы бит бик тәэсирле күренә бит. (Киңәш: тагын да ныграк тәэсир итү өчен грек хәрефләре кулланыгыз.) Һәм нәтиҗәдә, әйтик, мөһим мәсьәләләр өстендә эшләү урынына, формаль рәвештә чишеп була торган мәсьәләләр өстендә эшләү коткысы туа.
Әгәр хакерлар үзләрен башка иҗатчылар — язучылар һәм рәссамнар белән тиңләштерсәләр, аларга моны эшләү коткысы янамас иде. Язучылар һәм рәссамнар математикага көнләшүдән интегү күрмиләр. Алар бөтенләй башка нәрсә белән шөгыльләнәбез дип саныйлар. Минемчә, хакерлар да нәкъ шулай.
Әгәр университетлар һәм тикшеренү лабораторияләре хакерларга үзләре теләгән эшне эшләргә комачаулый икән, бәлки, аларга урын компанияләрдәдер? Кызганычка каршы, күпчелек компанияләр дә хакерларга үз теләкләре белән эшләргә ирек бирми. Университетлар һәм тикшеренү лабораторияләре хакерларны галим булырга мәҗбүр итә, ә компанияләр аларны инженер булырга мәҗбүр итә.
Мин үзем моны күптән түгел генә аңладым. Yahoo компаниясе Viaweb'ны сатып алгач, алар миннән нәрсә эшләргә теләвемне сорадылар. Мин бизнес ягын беркайчан да яратмадым һәм бары тик код язарга, хакерлык итәргә телим дидем. Yahoo'га килгәч, мин алар өчен хакерлык дигән сүзнең программа тәэминатын проектлауны түгел, ә аны тормышка ашыруны (реализацияләүне) аңлатканын күрдем. Программистлар продукт менеджерларының күзаллауларын (әгәр моны шулай атап булса) кодка тәрҗемә итүче техник хезмәткәрләр дип кенә кабул ителә иде.
Зур компанияләрдә бу гадәти план кебек күренә. Алар моны нәтиҗәнең стандарт тайпылышын (девиациясен) киметү өчен эшлиләр. Хакерларның аз гына проценты чынлыкта программа тәэминатын проектлый ала, һәм компания җитәкчеләренә аларны аерып алу кыен. Шуңа күрә программа тәэминатының киләчәген бер даһи хакерга тапшыру урынына, күпчелек компанияләр барысын да комитет проектлый торган, ә хакерлар проектны гамәлгә генә ашыра торган итеп оештыра.
Әгәр кайчан да булса акча эшләргә теләсәгез, моны истә тотыгыз, чөнки стартапларның җиңүенең бер сәбәбе шул. Зур компанияләр фаҗигаләрдән качу өчен проект нәтиҗәләренең тайпылышын киметергә тели. Ләкин сез тибрәнүләрне басканда, түбән нокталар белән бергә югары нокталарны да югалтасыз. Зур компанияләр өчен бу проблема түгел, чөнки алар искиткеч продуктлар ясау белән җиңми. Зур компанияләр башка зур компанияләргә караганда азрак начар булулары белән җиңә.
Шуңа күрә, программа тәэминаты продукт менеджерлары тарафыннан проектлана торган зур бер компания белән дизайн сугышына керү юлын тапсагыз, алар беркайчан да сезгә иярә алмаячак. Ләкин мондый мөмкинлекләрне табу җиңел түгел. Зур компанияне дизайн сугышына җәлеп итү кыен, нәкъ крепость эчендәге дошман белән кул көрәшенә керү кыен булган кебек. Мәсәлән, Microsoft Word'тан яхшырак текст процессоры язу бик җиңел булыр иде, ләкин Microsoft үзенең операцион система монополиясе крепосте эчендә моны эшләгәнегезне хәтта сизмәс тә иде, бәлки.
Дизайн сугышларын беркем дә әле ныгытмалар төзергә өлгермәгән яңа базарларда алып барырга кирәк. Нәкъ шунда сез кыю дизайн алымнары кулланып һәм бер үк кешеләргә продуктны проектлауны да, аны тормышка ашыруны да тапшырып, зур җиңүгә ирешә аласыз. Башлангыч чорда Microsoft үзе дә шулай эшләде. Apple да шулай эшләде. Hewlett-Packard та. Минемчә, һәр уңышлы стартап диярлек шулай иткән.
Шулай итеп, шәп программа тәэминаты ясауның бер юлы — үз стартапыгызны башлау. Ләкин моның ике проблемасы бар. Берсе шунда: стартапта программа язудан тыш тагын бик күп нәрсәләр эшләргә туры килә. Viaweb'та вакытымның дүрттән бер өлешен генә хакерлыкка багышлый алсам, үземне бәхетле саный идем. Ә вакытымның калган дүрттән өч өлешендә эшләргә туры килгән нәрсәләр күңелсездән куркынычка кадәр үзгәрә иде. Минем моңа эталоным бар: бервакыт миңа тешләремне дәвалау өчен директорлар советы утырышын ташлап китәргә туры килде. Хәтеремдә, стоматолог кәнәфиенә утырып, бормашинаны көткәндә, мин үземне нәкъ ялда кебек хис иттем.
Стартапларның икенче проблемасы — акча китерә торган программа тәэминаты белән язуы кызык булган программа тәэминаты арасында уртаклыкның бик аз булуы. Программалаштыру телләрен язу кызык, һәм Microsoft'ның беренче продукты нәкъ шундый иде, ләкин хәзер программалаштыру телләре өчен беркем дә акча түләмәячәк. Акча эшләргә теләсәгез, сезгә гадәттә беркем дә бушлай эшләргә теләмәгән бик ямьсез, катлаулы мәсьәләләр өстендә эшләргә туры киләчәк.
Барлык иҗатчылар да бу проблемага очрый. Бәяләр тәкъдим һәм сорау белән билгеләнә, һәм эшләү үзе рәхәт булган әйберләргә сорау аерым клиентларның гади, көндәлек проблемаларын чишә торган әйберләргә караганда күпкә азрак. Бродвей тышындагы театрларда уйнау сәүдә күргәзмәсендә кемнеңдер стендында горилла костюмы киеп йөрү кебек акча китерми. Романнар язу чүп эшкәрткечләр өчен реклама тексты язу кебек үк яхшы түләнми. Программалаштыру телләрен хаклау да ниндидер компаниянең иске мәгълүматлар базасын веб-серверга тоташтыру ысулын табу кебек акча китерми.
Минемчә, программа тәэминаты өлкәсендә бу проблеманың чишелеше — барлык иҗатчыларга диярлек таныш булган төшенчә: көндезге эш (day job). Бу гыйбарә төнлә чыгыш ясаган музыкантлардан башланды. Киңрәк мәгънәдә, бу сезнең акча өчен эшли торган бер эшегез, һәм җан өчен эшли торган икенче эшегез бар дигәнне аңлата.
Карьераларының башында барлык иҗатчыларның диярлек көндезге эшләре була. Рәссамнар һәм язучылар моның белән аеруча мәгълүм. Әгәр бәхетегез булса, сез төп эшегез белән тыгыз бәйләнгән көндезге эш таба аласыз. Музыкантлар еш кына пластинкалар кибетендә эшли кебек. Программалаштыру теле яки операцион система өстендә эшләүче хакер да шуның кебек үк аны куллана торган көндезге эш таба ала. [1]
Хакерлар өчен чишелеш — көндезге эштә эшләү һәм бер үк вакытта матур программа тәэминаты өстендә шөгыльләнү дип әйткәндә, мин моны яңа идея итеп тәкъдим итмим. Ачык кодлы программалар (open-source) дөньясы тулысынча шуңа корылган. Минем әйтүем шул: open-source, мөгаен, иң дөрес модель, чөнки ул башка бөтен иҗатчылар тарафыннан мөстәкыйль рәвештә расланган.
Ниндидер эш бирүченең хакерларга ачык кодлы проектлар өстендә эшләргә рөхсәт итмәскә теләве миңа сәер тоела. Viaweb'та без моны эшләмәгән беркемне дә эшкә алырга теләмәс идек. Программистлар белән әңгәмә үткәргәндә, безне иң кызыксындырган нәрсә — аларның буш вакытларында нинди программалар язуы иде. Үз эшегезне яратмый торып, сез бернәрсәне дә яхшы эшли алмыйсыз, ә хакерлыкны яратсагыз, сез һичшиксез үз проектларыгыз өстендә эшләячәксез. [2]
Хакерлар галимнәр түгел, ә иҗатчылар булганлыктан, метафораларны фәннәрдән түгел, ә башка төр иҗатчылар арасыннан эзләргә кирәк. Рәсем сәнгате безне хакерлык турында тагын нәрсәгә өйрәтә ала?
Рәсем сәнгате мисалыннан без өйрәнә, яки ким дигәндә раслый ала торган бер нәрсә бар: хакерлыкка ничек өйрәнергә. Сез рәсем ясарга, нигездә, аны ясап кына өйрәнәсез. Хакерлыкта да нәкъ шулай. Күпчелек хакерлар программалаштыру буенча колледж курсларын үтеп хакерлыкка өйрәнмиләр. Алар унөч яшендә үз программаларын язып хакерлыкка өйрәнәләр. Хәтта колледжда да сез хакерлыкка бары тик код язып өйрәнәсез. [3]
Рәссамнар үз артларыннан эшләренең эзен калдырганга күрә, сез аларның эшләп ничек өйрәнүләрен күзәтә аласыз. Әгәр рәссамның эшләрен хронологик тәртиптә карасагыз, һәр яңа картинаның алдагыларында өйрәнелгән нәрсәләргә таянып ясалганын күрерсез. Картинада бик яхшы килеп чыккан нәрсә булса, гадәттә сез аның беренче версиясен иртәрәк язылган берәр картинада кечерәк формада таба аласыз.
Минемчә, күпчелек иҗатчылар шулай эшли. Язучылар һәм архитекторлар да нәкъ шулай итә кебек. Бәлки, хакерларга да рәссамнар кебек эш итү, еллар буе бер проект өстендә эшләп, барлык соңгы идеяләрне төзәтмәләр рәвешендә кертергә тырышу урынына, регуляр рәвештә барысын да яңадан башлау яхшы булыр иде.
Хакерларның хакерлыкка аны эшләп өйрәнүләре — хакерлыкның фәннәрдән никадәр аерылып торуының тагын бер билгесе. Галимнәр фәнгә аны ясап түгел, ә лаборатория эшләре һәм мәсьәләләр җыентыклары чишеп өйрәнәләр. Галимнәр камил эшләр эшләүдән башлыйлар, ягъни алар бары тик башка берәү үзләре өчен эшләгән нәрсәне кабатларга тырышалар. Ахыр чиктә, алар үзаллы, оригиналь эш эшли алырлык дәрәҗәгә җитәләр. Ә хакерлар башыннан ук оригиналь эш эшлиләр; бары тик ул бик начар була. Шулай итеп, хакерлар оригиналь булып башлап яхшыралар, ә галимнәр яхшыдан башлап оригиналь булалар.
Иҗатчыларның икенче өйрәнү юлы — үрнәкләргә карап өйрәнү. Рәссам өчен музей — техникаларның белешмәлек китапханәсе. Йөзләрчә еллар буена бөек осталарның эшләрен күчереп язу рәссамнарның традицион белем алуының бер өлеше булды, чөнки күчерү сезне картинаның ничек ясалганын җентекләп карарга мәҗбүр итә.
Язучылар да шулай эшли. Бенджамин Франклин язарга Аддисон һәм Стил эсселарының төп фикерләрен кыскартып язып, аннары аларны яңадан торгызырга тырышып өйрәнгән. Рэймонд Чандлер детектив хикәяләр белән нәкъ шул ук нәрсәне эшләгән.
Хакерлар да яхшы программаларга — аларның нәрсә эшләвенә генә түгел, чыганак кодына да карап программалаштырырга өйрәнә ала. Ачык код хәрәкәтенең азрак рекламаланган файдаларының берсе — ул программалаштыруга өйрәнүне күпкә җиңеләйтте. Мин программалаштырырга өйрәнгәндә, безгә күбесенчә китаплардагы мисалларга таянырга туры килә иде. Ул вакытта кулланып була торган бердәнбер зур код кисәге Unix иде, ләкин ул да ачык кодлы түгел иде. Чыганак кодын укыган кешеләрнең күбесе аны Джон Лайонс китабының легаль булмаган күчермәләрендә укыды; ул китап 1977 елда язылган булса да, 1996 елга кадәр бастырырга рөхсәт ителмәде.
Рәсем сәнгатеннән ала алырлык тагын бер үрнәк — картиналарның әкренләп камилләштереп ясалу рәвеше. Картиналар гадәттә эскиздан башлана. Тора-бара детальләр өстәлә бара. Ләкин бу бары тик өстәү процессы гына түгел. Кайвакыт башлангыч планнар ялгыш булып чыга. Картиналарны рентген аша караганда, сансыз картиналарда кул-аякларның күчерелгәнен яки йөз сызыкларының үзгәртелгәнен күрергә була.
Менә рәсем сәнгатеннән өйрәнә алырлык бер мисал. Минемчә, хакерлык та нәкъ шулай эшләргә тиеш. Программа спецификациясенең камил булуын көтү — реаль түгел. Моны башта ук танып, спецификацияләрне барышында үзгәртергә мөмкинлек бирерлек итеп программалар язсагыз, күпкә отышлырак булырсыз.
(Зур компанияләрнең төзелеше аларга моны эшләүне кыенлаштыра, шуңа күрә монда да стартапларның өстенлеге бар.)
Хәзерге вакытта һәркем вакытыннан алда оптимизацияләүнең (premature optimization) куркынычы турында белә инде, мөгаен. Минемчә, без вакытыннан алда проектлаудан (premature design) — программаның нәрсә эшләргә тиешлеген бик иртә хәл итүдән дә шулай ук сакланырга тиешбез.
Дөрес кораллар безгә бу куркынычтан качарга ярдәм итә ала. Яхшы программалаштыру теле, майлы буяу кебек үк, фикерегезне җиңел үзгәртергә мөмкинлек бирергә тиеш. Динамик типлаштыру монда отышлы, чөнки башта ук конкрет мәгълүмат форматларына бәйләнергә кирәкми. Ләкин сыгылмалылыкның төп сере, минемчә, телне бик абстракт итүдә. Үзгәртү өчен иң җиңел программа — бик кыска программа.
Бу парадокс булып яңгырый, ләкин бөек картина булырга тиеш булганнан яхшырак булырга тиеш. Мәсәлән, Леонардо Милли галереядагы Джиневра де Бенчи портретын ясаганда, аның башы артына артыш куагын урнаштырган. Анда ул һәрбер яфракны җентекләп ясап чыккан. Күп кенә рәссамнар: бу бары тик аның башын уратып алыр өчен арткы пландагы бер әйбер генә, беркем дә аңа шулкадәр игътибар белән карамаячак, дип уйлар иде.
Ләкин Леонардо алай эшләмәгән. Аның картинаның бер өлеше өстендә никадәр тырышып эшләве беркемнең дә аңа никадәр якыннан караячагына бәйле булмаган. Ул Майкл Джордан кебек иде. Аяусыз, туктаусыз.
Аяусызлык җиңә, чөнки бергә җыелганда күренми торган детальләр күренә башлый. Кешеләр Джиневра де Бенчи портреты яныннан үтеп барганда, алар ярлыкка карап «Леонардо да Винчи» дип язылганын күргәнче үк, аларның игътибарын шунда ук әсир итә. Барлык бу күренми торган детальләр берләшеп, нәкъ меңләгән чак кына ишетелерлек тавышның бер көйгә кушылып җырлавы кебек, телсез калдырырлык нәрсә тудыра.
Шәп программа тәэминаты да нәкъ шулай ук матурлыкка фанатик рәвештә бирелүне таләп итә. Яхшы программа тәэминатының эченә карасагыз, беркем дә күрергә тиеш булмаган өлешләренең дә бик матур булуын күрерсез. Мин шәп программалар язам дип дәгъва кылмыйм, ләкин код язганда, көндәлек тормышка шул ук рәвешле якын килсәм, миңа рецептлы дарулар язып бирерләр иде дип уйлыйм. Начар тигезләнгән (интентациясе ялгыш) яисә ямьсез үзгәрешле исемнәре булган кодны күрү мине котырта.
Әгәр хакер спецификацияне кодка әйләндерүче гади генә бер башкаручы булса, ул канау казучы кебек бер яктан икенче якка кадәр барып чыга алыр иде. Ләкин хакер иҗатчы булса, безгә илһамны да исәпкә алырга туры килә.
Хакерлыкта, рәсем ясаудагы кебек, эш цикллар белән бара. Кайвакыт сез ниндидер яңа проект белән канатланасыз һәм көненә уналты сәгать аның өстендә эшләргә телисез. Башка вакытта бернәрсә дә кызык күренми.
Яхшы эш башкару өчен сез бу циклларны исәпкә алырга тиеш, чөнки аларга карата сезнең мөнәсәбәтегез эшкә тәэсир итә. Механик тапшырулар тартмалы машинада тауга менгәндә, сүнмәс (бөгелмәс) өчен кайвакыт сцеплениедән аякны җибәрергә туры килә. Бу исәптән, бераз чигенү омтылышның, амбициянең сүрелүеннән саклый ала. Рәсем ясауда да, хакерлыкта да котсыз дәрәҗәдә амбициоз эшләр бар, һәм шулай ук тыныч кына башкарыла торган гадәти эшләр бар. Илһам беткән яки эшегез тоткарланган вакытлар өчен кайбер җиңел эшләрне саклап калу — яхшы фикер.
Хакерлыкта бу туры мәгънәдә хаталарны (багларны) җыеп баруны аңлата ала. Мин көйләүне (debugging) яратам: бу — хакерлыкның кешеләр уйлаганча гади һәм туры булган бердәнбер мизгеле. Сездә тулысынча чикләнгән мәсьәлә бар, һәм сезгә аны чишәргә генә кирәк. Программагыз x эшләргә тиеш. Аның урынына ул y ясый. Хата кайда? Ахыр чиктә җиңәчәгегезне беләсез. Бу нәкъ дивар буяу кебек тынычландыра торган нәрсә.
Рәсем сәнгате үрнәге безне үз эшебез белән идарә итәргә генә түгел, бергәләп эшләргә дә өйрәтә ала. Үткән чорның күп кенә бөек сәнгать әсәрләре — күмәк куллар хезмәте, гәрчә музейдагы стенада алар янында бер генә исем торырга мөмкин булса да. Леонардо Верроккьо остаханәсендә өйрәнчек булган һәм аның «Мәсихне чукындыру» картинасындагы фәрештәләрнең берсен ясаган. Мондый хәл кагыйдәдән чыгарма түгел, ә кагыйдәнең үзе булган. Микеланджело исә Сикст капелласы түшәмендәге барлык сыннарны да үзе ясарга теләгәне өчен аеруча фидакарь саналган.
Мин белгән кадәресе, рәссамнар бергәләп бер картина өстендә эшләгәндә, беркайчан да бер үк өлеш өстендә эшләмәгәннәр. Гадәттә оста төп сыннарны ясаган, ә ярдәмчеләре — калганнарын һәм фонны. Ләкин берәү икенчесенең ясаган эше өстеннән кабат ясаган очрак беркайчан да булмаган.
Минемчә, бу — программа тәэминаты өлкәсендә дә хезмәттәшлек өчен иң дөрес модель. Аны чиктән тыш арттырып җибәрмәгез. Бер код кисәге өстендә өч я дүрт төрле кеше эшләсә һәм аларның берсе дә аның хуҗасы булмаса, нәтиҗәдә ул уртак тулай торак бүлмәсенә охшап калачак. Ул күңелсез һәм ташландык булып тоелачак, анда кирәксез чүп-чар җыелачак. Хезмәттәшлек итүнең дөрес юлы, минемчә, проектларны ачык билгеләнгән модульләргә бүлүдән гыйбарәт, аларның һәрберсенең конкрет хуҗасы булырга, ә алар арасындагы интерфейслар программалаштыру телләре кебек үк җентекләп эшләнгән һәм, мөмкин булса, шулкадәр ачык булырга тиеш.
Рәсем сәнгате кебек үк, күпчелек программа тәэминаты да кешеләр өчен билгеләнгән. Шуңа күрә хакерлар, рәссамнар кебек үк, чыннан да бөек эш башкару өчен эмпатиягә ия булырга тиеш. Сез әйберләргә кулланучы күзе белән карый белергә тиешсез.
Бала чагымда миңа гел әйберләргә башка кеше күзлегеннән карарга кирәк дип әйтәләр иде. Гамәлдә бу һәрвакыт мин теләгәнне түгел, ә башка кеше теләгәнне эшләү дигәнне аңлатты. Бу, әлбәттә, эмпатия төшенчәсенең абруен какшатты, һәм мин аны үземдә үстермәскә тырыштым.
Их, ничек ялгышканмын мин! Баксаң, әйберләргә башкалар күзлегеннән карау — уңышның төп сере икән диярлек. Бу үз-үзеңне корбан итү дигән сүз түгел. Бөтенләй алай түгел. Башка берәүнең әйберләрне ничек күрүен аңлау сезнең аның мәнфәгатьләрендә эш итәчәгегезне аңлатмый; кайбер очракларда — мәсәлән, сугышта — сез нәкъ киресенчә эшләргә телисез. [4]
Күпчелек осталар әйберләрне кешеләр аудиториясе өчен ясый. Ә аудиторияне кызыксындыру өчен сезгә аларның нәрсәгә мохтаҗ икәнен аңларга кирәк. Мәсәлән, барлык бөек картиналарның диярлек кешеләрне тасвирлавы шуның белән аңлатыла: чөнки кешеләрне нәкъ менә кешеләр кызыксындыра.
Эмпатия, мөгаен, яхшы хакер белән бөек хакер арасындагы иң мөһим бердәнбер аермадыр. Кайбер хакерлар шактый акыллы, ләкин эмпатия турында сүз чыкканда, алар гамәлдә солипсистлар булып чыга. Мондый кешеләргә шәп программа тәэминаты проектлау кыен [5], чөнки алар әйберләргә кулланучы күзлегеннән карый алмыйлар.
Кешеләрнең эмпатиягә сәләтен белүнең бер ысулы — аларның техник булмаган кешегә техник сорауны ничек аңлатуларын күзәтү. Бәлки, барыбыз да башка яктан акыллы, ләкин бу эштә көлке дәрәҗәдә сәләтсез кешеләрне беләбездер. Әгәр кичке аш мәҗлесендә кемдер алардан программалаштыру теленең нәрсә булуын сораса, алар: «И-и, югары дәрәҗәле тел — ул компилятор объект кодын генерацияләү өчен куллана торган керү мәгълүматы», — дип әйтәчәк. Югары дәрәҗәле тел? Компилятор? Объект коды? Программалаштыру теленең нәрсә икәнен белмәгән кеше, әлбәттә, бу әйберләрнең дә нәрсә икәнен белми.
Программа тәэминаты башкарырга тиешле эшнең бер өлеше — үзе үзен аңлату. Димәк, яхшы программа язу өчен кулланучыларның никадәр аз аңлавын төшенергә кирәк. Алар программа янына бернинди әзерлексез киләчәк, һәм ул алар көткәнчә эшләсә яхшырак булыр, чөнки кулланманы беркем дә укымаячак. Бу җәһәттән мин күргән иң яхшы система — 1985 елгы оригиналь Macintosh иде. Ул программа тәэминаты диярлек беркайчан да эшләмәгән нәрсәне башкарды: ул бары тик эшләде. [6]
Башлангыч код та үзе үзен аңлатырга тиеш. Әгәр мин кешеләрнең программалаштыру турында бары бер генә цитатаны истә калдыруларына ирешә алсам, бу Structure and Interpretation of Computer Programs китабының башындагы цитата булыр иде.
Программалар кешеләр укысын өчен язылырга тиеш, ә машиналар тарафыннан үтәлүе исә бары тик янәшәдәге генә нәтиҗә.
Сез үз кулланучыларыгызга карата гына түгел, ә кодны укучыларга карата да эмпатия күрсәтергә тиешсез. Бу сезнең үз мәнфәгатегездә, чөнки сез үзегез дә шуларның берсе булачаксыз. Күп кенә хакерлар, ниндидер программа язып, алты айдан соң аңа кире кайткач, аның ничек эшләвен бөтенләй аңламый торган хәлгә тарыган. Мондый тәҗрибәләрдән соң Perl теленнән бөтенләй баш тарткан берничә кешене беләм. [7]
Эмпатия җитмәүне акыл белән бәйлиләр, хәтта кайбер урыннарда моңа карата ниндидер мода да бар. Ләкин мин алар арасында нинди дә булса бәйләнеш бар дип уйламыйм. Эмпатиягә өйрәнмичә дә математика һәм табигый фәннәрдә уңышка ирешергә була, ә бу өлкәдәге кешеләр гадәттә акыллы, шуңа күрә бу ике сыйфат бер-берсе белән бәйләнә башлаган. Ләкин эмпатиягә сәләтсез булган җүләр кешеләр дә бик күп. Ток-шоуларга сорау биреп шалтыратучыларны тыңлагыз сез. Алар нинди генә сорау бирмәсен, шундый урау юллар белән сорыйлар ки, тапшыруны алып баручыларга еш кына сорауны алар өчен яңадан әйтеп бирергә туры килә.
Шулай итеп, әгәр хакерлык рәсем ясау һәм язучылык кебек эшләсә, ул алар кебек үк шәп нәрсәме? Ни дисәң дә, кешегә бер генә гомер бирелә. Аны бөек берәр нәрсә өстендә эшләп үткәрсәң дә була.
Кызганычка каршы, бу сорауга җавап бирү кыен. Престиж мәсьәләсендә һәрвакыт зур вакыт аралыгы була. Бу ерак йолдыз яктылыгы кебек. Бүген рәсем сәнгатенең престижы бар, чөнки биш йөз ел элек кешеләр бөек эшләр башкарган. Ул вакытта беркем дә бу картиналарны без бүген саный торган дәрәҗәдә мөһим дип уйламаган. Ул чордагы кешеләргә Урбино герцогы Федерико да Монтефельтроның кайчандыр Пьеро делла Франческаның картинасындагы сәер борынлы адәм буларак кына танылачагы бик гаҗәп тоелыр иде.
Шуңа күрә, хакерлык бүгенге көндә рәсем сәнгате кебек үк шәп булып күренми дип танысам да, без шуны истә тотарга тиешбез: рәсем сәнгате үзе дә үзенең чәчәк аткан дәверендә хәзерге кебек үк шәп булып күренмәгән.
Билгеле бер ышаныч белән әйтә алган нәрсәм шул: хәзер — хакерлыкның чәчәк аткан заманы. Күпчелек өлкәләрдә бөек эшләр башлангыч чорда башкарыла. 1430 һәм 1500 еллар арасында ясалган картиналарны әле дә беркем узып китә алганы юк. Шекспир профессиональ театр туган мәлдә үк пәйда булды һәм бу өлкәне шулкадәр еракка этәрде ки, шуннан бирле һәр драматург аның күләгәсендә яшәргә мәҗбүр булды. Альбрехт Дюрер нәкъ шуны ук гравюра белән, ә Джейн Остин роман белән эшләде.
Кабат-кабат без бер үк күренешне күрәбез. Яңа мохит пәйда була, һәм кешеләр аның белән шулкадәр дулкынлана ки, аның күпчелек мөмкинлекләрен беренче ике-өч буында ук ачып бетерәләр. Хакерлык хәзер нәкъ менә шушы этапта кебек.
Леонардо чорында рәсем сәнгате аның хезмәтләре аны иткән дәрәҗәдә шәп түгел иде. Хакерлыкның никадәр шәп булып чыгуы исә безнең бу яңа мохит белән нәрсә эшли алуыбызга бәйле булачак.
Искәрмәләр
[1] Фотографиянең рәсем сәнгатенә салган иң зур зыяны — аның төп көндәлек эшне юк итүе булырга мөмкин. Тарихтагы бөек рәссамнарның күбесе портретлар ясап үзләрен туендырган.
[2] Миңа әйтүләренчә, Microsoft үз хезмәткәрләренә хәтта буш вакытларында да ачык кодлы проектларда катнашуны хупламый. Ләкин хәзер иң яхшы хакерларның бик күбесе ачык кодлы проектлар өстендә эшли, шуңа күрә бу сәясәтнең төп нәтиҗәсе — аларның беренче класслы бер генә программистны да эшкә ала алмаулары булырга мөмкин.
[3] Колледжда программалаштыру турында белгәннәрегез китаплар, кием-салым яки танышып йөрүләр турында белгәннәрегезгә бик охшаш: урта мәктәптә зәвыгыгызның никадәр начар булганын аңлау.
[4] Менә кулланылышлы эмпатиянең бер мисалы. Viaweb’та ике вариант арасында карар кабул итә алмаганда, без: «Көндәшләребез нәрсәне иң ныгы нәфрәт итәр иде?» — дип сорый идек. Бервакыт көндәшебез үз программасына нигездә файдасыз булган бер функция өстәде, ләкин ул аларда булып, бездә булмаган берничә нәрсәнең берсе булганга күрә, алар моның турында тармак матбугатында зур шау-шу күтәрделәр. Без бу функциянең файдасыз булуын аңлатырга тырыша алыр идек, ләкин без аны үзебез эшләп чыгарсак, көндәшебезнең тагын да ныграк ачуы чыгачак дип хәл иттек, һәм шул ук көнне төштән соң аның үз юрамабызны ясап куйдык.
[5] Текст редакторларыннан һәм компиляторлардан тыш. Аларны проектлау өчен хакерларга эмпатия кирәкми, чөнки алар үзе үк типик кулланучылар булып тора.
[6] Ярый, диярлек. Алар булган RAM күләмен шактый арттырып җибәрделәр, бу дискларны күп һәм уңайсыз алыштыруга китерде, ләкин моны берничә ай эчендә өстәмә диск саклагычы сатып алып төзәтеп була иде.
[7] Программаларны җиңел укылырлык итүнең юлы — аларны аңлатмалар белән тутыру түгел. Мин Абельсон белән Сассманның цитатасыннан тагын бер адым алга барыр идем. Программалаштыру телләре алгоритмнарны тасвирлау өчен проектланырга тиеш, ә санакларга аларны ничек үтәргә кирәклеген әйтү исә бары тик янәшәдәге генә нәтиҗә. Яхшы программалаштыру теле программа тәэминатын аңлату өчен инглиз теленнән яхшырак булырга тиеш. Аңлатмалар укучыларны кисәтергә кирәк булган ниндидер ялганма (kludge) булганда гына кирәк, бу нәкъ юлдагы көтелмәгән текә борылышлар булган урыннардагы ук билгеләре кебек.
Моның караламаларын укыганнары өчен Тревор Блэквеллга, Роберт Морриска, Дэн Гиффинга һәм Лиза Рэндаллга, шулай ук чыгыш ясарга чакырганнары өчен Генри Лейтнер белән Ларри Финкельштейнга рәхмәтемне белдерәм.