Що потрібно знати, вміти і розуміти, щоб не мати проблем з пошуком роботи питонистом

Мова — лише мала частина того, що вам потрібно знати. Може бути близько 5%, а то і менше.
Ця стаття повторює і доповнює зміст моєї доповіді «Що відрізняє джуніора від сеньйора або як питонисту не мати проблем з пошуком роботи» на останньому MoscowPython Meetup 39. Багато людей зверталися до мене після виступу з питаннями і я обіцяв опублікувати статтю на хабре і обговорити в коментарях.

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

no problem


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

Хто ж приходить на митап?
З підняли руки приблизно по третині — джуніорів, мзс і сеньйорів і зовсім трохи — тимлидов і технічних директорів. При цьому підняли руки приблизно половина і хто решта — залишається загадкою

Є взагалі проблема?
Далі на митапе я питав чи є у присутніх проблема пошуку роботи. Для невпевненого більшості проблем немає, але співвідношення, на вскидку, приблизно 60/40 (з тих хто підняв руки). Так що тема безумовно актуальна і стаття багатьом може стати корисною.

Як влаштуватися працювати джуниором?
Це майже найпопулярніше питання, на який я відповім так: роботодавець навряд чи поверне вас, якщо ви взагалі нічого не знаєте і не маєте ніякого досвіду. Дуже рідко роботодавці наймають джуніорів і це часто щось типу екперімент — раптом зловимо реально таланту, який різко стане мзс, а ми зможемо платити йому зп джуніора? Тому моя вам порада: не намагайтеся влаштуватися джуниором, а краще як слід вивчіть те, що тут написано і відразу цільтеся в мзс. Багато хто не знають і половини того, що треба і їх беруть тільки з-за «досвіду» (найчастіше нетямущого). Коротше не бійтеся і не вважайте себе ні на що не здатними, озбройтесь знаннями, практикуйтеся і нічого не бійтеся!

need to know
Що потрібно знати
  • Англійська мова. Він потрібен для читання документації, прикладів на stackoverflow та статтею, а так само щоб клеїти іноземок, коли будете їздити у відпустку. Багато хто в Росії мають сумний досвід навчання мови в школі і в інституті, але насправді, хлопців, це на 95% проблема системи освіти, а решта 5% — відсутність реальної необхідності в мові. Не існує людей (не вважаючи німих і хворих на амнезію), який не змогли б навчитися говорити англійською, а вже тим більш вільно читати. Майже всі ви вже вмієте читати зі словником і для початку цього цілком достатньо.
  • POSIX-операційна система. Звичайно з появою docker та інших vagrant'ов це стало не так критично як раніше, але все ж працювати на UBUNTU або MacOS на порядок комфортніше з-за нормальної нативної консолі (особливо під убунтой) з її командами ls, cd, cat, ps, grep, kill, killall, vim, ssh, cp/scp і безліччю інших, що використовуються щодня в роботі. Оболонка bash, змінні оточення, ssh і ключі доступу до віддалених машин — все це використовується дуже і дуже часто. Як вивчати? Та ніяк, просто встановіть і використовуйте, поступово сама все изучится, ну можна статейки по окремим командам подивитися.
  • Python і його структури даних. Структури даних називаються в пітоні трохи інакше, ніж в інших мовах. Для вивчення синтаксису я настійно рекомендую самий звичайний туторіал на офіційному сайті, він відмінно написано — якщо не сильні в англійській заодно і попрактикуете. Пам'ятайте, якщо ви збираєтеся працювати питонистом, то англійська потрібен буде постійно.
  • Бібліотеки Python. Саме знання їх в основному від вас будуть чекати роботодавці. Про існування деяких досить просто знати, а деякі потрібно знати добре. Django зараз в тренді і хороше знання цього фреймворку сильно спрощує пошук роботи. В цілому: з одним лише знанням мови ви нафик нікому не потрібні. Потрібно мати уявлення про популярних бібліотеках, а знайти список таких можна просто погортавши вакансії.
  • Формати даних XML, HTML, JSON. Це формати даних, без яких нині нікуди. Для вивчення XML я рекомендую почитати документацію lxml (і спробувати всі приклади звідти), для HTML — htmlbook.ru, для json — хоча б просто погуглите що це.
  • Протокол HTTP. Імхо, саме корисне в ньому це знати статуси повідомлень HTTP, що таке cookies, session, заголовки, тіло і reason. Мені здається статті у вікіпедії вистачить для початку, але може хто підкаже гарну статтю?
  • Бази даних. Їх можна вивчати роками — настільки обширна тема і хороше знання баз даних, вміння оптимізувати структуру і запити необхідні щоб стати провідним розробником з великою зарплатою. Але для початку вам потрібен хоча б мінімум — вміти встановити СУБД і знати що таке INSERT, UPDATE, SELECT, JOIN GROUP BY для реляційних баз. Особисто я рекомендую PostgreSQL, так як вона добре підтримує гео-дані, які нині в кожному другому стартапі. Крім реляційних, вам треба знати, що є ще noSQL типу Mongo (і навіщо вони потрібні) і key-value сховища типу Redis.
  • (дуже бажано) Javascript, jQuery та інші AngularJS. Зараз все більше сайтів вже не генерує HTML, а асинхронно обмінюються інформацією з сервером і її відображають. Треба розуміти навіщо це все і з цього випливає наступний пункт
  • (бажано) Архітектури інформаційних систем. Фактично хороше розуміння архітектур укупі з хорошим знанням баз даних робить вас сеньйором. www.insight-it.ru — на жаль мало оновлюється останнім часом, але навіть те що там є я знаходжу вкрай корисним.
  • (бажано) Ще один тренд — це асинхронне програмування. Це не є чимось необхідним для того, щоб знайти роботу, але це може бути вектором для подальшого розвитку.


Не лякайтеся такого великого списку. Англійська ОС вивчаються по ходу, не потрібно окремо витрачати на це місяці й роки; Python, основи баз даних, формати даних, HTTP вивчаються за лічені дні, доскональне знання не вимагається, якщо це не зазначено в вакансії окремо. Вивчення архітектур, знайомство з Javascript — цим, звичайно, можна займатися роками, але для початку теж можна лише ознайомитися.

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

Стривайте, а як же алгоритми?Після митапа до мене підійшов один хлопець і запитав «а як же алгоритми?». За 6 років роботи Python-розробником мені досить рідко доводилося писати щось дійсно не тривіальне, в основному все зводиться до яких-небудь маніпуляцій з даними, їх перетворення з однієї форми в іншу для подальших потреб ну і елементарна логіка рівня шкільної інформатики. Найчастіше всі алгоритми давно реалізовані в рамках специфічних бібліотек і легко доступні.

required skills

Що потрібно вміти?
  • Читати чужий код — якщо не вмієте, то фактично ви не вмієте користуватися існуючими ресурсами і кожен раз будете пиляти велосипед. Як правило це не ефективно (ну давайте може бути ще мова програмування кожен раз знову створювати під кожну задачу?). З часом ви зрозумієте, що іноді швидше написати щось своє, але по початку — намагайтеся вчитися у інших. Навіть якщо ви в підсумку вирішите писати щось своє, у вас буде хоч якесь уявлення про те як треба або як не треба робити.
  • Володіти IDE — це і прискорення написання коду та можливості налагодження, тэстирования коду, підказки помилок і недоліків, де ви не дотримуєтесь гайдлайнам, безліч корисних інструментів. Я рекомендую PyCharm або PyDev — вони досить зрілі і мають гарний функціонал прямо з коробки.
  • Відразу освоюйте і користуйтеся стандартними інструментами — virtualenvwrapper, pip. Нещодавно натрапив на pyenv — імхо теж хороша штука
  • Трошки сисадминить — це перетинається зі знанням ОС, рано чи пізно треба все-таки вміти налаштовувати софт на сервері де ваш додаток/сайт буде жити (Діма, привіт).
  • Зовсім забув сказати на митапе і хлопці підказали: звичайно ж системи контролю версій — хоча б тільки git, але не завадять і mercurial з svn — мало де з ними зіткнетеся. НІКОЛИ не використовуйте архіви та інший PHP-стайл. Володіння git повинно бути чи не вище, ніж самим Python, якщо ви влаштовуєтеся на роботу в команду. Подивіться github.com, bitbucket.org
  • (бажано) освоїти такі кошти як vagrant, docker, puppet/chef/ansible, fabric — якщо у когось у цьому прогалини, раджу Moscow Conf, я сам піду, якщо буде можливість.


Все це — постійно використовуються в роботі інструменти, без знання яких навіть відмінно володіючи мовою ви будете тягарем для команди, тому що або ви будете повільно працювати (не використовуючи IDE), або постійно писати велосипеди не використовуючи існуючі рішення (не читаючи чужий код; особливо збочена форма — не вивчивши код навіть своїх колег у рамках проекту), будете відчувати проблеми з переходом на нові версії використовуваних бібліотек (не використовуючи virtualenvwrapper), смикати інших за будь-якої задачі пов'язаної з сервером (не маючи елементарних навичок адміна), створюючи лютий свербіж в дупі колег косячными коммитами (не знаючи git). Вас простіше вбити, ніж прогодувати в команді, а ваша ефективність може бути навіть негативною, тому що інші можуть витрачати час на виправлення ваших косяків і допомогу вам. Тому витратьте трохи часу, освойте ці інструменти, це теж зовсім не довго.

what to understand

Що потрібно розуміти
З цього я почав свій виступ на митапе, тому що в усному виступі спершу треба було налагодити контакт з аудиторією, але тут я постарався це скоротити.
Пам'ятайте, що для роботодавця ви — інструмент вирішення бізнес-завдань, які в майбутньому повинні принести йому вигоду. Тому фактично ваше завдання на співбесіді переконати його, що платити вам зарплату — вигідне вкладення грошей. Вас наймають не по клавіатурі стукати, а генерувати прибуток.
Мова — лише мала частина того, що вам потрібно знати. Може бути близько 5% або навіть менше.

Таблиця відповідності того, що потрібно роботодавцю і як ви можете йому допомогти
Мрія роботодавця Що від вас вимагається
делегування — поставив завдання та її зробили правильно без твоєї участі не боїтеся брати на себе відповідальність і досить компетентні
швидкість розробки (основна перевага пітона) володієте мовою, знаєте сторонні бібліотеки і розумієте, що швидкість розробки дуже важлива
надійність системи тэстирование власного коду наскільки це можливо або потрібна
поддерживаемость (ще одна перевага синтаксису і рекомендацій пітона) знайомство з гайдлайнамі (pep, import this) і по можливості слідування їм
ефективність системи знайомство зі свіжими технологіями, бібліотеками та іншими додатками
ефективність розробника зацікавлені у проекті. Тут я раджу дійсно вибирати проекти, які цікаві.
передбачуваність, можливість планування ваші плани на найближчий рік ясні


top secret
Цікаво що він їй таке сказав насправді?

Поради
  1. Розвивайте комунікацію. Коли шукаєте роботу — ходіть на як можна більше співбесід. Успіх співбесіди безпосередньо залежить від навички комунікації і вона відмінно відточується на співбесідах. Ось вам прикладПриїхали ми якось в лазню і там чувак віниками орудує. А я віників 3 роки не бачив — в Азії туго з ними. Ну я йому «ого, братюня, фартануло тобі, де ти віників роздобув?». Він мені: «так ось привіз із собою з Росії, че хочеш я тебе теж напарю?». Ну я не дурень відмовлятися, звичайно. Поспілкувалися з ним, нормальний такий чувак. Ну і роз'їхалися по домівках. Через пару тижнів знову приїжджаємо — там він знову з віником, стали знову спілкуватися, він мене і питає, мовляв, «а ти взагалі чим займаєшся?». Я кажу ну так-сяк, ось коворкінг у мене свій, а у вільний час на пітоні програмують. Він “гаразд? Мені як раз питонщики потрібні". Виявився він засновником відомої компанії і я до сих пір з ним працюю. Крім співбесід рекомендую грати в мафію (тільки не за турнірними правилами, а таким, коли можлива дискусія, але щоб без балагану — це дуже круто тренує нерви і навик спілкування), ходите на хакатони, митапы, конференції. Не пропустіть, до речі, Moscow Conf, такі конференції навіть не щороку бувають — це вам не митап двогодинний, а реально можна за день поспілкуватися з досвідченими хлопцями, позадавать питання спікерам.
  2. Навик продажів. Цей навик дозволяє мати ЗП вище ринкової. Навряд чи звичайно ви побіжите працювати продавцем, але якщо у вас є такий досвід, то вважайте це плюсом. Антиприклад:Жив у нас в коворкинге один хлопець — найкрутіший JS-програміст, рівня сеньйора з зп 120000+. Працює за 80, тому що незручно себе почуває на співбесідах, не може правильно себе позиціонувати.
  3. Привирайте. Злегка, ну може відсотків на 20, не більше. Наприклад, можна сказати, що ви знаєте щось, про що ви лише чули або злегка знайомі. Правда життяПравда життя в тому, що як правило, ніхто не тримає в голові все, що він коли-небудь робив. Скільки є випадків, коли людина починає шукати відповідь на якесь питання, а знаходить свою власну статтю на цю тему 1-3 річної давності. В кінцевому підсумку роботодавцю як правило важливо щоб ви вміли вирішувати поставлені завдання, а не були ходячою енциклопедією.
  4. Частіше міняйте роботу. Професійний ріст на новому місці роботи триває зазвичай близько 2-3 місяць, зрідка до півроку, потім починається рутина і мало нового. Щоб цього уникнути, треба як можна частіше міняти місце роботи (приблизно раз в півроку-рік). Як варіант — переходити на іншу посаду або в інший проект в рамках однієї великої компанії, але якщо ви засиділися на одній позиції вже рік і ніяких змін не передбачається — сміливо йдіть. ВиняткиВинятки для цього ради: якщо вам ну дуже цікавий проект в якому ви працюєте і/або у вас є опціон проект явно чекає успіх.
  5. Вивчайте суміжні галузі, новинки, нові бібліотеки. Дідусь Ленін заповідав.
  6. Працюйте за валюту безпосередньо на іноземних роботодавців. Хорошим фахівцям — на toptal.com, простіше — на upwork.com. З гарним англійським переїхати в США, Австралію, Німеччину та інші Великобританії справа взагалі не хитре. як я англійську вивчивСпершу я 9 років вивчав англійську в школі, потім 3 роки в інституті і вже міг хіба що читати і перекладати зі словником. Потім я кілька років відточував майстерність читанням документації, але сказати складніше «how much for coconut» виходило з трудом. Першим дійсно ефективним кроком був перегляд відеоуроків Дмитра Петрова «Поліглот» з каналу Культура, наступним кроком — практика спілкування з іноземцями в нашому коворкинге на Пхукеті, ну а зовсім легко стало після одруження на філіппінці. Крім усього іншого один мій знайомих відкрив школу англійської з унікальним методом, який дозволяє за місяць-два навчитися, правда це на Пхукетике знову ж таки.
  7. Ідіть взагалі на воркшоп. В США це нормальна практика — закінчивши школу (навіть не вуз, уявіть собі) піти відучитися 2-3 місяці на воркшопі і все — ти вже затребуваний фахівець, який без праці знайде високооплачувану роботу нарівні з випускниками вузів і з досвідом роботи. Це мені розповів один молодий хлопець, американець, який жив у нас в коворкинге і пройшов саме такий шлях. У нас в Росії такої практики поки що, на жаль, немає (частіше це трата 5 років у вузі, просто курси синтаксису мови, який, як я сподіваюся ви зрозуміли — лише мала частина того, що потрібно знати). Після митапа у мене виникла ідея організувати воркшоп, але в кінці жовтня я вже лечу назад в Азію і просто не встигну провести його тут. Тому якщо є бажаючі поїхати на зимівлю разом з нами, а заодно навчитися всьому тому, що я тут написав — пишіть в лічку, що-небудь придумаємо.


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

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.