Чому онлайн-курси не навчать вас програмувати
Мене звати Юрій Ворон, я працюю у сфері web-розробки та паралельно розвиваю онлайн-ресурс з програмування для початківців — Ravesli. Я переклав більше 150 уроків із C++ та досить часто отримую питання щодо онлайн-курсів, їхньої ефективності та проблем, які виникають після їх завершення. Ще коли навчався в університеті і проходив численні онлайн-курси, я сам зрозумів, що це далеко не панацея, а лише короткочасне знеболювальне для тих, хто обрав професію програміста. Тому в цій статті розглянемо найбільш поширені причини, чому ж після проходження онлайн-курсу з будь-якої мови програмування ви все-таки не станете одразу затребуваним розробником та як це можна виправити.
Image by Роман Кривенко
Чому так виходить
«Знаєш, тут доводиться бігти щосили, щоб залишитись на тому ж місці, на якому знаходишся зараз. А щоб потрапити в інше місце, потрібно бігти ще в два рази швидше». Ця фраза з «Аліси в Задзеркаллі» цілком описує ситуацію у сфері ІТ.
Складно звинувачувати людину, яка приходить в ІТ з якимись особливими очікуваннями. З одного боку, існує стереотип, що все, що зв’язане з компухтерами, є складним і незрозумілим для більшості адекватних і соціально здорових людей.
З іншого боку, такі ресурси, як Codecademy, Treehouse, Code School, Khan Academy, Codewars, edX, Coursera та безліч інших, виконали фантастичну роботу з руйнування цього стереотипу і показали, що програмування не є чимось незрозумілим і недосяжним. Вас ніжно беруть за ручку і проводять, як дитину, у світ коду, змінних, функцій і масивів. І після кожної пройденої глави ваш рівень впевненості зростає все більше і більше. Допоки у вас не складеться, на жаль, помилкове враження, що ви не просто навчитеся програмувати, ви станете повноцінним та високооплачуваним розробником!
Проте насправді це не так. Любителям отримати результат своєї праці тут і зараз краще й близько не підходити до професії програміста. Жодна серйозна програма (або навіть її частина) не пишеться без помилок з першого разу. Постійна відладка, тести, фікси, перевірки — це те, що програмісти найбільше не люблять і те, що є їхнім основним заняттям. «Первый блин комом» — це історія не про програмістів. У них всі «блины комом» — від першого до останнього. Саме тут від вас буде вимагатися наполегливість і надзвичайне терпіння, щоб довести свій продукт до робочого стану.
Новачку, який якраз проходить онлайн-курси з програмування, дуже складно пояснити, у що він вплутується. Проте після завершення одного чи декількох курсів все стає на свої місця. Вас, як пташенят, скидають з гори у прірву зі словом «лети». І дуже багато наляканих пташенят так ніколи й не злітають. Такі реалії. Найпоширенішою проблемою початківців після завершення онлайн-курсів є те, що основи вони вивчили, але програмувати самостійно не можуть. Висловлюється це так:
- «Я вивчив Python через онлайн-курс на Codecademy, але не знаю, як за допомогою нього можна щось запрограмувати».
- «Я знаю теорію, але не можу її реалізувати на практиці в коді».
- «Я знаю що таке цикли, але я не знаю, як і коли їх слід застосовувати».
І таких варіацій безліч. Зазвичай, завершуючи онлайн-курс з програмування, початківець ставить галочку біля відповідного поля в списку to-do і переходить до вивчення наступної мови програмування в наступному онлайн-курсі. А коли список завершився, усі онлайн-курси пройдені і настав час практики, то буває ступор. Як програмувати, де програмувати, що програмувати, навіщо — і це далеко не остаточний список питань, які виникають у горе-програміста. Розглянемо основні причини, чому після успішного завершення онлайн-курсів з програмування ви так і не навчилися програмувати.
Причина № 1: Штучне середовище програмування
Це те середовище, яке онлайн-курси надають своїм студентам для введення коду. Користувачі зазвичай пишуть код в одній частині веб-сторінки, а в іншій частині розміщені інструкції, що писати, та підказки з готовою відповіддю, якщо ви десь не зрозуміли покрокову інструкцію (згадуємо Codecademy). Це не справжнє програмування, це просто переписування готового коду. Тому, коли онлайн-курс завершився і пора використовувати реальне середовище програмування, як, наприклад, Visual Studio, ви відчуваєте себе «потєрями». Ви просто звикли до колишнього штучного середовища програмування, де були чіткі інструкції, що за чим натискати і що писати. І зараз ви не можете адаптуватися до нового середовища.
Існують вагомі причини, чому онлайн-курси використовують штучне середовище. По-перше, для початківця здебільшого буде складно налаштувати і навіть просто встановити повноцінне середовище програмування. Це вимагає певного часу і зусиль, витрачаючи які горе-початківець подумає, що краще подивитися нову серію улюбленого серіалу, а не оце от все. Друга причина — це затримання відвідувачів максимальну кількість часу, під час якого можна рекламувати платну підписку на матеріали, VIP-акаунти з менторами і т. д.
Я не намагаюся сказати, що штучне середовище програмування онлайн-курсів — погане, ні! Вони дозволяють вам отримати досвід в програмуванні без болю налаштування власного повноцінного середовища і побачити результат тут і зараз. Проте, на жаль, цього болю вам усе одно не уникнути, і ви його лише відкладаєте на період проходження онлайн-курсу.
Причина № 2: Надмірна кількість інструкцій і підказок
Коли ви проходите онлайн-курс, читаєте книгу або навіть навчаєтесь чомусь новому в реальному житті з наставником — ви отримуєте безліч підказок/лайфхаків/інструкцій, які дозволять вам швидше прогресувати та не задумуватись над тим, що вас зупинило, чому так сталося і якими шляхами це можна вирішити. Вам дають відповіді або навіть покрокову інструкцію з самого початку, що робити, коли станеться така от чи така помилка. Вам не пояснюють суть цієї помилки, і ви не зазираєте в корінь проблеми.
Ще досить розповсюдженим наслідком надмірних інструкцій є те, що початківці вивчають лише синтаксис, без основ програмування і необхідного фундаменту знань. Синтаксис — це лише текст, оболонка, за допомогою якої ви реалізовуєте концепції програмування, які не змінюються в різних мовах. Наприклад, концепція розгалужень, циклів та масивів однакова всюди, проте форма їх використання може відрізнятися. Те, що вам дійсно потрібно вивчати на перших порах, — це основи, які дозволять зрозуміти, що буде результатом виконання написаного вами коду. Необхідний фундамент знань ви можете знайти в Ravesli на прикладі мови C++.
Знову ж таки, допомога не є чимось поганим! Коли ви тільки починаєте щось вивчати, вам обов’язково потрібен хтось, хто вкаже правильний вектор розвитку. Вам потрібні люди, які допоможуть вам на всіх етапах кар’єри в програмуванні. Проте отримання надмірної кількості підказок і готових відповідей лише зробить вас лінивими і дасть помилкове враження того, що програмування легке й просте. Потім це призведе до неминучого глибокого розчарування, коли допомоги та інструкцій уже не буде.
Причина № 3: Швидке вивчення
Ви дійсно думаєте, що достатньо пройти один чи декілька онлайн-курсів для вивчення цілої мови програмування? Мова — це лише інструмент, володіння яким не засвоюється ні за 3 години, ні за тиждень, ні за один курс навчання, щоб там не говорили. Тому перестаньте вестися на халяву — її не буде! А буде набагато більше речей, ніж ви могли очікувати, про які вам доведеться дізнатися.
Real talk
Якщо ви відчуваєте, що знаєте основи, але не можете написати більш-менш простеньку програму самостійно, то ви, скоріш за все, не знаєте основи.
У такому випадку ви знаходитесь на
Порада № 1: Завантажте та налаштуйте повноцінне середовище програмування (IDE)
Налаштувати — значить не тільки натиснути три кнопки «оk» підряд і починати програмувати, а саме розібратися з наявними інструментами та можливостями вашої IDE, які потім будуть економити вам не тільки час і зусилля, але і нерви.
Кожна мова програмування має власне середовище програмування, тому виділіть певний час на те, щоб розібратися з велосипедами, які вже придумали до вас для економії вашого ж часу.
Порада № 2: Пишіть програми з нуля
Вам потрібно навчитися писати код без допомоги ззовні. Без інтернету, ментора, підказок, інструкцій і книг. Ніхто не каже про написання бібліотек з нуля, проте базові речі та завдання ви повинні вміти виконувати самостійно (наприклад, перевернути string чи реалізувати бульбашкове сортування). У Coderbyte і Codechef ви знайдете безліч подібних завдань.
Спочатку буде важко, ви будете витрачати багато часу на відладку і розуміння отриманих помилок, але в цьому і суть. Вам потрібно навчитися думати логічно. Щоразу, коли ви будете розбиратися в проблемі та виправляти помилку — ви будете отримувати реальний досвід програмування. Саме так і відбувається навчання.
Ви можете переглядати чужий код/реалізацію, але не потрібно все копіювати. Якщо ви просто вставили чужий код і він працює, то ви нічому не навчилися, абсолютно. Якщо цей код пізніше призведе до виникнення помилок, то ви не зможете їх виправити.
Аналізуйте чужий код, зрозумійте логіку його виконання, а потім пишіть власну реалізацію.
Порада № 3: Почніть з малого
Досить часто новачки пробують реалізувати важкий проект, який вимагає більшого рівня знань і навичок, ніж є у них наразі. Усе чудово, допоки ви вчитеся в процесі. Проте, якщо ви стали демотивовані уже через декілька тижнів, заплуталися та у вас немає прогресу, то потрібно починати з набагато меншого проекту. З самого початку, як правило, пишуть прості консольні програми, оскільки вони є найлегшими для розуміння і реалізації. Усе, що вам потрібно знати для створення консольної програми, — як вивести дані на екран та як отримати дані від користувача.
Так, це може здатися не таким захопливим, як робота з 3D-графікою. Але це тільки на перший погляд. Вам казали, що математика в програмуванні не знадобиться? Щодо 3D-графіки це правило не діє, математика знадобиться, хоч і не вся повністю. Для роботи з 3D-графікою потрібно знати геометрію, лінійну алгебру та трохи диференціального числення. Навіть звичайний графічний інтерфейс з кнопками та текстовими вікнами може бути складним, залежно від того, на якій мові програмування ви його створюєте.
Тому не лізьте поперед батька в пекло. Почніть з простих консольних програм/ігор (наприклад: «вгадай число», тест/вікторина чи хрестики-нулики), а потім вже переходьте до більш складних проектів — створення автоматизованих робочих місць (АРМ), органайзерів тощо.
Почніть з реалізації простіших проектів, щоб дізнатися усі особливості обраної мови програмування.
Порада № 4: Пишіть багато коду
Програмування не є чисто теоретичним заняттям. Ви не можете читати книги, дивитися відео, проходити тести, а потім очікувати, що зможете написати S.T.A.L.K.E.R. 2. Щоб навчитися писати якісний код, вам доведеться писати його багато, багато і ще раз багато.
Наприклад, ви можете прочитати 10 книг про столярство, де буде описано створення столів, стільців та іншого, проте одне тільки читання не дасть вам навички. Навички формуються досвідом, а досвід — це реалізація теорії на практиці. Якщо ви дійсно хочете навчитися виготовляти столи, вам потрібно мати матеріал — деревину та інструменти — пилу та клей. Ваш перший стіл буде жахливим, і це нормально, оскільки раніше ви нічого подібного не робили і у вас немає ніякого досвіду. Ви вирішуєте почитати трохи теорії, отримати поради від справжнього тесляра і пробуєте зробити ще один стіл. Другий виріб також не стає шедевром, але він виглядає набагато краще за ваш перший стіл. Якщо ви продовжите створювати столи та застосовувати теорію, яку вичитуєте з книг, то врешті-решт у вас вийде досить-таки чудовий стіл.
Так само з програмуванням. Ви повинні кожен день по декілька годин писати код, щоб отримати навички. Ваш перший більш-менш середній проект буде мати куций функціонал та, відверто кажучи, не дуже достойний код, проте це не має значення. Коли почитаєте теорію, отримаєте поради від досвідченіших програмістів, ви створите другий проект, у якого вже й інтерфейс графічний буде, і документація вихідна створюватиметься. Кожна ваша наступна програма буде більшою та кращою за попередню. З ростом ваших програм зростуть і ваші навички. Повторюйте ці кроки, і ви станете професіоналом.
Кожна ваша наступна програма повинна бути більшою та кращою за попередню.
Порада № 5: Працюйте в парі
Знайдіть когось, з ким би ви могли навчатися разом, навіть якщо це такий же новачок, як і ви. Ви будете здивовані, наскільки легко можна вирішити нерозв’язну проблему, якщо підключити ще одну пару очей.
Порада № 6: Не бійтеся задавати питання та робіть це правильно
Є три категорії початківців-програмістів:
- ті, які просять допомогу кожні 5 хвилин;
- ті, які не просять допомогу взагалі;
- ті, які просять допомогу правильно.
Перший випадок. Якщо ви самі не намагаєтеся знайти рішення своєї проблеми, тоді чому хтось повинен робити це за вас, витрачаючи свій час? Це дуже груба помилка.
Другий випадок. Якщо ви принципово не просите допомоги, то цим тільки гальмуєте свій розвиток. Якщо ви цілий день шукали рішення і не знайшли, то перспектива зекономити наступний день, спитавши поради, — непогана, чи не так?
Щоб ваше питання привертало увагу хороших програмістів дотримуйтеся таких порад:
- Скопіюйте та вставте помилку, яка у вас виникла. Програмісти — не екстрасенси, і не потрібно розписувати цілі мемуари, пояснюючи свою проблему. Просто скопіюйте та вставте помилку.
- Якщо повідомлення про помилку немає, тоді поясніть, який результат ви очікували від виконання вашого коду, який результат отримали та чому ви думаєте, що ваш код повинен працювати по-іншому. Часто проблема полягає не в коді, а у ваших очікуваннях — що цей код повинен виконувати (повертаємося назад до розуміння основ програмування). Якщо ви не поясните, який результат ви очікуєте, то отримаєте відповідь: «з кодом проблем немає» або «код робочий».
- Вставте свій код. Дуже важко виправити проблему, якщо не бачиш перед очима код. Якщо ваш код громіздкий — скористайтеся сервісом Pastebin.com і прикріпіть посилання на свій код.
- Вказуйте, що саме ви вже пробували для вирішення проблеми. Це дасть зрозуміти іншим, що ви намагалися самостійно вирішити проблему, а не відноситеся до першої категорії початківців-програмістів.
- Будьте обережні з термінологією. Якщо ви не розумієте значення певних сленгових слів — не використовуйте їх.
Де задавати питання:
- у першу чергу Google;
- StackOverflow;
- Reddit — величезна спільнота, де є розділи буквально з будь-якої теми. Ось декілька популярних розділів з програмування:
- Quora;
- Тостер;
- Форум DOU;
- Cyberforum.
Висновок
Програмування важке. Дійсно важке. І якщо ви щойно пройшли онлайн-курс, ваші очі горять, і ви вже думаєте, на що будете витрачати зароблені кілобакси, то реалії можуть виявитися для вас неприємним сюрпризом. Щоб цього не сталося, дотримуйтеся порад вище.
Налаштуйте повноцінне середовище програмування (IDE). Почніть з консольних програм, щоб вивчити всі особливості обраної мови програмування, перш ніж перейти до більш складних проектів. Пишіть весь код самостійно. Не копіюйте та не вставляйте код інших людей, не розуміючи його логіки.
Пишіть багато коду. Читайте теорію, але не забувайте застосувати теорію на практиці. Працюйте в парі. Читайте, програмуйте, читайте, програмуйте, читайте, програмуйте — безкінечний цикл.
Коли застрягли, постарайтеся вирішити проблему самостійно. Якщо протягом декількох годин ви не змогли знайти рішення — просіть про допомогу. Вчіться правильно задавати питання, і буде вам щастя.