1. Практика

Онлайн-курсы «Структуры и алгоритмы данных» на Coursera. Отзыв читателя

Каж­дый день по­яв­ля­ют­ся но­вые про­грам­мы, он­лайн и офлайн-кур­сы. Са­мая слож­ная за­да­ча — вы­брать один про­дукт из ши­ро­ко­го ас­сор­ти­мен­та. «Цех» про­сит чи­та­те­лей по­де­лить­ся сво­им опы­том про­хож­де­ния раз­лич­ных кур­сов и про­грам­м, что­бы мы мог­ли учить­ся луч­ше­му у луч­ших. По­лу­чен­ные от­зы­вы, ко­то­рые бу­дут со­от­вет­ство­вать всем необ­хо­ди­мым тре­бо­ва­ни­ям, мы опуб­ли­ку­ем. Се­год­ня сво­им опы­том обу­че­ния де­лит­ся Ар­се­ний Сот­ский.




Я хочу рас­ска­зать не про курс, а про це­лую спе­ци­а­ли­за­цию «Струк­ту­ры и ал­го­рит­мы дан­ных» (Data struc­tures and al­go­rithms) на Cours­era. Она со­сто­ит из ше­сти кур­сов, вы­пу­щен­ных сов­мест­но с Ка­ли­фор­ний­ским уни­вер­си­те­том Сан-Ди­его и мос­ков­ской Выс­шей шко­лой эко­но­ми­ки.

На­у­ка об ал­го­рит­мах — это на­у­ка о том, как про­грам­ми­сту на­пи­сать про­грам­му так, что­бы она ре­ша­ла по­став­лен­ную за­да­чу, и при этом ра­бо­та­ла се­кун­ду вме­сто по­лу­ча­са или, если речь идет о боль­ших дан­ных, — пару ча­сов вме­сто неде­ли. Каж­дый из этих ше­сти кур­сов вполне са­мо­до­ста­то­чен, и при долж­ном уровне зна­ний сту­дент мо­жет прой­ти лю­бой от­дель­но. Кро­ме, по­жа­луй, по­след­не­го, ко­то­рый пред­став­ля­ет из себя прак­ти­че­ский про­ект.

Пер­вые два кур­са (6+6 недель) рас­ска­зы­ва­ют о ба­зо­вых ал­го­рит­мах и струк­ту­рах дан­ных, сле­ду­ю­щие три (6+4+5 недель) бо­лее спе­ци­а­ли­зи­ро­ван­ные: в них раз­би­ра­ют ал­го­рит­мы на гра­фах, стро­ках и про­дви­ну­тые ал­го­рит­мы. Про­ект, на ре­а­ли­за­цию ко­то­ро­го от­во­дит­ся 3 неде­ли, по­свя­щен рас­шиф­ров­ке ге­но­ма: со­зда­те­ли кур­са пред­ла­га­ют прой­ти путь уче­ных, ко­то­рые недав­но за­ни­ма­лись этим во­про­сом. По­лу­ча­ет­ся, весь учеб­ный про­цесс за­ни­ма­ет 30 недель — вну­ши­тель­ный срок. Если у вас нет та­ко­го ко­ли­че­ства сво­бод­но­го вре­ме­ни, оста­но­ви­тесь на пер­вых 2-3 кур­сах, это тоже бу­дет по­лез­но.

Я за­кон­чил эту спе­ци­а­ли­за­цию в мае это­го года, под ко­нец 4 кур­са обу­че­ния в уни­вер­си­те­те. Это было нелег­ко, осо­бен­но в усло­ви­ях жест­ко­го дед­лай­на — спе­ци­а­ли­за­цию нуж­но было за­вер­шить пол­но­стью до на­ча­ла июня. Со­ве­тую ра­зум­но рас­пре­де­лять вре­мя: на­при­мер, по­оче­ред­но про­хо­дить кур­сы в те­че­ние учеб­но­го года.

Цель мо­е­го обу­че­ния была про­стая — по­лу­чить хо­ро­шую и уве­рен­ную базу во вла­де­нии ал­го­рит­ма­ми и струк­ту­ра­ми дан­ных, что­бы при­ме­нять по­лу­чен­ные зна­ния в про­грам­ми­ро­ва­нии. Кста­ти, пе­ред на­ча­лом кур­са необ­хо­ди­мо об­ла­дать на­чаль­ны­ми на­вы­ка­ми в этой об­ла­сти — оцен­ка за курс скла­ды­ва­ет­ся из ре­шен­ных за­дач (про­грам­мы мож­но пи­сать по­чти на лю­бом из­вест­ном вам язы­ке про­грам­ми­ро­ва­ния) и неболь­ших те­стов. Все обу­че­ние про­хо­дит он­лайн: каж­дую неде­лю нуж­но смот­реть ви­део­лек­ции (сум­мар­но пол­то­ра-два часа) и ре­шать за­да­чи по теме неде­ли. От­прав­лять ва­ри­ан­ты ре­ше­ний за­дач мож­но сколь­ко угод­но — си­сте­ма про­ве­ря­ет ваш код на те­стах ав­то­ма­ти­че­ски и го­во­рит, про­шла ли про­грам­ма все те­сты, или что-то пошло не так и код надо ис­пра­вить. Так­же во вре­мя уче­бы мож­но было за­да­вать во­про­сы на фо­ру­ме — от­ве­ча­ли как сту­ден­ты, так и сами со­ста­ви­те­ли.

В раз­ра­бот­ке про­грам­мы спе­ци­а­ли­за­ции при­ни­мал уча­стие це­лый про­фес­си­о­наль­ный кол­лек­тив пре­по­да­ва­те­лей. Они чет­ко, по­дроб­но и по­нят­но объ­яс­ня­ют все но­вые по­ня­тия, ал­го­рит­мы и их им­пле­мен­та­цию, а все слай­ды лек­ций до­ступ­ны для ска­чи­ва­ния. Что мне осо­бен­но по­нра­ви­лось: пе­ред объ­яс­не­ни­ем ал­го­рит­ма при­во­ди­ли прак­ти­че­скую за­да­чу, в ре­ше­нии ко­то­рой он мо­жет по­мочь. В ре­зуль­та­те ал­го­ритм из непо­нят­но для чего нуж­ной тео­ре­ти­че­ской ерун­ды сра­зу пре­вра­ща­ет­ся в прак­ти­че­ский ин­стру­мент. На­при­мер, пе­ред рас­ска­зом про об­ход гра­фа лек­тор ска­зал пару слов про по­стро­е­ние крат­чай­ше­го марш­ру­та в кар­тах на на­шем смарт­фоне — там, в част­но­сти, и при­ме­ня­ет­ся этот ал­го­ритм.

Спе­ци­а­ли­за­ция ока­за­лась для меня но­вой, ин­те­рес­ной и по­лез­ной — ал­го­рит­мы бу­дут спра­ши­вать на лю­бом со­бе­се­до­ва­нии для про­грам­ми­стов, да и в ра­бо­те они нуж­ны (а если не они, то ме­тод мыш­ле­ния, ко­то­рый раз­ви­ва­ет­ся при их изу­че­нии). Я со­ве­тую ее всем, кому ин­те­рес­но про­грам­ми­ро­ва­ние и кто хо­чет разо­брать­ся в ал­го­рит­мах, их при­ме­не­нии и струк­ту­рах дан­ных.