• У дома
  • статии
  • Умишлена практика: как музиката и рисуването ме научиха да кодирам
публикувано на 28-09-2019
Мелодия от тетрадките на Леонардо Давинци

Умишлена практика: как музиката и рисуването ме научиха да кодирам

Когато за първи път се научих да програмирам, си спомням, че не исках нищо повече от това да тренирам и усъвършенствам. Имаше само един проблем: как, по дяволите, практикувате програмиране?

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

Съсредоточете се върху основите

Какво учим?

Ако обичате алгоритмите и искам да кажа наистина, наистина се събуждате сутрин и нямате търпение да копаете ръцете си в сегментни дървета и рекурсия - тогава поздравления. Вие сте кодиращият еднорог, към който всички се стремим. Останалите от нас хора трябва да се борят с въпроса: защо изобщо да се занимаваме с кодиране на пъзели? Дали просто да мине технически интервюта?

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

Бих искал да твърдя, че предизвикателствата при кодирането не са само преподаване на конкретен урок (например как да се пресече двоично дърво за търсене), но и на основния процес на инженерство. С други думи, те са насочени към основните умения.

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

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

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

Какво умеят хората

Чуйте ме: опитен художник не знае как да нарисува пейзаж на Централния парк през есента. Вместо това квалифициран художник знае как да рисува светлина върху форма.

Опитният художник не знае как да рисува листа по дървета. Квалифициран художник знае как се държи цветът.

По същия начин, квалифициран програмист не знае само как да се ориентира в React, Vue, Ember или каквото и да е горещата рамка след година. Квалифициран програмист разбира ваниловия JavaScript и как работи браузърът. Квалифициран програмист разбира предимствата на функционалното програмиране, модела на потока и защо си струва да използвате React на първо място. Знанието има свои собствени зависимости.

Научете основите, а останалото е гравитачно.

Живопис от живота

Копиране и поставяне спрямо основния източник

Живописците, които познавам, тези, които са наистина сериозни към занаята си, винаги рисуват от живота. Какво означава това? Да рисуваш от живота означава, че художникът рисува действителното нещо пред очите си, независимо дали това е модел, пейзажът напред или натюрморт.

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

Да погледнете нечия картина на залез, вместо сами да стоите на открито, означава, че копирате решение, а не да го измисляте. Това е еквивалент на фрагменти за копиране и поставяне от Stack Overflow.

Копирането и поставяне на код никога няма да има достъп до основните знания. Когато копирате решението на някой друг проблем, получавате решението, но не и опитът. Липсва ви упоритата работа за постигане на конкретно решение. Липсва ви да научите умение.

Преносими знания

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

Решенията рядко са едноразмерни. За да се оформят решения, които да отговарят на техния контекст, се изисква умение - и това умение може да се научи само по трудния начин.

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

Практикувайте вашите везни

Целенасочено повторение

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

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

Въпреки че сляпото повторение е неефективен начин за учене, целенасоченото повторение може да предложи огромни ползи, особено за начинаещи. Опитните програмисти могат да приемат за даденост плавността, с която навигират в Git или bash терминал.

За начинаещия обаче повтарянето на тези основни умения и получаването на форма на „мускулна памет“ освобождава познавателните способности на програмиста, така че да може да се съсредоточи върху инженерните проблеми на по-високо ниво.

Консьертос от по-високо ниво

Така че, ако сте нов в определена рамка, да речем Express.js, отделете известно време, практикувайки вашите везни. Определете основните елементи, които тази рамка предоставя. Изградете нещо основно с тях.

Вземете слушане на сървър. Изберете порт. Създайте маршрут. Получаване на заявка. Отговорете с данни. След това, най-накрая, ето ключът: разрушете го и го направете отново.

Когато музикант приключи да свири особено трудна секция, те не си прашат ръцете и казват: „Е, реших го!“. Решението не е в това. Умението, знанието и съоръжението е.

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

Ето как един професионален цигулар, след като практикува всеки мащаб във всеки ключов хиляди повторения, няма нужда да се тревожи за отделни ноти, когато е време за концерт. Въоръжена с тази мускулна памет, тя може вместо това да се съсредоточи върху предизвикателства от по-високо ниво. Фразата. Мелодията. Консиерто.

Проучвания и скици

Ръцете на DaVinci

Ако погледнете списанията на Леонардо ДаВинци, ще намерите многобройни изследвания и скици на ръце. Някои изследвания дори детайлизират мускулатурата и костите. Човек може да се запита: той просто има някаква странна мания за човешката ръка? Защо си направи труда да скицира всичко това?

Ако посетите Метрополитън музей на изкуствата в Ню Йорк, ще намерите безброй картини от натюрморти. Чаши с плодове. Вази с цветя. Всъщност посетете всяко сериозно училище по изкуства и учениците рисуват същите тези предмети. Артистите се опитват да разберат мандарините? Всички ли са начинаещи ботаници?

Не. Това са целенасочени изследвания. Това не е плодът, който се опитват да проумеят. Художниците се опитват да разберат нещо по-основно: светлина и цвят по форма.

По същия начин, моята надежда за начинаещи програмисти (включително и аз!) Е, че нашите „скици за книги“ ще бъдат изпълнени с проучвания за разбиране на определена концепция или проблем на програмирането. Малки приложения, експерименти, каталогизиране на нашите проучвания на софтуерното инженерство.

Програматорска скица

Как се държат обещанията? Какво ще кажете за сравнение с async-wait? Наистина ли всичко в JavaScript е обект, дори нищожен? Как мога да запомня тази функция? Към какъв контекст са свързани стрелките? Ако ще напишете функция на конструктор и да извикате super () във всеки компонент React, не би ли струвало малко проучване в изучаването на класове ES6? Ако пишете async HTTP заявки, не трябва ли да разбирате как работят обещанията?

Всяко едно от тези любопитства може да бъде проучено чрез отваряне на Repl или JSBin. Правенето на малки проучвания на кода може да задълбочи разбирането на по-големите проекти.

Когато художник скицира ръка или купа с плодове, това не е, защото тези теми са особено интересни. Художниците скицират, за да получат разбиране при подготовката за по-големи предизвикателства. Малки експерименти за разбиране на по-големи проблеми.

Погледнете ръцете на Мона Лиза. Те са перфектни.

Портрети и дървета на зависимостта

композиция

Вярвам, че основната задача за всички създатели (включително програмисти) е Composition. Буквално: как да сглобите различни елементи, така че те да се свързват по един сплотен начин?

Има няколко стратегии за това (включително наемане на продуктов мениджър). Една от стратегиите е да изградите парчето си от основния слой нагоре. Започнете със слоя, който има най-малко зависимости. Това може да са вашите модели данни. Ако TDD е вашата вибрация, това може да се започне с тестове.

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

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

Слой от слой

Когато изграждате приложение за пълен стек, вземете слоя си от данни солиден. Пишете тестове. Само тогава можете да преминете към маршрутизация, което ще зависи от този слой данни. Тествайте маршрутите си. Все още няма нужда дори да отваряте браузър. Увереността в бекенда ще позволи увереност в предния край.

Да се ​​надяваме, че когато се притеснявате за радиусите на границите на бутоните, ще имате куп слоя от приложения, които са изградени уверено един върху друг, със зелени отметки за тестване докрай надолу. Струва си да започнете с по-голямата картина преди детайлите.

Код на кодерите.

В крайна сметка, дори при всички тези стратегии, дори ако имате теглото на степента по компютърни науки или увеличаването на кодиращия буткамп, няма заместител за писане на код. Композиторите композират. Художници рисуват. Кодиращ код.

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

Вижте също

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