Въведение в програмирането

1. Базови умения по програмиране (кодиране)

Coding skills, Използване на програмен език

Първата и най-лесна стъпка към програмирането е да се научиш да използваш програмен език (да кодиш / coding skills). Това означава да пишеш поредици от команди (компютърни програми), с които да инструктираш компютъра какво да прави. Командите се пишат на програмен език (например C#, Java или PHP), по определен начин, наречен синтаксис.


Условни конструкции, цикли

Командите могат да бъдат от типа "направи това" (действие), "въведи число и го запази в променлива size" (работа с променливи), "провери дали size съдържа четно число" (проверки) или "повтори 10 пъти даден блок команди" (цикли). Кодирането включва още да пишеш функции (или методи), работиш с данни и обекти, да извършваш пресмятания и да ползваш програмни библиотеки с допълнителни функции.


Програмна логика

Изграждане на програмна логика е базово умение, което всички програмисти владеят отлично, и използват за основа, върху която надграждат технологични умения (например програмиране за уеб или създаване на мобилни приложения). Писането на код (кодиране) е фундаментално умение, необходимо на всички, които искат да работят в ИТ сферата, дори да не е като програмисти.

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

2. Изграждане на алгоритмично мислене

Algorithm cycle

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


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


Пример за алгоритмично мислене: ако един програмист трябва да намери най-голямото число от даден списък с числа, той бързо ще измисли алгоритъм: да запомни в променлива “max” първото число, да премине през останалите числа и за всяко от тях да направи проверка дали е по-голямо от “max” и ако е така, да го запомни в нея. Опитният програмист веднага ще се сети и още нещо: че когато нямаме нито едно число, максимум не съществува и ще направи допълнителна проверка за 0 числа.

Намиране най-голямото число от даден списък

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

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

Algorithm cycle

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


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

  • структурното програмиране
  • обектно-ориентираното програмиране (ООП)
  • функционалното програмиране
  • структури от данни и алгоритми
  • принципи на компютърния хардуер и вградените системи
  • принципи на мобилните технологии и приложения и други
  • операционни системи
  • компютърни мрежи
  • принципи на базите данни и работата с данни
  • принципи на Интернет и уеб технологиите

Техните умения започват от работа със сорс контрол системи и GitHub, продължават през принципите на качествения програмен код, концепциите за компонентно тестване (unit testing) и преработка на код (refactoring) и достигат до шаблони за дизайн (design patterns), гъвкави методологии (agile development) и управление на проекти. Това са умения, които се трупат с много практика и се надграждат с годините опит в професията "софтуерен инженер".


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

За да придобиеш фундаменталните познания по софтуерно инженерство, можеш да кандидатстваш за безплатния курс по Основи на програмирането от ТУК

4. Езици за програмиране и софтуерни технологии

Софтуерните инженери програмират на един или няколко езика, използвайки комбинация от технологии за разработка. Езикът за програмиране (например C, C++, C#, Java, PHP, JavaScript, Python) описва формата на командите, които пишем (дефинира правилата за писане на сорс кода) и е само малка част от знанията. По-голямата част от знанията, необходими при изграждането на софтуер са технологиите за разработка. Това са платформи, програмни библиотеки, помощни езици, технологични рамки (frameworks) и инструменти (tools), които позволяват създаването на определен тип приложения или системи.

Например, за създаването на компютърни игри се използват така наречените game engines (като Unity3D и Unreal Engine), които представляват технологични рамки и съвкупност от инструменти за създаване и контролиране на графика и физика.

Езиците и технологиите се променят и развиват непрекъснато, докато уменията да създаваш логически инструкции и да мислиш алгоритмично остават валидни за цял живот.

Нови софтуерни технологии и библиотеки се появяват всеки ден, нови езици и платформи сменят старите на всеки няколко години, но писането на логически инструкции си остава относително постоянно като знание през последните 20-30 години.

Езиците и технологиите се използват винаги по няколко заедно, според софтуера, който се разработва. Съвкупност от взаимосвързани технологии за разработка на софтуер се наричат технологичен стек (technology stack). Например, един класически уеб разработчик може да използва технологичен стек LAMP (Linux + Apache + MySQL + PHP), като пише основно на езика PHP от страна на сървъра, комбиниран с технология за сървърна уеб разработка (като Laravel) и да използва езиците HTML, CSS и JavaScript от страна на клиента, за да изгради потребителския интерфейс на уеб приложението. Той използва още бази данни (например MySQL) и езика SQL, за да съхранява, обработва и извлича данните на потребителите, технология за достъп до базата данни (например Eloquent ORM), среда за програмиране (например Eclipse или PHP Storm), технологията AJAX за зареждане на динамично съдържание в страниците от приложението, библиотеките jQuery и Bootstrap за управление на потребителския интерфейс и много други библиотеки, технологии и инструменти.

Ако отворите една обява за работа за програмист, ще откриете в изискванията няколко езика за програмиране и голям брой взаимосвързани технологии за разработка. Те винаги се търсят заедно. Един език или технология не са достатъчни, за да разработваш софтуер. Затова в СофтУни изучаваме най-търсените езици, платформи и комбинации от технологии (development stacks), които се търсят на пазара на труда, съчетавайки ги с усвояването на фундаментални знания по създаване на софтуер.

За програмата по софтуерно инженерство на СофтУни, която обединява 4 специалности с технологиите C#, Java, PHP и JavaScript, можеш да кандидатстваш от ТУК.

C# и .NET професионалистите разработват предимно уеб приложения, сървърни системи и десктоп приложения. Те използват C# като основен език, Visual Studio като среда за програмиране, бази данни SQL Server, MySQL или Oracle, технология за достъп до данни Entity Framwork, технология за уеб разработка ASP.NET MVC (за писане на уеб приложения и уеб услуги) и много други. За уеб разработката един .NET програмист знае задължително и HTML, CSS и JavaScript, както и уеб библиотеки като Bootstrap.

В Софтуерния университет в специалността "C# / .NET разработка" се изучават задълбочено всички тези .NET технологии, инструменти и технологични рамки (frameworks), като се набляга на много практическа работа, лабораторни упражнения в клас, домашни, изпити и екипни проекти, без да се пропускат фундаментални предмети като обектно-ориентирано програмиране (ООП) и качествен програмен код.

Java и Java EE програмистите разработват предимно уеб приложения, сървърни системи и мобилни Android приложения. Те използват различни среди за разработка като Eclipse, различни бази данни като Oracle и MySQL, ORM технологии за достъп до данни като JPA и Hibernate, платформи за enterprise приложения като Spring Framework и Java EE, технологии за уеб разработка като Servlets/JSP, Spring MVC и JavaServer Faces и JAX-RS за писане на уеб услуги, както и множество технологии за създаване на Android мобилни приложения. За създаването на уеб приложения, един Java програмист също използва задължително и HTML, CSS и JavaScript, както и основни JavaScript библиотеки като jQuery и уеб библиотеки като Bootstrap.

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

PHP програмистите разработват уеб-базирани приложения, сайтове, услуги и системи върху платформата LAMP (Linux, Apache, MySQL, PHP). Добрите PHP разработчици работят с разнообразни среди за разработка като Eclipse и PHP Storm, използвайки бази данни като MySQL и PostgreSQL, технологии за достъп до данни като Eloquent ORM и Doctrine и технологии за сървърна уеб разработка с PHP (MVC frameworks) като Laravel, Symfony и CodeIgniter. PHP разработчиците имат добри Linux познания и много опит с уеб front-end технологиите като HTML, CSS, JavaScript, jQuery, AJAX, Bootstrap и други.

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

JavaScript (JS) програмистите са няколко вида: front-end JavaScript разработчици (разработват уеб базиран потребителски интерфейс), мобилни JavaScript разработчици (разработват мобилни приложения с JavaScript) и full-stack JavaScript разработчици (разработват цялостни уеб и мобилни приложения).

Front-end JavaScript разработчиците изграждат потребителския интерфейс (UI) на уеб приложенията, който се изпълнява в уеб браузъра. Те използват HTML5 технологиите, за да построят външния вид на приложението (използвайки HTML, CSS, графика и мултимедия), JavaScript програмиране и AJAX за интерактивно взаимодействие с потребителя и пишат програмната логика на езика JavaScript като използват много JS библиотеки и технологични рамки за SPA (single-page apps) като jQuery, AngularJS и React. Най-често уеб front-end програмистите разработват с HTML5 и JavaScript видимата за потребителя страна на уеб приложенията (front-end), а сървърната страна (back-end), където се съхраняват и обработват данните и се изпълняват бизнес процесите, се изгражда върху други езици и платформи като Java, .NET и PHP.

Mobile Javascript разработчиците разработват мобилни приложения за Android, iOS и други мобилни платформи с езика JavaScript, използвайки технология за JavaScript mobile приложения като Cordova, Ionic и NativeScript. Мобилните JS разработчици използват HTML, CSS и специализирани компоненти за изграждане на потребителския интерфейс и езика JavaScript заедно с множество JavaScript библиотеки и инструменти за реализация на логиката на приложенията.

Full-Stack JavaScript разработчиците използват езика и на сървърната част, както и на клиента, за изграждане на цялостни (full stack) JS приложения, най-често с т. нар. MEAN стек (MongoDB, Express.js, AngularJS, Node.js). Те построяват потребителския интерфейс на своите приложения (front-end) с HTML5, JavaScript, клиентски JS библиотеки и SPA технологии. За сървърната част (back-end) full-stack JS разработчиците използват Node.js и сървърни JavaScript библиотеки и инструменти като npm, Grunt, gulp и Bower, нерелационни бази данни като MongoDB и JS сървърни технологии за уеб приложения като Express.js.

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