Większość współczesnych programistów otrzymała wykształcenie na uczelniach. Z czasem to się zmieni, ale obecnie sytuacja wygląda tak, że dobre kadry w firmach IT wciąż pochodzą z uniwersytetów. W tym poście Stanisław Protasow, dyrektor ds. relacji z uniwersytetami w Acronis, dzieli się swoim spojrzeniem na specyfikę przygotowania przyszłych programistów w szkołach wyższych. Wykładowcy, studenci i ci, którzy ich zatrudniają, mogą z pewnością znaleźć pod tym wpisem kilka przydatnych wskazówek.
Od dziesięciu lat uczę matematyki, algorytmów, języków programowania i uczenia maszynowego na różnych uczelniach. Dziś oprócz swojej roli w Acronis jestem także zastępcą kierownika Katedry Informatyki Teoretycznej i Stosowanej na MFTI. Z doświadczenia zdobytego w dobrych rosyjskich (i nie tylko) uniwersytetach wyciągnąłem pewne obserwacje dotyczące przygotowania studentów w dziedzinie dyscyplin komputerowych.
Reguła 30 sekund już nie działa
Jestem pewien, że spotkaliście się z regułą 30 sekund, która mówi, że programista powinien zrozumieć cel funkcji po szybkim spojrzeniu na jej kod. Została wymyślona dawno temu, od tamtej pory pojawiło się wiele systemów operacyjnych, języków, sprzętu i algorytmów. Piszę kod od 12 lat, ale stosunkowo niedawno widziałem źródła pewnego produktu, które na pierwszy rzut oka wydawały mi się magicznymi zaklęciami. Dziś, jeśli nie jesteś zgłębiony w danej dziedzinie, reguła 30 sekund przestaje działać. W przeciwnym razie nie wystarczy ci nawet 30, ale i 300 sekund, aby zrozumieć, o co chodzi.
Na przykład, jeśli chcesz pisać sterowniki, musisz zanurzyć się w tej dziedzinie, przeczytać tysiące linii specyficznego kodu. Przy takim podejściu do nauki tematu specjalista zyskuje „uczucie flow”. Tak jak w rapie, kiedy poczucie dobrej rymy i odpowiedniego rytmu pojawia się bez specjalnej racjonalizacji. Podobnie dobrze przygotowany programista może łatwo rozpoznać nieefektywny lub po prostu zły kod, nie wdając się w szczegółowe badania tego, gdzie doszło do naruszenia stylu lub zastosowano nieoptymalne podejście (ale wyjaśnienie tego uczucia bywa bardzo trudne).
Specjalizacja i rosnąca złożoność sprawiają, że studia licencjackie nie dają już możliwości głębokiego zgłębienia wszystkich kierunków. To właśnie na tym poziomie edukacji trzeba zdobywać ogólną wiedzę. Później, na studiach magisterskich lub w pracy, trzeba będzie poświęcić trochę czasu na zanurzenie się w tematykę i specyfikę danej dziedziny, nauczyć się slangu, języków programowania oraz kodu współpracowników, a także przeczytać artykuły i książki. Uważam, że tylko w ten sposób, z pomocą uniwersytetu, można „wycisnąć baryłkę” na przyszłość. .
Jaki język programowania jest najlepszy do nauczania na uniwersytecie?

Z radością zauważam, że wykładowcy uniwersytetów już zrezygnowali z poszukiwania poprawnej odpowiedzi na pytanie: „Na czym najlepiej programować?”. Spory dotyczące tego, co jest lepsze - C# czy Java, Delphi czy C++ - praktycznie wygasły. Pojawienie się wielu nowych języków programowania oraz akumulacja doświadczeń pedagogicznych doprowadziły do tego, że w środowisku akademickim ugruntowało się przekonanie: dla każdego języka istnieje jego własna nisza.
Problem nauczania przy użyciu danego języka programowania przestał być priorytetowy. Nieważne, w jakim języku prowadzi się kurs. Najważniejsza jest wystarczająca ekspresywność języka. Książka „” jest doskonałym przykładem tego spostrzeżenia. W tym już klasycznym wydaniu wszystkie przykłady przedstawione są w języku Java — języku bez wskaźników, ale z Garbage Collectorem. Trudno się spierać, że Java jest daleka od optymalnego wyboru do pisania wydajnego kodu równoległego. Jednak do wyjaśnienia koncepcji zawartych w książce język okazał się odpowiedni. Innym przykładem jest Andrew Ng, prowadzony w języku Matlab w środowisku Octave. Dziś można byłoby wybrać inny język programowania, ale jaka to ma w rzeczywistości różnica, jeśli kluczowe są idee i podejścia?
Praktyczniejszym i bliższym rzeczywistości
W ciągu ostatnich kilku lat w uniwersytetach pojawiło się znacznie więcej praktyków. Jeśli wcześniejsze programy edukacyjne w rosyjskich uczelniach były krytykowane za oderwanie od rzeczywistości, to dziś nie można już tak powiedzieć o edukacji IT. 10 lat temu w uniwersytetach prawie nie było wykładowców z rzeczywistym doświadczeniem pracy w branży. Obecnie coraz częściej zajęcia w katedrach prowadzą nieetatowi wykładowcy z dziedziny informatyki, ale praktykujący specjaliści IT, którzy uczą tylko 1-2 kursy w wolnym czasie od głównej pracy. Takie podejście sprawdza się z punktu widzenia jakości kształcenia, aktualizacji kursów i, co najważniejsze, poszukiwania potencjalnych pracowników dla firm. Nie sądzę, żebym ujawniał jakąś tajemnicę, mówiąc, że wspieramy katedrę podstawową w MFTI i budujemy relacje z innymi uczelniami, aby przygotować studentów, którzy mogliby rozpocząć swoją karierę w Acronis.
Matematyk czy programista?

Wojny, które wcześniej toczyły się wokół języków programowania, przeszły w filozoficzne tory. Teraz toczą się spory między tzw. „programistami” i „matematykami”. W zasadzie te szkoły mogłyby zostać wydzielone w dwa różne programy edukacyjne, ale branża wciąż słabo rozróżnia takie niuanse, a z uczelni na uczelnię mamy podobne wykształcenie z nieco innym akcentem. A zatem zarówno student, jak i firma, w której będzie pracować, będą musieli uzupełniać swoją wiedzę o brakujące elementy.
Pojawienie się w uczelniach praktyków, którzy piszą kod przemysłowy w różnych językach, daje studentom bardziej wartościowe umiejętności w zakresie programowania. Dzięki dobrej znajomości implementacji standardowych bibliotek, frameworków i technik programowania, praktykujący programiści kształtują w studentach dążenie do pisania dobrego kodu, robienia tego szybko i efektywnie.
Ta przydatna umiejętność czasami prowadzi jednak do powstawania entuzjastów wynajdywania koła na nowo. Studenci-programiści myślą: „Co mi przeszkadza napisać jeszcze 200 linijek dobrego kodu, które bezpośrednio rozwiąże postawione zadanie?”.
Nauczyciele z klasycznym wykształceniem matematycznym (np. z matematyki teoretycznej lub matematyki stosowanej) częściej pracują w środowisku naukowym lub w obszarze modelowania i analizy danych. "Matematycy" postrzegają problemy z dziedziny informatyki w inny sposób. W pierwszej kolejności operują nie kodem, a algorytmami, twierdzeniami, formalnymi modelami. Ważną zaletą matematycznego podejścia jest wyraźne, zasadnicze zrozumienie tego, co można, a czego nie można rozwiązać oraz jak to rozwiązać.
W związku z tym nauczyciele matematyki tłumaczą programowanie z naciskiem na teorię. Studenci, którzy przychodzą "od matematyków", częściej proponują dobrze przemyślane i teoretycznie bardziej zaawansowane rozwiązania, ale zazwyczaj nieoptymalne pod kątem języka i często po prostu niechlujnie napisane. Taki student uważa, że jego głównym celem jest pokazanie umiejętności rozwiązywania podobnych zadań w ogóle. Realizacja jednak może być nieudolna.
Młodzi ludzie, których w szkołach lub na pierwszych kursach uczyli programiści, przynoszą ze sobą "bardzo piękny rower", który jednak z reguły działa niespecjalnie efektywnie asymptotycznie. Oni, przeciwnie, nie stawiają sobie za cel głębokiego teoretyzowania i sięgania do podręczników w poszukiwaniu optymalnych rozwiązań, preferując piękny kod.
W różnych uczelniach podczas rozmów kwalifikacyjnych z studentami zazwyczaj widzę, jaka "szkoła" leży u podstaw ich edukacji. Prawie nigdy nie spotkałem idealnego balansu w podstawowym wykształceniu. W dzieciństwie w moim mieście można było przygotowywać się do olimpiady matematycznej, ale kółek programistycznych nie było. Teraz w kółkach dzieci uczą się programować w "modnych" językach Go i Python. Dlatego już na etapie rekrutacji na uczelnie występują różnice w podejściu. Uważam, że na uniwersytecie ważne jest rozwijanie obu umiejętności, w przeciwnym razie do firmy przyjdzie albo specjalista z niewystarczającą teorią, albo osoba, która nie nauczyła się i nie chce pisać dobrego kodu.
Jak zatem "wzmocnić drążek" dla przyszłych

Oczywiste jest, że w takich warunkach student po prostu wybiera to, co mu bardziej odpowiada. Nauczyciel natomiast po prostu przekazuje punkt widzenia, który jest mu bliższy. Jednak wszyscy zyskają, jeśli kod będzie napisany estetycznie, a z punktu widzenia algorytmów wszystko będzie jasne, uzasadnione i efektywne.
- Horyzonty IT. Absolwent studiów licencjackich w dziedzinie Informatyki to już gotowy specjalista z rozwiniętymi horyzontami technicznymi, który prawdopodobnie wybrał swój profil. Jednak na niższych kursach nie wiemy, czym on lub ona się zajmie. Może pójść do nauki lub analityki, a może, przeciwnie, pisać ogromne ilości kodu każdego dnia. W związku z tym student musi zapoznać się ze wszystkimi aspektami pracy w branży IT, poznać wszystkie narzędzia. Idealnie, jeśli wykładowcy z kursów teoretycznych będą pokazywać powiązania z praktyką (i odwrotnie).
- Punkt wzrostu. Nie pozwolić na popadnięcie w skrajności — w interesie samego studenta. Zrozumieć, kim jesteś — „matematyk” czy „programista” — nie jest trudno. Wystarczy wsłuchać się w pierwszy impuls przy rozwiązywaniu problemu: co chcesz zrobić — zajrzeć do podręcznika w poszukiwaniu optymalnego podejścia, czy napisać kilka funkcji, które potem z pewnością się przydadzą? Na podstawie tego można budować dalszą komplementarną ścieżkę swojej nauki.
- Alternatywne źródła wiedzy. Bywa tak, że program jest dobrze zbilansowany, ale „Programowanie systemowe” i „Algorytmy” prowadzą zupełnie różni ludzie, i jednym studentom bliżej jest pierwszy wykładowca, a innym — drugi. Ale nawet jeśli nie lubisz profesora, to nie powód, aby ignorować jeden przedmiot na rzecz innych. Sami studenci licencjacki są zainteresowani tym, aby znaleźć w sobie wolę pracy z źródłami wiedzy i w żadnym wypadku nie ufać skrajnym opiniom, takim jak „matematyka jest królową nauk, najważniejsze — znać algorytmy” lub „dobry kod rekompensuje wszystko inne”.
Poszerzanie wiedzy teoretycznej można osiągnąć, sięgając po specjalistyczną literaturę i kursy online. Umiejętność posługiwania się językami programowania można poprawić na platformach takich jak Coursera, Udacity czy Stepik, gdzie dostępnych jest wiele różnych kursów. Studenci często decydują się na trudniejsze kursy po językach, gdy czują, że nauczyciel od algorytmów dobrze zna matematykę, ale nie potrafi odpowiedzieć na skomplikowane pytania dotyczące implementacji. Nie wszyscy się z tym zgodzą, ale w mojej praktyce sprawdza się , na której stopniowo omawiane są coraz bardziej złożone kwestie języka. Ogólnie wybieraj kursy z wysokimi ocenami, oferowane przez renomowane firmy lub uczelnie.
Umiejętności miękkie

Wchodząc z uczelni do pracy w jakiejkolwiek firmie, od startupów po duże korporacje, studenci nawet z najlepszych uniwersytetów często są słabo przystosowani do rzeczywistego środowiska pracy. Problem polega na tym, że dzisiejsze uczelnie zbytnio "troszczą się" o studentów. Nawet pomijając wiele zajęć, nie przygotowując się na czas do testów i zaliczeń, zasypiając, spóźniając się na egzaminy, każdy może zdać, a nawet podejść do egzaminu ponownie — i w rezultacie i tak zdobyć dyplom.
Niemniej jednak, obecnie istnieją wszystkie warunki, aby przygotowywać studentów do dorosłego życia i samodzielnej działalności zawodowej. Będą musieli nie tylko programować, ale i komunikować się. I tego również należy uczyć. Na uniwersytetach istnieją różne formaty rozwijania tych umiejętności, ale niestety często nie poświęca się im dostatecznej uwagi. Niemniej jednak, mamy w arsenale wiele możliwości zdobycia umiejętności efektywnej pracy w zespole.
- Pisemna komunikacja biznesowa. Niestety, większość specjalistów opuszczających uczelnię nie ma pojęcia o etykiecie korespondencji. Specyfika komunikacji w komunikatorach, wymiana wiadomości w nocy i w ciągu dnia oraz wykorzystywanie stylu rozmównego i nieformalnej leksyki. Jednak trening umiejętności pisania mógłby odbywać się podczas kontaktów studentów z katedrą i uniwersytetem.
W praktyce menedżerowie często stają przed wyzwaniem dekompozycji dużego projektu na mniejsze zadania. W tym celu należy dokładnie opisać każde zadanie i jego składniki, aby młodsi programiści zrozumieli, czego od nich oczekuje. Źle postawione zadanie często prowadzi do konieczności przepracowania czegoś, dlatego umiejętności w zakresie komunikacji pisemnej pomagają absolwentom pracować w rozproszonych zespołach.
- Pisanie podsumowań wyników swojej pracy. Aby zaprezentować swoje projekty edukacyjne, studenci wyższych lat mogą pisać artykuły na Habr, publikacje naukowe oraz po prostu raporty. Istnieje wiele możliwości – już od drugiego roku w niektórych uczelniach zaczynają się prace semestralne. Eseje mogą również służyć jako forma oceny – zazwyczaj są one bardziej zbliżone do artykułów publicystycznych. Takie podejście zostało już wdrożone w NIKO WSHE.
Jeśli firma praktykuje elastyczne podejście do rozwoju, wyniki pracy należy przedstawiać w mniejszych porcjach, ale częściej. Warto então umieć krótko komunikować wyniki pracy jednego specjalisty lub całego zespołu. Wiele firm organizuje obecnie „przeglądy” – coroczne lub półroczne. Pracownicy omawiają wyniki i perspektywy pracy. Udany przegląd jest głównym powodem awansu kariery oraz premii, na przykład w Microsoft, Acronis czy Yandex. Tak, możesz dobrze programować, ale „siedząc w kącie”, nawet najlepszy specjalista zawsze przegrywa z tym, kto potrafi dobrze prezentować swoje osiągnięcia.
- Pisanie akademickie. Osobnym zagadnieniem jest pisanie akademickie. Studentom przydatne jest zapoznanie się z zasadami pisania tekstów naukowych, używania argumentacji, poszukiwania informacji w różnych źródłach i formatowania odnośników do tych źródeł. Wskazane jest, aby robić to w języku angielskim, ponieważ w międzynarodowej społeczności akademickiej jest znacznie więcej dobrych tekstów, a dla różnych dziedzin są już ustalone szablony prezentacji wyników naukowych. Oczywiście umiejętności pisania akademickiego są również potrzebne przy przygotowywaniu publikacji w języku rosyjskim, ale liczba przykładów dobrych nowoczesnych artykułów w języku angielskim jest znacznie mniejsza. Umiejętności te można zdobyć w ramach odpowiedniego kursu, który obecnie wchodzi w skład wielu programów edukacyjnych.
- Prowadzenie spotkań. Większość studentów nie potrafi przygotować się do spotkań, prowadzić protokołów i przetwarzać danych. Jednak jeśli rozwiniemy tę umiejętność na uczelni, na przykład uczestnicząc w projektach grupowych, będziemy mogli uniknąć marnowania czasu w pracy. W tym celu konieczna jest kontrola nad pracą projektową studentów, aby nauczyć ich efektywnego prowadzenia spotkań. W praktyce kosztuje to każdą korporację mnóstwo pieniędzy - jeśli kilka osób otrzymujących wysokie pensje spędza godzinę pracy na spotkaniu, chce się, aby przynosiło to odpowiednią zwrotność.
- Publiczne wystąpienia. Wiele studentów staje przed koniecznością wystąpienia publicznego tylko podczas obrony pracy dyplomowej. I nie wszyscy są na to przygotowani. Widziałem wielu studentów, którzy:
- stoją tyłem do słuchaczy,
- kołyszą się, próbując wprowadzić komisję w trans,
- łamią długopisy, ołówki i wskaźniki,
- przechadzają się w kółko,
- patrzą w podłogę.
To normalne, że ktoś występuje po raz pierwszy. Ale z tym stresem trzeba zacząć pracować wcześniej — podczas obron prac kursowych w przyjaznej atmosferze, wśród kolegów z roku.
Ponadto standardową praktyką w korporacjach jest umożliwienie pracownikowi zaproponowania pomysłu, uzyskania na niego finansowania, stanowiska lub przyznania projektu. Ale jeśli się nad tym zastanowić — to taka sama obrona pracy kursowej, tylko na wyższym poziomie. Dlaczego więc nie trenować takich przydatnych umiejętności kariery podczas nauki?
Co pominąłem?
Jednym z powodów napisania tego posta była artykuł, . Autor artykułu skupia się tylko na niedociągnięciach rosyjskich studentów, zauważonych przez zagranicznych wykładowców. Praktyka mojego nauczania w różnych uczelniach wskazuje, że rosyjskie szkolnictwo podstawowe i wyższe daje dobrą podstawę. Rosyjscy studenci są dobrze obeznani w matematyce i algorytmach, z nimi łatwiej budować profesjonalną komunikację.
W przypadku zagranicznych studentów oczekiwania rosyjskiego nauczyciela mogą czasem być zawyżone. Na przykład indyjscy studenci, których spotkałem na poziomie podstawowym matematyki, są podobni do rosyjskich. Jednak czasami brakuje im specjalistycznej wiedzy po ukończeniu licencjatu. Dobrzy studenci europejscy zazwyczaj mają mniej solidne przygotowanie matematyczne na poziomie szkolnym.
Jeśli uczysz się lub pracujesz na uczelni, już teraz możesz zacząć pracować nad umiejętnościami komunikacyjnymi (swoimi lub studentów), poszerzać podstawową wiedzę oraz praktykować programowanie. W systemie rosyjskiej edukacji przewidziano wszystkie możliwości — wystarczy tylko odpowiednio z nich skorzystać.
Będę wdzięczny, jeśli w komentarzach do postu podzielicie się swoimi linkami do kursów i metod, które pomagają wyrównać nierówności w edukacji, a także innymi sposobami na rozwijanie umiejętności miękkich podczas nauki na uczelni.
Źródło: habr.com
