Skrótowy przegląd z najważniejszymi myślami z podcastu Python Junior: omówiliśmy, od czego zacząć i dokąd skierować się jako początkujący programista w Pythonie. Ostatnio mieliśmy wiele treści dla średniozaawansowanych i zaawansowanych, ale ten odcinek jest zdecydowanie dla juniorów.

Główne tematy:
- Jakie umiejętności są potrzebne początkującemu programiście, aby zająć się
tworzeniem stron internetowych? - Czego oczekują pracodawcy od programistów?
- Co zrobić, aby znaleźć pracę bez doświadczenia?
- Jak może rozwijać się programista Python?
Python Junior Podcast — podcast o programowaniu dla tych, którzy chcą lepiej rozumieć Pythona. W audycji prowadzą ewangelizatorzy społeczności i wykładowcy kursów .
W rozmowie wzięli udział:
- Walentyn Dombrowski,współzałożyciel MoscowPython
- Zlata Obuchowska, lider zespołu w NVIDIA
- Grigorij Pietrow, ewangelizator MoscowPython
- Alieksej Szytniakiew, programista w FinEx, wykładowca kursów Learn
Python
Dlaczego Python jest dobry do tworzenia stron internetowych
Walentyn Dombrowski: Dlaczego to właśnie Python nadaje się do tworzenia stron internetowych? Dlaczego nie PHP lub JavaScript, na przykład?
Grigorij Pietrow: Wybór jest dość ograniczony. Mimo że we współczesnym internecie można właściwie funkcjonować bez backendu — zbierając aplikację jednolitych stron czy progresywną aplikację internetową wyłącznie za pomocą technologii frontendowych na JavaScript — nadal jest to zbyt skomplikowane, źle indeksowane i wymaga utalentowanych programistów.
Jeśli chcemy stworzyć stronę lub serwis, stosujemy podejście hybrydowe: mamy jakiś backend, który wykonuje logikę i tworzy strony internetowe, oraz frontend, który wyświetla te strony w przeglądarce. A gdy potrzebujemy szybko coś stworzyć, to wybór jest dość ograniczony.
Przyjrzyjmy się możliwym opcjom.
- C#. Microsoft naprawdę dobrze to rozwinął, stworzyli .NET Core i wszelkimi sposobami ją promują. Ale po pierwsze, to nowa technologia wieloplatformowa i nie wszystko jeszcze działa płynnie. Po drugie, jest to naprawdę kosztowne, programistów C# jest mało — po prostu dlatego, że nie jest popularna.
- Java. To skomplikowane. Zrobienie normalnej strony w Java to nie 10 linijek kodu, jak w Pythonie. To mnóstwo kodu, mamy frameworki i należy znać specyfikę konfiguracji serwerów Java. W skrócie, same bóle i cierpienia.
- PHP. W najnowszych wersjach jest znakomity. Powiem nawet tak: PHP 7.2 nie jest gorszy od Pythona. Ale nie można po prostu wziąć i używać PHP 7.2. Jeśli zwykły, nie najwyższej klasy programista tworzy stronę na PHP, nie będzie pisał tylko w 7.2: i tak będzie musiał czytać jakieś podręczniki, tutoriale, wszędzie pełno jest kodu legacy, a to nie jest dobre.
- JavaScript i Node.js. To wspaniałe i bardzo nowoczesne, gdy jeden język jest zarówno na froncie, jak i na backendzie. Tylko, że nie jest zbyt stabilnie. Node.js to fajna rzecz, ale problematyczne jest jej wdrożenie w produkcji tak, aby nie padała i działała stabilnie. Poza tym, jeśli chcemy pisać wysokiej jakości kod w JavaScript, potrzebujemy nie JavaScriptu, lecz TypeScript. A TypeScript niespodziewanie jest skomplikowany, gdyby przeciętny programista go zobaczył, to zagotowałby mu się mózg.
Odłóżmy Ruby, Haskell, Erlang i inne niszowe rzeczy, a zostaje nam… Python. Język o spójnym składniowym, jednolitej bibliotece standardowej, najlepszej dokumentacji, popularnych lekkich frameworkach, megacentralnym kombajnie Django.
Okazuje się, że mimo szerokiego wyboru, jeśli mamy zwykłych, nie najwyższej klasy programistów, my jesteśmy zwykłym biznesem, który chce robić zwykłe strony, nie mamy działu programowania składającego się z 50 osób, więc bierzemy Pythona.
Jakie umiejętności są potrzebne do wejścia w zawód
Zlata Obuchowska: Uważam, że jeden framework trzeba znać dobrze – i wiedzieć, jakie inne są i kiedy ich używać. Gdzie jest Tornado, gdzie Django, gdzie Flask, gdzie aiohttp i tak dalej.
Przyda się wiedzieć, że są takie rzeczy jak protokoły. W szczególności, znajomość protokołu http jest kluczowa do budowy aplikacji webowych.
Należy też przynajmniej w przybliżeniu mieć pojęcie, jak w projektach webowych zorganizowany jest frontend: co to jest HTML, CSS, JS.
Aleksiej Szyrniajew: I wiedzieć, gdzie znajduje się dokumentacja. To najważniejsze.
Grigorij Pietrow: Tutaj stąpamy po bardzo chwiejnej ziemi. Jeśli nie mieliśmy szczęścia i zaczęliśmy w jakiś poważny sposób badać nowoczesny frontend, to będzie on około 10 razy trudniejszy niż backend w Pythonie. Początkujący programista musi ograniczyć swój fokus tak, aby zacząć uczyć się HTML, ale nie popaść w te wszystkie div, span, float, jak to wszystko się wyrównuje i układa.
Aleksiej Szyrniajew: Potrzebny jest podstawowy kurs Bootstrap. I podstawy HTML.
W pierwszym roku nie warto zagłębiać się w frameworki JS (jeśli koncentrujesz się na backendzie). W podstawowym kursie Bootstrap znajdziesz już gotowe moduły: chcesz slider — zrób slider, chcesz pływające menu — zrób pływające menu.
Zlata Obuchowska: Myślę, że w ramach nauki front-endu warto zająć się tym, jak właściwie statyka jest przekazywana do aplikacji webowych. W ten sposób programista płynnie przechodzi do tego, by zacząć poznawać, jak w ogóle zorganizowana jest architektura aplikacji webowych i jak one funkcjonują w produkcji.
Grigorij Pietrow: Tak, od razu polecam, jeśli wybrałeś Pythona jako język backendu i na przykład Django jako framework: Django ma dokumentację w Django Book, która jest naprawdę świetna, zawiera wszystko, o czym mówiła Zlata, jest naprawdę dobra dla początkującego.
Aleksiej Szyrniajew: Do szybkiego startu przyda się także Django Girls, jeśli celem jest nauka właśnie Django. To taki tutoriał, w którym można w ciągu jednego dnia przebrnąć przez podstawy i zrozumieć, co potrafi framework.
Walentyn Dombrowski: Przygotowując się do nagrania podcastu, stworzyliśmy listę tego, co potrzebuje programista Pythona do web developmentu, podsumowując to, co powiedzieliśmy wcześniej.
Co wchodzi w podstawy web developmentu w Pythonie
- Frameworki webowe Django, Flask, aiohttp, Tornado itd. (i wiedza o istnieniu innych).
- Protokoły i API: przede wszystkim http, JSON-RPC, Protocol Buffers, gRPC.
- ORM i migracje, relacyjne bazy danych, SQLAlchemy, SQL, PostgreSQL, MySQL.
- Podstawy HTML, CSS, Bootstrap, a także frameworki JS i JQuery.
- Zasady działania aplikacji w produkcji, testowanie, testy jednostkowe, testy automatyczne, systemy kontroli wersji, git.
Czy junior potrzebuje algorytmów?
Zlata Obuchowska: Na początku nie trzeba znać algorytmów, one same stopniowo pojawią się w głowie, jeśli zajmujesz się programowaniem wystarczająco długo. Znam wielu dobrych inżynierów, którzy nie mieli solidnego formalnego kursu algorytmów.
Grigorij Pietrow: Chcę dolać oliwy do ognia. Skąd w ogóle bierze się nasza pasja do algorytmów?
Nie mamy teraz fundamentalnego wykształcenia w zakresie algorytmów, nie umiemy nauczać programistów, brakuje nam bazy technicznej.
To się próbuje robić, ale mamy tu historię Hogwartu: nie możemy stworzyć szkoły czarodziejów, jeśli nie mamy ani jednego czarodzieja. Co więc ma zrobić uniwersytet, na który przychodzą i proszą: „Zacznijcie szkolić programistów”, a programistów nie ma, bo wszyscy pracują w Mail.ru, Ramblerze i „Yandexie”, gdzie im dobrze?
Na uniwersytecie patrzą i mówią:
— Okej, programowanie. Znajdźmy jakąś pokrewną dziedzinę wiedzy i zaprośmy specjalistów stamtąd. Zaprośmy dziennikarzy, którzy potrafią pisać teksty, inżynierów elektryków, którzy umieją tworzyć schematy elektryczne, oraz matematyków, którzy znają się na algorytmach.
W rezultacie okazuje się, że jest to równie sensowne, jak uczenie budowniczego fizyki cząstek elementarnych tylko dlatego, że cegła i cement składają się z cząstek elementarnych.
Jednocześnie nie mówi się nic o samym cemencie i cegle, bo fizyk, który próbuje nauczyć budowniczego, nie potrafi budować domów. W rezultacie otrzymujemy budowniczego, który potrafi doskonale opisać, jak „działa cement”, ale nigdy go nie widział i nie umie z niego nic zrobić.
Algorytmy i struktury danych to bardzo dobrze, ale to bardzo mała dziedzina zastosowań. Są one niezwykle potrzebne, na przykład, jeśli piszesz silnik gier, kompilator czy protokół sieciowy.
Większość programistów rozwiązuje problemy biznesowe, gdzie algorytmy i struktury danych nie są potrzebne.
Tam najtrudniejsza matematyka to dwa razy dodać, a potem podzielić. Potrzebna jest zupełnie inna wiedza. Do rozwiązywania problemów biznesowych wymagane są głównie umiejętności praktyczne, a nie fundamentalne.
Początkujący programista lepiej, żeby miał pojęcie o biznesie i o tym, jak prawidłowo i szybko budować z gotowych bloków potrzebne konstrukcje, jak je debugować, jak zrobić, aby się nie rozpadały, wiedzieć, dlaczego się rozpadają, co się dzieje, gdy zmieniają się wymagania, a program zaczyna się „osiadać na fundamencie”, jak dom po deszczu.
To są te praktyczne rzeczy oraz zrozumienie, jak pisać oprogramowanie. Musi wiedzieć, że poza debuggerem ma zestaw narzędzi, który pokaże, gdzie program się spowalnia.
Walentyn Dombrowski: Przypomniało mi się takie porównanie: to tłumaczenie z języka biznesu na język, którym można się posługiwać w komunikacji z komputerem. Programista to zatem swoisty specyficzny lingwista.
Grigorij Pietrow: Biznes potrzebuje pisarza, a nie lingwisty. Pisarz nie musi wiedzieć, dlaczego tysiąc lat temu to słowo przekształciło się w to. Musi umieć stosować te słowa.
Co jest potrzebne, aby znaleźć pierwszą pracę jako programista?
Aleksiej Szyrniajew: Pewnie nie ma uniwersalnego przepisu, według którego należy przygotować juniora.
Jeśli przychodzisz do jakiejś firmy, wezmą cię nie dlatego, że znasz Django, JSON i trochę algorytmów. Najprawdopodobniej zatrudnią cię za umiejętności, które są w tej chwili potrzebne tej firmie.
Jest wiele firm, a każda z nich ma inne wymagania. Nie ma takiej uniwersalnej wiedzy, którą trzeba zdobyć, aby przygotować CV i rozpocząć poszukiwanie pracy.
Grigorij Pietrow: Kiedy w VoxImplant szukaliśmy kilku juniorów, nasz dyrektor techniczny sformułował podstawowe wymaganie tak: osoba musi umieć rozwiązywać problemy. Oczywiście, że junior nie zawsze zrobi to efektywnie, najlepiej i nie zawsze poprawnie, ale w idealnym przypadku stawiasz przed nim zadanie, a on się mobilizuje i je rozwiązuje. To umiejętność, której w pierwszej kolejności szukają pracodawcy.
Zlata Obuchowska: Osoby poszukujące pracy, które przechodzą z innych dziedzin, mają z punktu widzenia biznesu pewną przewagę, ponieważ przeszły jakąś drogę i potrafią szybko rozwiązywać problemy. To są umiejętności miękkie, nazwałabym to nawet kulturą pracy. Często absolwenci uczelni wyższych nie mają jeszcze wykształconej tej kultury pracy.
Ale chciałabym w końcu spróbować podać jakiś przepis dla początkujących.
Pierwsze kroki dla początkującego programisty
Zlata Obuchowska: Pierwszym krokiem jest jednak jakiś własny projekt, ponieważ w CV trzeba coś napisać, pokazać minimalne portfolio. Lepiej, gdy te projekty zostały zrealizowane nie dla siebie, ale na freelansie — dla kogoś.
Po pierwszych projektach można już stworzyć CV i wysyłać je do wszystkich firm, które mają stanowiska dla juniorów. Rozmowy kwalifikacyjne dadzą ci zrozumienie tego, czego potrzebują firmy. Prędzej czy później ktoś cię zatrudni, chociażby w małej firmie. Ten doświadczenie zawodowe później pozwoli ci dostać się do większej i ciekawszej firmy.
Walentyn Dombrowski: Warto dodać, że w naszych kursach przygotowujemy uczniów do stworzenia własnego projektu w ciągu 10 tygodni nauki. Dodatkowo rozwijamy umiejętności pracy zespołowej. To właśnie te umiejętności miękkie, o których mówiła Zlata.
Aleksiej Szyrniajew: Z doświadczenia powiem, że znalezienie pierwszej pracy może zająć dużo czasu. Kiedy szukasz przez miesiąc lub dwa — to normalne. Jeśli aplikujesz do wszystkich firm i chodzisz na rozmowy kwalifikacyjne, to w trzecim miesiącu na pewno coś znajdziesz.
Walentyn Dombrowski: Można realizować własne projekty lub podejmować proste zlecenia na freelansie, równocześnie zajmując się wysyłaniem CV.
Jakie są perspektywy dla programisty Python?
Zlata Obuchowska: Programista Python może iść wszędzie. Może przejść do testowania, rozwijać się do poziomu senior-architekta lub nawet zająć się zarządzaniem. Techniczni menedżerowie są różni i można awansować aż do wyższej kadry zarządzającej. Można rozwijać się w data science, DevOps, w kierunku automatycznych testów lub uczenia maszynowego.
Walentyn Dombrowski: Ogólnie rzecz biorąc, opcji jest mnóstwo, podobnie jak możliwości, w tym nasze kursy. Potrzebna wiedza na początku nie jest szczególnie obszerna, ale wskazane jest później poszerzenie zakresu, ponieważ im więcej potrafisz, tym lepiej dla Ciebie.
***
To tylko część odcinka . Pełną wersję odcinka można .
Albo nawet obejrzeć:

Dziękujemy za przeczytanie, przesłuchanie lub obejrzenie.
Źródło: habr.com
