Как да научим: Най-важното умение за разработчици

Източник: https://themindblower96.wordpress.com/2015/05/21/54/

Да бъдеш ефективен обучаем е поне толкова важно, колкото да бъдеш ефективен кодер.

Когато сте разработчик, работата ви изисква да научите всеки ден - въпреки постоянното примамване на разсейвания като Hacker News, Twitter, Reddit и Facebook.

Постоянно се сблъсквате с нови кодови бази и нови технически предизвикателства по време на работа. Домът не е по-добър, тъй като се справяте с репости за отворен код и лични проекти, всеки със собствени процеси и предизвикателства, за да се справите.

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

Кратка история: ученето е трудно. И все пак, ние трябва да можем да се научим бързо и ефективно, за да процъфтяваме.

През изминалата година преминах от това, че не знам как да използвам дебъгъра на Chrome, до работа като софтуерен инженер за водеща компания за криптовалута. В процеса бързо научих ново умение (кодиране).

Това каза, ученето не ми беше лесно.

Честно казано, всяка нова концепция беше борба. Имаше твърде много неизвестни и твърде много несигурност.

„Как в света е това устойчиво?“ - помислих си аз.

„Ако това трябва да се чувства като всеки ден, ще бъда нещастен. Това наистина ли е моята страст? “

„Нямаше ли да ми е лесно, ако това беше моята страст? Борят ли се художниците да произвеждат изкуство? Писателите ли се борят да напишат страхотна книга? Спортистите се борят да се справят добре в състезание? Трябва ли да се борим, когато преследваме страстите си? “

„Не трябваше ли да изпитвам удоволствие от това?“

Става ли някога по-лесно?

Да, така е. Година по-късно справянето с нови концепции за програмиране все още е „трудно“ в смисъл, че изисква дисциплина и упорит труд.

Но това също се превръща в по-приятен процес, а не в преодоляване.

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

Просто: Промених гледната си точка за учене. Това, което веднъж ме удари като „трудно“, стана „ангажиращо“.

В останалата част от публикацията ще обясня как се е случила тази трансформация.

Само да започнем

Да се ​​научиш да кодираш е най-трудно в началото.

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

Усеща се да се научиш да жонглираш - но да започнеш с осемнадесет пина вместо две.

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

Това не беше необичайно Наблюдавах този процес и като учител: новите понятия обикновено не щракват първия път. Или второто. Или дори десетата.

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

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

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

Ученето е процес, а не цел

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

Проблемът е, че е невъзможно да се знае всичко за каквото и да е, така че гледането на ученето като на състезание води до изгаряне и разочарование.

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

Можете да го сравните с упражнения. Тренировките болят и тогава болката приключва веднага щом тренировката приключи. Но никога не е отишло. Чака ви следващия път, когато тренирате. Освен всеки път, болката става по-малко пронизваща. Научаваш се да се справяш с това. Запознавате се с болката и тя просто става част от рутината. Вие сте възнаградени от по-добро здраве и по-добра физика и сте стимулирани да продължите напред.

Упражнението създава контур за положителна обратна връзка:

Същото важи и за ученето.

Превръщането на обучението в ангажиращ процес

Представете си, че създавате първото си уеб приложение.

Отначало всичко, което имаш, е плашещ, празен редактор на текстове. Задачата за изграждането на приложението изглежда почти непреодолима. Не знаете нищо и имате толкова много да научите, преди да успеете да направите това.

За щастие, все пак решавате да го направите.

Оттам нататък основният ви фокус става да направите една малка стъпка в даден момент.

Първо създавате идея. Какво ще изградиш? Кой е крайният потребител? Какви са ограниченията?

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

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

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

Понякога пишете код.

По-често не сте в застой при някаква грешка или грешка.

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

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

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

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

Ето как растеме. Така се подобряваме. Независимо дали е програмиране, танци, бягане или четене: това не е лесно и никога няма да има време или място, когато сте „готови“ за учене.

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

С други думи, борбата и насладата ще започнат да означават едно и също нещо. Запомнете цикъла:

Един подход за изучаване на технически теми

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

Нека използваме процеса на изучаване на библиотеката React.js като пример.

Каква е мотивацията да науча това?

Първа стъпка: Ще започна с търсене в Google за документацията на React.js и прочетох малко за предисторията и мотивацията на библиотеката.

Познаването на „защо“ зад която и да е тема е невероятно полезно за рамкиране на учебния процес. Той отговаря на въпроси като:

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

Четене и разбиране на основните понятия

Второ, аз прочетох всякакви встъпителни статии или примери, предоставени в документите.

Забележете, че все още не докосвам никакъв код. Четенето и потъването в основните понятия идва преди практическото експериментиране. Невероятно важно е да направя това, защото тя поставя основата за останалото ми обучение.

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

Кодиране за първи път

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

Обикновено се опитвам да създам нещо наистина малко с всеки нов инструмент, като следвам видеоурок (напр. В egghead.io) или писмено ръководство, преди да скочите в персонализирани проекти.

Когато се забиеш

... И тогава, неизбежно, се забивам.

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

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

Ето какво правя вместо това:

  1. Първо стеснявам и разбера какво всъщност съм залепил - т.е. дефинирам проблема. Тогава измислям хипотеза за това, което смятам, че може да бъде първопричината или причините за проблема. Дори да нямам идея, просто предполагам.
  2. Тогава се отдръпвам от проблема и компютъра си и правя нещо, което ме отпуска. Това е невероятно трудно да се направи, когато съм толкова разстроен от проблема, който съм заседнал, но пускането на проблема върши чудеса. (Винаги забелязвате ли как страхотни идеи винаги удрят под душа?)
  3. Сега се опитвам да отстраня грешки с моята хипотеза. Стигам доколкото мога по хипотезата си, без да търся отговори онлайн - има нещо красиво, което се случва, когато се опитате да решите проблеми, като първо наистина мислите за тях. Дори да тръгнете по грешен път, фактът, че сте положили усилия, ви учи много и си спомняте проблемното пространство много по-добре следващия път, когато се сблъскате с него.
  4. Ако моята хипотеза доведе до отговор, ура! Приключих. Ако не, аз търся документация, публикации в блогове или публикации в Stack Overflow, които могат да ми помогнат да се доближа до отговора.
  5. Докато чета, си правя бележки за всякаква информация, която би могла да бъде полезна.
  6. Все още няма решение? Това е добре. Сигурен съм, че научих нещо ценно, като прочетох всичко това, дори ако това не ми помогна директно да реша проблема. Кой знае кога тези знания могат да ви бъдат полезни следващия път?
  7. В този момент, ако наистина съм залепен, ще публикувам въпрос на Stack Overflow или ще попитам колега или разработчик, който познавам.
  8. В противен случай изплаквам и повтарям, докато не се доближа до крайното решение. В един момент отговорът винаги идва.

Понякога този процес отнема няколко секунди, а друг път отнема часове (или дни). Така или иначе самият процес е изключително полезен за вашите умения, зададени като разработчици.

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

Помислете за отстраняване на грешки като шанс за изследване, а не за отклонение от целта си и става много по-забавно.

Изплакнете и повторете

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

И така, още веднъж се опитвам да изградя нещо самостоятелно. Вместо да прескачам направо към голям персонализиран проект, ще потърся репо за основа на моето приложение.

Например, ако има онлайн пример за CRUD todos (разбира се), използващ React.js, може би ще създам различен тип CRUD приложение. Достатъчно различен, за да ме ангажира, но не толкова различен, че да ме обезкуражи, ако нещо се обърка.

майсторство

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

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

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

И накрая, не забравяйте да се оттеглям веднага щом се окажа твърде разочарован, за да се наслаждавам на проекта.

Ученето е забавно

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

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

Подобно на магията, става „по-лесно“ за учене.

Как се справяте с нови теми? Всякакви прозрения или пробивни моменти, които искате да споделите? Моля, коментирайте по-долу. Обичам да чувам нови идеи :)