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 в СофтУни (или негов еквивалент в друго учебно заведение).

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

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

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

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

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

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

Езици за програмиране и софтуерни технологии (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 часа с въпросите от публиката):

Previews (17,621), Views (174), Comments (2)

2 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.

RSS feed for comments on this post. TrackBack URL

LEAVE A COMMENT