Як выціснуць максімум з Computer Science адукацыі

Большасць сучасных праграмістаў атрымалі адукацыю ў ВНУ. З часам гэта зменіцца, але зараз справы ідуць так, што добрыя кадры ў IT-кампаніі ўсё роўна прыходзяць з універсітэтаў. У гэтым пасце Станіслаў Пратасаў, дырэктар Acronis па сувязях з універсітэтамі, расказвае пра сваё бачанне асаблівасцяў вузаўскай падрыхтоўкі будучых праграмістаў. Выкладчыкі, студэнты і тыя, хто іх наймае, могуць нават знайсці пад катом пару карысных парад.

Як выціснуць максімум з Computer Science адукацыі

Апошнія 10 гадоў я выкладаю матэматыку, алгарытмы, мовы праграмавання і машыннае навучанне ў розных ВНУ. Сёння апроч сваёй пасады ў Acronis я таксама з'яўляюся намеснікам загадчыка кафедры тэарэтычнай і прыкладной інфарматыкі ў МФТІ. З досведу працы ў добрых расійскіх (і не толькі) універсітэтах я вынес некаторыя назіранні аб падрыхтоўцы студэнтаў па кампутарных дысцыплінах.

Правіла 30 секунд больш не працуе

Я ўпэўнены, што вы сутыкаліся з правілам 30 секунд, якое абвяшчае, што праграміст павінен зразумець прызначэнне функцыі пасля збеглага погляду на яе код. Яго прыдумалі даўно, з таго часу з'явілася мноства аперацыйных сістэм, моў, жалеза і алгарытмаў. Я пішу код ужо 12 гадоў, але адносна нядаўна я бачыў зыходнікі аднаго прадукта, якія і на першы погляд здаліся мне магічнымі загаворамі. Сёння калі вы не пагружаныя ў прадметную вобласць, тое правіла 30 секунд перастае працаваць. У адваротным выпадку вам не хопіць не толькі 30, але і 300 секунд, каб разабрацца, што да чаго.

Напрыклад, калі вам жадаецца пісаць драйверы, трэба будзе нырнуць у гэтую сферу, прачытаць тысячы радкоў спецыфічнага кода. Пры такім падыходзе да вывучэння прадмета ў адмыслоўца з'яўляецца "пачуццё flow". Як у рэпе, калі адчуванне добрай рыфмы і правільнага рытму з'яўляецца без спецыяльнай рацыяналізацыі. Гэтак жа і добра падрыхтаваны праграміст можа лёгка пазнаць неэфектыўны ці проста дрэнны код, не ўдаючыся ў дэталёвае вывучэнне таго, дзе адбылося парушэнне стылю ці быў скарыстаны неаптымальны падыход (а вось растлумачыць гэтае адчуванне бывае вельмі складана).

Спецыялізацыя і расце складанасць прыводзяць да таго, што адукацыя бакалаўра ўжо не дае магчымасці вывучыць усе напрамкі дастаткова глыбока. Але якраз на гэтым узроўні адукацыі трэба набываць далягляд. Ужо пасля, у магістратуры ці на працы, трэба будзе выдаткаваць некаторы час на апусканне ў праблематыку і спецыфіку прадметнай вобласці, вывучыць слэнг, мовы праграмавання і код калег, пачытаць артыкулы і кнігі. Мне здаецца, толькі так з дапамогай універсітэта можна "напампаваць перакладзіну" для будучых T-shaped спецыялістаў.

Якую мову праграмавання лепш выкладаць ва ўніверсітэце?

Як выціснуць максімум з Computer Science адукацыі
Да маёй радасці выкладчыкі ўніверсітэтаў ужо адмовіліся ад пошуку правільнага адказу на пытанне: “На чым лепш праграмаваць?”. Спрэчкі, што лепш - C# або Java, Delphi або З++ - фактычна сышлі на няма. З'яўленне мноства новых моў праграмавання і назапашванне педагагічнага досведу прывялі да таго, што ў акадэмічным асяроддзі выстаялася разуменне: для кожнай мовы ёсць свая ніша.

Праблема выкладання з выкарыстаннем той ці іншай мовы праграмавання перастала быць першачарговай. Ня важна, на якой мове вядзецца курс. Галоўнае - дастатковая выразнасць мовы. Кніга “The Art of Multiprocessor Programming” — добрая ілюстрацыя гэтага назірання. У гэтым ужо сталым класічным выданні ўсе прыклады прыведзены на Java - мове без паказальнікаў, але з Garbage Collector. Ці наўрад хто-небудзь будзе спрачацца, што Java далёкая ад аптымальнага выбару пры напісанні высокапрадукцыйнага раўналежнага кода. Але для тлумачэння канцэптаў, выкладзеных у кнізе, мова аказалася прыдатнай. Іншы прыклад - класічны курс машыннага навучання Эндру Ына, які выкладаецца на мове Matlab у асяроддзі Octave. Сёння можна было б абраць іншую мову праграмавання, але якая, па сутнасці, розніца, калі важныя ідэі і падыходы?

Больш практычна і бліжэй да рэальнасці

Адначасова з гэтым за апошнія гады ва ўніверсітэтах стала нашмат больш практыкаў. Калі раней расейскія внузскія праграмы актыўна крытыкавалі за тое, што яны адарваныя ад рэальнасці, то сёння так пра IT-адукацыю сказаць ужо нельга. 10 гадоў таму ва ўніверсітэтах амаль не было выкладчыкаў з рэальным вопытам працы ў індустрыі. Цяпер усё часцей на профільнай кафедры заняткі вядуць не штатныя выкладчыкі па камп'ютарных навуках, а практыкуючыя IT-спецыялісты, якія чытаюць толькі 1-2 курсы ў вольны ад асноўнай работы час. Такі падыход апраўдвае сябе з пункту гледжання якаснай падрыхтоўкі кадраў, актуалізацыі курсаў і, вядома ж, пошуку патэнцыйных супрацоўнікаў у кампаніі. Не думаю, што раскрою сакрэт, сказаўшы, што мы падтрымліваем базавую кафедру ў МФТІ і выбудоўваем адносіны з іншымі ВНУ у тым ліку для таго, каб падрыхтаваць студэнтаў, якія маглі б пачаць сваю кар'еру ў Acronis.

Матэматык ці праграміст?

Як выціснуць максімум з Computer Science адукацыі
Халівары, якія раней разгортваліся вакол моў праграмавання, перайшлі ў філасофскае рэчышча. Цяпер адзін з адным спрачаюцца ўмоўныя "праграмісты" і "матэматыкі". У прынцыпе, гэтыя школы маглі б вылучыцца ў дзве адукацыйныя праграмы, але індустрыя ўсё яшчэ дрэнна падзяляе такія тонкасці, і ад ВНУ да ВНУ мы маем падобную адукацыю з крыху розным ухілам. А значыць, што і студэнту, і кампаніі, у якой ён будзе далей працаваць, давядзецца дапаўняць пазл ведаў адсутнымі кавалачкамі.

З'яўленне ў вну практыкаў, якія пішуць прамысловы код на розных мовах дае студэнтам больш якасны навык распрацоўкі. Будучы добра знаёмымі з імплементацыямі стандартных бібліятэк, фрэймворкамі і прыёмамі праграмавання, праграмісты-практыкі выхоўваюць у студэнтах імкненне пісаць добры код, рабіць гэта хутка і якасна.

Гэты карысны навык, тым не менш, часам прыводзіць да з'яўлення аматараў вынаходзіць ровар. Студэнты-праграмісты думаюць так: "што мне варта напісаць яшчэ 200 радкоў добрага кода, які ў лоб вырашыць пастаўленую задачу?".

Выкладчыкі (напрыклад, матфак або прыкладная матэматыка), якія атрымалі класічную матэматычную адукацыю, часцей працуюць у калянавуковым асяроддзі, або ў галіне мадэлявання і аналізу дадзеных. "Матэматыкі" інакш бачаць праблемы ў сферы Computer Science. Яны ў першую чаргу аперуюць не кодам, а алгарытмамі, тэарэмамі, фармальнымі мадэлямі. Важны плюс матэматычнага падыходу - дакладнае прынцыповае разуменне таго, што можна і што нельга вырашыць. І як гэта рашаць.

Адпаведна, педагогі-матэматыкі расказваюць аб праграмаванні з ухілам у бок тэорыі. Студэнты, якія прыходзяць "ад матэматыкаў", часцей прапануюць добра прадуманыя і тэарэтычна больш дасканалыя рашэнні, але, як правіла, неаптымальныя з пункту гледжання мовы і, часцяком, проста неакуратна напісаныя. Такі студэнт лічыць, што яго асноўная мэта - прадэманстраваць уменне вырашаць падобныя задачы ў прынцыпе. А вось рэалізацыя можа кульгаць.

Рабяты, якіх у школе ці на першых курсах выхоўвалі праграмісты, прыносяць з сабой "вельмі прыгожы ровар", які, тым не менш, звычайна працуе не занадта эфектыўна асімптатычна. Яны, наадварот, не ставяць перад сабой задачы глыбока тэарэтызаваць і звяртацца да падручнікаў у пошуках аптымальных рашэнняў, аддаючы перавагу прыгожаму коду.

У розных ВНУ на сумоўях студэнтаў я звычайна бачу, якая "школа" ляжыць у аснове яго адукацыі. І я амаль не сутыкаўся з ідэальным балансам у базавай адукацыі. У дзяцінстве ў маім горадзе можна было рыхтавацца да алімпіяднай матэматыкі, але гурткоў па праграмаванні не было. Цяпер жа ў гуртках дзеці вучацца праграмаваць на "модных" Go і Python. Таму ўжо на ўзроўні паступлення ў ВНУ ёсць разыходжанні ў падыходах. Я лічу, што ва ўніверсітэце важна падтрымліваць абодва навыкі, інакш у кампанію прыйдзе працаваць альбо спецыяліст з недастатковай тэарэтычнай базай, альбо чалавек, які не навучыўся і не жадае пісаць добры код.

Як усёткі "напампаваць перакладзіну" для будучых T-shaped спецыялістаў?

Як выціснуць максімум з Computer Science адукацыі
Зразумела, што ў такіх варунках студэнт проста выбірае тое, што яму больш падабаецца. Выкладчык жа проста транслюе пункт гледжання, які яму бліжэй. Але ўсё выйграюць, калі і код будзе напісаны прыгожа, і з пункту гледжання алгарытмаў усё будзе дакладна, абгрунтавана і эфектыўна.

  • ІТ-кругагляд. Выпускнік бакалаўрыяту ў галіне Computer Science – гэта ўжо гатовы спецыяліст з развітым тэхнічным кругаглядам, які, верагодна, абраў свой профіль. Але на малодшых курсах мы не ведаем, чым ён ці яна зоймецца. Можа пайсці ў навуку ці аналітыку, а можа, наадварот, пісаць вялізную колькасць кода кожны дзень. Такім чынам, студэнту трэба паказаць усе аспекты працы ў IT-сферы, пазнаёміць са ўсімі прыладамі. Ідэальна, калі выкладчыкі з тэарэтычных курсаў будуць паказваць сувязь з практыкай (і наадварот).
  • Кропка росту. Не дапускаць скочвання ў крайнасці - у інтарэсах самога студэнта. Зразумець, хто вы - "матэматык" або "праграміст" - не складана. Досыць прыслухацца да першага парыву пры рашэнні задачы: што вам жадаецца зрабіць - зазірнуць у падручнік у пошуках аптымальнага падыходу ці напісаць пару функцый, якія потым сапраўды спатрэбяцца? Зыходзячы з гэтага можна будаваць далейшую камплементарную траекторыю свайго навучання.
  • Альтэрнатыўныя крыніцы ведаў. Бывае так, што праграма добра збалансаваная, але "Сістэмнае праграмаванне" і "Алгарытмы" вядуць зусім непадобныя людзі, і адным студэнтам бліжэй першы выкладчык, а іншым - другі. Але нават калі вам не падабаецца прафесар, гэта не нагода забіваць на адны прадметы на карысць іншых. Самі бакалаўры зацікаўлены ў тым, каб знайсці ў сабе волю працаваць з крыніцамі ведаў і ні ў якім разе не давяраць радыкальным меркаванням, такім як "матэматыка - царыца навук, галоўнае - ведаць алгарытмы" або "добры код кампенсуе ўсё астатняе".

Паглыбіць свае веды ў тэорыі можна, звярнуўшыся да спецыялізаванай літаратуры і анлайн-курсам. Падцягнуць уменне звяртацца з мовамі праграмавання можна на Coursera, Udacity ці Stepik, дзе прадстаўлена вельмі шмат розных курсаў. Таксама студэнты часта пачынаюць глядзець хардкорныя курсы па мовах, калі адчуваюць, што выкладчык па алгарытмах добра ведае матэматыку, але не можа адказаць на складаныя пытанні ў галіне рэалізацыі. Не ўсе са мной пагодзяцца, але ў маёй практыцы добра сябе зарэкамендавала спецыялізацыя па C++ ад Яндэкса, На якой паслядоўна разбіраюцца ўсё больш складаныя фішкі мовы. У цэлым, выбірайце курс з высокімі ацэнкамі, ад аўтарытэтных кампаній або ВНУ.

Праграмныя навыкі

Як выціснуць максімум з Computer Science адукацыі
Прыходзячы з вну на працу ў любую кампанію, ад стартапа да вялікай карпарацыі, студэнты нават топавых універсітэтаў апыняюцца дрэнна адаптаваныя да рэальнага працоўнага асяроддзя. Справа ў тым, што сёння ВНУ шмат "няньчацца" са студэнтамі. Нават прапусціўшы масу заняткаў, не падрыхтаваўшыся своечасова да кантрольных і залікаў, праспаўшы, спазніўся на іспыт, кожны можа здаць і яшчэ раз пераздаць - і ў выніку ўсё роўна атрымаць дыплом.

Тым не менш, сёння ёсць усе ўмовы для таго, каб студэнтаў рыхтавалі да дарослага жыцця і самастойнай прафесійнай дзейнасці. Ім давядзецца не толькі праграмаваць, але і камунікаваць. І гэтаму таксама трэба навучаць. У ВНУ існуюць розныя фарматы прапампоўвання гэтых навыкаў, але, нажаль, часта ім не надаецца дастатковай увагі. Тым не менш, у нас у арсенале ёсць мноства магчымасцяў атрымаць навыкі эфектыўнай працы ў камандзе.

  • Пісьмовая дзелавая камунікацыя. На жаль, большасць спецыялістаў на выхадзе з ВНУ не маюць паняцця аб этыкете перапіскі. Спецыфіка зносін у мэсэнджарах у абмене паведамленнямі ноччу і днём і выкарыстанні гутарковага стылю і нефармальнай лексікі. Аднак трэніраваць пісьмовую прамову можна было б пры зносінах студэнта з кафедрай і ўніверсітэтам.

    На практыку мэнэджары часта сутыкаюцца з тым, што трэба правесці дэкампазіцыю вялікага праекту на дробныя задачы. Для гэтага трэба добра апісаць кожную задачу і яе складнікі, каб малодшыя распрацоўшчыкі зразумелі, што ад іх патрабуецца. Дрэнна пастаўленая задача часта прыводзіць да неабходнасці нешта перарабляць, і таму досвед у пісьмовай камунікацыі дапамагае выпускнікам працаваць у размеркаваных камандах.

  • Пісьмовая прэзентацыя вынікаў сваёй працы. Для прэзентацыі сваіх навучальных праектаў студэнты старэйшых курсаў могуць пісаць пасады на Хабр, навуковыя артыкулы, а таксама проста справаздачы. Для гэтага ёсць шмат магчымасцей - ужо з другога курса ў некаторых ВНУ пачынаюцца курсавыя работы. Таксама можна выкарыстоўваць эсэ як форму кантролю - звычайна яны па форме бліжэй да публіцыстычнага артыкула. Такі падыход ужо рэалізаваны ў НДУ ВШЭ.

    Калі кампанія практыкуе гнуткі падыход у распрацоўцы, прадстаўляць вынікі сваёй працы даводзіцца больш дробнымі порцыямі, але затое часцей. Для гэтага важна ўмець коратка даносіць вынік працы аднаго адмыслоўца ці ўсёй каманды. Таксама ў многіх кампаніях сёння праводзяцца "рэўю" – штогадовыя або паўгадавыя. Супрацоўнікі абмяркоўваюць вынікі і далягляды працы. Паспяховае рэўю з'яўляецца галоўнай прычынай кар'ернага росту, прэмій, напрыклад, у Microsoft, Acronis або Яндэксе. Так, вы можаце добра праграмаваць, але "седзячы ў куце" нават круты спецыяліст заўсёды прайграе таму, хто ўмее добра прэзентаваць свой поспех.

  • Акадэмічная пісьменнасць. Асобна варта вылучыць academic writing. Студэнтам карысна пазнаёміцца ​​з правіламі напісання навуковых тэкстаў, выкарыстанні аргументаў, пошуку інфармацыі ў розных крыніцах і афармленні спасылак на гэтыя крыніцы. Пажадана рабіць гэта на англійскай мове, бо ў міжнароднай акадэмічнай супольнасці значна больш добрых тэкстаў, а для розных дысцыплін ужо ёсць устояныя шаблоны прадстаўлення навуковых вынікаў. Вядома, навыкі акадэмічнага ліста патрэбны і пры падрыхтоўцы рускамоўных публікацый, але прыкладаў добрых сучасных артыкулаў на англійскай нашмат менш. Атрымаць гэтыя навыкі можна ў рамках адпаведнага курса, які зараз уваходзіць у многія адукацыйныя праграмы.
  • Вядзенне сустрэч. Большасць студэнтаў не ўмее рыхтавацца да сустрэч, весці пратакол і апрацоўваць звесткі. Але калі развіваць гэты навык у ВНУ, напрыклад, удзельнічаючы ў калектыўных праектах, мы зможам пазбегнуць пустога марнавання часу на працоўным месцы. Для гэтага патрэбен кантроль над праектнай працай студэнтаў, каб навучыць іх эфектыўна праводзіць сустрэчы. На практыцы гэта каштуе кожнай карпарацыі кучу грошай - бо калі адразу некалькі чалавек, якія атрымліваюць вялікі заробак, праводзяць гадзіну працоўнага часу на мітынгу, хочацца, каб ад яго была адпаведная аддача.
  • Публічнае выступ. Многія студэнты сутыкаюцца з неабходнасцю выступіць публічна толькі на абароне дыпломнай працы. І далёка не ўсе аказваюцца гатовы да гэтага. Я бачыў шмат студэнтаў, якія:
    • стаяць спіной да слухачоў,
    • разгойдваюцца, спрабуючы ўвесці камісію да транс,
    • ламаюць ручкі, алоўкі і ўказкі,
    • ходзяць коламі,
    • глядзяць у падлогу.

    Гэта нармальна, калі чалавек выступае ўпершыню. Але з гэтым стрэсам трэба пачынаць працаваць раней - з абароны курсавых работ у сяброўскай атмасферы, сярод аднакурснікаў.

    Да таго ж стандартная практыка ў карпарацыях - даць магчымасць супрацоўніку прапанаваць ідэю, атрымаць на яе фінансаванне, пазіцыю або выдзелены праект. Але, калі задумацца - гэта такая ж абарона курсавой працы, проста на больш высокім узроўні. Чаму ж не трэніраваць такія карысныя кар'ерныя навыкі падчас вучобы?

Што я выпусціў?

Адной з нагод да напісання гэтай пасады стаў артыкул, апублікаваная на сайце ЦюмДУ. Аўтар артыкула факусуюць толькі на недахопах расійскіх студэнтаў, заўважаных замежнымі выкладчыкамі. Практыка майго выкладання ў розных ВНУ сведчыць аб тым, што расійская школьная і вышэйшая адукацыя дае добрую базу. Расійскія студэнты падкаваны ў матэматыцы і алгарытмах, з імі прасцей выбудоўваць прафесійную камунікацыю.

У выпадку з замежнымі студэнтам, наадварот, чаканні расійскага выкладчыка часам могуць аказацца завышанымі. Напрыклад, на ўзроўні базавай падрыхтоўкі па ўзроўні матэматыкі сустрэтыя мною індыйскія студэнты падобныя да расійскіх. Аднак ім часам не хапае спецыяльных ведаў на выхадзе з бакалаўрыяту. Добрыя еўрапейскія студэнты хутчэй будуць мець менш моцную матэматычную падрыхтоўку на школьным узроўні.

І калі вы вучыцеся ці працуеце ў ВНУ, можна ўжо зараз выбудоўваць працу над камунікатыўнымі навыкамі (сваімі ці студэнтаў), пашыраць фундаментальную базу і практыкавацца ў праграмаванні. Для гэтага ў сістэме расійскай адукацыі прадугледжаны ўсе магчымасці - трэба толькі правільна імі скарыстацца.

Я буду рады, калі ў каментарах да пасады вы падзеліцеся сваімі спасылкамі на курсы і метады, якія дапамагаюць выраўнаваць баланс у адукацыі, а таксама іншымі спосабамі прапампаваць soft skills падчас вучобы ў ВНУ.

Крыніца: habr.com

Дадаць каментар