Как да започнеш първата си работа като разработчик?
![Как да започнеш първата си работа като разработчик?](/Files/Publications/2022/04/nakov-guide-first-programming-job_175749296.jpg)
Много начинаещи разработчици се питат как да започнат първата си работа в областта. В следващите редове д-р Светлин Наков ще ти сподели неговия опит, наблюдавайки развитието на алумнито на СофтУни. Реализираните професионалисти в LinkedIn, посочили СофтУни като тяхно учебно заведение, наброява над 16 000 души към месец Март 2022 година. Много от съветите, които ще видиш, се базират и на 20-те години опит в обучаването и подготовката на програмисти за света на софтуерната разработка.
Есенцията: Създай GitHub портфолио, за да докажеш уменията си
Софтуерните компании искат едно – доказан опит и умения, за да те наемат като младши разработчик. Тях можеш да демонстрираш чрез своя GitHub профил, който трябва да разработваш интензивно в продължение на 1-2 години преди да кандидатстваш за първата си IT работа. Ето и рецептата, която всъщност е много проста:
- Научи се да кодиш и да работиш с различни технологии;
- Създай портфолио от проекти;
- Разбери какво искат работодателите;
- Кандидатствай внимателно;
- Премини интервю/оценка;
- Получи работата!
Целият процес отнема от 6 месеца до 2-3 години на изучаване на професията разработчик и изграждането на портфолио от практически проекти.
В следващите редове ще разгледаме подробно всяка стъпка от рецептата за успешна реализация – как да се сдобиеш с необходимите умения, как да създадеш портфолио и CV, очаквани от един разработчик, как да търсиш обяви за работа за младши специалисти, как да се подготвиш и внимателно да кандидатстваш и да преминеш техническото интервю.
Повечето ръководства по темата се фокусират върху техническото интервю, но истината е, че само 5% от кандидатите стигат до него. Аз се фокусирам върху останалите 95%: обучението, развитието на уменията, изграждането на портфолио от проекти и създаване на привлекателно CV, както и кандидатстване след внимателна подготовка за всяка конкретна позиция.
Стъпки за започване на работа като разработчик
Това са ключовите стъпки към започване на работа като технологичен експерт (в рамките на 6 месеца до 2-3 години, в зависимост от времето, което инвестираш, и началните ти умения):
- Цели: реши каква професия искаш да изучиш – Java разработчик, QA инженер, front-end разработчик и т.н.
- Обучение: научи се да кодиш и да работиш с различни технологии, изгради практически умения, напиши 100 000 реда код за 2 000 часа, отдели между 6 и 36 месеца на техническото си обучение.
- Портфолио: създай си профил в GitHub, където да изградиш портфолиото си от софтуерни проекти, което е и най-важната стъпка.
- Позиции: намери junior позиции, за които да кандидатстваш, но и които отговарят на уменията ти.
- Подготовка: сдобий се с допълнителни умения, които да отговарят на изискванията на позицията, за която кандидатстваш.
- Кандидатствай: внимателно подготви кандидатурата си преди да я пуснеш – application message + CV + мотивационно писмо.
- Интервю: подготви се за техническо интервю или техническа оценка (на които няма да се спираме подробно, тъй като само 5% от кандидатите стигат до тях).
- Оцелей: дай най-доброто от себе си, за да преминеш през тестовия период, учи се и подобрявай уменията си непрекъснато, особено в извънработно време.
1. Дефинирай кариерните си цели: коя IT професия да избереш?
Дефинирането на кариерните ти цели трябва да е първата стъпка, която предприемаш, когато обмисляш инвестицията в образование и подготовка за преследването на професия като разработчик. Ето някои съвети от мен:
- Проучи кои са най-търсените технологични професии на пазара – разработчик с Java или C#, или Python, или JavaScript, QA automation инженер, front-end разработчик и т.н.
- Проучи пазара на труда, говори с приятели и експерти, търси и чети статии по въпроса, открий кое е най-търсено сред работодателите и в кое направление ще успееш да се специализираш най-бързо.
- Поиграй си с различните езици и технологии! Това е много важно, преди да си инвестирал месеци, дори години в учене. Как ще разбереш какво ти харесва? Как ще разбереш разликата между Java и Python, например? Трябва да опиташ различни неща с различни езици и технологии – гледай туторуиъли, компилирай (или интерпретирай, според езика) примерен код, гледай видеа, поиграй си с примерни проекти.
- Открий за себе си отговора на въпроса кое е най-вълнуващото и мотивиращо за теб? Да се занимаваш с front-end и UI, или с логически код и алгоритми? Ще го усетиш! Опитвай, опитвай, опитвай! Така ще намериш отговора.
- Започни да учиш и провери дали програмирането изобщо е твоята страст! Как?
Започнеш ли някой туториъл или обучение, ще знаеш дали ти харесва. Наслаждаваш ли се на коденето? Можеш ли да го правиш всеки ден в продължение на години с удоволствие?
Лесно ли учиш програмиране? Някои хора учат с лекота, други имат друг начин на мислене и им трябват повече усилия, за да изучават инженерство и технологии.
Имаш ли достатъчно време, което да посветиш на изучаването и придобиване на професия в областта на софтуерното инженерство (2 000 – 3 000 часа подготовка за начална позиция). Ако не разполагаш с толкова време, как ще го откриеш?
Важно: от какво се нуждае пазарът? Когато откриеш какви технологии, програмни езици и технологични рамки харесваш, сравни ги с търсенето и нуждите на пазара. Например, JavaScript е много по-популярен и търсен език от Perl или Ruby. В началото, за първата си работа, изучи технологиите, които се търсят от работодателите. Тях можеш да провериш в порталите за IT обяви.
Ето и пример как можеш да използваш LinkedIn Jobs, за да сравниш търсенето на пазара за различните технологии в определени локации:
2. Учи усилено! Овладей програмен език, концепции, платформи, рамки и инструменти!
Следващата стъпка е най-времеемка, а именно да се научиш да разработваш софтуер. Това изисква от теб да развиеш програмни умения, алгоритмично мислене и умения за решаване на проблеми, да изучиш фундаменталните концепции в софтуерната разработка, да се запознаеш с модерните платформи за разработка и последните софтуерни технологии, технологични рамки и инструменти.
Придобиването на професия като софтуерен разработчик отнема време: 2 000 – 3 000 часа (от 6 месеца до отделянето на 2-3 години, ако се обучаваш като странична дейност).
В това време трябва да се научиш не само да кодиш, но и да развиеш алгоритмичното си мислене, да изучиш концепциите за разработка, софтуерни платформи, рамки, инструменти и инженерни практики. Но как да го направиш? Как да се сдобиеш с професия по софтуерно инженерство?
Съществуват много ресурси за техническо образование (платени и безплатни): туториъли, книги, видео курсове, code camps и много други. СофтУни предлага именно това – отлична от-нула-до-кариера обучителна програма за софтуерни разработчици, премината и завършена от над 16 000 студенти, 97% от които успешно са започнали своята технологична работа!
Най-важната част от обучението ти като софтуерен разработчик е да се сдобиеш с много практика.
3. Практика, практика и пак практика! Учи като правиш!
За какво ти е практика, ако знаеш правилата? Защото програмирането е умение. Няма да го научиш само с гледане на видеа. Единственият начин да се научиш да програмираш е чрез писане на код. Следвай упражненията и практическите проекти в курса/туториъла/книгата, на които разчиташ, изпиши целия код, който можеш, поиграй си с него, модифицирай го, стартирай го, оправи бъговете и ще се сдобиеш с практически умения от технологичното си обучение, не само теорията.
Рецептата за развиване на практически програмни умения е проста и се прилага във всички успешни центрове, предлагащи технологично обучение (академии, курсове, технологични колежи и т.н.): тренирай се с практически упражнения, следвай туториъли с кодене, прави практически проекти, сдобий се с опит, разработи свои уникални софтуерни проекти.
Колко дълго отнема, за да се изучи софтуерната разработка?
Вече обясних, но е важно да го повторим:
За да стартираш кариерата си в областта на софтуерната разработка, трябва да вложиш 2-3 години по няколко часа на ден, като странична дейност (или 6-12 месеца по 12 часа на ден). Това представляват тези поне 2 000 – 3 000 часа! Ако го измериш в редове код, които трябва да изпишеш, за да достигнеш подготовка, достатъчна за начална/младша позиция като разработчик, ще стигнеш до зашеметяващите 100 до 150 хиляди реда код (lines of code, LOC).
Колко бързо ще напредваш зависи от математическото ти мислене, предходния ти опит и страстта и отдадеността ти към обучителния процес. Имам студенти, които успяха да се обучат и да започнат работа на младша/junior позиция за по-малко от 6 месеца, но това е изключение. Обикновено на студентите им отнемат около 2 години, за да стигнат от нулата до кариера в IT, докато продължават с друга дейност (учене в университет или работа)!
Учи като правиш, пиши код всеки ден!
Ще повторя отново, тъй като е много важно:
За да се научиш да програмираш, трябва да пишеш код! Гледайки видеа или четейки книги, се сдобиваш със знания. Решаването на практически упражнения, следването на практически туториъли и разработката на практически проекти ти дават опит и практически умения. Тези дейности са ключова част в придобиването на професия в областта на софтуерното инженерство.
В най-добрия случай трябва да пишеш код всеки ден в продължение на 2-3 години!
2 000 – 3 000 часа практика за Junior позиция
Нека направим една проста сметка: 2 години = 600 дни (оставям няколко свободни дни) * 3-4 часа/ден == 2 000+ часа. Друга проста сметка: 600 дни * 200 реда код/ден средно == 120 000 LOC. Същото може да бъде постигнато за 6 месеца, ако вложиш цялото си налично време (6 дни в седмицата): 6 месеца * 26 дни * 12 часа = 1 872 часа.
Както вече стана дума, 2 000 – 3 000 часа на практическо програмиране са достатъчни за младша позиция като разработчик. Отнема значително време и усилия, за да се достигне експертизата на младши специалист.
Затова търсенето в IT индустрията е толкова голямо, а заплатите – толкова добри: не е лесно да станеш софтуерен разработчик и да започнеш работа в сферата! За да те наемат като софтуерен разработчик, трябва да отговаряш на изискванията на индустрията, а това отнема време.
4. GitHub портфолио с проекти: Докажи опита си
Най-важната част от подготовката ти като софтуерен инженер са практическите ти проекти, които ще създадеш през месеците интензивно обучение и усилена работа! В модерната софтуерна индустрия, най-добрият начин да демонстрираш практическите си проекти е чрез профила ти в GitHub.
Какво представляват тези зелени блокчета? Те показват дните с твои commits (къмити и на български) на код през цялата ти история с профил в GitHub. Колкото повече и по-тъмни са зелените блокчета, толкова по-добре.
Защо GitHub профилът е толкова важен?
GitHub е най-голямата платформа за хостване на софтуерни проекти, където повечето дивелъпъри и софтуерни компании съхраняват кода, който пишат. Служи и като социална мрежа за разработчици. Ако си начинаещ разработчик, със сигурност трябва да създадеш богат GitHub профил, за да демонстрираш проектите и опита си!
GitHub профилът ти е по-важен от CV-то, защото в GitHub уменията ти доказват колко време и усилия си вложил, за да практикуваш.
GitHub профилът ти е доказателство за опита ти! Увери се, че портфолиото ти е внимателно разработено, поддържано и добре документирано.
Това е изключително важно, ако нямаш предишен работен опит в софтуерната индустрия или друго доказателство за опита си с определена технология. Работодателите търсят умели разработчици с опит. Трябва да имаш такъв, за да започнеш работа на junior позиция и дори стаж (обикновено 1-2 години)! Това е реалността. За да отговориш на изискванията, трябва да прекараш 1-2 години в програмиране (или по-малко, ако имаш възможност да се обучаваш по-интензивно) и да оставиш доказана следа за уменията си чрез GitHub.
Пазарът на труда: Трябват 1-2 години опит за младша позиция
Обявите за работа винаги изискват предишен опит за софтуерни разработчици. Ето някои типични примери (взети от LinkedIn Jobs през Март 2022), които показват какво искат компаниите за junior dev позициите:
Как да докажеш опита си преди първата си работа?
Обикновено, обявите за junior разработчици изискват 1-2 години опит. Но как изобщо да се сдобиеш с такъв преди първата си работа в сферата? Отговорът е много прост: трябва да работиш като софтуерен разработчик по собствените си проекти в рамките на 1-2 години по време на обучението си (или по-малко, ако се обучаваш по-интензивно) преди първата си технологична работа. За да докажеш опита си като разработчик, трябва да създадеш солидно GitHub портфолио!
Портфолиото, заедно с историята на къмитите ти, доказват опита ти. То е доказателство, че си работил като софтуерен разработчик, и демонстрира и какъв код си писал през последните няколко години. Ето пример за GitHub профила на студент от СофтУни (в началната му фаза през Март 2022). Както виждаш, той интензивно изучава софтуерно инженерство и внимателно подготвя dev портфолиото си, за да демонстрира уменията си на разработчик и да докаже релевантния опит, който да отговори на обява за junior dev позиция. Ето как изглежда историята на дейността му до момента:
Уверен съм, че ще започне работа като разработчик в най-скоро време, защото има доказан опит в работата по Java проекти със Spring, Hibernate и MySQL. CV-то му няма да бъде празно, а ще има няколко проекта, които ще демонстрират 1-2 години опит. Ще отговаря на повечето изисквания за junior позиция като Java дивелъпър.
Брой къмити в GitHub профила ти
Друга важна метрика в GitHub профила ти е броят къмити, които имаш. Студентът, чийто профил видя, има 400+ къмита за последната година. Това означава, че е писал код над 400 пъти и го е пратил към GitHub. Това демонстрира усърдна работа и доказва, че редовно пише код. Това е положителен сигнал за работодателите.
Да се създаде фалшива история е много трудно, както ръчно, така и с помощта на ботове. Не само изисква усилия, но и да използваш, например, бот, който всеки ден да променя едно число в текстов файл автоматично и да симулира дейност по този начин, може лесно да бъде разкрито. Това се дължи на факта, че профилът и историята на къмитите ти са публични. По-добре инвестирай време и усилия в писането на код и развиването на реални умения, вместо в създаването на фалшив GitHub профил.
Силните GitHub профили трябва да имат поне 500 – 1 000 къмита на година. По-дълга история винаги е по-добре (2-3 години вместо само 6 месеца).
Бъди сигурен, че можеш да използваш бройката на къмитите си като доказателство. Честото къмитване, след значими и значителни промени, е силно препоръчително. Регулярността е свидетелство за придобития през времето опит. Историята на къмитите ти може лесно да се види през картата на приноса ти (зелените блокчета) в GitHub профила ти:
Ако искаш да станеш младши разработчик, следи историята и се увери, че можеш да демонстрираш, чрез публични къмити, че дълго време си работил усърдно по софтуерни проекти. Това е твоят опит в програмирането, който обикновено се споменава в обявите за работа.
Примерни портфолиа в GitHub
В следващите редове ще можеш да разгледаш примерни дивелъпърски портфолиа на студенти от СофтУни, които са учили програмиране, създали са няколко практически проекта в GitHub, имат солидна история на къмитите, с която доказват уменията си, и са започнали първата си работа като разработчици в IT индустрията с лекота:
- Тодор Белчев: 2 600 къмита за периода 2020-2022, LinkedIn профил;
- Димитринка Цонева: 350 къмита в периода 2021-2022, LinkedIn профил;
- Мишел Иванов: 520 къмита в периода 2019-2020, LinkedIn профил;
- Александрина Механджийска: 450 къмита в периода 2021-2022, LinkedIn профил;
- Орфей Костадинов: 1 100 къмита за периода 2020-2022, LinkedIn профил.
Можеш да разгледаш тези профили и да видиш как са демонстрирали опита си в софтуерната разработка чрез проекти и богата история. В резултат на усилията да изградят уменията си и да създадат портфолио, вече са открили своята младша позиция и са се реализирали успешно. Профилите им доказват, че са работили здраво като разработчици за поне 2 години преди първата си работа. С други думи, тези GitHub профили демонстрират поне 1-2 години опит в програмирането.
Документирай GitHub проектите си
Над 99% от проектите в GitHub се състоят само от код, без никаква документация: описание, цели, технологичен стек, дизайн и архитектурни решения, API документация и т.н. Това не е добре.
Когато искаш да станеш младши разработчик, трябва да демонстрираш работата си като такъв, да покажеш какви проекти имаш в портфолиото си и публично да демонстрираш уменията си и колко усилено работиш в сферата на софтуерната разработка чрез къмит историята в профила си. GitHub профила ти показва с какви езици, платформи и софтуерни технологии имаш опит. Ако имаш опит като разработчик и не го покажеш, как да разберат работодателите за него?
GitHub е идеален инструмент, чрез който публично да демонстрираш опита и уменията си. Работи по софтуерни проекти, създай солидна история, документирай проектите си, пусни и демо!
Препоръката ми за всеки проект в портфолиото си е да следваш следната структура на документацията:
- Заглавие на проекта, което носи смисъл – Car Reservation System, а не MyApp2;
- Кратко описание на проекта: цели, употреба, имплементирани функционалности, използвани технологии и т.н. Например: JS апликацията “Contact Book” съдържа списък на контакти, в който може да се търси, и предоставя функционалностите list/view/add. Апликацията се базира на Node.js + Express.js + Pug.
- Демо: пусни апликацията си онлайн и дай достъп до нея с 1 клик (1-click demo). Можеш да използваш решения като Heroku, ReplIt, или AWS, или друга облачна платформа. Увери се, че няма нужда от регистрация, за да могат потенциални работодатели да я изпробват, или се постарай да предоставиш тестови login детайли.
- Техническа документация: описание на API точките за достъп, архитектурни диаграми, клас диаграми и т.н. Това помага на потребителите да разберат как работи проектът ти от техническа гледна точка.
- Скрийншоти: скрийншотите са много важни! Когато предоставиш такива, посетителите на профила ти могат да разберат какво си разработил за секунди.
По-долу можеш да разгледаш примери, които да имаш предвид, когато създаваш документацията и представяш проектите в портфолиото си в GitHub:
- https://github.com/nakov/ContactBook
- https://github.com/nakov/Eventures
- https://github.com/nakov/ShortURL
- https://github.com/nakov/TaskBoard
Съвети за GitHub портфолиото ти
1. Започни да изграждаш портфолиото си максимално рано! Най-добре още през първия месец, когато започнеш да пишеш код. По този начин ще имаш повече доказателства за уменията си. В началото ще качваш съвсем прост код, но с времето проектите ти ще станат по-богати и ценни. В някакъв момент може да скриеш най-ранните си проекти и да демонстрираш само последните си постижения.
2. Непрекъснато пушвай и къмитвай ежедневната си работа. Това изгражда историята на къмитите ти в GitHub и прави блокчетата, които видя по-рано, зеленички. Честото къмитване демонстрира, че редовно пишеш код. Това искат да видят и работодателите, когато кандидатстваш при тях – доказателство, че имаш дълга история и опит в програмирането.
Т.нар. contribution graph е твоята история и може да изглежда по следния начин, ако къмитваш често по време на обучението си за софтуерен инженер и изграждаш портфолиото си:
А може да изглежда и по следния начин, макар и да имаш същите проекти и опит, но не си къмитвал редовно, или само когато можеш да допринесеш с нещо наистина ценно:
3. Създай добра документация на проектите си. Описвай целите, технологиите, APIs, архитектура и т.н. Ето пример за това:
4. Пусни live demo на проекта си. Ето и пример как да го направиш с Repl.it:
Това е т.нар. 1-click демо, което значи апликацията ти да е достъпна с един клик:
- Трябва да може да се достъпи без инсталация – само предоставяш линк към апликацията чрез решения като Heroku, Repl.it или Google App Engine.
- Трябва да е достъпно без регистрация – предоставяш login детайли за целите на демото, или друг начин да се тества апликацията с един клик.
- Трябва да има достатъчно примерни данни в базата – никой няма да добави тестови данни, за да изпробва дали апликацията ти работи правилно.
5. Добави контактите си в GitHub – ако търсиш работа, бъди отворен към комуникация и да приемаш такава от потенциални рекрутъри, които биха искали да кандидатстваш в тяхната фирма. Добави имейла и LinkedIn профила си. Да, може да получаваш спам, но можеш да получаваш и оферти за работа:
6. GitHub профилът ти трябва да изглежда добре – представи си го като интерактивно онлайн CV. Създай README файл за профила, добави GitHub статове и трофеи, пинни хранилища (repositories), добави описания и теми и т.н.
Ето някои примери как да създадеш добро, функционално онлайн CV като GitHub страница:
- https://vasilstoyanov99.github.io/CV
- https://boykopetevboev.github.io/CV
- https://radevdaniel.github.io
- https://kristian9577.github.io
- https://radoslavdimitrov.github.io
Ето някои инструменти, примери и туториъли, които да ти помогнат да си създадеш впечатляващ README за профила си:
- Колекция от приятни лейаути;
- Наръчник за създаване на README файл за профила ти;
- Генератор за README файл за профила ти.
Други профили за един разработчик
Освен профила в GitHub, можеш да създадеш и други дивелъпърски профили, които демонстрират, че си запален разработчик, в платформи като StackOverflow, Spoj, NPM, NuGet и т.н.
1. Създай репутация в StackOverflow като отговаряш на въпроси, свързани със знанията и уменията ти, езиците и технологиите, които ползваш. Добави линка към профила си в този в GitHub и в CV-то си. Тук също добави контактите си. Отдели 1-2 месеца да отговаряш на въпроси в определени категории, като така ще я овладееш, ще натрупаш репутация и ще привлечеш вниманието на рекрутърите.
Когато натрупаш добра репутация (200-300 точки), сложи линка към профила ти в StackOverflow в “Developer Profiles” / “Dev Achievements” секцията на CV-то си. Ето примери за студенти от СофтУни, които демонстрираха уменията си в StackOverflow, а вече са и реализирани успешно:
- https://stackoverflow.com/users/4804019/codearts
- https://stackoverflow.com/users/6368528/ivan-ganchev
- https://stackoverflow.com/users/8540759/radrex
2. Публикувай собствени библиотеки в популярни хранилища като NPM за JS, NuGet за C#, Maven Central за Java и PyPI за Python. По този начин ще демонстрираш уменията си в писането на софтуерни компоненти и способността си да помогнеш на други разработчици в ежедневната им работа.
Най-лесният начин да създадеш и публикуваш собствена библиотека е като вземеш интересна и полезна такава, която вече не се поддържа от създателя ѝ. Можеш да я модернизираш спрямо последната версия на целевата платформа (например ъпгрейд на библиотеката Java 5 за Java 17). Можеш да добавиш функционалности и да подобриш API-то. Можеш да добавиш и т.нар. unit tests.
Накрая не забравяй да добавиш публикуваните библиотеки в секцията с Проекти в CV-то си. Ето няколко примера за dev профили в популярните хранилища:
- https://www.npmjs.com/package/jadejs
- https://www.nuget.org/profiles/nakov
- https://www.npmjs.com/~petarov
3. Направи си профил и участвай в предизвикателства и състезания по програмиране в платформи като Spoj, HackerRank, TopCoder, CodeForces и други. Увери се, че профилът ти е публичен, добави контакти и не забравяй да качиш решенията в профила си в GitHub с кратка документация. Ето някои профили на състезаващи се студенти, които изучават програмиране и алгоритми:
- https://www.spoj.com/users/deyanpb
- https://www.spoj.com/users/laspinko
- https://www.hackerrank.com/profile/tsvetelinkostad1
- https://www.topcoder.com/members/kiri4a
- https://www.topcoder.com/members/kiril.kartunov
5. Намери Junior позиции, съвпадащи с опита ти
Следващата стъпка по пътя към първата ти работа като разработчик е да намериш младши позиции, които отговарят на опита ти. Разбира се, ако нямаш опит, върни се на предходната стъпка, в която обсъдихме обучението и създаването на портфолио от практически проекти в GitHub.
Как да проучиш пазара на труда и да решиш къде да кандидатстваш? За целта, отговори си на няколко въпроса:
- Какви умения изискват работодателите, които ти нямаш?
- Какви умения се изискват във всички обяви за junior devs? Имаш ли ги?
- Какви са често срещаните умения? А именно писане на код, познаване на Git, OOP, работа с бази от данни, уеб технологии.
Когато откриеш къде имаш липси, обърни им внимание и ги попълни, за да си по-близо до търсенето на пазара. Добави проекти в портфолиото си, за да създадеш списък на уменията си. Например, ако видиш, че повечето обяви в региона ти изискват PostgreSQL, можеш да подходиш така:
- Инсталирай PostgreSQL и си поиграй с него.
- Потърси туториъли за PostgreSQL. Добави кода от тези упражнения в GitHub хранилище, което можеш да наречеш “PostgreSQL-projects”. Така, когато някой отвори профила ти и види PostgreSQL проектите ти, ще му стане ясно, че имаш някакъв опит с технологията.
Това е приложимо за всяка технология, която е много търсена в момента, а на теб ти липсва опит с нея, като Docker или Selenium.
Кандидатствай внимателно
Много от кандидатстващите за работа не четат описанията на ролите и самите обяви много внимателно, което логично води до това, че не полагат усилие профилът им да съвпада с изискванията. Разбира се, това води до ниска успеваемост. Бъди умен! Отговори на изискванията чрез GitHub портфолиото и CV-то си и ще увеличиш шанса си да бъдеш поканен на интервю.
Ето какви са препоръките ми, когато търсиш обяви за работа и се опитваш да ги прецениш:
- Анализирай по отделно всяка позиция, за която искаш да кандидатстваш! Какво липсва в уменията ти? Как можеш да добавиш умения, които да покриват изискванията?
- Ако уменията ти изобщо не отговарят на изискванията, направо премини към следващата обява.
- Ако уменията и GitHub портфолиото ти в по-голямата си част отговарят на изискванията за позицията, направи всичко по силите си, за да отговориш и на останалите. Как? Развий липсващите умения, необходими за позицията.
- Гледай видео урок, последвай туториъл, създай проект в GitHub, за да създадеш публично доказателство, че имаш опит с изискваната технология и си демонстрирал търсените умения.
Пример: Как да определиш изискванията в една обява?
Нека да допуснем, че отляво е обявата, която обмисляш. Отдясно ще видиш същата обява, но с извлечени технически изисквания:
Когато извлечеш тази информация, можеш да работиш в посока уменията ти да съвпаднат с изискванията чрез портфолиото ти в GitHub и CV-то ти.
Пример: Как да отговориш на изискванията?
Огледай за технологични термини в описанието на обявата и ги сравни с това, което пише в GitHub профила ти. Нека вземем за пример този профил, сравнен с обявата по-горе:
- Java – имаш стабилно портфолио около Java ето тук. Този линк трябва да присъства в CV-то и мотивационното ти писмо.
- Spring – имаш солиден практически проект с технологичната рамка Spring, Spring MVC, Spring Boot, Spring Data, Hibernate и MySQL ето тук. Задължително сложи този проект в CV-то и мотивационното си писмо. Това е най-силният коз, с който разполагаш.
- Mockito – това е технология, с която не си запознат. Нямаш никакъв опит с нея, какво да правиш? Запознай се с нея и я добави в портфолиото си! Как да започнеш да учиш Mockito? Първо, намери уроци и туториъли, след това си поиграй с нея – създай проект с Mockito и го добави в портфолиото си. Това е чудесен пример как да добавиш Mockito тестове във вече съществуващото ти Spring MVC приложение.
- Docker – с тази технология също не си запознат, но е търсена от много компании. Следвай същата формула, гледай видео уроци, следвай туториъли, добави проект, включващ и Docker, към портфолиото си в GitHub.
- Направи същото за всички технологии, които се изискват в обявата. Ако се водим по настоящия пример, това включва още Cucumber, Oracle, React, Maven. Увери се, че си оставил линк към портфолиото си от проекти както в CV-то, така и в мотивационното си писмо.
- Отдели повече време и усилия на технологии, които се срещат често в обявите, и по-малко на екзотични такива. В нашия пример, React и Maven са тези, които задължително да научиш, докато Cucumber е по-екзотична и не толкова широко използвана, или търсена. Можеш да се обърнеш към приятели в софтуерната индустрия, които да те насочат какво да учиш и какво да пропуснеш за момента. В случая, да “учиш” означава да демонстрираш, че ги владееш в GitHub портфолиото си, а да “пропуснеш” означава просто да гледаш видео и да се запознаеш с това какво представлява технологията.
Целият този процес ще отнеме няколко дни, ако не и седмици, но ще ти се отплати. Ако вече си прекарал 1-2 години в изучаване на програмирането и съвременните софтуерни технологии, какво са още 1-2 седмици, в които да разшириш уменията си и по-лесно да отговориш на това, което търсят компаниите в своите junior позиции?
Инвестирай в себе си! Разшири технологичните си умения, отговори на изискванията, след това кандидатствай внимателно и ще успееш. Това са насоки, които доказано работят.
6. Кандидатстването: Портфолио, CV, мотивационно писмо
Повечето хора прибягват направо до тази стъпка, пропускайки предходните. Бъди сигурен, че 99% от тях няма да успеят. Внимателно подготвената кандидатура е много важна, ако искаш да те поканят на интервю. Но не можеш да подготвиш такава, ако нямаш опит, ако нямаш богато GitHub портфолио, и ако в уменията ти има големи пропуски. Първо, инвестирай в уменията си, за да отговорят на изискванията в обявата.
Ако отговарят на тях, следващата стъпка е подготовката на уникална кандидатура. Точно така, кандидатурата ти трябва да е уникална и лична. Ако просто копираш нечия, или използваш една и съща за всяка обява, няма да успееш.
Кандидатстването: Активи
Силната кандидатура за технологична позиция включва:
- Имейл/съобщение за кандидатурата – напиши лично съобщение, не копирай от темплейти. Включи името на компанията, ценностите ѝ, културата, какво намираш интересно в описанието на позицията, за която кандидатстваш.
- Портфолио с проекти – предостави линк към портфолиото си както в имейла, така и в CV-то и мотивационното си писмо.
- Резюме (CV) – CV-то ти трябва да бъде направено специфично за обявата, по която кандидатстваш. Трябва да отговаря на изискванията, трябва да сложиш технологиите, водещи за позицията, на първо място, с описание на уменията ти и линкове към проектите, в които си ги приложил.
- Мотивационно писмо – трябва да изпратиш мотивационното си писмо като отделен PDF файл, или да го изпратиш като свободен текст в имейла с кандидатурата ти. В него трябва да обясниш защо ти си подходящият кандидат – комбинация от умения, техническа експертиза и лично отношение. Писмото трябва да е уникално, лично и искрено. Никога не копирай!
Винаги обръщай внимание на тези елементи при кандидатстването за всяка технологична позиция, след като си се уверил, че уменията ти отговарят на изискванията. Винаги трябва да изпращаш CV, GitHub портфолио и мотивационно писмо (или имейл с кандидатурата, в който да включиш като свободен текст мотивационното си писмо).
Кандидатствай внимателно!
Кандидатурата ти трябва да е много внимателно подготвена!
- Ако допуснеш бъгове, объркаш името на компанията, имаш печатни грешки, лошо форматиран текст, лош текстови файл като CV-new(2).docx, ще намалиш шансовете си.
- Трябва да направиш индивидуална кандидатура за конкретната позиция, да е уникална и персонална. Трябва да отговаря на конкретната компания и конкретната позиция. Не може да е обща.
- Никога не копирай едно и също мотивационно писмо и имейл за кандидатура, ще те провали.
- Адаптирай CV-то си, за да отговаря на позицията, за която кандидатстваш. Добави по малко за всяка ключова дума, която идентифицираш в обявата. Разшири уменията и портфолиото си, за да можеш да покриеш максимум изисквания.
- Винаги пиши ново мотивационно писмо за всяка отделна кандидатура.
- Остави контакти за връзка – имейл, телефон и т.н. и очаквай да се свържат с теб. Не използвай псевдоними, галени имена – винаги слагай пълното си име.
- Ако си над 30 години, не го споменавай. Не си длъжен. Ако си твърде млад, например на 15, не го споменавай. Сложи снимка в CV-то си, на която изглеждаш представително, на 20-30 години, а не от дискотека. Съобрази се с ценностите на компанията, в която кандидатстваш. Някои компании дори предпочитат да не слагаш снимка в CV-то си.
Как да напишеш CV-то и мотивационното си писмо?
Няма да се спираме в подробности върху процеса, тъй като съществуват множество наръчници как да напишеш технологично CV и мотивационно писмо. Можеш да намериш много така и така. По-важното е да не се стремиш толкова към впечатляващо резюме, а да положиш усилия да отговаря на изискванията в обявата чрез релевантни проекти в портфолиото ти. Стотици компании предоставят насоки и инструменти за създаване на CV-та, от които можеш да се възползваш. Да намериш добрите и лошите примери – тази стъпка оставям на теб.
7. Технологично интервю / Изпит / Техническа оценка
Не забравяй, че 95% от кандидатите не биват поканени на интервю. Защо? Защото не отговарят на изискванията. Именно в това трябва да вложиш усилия – да отговориш на изискванията. Ако профилът ти съвпада с това, което се иска, и можеш да го докажеш чрез GitHub портфолиото и историята на къмитите ти, интервюто ще е просто формалност.
Фокусира се върху подготовката: учи усилено, създай впечатляващо портфолио от проекти, избери подходящи позиции за работа и кандидатствай внимателно. Вече обсъдихме в детайли тези стъпки.
Разбери процеса по подбор
От гледна точка на работодателя, типичният процес по подбор за технологична позиция, изглежда така:
- Компанията публикува обява за работа в различни портали като LinkedIn или местни такива. Това обикновено е грижа на HR екипа (или собственика в случаите, когато компанията е по-малка).
- Компанията събира кандидатури за определен период (например 2 седмици). Това отново е грижа на HR екипа.
- Работодателят подбира най-добрите кандидати на база на документите, подадени в кандидатурата. С това се ангажират от HR или team lead-а на екипа, за който се наема нов колега. Директно отпадат “разсеяни” кандидатури, например с празни CV-та, пълни с грешки, очевидно копирани кандидатури и т.н.
- Избраните кандидати биват поканени на интервю, или някакъв тип техническа оценка на уменията и след това интервю. Оценката може да се състои в тест, онлайн или на място, или изпит по програмиране, или разработка на проект, за да се проверят уменията и мотивацията на кандидатите. Някои компании може дори директно да се обадят за интервю и да пропуснат оценката.
- След оценката и интервюто, компанията изпраща оферта за работа на най-добре представилите се кандидати. Тази оферта съдържа описание на предложената позиция, отговорности, предложеното заплащане и допълните придобивки, условията на договора и други.
Подготовка за интервю
В случай, че те поканят на интервю, трябва да се подготвиш добре:
- Проучи компанията: научи колкото можеш повече. С какво се занимават? Каква е индустрията, в която работят? Имаш ли приятели в компанията? Какви са ценностите на компанията. Проучи компанията онлайн и в социалните ѝ канали.
- Проучи технологиите от обявата за работа. Вече обсъдихме как да го направиш – гледай видеа, следвай туториъли, създай проекти в GitHub с тях.
- Подготви се за някои типични въпроси в техническото интервю.
Можеш да намериш хиляди наръчници и насоки за справяне с технологичното интервю онлайн и дори в YouTube. Затова винаги е добра идея да се подготвиш за най-често задаваните въпроси, но едва когато те поканят на интервю. Преди това е най-добре да се фокусираш върху другите стъпки.
За да намериш насоки е достатъчно да потърсиш името на позицията, за която кандидатстваш плюс “interview questions” – като тук и тук.
Оценка на технологичните умения
Както споменах, в някои компании ще трябва да преминеш оценка на уменията си преди да те поканят на интервю.
- В случай, че те поканят на изпит (онлайн или на място), събери максимално много информация за процеса и се подготви. Ако си добър разработчик, вероятно ще преминеш изпита с добър резултат. Ако не си добре подготвен, ще видиш къде и какви пропуски имаш, за да ги попълниш преди следващата кандидатура.
- Ако ти дадат практическа задача, постарай се да я изпълниш по най-добрия начин, достъпен за уменията ти:
- Внимателно прочети задачата, направи това, което се иска, а не което ти е най-лесно;
- Използвай най-добрите практики в индустрията, когато разработваш решението – използвай хранилище в GitHub, работи с разклонения, къмитвай често, създай документация, пиши изчистен код и т.н.
- Ако имаш приятел, който е опитен разработчик, помоли за съвет и менторска подкрепа, както и да прегледа кода ти. Не предавай проект, който е далеч от уменията ти и не си осъществил сам. Няма да успееш да го защитиш при последващо интервю.
- Търсенето на външна помощ и менторство е добра идея, но никога не карай друг да пише кода ти. Ако измамиш по този начин, ще бъдеш отхвърлен на интервюто и дори ще те сложат в някой забранителен лист. В крайна сметка, ти си този, който си търси работа, не помощникът ти.
- Най-добрият ти ход е сам да напишеш кода си и чак след това да помолиш твой познат да го прегледа, за да го подобриш.
8. Работата е твоя – Оцелей през тестовия период
Ако успешно преминеш тестъа и интервюто, шансът да получиш оферта за работа е голям. Това, разбира се, включва и изпитателен срок, през който може да бъдеш освободен по всяко време, ако не се представиш според очакванията. За да оцелееш през изпитателния срок в първите месеци на първата ти работа като разработчик, постарай се да демонстрираш мотивацията си, колко усилия полагаш, отдадеността към работата ти и готовността да се учиш и подобряваш всеки ден. Как?
- Идвай на работа рано и си тръгвай късно (или поне след прекия ти ръководител), работи усилено, отговаряй бързо в чатове и на имейли, прави повече отколкото се очаква от теб. Ако имаш задачи, прави ги качествено и с внимание към детайла. Можеш да положиш допълнително усилия след работа, за да надминеш очакванията на ръководителя и колегите ти. По този начин демонстрираш мотивация и старание.
- Отдели време да развиеш допълнителни умения след работа. Вечер и през уикендите развивай допълнителните умения, които да ти помогнат в работата. Например, ако първият ти проект използва Docker, Kubernetes, Terraform и AWS, и не си запознат с Terraform, опознай го. Изгледай видео, направи туториъл и създай малък проект. По този начин ще демонстрираш готовността си да учиш и непрекъснато да подобряваш уменията си.
- Приемай обратната връзка сериозно. Слушай прекия си ръководител и колегите си, особено когато ти дават технически насоки и инструкции. Работата ти зависи от ръководителя ти, затова го следвай. По този начин демонстрираш готовност да приемеш работната среда, култура и стил на работа.
- Създай мрежа. Говори с колегите си, опознай ги, пий кафе и ходи на обяд с тях. Бъди позитивен и приятелски настроен, предложи помощ, доброволствай за нови задачи/проекти/инициативи, сътрудничи си с колегите, споделяй знание, взимай участие в социални активности с тях. По този начин изграждаш лични взаимоотношения с екипа и колегите ти ще искат да работят с теб дългосрочно.
Инвестирай в себе си: Учи – Изгради Портфолио – Започни Работа
Ако все още четеш този наръчник „Как да започнеш първата си работа като разработчик?“, ето кои са най-важните точки, които да вземеш от него:
- Внимателно подготвеният GitHub профил е най-силният ти коз за започването на работа като разработчик. Портфолиото ти с практически проекти е доказателство за опита ти и е най-добрият начин да демонстрираш, че отговаряш на изискванията за длъжността.
- За да се обучиш като софтуерен разработчик и да започнеш технологична работа, е нужно да инвестираш 2 000 – 3 000 часа в кодене. Това означава между 6 месеца (интензивна подготовка) и 2-3 години (спорадично) да развиеш уменията си и да изпишеш 100-150 хиляди реда код в GitHub хранилището си.
- Започването на работа като дивелъпър е 95% подготовка (учене, практика, опит, търсене на работа). Само 5% кандидатстват и успяват да достигнат до интервю.
Следвай този наръчник към първата си dev работа и ще успееш. Над 16 хиляди души преминаха през СофтУни и започнаха работа. Сега можеш да се присъединиш към тях с напълно безплатен старт в обучението Programming Basics, след което да продължиш уверено и към цялостната програма по Софтуерно инженерство, за да се сдобиеш с професия.
Автор: Светлин Наков
---
Видео от семинара
А ако наръчникът ти е допаднал, не пропускай да гледаш и видеото от безплатния семинар, който самият д-р Светлин Наков проведе на 17 Май 2022 на тема "Как да стартирам първа работа като програмист?".