Уроки, отримані з моєї подорожі як розробник самоучок

Шлях розробника-самоучки складний і наповнений невизначеністю. Немає прямої лінії від новачка до програміста кар’єри. Через це, я вважаю, що всі розробники-самоучки мають унікальну історію.

У цій статті я поділюсь своєю мандрівкою кодуванням через низку уроків, які я засвоїв у дорозі. Сподіваюся, читання мого досвіду, коли я навчу себе кодуванню, допоможе вам задуматися про власне минуле та мотивуватиме вас продовжувати рухатися вперед.

Урок №1: Зосередьтеся на процесі

Коли я вперше почав вчитися програмувати, я ніколи не мав наміру робити з цього кар’єру. Я просто хотів зробити конкретну програму.

Моя подорож розпочалася, коли я був старшим студентом коледжу. Я щойно закінчив біографію Річарда Бренсона і, мабуть, читав занадто багато TechCrunch. Мене наповнила підприємницька енергія.

Я постійно читав про те, як діти коледжу отримували величезні суми інвестицій для своїх ідей для мобільних додатків. Я думав, що можу бути одним із тих дітей коледжу.

Одного разу, прогулюючись між заняттями, мене вразила ідея програми. Я швидко переконався, що знайшов наступну велику справу.

Мене ця ідея поглинула і перестав звертати увагу на лекції. Моє хвилювання ідеєю програми швидко зросло до такої міри, що я відчув, що мені потрібно вжити заходів.

Була одна велика проблема. Моєю ідеєю був мобільний додаток, і я не знав нікого, хто міг би створювати мобільні додатки.

Тож я подумав: "який біс, наскільки важким може бути програмування?" Я втрачав інтерес до своєї спеціальності і проводив багато часу, граючи в Xbox. Я міг би витратити частину свого вільного часу на розвиток ідеї свого мобільного додатка.

Іноді наївність допомагає вжити заходів, коли зазвичай цього не робить.

Я був студентом коледжу без досвіду програмування, бізнесу чи дизайну, намагаючись вивчити Android, щоб я міг створити складний мобільний додаток. Думаю, це те, що ви отримуєте, коли поєднуєте велику ідею з обманною машиною з Кремнієвої долини.

Я хотів би сказати вам, що звідси все пішло добре.

Я купив кілька книг про розробку Android і провів незліченну кількість годин у своїй кімнаті, намагаючись склеїти мою програму скотчем. Мені було байдуже, як працює програма, я просто хотів готовий продукт.

Час йшов, і програма перетворилася на Франкенштейна з копією та вставкою коду. Додаток мало багато можливостей, і він ледве працював без збоїв.

Лише випадково потрапивши в клас комп’ютерних наук, я зрозумів, що мені слід більше зосередитися на тому, щоб насправді намагатися навчитися розробці програмного забезпечення.

Моя нездатність програмувати змусила мене відмовитись від початкової ідеї програми. Я зрозумів, що не збираюся робити наступну велику справу, принаймні поки що.

З часом я виправив свою поведінку і почав серйозніше ставитися до навчання. Я почав захоплюватися програмуванням і з часом розпочав кар’єру розробника програмного забезпечення.

Моя велика ідея програми поглинула мене надовго. Це зосередило мою увагу на кінцевому результаті, а не на процесі досягнення.

Коли ви занадто зосереджені на кінцевому результаті, ви починаєте використовувати ярлики. Ярлики можуть призвести до короткострокового прогресу, але в довгостроковій перспективі ваш брак знань завжди наздожене вас.

Важливо пам’ятати, що для вивчення чогось великого, наприклад, програмування, потрібно багато маленьких кроків. До кожного кроку потрібно ставитися обережно.

Дізнаватися нове - це все одно, що будувати будинок. Ви починаєте з фундаменту і нарощуєте. Якщо фундамент несправний, то все рано чи пізно обвалиться.

Іноді побудова міцного фундаменту вимагає уповільнення. Не соромно рухатись повільно. Люди, які вперше розуміють основи, в кінцевому підсумку випереджатимуть людей, яким доведеться повернутися назад і перевчити їх.

Є старе китайське прислів’я, яке звучить так:

"Краще зробити багато маленьких кроків у правильному напрямку, ніж робити великий стрибок вперед, лише щоб спотикатися назад".

Справа не в тому, наскільки швидко ви можете щось зробити, а в тому, наскільки повільно ви можете зробити це правильно.

Я був прекрасним прикладом. Зовні це могло виглядати так, ніби я був дитиною-програмістом. Насправді я не міг створити додаток, щоб врятувати своє життя.

Зосередьтеся на процесі, і ви здивуєте себе тим, наскільки сильно прогресуєте щодня.

Урок №2: Переповнення стеку є дивним (але небезпечним)

Коли я створював свій вбивчий додаток, Stack Overflow став моїм найкращим другом.

Щоразу, коли я застрягаю, я намагаюся створити ідеальне запитання, щоб задати спільноту Stack Overflow. Я складав у середньому по кілька запитань на день.

Я не тільки розміщував запитання, але й ставився б до відповідей на Stack Overflow як до Євангелія. Я витратив би шалений час на обшук сайту, щоб спробувати знайти точний шматок коду, який би вирішив мою проблему.

Коли я знайшов відповідну відповідь, я скопіював та вставив її прямо в свою базу коду і спробував змусити її працювати з моїм існуючим кодом. Я витратив мало часу, намагаючись зрозуміти код, який я додавав.

Я зробив метод грубої спроби та помилки новим видом мистецтва.

Цей процес тривав деякий час, поки врешті-решт я не збагнув і зрозумів вади свого підходу.

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

Іноді веб-сайт занадто добре вирішує проблеми. Це створює помилкове почуття впевненості, що може призвести до більших головних болів у дорозі.

Переповнення стеку показує, як змусити щось працювати, але зазвичай це явно не повідомляє, чому це працює.

Розуміння того, що важливо. Помилки потрібно виправити, а код запустити.

Однак розуміння того, чому щось працює, це те, що допоможе вам застосувати знання знову в майбутньому.

Це як цитата ...

"Дайте людині рибу, і ви годуєте її протягом доби. Навчіть людину рибалити, і ви годуєте його на все життя".

Копіювати та вставляти код із Stack Overflow - все одно, що дати комусь рибу. Розуміти, чому працює фрагмент коду, все одно, що навчити їх ловити рибу.

У копіюванні та вставці коду немає нічого поганого. Ми всі це робимо. Це проблема лише тоді, коли вона стає милицею і затримує наше зростання як розробника.

Річ, якою мені довелося навчитися важче, це те, що навчитися нічого неможливо, якщо відповіді постійно давати тобі. Яких-небудь скорочень у процесі навчання немає.

Коли ви застрягли, спробуйте вирішити проблему з кодуванням принаймні кілька разів, перш ніж перейти до Google.

Коли ви виявите, що копіюєте та вставляєте код, витратьте трохи часу, намагаючись зрозуміти фрагмент коду, перш ніж рухатися далі.

Урок №3: Дізнайтеся, як знайти досвідчену допомогу

Перше, що я зробив після того, як вирішив, що хочу навчитися програмуванню, придбав дві книги з розробки Android.

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

Як ви вже читали вище, це повільно призвело до катастрофи.

Я провів незліченну кількість годин ізольований у своїй кімнаті, намагаючись з’ясувати прості завдання програмування. Я застряг на кожному новому рядку коду, і не здавалося, що я сильно просуваюся.

Я був безпомічно застряг, і моє життя було коктейлем сумнівів, розчарувань і вражаючого відчуття загубленості.

Що ще гірше, у мене виникла світла ідея почати використовувати величезну бібліотеку C, що називається FFMPEG. Моєму додатку потрібно було редагувати відео, тому я вважав, що було б гарно використовувати надійну функціональність бібліотеки.

Це був не мій найрозумніший крок, враховуючи на той момент, я ледве міг налагодити роботу програми для Android.

Я витратив багато часу, намагаючись прочитати код С та з'ясувавши, як я можу використовувати його у своєму додатку. Я намагався навіть отримати бібліотеку, імпортовану в мій проект Android. Код Android і код C не хотіли грати добре.

Після багатьох годин нікуди не дійшов, врешті-решт я розчарувався і кинув бібліотеку.

Приблизно в той самий час, коли відбувся провал FFMPEG, я записався на заняття з об’єктно-орієнтованого програмування. Я, чесно кажучи, не впевнений, як я потрапив. Пізніше я дізнався, що був єдиним спеціалістом, який не займається інформатикою в класі. Я думаю, що в програмному забезпеченні була помилка.

Першим завданням було побудувати програму Blackjack. На цей момент я викладав себе програмування протягом 5-6 місяців, і я відчував певну впевненість у своїх навичках.

Я закінчив завдання і почувався добре у своїй роботі.

Не минуло багато часу, щоб це відчуття згасло.

Вся моя програма була написана одним величезним методом. Приблизно всі інші в класі змогли зрозуміти той факт, що програму потрібно було розділити на класи.

Не добре.

На щастя, класна робота та керівництво викладача дозволили мені зробити крок назад від мого додатка для Android і задуматися про свої здібності до програмування. Я почав цінувати навчання і повернув свої бажання зробити готову програму.

Зараз я зрозумів, що якби я говорив із одним досвідченим розробником у ті перші дні, вони б побачили, чим я займаюся. Я міг чітко розставити свої пріоритети і вкласти в мене якийсь сенс. Вони допомогли б мені виправити свій шлях, коли я заходив у марні тупики (як, наприклад, спроба працювати з FFMPEG).

Натомість я частково відгородився від світу, бо відчував, що не було нікого, хто міг би мені допомогти.

Ізоляція - це двосічний меч. З одного боку, це допомагає зосередитись на вирішенні завдання. З іншого боку, це віддаляє вас від світу, позбавляючи вас важливих відгуків.

Було багато способів, як я міг знайти допомогу. Я міг спробувати знайти професора / студента в університеті з досвідом роботи з Android або звернутися за допомогою до місцевої громади. Я також міг спробувати знайти інтернет-спільноту Android.

Досвідчені розробники схожі на компас. Вони не доставлять вас до місця призначення, але переконаються, що ви спрямовані в правильному напрямку. Їхня допомога часто може бути різницею між успіхом і невдачею.

Обов’язково шукайте вказівки, де б ви їх не знайшли. Це заощадить ваш час і розчарування в дорозі.

Урок №4: Створіть своє оточення

Це, мабуть, єдине, що я почував себе правильно, коли навчав себе програмуванню.

Протягом свого життя я справді погано вчився на тести або виконував домашні завдання вдома. У будь-який момент просто занадто багато відволікаючих факторів. Я часто намагався знайти притулок у бібліотеках чи кав'ярнях.

На щастя, я застосував це правило, навчаючи програмуванню.

Зрештою я став звичайним у кількох місцевих кав'ярнях. Я віддав перевагу кав'ярням порівняно з іншими навчальними місцями, оскільки вони надавали певну різноманітність, і їх легко приховати (легкий доступ до кофеїну теж не заважає).

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

Незалежно від того, де я був, я б переконався, що моя музика була досить гучною, щоб я не міг почути, що відбувається навколо.

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

Наявність належного робочого середовища часто є частиною навчання, про яку не роблять уваги.

Фокус є основоположною складовою пам'яті та набуття навичок. Коли ви намагаєтесь дізнатися щось нове, сила навчання безпосередньо пов’язана з інтенсивністю вашої уваги. Коли ваш фокус слабкий, нова інформація стане менш клейкою, що призведе до уповільнення навчання та збільшення часу навчання.

Ваше робоче середовище не повинно відволікати увагу і повинно дозволяти тривалий безперервний відрізок фокусу. Навіть якщо COVID-19 вимагає віддаленої роботи, ви все одно можете вжити заходів для проектування навчального середовища.

Ось декілька речей, які ви можете зробити:

  • Знайдіть місце, де люди вас не перешкодять
  • Переведіть телефон у режим польоту
  • Використовуйте якийсь приурочений блокувальник веб-сайтів для соціальних мереж та новин
  • Носіть навушники та слухайте музику, що не відволікає увагу (бажано довгий список відтворення, щоб вам не довелося постійно змінювати пісні)
  • Уникайте телевізора чи інших сильно стимулюючих середовищ
  • Майте поруч зошит, щоб записати будь-які завдання чи ідеї, які з’являються у вас у голові
  • Повідомте людям, що оточують вас, що ви не хочете, щоб вас турбували

Тільки ви можете вирішити, де і як створити своє середовище. Але обов’язково це зробіть, бо воно того варте.

Урок №5: Виходьте у світ і знайомтесь з людьми

Посадка мого першого завдання програмування була якось випадковою.

Я щойно переїхав до Омахи, штат Небраска, і у мене був близько року розвитку самонавчання.

Я знав дуже мало людей в Омасі, тому шукав на Meetup.com, щоб спробувати знайти інших людей, зацікавлених у розробці Android. Я знайшов Meetup, орієнтований на розробку мобільних пристроїв, який охоплював розробку iOS та Android, і я вирішив піти.

Їхати на ту першу зустріч було неприємно. Я провів близько 10 хвилин у своїй машині на місці, вирішуючи, чи варто їхати чи їхати.

Мене залякували. Я не був впевнений у своїх навичках програмування, і я знав, що всі в Meetup мали набагато більше досвіду, ніж я.

Нарешті я сказав, вкрутіть це і зайшов всередину.

Я радий, що зробив.

Я почав регулярно відвідувати і під час одного Meetup, невдовзі після того, як переїхав до Омахи, я зустрів рекрутера, який шукав підрядника для Android. Ми поговорили деякий час, і пізніше цього тижня я отримав співбесіду на роботу.

Перед співбесідою я почувався впевнено. Під час співбесіди я був оленем у фарах.

Інтерв'юер говорив про проект, над яким я працював, і все це пройшло над головою. Я намагався залишитись зарученим, але вони могли сказати, що це було поза моїм діапазоном.

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

Я закінчив співбесіду з кимось іншим у компанії, і незабаром після цього вони запропонували мені стажування.

Я був настільки вражений, що після того, як я підписав усі документи і запустив робочий ноутбук, я звернувся до генерального директора і запитав, платна це практика чи ні.

Стажування перетворилося на штатну роботу, і я розпочав свою кар’єру розробником програмного забезпечення.

Коли ви самоучка, люди не збираються приходити і шукати вас. Вам потрібно буде знайти можливості для себе.

Випускники чотирирічних університетів та кодових шкіл мають перевагу, використовуючи мережу своєї школи при пошуку роботи. Розробники-самоуки не мають цієї розкоші.

Розробникам-самоучкам потрібно буде вийти у світ і самостійно побудувати свої мережі.

Холодні дзвінки роботодавцям і розсилка резюме можуть спрацювати. Однак я знайшов людей, які наймають людей, які є близькими до них, у своїй соціальній мережі.

Такі веб-сайти, як Meetup.com, чудово підходять для пошуку щомісячних програмних груп. Навіть в умовах пандемії все ще існує багато віртуальних зустрічей, які є дуже інформативними та корисними.

Існують також інші канали Slack або спільноти Discord, якими ви можете скористатися для створення значущих стосунків. Ви також можете спробувати зв’язатися з різними людьми у вашому районі та попросити випити з ними швидкої 15-хвилинної віртуальної кави.

Зробіть все можливе, щоб набратися нерва, щоб простягнути руку та поговорити з людьми. Будьте доброзичливими та розмовляйте з ними про свій досвід. Переконайтесь, що люди знають про вашу довгострокову мету - знайти роботу.

Потрапляйте в ситуації, коли може статися щось позитивне. Ви не можете виграти розіграш, якщо ніколи не купуєте квиток.

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

Моє стажування було величезним скороченням оплати інших пропозицій, які я мав на той час. Однак я знав, що якщо я наполегливо попрацюю, це стане для мене можливістю проникнути в технологічну галузь.

Головне - думати про можливості роботи довгостроково. Можливо, стажування або робота за сумісництвом не дадуть вам бажаної зарплати заздалегідь, але вони можуть відкрити двері в майбутньому.

Я сподіваюся, ти вчишся на моїх помилках і робиш нові власні захоплюючі помилки

Як бачите, я зробив багато помилок у своїй подорожі, ставши розробником-самоучкою.

Навчити себе кодувати - це ніколи не пряма дорога. Всі наші історії унікальні.

Головне - продовжувати рухатися і уникати розчарування, коли справи йдуть не по-вашому.

Я закликаю інших розробників-самоучок ділитися своїми історіями. Вони не тільки нададуть цінну інформацію, але й допоможуть засвітити унікальні шляхи, якими ми пройшли.

Сподіваємось, моя історія та уроки, які я засвоїв, допоможуть вам рухатися вперед.

Дякуємо за читання. Якщо ви хочете почути про інші ідеї, які я дізнався по дорозі, слідкуйте за моїм рахунком Zero to Programmer у Twitter. Моя мета - допомогти вам навчитися програмуванню ефективніше.