Страст към програмирането

Crowdsourced превод на книгата е в github, присъединете се към нас.

Глава 15

Когато бях студент в музикален колеж, прекарвах дълги нощи в стените му. През тънките стени на стаите бях потопен в най-ужасните музикални звуци, които можете да си представите. Не че музикантите от колежа бяха толкова лоши. Обратно. Но се упражняваха.

Когато практикувате,не трябвада звучи добре. Ако успеете по време на практически упражнения, това означава, че не мобилизирате всичките си сили. За това е необходима практика. Същото е и в спорта. Спортистите се изтощават по време на тренировка, за да се отличат в състезанието. Правят грешки, но при затворени врати, а не на работа.

ИТ често търси разработчици, които се възползват максимално от техните възможности. За съжаление обикновено този разработчик не е достатъчно квалифициран, за да свърши работата, за която е нает. Нашата индустрия има тенденция да практикува, докато работим. Можете ли да си представите професионален музикант, който ще излезе на сцената и ще повтори това, което съм чувал в часовете си в музикалния колеж? Той нямаше да бъде разбран. На музикантите се плащаза концерти, а не за тренировки. Като боец, като боксьор, ако падне от умора по време на битка, няма да може да се развива в този спорт.

Като индустрия се нуждаем от време за практика. Тук на Запад местните програмисти често произвеждат код с по-високо качество от чуждите компании. Ако се опитваме да се конкурираме в качеството, трябва да спрем да използваме работното време за практика. Трябва даинвестираме времев нашия проект.

Преди няколко години започнахекспериментирам със задачи по програмиране след уроците ми по музика. Правило номер едно беше, че софтуерът, който разработих, не беше нещо, което исках да използвам сам. Не исках да довърша работата. Така че написах безполезен софтуер.

Не опитах, но с разочарование установих, че много от идеите ми не работят. Въпреки че се опитах да свърша възможно най-добрата работа, дизайнът и кодът не бяха толкова красиви, колкото си мислех, че трябва да бъдат.

Поглеждайки назад, виждам, че изпитаното тогава странно чувство предполага, че преживяването е добър знак. Моят код не беше напълно лишен от финес. Но напрегнах мозъка си и създадох свои собствени части от код. Точно както при свиренето на саксофон, ако на практика нямаше нищо друго освен добър звук, знаех, че не се старая достатъчно. Освен това, когато пишех код, ако това доведе само до красив код, вероятно бях някъдев центърана моите мисловни способности, вместо на ръба, където е мястото за добра практика.

- физика/координация - четене от поглед - импровизация

Това може да послужи като рамка за едностранчиво мислене на практиката като разработка на софтуер.

Музикантите трябва да практикуват техническите аспекти на своите музикални инструменти: звукоизвеждането, физическата координация (да карат пръстите да се движат лесно например), скоростта и точността са важни на практика. Какъв еквивалент имат разработчиците на софтуер в сравнение с тези основи на музиката? Какво има в прашните ъгли на вашия език за програмиране, на което рядко обръщате внимание? Например вашият език за програмиране поддържа ли регулярни изрази? Регулярните изрази са много мощни и позорнинедостатъчно използван инструмент в много среди за разработка. Много често разработчиците не ги използват, когато могат, защото нямат достатъчно познания, за да използват ефективно регулярните изрази. В резултат на това се създава много ненужен код за анализиране на низове (ненужен код за анализиране на низове), който трябва да се поддържа в бъдеще.

Същото важи и за API на вашия език за програмиране или библиотеки с функции. Ако нямате под пръстите си много инструменти за среда за разработка (както казват музикантите), едва ли ще започнете да ги използвате, когато наистина имате нужда от тях. Опитайте се наистина да се задълбочите, например, как работи многопоточното програмиране в избраната от вас среда за разработка. Или какво да кажем за библиотеки с нишки, API за мрежово програмиране или дори набор от помощни програми, налични за работа със списъци или колекции? Повечето съвременни езици за програмиране предлагат богати и мощни библиотеки във всички тези области, но разработчиците на софтуер предпочитат да научат малка част, с която могат да пишат същия код по-малко ефективно, отколкото биха могли да пишат с пълния набор от инструменти, които са им достъпни.

Що се отнася до разработчиците на софтуер, какво може да означава за тях четенето на код от очите? Или спецификация или изисквания за дизайн? Страхотно място за намиране на нов код, с който да практикувате, е общността с отворен код. Имате ли любими примери за софтуер с отворен код? Какво ще кажете да опитате да добавите нещо? Погледнете списъка със задачи за вашия софтуер с отворен код и си дайте ограничено време за добавяне на нови функции (или поне определете какво трябва да се добави).

След като изберете, изтеглете изходния код на софтуера и започнете да проучвате. Как да разберете къде да търсите? Какви трикове използвате, за да се ориентирате в значителна част от кода? Къде е началната ви точка?

Това е упражнение, което можете да практикувате често и за кратки периоди от време. Виене трябвавсъщност да разработвате нищо. Просто използвайте това като отправна точка. Истинската цел е да разберете какво търсите възможно най-бързо. Уверете се, че работите с различен софтуер. Опитайте се да използвате различни видове софтуер в различни стилове и с различни езици за програмиране. Обърнете внимание какво работи най-добре за вас и какво ви затруднява. Какви модели ви помагат да работите с код? Коя навигационна пътека, образно казано, ви помага да се движите нагоре и надолу в стека на повикванията на сложна област или функционалност?

Импровизация означава да вземете някаква структура или препятствие и да създадете нещо ново, в движение, върху тази структура. Като програмист установих, че импровизирам най-често по време на стресови ситуации.О, не! Сървърът на приложения за безжична мрежа не работи и губим поръчки!Тогава се случват някои от най-креативните импровизирани програми. Когато правите луди неща като възстановяване на изгубени данни чрез ръчно заместване на безжични мрежови пакети от двоичен файл. Никой не те е подготвил за това, особено в момент като този. Това умение за рязко и бързо програмиране е като магическа сила, ако се използва навреме.

Чудесен начин да подобрите уменията си за импровизация при писане на код е да се справите със самоналожените ограничения. Изберете проста програма и се опитайте да я напишете с тези ограничения. Любимото ми упражнение е да напиша програмакойто показва текста на старата песен "99 бутилки бира на стената"//Прим. прев.: линкове към youtube - тук няма бира, но има;). Как бихте могли да напишете тази програма без присвояване на променливи? Или колко малка програма можете да напишете, която отпечатва правилния текст? Нека добавим ограничение - колкобързоможете да напишете такава програма? Какво ще кажете за решаване на малки, сложни задачи с таймер?

Това е само една от ограничените перспективи за това как човек може да практикува. Можете да намерите примери във всяка област, от изкуството до монашеските религиозни практики. Важно е да откриетевашитенужди от практика и се уверете, че не практикувате, докато работите.Виетрябва да отделите време за практика. Това евашаотговорност.

1. Топ кодер - topcoder.com е сайт за състезания по програмиране. Можете да създадете акаунт и да се състезавате за награди. Дори и да не се интересувате от състезание с други, TopCoder предлага стая за упражнения с голяма колекция от проблеми, които можете перфектно да използвате като практически сесии. Регистрирайте се и опитайте!

И тук можете да получите грант за тестов период на Yandex.Cloud. Необходимо е само да въведете "Habr" в полето "секретна парола".