Menu

Nakov.com logo

Thoughts on Software Engineering

Как да стана програмист? Кой език за програмиране да уча и защо езикът няма значение?

Днес направих 4-часово живо видео включване по Facebook на тема “езици за програмиране и от кой език да започна?“. Показах набързо 6 от най-използваните езици за програмиране (към април 2017 г.) и обясних за техните приложения, силни и слаби страни. Поствам ви видеото + малко записки от дискусията.

Топ 6 най-използвани езици за програмиране към 2017 г.

  • C# – супер използван, съвременен статично-типизиран, обектно-ориентиран език, търси се много, супер удобен за писане, с по-малко излишен код (boilerplate), позволява процедурно, обектно-ориентирано и функционално програмиране
  • Java – супер използван, съвременен статично-типизиран, обектно-ориентиран език, търси се много, пишеш доста излишен код (boilerplate), за големи корпоративни, скъпи и тежки проекти
  • JavaScript – супер използван, съвременен динамичен (скриптов), гъвкав, функционално-ориентиран език, с много малко излишен код (boilerplate), ползва се от почти всички Java, C#, PHP и Python програмисти за уеб front-end
  • PHP – много популярен и използван език за уеб програмиране (не е универсален), задвижва половината Интернет, лесен, може да се пише процедурно и обектно-ориентирано, динамичен (скриптов) език, предимно за по-малки проекти
  • Python – супер лесен език, подходящ за старт, пише се лесно, без излишен код (кратки, но разбираеми програми), супер популярен, процедурно и обектно-ориентирано програмиране, динамичен (скриптов език)
  • C++ – труден език, статично-типизиран, относително по-стар, за професионалисти, които пипат на по-ниско ниво, мощен, но сложен, подходящ за състезателно програмиране, обектно-ориентиран, кодът става супер бърз, подходящ за 3D игри

Как се става програмист?

По обсъжданата концепция “Как се става програмист“, аз смятам, че има 4 основни групи умения, които всички програмисти имат и трябва да имат (сега и в бъдеще):

Умение #1 – да кодиш (20%)

Да се научиш да кодиш. Формира около 20% от минималните умения на програмиста.

  • работа с променливи, проверки, цикли
  • ползване на функции / методи / обекти
  • работа с данни: масиви, списъци, хешове / dictionary / associative arrays

Това умение се придобива в курса Programming Basics в СофтУни (или негов еквивалент в друго учебно заведение).

Езикът за програмиране няма значение за това умение!

Умение #2 – алгоритмично мислене (30%)

Алгоритмичното (логическо, инженерно, математическо) мислене формира около 30% от минималните умения на програмиста.

  • развива се за половин-една година чрез решаване на 1000+ задачи по програмиране
  • помага физика, математика и подобни (но не са задължителни!)
  • способността да решаваш задачи е супер важна за програмистите

Това умение се придобива на 60-70% от необходимото за старт в професията в курса Programming Fundamentals в СофтУни (или негов еквивалент в друго учебно заведение).

Езикът за програмиране няма значение за това умение!

Умение #3 – Фундаментални знания за професията (25%)

Фундаментални знания и умения за програмирането и разработката на софтуер и компютърните науки формират около 25% от минималните умения на програмиста.

  • ООП – обектно-ориентирано програмиране: класове, обекти, наследяване, полиморфизъм, абстракция
  • функционално програмиране, ламбда функции, функции от по-висок ред
  • бази данни, SQL, релационни, нерелационни
  • софтуерното инженерство, сорс контрол системи, Git, управление на задачи, софтуерен дизайн, архитектури, управление на проекти
  • уеб технологии (HTML, CSS, JS, HTTP, DOM, AJAX, REST, …)
  • мрежово програмиране, мрежови протоколи, мрежова комуникация
  • паралелно програмиране и асинхронност
  • структури от данни и алгоритми

Тези умения се придобиват на 30% от необходимото за старт в професията в курса Software Technologies в СофтУни (или негов еквивалент в друго учебно заведение). Професионалните курсове за софтуерни нженери в СофтУни покриват 50%-60% от тези умения.

Езикът за програмиране няма значение и за това умение!

Умение #4 – Езици за програмиране и софтуерни технологии (25%)

Езиците за програмиране и технологиите за софтуерна разработка формират 25% от минималните умения на програмиста.

За тези умения вече езикът за програмиране има значение.

  • Обърнете внимание: само за тези 25% от професията има значение езикът за програмиране!
  • За останалите 75% от уменията няма значение езикът и тези умения са устойчиви във времето и преносими между различните езици и технологии.

Примерни често използвани езици и технологии (software development stacks):

  • език C# + ООП, ФП, класовете от .NET + база данни SQL Server, Entity Framework, ASP.NET MVC, HTTP + HTML + CSS + JS + DOM + jQuеry
  • език Java + Java API classes + ООП + ФП + бази данни + MySQL + HTTP, уеб програмиране + HTML + CSS + JS + DOM + jQuery + JSP/Servlets + Spring MVC или Java EE / JSF
  • език PHP + ООП + бази данни + MySQL + HTTP, уеб програмиране + HTML + CSS + JS + DOM + jQuery + Laravel / Symfony / друг MVC framework за PHP
  • език JavaScript (JS) + ООП + ФП + бази данни + MongoDB, MySQL + HTTP, уеб програмиране + HTML + CSS + JS + DOM + jQuery + Node.js + Express + Angular + React
  • език Python + ООП + ФП + бази данни + MongoDB, MySQL + HTTP, уеб програмиране + HTML + CSS + JS + DOM + jQuery + Django
  • език C++, ООП + STL + Boost + native development + бази данни + HTTP + други езици
  • език Swift + MacOS + iOS, Cocoa + Cocoa Touch + XCode + HTTP + REST + други езици

Изводи: има ли значение езикът за програмиране?

  • Разликата между езиците за програмиране и по-точно в уменията на програмистите на различните езици и технологиите от тяхната екосистема, е в около 10-20% от уменията.
  • Всички програмисти имат около 80-90% еднакви умения, които не зависят от езика!
  • Колкото повече езици и технологии владееш, толкова по-бързо учиш нови и толкова по-малко усещаш разлика между тях.

Глобален извод: езикът за програмиране почти няма значение!!!

Има значение да се научиш да кодиш (20%), да се научиш да мислиш алгоритмично и да решаваш проблеми (30%), да имаш фундаментални знания по програмиране и компютърни науки (25%) и да владееш конкретен език за програмиране и технологиите около него (25%).

Виж също: Откъде да започна с програмирането?

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

Ще дам субективни и не напълно основателни препоръки, мое виждане, което е много спорно, от кой език за програмиране да започна да уча в началото:

  • Избор #1: C# – най-лесен като език, много масово се изпозлва, пише се супер приятно, съвременен език, пълно е с материали, лесно се учи и е направен добре.
  • Избор #2: Java – по-подробен език, масов език, използва се много, пълно е с материали, добра перспектива, лесно се учи.
  • Избор #3: Python – супер лесен език, супер масов, много материали, лесно се учи, няма излишен код – пишеш много малко

По-малко подходящи езици за старт, но са подходящи все пак:

  • JavaScript – лесен език, супер масов, пълно с материали, ползва се много, ориентиран към уеб разработка главно, но се ползва и за mobile и embedded, малко е спорно дали е добър за първи език, защото насочва предимно към уеб front-end разработка
  • PHP – лесен език, става за старт, но не е супер препоръчително, защото е само за уеб, добър избор за HTML-аджии / сайтаджии, които искат да надградят над HTML & CSS

Езици, които по-скоро не са за старт:

  • C++ – защото е труден, препоръчва се за старт за състезатели по олимпиадите, по-малко се търси в практиката, но пък дава хубава основа
  • Swift – защото е предимно за iOS и заключва програмиста към определена технология
  • C – защото е остарял език, труден, пише се супер много код за прости неша, и малко се ползва, подходящ е за микроконтролери, ако стартираме от тях
  • Други – не се зачуквайте в специфични и малко използвани езици, поне не за старт

Извод: не тръгвайте напред с технологията първо (примерно от PHP & MySQL или от JavaScript и React)! Първо научете основите (да кодите, да решавате задачи, да мислите алгоритмично), след това се хванете с технологиите.

Търсене на езиците за програмиране в България

Тази класация на най-търсените езици за програмиране е правена през 2016 г. от екип на СофтУни. Изследвахме пазара на работни позиции за програмисти. Анализирахме представително извадени 800 обяви за работа за програмисти и ги класифицирахме в групи според основното изискване в обявата: Java, C#, PHP, JavaScript, C++, Python, Android, iOS, други. Анкетирахме 150 софтуерни фирми за техните нужди от софтуерни инженери според технологиите и обединихме резултатите с техните отговори.

Някои езици и технологии се търсят в болшинството обяви и фирми, но най-често не са основни, примерно HTML, CSS, JavaScript, SQL, Git, ООП, algorithms и т.н. Затова класирахме всички отворени работни позиции за разработчици в няколко основни групи. Ето нашите очаквания за шансове да си намерите работа в България според езика за програмиране според извършеното проучване:

  • Java (+ JS + HTML + SQL) – най-свирепо търсене – 15-16%
  • C# (+ JS + HTML + SQL) – огромно търсене – 15-16%
  • PHP (+ JS + HTML + SQL) – огромно търсене – 15-16%
  • JavaScript (+ HTML, SQL) – огромно търсене – 15-16%
  • C++ – търси се доста, но е труден език – 8-9%
  • Mobile development (iOS / Andorid) – търси се доста, но по-малко от C++ – 6-7%
  • Python – търси се умерено – 4-5%
  • Други – общо около 20%

Посочената класация е ориентировъчна. Не претендираме за научен подход при изследването, нито някой твърди, че това е абсолютната истина. Възможно е някъде да сме се подвели, да сме пренебрегнали някои фактори, да сме изкривили неволно информацията, но смятаме, че цялостната картинка прилича на горната (с +/ – 5-10% за всяка позиция).

Не се доверявайте на следните източници: TIOBE и StackOverflow. Те изследват други характеристики на популярност на езиците за програмиране (не търсене на пазара на труда, нито пък на българския пазар).

Гледайте цялото видео (4 часа с въпросите от публиката):

Comments (17)

17 Responses to “Как да стана програмист? Кой език за програмиране да уча и защо езикът няма значение?”

  1. Калоян Радушев says:

    А нещо за Delphi ili Embarcadero???

  2. Калоян Радушев says:

    SQL ne e ezik za programirane, a za uprawlenie na opredeleni bazi danni! Moje da se polzwa ot wsi4ki platformi.

  3. linux says:

    Защо C# да е по лесен от Python ?

  4. […] Опитай какво е “да програмираш” безплатно, изкарай кратък курс по програмиране за начинаещи от октомври 2017 г., за малки и големи, присъствено или онлайн. Ела и се докосни до писането на програмен код и програмна логика, до използването на променливи, писането на проверки и въртенето на цикли. Изкарай 8 безплатни учебни урока по програмиране, на място в твоя град, с инструктор, който да ти показва и помага персонално. Ако ти хареса, ако се запалиш по програмирането и софтуерните технологии, продължи напред и стани програмист. […]

  5. […] Кой език за програмиране да уча и защо езикът няма знач… […]

  6. Светослав Димитров says:

    Здравейте.Бих искал да запитам г-н Наков и неговите колеги,какво им е отношението към езика за програмиране VB.NET?Той търсен ли е и има ли смисъл човек да го изучава?
    Лек ден и поздрави на целия Ви екип

    • nakov says:

      VB.NET е остарял, затихващ език, който почти не се ползва вече. Съществува по исторически причини, от ерата на VB и VC++, но от тогава до сега беше изместен от по-съвременни езици като C#, Python и JavaScript.

  7. ici bici says:

    Здравейте възможно ли е да се науча да програмирам , за 2 -3 години завършил съм екология учили сме висша математика само 1 част после бях по Англия събрал съм около 15 хиляди ще ми стигнат ли ? Търся начин да остана по България ама май няма ех (:

  8. midibo says:

    Здравейте, програмист съм със стаж почти 20 години (С, С++ ниско + висoко ниво, PowerBuilder за десктоп, но и клиент-сървър приложения с бази данни на Informix, т.е. и SQL), НО не съм програмиралa в последните 8 години. Мога ли отново да се върна в бранша, или е вече късно? все пак имам пред мен още доста години 🙂 – търсят ли се хора, мога ли да се насоча към нещо конкретно, което ще е нужно и ще мога да се впиша?

    • nakov says:

      Може, винаги може. Фундаменталните знания са трайни, технологиите се променят. Аз лично на твое място бих потърсил работа във фирми, които ще оценят уменията по C, C++ и ниското ниво програмиране, примерно Visteon, MM Solutions, Codix и други. Опитай, свържи се с тези фирми, поговорете си.

  9. Georgi Eremiev says:

    Здравейте, г-н Наков, от доста попадам на резюмето Ви, което е впечатляващо!
    Моля за съвет аз съм на 40г. като не сум се занимавал с програмиране, бих искал да се преквалифицирам като ученик съм правил програми на бейсик с по 30 – 80 кода в университета Ту Сифия -машинен инженер магистър съм учил турбо паскал. След бейсика определено не ми беше труден.
    Мога да опиша алгоритъм от типа If ….Then ….Else….,
    но за повече трябва да уча здраво
    Моля за съвет дали си заслужава да се преквалифицирам и да положа сериозни усилия, защото и английският ми е слаб.

    • Georgi Eremiev says:

      Извинявам се за сериозните правописни грешки, но съм със скандинавска клавиатура и кирилицата ми е много зле!

    • Svetlin Nakov says:

      Имаме успешни случаи и над 40 г. за смяна на професията към програмиране.

      Важното е да имаш около 2 години да отделиш да учиш здраво.

  10. Noone There says:

    Светлин Наков, Ти си най – големият олигофрен! загубих 10 минути да чета кои са най-добрите езици за програмиране, според тебе, според фирмите от които лапаш кеш, без да споменеш SQL, а след това каза, че, цитирам по памет “Тези езици разчитат на SQL”! ta ti eba majkata oligofren typ! debil, gnusen! Fuck you! haha

RSS feed for comments on this post. TrackBack URL

LEAVE A COMMENT