Програмування стає все більш потрібним та поширеним вмінням. Професія програміста користується надзвичайним попитом. Навіть базові навички в програмуванні розвивають інтелектуально та здатні зробити ваше резюме значно привабливішим.
В США та Європі бажання навчитися азам програмування стало одним з найгарячіших трендів останніх років. Його прибічники порівнюють вміння програмувати у сучасному постіндустріальному суспільстві зі вмінням читати та писати в індустріальному суспільстві.
На відміну від поширених уявлень, навчитися практично корисним азам програмування можуть всі, хто готовий прикласти до цього достатньо часу та зусиль. Провідні світові ВНЗ пропонують безліч безкоштовних онлайн курсів з програмування та IT для навчання «з нуля».
А сьогодні в рамках проекту «Громадський переклад» ми вирішили перекласти надзвичайно корисну для новачків статтю Cecily Carver «Речі, які б я хотіла, щоб мені хтось пояснив, коли я вчилась програмуванню. І що я дізналася, навчаючи інших».
Перед тим, як вчитися програмуванню, подумай, що ти хочеш програмувати.
Вміти програмувати – це те саме, що й будувати, і твоя робота буде набагато легшою, якщо ти матимеш чітке уявлення про кінцеву мету своїх дій. Якщо твоя ціль – просто «навчитися програмувати», і ти не маєш жодного уявлення про типи програм, які ти будеш писати, і як ці програми можуть зробити твоє життя легшим, тебе скоріше за все спостигне розчарування.
Мені трохи соромно зізнаватися, але для мене одними з мотивацій вивчення комп’ютерної науки були бажання переконати у своїх неабияких розумових здібностях і отримати хорошу роботу. До того ж, я любила думати про математику і теоретичні основи, і програмування підходило для поєднання цих речей якнайкраще. Але просто думати було не достатньо для мене допоки, доти я не знайшла шляхи поєднання технології з речами, які я дійсно любила: музикою і літературою.
Тепер до головного питання: що саме ти хочеш програмувати? Сайти? Ігри? Додатки до Айфону? Програми інтерактивного мистецтва? Чи ти просто хочеш справити враження на свого керівника або автоматизувати якесь нудне завдання для того, щоб мати більше часу, скажімо, на споглядання картинок з видрою? Можливо, ти хочеш мати більше шансів на працевлаштування, вписувати модні словечки до свого резюме або твоя мета – закінчити свою навчальну програму. Всі перераховані цілі – варті того, щоб навчатися програмувати. Переконайся, що ти точно знаєш, яка з них твоя, і дій!
Немає у цьому нічого містичного
Програмування – це така сама навичка, як і інші. Так само, як і вивчення мови, програмування вимагає засвоєння граматики і словника. Так само, як і в математиці, у програмуванні є процеси, які виконуються завдяки особливим типам задач. Так само, як і у всіх видах мистецтва, у програмуванні є методи, засоби та інструкції, які люди вдосконалили з часом, спеціалізуючись на різних завданнях, для того, щоб ти легко міг їх використовувати, змінювати або взагалі позбуватися.
Джоел Спольский наполягає на тому, що існує чітка межа між людьми з розумом програміста і всіма іншими, яким не вистачає розумових здібностей, щоб досягнути успіху у цій сфері. Згідно поглядів Джоела, ця межа складається з показників і рекурсії.
Я вчила про показники і рекурсії у школі, і коли я зрозуміла ці поняття, то відчула «дивовижний зсув» у своєму мозку: це була така інтелектуальна насолода, яка підштовхнула мене до вивчення комп’ютерної науки. Однак, окрім знань, отриманих у класі, я майже не була обізнаною з жодною іншою концепцією для програмувальної діяльності. Допомагаючи іншим людям вчитися, я знову і знову бачила цікаві і корисні проекти людей, які вони створювали, не маючи належних знань про жодну з концепцій і теорій. Але, звичайно, немає сенсу себе обмежувати у пізнанні, якщо ти розумна людина. Безумовно, чим складніше твоє завдання, тим вищим рівнем майстерності ти повинен володіти. Але таке правило стосується абсолютно всіх інших галузей знань.
З першого разу не вийде
і навіть з другого і третього
Коли ти вперше почнеш вчитися програмуванню, то дуже швидко зіштовхнешся з такою звичайною подією: ти думаєш, що все зробив правильно, ти двічі перевірив програму, але в результаті вона не працює. І ти не маєш жодних припущень, де треба спробувати полагодити її, а повідомлення про помилку ніби буде говорити тобі: «Ти невдаха!». Тобі спаде на думку, що треба закинути цю справу, що ти ніколи не осягнеш своїм розумом цієї складної науки, що ти не здатний до цього. Я почувалася так само, коли вперше спробувала написати програму в С++, запустила її, і в результаті, на жаль, побачила лише повідомлення: «Сегментаційна помилка». Але таке трапляється у програмістів будь-якого рівня, і це абсолютно нічого не говорить про рівень твого інтелекту, кмітливість або твої здібності до програмування. Невдачі траплятимуться у тебе як у початківця, але так само вони траплятимуться і тоді, коли ти станеш досвідченим у цій справі професіоналом. Головна відмінність буде полягати у тому, як ти реагуватимеш на свої невдачі.
Я зрозуміла, що найбільша відмінність між програмістом-початківцем і професіоналом – це віра: віра в те, що проблему можна виправити, що є можливість досягнути мети. Шлях від «не працює» до «працює» не завжди видимий, але якщо поставитися до ситуації з терпеливістю, то ти зможеш виправити її.
Хтось завжди казатиме тобі, що ти йдеш хибним шляхом
Дужки повинні стояти в наступному рядку. Дужки повинні стояти в тому самому рядку. Ти повинен використовувати заготовлений алгоритм, але насправді ти не повинен його використовувати. Ти завжди повинен давати пояснення до своєї програми, але хороша програма не потребує пояснень.
Завжди є декілька різних шляхів до вирішення однієї проблеми, але не має жодного знаку: «Роби так!». Багато програмістів дуже добре вміють захищати обраний ними підхід до програмування, але це не означає, що лише він один – правильний. Протистояння людям, котрі говорили, що я помиляюсь, і намагання все ж зрозуміти їх у разі, коли вони мали рацію, були одними з найбільш стресових ситуацій у моїй ранній кар’єрі. Якщо ти програмуватимеш у команді з іншими людьми, то, звичайно, хтось буде критикувати тебе за твою роботу. Часом цей «хтось» буде абсолютно правий, і для тебе самого буде корисним дослідити, чи ти справді зробив щось неправильно. Часом цей «хтось» буде розігрувати стару і безглузду суперечку, в якій тобі найкраще не брати участі. Але з іншого боку, якщо ти отримуєш насолоду від старих і безглуздих суперечок, це якраз для тебе.
Хтось завжди казатиме тобі, що ти не справжній програміст
HTLM – це не справжнє програмування. Якщо ти не використовуєш vi, то ти не серйозний програміст. Справжні програмісти знають С. Справжні програмісти не працюють вWindows. Є люди, які ніколи не зможуть навчитися програмуванню. Тобі не варто вчитися цьому. Ти не програміст (але я все-таки програміст).
Програмування – це багато різних речей для багатьох різних людей, і програмування зараз відрізняється від того, яким воно було колись. Достатньо смішним є той факт, що ті інструменти, модулі і бази, які використовують новачки і навіть більш-менш досвідчені програмісти для пришвидшення і полегшення роботи, скоріш за все тавруються як «не для справжнього програмування».
Використовуй ті інструменти, які полегшують тобі роботу. Це нормально, якщо твоя гра була створена за допомогою програми Stency або GameMarket, а не написана за допомогою робочої пам’яті. Це нормально, якщо перші твої спроби в програмуванні – це HTML або Excel. Вирішуй ті задачі, з якими ти можеш впоратись.
Як тільки ти ставатимеш більш впевненим, ти, звичайно, будеш шукати потужніші інструменти.
Якщо хвилюватимешся, чи ти справжній «geek cred», це повільно вбиватиме тебе
Я колись багато хвилювалася, особливо в школі, через те, що я не схожа на справжнього гіка, і мій одяг, мої презентації, мій спосіб читання матеріалу і навіть способи виготовлення схем для комп’ютерних програм видають мене. Це було жахливе і даремне витрачання енергії, але я стала більш конструктивною, коли прийняла рішення дозволити всьому йти своєю чергою.
Тобі треба запам’ятати таку річ: твої здатності досягнути чогось в програмуванні не мають нічого спільного з тим, як добре ти пристосовуєшся до різноманіття geek-субкультур. Та енергія, яку ти витрачаєш на те, щоб щось комусь доводити, має бути використана на створення якихось речей.
Старанно працювати – це більше, ніж просто метод
Є достатньо статей про «правильні» і «найкращі» шляхи навчання програмуванню, і також існує велика кількість можливих підходів до програмування. Ти можеш навчитися ідеям програмування з книжок, або завдяки інтерактивним вправам, або завдяки налагодженню програм, які написали інші.
Багато хто скаржиться на програми самонавчання та семінари, на яких щасливо пролітають через матеріал для початківців і відразу досягають таких рівнів, де речі стають набагато важчими дуже швидко. Ти знатимеш, як надрукувати якийсь рядок з тексту на сторінці, але не матимеш жодних ідей, як почати працювати над справжнім, корисним проектом. Ти, можливо, будеш почуватися так, ніби ти дотримувався порад без реального їх усвідомлення, і звинувачуватимеш навчальні ресурси.
Якщо ти досягнеш такої стадії, то всі доступні навчальні матеріали і онлайн ресурси вже не будуть такими корисними для тебе, бо це означатиме, що ти досвідчений і розумний програміст. Наступне з чим ти стикнешся – це почуття: «я не знаю, чого знаю». Навіть вирішити питання, що вчити наступним – це головоломка.
Ти обов’язково стикнешся з цією проблемою, і не має значення, яку програму для навчання програмуванню ти використовуєш, і єдине, що лишається – це наполеглива робота, тобто ти маєш продовжувати робити нові речі, вивчати більше інформації і крок за кроком осягати, як створювати свій проект. Скоріше за все, ти досягнеш успіху тоді, коли матимеш чітке уявлення, навіщо ти вчишся програмуванню.
Якщо ти продовжиш класти цеглинку за цеглинкою, це, можливо, і забере в тебе багато часу, але врешті-решт ти матимеш стіну. Це якраз та ситуація, де віра, про яку я говорила раніше, стане у нагоді. Якщо ти віриш, що завдяки терпінню і витримці ти зможеш осягнути всі тонкощі програмування, з часом ти, безумовно, цього досягнеш!
Переклала Харицька Даша в рамках проекту «Громадський переклад».