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 месеца учене, по-добре провери на сергиите на пазара или в такси-компаниите, там може и без много учене.

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

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

Previews (149,108), Views (557), Comments (8)

8 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:

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

RSS feed for comments on this post. TrackBack URL

LEAVE A COMMENT