Тази статия е като допълнение към по-кратката и версия. Целта тук е да дам повече детайли около самите стажове. Първо ще обърна внимание на това как се достига до такъв стаж и какво представлява, а след това ще се опитам да обобщя положителните и негативни страни, които може да има.

Кандидатстване, срокове и провеждане

Обикновено стажовете се провеждат през лятото. Тогава е най-лесно да се намери време между семестрите. Все пак доста компании провеждат стажове през цялата година. В общи линии може да се кандидатства по всяко време, но най-много други стажанти има през лятото. Трябва да се отбележи, че някои стажове продължават до една година. Стандартно са между 3-4 месеца. За летните стажове обикновено се кандидатства от рано. Напоследък е нормално това да се прави през октомври/ноември на една година, за да се прави стаж през лятото на следващата. Ако един студент бъде одобрен за интервю, то може да се проведе в периода между ноември-февруари. Това значи, че самата подготовка за такива интервюта е добре да започне още по-рано от това. Относно самата подготовка ще спомена по-надолу.

Документите, които се подават в началото, най-често са едно резюме на кандидата. Има някои правила как най-добре да се напише такова резюме. В края на статията има някои връзки към полезни ресурси [1]. Полезно е резюмето да бъде прегледано от някой по-опитен, а най-добре – от човек, който е минал през такива стажове или работи в подобна компания. На база на резюмето в компанията решават дали да поканят кандидата за интервюта. Това може да отнеме няколко седмици. За изпращането на резюмето може да се използва сайтът на дадена компания. Обикновено там има секция за стажове и форма за кандидатстване. Някои от компаниите посещават университетите и събират такива резюмета. Това се прави по-малко за Европа и още по-малко конкретно за България. Все пак някои американски компании организират подобни посещения, но сравнително рядко. Най-добре е, ако имате познат, работещ в дадена компания, или някой, който е правил наскоро стаж там. Тези хора могат да предадат вашето резюме и по този начин да ви препоръчат. За Microsoft знам, че някои български студенти са получавали помощ с кандидатстването от представители на компанията в България. Така че явно и това е вариант там. По-надолу ще опиша в повече детайли какво може да се очаква от интервюто.

Най-често такива стажове се организират от американски компании. Разбира се, това не важи на 100%. Както беше споменато по-рано, такива програми има и в България, а също се организират от някои европейски компании. Тази статия се фокусира върху американските, защото за момента те са доста отворени към наемането на чуждестранни студенти, а и моите знания се отнасят главно до такива компании. Отделно от това някои от най-успешните технологични компании са американски. Все пак в днешно време някои американски компании имат офиси извън САЩ, в които наемат стажанти. Например Google наемат хора на много места в САЩ, но също така могат да предложат позиции в Европа, Азия и Австралия. Например офисът им в Цюрих има много инженери и е едно страхотно място, сравнително близо до България, където може да се направи стаж.

Интервюта

Компаниите канят кандидатите за стаж на интервюта, ако харесат резюметата им. Най-често тези интервюта се провеждат по телефон, като един интервюиращ се обажда на кандидата и му задава въпроси в рамките на 45-60 минути. Интервюиращите са най-често служители на компанията, които са добре технически подготвени и просто са заделили около 1 час от работния си ден за интервюто. Ето защо понякога се случва да закъснеят за уговорения час или да бързат за нещо друго след това. За тях много често това е поредното интервю за стаж, което са ги помолили да направят. По-късно те дават оценка за отговорите, които са получили.

Някои интервюта се провеждат на място. В Microsoft например (поне преди няколко години) по телефона се провежда само едно нетехническо интервю и се задават някои въпроси по e-mail. Одобрените кандидати се канят на живо в някой европейски град, където имат 3-4 интервюта с инженери на място. Самите въпроси са от подобно естество, само че си говорите на живо и пишете код на хартия или на дъска. Това е малко по-различно от писането на код в редактор и си струва да се упражните да го правите преди такива интервюта. Между другото, в такъв формат са и повечето интервюта за постоянна работа, така че практиката на дъска никога не е излишна.

Въпросите, които се задават, са основно алгоритмични. Много такива въпроси се задават и по интервюта в български софтуерни компании. За да се подготви за тях, човек може да изкара курс по алгоритми в университета си, в бакалавърската степен например. В днешно време има такива курсове онлайн [2]. Има и някои книги, които са класики в областта [3]. За да се подготви някой добре за решаването на такива задачи, е нужно да отдели доста време и старание. Една от главните причини е, че се иска практика. В днешно време има много места в интернет, където може да се упражнява решаване на алгоритмични задачи. Едно от най-известните е TopCoder (www.topcoder.com/tc). В Google го препоръчват на кандидатите за работа като добро място за подготовка. Някои други са изброени в края на статията [4]. Все пак задачите на интервютата не са от най-трудните нива, а по-скоро се доближават до по-лесните. Според мен причината е, че интервюто има за цел да провери начина на мислене на кандидата, как той или тя предава идеите си на друг човек и разбира се, уменията за бързо реализиране на тези идеи в сорс код. Не е толкова важно кандидатът да е невероятен с алгоритмите, а по-скоро да има добри познания в областта. Друго много важно нещо е питането на доуточнителни въпроси. Често изпитващите нарочно не казват всички детайли и интервюиращият трябва да се досети да попита за тях. Не е правилно да се приемат за дадени неща, които не са споменати изрично.

Самото интервю много често включва писане на сорс код. Интервюиращият използва споделен документ, в който може да ви зададе условие на задача. След като бъде обсъдено някакво решение, може да ви помоли да напишете сорс код, който го реализира. Обикновено на кандидата се предоставя избор на програмен език. Езици като C/C++, Java, Python са най-често използваните. Хубаво е, ако езикът, който изберете, се използва в компанията, където кандидатствате. В противен случай може интервюиращият да ви помоли да изберете някой друг език, а може пък и да се съгласи. По време на писане на самия код пак е добре да не спирате да коментирате какво правите във всеки един момент. Това показва на интервюиращия защо пишете кода по начина, който сте избрали. Добре е във всеки един момент на интервюиращия да е ясно какво мислите. Така тя или той може да дава насоки и да коригира евентуални грешки. Напълно нормално е, ако изпитващият открие грешки в написания код и ви помоли да ги оправите. Не е нужно интервюто да е перфектно, за да бъде успешно.

Не всички въпроси са алгоритмични. Понякога интервюиращият може да попита въпрос, свързан с дизайна на някоя система. Дори някой алгоритмичен въпрос може да бъде последван от въпрос относно това как ще се паралелизира вашият алгоритъм, така че да може да се изпълни на 100 машини например. В днешно време много от тези въпроси са свързани с това как някаква услуга ще се изпълнява на клъстер от стотици сървъри, как ще се организира правилното разпределение на заявките от клиентите, управление на паметта и бази данни и т.н. В края съм добавил някои полезни връзки към места, където се обсъждат различни въпроси за такива интервюта [5].

Какво следва след интервютата и как протича един стаж?

Ако интервютата са успешни, кандидатът получава оферта за работа за даден период от време в конкретен офис и екип. При Google има една особеност, че дори и с успешни интервюта те първо се опитват да намерят екип на всеки кандидат. От една страна, това е хубаво, защото можете да си изберете екип, ако имате специални желания. От друга страна, значи, че някой ръководител на екип трябва да ви хареса по резюмето и резултатите от интервютата. В някои по-редки случаи това може да не се получи. В други компании пък, който премине интервютата, получава позиция в някой екип. Ако всичко се нареди и имате оферта, се уточняват някои детайли и след това знаете, че имате уреден стаж някъде по света, където ще имате заплата и проекти, по които да работите. Самите проекти често се уточняват малко преди да пристигнете, но почти със сигурност нещата са уточнени, когато сте вече там. Дори на доста места се търсят по-интересни проекти за стажантите, за да ги привлекат да се върнат пак евентуално на постоянна работа.

Все пак работата може да е скучна понякога. Няма гаранция, че работата ще е много интересна. Всеки, който е работил в софтуерна компания, сигурно се е убедил, че има различни видове проекти. Някои са доста скучни, но трябва да се свършат, а други са по-интересни. Това, че друг стажант прави по-интересни неща, не значи, че е по-добър. Най-вероятно е имал повече късмет. Това зависи и от отношението на мениджърите в екипа ви. Някои доверяват по-важни задачи на стажанти, а други – не. Все пак доста хора са имали проекти, които са били интересни и полезни за тях по време на стажовете им.

На повечето стажове се организират събития с другите стажанти. Това се прави с цел да има повече възможности за запознанства и създаване на по-приятна атмосфера. Например в главните офиси на компании като Google, Facebook и Microsoft се организират доста събития, особено през лятото. Някои от тях са доста яки и оставят хубави спомени. Според мен тези мероприятия са много важна част от един стаж. Той не е само до писане на код и научаване на нови технологии, а също опира до социализиране, опознаване на нови места и култури. Примери за такива събития са еднодневна разходка с всички стажанти до някое известно място в околността, посещение на бейзболен мач (да, в САЩ са луди по тази игра), барбекю в парка или просто излизане на ресторант с екипа ви. Ще разгледам повече от тези ползи накрая на статията.

В края стажантът получава оценка за работата си. На базата на тази оценка може да бъде направена оферта за следващ стаж или постоянна работа. Това зависи от желанието на стажанта и дали ще продължава с образованието си в университета. Ето защо стажът може да е един път към намиране на хубава постоянна работа в някоя от известните софтуерни компании по света.

Ползи от стажовете

Според мен стажовете от типа, който описах досега, имат какво да дадат на всеки един човек независимо от целите в живота. Ще се опитам да изброя някои от положителните неща, които виждам аз.

Трупане на опит и по-богато резюме. Един стаж в известна компания или по интересен проект (а защо не и двете) е добре дошъл за резюмето на всеки студент. Стажът също може да даде доста опит и нови познания. Все пак в доста от компаниите, в които може да се прави стаж, се създават и използват някои от най-добрите практики за писане на код и ръководене на проекти. Не казвам, че навсякъде е така, разбира се. Във всеки случай е полезно да се види как работят в местата, където се създават някои от най-използваните продукти в света. Също така гарантирам, че с име като Google, Facebook или Microsoft в резюмето то ще изглежда по-интересно за всеки, който го гледа. Не че това е единственият и най-правилен начин да се изгради хубаво резюме, просто е един плюс от такива стажове.

Създаване на нови приятели. На всеки един стаж човек се среща с един куп нови хора. Някои от тях са част от екипа и компанията, в които се работи. Друга голяма част са останалите стажанти в програмата. Освен това се получават много други случайни приятели покрай нещата, които човек реши да прави в свободното си време например. Някои от тези нови познати могат да останат приятели за дълго време след това. Тъй като повечето от тях ще са специалисти в областта на софтуерното инженерство, те могат дори да са бъдещи партньори в различни начинания. Една част от стажантите също идват от университети по цял свят. Други учат в американски училища. Запознавайки се с такива хора, човек изведнъж може да се сдобие с приятели в най-разнообразни краища на планетата.

Стажът дава добър поглед над това как работят някои от известните софтуерни компании. Според мен това е много полезно знание. Само за няколко месеца човек може да научи повече за правенето на софтуер и ръководенето на проекти, отколкото за години в университета или в някои други компании. Някой ден придобитите знания биха могли да помогнат, когато човек иска да стартира свое собствено начинание или иска да ръководи проекти в други компании. Едно интересно нещо е, че най-вероятно един стажант в известна софтуерна компания няма да види само положителни неща. Лично за мен беше интересно да разбера, че на доста от тези места има неразрешени проблеми и понякога цари хаос. Това определено разбива мита за перфектната организация в такива компании. Трябва да уточня, че конкретните изводи много зависят от компанията и тима в нея. Например Microsoft и Facebook най-вероятно ще са доста различни като подходи, които използват за ръководене на софтуерни проекти. Да не говорим, че впечатленията от малка компания, като imo.im например, трябва да са пък съвсем различни.

Стажът е начин да се спестят добри пари. Не бива да се пренебрегва и този аспект. В най-общия случай заплатите, които се дават на стажанти в места като Силициевата долина, са доста добри. Истина е, че те са по-ниски от тези на постоянните служите, но пък обикновено данъците за стажантите са доста ниски. За един студент в България е добър вариант да участва в летен стаж и по този начин да спести пари за живот през учебната година. В някои офиси извън САЩ, например в някои европейски държави, заплатите могат да са по-ниски заради по-малката конкуренция между компаниите, а и различните стандарти на живот.

Стажът е добър трамплин към постоянна позиция в известна софтуерна компания. Ако един студент получи стаж в известна компания, в която би искал да работи по-късно, това улеснява наемането в бъдеще. Например, ако оценката в края на стажа е положителна, това може да гарантира оферта за постоянна работа след края на образованието. Това не е така навсякъде, но дори в Google стажантите имат по-малък брой интервюта за постоянни позиции и оценките от стажовете се взимат предвид. В други места при добра оценка от стажа веднага следва оферта за постоянна позиция. Още една полза от преминаването през всички тези интервюта за стаж е, че те са добра тренировка за интервюта за постоянни позиции. В някои компании дори има възможност стажантът да направи фалшиви интервюта със служители на компанията, за да оттренира цялото изживяване.

Накрая, това е добра възможност за нови интересни изживявания и трупане на опит. При всеки един стаж човек се озовава за поне няколко месеца в ново място някъде по света. Изживяването не е за постоянно и дава възможност на човек да пробва места, за които преди това не си е помислял да посещава. А животът в градове като Сан Франциско, Ню Йорк, Лондон, Цюрих и други може да създаде много интересни ситуации. От една страна, всеки студент, който е на стаж в такова място, има възможност да посети близките забележителности и да се запознае с нови култури. Получава се и опит с живеене на ново, непознато място, в друга държава. Доста хора се колебаят какво ли би било да живеят в чужбина. Стажовете са добър начин да се разбере това и да се направи сравнение с живота в нашата страна. Проблемите, с които се сблъсква един стажант в работата си и в свободното си време, може да породят нови идеи за продукти и услуги, които да се реализират в България, когато се върне у дома. За това могат да помогнат и множеството нови хора, с които се среща по време на стажа. Последно, едно нещо, което ми беше полезно на мен при първия ми стаж, беше възможността да усъвършенствам английския си език. Смятах, че умея да общувам и разбирам достатъчно добре езика. Когато отидох в САЩ, първите няколко седмици бяха малко трудни за мен в това отношение. Все пак към края бях свикнал да общувам по-свободно в работна или друга обстановка.

Недостатъци при стажовете

Ходенето на стажове не е изпълнено само с позитивни неща, разбира се. В някои случаи това може и да е така, но е важно да се отбележат някои неудобства, които те създават. Например един стаж означава живот далеч от роднини и приятели за поне няколко месеца. Най-приятно е, когато се отива на стаж заедно с още някой приятел от университета. При първия си стаж ходих сам и началото не беше толкова приятно, но пък бързо се намират първите познати. Ходейки за лятото, човек може да изпусне възможността да отиде на море с приятели например. Това може да е проблем за някои хора и си струва да се отбележи. Всеки трябва да определи добре приоритетите си.

Нужно е бързо аклиматизиране и уреждане на някои неща. Преди стажа и в началото му има да се уредят някои неща. Първо се започва с документи, като работна виза. След това се преминава през намиране на квартира, създаване на банкова сметка и т.н. Някои компании правят тези неща максимално лесни. Например, Microsoft и Facebook уреждат място за живеене и поемат част или цялата цена за това. В общи линии, всички компании се грижат за покриване на разходите за самолетни билети, донякъде или изцяло за квартира и пренасяне на лични вещи. Все пак в различна степен на различните места има нужда стажантът да се подготви за живота си в новото място. Понякога това може да донесе малко стрес и е добре всеки да е подготвен за това.

Това не е постоянна работа. Много студенти в България работят по време на образованието си в университет. Някои от тях са започнали кариера в компаниите си и един стаж би попречил на евентуалното израстване или поне те така смятат. Стажът не обещава кариера на ново място, а само потенциал за такава и според мен трябва да се разглежда като едно ограничено във времето преживяване. Имам някои познати, които са се притеснявали, че в текущата им работа в София може да загубят постигнатата си позиция, ако заминат за 3 месеца в чужбина. Предполагам, че за някои това важи повече, отколкото за други. Не може да се каже със сигурност дали са прави или не, защото зависи от ситуацията. Впечатлението ми е, че човек, връщащ се от стаж, е още по-ценен за компанията си. Коректно е все пак всеки да съобщи на работодателя си от рано, че има планове да отсъства за няколко месеца. Всеки трябва да прецени за себе си дали след няколко години би му било полезно да е прекарал малко време в някоя по-известна технологична компания, или да продължи кариерата си в текущото работно място в София например.

Работата не е гарантирана да е интересна. Няма гаранция, че проектите, по които ще се работи, ще са интересни. В някои случаи може конкретните задачи, които получава стажантът, да не са много забавни, както споменах по-рано. Никой не е застрахован от това и то зависи от нагласата и интересите на всеки един човек. Все пак стажът не се състои само от работа по един проект, а съвкупност от много фактори. Надявам се да съм успял да предам тази идея досега в статията.

Може да се наложи изтегляне на изпити в университета. Понякога, за да се вмести стажът между семестрите, може да се наложи изтегляне на изпити от сесията за по-ранни дати или евентуално за след стажа. На мен ми се е налагало да правя това няколко пъти и за щастие във ФМИ към СУ, където съм бил студент, са проявявали разбиране. Разбира се, това налага човек да уреди тези въпроси лично и да се подготви за изпитите навреме. Важно е да се планират и тези неща.

Заключение

Статията се получи по-дълга, отколкото си представях. Смятам, че е редно да се представят всички страни на студентските стажовете в софтуерни компании в чужбина. И все пак съм сигурен, че съм изпуснал да опиша някои аспекти. Нарочно не навлязох в подробности по някои теми като подготовка за интервюта и задачите в тях, защото те изискват писането на отделна статия. Като заключение мога да кажа, че след като съм направил няколко стажа в САЩ и Европа, силно ги препоръчвам на българските студенти в различни софтуерни специалности. Причините са, че за мен ползите са доста повече от недостатъците. Това, разбира се, е лично мнение и затова си струва всеки да прочете цялата статия и да реши сам за себе си. Може да се намери и доста информация в интернет по различни форуми и страниците на самите компании. Също така, недостатъците обикновено изглеждат по-големи, отколкото са преди да мине самият стаж. В края на всяко лято, в което съм бил на стаж, съм бил доволен, че съм го правил, а в началото понякога съм се чудил защо по дяволите съм тръгнал да правя стаж далеч от дома си.

Смятам, че за един български студент стажът в известна софтуерна компания дава нови знания, работен и житейски опит, обогатява резюмето и помага да се спестят добри пари. В добавка към това, по мое впечатление, се обогатява мирогледът и помага за вземане на по-информирани решения за живота по-нататък. Все пак е добре всеки да прецени за себе си дали няма негативи, с които не е готов да се пребори.

Важно е да отбележа, че получаването на оферта за такъв стаж в никакъв случай не е лесно. Интервютата, през които се преминава, са направени така, че да се изберат едни от най-добрите студенти, които кандидатстват за позициите. Все пак мисля, че всеки, който се подготви добре и от рано, може да се справи отлично. В края на краищата, знанията, които се изискват за справяне с интервютата, се изучават в повечето бакалавърски програми в българските университети. А дори и да не е така на практика, интернет е пълен с полезни материали, част от които съм споделил с края на статията. Ключът е упорита подготовка и практика при решаването на задачи. Така че препоръчвам на всеки български студент в софтуерна специалност да помисли и проучи какви възможности има и ако реши, да се пробва на колкото места може.

Полезни връзки

  1. Как да подготвим резюме. Не гарантирам, че това са най-добрите ресурси по темата, но си струва да се погледнат:
    1. http://www.extension.harvard.edu/hub/blog/extension-blog/how-write-great-resume-cover-letter
    2. http://internships.about.com/od/resumetipssamples/a/Top-10-Tips-For-Writing-A-Great-Internship-Resume.htm
    3. http://internships.about.com/od/resumetipssamples/ht/ResumeTips.htm
  2. Oнлайн курсове по алгоритми:
    1. http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/index.htm
    2. https://www.coursera.org/course/algs4partI
    3. https://www.coursera.org/course/algo
  3. Книги за алгоритми:
    1. http://mitpress.mit.edu/books/introduction-algorithms
    2. http://www.programirane.org/
  4. Сайтове за подготовка и решаване на задачи:
    1. TopCoder
    2. Списък в Wikipedia
    3. Maycamp (сайт на български)
  5. Места, където се обсъждат въпроси от технически интервюта:
    1. http://www.careercup.com/
    2. http://www.andrew.cmu.edu/user/xiaoyux/Cracking%20the%20Coding%20Interview.pdf
  6. Класация на стажовете в американски технологични компании по заплата. Числата в статията не са много точни, защото заплатата зависи от степента на образование и дори в кой курс е студентът. Също така някои по-малки компании не са разгледани, а те могат да дават по-високи заплати.
    1. http://www.businessinsider.com/the-20-richest-interns-in-tech-2013-1#