| Bobir ( @ 2008-07-06 12:34:00 |
| Entry tags: | ideas, programming |
Ўртаҳоллардан ўзиш (мақола таржимаси)
Пол Грэмнинг умуман Viaweb компаниясини вужудга келиши ва ҳусусан Lisp дастурлаш тили афзалликлари ҳақида ёзган мақоласи таржимаси. Стартаплар бўйича олдинги ёзув билан ҳам танишиб чиқинг. Мақоладаги атамалар рўйҳати қуйида берилган.
2001 йил апрел. 2003 йил апрелда таҳрир қилинган.
(Ушбу моқола 2001 йилда Франц Дастурчилар симпозиумидаги нутқимдан олинган.)
1995 йил ёзида дўстим Роберт Морис ва мен Viaweb номли янги компанияни (стартап) бошладик. Режамиз қўлланувчиларга онлайн магазинларни тузиш имконини берадиган дастурий таъминотни ёзиш эди. Ўша пайт учун янгилиги шу эдики, бу дастур бизнинг серверларда жойлашган ва ишлар эди, интерфейс сифатида эса оддий веб саҳифалар қўлланилган эди.
Бу фикр ўша пайтларда кўпчиликка келган бўлиши мумкин, албатта, лекин билишимизча, Viaweb биринчи вебга асосланган дастур эди. Биз ҳатто ушбу фикр ўзимизга янги ва ғароиб туюлганидан, компаниямизни ҳам шундек атадик "Viaweb" ("Веб орқали"), чунки бизнинг дастур Интернет орқали ишларди, шахсий компютерингизда эмас.
Ушбу дастурнинг бошқа ажойиб томони шу эдики, у асосан Lisp дастурлаш тилида ёзилган эди. Дастуримиз қўлланувчилар учун Lispда ёзилган катта ҳажмдаги биринчи тизимлар қаторида эди. Lispдан ўша пайтларда асосан университет ва лабораторияларда фойдаланишарди.
Махфий қуролЭрик Рэймонд "Қандай қилиб хакер бўлиш" (русчаси) номли мақоласида хакер бўлмоқчи киши ўрганиши лозим бўлган дастурлаш тилларини ҳам айтиб ўтган. Python ва Javaдан бошлашни тавсия қилади, чунки уларни ўрганиш осон. Жиддий хакер Unixни ўзгартириш учун C дастурлаш тилини ўрганиши керак. Тизим администраторига эса Perl ҳам аз қотади, дейди. Ва ниқоят, ростдан ҳам жиддий хакер Lispни ўрганишни ўз олдига мақсад қилиб қўйиши керак:
Lispни ўрганиш натижада эришиладиган дастурлашнинг
янги даражасига чиқиш туйғусига эга бўлиш учун арзийди.
Ушбу туйғу кейинчалик яхшироқ дастурчи бўлишингизга сабаб бўлади;
ҳатто Lispда ҳеч ишламасангиз ҳам.
Бу лотин тилини ўрганишни оқлайдиган гапнинг ўзгинаси. Лотин тилини ўрганиш иш жойини топишга ёрдам бермайди (ушбу тилда профессорликдан ташқари), лекин зеҳнингизни оширади ва бошқа тилларда яхшироқ ёзишга ёрдам беради, масалан, инглиз тилида.
Лекин бир дақиқа. Ушбу ўҳшатиш унчалик тўғри эмас. Лотин тилини ўрганиб, иш топа олмаслигингизнинг сабаби, лотинчада ҳеч ким сўзлашмайди. ар эса, бундан фарқли ўлароқ, сиз уларга қўллашга буюрган исталган тилда фаолият кўрсата олади.
Демак, агар Lisp сизни яхшироқ дастурчи қилиб тайёрласа, нима учун Lispни ҳаётда ишлатиб бўлмас экан. Рассомга сифатлироқ қалам тақдим этилса, нима учун у ўзининг барча асарларини ушбу қаламда чизишдан бош тортиши керак? Мен Эрик Реймондни мазаҳ қилиш ниятим йўқ асло. У жуда яхши маслаҳат берган; унинг фикри одамлар орасида Lisp ҳақидаги ақиданинг ўзгинаси. Лекин шу ерда қарама-қаршилик яширинган -- Lisp сени яхшироқ дастурчи қилиб тайёрлайди, лекин кейинчалик Lispда ёзмайсан.
Нима учун бундай бўлиши керак? Дастурлаш тиллари фақатгина асбобдир. Агар Lisp мукаммалроқ дастурларни ёзишга сабабчи бўлса, уни ишлатиш лозим. Агар акси бўлса, у кимга ҳам керак эди.
Бу фақатгина назарий томондан муҳим эмас. Дастурий таъминот ишлаб чиқиш жуда ҳам рақобатли соҳа, монополиялар шаклланиши ҳам осон. Дастурларини тезроқ ва сифатлироқ ёзадиган компания, қолган барча шартлар тенг, деб олинганда, рақибларини бозордан сиқиб чиқаради. Ва стартап очганингизда бу ҳақиқатни яққол ҳис этасиз. Стартаплар бизнесида ё ғолиб чиқади одам, ё ютқизади. Бошқа вариантлар қаралмайди. Агар нотўғри технологияни танласа, стартапни рақиблари йўқ қилиб ташлайди.
Роберт ҳам, мен ҳам Lispни яхши билар эдик. Бошқалар C++ ва Perlда ёзишларинидан ҳам хабардор эдик. Лекин бу ҳали ҳеч нарсани англатмаслиги ҳам аён эди. Агар технологияни бошқаларга тақлид қилиб танласак, Windowsни ишлатишимиз лозим. Яъни технологияни танлаганда, бошқалар нимани ишлатишидан қатъий назар, энг яхши натижа берадиган асбоб ва технологияларни қўллаш зарур.
Ва бу айниқса стартаплар учун ўта муҳим ҳақиқат. Катта компанияда бошқа катта компанияларда қилинадиган ишларни бажариш мумкин. Лекин янги очилган корхоналар қолган корхоналардек ишлаши, тақлид қилиши мумкин. Эмас. Манимча кўпчилик одамлар буни англаб етмайдилар, ҳатто стартаплардаям.
Ўртаҳол катта компания йилига 10% ўсади. Демак, катта компанияни бошқараётган бўлсангиз ва ўртаҳол катта компанияда кутиладиган амалларни бажарсангиз, ўртаҳол катта ширкат тезлигида ўсишни кутишингиз мумкин, ўн фоиз йилига.
Стартапни қураётганингизда ҳам айни шунга ўҳшаш натижани кутса бўлади. Агар ўртаҳол стартапдака йўл тутсангиз, натижалар ҳам ўртаҳол бўлади. Муаммо шундаки, ўртаҳол ривожланиш билан бизнесингиз инқирозга учрайди. Стартаплар учун бозорда қолиш, яшаб қолиш даражаси эллик фоиздан камдир. Демак, стартапни бошқарганингизда, ғалати ва фавқулотда ҳаракат қилишингиз мақсадга мувофиқдир. Бўлмасам, қийин бўлади.
1995 йилда биз битта нарсани билар эдик -- ўзимизнинг серверда ишлайдиган дастурий таъминотни исталган тилда ёзишимиз мумкин. Рақибларимиз эса буни англашмас эди. Ҳозир ҳам жуда камчилиги буни тушуниб етишлигидан ҳавотирдаман. Қўлланувчи компютерида ишлайдиган дастур ёзаётганда, операцион тизим ёзилган дастурлаш тили ва технологияларни ишлатиш яхши натижаларни беради. Ўн йил олдин дастур ёзиш дегани, дастурни Cда ёзиш дегани эди. Лекин веб дастурий таъминотига келсак, айниқса дастурлаш тили ва операцион тизим кодлари қўлингизда бўлса, бундай дастурий комплексларни исталган тилда ёзиш мумкин.
Лекин бу янги озодлик икки тарафли тиғга эга қиличга ўҳшайди. Исталган тилни қўллаш мумкин бўлган тақдирда, қайси тилни танлаш саволи туғилади. Ҳеч нарса ўзгармади, деб юрган компаниялар жуда қаттиқ янглишадилар.
Исталган тилди қўллаш имкони бор пайтда, қайси тилди ишлатар эдингиз? Биз Lispни танладик. Сабаблардан бири, тезкорлик билан дастурни ривожлантириш ушбу бозорда муҳим рол ўйнашини билар эдик. Биз ҳаммамиз ишни нолдан бошлаётган эдик, шунинг учун янги имкониятларни рақибларидан тезроқ бозорга чиқара оладиган компания кучлироқ бўларди. Lisp тез дастурлашга жуда ҳам мослигини билар эдик, серверда ишлайдиган дастурлар эса тезкор жараёнларни кучайтирар эди ҳам -- янгиликлар киритилиши билан қўлланувчилар уларни кўра оларди.
Бошқа компаниялар Lispни ишлатишни хоҳламаганлари яхши ҳам бўлди. Бу биздаги технологик афзаллик эди, ўша пайтларда эса биз барча имкониятлардан фойдаланишимиз лозим эди. Viawebни ташкил қилганимизда бизнесда ҳеч қандай тажрибамиз йўқ эди. Маркетинг, кадрлар, маблағ йиғиш ва ҳоказолар ҳақида хабаримиз йўқ эди. Ҳеч қайси биримиз сиз биладиган "ростмана" ишда ишламаган эдик. Қўлимиздан фақат дастур ёзиш келар эди. Ва бу нарса бизни қутқаради, деб ишонган эдик. Дастурлашдаги барча имконларни ишга солиш ниятида эдик.
Lispни ишлатганимизни эксперимент, деб қарашингиз мумкин. Бизнинг гипотеза қуйидагича эди -- агар Lispни танласак, рақибларимиздан кўра тезроқ янги қўшимчаларни киритишимиз мумкин бўлади, ундан ташқари, уларнинг қўлидан келмайдиган нарсаларни ҳам ёзишга имкон туғилади. Lisp жуда абстракт ва юқори даражадаги тил бўлгани учун жамоамизга ҳам кўп одам лозим бўлмайди. Агар бу ўйлаганларимиз тўғри чиқса, ҳаражатларимиз кам, фойдамиз эса етарли бўларди. Рақибларимиздан ҳам ўзган бўлардик. Булар ҳаммаси бизнинг ҳаёлимиз эди.
Ушбу эксперимент натижалари нима берди? Ажойиб жойи шуки, бизнинг гипотеза деярли тўғри бўлиб чиқди. Ҳақиқатда ҳам бизнинг бозорда 20-30 рақиб компания шаклланди. Лекин ҳеч бирининг дастурий таъминоти бизнинг тизим олдида ип еча олмасди. Бизда онлайн wysiwyg (график) дўкон конструктори бор эди, ишлаши эса ҳудди десктоп дастурдек тезкор эди. Рақибларимиз эса cgi скриптларни ишлатар эдилар. Дастуримиз имкониятлар жиҳатидан ҳам олдида эди. Гоҳида рақиб компаниялар бизларда бўлмаган функционал киритишар эди, аммо Lispда дастурга қўшимча қўшиш вақти шунчалик қисқа эдики, рақибимиз янгилигини пресс-релизда эълон қилиб, журналистлар биз билан боғлангунча, ушбу янгилик бизнинг дастуримизда ҳам пайдо бўларди.
Рақибларимиз бизда қандайдир махфий қурол бор, деб ўйлашган бўлса керак -- Enigma машинасими... Албатта бизда бундай қурол бор эди, лекин у анча соддароқ нарса эди. Бизга ҳеч ким рақибларимизда бўлаётган жараёнларни еткизмади. Фақатгина бизнинг ишлаш тезлигимиз кутилганидан анча катта эди.
Тўққиз ёшлигимда Фредерик Форсайтнинг Чия бўри куни номли асарини ўқиган эдим. Бош қаҳрамон полиция олдидан қари чол кўринишида, ҳасса кўтариб ўтиб кетади. Полиция эса буни фаҳмламайди ҳам.
Бизнинг махфий қуролимиз ҳам шу каби эди. Биз дастурларимизни ғалати, сунъий интелект лойиҳалари учун ишлатилинадиган, синтаксини қавсларга тўла ҳуник тилда ёзар эдик. давомида Lispни шундай таърифланиши ғашимча тегар эди. Энди эса бу бизнинг фойдамизга эди. Бизнесда рақиблар тушунмайдиган техник устунликдан қийматлироқ нарса йўқ; урушдагидек, кутилмаганда зарба бериш куч каби муҳимдир.
Ман ҳижолат бўлсам ҳам этишим лозим, ўша пайтларда, Viawebда ишлаганимизда, Lisp ҳақида ҳеч бир ерда гапирмаган эдик. Прессада оғиз очмаганмиз, сайтимизда излаганингизда ҳам фақат икки марта Lisp сўзини менинг таржимаи ҳолимда учратишингиз мумкин эди. Бу тасодиф эмасди – стартап рақибларига иложи борича кам информация бериши лозим. (Иккита одам билган нарсани чўчқа ҳам билади. – Б. И.) Агар улар биз қайси дастур қўллашимиздан бехабар бўлсалар, ё улар учун бунинг аҳамияти бўлмаса, мен ушбу ҳолатни сақлаб қолмоқчи эдим. [2]
Технологиямизни энг яхши тушунган гуруҳ бу мижозларимиз эди. Улар учун қайси тил қўлланилганининг аҳамияти йўқ эди, лекин дастур жуда яхши ишларди. Дастуримиз ёрдамида мижозларимиз чиройли онлайн дўкон-сайтларни дақиқалар ичида туза олар эдилар. Бунинг натижасида, оғиздан-оғизга ўтиб, мижозларимиз сони ҳам ошиб борди. 1996 йил оҳирида 70-та мижозимиз, 1997 йил оҳирида эса 500-та мижозимиз бор эди. Олти ойдан кейин эса, Yahoo бизни сотиб олганда, қўлланувчимиз сони 1070-та эди. Бугун ҳам, Yahoo дўконлари номи остида, ушбу дастур бозорда етакчи ўринни эгаллаб келмоқда. Ушбу бизнес Yahooнинг фойдаси катта қисмларидандир. 1999 йилда Yahooдан кетаётганимда қўлланувчилар сони йигирма мингдан зиёд эди.
Blub парадокси
Lispнинг нимаси шунчалик зўр? Ва агар зўр бўлса, нима учун ҳамма уни ишлатмайди? Булар риторик саволлардек туюлади, лекин аниқ жавоблари мавжуд. Lispнинг кучли томони фанатларгина тушунадиган абстракт ҳусусияти эмас, балки мавжуд тилларнинг ичида энг кучлиги бўлганидадир. Ҳамма ҳам уни қўлламаслигига сабаб эса, дастурлар тиллари фақатгина технология бўлиб қолмай, балки фикрлаш усулидир, бу эса секин ўзгаради. Албатта ушбу икки жавоб тушунтириш талаб этади.
Мен ажабланадиган постулатдан бошлайман: дастурлаш тиллари кучга (қувватга) қараб фарқланади.
Барчага аён, юқори савиядаги тиллар машина тилидан кучлироқ. Кўпчилик дастурчилар машина тилида дастур ёзишдан қочишади албатта. Унинг ўрнига юқоди савиядаги тилда дастурлаб, компилятор ёрдамида дастур кодини машина тилига таржима қилиш керак. Ушбу фикр аппарат таъминот даражасида ҳам тадбиқ қилинган – 1980 йиллардан бошлаб, марказий процессор инструкциялари компиляторлар учун оптимизация қилинадиган бўлган, инсон дастурчиларга эмас.
Дастурни тамомила машина тилида дастурлаш хатолигини ҳар ким билади. Лекин ҳар ким фаҳмламайдиган бошқа бир умумий қоида бор бу ерда – бир неча дастурлаш тили орасида танлаш имкони бўлса, барча шартлар тенг бўлганда, энг кучли тилни танлаш зарурдир.
Ушбу қоиданинг талайгина истиснолари бор, ҳақиқатан ҳам. Агар ёзиладиган дастур маълум бир дастурлаш тилида ёзилган программа билан яқиндан ишлаши керак бўлса, у ҳолда ушбу қўлланилган тилни ишлатиш мақсадга мувофиқ бўлиши мумкин. Содда ва чекланган операцияларни бажарадиган дастур ёзиш керак бўлса (масалан, арифметик операциялар, ҳисоблашлар ва ҳ. к.), абстракция савияси пастроқ бўлган дастурлаш тилини ишлатиш яхши натижа бериши, камида тезроқ ишлаши мумкин. Кичкина, бир мартагина ишлатиладиган дастурлар учун ҳам истисно қилиб, зарур иш учун энг мос кутубхонага эга тилни танлаш мақсадга мувофиқ. Лекин, умуман олганда, амалий дастурлар учун мавжуд бўлган энг кучли дастурлаш тилни ишлатиш зарур, бошқа тилни ишлатиш эса хатодир, албатта машина тилини ишлатишдек катта хато бўлмаса ҳам.
Машина тили абстракция даражаси бўйича жуда қуйи ўринда туради. Лекин анъана тариқасида барча юқори савиядаги тилларнинг кучи бир, деб қабул қилинади. Бу эса ҳақиқатдан узоқ. Умуман олганда "юқори савиядаги тил" (high-level language) атамаси катта аниқликга эга эмас. Машина тилларини ва юқори савиядаги тилларни ажратувчи аниқ бир чегара мавжуд эмас. Тиллар абстракция ўқи бўйича кучига қараб жойлашган. Энг бир томонда энг кучли тиллар бўлса, уларга қарама-қарши томонда эса машина тиллари (улар ҳам ўз навбатида қувватига қараб фарқланади).
Cobolни олайлик. Cobol юқори савия дастурлаш тили, агар уни машина тилига компиляция қилинишини инобатга олсак. Лекин Cobol мисол учун Python олдига кучи бўйича яқинлаша олмайди ҳам, Cobol бу борада машина тилларига яқинроқ, десак муболаға бўлмайди.
Ёки Perl 4ни олайлик. Perl 4 ва Perl 5 орасида ушбу тилга лексик ўрамлар (lexical closures) қўшилди. Кўпчилик Perl хакерлари Perl 4дан кўра Perl 5нинг қўввати юқорироқ, дейди. Демак, биз юқори савиядаги тилларнинг барчаси тенгмаслини тан олишимиз лозим. Ва бундан чиқадиган қўшимча ҳулоса шуки, баъзи бир истиснолардан ташқари, биз имконимиз бўлган энг кучли тилни ишлатишимиз лозим.
Бироқ ушбу фикр камдан-кам ҳолларда оҳиригача етказилади. Маълум бир ёшдан кейин дастурчилар деярли ишлаб турган тилларини ўзгартирмайдилар ўз ҳохишлари билан. Ишлатмоқда бўлган тилни етарли даражада кучли, деб билишади.
Программистлар ёқтирадиган тилларига нисбатан ҳис-туйғулари кучли бўлади, шунинг учун, ҳеч кимни ҳафа қилмаслик мақсадида, фикримни ҳаёлий Blub дастурлаш тилида тушунтиришга ҳаракат қиламан. Blub абстракция ўқининг нақд ўртасида жойлашган. Жуда кучли тил бўлмаса ҳам, машина тили ё Cobolдан кучлироқ, деб қабул қилайлик.
Ва албатта, бизнинг фаразий Blub дастурчимиз машина тилида ишламайди, Cobolга келсак, дастурчимиз ушбу тилда ким ҳам ишлаши мумкин, деган саволни беради. Cobol ҳатто "X" имкониятга эга эмас-ку (Blubнинг сиз истаган ҳусусияти).
Blub дастурчимиз абстракция ўқи бўйича кучсизроқ тилларга қараганда, улар қуввати Blubникидан камлигини англаб етади. Blubдан кучсизроқ тиллар яққол кўриниб туради, чунки улар Blubда бор баъзи имкониятларга эга эмас. Лекин ушбу ўқ бўйича Blubдан қувватлироқ дастурлаш тилларига қараганда, улар кучли эканини тушунмайди ва кўра олмайди. Кўрган нарсалари фақатгина ғалати тиллардир. Ушбу тилларни Blub каби кучга эга, деб қабул қилиши ҳам мумкин. Лекин қандайдир ғароиб ҳусусият ёки синтаксис элементлари аралашган, деб ўйлайди. Blub унинг учун етарли, чунки у Blubда фикрлайди.
Лекин биз кучлироқ тилда дастурлайдиган программистни олиб қарасак, у Blubга юқоридан қарашини англаймиз. Ўз навбатида ушбу дастурчи Blubда фойдали ҳеч бир нарса қилиш мумкин эмас, деган фикрга эгадир. Blubда ҳатто "y" йўқ-ку.
Ушбу ўҳшатиш натижасида биз қуйидаги ҳулосага келамиз: тилларнинг қуввати орасидаги фарқни кўраса оладиган ягона дастурчилар гуруҳи энг кучли тилда ишлайдиган мутахассислардир. (Эрик Реймонд Lispни англаш сени яхшироқ дастурчи қилади, деб шу фикрни этган бўлса керак.) Бошқаларни фикрига ишониш алдайди, ва бунга сабаб Blub парадоксидир, улар ўзлари ишлатаётган тилдан қониқадилар, чунки ушбу тил уларнинг фикрлаш чегараларини белгилайди.
Мен буни ўз тажрибамдан биламан. Мактаб ўқувчиси бўла туриб, Basicда дастурлар ёзар эдим. Ушбу тилда ҳатто рекурсия ҳам йўқ эди. Рекурсиясиз дастурлашни фараз ҳам қилиш қийин, лекин ўша пайтларда у менга керак эмасди. Мен Basicда фикрлардим, у менга етарли эди.
Эрик Реймонд ўрганиш учун тавсия қилган бешта тил абстракция ўқининг турли мақомларида жойлашган. Уларнинг қувватларининг бир-бирига нисбати ҳис-туйғуларга бой баҳсни келтириб чиқаради. Лекин мен этмоқчи бўлган нарса, Lisp энг юқорида туради (энг қувватли). Ва ушбу фикримни исботлаш учун мен бир нарсани сўрайман, қандай қилиб бошқа тилларда, масалан макроларсиз, дастурлаш мумкин? [5]
Кўп тиллар макро номли функционалга эга. Лекин Lisp макролари ажралиб туради. Ва ишонасми, йўқми, улар бажарадиган иш қавсларга алоқалидир. Lisp иҳтирочилари шунча қавсларни бошқа тиллардан ажралиб туриш учун киритишмаган. Blub дастурчиси учун Lispдаги қасвлар ғалати бўлиб туюлади. Лекин ушбу қавсларни қўллашдан мақсад бор. Улар Lisp ва бошқа тиллар орасидаги фундаментал фарқни кўрсатади.
Lisp коди маълумот объектларидан ташкил топган. Бу дегани оддий ҳарфлар қатори маъносида эмас. Lisp коди парсер томонидан ўқилгандан кейин, бир-бирига боғлиқ маълумот структураларидан ташкил топади.
Агар компилятор ишлашини тушунсангиз, ҳақиқатда Lispнинг синтаксиси ғароиб эмас, балки Lisp ҳеч қандай синтаксисга эга эмаслиги кўринади. Бошқа тиллар компилятор ёрдамида грамматик таҳлил дарахтларига ўтказилади, (parse tree) Lispда эса сиз тўғридан-тўғри ушбу структураларда дастур ёзасиз. Ушбу дастурлаш структуралари – грамматик таҳлил дарахтлари билан, дастурингиз ичидан ишлай оласиз. Уларни бошқара оладиган дастурлар тузишингиз мумкин. Lispда бундай дастурлар макролар, деб аталади. Улар дастур ёзадиган дастурлардир.
Дастур ёзадиган дастурларни қачон ишлатасиз? Агар Cobolда фикр қилсангиз, деярли ҳеч қачон. Ҳар доим, Lispда ишласангиз. Бундай дастурга мисол бериш мумкин, лекин ушбу мақолала ўрни эмас, деб ўйлайман, чунки бу мавзу анча мураккаб, қизиққанлар менинг Ansi Common Lisp номли қўлланмамга мурожаат қилишсин (лекин у ерда қам макролар 160-бетдан бошланган).
Лекин шунда ҳам ишонтирадиган гап этмоқчиман. Viaweb таҳрирлаш дастурининг 20-25% коди макролардан иборат эди. Макроларни ёзиш оддий фукнцияларни ёзишдан мураккаброқдир. Уларни керак-керакмас жойда ишлатиш эса яхши дастурлаш одатига кирмайди. Демак, амин бўлишингиз мумкин, таҳрирчида ишлатилган макролар ўз ўрнида, фақат керакли пайтда қўлланилган. Бунинг маъноси шуки, ушбу дастурнинг 20-25% коди бошқа дастурлаш тилларида осонликча қилолмайдиган ишларни бажармоқда.Blub дастурчиси қанчали ишонмасин, ушбу далил унга қизиқ туюлиши лозим. Ушбу макроларни ўзимизни ҳурсанд қилиш учун ёзмадик. Биз кичик стартап эдик, рақибларимиздан бизни ажратадиган иложи борича каттароқ техник тўсиқларни қуришга интилар эдик.
Синчковлик билан фикр юритадиган одам учун бу ерда қизиқ боғлиқлик мавжуд. Кодимизнинг катта қисми бошқа тилларда бажарилиши жуда мушкул бўлган ишларди амалга оширарди. Натижада бизнинг дастуримиз рақибларимиз дастури қила олмайдиган вазифаларни бажарди. Яъни бу масалани чуқурроқ ўрганишга таклиф қиламан сизларни.
Стартаплар айкидоси
Мен йигирма бешдан катта у-бу кимни Lispни ўрганишга қизиқтира оламан, деб ишонмайман. Ушбу мақоладан мақсад, бировни фикрини ўзгартириш эмас, балки Lisp кучли тиллигига ишонган, лекин унинг кам тарқалганлигидан ҳавотирга тушганларни ишончини кучайтиришдир. Рақобатли вазиятда бу ютуқдир. Lispнинг кучи уни рақиблар тушунмаслиги билан ошади.
Lispни стартапда ишлатмоқчи бўлсангиз, унинг кенг тарқалмаганлиги сизни ўйлантирмаслиги керак. Билакс, бу ҳол шундай сақланиб қолишига умид қилишингиз зарур. Ва бунинг эҳтимоли катта ҳам. Дастурлаш тилларининг табияти шуки, кўпчилик мутахассислар ҳозирда ишлатиб келаётган қуролларини етарли, деб биладилар. Компютер ускуналари шахсий одатлардан кўра шунчалик тезроқ ўзгаради-ки, дастурлаш усуллари процессорлардан 10-15 йил ортда юради. Массачусетс технологик институтида 1960 йиллардаёқ юқори савияли дастурлаш тилларида ёзишни бошлашларига қарамай, баъзи бир компаниялар 1980 йилларда ҳам машина тилида дастур тузишни давом этишган. Улар ҳали ҳам машина тилини қўллашни давом эттирар эдилар, агар замонавий процессорлар RISC буйруқ тўпламига ўтмасайди.
Оддий технологиялар тез ўзгаради. Лекин дастурлаш тиллари фарқлидир: улар фақатгина технология эмас, балки дастурчиларнинг фикрлаш усулидир. Улар ярим технология, ярим ақидадир. [6] Шу тариқа ўртача тил, яъни ўртача дастурчи ишлатадиган дастурлаш тили, айсберг каби секин ҳаракатланади ва ўзгаради. Аҳлат тозалаш (Garbage collection) Lispда 1960 йиллардан бошлаб қўлланилиб келинади ва ҳозирда яхши фикр, деб қабул қилинган ва кенг тарқалган. Динамик типлаштириш (dynamic typing) ҳам ҳозирда оммалашяпти. Лексик ўрамлар (lexical closures) эса, Lispда 1970 йиллар бошида киритилишига қарамасдан, бошқа тилларда энди маълум бўлаяпти. 1960 йилларнинг ўртасида Lispда пайдо бўлган макролар эса ҳали ҳам тарқалмади.
Кўриниб турибдики, ўртача тил жуда катта инерцияга эга. Мен ушбу кучга қарши чиқишни таклиф этмаяпман. Аксинча, ҳудди айкидока сингари, ушбу фикр ва ҳаёл инертлигини рақибларга қарши ишлатиш мумкин.
Агар катта фирмада ишласангиз, бу мушкул иш бўлиши мумкин. нингизни Lisp ишлатишга кўндира олмаслигингиз эҳтимоли катта. Айниқса, агар у бошқа бир тил дунёни эгаллашини, ҳудди Ада 20 йил илгари каби, газетада ўқиб олган бўлса. Аммо сиз кичик стартапда ишлаётган ва ҳали босс орттирмаган бўлсангиз, унда Blub парадоксини муваффақиятга эришиш учун қўллашингиз мумкин: ўртача тилга боғланган рақибларингиз тушуна олмайдиган технологияни қўллашга ҳақлисиз.
Агар стартапда ишлай бошласангиз, сизга маслаҳат – рақибларингиз савиясини билиш учун улар сайтидаги вакансиялар рўйҳатини кўриб чиқинг. Бошқа барча саҳифалар умумий гап бўлиши мумкин. Лекин ушбу рўйҳат аниқ бўлмоғи шарт, йўқса улар ҳунари ишга тўғри келмайдиган мутахассисларни ёллашади.
Viawebда ишлаган пайтларим жуда кўп вакансияларни кўриб чиқганман. Янги рақиб ҳар бир-икки ойда пайдо бўларди. Қиладиган биринчи ишим, уларнинг янги иш жойлари бўйича таклифларини кўриб чиқардим. Икки йилдавомида шу ишни бажарганимдан кейин, қайси рақиб ростанам келажакда кучли компанияга айланишини олдиндан таҳмин қила оладиган бўлдим. Информацион технологиялар туркумидан иш таклифлари кўпроқ бўлса, бундай компаниялар хавфи камроқ бўларди. Энг хавфсизлари, Oracle мутахассисларини талаб этувчилари эди. Улар ҳақида ҳеч ҳавотир бўлмаса бўларди. C++ ва Java дастурчиларини сўраганлари ҳам ҳавотирли эмасди. Агар улар Perl ё Python дастурчиларни излаётган бўлса, қўрқинчли эди. Чунки камида ишнинг техник тарафи ростмана хакерлар томонидан бошқарилиши аён эди. Lispчиларни қидирса эди, бу жуда хавфли бўлар эди.
Шарҳлар
[1] – Viaweb бошида икки қисмдан иборат эди: Lispда ёзилган таҳрирчи (одамлар бу дастур ёрдамида ўз сайтларини тузишар эди) ва Cда ёзилган буюртмалар бериш модули. Биринчи версия асосан Lispда ёзилган эди, чунки буюртмалар қисми кичик эди. Кейинчалик эса қўшимча иккита модул ёзилди: расмлар генератори (C), ва администратор портали (Perl).
2003 й. январида Yahoo таҳрирчининг янги версиясини чоп этди, у C++ ва Perlда ёзилган эди. Ушбу иш анча машаққатли бўлган бўлиши керак, чунки улар деярли Lisp интерпретаторини янгитдан ёзиб чиқишлари керак эди.
[2] – Роберт Моррис фикрима, мен унчалик шпиономан бўлмасам ҳам бўларди – Lisp ишлатишимизни махфий ушламасак ҳам бўларди, чунки рақибларимиз ақилли бўлганида, улар ҳам Lispни ўша пайтда ишлатган бўлардилар.
[3] – Тюринг тести маъноси барча тиллар қувват ва куч жиҳатидан эквивалентдир, лекин бу дастурчилар учун керак бўлган куч эмас. (Ҳеч ким Тюринг машинасини дастурлашни ҳохламайди.) Дастурчиларни қизиқтирадиган кучни формал кўринишда белгилаш қийин бўлиши мумкин, бундай кучни тасвирлайдиган бўлсак, маълум бир тилдаги кучни қўлга киритиш учун бошқа (кучсизроқ) тилда ушбу биринчи тилнинг интерпретаторини ёзиш лозим бўлади. Агар А тили сатрлардаги бўшлиқ белгиларини олиб ташлайдиган функцияга эга бўлса-ю, Б тилида бундай фукнция бўлмаса, А тили Бдан кўра кучлироқ дейиш муболаға бўлади, чунки Б тилда ушбу имкониятни процедура ё функциялар ёрдамида амалга оширса бўлади. Лекин А рекурсияни ишлатса ва Б тилда ушбу имконият бўлмаса, у тақдирда оддий кутубхона функциялари ёрдамида бу функционалга эришиш қийин масала бўлиб қолади.
[4] – "Уламолар" учун эслатма: балки ўқ эмас, панжа шаклида фараз қилиш мумкин, муҳими, элементларнинг сараланганидир.
[5] – Макроларни алоҳида функционал, деб қараш озгина нотўғридир. Уларнинг имкониятларини Lispнинг бошқа ҳусусиятлари, лексик ўрамлар ва ҳ. к., сезиларли даражада кучайтиради.
[6] – Шунинг учун дастурлаш тилларини солиштириш ё диний урушлар кўринишини олади, ё антропология бўйича илмий иш каби нейтрал бўлган бакалавр дарскликлари бўлиб чиқади. Тинчликпарвар инсонлар ушбу мавзуни айланиб ўтадилар, лекин бу масала фақат ярмигагина диний; ўрганишга лойиқ нарсалар кўп бунда, айниқса янги тилларни лойиқалаштирадиган бўлсангиз.
Атамалар рўйҳати
- Стартап
- Startup, янги очилган ширкат, компания. Олдинлари ҳам стартаплар мавжуд бўлишига қарамай, информацион технологиялари даврида янада кучлироқ маъно билан қайтиб келди.
- Enigma
- Иккинчи жаҳон уриши даврида немисларнинг махфий маълумотларни шифрлаш машинаси.