Теорія чи практика: з чого ви починали свій шлях у програмуванні?

💡 Усі статті, обговорення, новини для початківців — в одному місці. Приєднуйтесь до Junior спільноти!

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

  • З чого ви починали: ретельно вчили теорію чи одразу приступали до практичних кейсів?
  • Чи окей в роботі підхід, коли джуніор займається вирішення реальних задач з мінімальними теоретичними знаннями, які з часом заповнюються?
  • А, може, хтось із вас настільки занурювався в теорію щодо технології чи теми, що до застосування на практиці так і не доходило?
👍ПодобаєтьсяСподобалось1
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Для новачка спочатку все одно буде теорія: базовий синтаксис мови, функції, цикли, змінні, типи даних, таке інше. Потім багато практики, бажано придумати якусь ідею і щось робити, починаються перші костилі та постріли в ногу, постійне гугління (бажано уникати чатжпт на початку, імхо). Потім перші інтерв’ю —> знову теорія. А вже потім перший комерційний досвід. А далі в кожного свій шлях. Бажано все ж не забувати навчатись, це зачіпає і теорію, і практику. І якщо друге здобувається на проектах, то ось на перше дуже часто забивають болт. Хоча насправді ж, мені здається ця проблема стосується більше навіть не теорії, а взагалі всього навчання та розвитку хардскілів у досвідчених спеціалістів.

Для новачка спочатку все одно буде теорія: базовий синтаксис мови, функції, цикли, змінні, типи даних, таке інше.

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

Теорія буває різна, для новачка який нічого не знає то все теорія, чи то поняття циклу, чи то булеві операції(булева алгебра), чи поняття змінної, стеку(як пачки pringles), масиву, і т.д. Навряд чи вийде обмежитися тільки мовою програмування у вакуумі. Тут питання тільки в тому наскільки глибоко занурюватись. То холіварна тема що називати теорією. Багато що є специфічним тільки для якоїсь одної технології, не обов’язково це буде мова програмування, але по цьому може існувати купа статей, книг і так далі, читання яких буде важко назвати практикою

Вже давно не починаю з теорії, а роблю все паралельно. Були навіть випадки, коли документацію більш детально читала вже після практики і дописувала, якщо знаходила щось нове і цікаве. Теорія напевно потрібна десь на початку, коли заходиш в програмування з 0 чи в нову мову програмування, яка не схожа на твої попередні. І то паралельно з нею потрібно практикувати.

Когда начинал изучение Delphi (4 версия) где-то в 98 году, мне подогнали диск с видео-уроками, правда с Delphi 1. В те времена, компы не очень тянули обычные видео, для просмотра основных кодеков требовался процессор 1000 Mhz, но оно было как-то так запаковано что мой процессор 300 Mhz его тянул и весили они довольно мало.
Это не первое что я пробовал, до этого пару лет опыта было с qBasic и хорошо понимал как программировать, но видео-уроки помогли разобраться в Pascal и Object Pascal.

Тут конечно смотря что считать теорией, как мне кажеться первый раз она становиться нужна через годы программирования.

Тільки практика та практика допоки не прийде розуміння що ти себе запитуєш «як це в біса взагалі працює?? а що там на шар нижче?? » і от тоді треба пхатися в теорію

Теорії в ті часи не дуже існувало. Ну а так 14 років, це тобі Turbo C 1.5, ось scanf треба писати так, printf ось так, ось так відлагодження, далі сам розберешся. Розібрався, писав і графічний редактор, різні ігри, тощо.

Коли ми беремо теорію, то ... По-перше, вчити її можна усе життя, ніякого критерію що ти її вивчив, немає. По-друге, все що вчиться, то легко забувається через місяць. По-третє, там такий вибір, що інколи не вгадаєш. Тому легко витратити рік, два, п’ять, але отримати в результаті мінус (бо все забув, а час втрачено). Теорію он вчать п’ять років в інститутах, здають диплом, та майже нічого не пам’ятають.

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

А, може, хтось із вас настільки занурювався в теорію щодо технології чи теми, що до застосування на практиці так і не доходило?

Коли вже є певний практичний рівень, то так. Хоча сказати складно про практику. От наприклад, читання TAoCP це теорія чи практика? В будь якому разі хороші вправи. Теорія категорій для програмування. Ну теж дає деякі узагальнені знання, але важко сказати конкретну користь. Різні dependent type мови програмування. Теж, в бізнесі не використовував, але як на мене дуже корисно. А от якщо практичних скилів немає, то для тебе це буде лише абстрактна нісенітниця.

Практика. Була ідея, що хотілося зробити. Розбила на маленькі кроки цю ідею. Потім гуглила і млн разів намагалася зробити, не виходило — ще гуглила. Зараз працюю в стрімінговому стартапі — навичка «метод тика(чи втика:)» дуже пригодилася в роботі. Звісно підчитую теорію, граюся в пісочниці, люблю читати нестандартні рішення від людей, які довше в професії — це допомагає зменшувати помилки, але повністю не рятує. Теорія без практики і без постійного застосування (постійно треба кодити) — це як безкінечно вчити англійську, якщо немає її застосування в реальних кейсах, то коли приходить момент нею говорити з реальною людиною про реальну задачу — неможливо і двох слів звʼязати:)

Теорія чи практика: з чого ви починали свій шлях як автомобіліст?

Звичайно — практика. Перше авто я здобув просто підійшовши на світлофорі і викинувши водія. Відразу сів — і поїхав! Нічого складного — тільки тисни газ на повну і встигай повертати руля. Якщо не встигаєш — не біда: від наїзду на пішоходів авто не сильно пошкодиться. Та і взагалі навіть найпростіші авто доволі міцні: вони витримують кілька зіткнень перш ніж загоряться. Після цього треба швидко виходити — і можна шукати собі нове авто.
Звичайно це був жарт. Коли мені принесли перший Spectrum — навіть щоб його підключити треба було почитати роздруковану книгу на англійським. Отже «талмуд» + словник + спроби вводити якісь команди — ось з чого усе почалося для мене.
Взагалі то зараз така дивна ситуація, коли в ІТ справді можна починати відразу з практики.
Уявіть собі це у будь — який інший професії! Навіть вантажником на будівництво не візьмуть поки не розпишешся за техніку безпеки. Бо німа нічого гіршого ніж бовдур, який вважає що він усе знає як треба — і «починає з практики». Як правило закінчується ця практика травмою для нього чи когось поруч.
Пам’ятаю історію як в одній фірмі босс вирішив купити комп’ютер собі в кабінет. Йому привезли поставили, підключили — у перший же день він поліз на порносайти і наловив стільки вірусів що наступного дня довелося викликати «лікаря». З нього глузувати усі підлеглі: у віртуальному сексі ті ж самі проблеми як у реальному — сунувся куди не треба і «підчепив».

Спочатку дали основи алгоритмічного мислення, а потім багато-багато практики. Іноді підчитую теорію, але всі ці алгоритми Дейкстри і черепахи Флойда не так часто треба.

На співбесіді навіть на Senior левел, далеко не усі справляються із простим завданням типу розгорнути строку із заду на перед, вирахувати факторіал N чи навіть реалізувати swap змінних. При чому можна користуватись — абсолютно усім чим завгодно. Як так ІМХО думаю не можуть перемогти стрес, а як відомо з армійської муштри — під час стресу залишаються лише натреновані до автоматизму навички.

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

Теория без практики мертва. Дальше можно домыслить

Перший компʼютер в мене зʼявився в 1990 або 1991, я навчався у другому або третьому класі. Батько зпаяв мені ZX Spectrum. Мати придбала книгу по Бейсіку. Я знайшов там першу програму: вона повинна була запитати моє імʼя та написати «Привіт, Вова!».

Я набрав цю програму аж з двох рядків. Та нічого не трапилося. Вона не працювала. Я не міг зрозуміти: чому компʼютер не виконує мою програму? Адже я її написав повністю!

Я повернувся до теорії та почав читати книжку далі.

У наступному абзаці було написано: «Щоб запустити програму введіть команду RUN».

Я ввів та вона запрацювала.

Я вважаю що без теорії я не зміг би стати програмістом. :)

Усім гарної пʼятниці! :)

Все починається з теорії. Без мінімальних знань неможливо написати хоч щось. навіть зараз маючи АІ треба все одно хоч краплина знань щоб написати промпт. Головне питання наскільки багато тої теорії треба для реальної роботи. Алгоритми? їх багато де вимагають, особливо зараз, але за всю мою практику я використовував їх лише для ігрових пет проектів.
був джуніором і починав з реальних задач, а через місяць переробляв бо вивчив нову теорію, і так бувало багато разів. і вважаю це нормою, це розвиток, і неможливо все знати з самого початку

Без мінімальних знань неможливо написати хоч щось

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

щоб написати логіку гри в 10 строчок використовуючи АПІ фреймворка/мови, а не писати свої класи/функції

А де тут теорія? Чи знання фреймворка є теорія?

А взагалі, якщо ти можеш написати своїми класами та функціями, то і у фреймворкі розберешся. Зворотнє не вірно.

Знову, не важливо скільки рядків коду. Важливо, чи можеш ти знайти та пофіксити баг. І знову тут свої класи/функції набагато краще тренування.

Теорію потрібно знати обов’язково. Вона є логіка розробника, тим паче якщо робиш щось вперше. Чим більш поглиблені теоретичні знання, тим більше можливостей (особистого розвитку). Без теорії «метод тыка» не працює (зокрема на довгих марафонах: розробка продукту).

«Щоб вийти з лабіринту, треба зрозуміти, що ти у лабіринті»
«метод тыка»

80% індустрії en.wikipedia.org/...​Capability_Maturity_Model за дослідами з університету Карнегі-Меллон на замовлення Пентагону в дослідженнях сторонніх постачальників, працюють саме методом «наукового тика». Лише 12% організацій мають розвинені процеси, із залученням теорії.

Саме цікаве, що теорію вивчають у висщих навчальних закладах, з першого по ~ третій курс, розширюючи шкільні знання. Це основа науково-дослідної діяльності: Причинно-слідчі закономірності, де доказом виступає — продукт (матеріальна дійсність — воно працює).

А про це йдеться у дядька Боба в Clean Architecture просто на початку книги. Усі намагання зробити за Едгаром Дейкстерою математично доказовий код провалились, тому індустрія пішла за методом Блекуса — науковий підхід. Ви можете написати програму яка компілюється в код який виконується, але робить зовсім не те — що вам потрібно. Тобто для перевірки вірності алгоритмів треба мати тестування : manual, unit tests, auto-test тощо. Якщо коротше це два загальні процесси верифікація і валідація, перевіряємо що программа робить саме те — що потрібно для автоматизації задачі предметної галузі (бізнес процесс), і перевіряємо що існуючий дефекти не впливають на результати роботи програмно апаратної системи. Про це у вузах вчать, та на практиці теж далеко не усі про це взагалі в курсі, кожному клієнту доводиться доводити — що це треба і на це потрібен час як і на усунення виявлених дефектів і т.д.

індустрія пішла за методом Блекуса — науковий підхід

Звісно! При написанні програм, щоразу доводиться вирішувати нові задачі. Частково код повторюється, але в цілому програмування більш схоже на архітектурно-конструкторську діяльність, яка теж потребує кожного разу перевірку розрахунків. Тож практика у програмуванні, це як матеріали («цеглини») при будівництві... Знаючи теорію можна будувати видатні споруди, наприклад хмарочоси; самобуд існує до ~двох поверхів.

Усі намагання зробити за Едгаром Дейкстерою математично доказовий код провалились, тому індустрія пішла за методом Блекуса — науковий підхід.

Не зовсім так. Станом на зараз є інструменти щоб написати математично доказовий код для проекту рівня оптимізуючий компілятор мови програмування Сі. Я вже давав посилання на такий проект: compcert. Просто, як на мене, серед розробників дуже погані знання математики, що дуже сильно зменшує кадри. Також є питання щодо швидкості.

Але напрямок цікавий, наприклад, на рівні AI: нейромережа отримує фідбек (є доказ/немає), і продовжує пошук, якщо його немає. Так можна генерувати код автоматично, перебирати варіанти, а потім навчатися. Якщо бути точним, то там два окремих напрямку: перший це чисті функціональні мови (та залежні типи, Agda, Idris). Другий це контракто орієнтовано програмування з асертами у вигляді трійок Хоара (Ada 2012).

Теорію потрібно знати обов’язково.

Чи багато розробників розкажуть на співбесіді про ізоморфізм Карі-Ґоварда?

Не знаю. Я й не знаю ізоморфізм Карі-Ґоварда... Під «теорією» розумію не особисті вподобання того чи іншого винахідника, а загальноосвітні знання програміста. Саме це має значення на практиці. І я в цьому переконався, коли почав розбирати алгоритми компьютерного зору та обробку зображень.. Мало хто відповість на форумах, як обробляти матриці мовою программування при написанні свого прототипу ШІ, чи хочаб як написати «терміта» (виділення області зображення за кольором; «хромакей»). Хоча це є басіс программіста: формати файлів, байти, стан (коду) і т.п.

І я в цьому переконався, коли почав розбирати алгоритми компьютерного зору та обробку зображень..

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

як обробляти матриці мовою программування

Тут ти або розумієш, що таке матриця, тоді просто дивишся у бібліотеку, де там потрібні тобі операції. Або не розумієш, тоді це не для тебе.

Хоча це є басіс программіста: формати файлів, байти, стан (коду) і т.п.

Мені знову таки важко зрозуміти. Навіщо формати файлів, коли є тонна бібліотек, які можуть прочитати трохи більше ніж усе що є в наявності. Байти теж можуть десь вилізти, але зрозуміти що байт це число від 0 до 255 як на мене не важко.

при написанні свого прототипу ШІ

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

Це математика.

— Нема у коді при вірішенні матриць ніякої математики (хіба що + та мінус — ). Це логіка послідовності дій, які пояснює математика.

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

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

зрозуміти що байт це число від 0 до 255 як на мене не важко.

— Як на мене — теж. І те саме можна сказати про три кольори у пікселі, які можуть займати числове значення від 0 до 255 (байт).

більшість кода вже написано

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

Береш готовий приклад та експериментуєш. Знову ж таки, як на мене для початку треба навчитися просто програмувати.

Про це я написав у коментарі з аналогією архітектурно-конструкторської діяльності:

практика у програмуванні, це як матеріали («цеглини») при будівництві... Знаючи теорію можна будувати видатні споруди, наприклад хмарочоси; самобуд існує до ~двох поверхів.

Шлях в програмуванні починав з теоретичних знань та написання коду на папірці, який потім інтерпретував в голові вчитель з інформатики.

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

Чи потрібна теорія без практики? Так, бо інколи знання про щось дозволяє не допускати помилок в майбутньому.

написання коду на папірці

Нещодавно почав знову писати програми на аркуші. Такого стану потоку не відчував мабуть років з 10. :)

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

Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why.

gerlacdt.github.io/...​posts/programming-quotes

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

Підписатись на коментарі