Як навчитись програмувати

Опубліковано: 2008-10-29   00:50:23

WorkЯ раніше розповідав про своє бачення "системи мислення" програміста. Однак наявність певних здібностей не дає можливість кому б то не було займатись програмуванням. Для того, щоб чогось досягти, треба прикласти певні зусилля та навчитись це робити. Сьогодні я б хотів поділитись думками стосовно ефективної підготовки спеціалістів цього напрямку

Класика, або почнемо з самого початку

Фактично це перший з вироблених підходів до підготовки розробників програмного забезпечення. І розвивався такий підхід в часи панування C та ще раніше.

В чому його суть?

Спочатку людина вивчає досить складний математичний апарат (такі дисципліни як дискретна математика, математичний аналіз та таке інше), починає працювати з мовами програмування на зразок Pascal або C/C++. Паралельно з цим йде вивчення дисциплін пов'язаних з алгоритмами, оптимізацією.

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

Швидше.. Швидше. IDE до рук та програмувати

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

Фактично новачку дають в руки інструмент для програмування і починають вести через тенети алгоритмів. Матеріал в такому випадку викладається на рівні "я можу і не знати скільки буде 2+2, а Ви тут мені про математичну логіку щось кажете"... Мабуть Ви вже встигли звикнути до того, що якщо у Вас достатні знання з основ мов програмування, то один чи декілька розділів у книжці можуть бути прочитані протягом одного вечора, оскільки не несуть жодного корисного навантаження для більш-менш ознайомленої з програмуванням людини.

Переваги та недоліки

Не знаю, на скільки ефективним є спосіб навчання за кордоном, однак в нашій вищій освіті "класичний" підхід до навчання ефективно не працює. Чому? Студентів навчають масі дисциплін як пов'язаних так і не пов'язаних з їх майбутньою професією.

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

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

Чому так? Приведу приклад з життя: завдання пошуку найкоротшого шляху з одної точки в іншу для людини з попередньою підготовкою перетворюється в пошук у пам'яті алгоритму Дейкстри та його реалізація, а для людини без попередньої підготовки в вигадування чогось власного (що хоч і цікаво але не ефективно) чи то пошуку в літературі, інтернеті достатньо прозорого для неї покрокового мануалу чи готового рішення.

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

Шляхи до виходу

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

Хоча тяжіння до нових мов програмування у навчанні та полегшення курсу для студентів теж не є доброю рисою, як каже Джоел Спольски (Joel Spolsky).

Я сам схиляюсь до того, що під час навчання студент повинен отримувати багато теоретичних знань, які він зможе використати на практиці. Чому студентів не ганяють два роки написанням різноманітних алгоритмів, реалізацію роботи з різноманітними структурами даних, що розміщуються в динамічній пам'яті? Тому що коли ми завершили цю дисципліну в університеті розуміння пройденого матеріалу (котрий був вершиною айсберга для підготовки висококваліфікованого програміста) було десь у 30% студентів. Лише деякі ВУЗи можуть дозволити собі таку жорстку програму.

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

Я спробою допомогти в цьому. Комусь "фундаментальними знаннями", а комусь оглядами та швидкими "HOW TO" з тих технологій, що зараз використовуються. І хотів би я задати один вектор, який допоможе як початківцям так і тим, хто програмує, однак оминув "класичні" мови програмування: С та С++...

Дякую за увагу.

Коментарі: 3
 

Коментарі:

excieve2008-10-31 00:33:04 :

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

З однієї сторони, всесторонній розвиток - це чудово, з іншої... ну навіщо майбутньому розробнику знати матаналіз та купу інших речей на рівні, нескінченно близькому до божественного :) Може краще витратити час на щось більш цікаве? А наприклад, на моєму факультеті за одну сесію могло без проблем вилетіти 50% студентів лиш через такий рівень матаналізу, який від нас вимагався. До слова, вже пілся першої сесії у нас в групі не було жодного контрактника. Але це не показово, просто у нас був неймовірно чесний факультет - на деяких інших, ситуація абсолютно протилежна (заможність батьків вирішує долю студента).

На мою думку, наша вища освіта, успадкована від радянської, не розрахована на сучасні реалії у таких галузях, що дуже стрімко розвиваються. Прорамістська освіта СРСР (після того, як кібернетика перестала бути "буржуазною лженаукою" :)) була спрямована більше на військову галузь, яка сьогодні в нашій країні не розвивається.

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

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

 
GrAndSE2008-10-31 23:50:17 :

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

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

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

 
excieve2008-11-01 03:38:34 :

Математичні дисципліни ажніяк не зайві, ні. Просто занадто поглиблені там, де це не потрібно. Хорошому розробнику не обійтись без матлогіки/дискретної математики, алгоритмів та структур даних і т.п., але зовсім не потрібна нескінченна кількість теорем матаналізу та квантова механіка :) Це я до того, що якісної сучасної підготовки програмістів у наших вищих навчальних закладах просто нема. Зате випускники спеціальностей "Computer Science" (саме в лапках) мають знати все про розпізнання образів та випадкові процеси, якщо звичайно хоч щось про це пам'ятають, а не забули одразу після сесії :)

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

 

Додати коментар

user

email

url

text

Повідомляти про новікоментарі