Menu

Nakov.com logo

Thoughts on Software Engineering

Работа за ученици и недоучили студенти по програмиране: защо е “мисията невъзможна”?

Днес се хванах да напиша отговора на въпрос, който мои студенти ми задават поне веднъж месечно и  той е “мога ли така докато се уча на програмиране, да поработвам нещо в софтуерна фирма?“.

  • Краткият отговор е “не, не може“. Ще обясня защо.

Питат ме още: “ами нали сега уча програмиране, ако в същото време работя нещо по професията, ще уча по-бързо, ще съм по-мотивиран и ще разбирам по-добре учебния материал, не може ли да ми намериш работа или стаж, даже за малко пари“.

  • Отговорът е отново “не, не може, фирмите не искат!“, стажовете с програмирането не стават така!

Стаж по програмиране – това не работи!

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

Примерно учиш в техникум за сладкари и отиваш на стаж да правиш торти. И започваш да помагаш на старите сладкари, да гледаш, да се учиш и за седмица-две се научаваш криво ляво да правиш торти, да мажеш блатовете с крем, да ги печеш, пък даже и може да станеш перфектен, ако си по-читав и ти обръщат внимание. За 2 седмици практика и вече може да вършиш реална работа по реални проекти, за които клиентите плащат. Това е невероятно. Де да можеше и в програмирането така?

Друг случай: учиш туризъм. Лятото отиваш на стаж и работиш 3 месеца на рецепцията в хотел. В първите дни работиш заедно с някой стар служител, той ти показва кое как се прави, учиш, навлизаш в работата, а след това си работиш самостоятелно. Страхотно, прекрасно. Де да можеше така и в програмирането!

В програмирането е много, много, много различно! За да има въобще някакъв смисъл да дойдеш, дори да гледаш как един програмист си върши работата, трябва да си учил поне година много, много сериозно (или 2-3 години на по-леко натоварване) и да си писал като минимум: поне 50-100 хиляди реда код (това е само ориентир, не е измерител на умения), да владееш поне 1-2 езика за програмиране, да можеш да имплементираш програмна логика, да работиш с цикли, масиви, да работиш свободно със списъци, речници и прости структури от данни, да владееш ООП и функционалните парадигни, да поназнайваш работа с бази данни, за имаш понятие и опит с UI системи и front-end технологии (HTML, CSS, JS), да поназнайваш малко back-end технологии, да работиш свободно с Git или друга сорс контрол система и да си писал поне 1-2 собствени малки проекта, за да си се сблъскал с истинските проблеми в практиката. Това са минималните изисквания за кандидат-стажантите в софтуерната индустрия.

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

Нашата професия е трудна!!! Обемът от знания и умения дори за стажант са 100-500 пъти по-високи, отколкото за стажант-сервитьор, стажант в кухнята или стажант в туризма. Софтуерната индустрия работи по друг начин!

Фирмите искат full-time ангажимент!

Работата в софтуерна фирма не става с 2 часа на ден или бачкане първа смяна докато си ученик… Фирмите искат служителите им да работят поне по 8 часа на ден, защото програмистите работят умствена работа. При умствената работа има време за навлизане (като цяло в проекта, както и всеки ден при продължаване на започнатото предния ден).

В програмирането, ако работиш 10 дни по 1-2 часа на ден, ще свършиш по-малко работа, отколкото ако седнеш примерно 6 часа наведнъж. За да си ефективен, трябва да работиш много часове всеки ден и фирмите знаят това. Затова рядко наемат на частичен работен ден.

Ако си junior, препоръчвам първата ти работа да е на пълен работен ден! Програмирането не е като графичния дизайн, където често пъти вършиш голям брой малки задачки. Програмирането е наобратно: с по-малък брой задачи, но обемни и изискващи време и концентрация, разчитащи на задълбочени знания и умения.

Фирмите искат готови програмисти!

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

Фирмите търсят опитни програмисти, които са писали по няколко проекта вече и са натрупали знания, умения и опит за справяне с реалните проблеми в един софтуерен проект: от идеята, през дизайна, избора на технологии, проектирането, писането на кода, дебъгването, тестването, пренаписването, решаването на проблеми, търсенето на решения и т.н. до завършване на реалния продукт.

Затова, ако още учиш цикли и масиви, значи ти е много, много рано за работа. Ако имаш зад гърба си реализирани 2-3 цялостни проекта (от идея, през база данни, сървърна логика и потребителски интерфейс до деплоймънт в продукционна среда), тогава може да се цаниш за стажант-програмист в софтуерна фирма. Иначе е рано!

Изключения има, но са рядкост

Изключения има, да, случват се, но са изключения. Ето няколко примера:

  • Топ състезател, шампион от олимпиади по програмиране с множество национални и международни титли започва стаж в софтуерна фирма, без да знае бази данни, уеб, back-end, front-end и въобще софтуерни технологии. Взимат го за специфични задачи, или просто разчитат че с толкова опит в писането на код и решаване на проблеми, много бързо ще научи технологиите. Да, възможно е така.
  • Фирма прави голямо количество еднотипна работа и има нужда от “цъкачи“. Тогава неопитен младок може бързо да влезе в час и да стане продуктивен. Странно е защо фирмата не е успяла да автоматизира еднотипната работа, но пък точно затова може да наемат стажанти.
  • Късмет. Див късмет. Може да уцелите момент, в който дадена фирма иска да вземе стажанти, има ресурс да ги обучава, или пък по принцип има политика да взима неопитни хора (и да дава по-ниски заплати) или просто предпочита да си обучава сама кадрите от нулата. Има и такива фирми, но са изключения.
  • Нишова технология, която не е сложна. Когато дадена фирма ползва нишови технологии, където няма как да имаш предишен опит (примерно програмиране на proprietary език, на който пишат не повече от 10 души в света), тогава се търсят новаци без опит. Случава се, но много рядко.

Стажовете работят за по-лесните професии

За по-лесни дигитални професии от софтуерното инженерство, където входната бариера от знания и умения, за да вършиш нещо реално полезно за фирмата, е по-ниска, стажове има и ще ви вземат да поработите лятото (примерно):

  • Графичен дизайн – ако имаш понятие от дизайн и можеш да правиш банери, картинки за FB и други малки дизайн задачки, може да си продуктивен още от първия ден. Възможно е да те вземат на стаж, случава се.
  • Дигитален маркетинг – лесно можеш да помагаш в маркетинга на една фирма чрез писане на статии и FB постове, следене на FB групи, правене и поддържане на сайтове и много други задачки, които не изискват много сериозни познания.
  • Бизнес асистент – ако си учил бизнес специалност, може да помагаш нещо лятото в някоя фирма – да посрещаш клиенти, да изпълняваш поръчки, да пишеш фактури, да изготвяш отчети, да асистираш на шефовете и т.н.

За програмирането, обаче, е трудно. Няма да намериш стаж, ако не си печен програмист, запомни това!

И все пак, как да започна стаж като програмист?

Краткият отговор е: “учи, пиши, работи по практически проекти, натрупай опит и тогава кандидатствай за стаж!

  • Мини през основите на програмирането: цикли, масиви, списъци, класове, обекти, базови структури данни.
  • Научи малко front-end: HTML, CSS, JavaScript, някой JS framework.
  • Научи малко back-end: малко бази данни и малко уеб, примерно подаване на данни от базата към REST услуга.
  • Напиши един-два цялостни практически проекта: може да следваш някой tutorial или да тръгнеш съвсем от нулата. Избери малък проект, примерно bookmark система за линкове или блог система. Непременно ползвай GitHub – твоят GitHub профил е твоето портфолио.
  • Когато имаш богат GitHub профил с няколко практически проекта, подготви хубаво CV и започни да кандидатстваш за стажове. Чети какво търсят фирмите в обявите за работа и прави практически проекти с изискваните технологии. Така ще ги научиш и на евентуално интервю ще можеш да докажеш, че си подготвен.

Запомни: за да почнеш стаж като програмист, трябва да можеш да програмираш отлично и да имаш портфолио от няколко нетривиални софтуерни проекта. Ако нямаш, поработи малко, за да ги добиеш.

  • Да се подготвиш и да почнеш стаж като програмист, ако почваш от нулата, отнема 1-2 години пълно посвещение (по 8-12 часа на ден).
  • Ако търсиш работа след 1-2 месеца учене, по-добре провери на сергиите на пазара или в такси-компаниите, там може и без много учене.

Хващайте се да учите и пишете здраво, месеци наред, иначе не става!

Успех на всички!

Comments (16)

16 Responses to “Работа за ученици и недоучили студенти по програмиране: защо е “мисията невъзможна”?”

  1. TopCat says:

    Много точно написано, но по горе написаното важи само за България, в момента съм студент в Дания последна година и смело мога да кажа че тук е доста различно. Пожене имат политка стажовете да са безплатни в цяла Дания и интервютата не са им толкова сериозни – просто общи приказки и така се взима куцо и съкато на стаж, много случаи съм свидетел как взимат хора даже и без github профил само на думи ….

  2. Anonymous says:

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

    • Стефчо says:

      В СофтУни ще имате проекти много през идните 2-3 години, рано ти е още. Примерно проект е да си напишеш игра за телефона или да си направиш дигитален тефтер и да си качваш в него бележки и снимки.

  3. S says:

    И за това господин Наков има и ще има все по-голям недостиг в ИТ сектора.Сам отговорихте на въпроса.

  4. Бивш програмист says:

    50-100 хиляди реда код преди да те вземат стажант? Посмали малко!

    • Мишето says:

      Да го сметнем: 200 дни по 500 реда код на ден = 100 000. Това е по-малко от година. Но е казано че е минимум, значи може и двойно. Наистина май е малко. Аз някой дни пиша по 1500-2000 реда код на ден.

  5. Vasil says:

    “Запомни: за да почнеш стаж като програмист, трябва да можеш да програмираш отлично и да имаш портфолио от няколко нетривиални софтуерни проекта..”. Това при много положения на пазара за програмисти в България, не отговаря на истината.

    • Димо says:

      Това е в секцията късмет. Или не броиш учебните проекти от университета.

  6. Ивайло says:

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

    Да учиш всеки ден, да имаш безсънни нощи и „някакъв” интервюиращ да сметне, че не ставаш за нищо, а в същия момент избира някакво „дете”,което да ходи след тях и да им разнася кафетата. Кажете ми също кои са те, че да ти лепват етикет „Ти не ставаш”.

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

    • Svetlin Nakov says:

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

      Казали са ти, че “не ставаш”, понеже не отговаряш на техните критерии, просто търсят друг човек. Продължавай да се подготвяш и да трупаш умения и опит в това, което ти липсва и ще успееш.

      Винаги след интервю питай защо не са те избрали и какво ти липсва според тях. След това развивай липсващите умения.

  7. rum says:

    да имаш поне година опит с техните технологии това си е направо за junior
    да си в техния офис на живо на 8-часов работен ден
    това е голяма глупост( да ти носи кафето ли)

  8. Slackware says:

    А горките сисадмини (жени) изкарали сертификати при вас какво да правят ? За чий пръснах пари за сертификат, като навсякъде търсят админи с опит, направо синиъри, а джуниърите как да почнат ?

    • Стела says:

      Ами отиваш по фирмитр и се молиш за стаж. В САЩ даже си плащаш за стаж, тук поне е безплатно, а понякога ти плащат.

  9. Николай says:

    Здравейте,

    Тези реални проекти, по които трябва всеки да работи, за да кандидатства за стажантска позиция казвате, че е нужно 1-2 години учене и писане по 8-12ч на ден. Значи искате да кажете г-н Наков, че тези условия са постижими само за деца, понеже не виждам как, един зрял човек, който има семейство и деца може да си позволи да остане вкъщи по 8-12ч на ден без доходи и да се посвети на ученето и писането на собствени проекти, които няма да му донесат нищо повече, освен стажантска програма след 1-2 години. Аз съм на почти 30г. семеен съм с малко дете, работя в съвсем друга сфера, но в същото време уча в Университет специалност КСТ. Карам и допълнителен онлайн курс за Java. Та как се случват нещата, при тези хора в моето положение, как се постъпва в такава ситуация, понеже аз не мога да си позволя да остана без доходи и да се насладя на ученето и писането на код. Тези 1-2 години по 8-12ч на ден учене и писане на проекти за да получиш СТАЖАНТСКА позиция, малко на 15-23 годишни ми звучи.

    Поздравй,

    Николай Петров

    • nakov says:

      Здравей, за съжаление фирмите продължават да вдигат и вдигат още и още изискванията за започване на работа в софтуерната индустрия. Причината е, че благодарение на СофтУни и другите академии има твърде много хора на прилично началнo ниво в програмирането и фирмите лесно намират стажанти и junior devs.

      Накратко: има много повече junior dev кандидати, отколкото junior dev позиции. Съответно фирмите имат избор и вдигат критериите на входа.

      Голямата борба е за опитните програмисти, където пък дисбалансът е в обратната посока: търсят се много повече senior devs, отколкото има на пазара и заплатите се вдигат до небесата.

      На въпроса “как човек на 30 г. със семейство да отделя по 10-12 часа на ден, за да стигне до стажантска ИТ позиция” -> няма лесно решение. Вместо 10-12 часа на ден, отделяй по 3-4 часа на ден за 3 пъти по-дълъг период от време и ще постигнеш подобен резултат. Фирмите не искат да ти плащаш, за да се учиш при тях. Не зависи от мен. Конкуренцията за junior позиции е голяма и фирмите са разглезени. Трябва да натрупаш опит по един или друг начин: да правиш собствени проекти, или да поработиш freelance за без пари или почи без пари, да натрупаш портфолио в GitHub и някой ден ще почнеш работа.

      Наградата е голяма: след 2-3 години, когато си с опит, вместо да се състезаваш да попаднеш в някоя софтуерна фирма, ще стане обратното -> софтуерните фирми ще се надпреварват за тебе. Такъв е пазарът.

      Някакъв по-бърз хак за ситуацията е bootcamp проограмата на СофтУни: http://softuni.bg/bootcamp

      • Николай Петров says:

        Здравейте,

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

        Поздрави!

RSS feed for comments on this post. TrackBack URL

LEAVE A COMMENT