Quantcast
Channel: образование – Svetlin Nakov – Official Web Site and Blog
Viewing all 99 articles
Browse latest View live

Работилница на компютърни игри за деца: 10-20 август 2015 @ СофтУни

$
0
0

Работилница за компютърни игри за деца @ СофтУниСофтуерният университет (СофтУни) започва обучения на деца (3-10 клас). Организираме работилница по компютърни игри за начинаещи. Целта е да развиваме практически умения за програмиране в ученици от 3 до 10 клас, по начин, по който те учат без усилие: чрез игри.

На курса по програмиране с HTML5 в работилницата за компютърни игри на СофтУни, ще разкрием как става магията около създаването на една компютърна игра. Така постепенно младежите сами ще спрат да пилеят времето си на компютъра и вместо това неусетно ще се сдобият с полезно хоби, а впоследствие – страхотна професия. Курсът е част от цялостна едногодишна програма по Game Development, ориентирана към ученици, които от напълно начинаещи ще се превърнат в пълноценни програмисти с голям брой успешно осъществени проекти.

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

Кой може да се запише на курс по програмиране на игри за деца?

Работилницата за компютърни игри с HTML5 е подходяща за напълно начинаещи, с интереси към игрите и компютърните технологии. Могат да се включат ученици от 3-ти до 10-ти клас. Учебната програма е разделена на модули по 2 месеца, като по-бързо напредващите преминават напред, а останалите могат да участват в началните модули по няколко пъти.

Записване, дати, разписание, учебна зала, преподаватели

Записването за курса е отворено до 6 август. Обучението стартира на 10 август 2015 г. и завършва на 21 август 2015 г.с провеждане на практически изпит.

Занятията ще се проведат на 10, 11, 13, 14, 17, 18 и 20-ти август от 10:00 до 18:00 ч. (с един час обедна почивка) в учебните зали в сградата на Софтуерния университет в София.

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

Учебна програма – курс програмиране за деца (разработка на игри)

Увод в курса: въведение, координати, рисуване на правоъгълничета, работа с мишка (10 август, 10:00-13:30 ч.)
Променливи: създаване, присвояване и използване: игра Jetpack Joyride; променливи: създаване, присвояване и използване във fillRect, keyup, update (10 август, 14:30-18:00 ч.)
Условни конструкции: дописване на Jetpack Joyride, if условeн оператор (Дата: 11 август, 10:00-13:30 ч.)
Случайни числа: случайни числа в играта Jetpack Joyride, започване на Guitar Hero с Math.random с два коридора (Дата: 11 август, 14:30-18:00 ч.)
Вложени условни оператори: дописване на Guitar Hero, вложени if опреатори (13 август, 10:00-13:30 ч.)
Движение на обекти: игра Pong, движение на обекти с мишка, подготовка за истински pong с отскачания и смяна на посоката (13 август, 14:30-18:00 ч.)
Pong – школа демонстрация (14 август, 10:00-13:30 ч.)
Игра Fruit Ninja: избор на случайно число в интервал за избор на координат за плодчето, проверка дали сме кликнали в него с 4 вложени if оператора (14 август, 14:30-18:00 ч.)
Игра Jetpack Joyride: проверка за сблъсък на правоъгълници: собствена версия (17 август, 10:00-13:30 ч.)
Оператори: научаване за && || ! чрез история за метеорологията (17 август, 14:30-18:00 ч.)
Игра с тичащо човече: запознаване с args.which при keyup / keydown, oтчитане на време с променлива, брояща извиквания на update (18 август, 10:00-13:30 ч.)
Geometry dash с double/triple jump: телепортиране нагоре, движение нагоре / надолу, плавен скок (18 август, 14:30-18:00 ч.)
Игра Tank! (Asteroid): използване на променливи isKeyDown за ляво и дясно (20 август, 10:00-13:30 ч.)
For цикъл (20 август, 14:30-18:00 ч.)
Изпит (21 август, 10:00-13:30)

Записване за курса по програмиране за деца в СофтУни

За записване посетете страницата на работилницата за компютърни игри в СофтУни.


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

$
0
0

Понеже често ме питат за мнение къде да уча висше образование по програмиране, реших да направя семинар по темата “къде да уча програмиране – избор на университет“. Моята класация на българските ИТ университети е следната (към септември 2015 г.):

Класация на университетите за програмисти и ИТ

Класация на университетите за програмисти и ИТ. Къде да уча програмиране, софтуерно инженерство, уеб дизайн, информациони системи, компютърни науки и информатика?

Класацията е за професията “софтуерен инженер” и е направена от д-р Светлин Наков на базата на следните критерии:
  • Учебен план и качество на учебното съдържание – доколко това което се изучава е адекватно към пазара на труда (дали те подготвят да започнеш работа или учиш суха теория)
  • Качество на преподавателите – доколко преподавателите са добри лектори, които мотивират, запалват и обсняват кадърно и едновременно с това разбират в дълбочина учебния материал
  • Качество на учебния процес – доколко практиката е водеща наистина научаваш професията, а не само на думи, доколко учебният процес гарантира, че ще научиш наистина учебния материал
  • Кариерно развитие – доколко те подготвят и ти помагат да започнеш работа като програмист / софтуерен инженер или ИТ специалист

В класацията не участват частните софтуерни академии (като Telerik Academy, SoftAcad, Hack Bulgaria, IT Talents и други), тъй като не предлагат възможност за бакалавърска диплома.

Презентация – как да избера университет за програмиране и къде да уча за ИТ специалист?

Разгледайте пълната презентация от “Лятната школа по програмиране за деца” в Китен (септември 2015 г.), организирана от прподаватели от СМГ, където Светлин Наков беше поканен за лекция-дискусия на тема “Висше образование за програмисти – къде да уча ИТ след училище?“:

Видео – висше образование за програмисти – избор на университет

Предлагам ви видео от лятната школа по програмиране за ученици (Киетн, септември 2015 г.), където изнесох презентация и направихме дискусия по темата “избор на университет за програмиране” и как да се реализирам като ИТ специалист:

Видеото по-долу е записано по време на SUPERлятната академия за ученици за развитие на ИТ и екипни умения (Девин, септември 2015). В него се дискутират въпросите “къде да уча програмиране?”, “как да избера ИТ университет?”, “къде да уча: в България или в чужбина?”, “да уча или да работя?” и други въпроси свързани с избор на университет за ИТ, компютърни науки, софтуерно инженерство, информатика и информационни технологии и развитие в компютърната сфера за ученици и студенти:

За класацията

Забележка: класацията в настоящата статия е лично мнение на нейния автор и не цели да обиди някого. Използвайте информацията от тази статия на свой риск. Имате право да се информирате и от други източници, както и да поискате мнение от студенти, учащи в споменатите университети. Умните хора проверяват информацията си.

Записахте ли се за безплатния курс по компютърни алгоритми в СофтУни?

$
0
0

курс по алгоритмиВ Софтуерния университет (СофтУни) стартира безплатен курс по компютърни алгоритми от 17 септември 2015 г. Курсът ще се провежда присъствено и онлайн в учебните зали на СофтУни в продължение на 3 месеца, веднъж седмично по 4 часа. Курсът е силно насочен към практиката: по време на всяко учебно занятие ще пишете код на живо по предварително подготвени лабораторни упражнения (hands-on labs).

Курсът по алгоритми развива умения за алгоритмично мислене и решаване на алгоритмични проблеми. Разглеждат се основните класове алгоритми, използвани в практиката: рекурсия и рекурсивни алгоритми, търсене с връщане назад (backtracking), комбинаторни алгоритми, алгоритми за сортиране и търсенединамично оптимиране, графи и алгоритми върху графи, разпределени изчисления с map-reduce.

Учебна програма на алго курса

Topic Date
Course Overview 17-Sep
Recursion and Recursive Algorithms 17-Sep
Combinatorial Algorithms 24-Sep
Sorting and Searching Algorithms 01-Oct
Dynamic Programming 08-Oct
Graphs and Graph Algorithms 15-Oct
Advanced Graph Algorithms 22-Oct
Greedy Algorithms 29-Oct
Parallel Processing and Map-Reduce 05-Nov
Problem Solving Methodology 12-Nov
Exam Preparation 19-Nov
Practical Exam 22-Nov

Преподавателски състав за Algorthms курса

Основен двигател на курса е Светлин Наков, победител в много олимпиади и конкурси по програмиране, с дългогодишен преподавателски опит, автор на 7 книги за програмиране и десетки обучителни курсове. Други преподаватели: Георги Георгиев (шампион от олимпиади с богат преподавателски опит), Драгомир Драганов (състезател по програмиране и алгоритми), Атанас Добрев (състезател по програмиране), Петър Събев (шампион от олимпиади и състезания по програмиране и алгоритми) и Явор Никифоров (треньор по програмиране, ръководител на школи по алгоритми за деца).

Как да се запиша за курса по алгоритми в СофтУни?

  1. Отворете сайта на курса по компютърни алгоритми: softuni.bg/trainings/1194/Algorithms-September-2015.
  2. Натиснете бутона “Запиши се”.
  3. Изберете присъствено или онлайн обучение.
  4. По желание се запишете за изпит (ако желаете сертификат е необходимо да преминете успешно финалния изпит в края на курса).

Срок за записване: до 15 септември 2015 г.

СофтУни палатка конф –Чепеларе – 30 октомври – 1 ноември

$
0
0

СофтУни палатка конф - октомври 2015 - ЧепелареСофтУни организира за пети пореден път конференция за стартиращи в програмирането, този път в Чепеларе. Запазете си уикенда 30 октомври – 1 ноември 2015 г. за да научите новостите от света на програмирането и разработката на софтуер и да се позабавлявате здраво. Участието е почти безплатно (събираме по “20 лв. такса ангажимент”).

Конференцията “СофтУни Палатка Конф – 30 октомври – 1 ноември 2015” е технологично събитие за програмиране и софтуерни технологии, ориентирано към начинаещи. Всеки участник сам избира дали да къмпира в палатковия лагер или да се настани на хотел.

Този път освен техническите лекции с топ специалисти от общността на разработчиците, сме подготвили стабилна спортно-развлекателна програма с много спортни игри, състезания и групови забавления.

Програма @ СофтУни Конф Чепеларе – окт 2015

Пълната програма на конфа можете да намерите на неговия сайт: http://conf.softuni.bg/#!/schedule. Разписанието накратко:

  • 2 нощувки – 30 и 31 октомври 2015 г.
  • 30 октомври – пристигане, настаняване, вечеря
  • 31 октомври – първи конферентен ден, парти
  • 1 ноември – втори конферентен ден, спорт, отпътуване

Събитието се организира от Софтуерен университет (СофтУни) и Office In The Woods @ Chepelare.

СофтУни конференция

Технически лекции @ СофтУни конф – окт 2015

  • Тим билдинг активности – Виктор Балабанов (I Can Be)
  • Сутрешна гимнастика – Йордан Христов (Live То Lift)
  • Bootstrap – адаптивен уеб дизайн за програмисти – Николай Банкин (СофтУни)
  • ASP.NET MVC 5 и 6: бъдещето на уеб технологиите в Microsoft екосистемата – Ради Атанасов (OneBit Software)
  • PHP 7 – бъдещето на PHP уеб разработката – Иван Йонков (СофтУни)
  • Как да не ни боли гърбът, вратът, раменете, кръстът, китките … когато сме IT! – Лазар Радков (Live То Lift)
  • Въведение в Python – Борис Червенков (Sentido)
  • Структури от данни в програмирането – Светлин Наков (СофтУни)
  • Личностни умения за софтуерни инженери – Виктор Балабанов (I Can Be)
  • Какво е Agile, Scrum, Kanban и защо да ни е грижа? – Иван Ванков (Gatakka)
  • Астрономия за програмисти – Йордан Даракчиев (СофтУни)
  • Дизайн чрез емпатия – Стефан Иванов (Infragistics)
  • Halloween Party – Всички да се маскираме!
  • Polyglot Persistence – Стамо Петков (СофтУни)
  • Разглезеният програмист и работните навици – Иван Ванков (Gatakka)
  • Smart аксесоари – модерните електронни джаджи – Мартин Куванджиев (ICT Club)
  • Комуникация с хардуер в среда на C# и .NET – Орлин Димитров (ПЛ Контрол)
  • Wearable Еlectronics – Цветан Узунов (Olimex)
  • Lightning Talks – Участниците стават лектори

Спортна програма @ СофтУни конф – окт 2015

  • Игра на фунийки по отбори
  • Турнир по футбол на малки вратички
  • Кръжок по правене на фунийки
  • Турнир по BattleBall
  • Турнир по пейнтбол
  • Турнир по тенис на маса
  • Уроци по народни танци
  • Уроци по модерен балет и зумба
  • Кръжок по кабагайда
  • Турнир по BattleBall

Регистрация за СофтУни конф – окт 2015

За регистрация посетете сайта на СофтУни палатка конф – окт 2015.

  • Участие на палатка – 20 лв. такса ангажимент. Осигурено място  в палатковия лагер + санитарни условия. Участие в конферентната и в спортната програма.
  • Участие с настаняване на хотел. Осигурени са нощувки и храна + участие в конферентната и в спортната програма. Офертите са обявени на сайта на конфа.

ORM технологии за лесен достъп до бази данни с много малко писане на код

$
0
0

ORM технологии - Наков на RuseConf 2015На RuseConf 2015 направих най-краткото в живота си практическо въведение в ORM технологиите или с две думи “как да осъществяваме достъп до бази данни по супер лесен начин с писане на много малко код?”. За 30 минутки успях да обясня какво е ORM (Object-Relatoinal Persistence Framework) и показах на живо как се работи с Entity Framework за да достъпваме лесно данни от езика C#. В примерите използвах езика C# и сървър за бази данни SQL Server. Показах пример за database first сценария, при който първо правим базата данни и после я прехвърляме през ORM към обектен модел (C# класове). Демонстрирах как човъркаме по данните (CRUD операции) и как правим заявки (queries). След това показах code first модела при който първо пишем C# класове (обектен модел) и след това го прехвърляме (персистираме) в базата данни, а ORM технологията автоматично създава таблиците в базата и обновява модела на данните при промяна на класовете чрез система за миграции (migrations). Гледайте видеото, за да навлезете в света на ORM технологиите (като Entity Framework, Hibernate, ActiveRecord и Eloquent ORM):

Качил съм ви и малко слайдове за ORM и Entity Framework, за които не стигна времето:

Ако сте се запалили по тези технологии, вижте курса по “Приложения с бази данни (ORM технологии)” в СофтУни.

Да си направим уеб игра: „Обстреляй плодовете!“

$
0
0

Наскоро разписах за моите студенти един постъпков самоучител (tutorial) как да си направят уеб базирана игра със C#, Visual Studio и ASP.NET MVC. Споделям, защото се получи доста приятна игричка. Самоучителят е подходящ за начинаещи с базови умения по C#. Не са необходими предварителни познания по уеб технологии, единствено начални познания по писане на код – променливи, проверки, цикли, C#, HTML. Този самоучител отнема половин-един час.

Целта е да се разработи ASP.NET MVC уеб приложение – игра, в която играчът стреля по плодове, подредени в таблица. Успешно уцелените плодове изчезват, а играчът получава точки за всеки уцелен плод. При уцелване на динамит, плодовете се взривяват и играта свършва (като във Fruit Ninja).

Стрелбата се извършва по колони, отгоре надолу или отдолу нагоре, а местоположението на удара (колоната под обстрел) се задава чрез скролер (scroll bar). Заради неточността на скролера, играчът не е съвсем сигурен по коя колона ще стреля. Така при всеки изстрел има шанс да не улучи и това прави играта по-интересна (подобно на прашката в Angry Birds).


Следват стъпките за създаване на играта, започвайки от нулата.

Създайте уеб приложение във Visual Studio

Във Visual Studio създайте ново ASP.NET MVC уеб приложение с език C#. Добавете нов проект от [Solution Explorer] à [Add] à [New Project…] . Дайте смислено име, например “Fruits-Web-Game“:

Изберете тип на уеб приложението “MVC“:

Създайте контролите за играта

Целта е да добавите скролиращи ленти (scroll bars), с които се играчът се прицелва, и бутон за старт на нова игра. Редактирайте файла Views/Home/Index.cshtml. Изтрийте всичко и въведете кода от картинката:

Този код създава уеб форма <form> със скролер (поле) “position” за задаване на число в интервала [0…100] и бутон [Fire Top] за изпращане на данните от формата към сървъра. Действието, което ще обработи данните, се казва “/Home/FireTop“, което означава метод “FireTop” в контролер “Home“, който се намира във файла “HomeController.cs“. Следват още две подобни форми с бутони [Fire Bottom] и [New Game].

Подготвяне на плодовете

Сега трябва да подготвите плодовете за рисуване в изгледа. Добавете кода от картинката в контролера Controllers/HomeController.cs:

Горният код дефинира полета за брой редове, брой колони, за таблицата с плодовете (игралното поле), за натрупаните от играча точки и информация дали играта е активна или е свършила (поле gameOver). Игралното поле е с рамери 9 колони на 3 реда и съдържа за всяко поле текст какво има в него: apple, banana, orange, kiwi, empty или dynamite.

Главното действие Index() подготвя игралното поле за чертане като записва във ViewBag структурата елементите на играта и извиква изгледа, който ги чертае в страницата на играта в уеб браузъра като HTML.

Генерирайте случайни плодове

За да генерирате случайни плодове, трябва да напишете метод GenerateRandomFruits() с кода от картинката по-долу. Този код записва в таблицата (матрицата) fruits имена на различни картинки и така изгражда игралното поле. Във всяка клетка от таблицата се записва една от следните стойности: apple, banana, orange, kiwi, empty или dynamite. След това, за да се нарисува съответното изображение в изгледа, към текста от таблицата ще се долепи “.png” и така ще се получи името на файла с картинката, която да се вмъкне в HTML страницата като част от игралното поле. Попълването на игралното поле (9 колони с по 3 реда) става в изгледа Index.cshtml с два вложени for-цикъла (за ред и за колона).

За да се генерират случайни плодове за всяка клетка се генерира случайно число между 0 и 8 (вж. класа Random() в .NET). Ако числото e 0 или 1, се слага apple, ако е между 2 и 3, се слага banana и т.н. Ако числото е 8, се поставя dynamite. Така плодовете се появяват 2 пъти по-често отколкото динамита. Ето и кода:

Добавяне на картинките за играта

От [Solution Explorer] направете папка “images” в коренната директория на проекта. Използвайте менюто [Add] à [New Folder].

Сега добавете картинките за играта (те са предоставени в архива Fruit-Game-WebApp-Images.zip). Копирайте ги от Windows Explorer и ги поставете в папката “images” в [Solution Explorer] във Visual Studio с copy / paste.

Чертане на плодовете в Index.cshtml

За да начертаете игралното поле с подовете, трябва да завъртите два вложени цикъла (за редовете и за колоните). Всеки ред се състои от 9 на брой картинки, всяка от които съдържа apple, banana или друг плод или празно (empty) или динамит (dynamite). Картинките се чертаят като се отпечата HTML таг за вмъкване на картинка от вида на <img src=”/images/apple.png” />. Девет картинки се подреждат една след друга на всеки от редовете, а след тях се преминава на нов ред с <br />. Това се повтаря три пъти за трите реда. Накрая се отпечатват точките на играча. Ето как изглежда кодът за чертане на игралното поле и точките:

Обърнете внимание на жълтите символи @ – те служат за превключване между езика C# и езика HTML и идват от Razor синтаксиса за рисуване на динамични уеб страници.

Промяна на текстовете в _Layout.cshtml

Нагласете текстовете във файла /Views/Shared/_Layout.cshtml. Заменете “My ASP.NET Application” с по-подходящи текстове, например “Fruits“:

Стартиране и тестване на играта

Стартирайте проекта с [Ctrl+F5] и му се порадвайте. Очаква се да бъде генерирано случайно игрово поле с плодове с размери 9 на 3 и да се визуализира в уеб страницата чрез поредица картинки:

Сега играта е донякъде направена: игралното поле се генерира случайни и се визуализира успешно (ако не сте допуснали грешка някъде). Остава да се реализира същината на играта: стрелянето по плодовете.

Имплементиране на действията: нова игра, стрелба отгоре, стрелба отдолу

Добавете действията [New Game] и [Fire Top] / [Fire Top] в контролера “HomeController.cs“:

Горният код дефинира три действия:

  • Reset() – стартира нова игра, като генерира новo случайно игрално поле с плодове и експлозиви, нулира точките на играча и прави играта валидна (gameOver = false). Това действие е доста просто и може да се тества веднага с [Ctrl+F5], преди да се напишат другите.
  • FireTop(position) – стреля по ред 0 на позиция position (число от 0 до 100). Извиква се стреляне в посока надолу (+1) от ред 0 (най-горния). Самото стреляне е по-сложно като логика и ще бъде разгледано след малко.
  • FireBottom(position) – стреля по ред 2 на позиция position (число от 0 до 100). Извиква се стреляне в посока нагоре (-1) от ред 2 (най-долния).
  • Имплементирайте “стрелянето” – метода Fire(position, startRow, step):

Стрелянето работи по следния начин: първо се изчислява номера на колоната col, към която играчът се е прицелил. Входното число от скролера (между 0 и 100) се намалява до число между 0 и 8 (за всяка от 9-те колони). Номерът на реда row е или 0 (ако изстрелът е отгоре) или броят редове минус едно (ако изстрелът е отдолу). Съответно посоката на стрелба (стъпката) е 1 (надолу) или -1 (нагоре).

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

Оставаме на по-запалените да имплементират по-сложно поведение, например да се дават различни точки при уцелване на различен плод, да се реализира анимация с експлозия (това не е твърде лесно), да се взимат точки при излишно стреляне в празна колона и подобни.

Тествайте играта

Тествайте какво работи до момента като стартирате с [Ctrl+F5]:

  • Нова игра à бутонът за нова игра трябва да генерира ново игрално поле със случайно разположени плодове и експлозиви и да нулира точките на играча.
  • Стреляне отгоре à стрелянето отгоре трябва да премахва най-горният плод в уцелената колона или да предизвиква край на играта при динамит. Всъщност при край на играта все още нищо няма да се случва, защото в изгледа този случай още не се разглежда.
  • Стреляне отдолу à стрелянето отдолу трябва да премахва най-долния плод в уцелената колона или да прекратява играта при уцелване на динамит.

Край на играта – имплементация

Имплементирайте “Край на играта“. За момента при край на играта нищо не се случа. Ако играчът уцели динамит, в контролера се отбелязва, че играта е свършила (gameOver = true), но този факт не се визуализира по никакъв начин. За да заработи свършването на играта, е необходимо да добавим няколко проверки в изгледа:

Кодът по-горе проверява дали е свършила играта и показва съответно контролите за стреляне и игралното поле (при активна игра) или картинка с експлодирали плодове при край на играта.

Тестване отново

След промяната в кода на изгледа стартирайте с [Ctrl+F5] и тествайте играта отново:

Този път при уцелване на динамит, трябва да се появи дясната картинка и да се позволява единствено действието “нова игра” (бутонът [New Game]).

Изтеглете сорс кода на играта

Ако сте нетърпеливи, може да изтеглите наготово цялата игра и да я стартирате с [Ctrl+F5]. Изтеглете сорс кода: Fruits-Web-Game.zip.

Професия “Програмист”…и останалите ИТ професии –Наков @ УНСС

$
0
0

Професия "програмист" ... и останалите ИТ професии - Наков @ УНСС
Днес направих надъхващо представяне на професиите в ИТ сектора пред 150 студента от УНСС, на събитие организирано от Бизнес клуба на УНСС и ERP академията. Пускам видеото, понеже имаше запитвания. Заслушайте се и се запалете по ИТ професиите. Осигурете си едно добро бъдеще!

Видео: Наков за ИТ професиите, програмирането и как да станем ИТ специалисти

Ако още се чудите от къде да започнете своята ИТ подготовка за бъдеща кариера, запишете се в СофтУни! Обучавайте се безплатно, пробвайте програмирането, опитайте правенето на сайтове, поиграйте си с информационните технологии, научете за софтуерното тестване и QA, зарибете се по дигиталните изкуства, заиграйте се с дигиталния маркетинг и други съвременни професии. Стенете ИТ и започнете работа в един от най-перспективните сектори на индустрията.

СофтУни 3.0 –един нов Софтуерен университет

$
0
0

СофтУни 3.0 вече е факт. Разгледай новата образователна концепция на Софтуерния университет: softuni.bg/curriculum. Това е най-голямата (и дори преобразяваща) промяна в СофтУни от създаването му през 2013 г.

СофтУни 3.0 накратко

  • Избираш измежду 4 специалности (специализации на професията софтуерен инженер): JavaScript, PHP, Java и .NET разработка
  • Започваш работа след 1-2 години (според напредъка и резултатите)
    • СофтУни ти намира работа, ако научиш поне 70% от изучавания материал
    • Ако учиш бързо, може да започнеш работа за по-малко от година
  • Завършваш СофтУни и се дипломираш за 2-3 години (според специалността и според колко бързо учиш)
  • Домашните се заменят с работа в клас, за да се гарантира научаване на материала
  • Удвояваме учебните занятия: 4-5 дни в седмицата по 4 часа присъствено или онлайн

Наков представя СофтУни 3.0

Как работи новият Софтуерен университет 3.0?

Новият учебен план в СофтУни работи по следния начин:

  1. Всичко започва с безплатен курсОснови на програмирането
    • Само практическо програмиране, почти без теория, с много кодене в клас
    • Курсът е за абсолютно начинаещи (става дори за деца 4-5 клас)
    • Учиш по 4 часа седмично в продължение на 2 месеца, почти без домашни
  2. Приемен изпит
    • В края на безплатния курс по основи на програмирането полагаш приемен изпит за СофтУни (6 практически задачи за 4 часа)
    • Влизаш в СофтУни при резултат поне 50% решени задачи на приемния изпит
    • Ако не се справиш с приемния изпит, можеш да се явяваш отново или да учиш за ИТ специалист (информационни технологии, мрежи, мултимедия и офис приложения, изграждане на уеб сайтове, хардуер и други технологични предмети)
  3. Приетите за студенти продължават с опознавателен модул “Software Technologies”
    • За 4 месеца се запознаваш практически с HTML5, JavaScript, PHP, Java Web и .NET Web разработката, за да можеш да си избереш специалност
    • Интензивността е 4 пъти седмично по 4 часа, почти без домашни
    • Ако си ултра, мега добър, може да получиш предложение за работа още след този модул
  4. Избираш си специалност (професия) измежду следните:
    • .NET разработка
    • Java разработка
    • JavaScript разработка
    • PHP разработка
  5. Обучаваш се в избраната специалност (година-две)
    • Продължителност: 2-6 модула по 4 месеца (задължителни, препоръчителни и изборни модули)
    • Интензивност: 5 пъти седмично по 4 часа (всеки работен ден, почти без домашни)
    • Реално няма промяна в седмичното натоварване, само прехвърляме работата по домашните в клас, за да осигурим по-ефективна работа и да гарантираме достъп до помощ на живо от асистенти и преподаватели
    • Двойно повече учебни занятия с по-малко материал на едно занятие
    • Всички учебни предмети се изучават на избрания език за програмиране и платформа за разработка
  6. Започваш работа след 1-2 години (ако учиш сериозно)
    • СофтУни ти предлага работа при усвояване на 70% от изучавания материал
    • Ако напредваш супер бързо, започваш работа още след първите няколко месеца
    • Ако напредваш нормално -> започваш работа след 1-2 години
    • Ако си много слаб или несериозен, СофтУни няма да ти предложи работа

SoftUni 3.0 - учебен план

Новата образователна концепция СофтУни 3.0” влиза в сила от май 2016 г. с първия прием в модул “Software Technologies“.

Упражнения в клас вместо домашни

Махаме домашните и удвояваме учебните занятия (практика на живо в клас). Защо ли? Ами повечето студенти не пишат домашни и се провалят заради несериозно отношение към домашните. Затова пренасяме домашните в клас и осигуряваме помощ на живо.

  • Прехвърляме работата по домашните като практика в клас – решаване на задачи и здраво писане на код под наставленията на преподаватели, асистенти и ментори
  • Онлайн студентите гледат видео с обяснения как да си направят домашните
  • Планираме 75% практика (студентите пишат код в клас) и 25% преподаване, обяснения на учебния материал и демонстрации (трейнърите пишат код на живо)

работа на живо в клас

Нова кредитна система – кредитите измерват уменията

  • Въвеждаме нова кредитна система, която отразява напредъка в професията
  • Всеки курс дава учебни кредити според трудността, продължителността и според реално наученото в него (изкараната оценка накрая)
  • Всеки курс дава определен брой максимални кредити (между 4 и 12). По-трудните и по-обемните курсове дават повече кредити.
  • Кредитите се разпределят пропорционално на оценката: при нисък резултат (курс взет едвам-едвам с тройка) се получават 1/3 от кредитите за курса; при висок резултат (курс взет с петица или повече) се получават всички кредити.
  • Кредитите измерват колко си близко до усвояване на професията “софтуерен инженер”. Повече кредити означава, че си по-добър програмист. Фактически СофтУни кредитите стават мерна единица за владеене на програмирането.
  • При натрупване на достатъчно кредити ⇒ предлагаме работа
  • Диплома се взима при покриване на задължителните модули и натрупване на достатъчно кредити (според специалността)
  • Предлагаме ти работа, ако научиш поне 70% от изучавания материал (70-100 кредита от 130-170 общо според специалността)

СофтУни кредити

Такси по-ниски от СУ и стипендии за най-силните

СофтУни е лидер не само в качеството на практическото образование и реалната подготовка за работа в софтуерната индустрия, но и предлага безплатно обучение за най-добрите и по-ниски такси за обучение от Софийски университет (СУ).

  • СофтУни предлага безплатно обучение за топ 10% от студентите. Най-добрите 10% от студентите в присъствена форма на обучение стават стипендианти и се освобождават от такси за обучение.
  • Таксите в СофтУни са 360 лв. на семестър за редовно (присъствено) обучение и 180 лв. на семестър за онлайн обучение (по 90 лв. на месец присъствено и по 45 лв. на месец онлайн)
  • За сравнение семестрите по специалност “софтуерно инженерство” във ФМИ на Софийски университет по държавна поръчка към май 2016 г. са 375 лв. на семестър, а от септември 2016 г. се вдигат на 400 лв. на семестър.

СофтУни 3.0 - такси за обучение

Историята на СофтУни

СофтУни - история

  • СофтУни беше създаден на 5.11.2013 г. когато Наков измести фокуса и енергията си от софтуерната академия на Телерик към своя много по-мащабен образователен проектСофтуерният университет. Идеята е да се провеждат масирани (но качествени) обучения на софтуерни инженери (десетки хиляди на година, в 20 града, не само по програмиране, но и в други ИТ специалности), за да се направи България “силициевата долина на Европа“.
  • На 24.01.2014 е обявена концепцията на СофтУни 1.0 – първият учебен план. Предлагат се няколко професии, свързани със C# / .NET Web и JavaScript front-end разработка. Семестрите са по 4 месеца на цена 480 лв. (390 лв. за първия прием) и включват 3-4 курса, по 2 пъти седмично по 4 часа. Основната програма е 1 година (3 семестъра по 4 месеца) и е планирана още 1 година специализация чрез изборни курсове.
  • На 5.03.2014 г. се провежда първото учебно занятие в СофтУни в курса “Основи на програмирането” (ниво #0), в учебна зала “Ballistic” в кв. Хаджи Димитър (предоставена от колегите от Ballistic Cell), която събираше 215 студента.
  • На 7.05.2014 г. започва обучението на първия випуск на СофтУни с тогавашното ниво #1 и курса “Java Basics” с 550 приети за обучение студенти.
  • От 5.01.2015 г. СофтУни се премества в нов учебен център, на ул. Тинтява, до Интерпред. Започва с 2 големи учебни зали, които лека полека се увеличават.
  • Докато тече СофтУни 1.0 постепенно натрупва обратна връзка от студентите, че за толкова малко време планираният учебен материал не може да бъде усвоен и малцина успяват да следват темпото (само около 150 студента завършват СофтУни 1.0 от първия випуск). Почти липсват упражнения в клас, разчита се много на домашни и самодисциплина. Не може да се ореже учебният материал, защото фирмите се оплакват, че обхватът на обученията е недостатъчен, а студентите се оплакват, че повсеместно не им стига времето. Трябва или да се увеличи времето за обучение, или да се увеличи интензивността. Налага се неизбежна промяна.
  • На 9.04.2015 г. идва СофтУни 2.0, за да предложи решение на проблемите с недостига на време за усвояване на учебния материал. Въвеждат се 3 нива (Fundamentals, Front-End, Back-End) по 6 месеца по 3 пъти седмично по 4 часа с по 4 курса в ниво. Разширяват се обхвата на изучавания учебен материал. Добавят се упражнения на живо (лабове). Подобрява се качеството на учебния процес, с повече кодене в клас, workshops, подготовки за изпитите и други занимания. Въвеждат се team buildings за студентите.
  • Лека полека, обаче, се оказва, че СофтУни 2.0 също има проблеми: отново на студентите не им стига времето да научат планирания учебен материал. Не достига времето за упражнения в клас. Стълбицата на покачване на трудността е много рязка. Приемът е с 20% решени задачи на входа и това води до закъсали студенти в ниво #1, #2 и #3. Необходимо е ново реструктуриране на учебния план: по-дълго време на обучение (3 години вместо 1.5 години), по-интензивно обучение (5 пъти в седмицата вместо 3 пъти), наблягана на упражнения и лабове (поне 50% упражнения на живо в клас), прием с по-висок успех (поне 50% решени задачи на входа), разкриване на нови професии, които да се избират в началото, …
  • И така се стига до разработката на СофтУни 3.0 през януари-февруари 2016. Правят се проучвания сред 840 студента и се събира обратна връзка. Анализират се 400 обяви за работа, анкетират се 180 софтуерни фирми. цялата събрана обратна връзка от студенти (успешни и неуспешни) и фирми (партньори и други) се обобщава, за да се изгради концепцията на СофтУни 3.0. Това е огромна промяна, базирана най-вече на на обратна връзка.
  • На 16.05.2016 г. стартира първият опознавателен модул “Software Technologies” (всичкология за програмисти) от учебния план “СофтУни 3.0”, базиран на нови учебни материали и модела “учене чрез примери” с по-малко теория и много, много писане на код на живо в клас (или по видеата вкъщи за онлайн студентите).

Как да се запиша?

Всеки може да се запише да пробва безплатно програмирането в СофтУни (ученици, студенти, работещи, безработни). Уводните курсове по програмиране (ниво #0) започват всеки месец и се провеждат безплатно в присъствена и онлайн форма по веднъж седмично. Кандидатствай от сайта на СофтУни: https://softuni.bg/apply.

Кандидатствай в СофтУни сега


СофтУни тех фест –хакатон за технологии в образованието – 4-5 юни @ СофтУни

$
0
0

Елате на СофтУни тех фестхакатон за технологии в образованието на 4-5 юни 2016 г. в София.

Събитието “SoftUni Tech Fest” ще събере стотици софтуерни разработчици и ИТ специалисти, които ще обединят усилия за решаването на образователен проблем чрез технологии. Събитието ще се проведе на 4-5 юни 2016 г. в София в учебната база на Софтуерен университет (СофтУни). За победителите ви очакват награди на стойност над 10 000 лв.

СофтУни тех фест - 4-5 юни 2016

Категории на SoftUni Tech Fest

Можете да участвате индивидуално или в отбор в следните категории:

  • Софтуерна разработка – уеб, мобилни и софтуерни приложения с образователна цел
  • Уеб сайтове с образователна цел
  • Мултимедийни разработки (филм, анимация, визуализация, …)

Кой може да участва в хакатона на СофтУни?

Могат да участват всички с интерес към информационните технологии: ученици, студенти, работещи и безработни, без ограничение по възраст.

Регистрация за участие

Моля регистрирайте отбора си до 25 май 2016 г. от сайта на хакатона: http://techfest.softuni.bg.

Най-добрите 90 проекта ще бъдат одобрени за участие на финалите.

SoftUni Camp – 14-21 август 2016 –летен лагер за програмисти и фенове на технологиите –за ученици, студенти и работещи

$
0
0

Елате на СофтУни кемпа от 14 до 21 август 2016 в Хисаря!

  • Елате да се разцепим от програмиране и забавления.
  • За абсолютно начинаещи и за напреднали
  • Всеки ден практическо програмиране, спорт, плаж, игри и забавления

Защо да дойда на летния СофтУни лагер по програмиране?

  • За напредналите: всеки ден програмиране до дупка – всеки ден практически упражнения: уеб разработка, бази данни, Linux, гейм разработка, Unity, QA автоматизация, мобилни приложения, .NET, хардуер, запояване, Arduino
  • За начинаещите: обучение по програмиране от абсолютната нула. За 8 дни ще се научите да пишете код и ще положите основите на своя път към програмирането. Започваме от нулата. Изключително подходящо за ученици (от 4 до 12 клас).
  • Богата спортна програма: всеки ден спортни занимания, турнири по футбол, волейбол, народна топка, компютърни игри, електронни спортове, двигателна култура и движение
  • Вечерни забавления: забави, песни, танци – кой каквото харесва
  • Плаж всеки ден – нали август, а Хисаря е известен летен курорт с минерални басейни
  • Общност – намерете приятели с интереси към програмирането и технологиите

softuni-camp-august-2016-hisarya

Цената е символична!

Елате със собствено настаняване и храна на символичната цена от 40 лв. за 8 дни или на палатка за 185 лв. за 8 дни или изберете all inclusive настаняване + храна + учебна програма + спортове и забавления за 200-300 лв. (според пакета) или елате само за 2-3 дни да се разцепим!

Учебна програма

Какво ще учим докато се забавляваме?

За начинаещите – базови умения по програмиране

Ако посетите обученията, гарантирано ще усвоите основите на писането на код. Обучението е 100% на български език. Подходящо е за ученици от 4 клас нагоре. Ето програмата за абсолютно начинаещите (8 дни по 5-6 часа на ден):

  • Първи стъпки в програмирането
  • Прости пресмятания с числа (работа с данни)
  • Логически проверки (if конструкции)
  • По-сложни логически проверки (if-else, or, and, not)
  • Повторения (цикли) – for, while
  • Чертане на фигурки с цикли
  • По-сложни цикли (вложени цикли)
  • Подготовка за практически изпит по програмиране

Носете си лаптоп!

За напредналите – разнообразите от съвременни технологии

Напредналите ще пишат код всеки ден с различна технология. Носете си лаптоп. Ето и програмата по дни:

Разработка за платформа .NET Core
Лектор: Ивайло Кенов (СофтУни)
Дата: 14.08 (неделя)

Angular 2 – разработка на уеб, мобилни и десктоп приложения
Лектор: Ивайло Кенов (СофтУни)
Дата: 15.08 (понеделник)

Linux for Developers
Лектор: Анатолий Димитров (HP)
Дата: 16.08 (вторник)

Запояване и програмиране на Ардуино платки
Лектор: Цветан Узунов (Olimex)
Дата: 17.08 (сряда)

Мобилни приложения с AppInventor
Лектор: Ангел Георгиев (СофтУни)
Дата: 18.08 (четвъртък)

Качество на софтуера и автоматизирано тестване (QA)
Лектор: Иван Йонков (СофтУни)
Дата: 19.08 (петък)

Разработка на игри с Unity 3D
Лектор: Божидар Гевечанов (СофтУни)
Дата: 20.08 (събота)

Oracle Database – първи стъпки
Лектор: Светлин Наков (СофтУни)
Дата: 21.08 (неделя)

Запишете за СофтУни летния лагер сега!

conf.softuni.bg

Creating a Blog System with Spring MVC, Thymeleaf, JPA and MySQL

$
0
0

Recently, I created a detailed Spring MVC tutorial for my students at the Software University (SoftUni), as part of their training course “Software Technologies”, so I want to share it with anyone interested to learn how to integrate Java, Spring Framework, Spring MVC, Spring Boot, Spring services, repositories, controllers, models, Thymeleaf views, Spring form validation, JPA, entity classes, Spring Data, Spring Data JPA, Hibernate, JPQL, MySQL, HTML, CSS, JavaScript and jQuery into a single working project – a server-side Web application for simple blogging.

In this tutorial we shall create a fully-functional Blog system from scratch using Spring MVC and MySQL database. The blog holds posts (visible for everyone). Registered users (after login) can create / edit / delete posts. The blog will use Java, Spring Framework, Spring MVC, Thymeleaf template engine, Spring Data JPA, JPA, Hibernate and MySQL.

First, download the project resources (images, JS code, database sample data, etc.): Spring-MVC-Blog-resources.zip.

What We Are Building?

We are building a Blog system where users can view posts and create / edit / delete
posts after registration / login.

Blog System – Project Specification

Design and implement a “Blog” Web application in Spring MVC + MySQL. Implement the following functionality:

  • Home
    • Show the last 3 posts at the home page, ordered by date (from the most recent).
    • Show also the last 5 post titles at the home page (as a sidebar) with a link to the post.
    • Show [Login] and [Register] buttons (when no user is logged in).
  • Login
    • Login in the blog with existing account (username + password).
    • Show a success message after login or error message in case of problem.
  • Register
    • Register a new user in the MySQL database (by username + password + full name).
    • Show a success message after registration or error message in case of problem.
  • Logout
    • Logout the current user.
    • This [Logout] button is available after successful login only.
  • View / Create / Edit / Delete Posts (CRUD Operations)
    • Logged in users should be able to view all posts, create new post (by title + content) / edit / delete their own posts.
    • Posts are displayed in a table (one row for each post). At each row a link [Edit] and [Delete] should be displayed.
    • Create post shows a form to enter the post data (title + content). After the form submission, the post is created in the database. Implement field validation (non-empty fields are required).
    • Edit post fills an existing post data in a form and allows it to be edited. After successful form submission, the post is edited. Implement field validation.
    • Delete post shows the post to be deleted and asks for confirmation.
  • View All Users
    • Logged in users should be able to view all users (username + full name) in a table.

Blog System – Screenshots

       

Part I: Setup a Spring Boot Project

In this section we shall create an empty Spring MVC application based on Spring Boot using Maven.

We shall use IntelliJ IDEA as development environment, but Eclipse or any other Java IDE could work as well.

Create a New Maven Project

Create a new Maven project for the Blog system:

The IDE will create for you а Maven configuration file pom.xml in the project root folder. In IntelliJ IDEA enable the “auto-import” for the Maven dependencies.

Add the Spring Boot Dependencies in Maven

Inside the <project> element in the pom.xml add the spring-boot-starter-parent dependency:

pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
</parent>

The above declaration inherits all Spring Boot libraries and project settings from spring-boot-starter-parent. We will assign the Spring Framework version only once at this place. We shall use version 1.4.0 – the latest stable release as of August 2016. All other Maven dependencies will be without an explicitly specified version, so Maven will detect the required version automatically.

Add also a dependency to spring-boot-starter-thymeleaf:

pom.xml

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
</dependencies>

The above code will configure the Thymeleaf templating engine that will be used for the views

Set the Java version to 1.8. Otherwise the project will use old Java version and some functionality will not compile:

pom.xml

<properties>
  <java.version>1.8</java.version>
</properties>

This is how your Maven configuration file pom.xml might look like. Note that if everything is OK, the project libraries will include all Spring Core, Spring Boot, Spring MVC and Thymeleaf libraries (jar files, shown on the left):

Create the Project Structure: Directories

Create a package “blog” in the source code root of your Java project: src/main/java:

Create the following packages (directories) in src/main/java/blog:

  • models – will hold the project MVC models (entity classes) like User and Post.
  • controllers – will hold the project MVC controllers that will serve the blog functionality.
  • services – will hold the business logic of the project, invoked by the controllers.

Create the following folders in src/main/resources:

  • templates – will hold the application views (the Thymeleaf HTML templates and template fragments).
  • public – will hold static HTML content like CSS, images and JavaScript code.
  • public/img – will hold the site images (e.g. site logo).
  • public/css – will hold the site CSS styles.
  • public/js – will hold the site JavaScript files (e.g. jQuery, Bootstrap and custom JS code).

Your project directory structure should look like this:

Create the Project Structure: Files

Create a few important project
files in src/main/resources:

  • public/css/styles.css – the main CSS styles for the application. You shall put some style in this file later, so leave it empty now.
  • public/img/site-logo.png – the site logo. Copy it from the resources coming with this tutorial.
  • public/img/favico.ico – the browser icon for the site. Copy it from the resources for this tutorial.
  • public/js/blog-scripts.js – the JavaScript code that will be used in our blog. You shall put some JS code in this file later, so leave it empty now.
  • public/js/jquery-3.1.0.min.js – the jQuery library that will simplify your JS code. Copy it from the resources for this tutorial or from Internet: https://jquery.com/download/.
  • application.properties – the Spring application settings (like logging configuration and database connection settings). Initially, leave this file empty.

After completing all the above steps, your project resources file structure should look like this:

Create the Spring Boot Application Startup Class

Create the Spring Boot application startup class in the package “blog” in your src/main/java directory:

src/main/java/blog/BlogMvcApplication.java

package blog;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BlogMvcApplication {
    public static void main(String[] args) {
        SpringApplication.run(BlogMvcApplication.class, args);
    }
}

This class configures and starts your Spring Boot application, which is still empty. The @SpringBootApplication annotation applies the default configuration settings for our Spring Boot application (finds and loads all entities, controllers, UI templates and other application assets). Calling SpringApplication.run(…) will start an embedded Tomcat Web application server at http://localhost:8080 to serve the HTTP requests to your Spring MVC Web application.

Run the Empty Web Application

Now you are ready to run your Web application for the first time. Run the BlogMvcApplication class, just like any other Java program. It should show a long sequence of logs (informational messages) at its startup:

Open project URL at http://localhost:8080 in your browser to check whether Tomcat and Spring MVC are running. You should see a Web page like the shown below. Note the green site icon of the top left angle of the browser. This is the Spring Framework’s icon. If you see it, your browser shows a Spring MVC application.

It is quite normal to see this error message. It says that the Embedded Tomcat server with Spring MVC is running, but you have no registered controller action to handle HTTP GET requests for your home page URL “/“.

If your browser shows you other Web content (e.g. different site icon), or fails to open localhost:8080, check for errors in your Java application output and also who is listening at port 8080 on your localhost loopback interface.

Create the Home Controller + View

To ensure your Spring MVC application and the Thymeleaf templating engine are properly configured, create your first controller + Thymeleaf view and invoke it from your browser.

Create a Java class HomeController.java in your src/main/java/blog/controllers directory:

src/main/java/blog/controllers/HomeController.java

package blog.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {
@RequestMapping("/")
    public String index() {
        return "index";
    }
}

The above code defines a Spring Web MVC controller and defines an action that handles HTTP GET requests for the root URL of the project “/“. When someone opens http://localhost:8080/ form a Web browser, the above action will be called. It returns the “index” view and this means to render a Thymeleaf template “index.html” located in the file src/main/resources/templates/index.html.

Create a Thymeleaf viewindex.html” in your src/main/resources/templates directory:

src/main/resources/templates/index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8" />
    <title>Blog</title>
</head>

<body>
<h1>Welcome to Spring MVC</h1>
    Now is: <b th:text="${execInfo.now.time}"></b>
</body>

</html>

The above code is a sample HTML page that uses the Thymeleaf view engine to display the current date and time. The namespace xmlns:th=“http://www.thymeleaf.org”
indicates that this file is not pure HTML, but is a Thymeleaf template that should be processed at the server side to produce a HTML page.

Restart the Web Server to See the Changes

Compile and make your project (press [Ctrl+F9] in IDEA) and restart the Spring Boot Web server to be able to see the changes in your code (the new controller + view). Stop and start again (or re-run) your Spring MVC application (the BlogMvcApplication class). In IntelliJ IDEA you have a special button to do this in the [Run] panel:

See the Output from Your First Controller + View

Now refresh your Web browser or open again http://localhost:8080. You should see the HTML output from your first MVC controller action + Thymeleaf view. It should look like this:

Configure Auto-Reload after Change in the Source Code

It is quite ugly to rebuild your project and restart your Web server manually each time you change the source code in order to see the changes. Let’s automate this process.

First, disable the Thymeleaf template caching in your application.properties settings file:

src/main/resources/application.properties

spring.thymeleaf.cache = false

Second, install Spring Boot Development Tools in your Maven configuration. Just add this dependency:

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

Don’t remove the other dependencies when you add this new dependency. Your <dependencies> section in pom.xml should look like this:

Now rebuild the project and restart the server. You will not need to do this more after changing the project. The Spring Boot server will restart automatically after a project change. Make sure to press [Ctrl+F9] in IntelliJ IDEA when you want to see the changes in the source code or view templates.

Create the Site Layout (Header, Menu, Footer, CSS)

Now, let’s build the site layout (also known as master page template). The site layout includes the parts of the site, which should be shared between all site pages:

  • Head section – holds the site <head> section with the CSS and scripts references.
  • Site header section – holds the site header and top menu.
  • Site footer section – holds the site footer area.

Create a new HTML file “layout.html” in src/main/resources/templates. It will hold the site layout:

src/main/resources/templates/layout.html

<!DOCTYPE html>
<html xmlns:th=“http://www.thymeleaf.org”>
<head th:fragment=“site-head”>
  <meta charset=“UTF-8” />
  <link rel=“stylesheet” href=“../public/css/styles.css” th:href=“@{/css/styles.css}” />
  <link rel=“icon” href=“../public/img/favicon.ico” th:href=“@{/img/favicon.ico}” />
  <script src=“../public/js/jquery-3.1.0.min.js” th:src=“@{/js/jquery-3.1.0.min.js}”></script>
  <script src=“../public/js/blog-scripts.js” th:src=“@{/js/blog-scripts.js}”></script>
  <meta th:include=“this :: head” th:remove=“tag”/>
</head>
<body><header th:fragment=“site-header”>
   <a href=“index.html” th:href=“@{/}”><img src="../public/img/site-logo.png" th:src="@{/img/site-logo.png}" /></a>
  <a href="index.html" th:href="@{/}">Home</a>
  <a href="users/login.html" th:href="@{/users/login}">Login</a>
  <a href="users/register.html" th:href="@{/users/register}">Register</a>
  <a href="posts/index.html" th:href="@{/posts}">Posts</a>
  <a href="posts/create.html" th:href="@{/posts/create}">Create Post</a>
  <a href="users/index.html" th:href="@{/users}">Users</a>
  <div id="logged-in-info"> <span>Hello, <b>(user)</b></span>
    <form method="post" th:action="@{/users/logout}">
      <input type="submit" value="Logout"/>
    </form>
  </div>
</header>
<h1>Welcome</h1>
<p>Welcome to the Spring MVC Blog.</p>
<footer th:fragment="site-footer">
  &copy; Spring MVC Blog System, 2016
</footer>
</body></html>

The above file “layout.html” holds several Thymeleaf fragments that will be included in all site pages:

  • The “site-head” fragment holds the <head> section. It includes the site CSS, JavaScript code, etc. It appends to the page <head> section the <head> section of the invoking page, e.g. index.html.
  • The “site-header” fragment holds the site header: site logo + top navigation links to the other site pages. It also holds the “Logout” form. The header now holds links to all pages, but once the login / logout functionality is implemented, it will show / hide some of the links for anonymous site visitors and for the authenticated users.
  • The “site-footer” fragment is very simple. It holds some static text for the site footer.

Note that the links in the above code look like duplicated, because there are two attributes that specify the resource address: href=”…” and th:href=”…”. This is because Thymeleaf uses natural templates. “Natural templates” means that the template is a document as valid as the final result and the view engine syntax doesn’t break the document’s structure. The href value specifies the relative resource location in the system (provided by the Web site designer, e.g. “../public/css/styles.css“). The th:href value specifies the resource runtime location at the Web server (which is relative to the site root, e.g. “/css/styles.css“).

Once you have created the site layout template, it is time to modify the home view “index.html” to use this site layout by including its site-head, site-header and site-footer fragments using the Thymeleaf th:replace attributes as it is shown below:

src/main/resources/templates/index.html

<!DOCTYPE html>
<html xmlns:th=“http://www.thymeleaf.org”>

<head th:replace=“layout :: site-head”>
    <title>Welcome to Spring MVC Blog</title>
</head>

<body>

<header th:replace=“layout :: site-header” />

<h1>Welcome to Spring MVC</h1>
Now is: <b th:text=“${execInfo.now.time}”>date and time</b>

<footer th:replace=“layout :: site-footer” />

</body>

</html>

The concept of “natural templates” is simple: if you open directly in a Web browser the above HTML files (by double-clicking on layout.html or index.html), without rendering them through the Thymeleaf view engine, their HTML content will be displayed correctly and will look meaningful.

Now make the project ([Ctrl+F9] in IntelliJ IDEA) and refresh the browser to see the changes:

The site header and footer should be shown correctly but look a little bit ugly, because there is no CSS styles. The site browser icon (at the top left corner) is also change (by the favico.ico file in the site header).

Add CSS Styles for the Site Layout

Let’s style the header, footer and the main page content. Add these style definitions in the site CSS file:

src/main/resources/public/css/styles.css

body>header {
  background: #eee;
  padding: 5px;
}

body>header>a>img, body>header a {
  display: inline-block;
  vertical-align: middle;
  padding: 0px 5px;
  font-size: 1.2em;
}

body>footer {
  background: #eee;
  padding: 5px;
  margin: 10px 0;
  text-align: center;
}

#logged-in-info {
  float: right;
  margin-top: 18px;
}

#logged-in-info form {
  display: inline-block;
  margin-right: 10px;
}

Now save the changes, make the project and refresh the Web browser to see how the site looks after the styling:

Congratulations, you have successfully created the site layout (the shared head, header, footer and CSS).

Part II: Build the Application UI (Spring MVC)

In this section we shall build the application user interface (UI) without connecting it to the database. We shall build controllers and views to implement the user interface of the project. Instead of connecting to the database, we shall use stub service implementations that provide sample data for visualization in the view templates.

Create Entity Classes: “User” and “Post”

In order to create the controllers and views of the Blog system, we will need the entity classes (data models) to hold users and posts. Let’s create these classes.

First, create a class User in the package blog.models to hold information about blog users. Users have id, username, passwordHash (encrypted password), fullName and a set of posts:

src/main/java/blog/models/User.java

package blog.models;

import java.util.HashSet;
import java.util.Set;

public class User {
    private Long id;
    private String username;
    private String passwordHash;
    private String fullName;
    private Set<Post> posts = new HashSet<>();
}

Now generate getters and setters (for all fields), constructors (empty and by id + username + fullName) and toString() method (don’t print the set of posts in the toString() to avoid endless recursion) in the User class:

The generated code might look as follows:

src/main/java/blog/models/User.java

public class User {
    
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }
    public String getPasswordHash() { return passwordHash; }
    public void setPasswordHash(String passHash) { this.passwordHash = passHash; }
    public String getFullName() { return fullName; }
    public void setFullName(String fullName) { this.fullName = fullName; }
    public Set<Post> getPosts() { return posts; }
    public void setPosts(Set<Post> posts) { this.posts = posts; }
    public User() { }
    public User(Long id, String username, String fullName) { 
         this.id = id; this.username = username; this.fullName = fullName;
    }

    @Override
    public String toString() {
        return "User{" + "id=" + id + ", username='" + username + '\'' +
            ", passwordHash='" + passwordHash + '\'' +
            ", fullName='" + fullName + '\'' + '}';
    }
}

Next, create a class Post in the package blog.models to hold information about blog posts. Posts have id, title, body, date of publishing (defaults to the current date and time) and an author (which is User):

src/main/java/blog/models/Post.java

package blog.models;

import java.util.Date;

public class Post {

private Long id;
private String title;
private String body;
private User author;
private Date date = new Date();

}

Generate getters and setters (for all fields), empty constructor, constructors by id + title + body + author and toString() method for the Post class. Your code might look like the shown below (it is intentionally shown as image to avoid copy / paste):

src/main/java/blog/models/Post.java

Create Service Interface “PostService”

In Spring MVC uses a layered architecture: controllers à services à repositories à models à database.

  • Controllers – hold the presentation (UI) logic – process user request (GET / POST / other), prepare data for the view and render the view (or redirect to another URL). Example: prepare and show the home page.
  • Services – hold the business logic. Often just call some repository method. Example: create new post / show a post for deleting / delete post. Services may have several implementations: DB based or stub based.
  • Repositories – implement the database CRUD operations (create / read / edit / delete) in the database for certain entity class (model). Examples: find post by id / delete post by id. Often provided by the framework (not written by hand).
  • Models (entity classes) – holds the data about the application data. Examples: user, post, tag, …

Now, create the service interface that will provide the business logic for working with posts in the blog system:

src/main/java/blog/services/PostService.java

package blog.services;

import blog.models.Post;

import java.util.List;

public interface PostService {
    List<Post> findAll();
    List<Post> findLatest5();
    Post findById(Long id);
    Post create(Post post);
    Post edit(Post post);
    void deleteById(Long id);
}

The PostService interface provides all the functionality about posts that is needed for the blog system.

Create Stub Service Implementation “PostServiceStubImpl”

To reduce the complexity, the blog application will be created step by step. First, the blog will be implemented to work without a database: users and posts will be stored in the server memory. Later, the database persistence will be implemented to replace the in-memory object storing.

Let’s implement a stub (sample data, stored in the memory) for the PostService. It will be a Java class called PostServiceStubImpl. It will hold the posts in a List<Post> collection and the service methods will be easy to be implemented:

src/main/java/blog/services/PostServiceStubImpl.java

package blog.services;

import blog.models.Post;
import blog.models.User;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;

@Service
public class PostServiceStubImpl implements PostService {
    private List<Post> posts = new ArrayList<Post>() {{
        add(new Post(1L, "First Post", "<p>Line #1.</p><p>Line #2</p>", null));
        add(new Post(2L, "Second Post",
        "Second post content:<ul><li>line 1</li><li>line 2</li></p>",
        new User(10L, "pesho10", "Peter Ivanov")));
        add(new Post(3L, "Post #3", "<p>The post number 3 nice</p>",
        new User(10L, "merry", null)));
        add(new Post(4L, "Forth Post", "<p>Not interesting post</p>", null));
        add(new Post(5L, "Post Number 5", "<p>Just posting</p>", null));
        add(new Post(6L, "Sixth Post", "<p>Another interesting post</p>", null));
    }};

    @Override
    public List<Post> findAll() {
        return this.posts;
    }

    @Override
    public List<Post> findLatest5() {
        return this.posts.stream()
                .sorted((a, b) -> b.getDate().compareTo(a.getDate()))
                .limit(5)
                .collect(Collectors.toList());
    }

    @Override
    public Post findById(Long id) {
        return this.posts.stream()
                .filter(p -> Objects.equals(p.getId(), id))
                .findFirst()
                .orElse(null);
    }

    @Override
    public Post create(Post post) {
        post.setId(this.posts.stream().mapToLong(
                p -> p.getId()).max().getAsLong() + 1);
        this.posts.add(post);
        return post;
    }

    @Override
    public Post edit(Post post) {
        for (int i = 0; i < this.posts.size(); i++) {
            if (Objects.equals(this.posts.get(i).getId(), post.getId())) {
                this.posts.set(i, post);
                return post;
            }
        }
        throw new RuntimeException("Post not found: " + post.getId());
    }

    @Override
    public void deleteById(Long id) {
        for (int i = 0; i < this.posts.size(); i++) {
            if (Objects.equals(this.posts.get(i).getId(), id)) {
                this.posts.remove(i);
                return;
            }
        }
        throw new RuntimeException("Post not found: " + id);
    }
}

The above service implementation is just for testing. It will allow us to develop the application frond-end UI (controllers and views) without carrying about the complexity of the database access. It will also make the application services testable without the need of database. Let’s update the home page controller.

Note: the annotation @Service for the service implementation class is important here. It tells the Spring Framework that this class will be used by the application controllers as a service and Spring Framework will automatically instantiate and inject it in the controllers (through the @Autowired annotation).

Invoke the “PostService” from the Home Page Controller

Now, let’s update the home page controller to use the PostService and its testing stub implementation PostServiceStubImpl. Now the HomeController.index() method should prepare for the view the latest 3 blog posts (to be shown at the home page) + the latest 5 blog posts (to be shown at the sidebar).

src/main/java/blog/controllers/HomeController.java

@Controller
public class HomeController {
@Autowired
private PostService postService;

@RequestMapping(“/”)
public String index(Model model) {
List<Post> latest5Posts = postService.findLatest5();
model.addAttribute(“latest5posts”, latest5Posts);

  List<Post> latest3Posts = latest5Posts.stream()
.limit(3).collect(Collectors.toList());
model.addAttribute(“latest3posts”, latest3Posts);

  return “index”;
}
}

Note the @Autowired annotation before the postService field. This is the
“magic” of Spring Framework. It automatically injects the correct implementation for your services at the places where they are needed. Developers just type @Autowired“. Spring scans the project and finds all classes that implement the service interface. If only one such class is found, it is instantiated and its instance is auto-wired (injected) in the field or method parameter where it is requested.

The above controller action puts in the view model the latest 5 posts as object named “latest5posts” and the latest 3 posts as object named “latest3posts” to be shown at the home page by the view. Now it is time to write the home page view to process these posts.

Implement “List Latest 3 Posts” at the Home Page Main Area

Let’s modify the home page view to display the latest 3 posts:

src/main/resources/templates/index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head th:replace="layout :: site-head">
    <title>Spring MVC Blog</title>
</head>

<body>

<header th:replace="layout :: site-header" />

<main id="posts">
    <article th:each="p : ${latest3posts}">
      <h2 class="title" th:text="${p.title}">Post Title</h2>
      <div class="date">
        <i>Posted on</i>
        <span th:text="${#dates.format(p.date, 'dd-MMM-yyyy')}">22-May-2016</span>
        <span th:if="${p.author}" th:remove="tag">
          <i>by</i>
          <span th:text="${p.author.fullName != null ?
                        p.author.fullName : p.author.username}">Svetlin Nakov</span>
        </span>
      </div>
      <p class="content" th:utext="${p.body}">Post content</p>
    </article>
</main>

<footer th:replace="layout :: site-footer" />
</body>

</html>                                    

The view iterates over the “latest3posts” collection and for each post in it shows the post details: title, date (in format dd-MMM-yyyy, e.g. 22-May-2016), author (when available, print its full name or just its username when the full name is missing) and post body.

Make the project and open the home page from your Web browser. It should look like this:

Implement the “List latest 5 Posts” at the Home Page Sidebar

Now implement the sidebar at the home page that holds the titles of the last 5 posts in hyperlinks to these posts. Add the following code just after the header in the index.html home page template:

src/main/resources/templates/index.html

<aside>
<h2>Recent Posts</h2>
<a href=“#” th:each=“p : ${latest5posts}” th:text=“${p.title}” 
th:href=“@{/posts/view/{id}/(id=${p.id})}”>Work Begins on HTML5.1</a>
</aside>

Now test the application. It should display 5 links at the home page, just after the page header:

Now add some CSS styles to make these links display correctly at the sidebar on the right side
of the home page. Append the following code in your styles.css file:

src/main/resources/public/css/styles.css

body>aside {
  float: right;
  width: 200px;
  background: #CCC;
  padding: 15px;
  margin-left: 20px;
  margin-top: 10px;
}

body>aside h2 {
  margin: 5px 0px 15px 0px;
}

body>aside a {
  display: block;
  margin: 5px 0px;
  text-decoration: none;
}

body>main:after {
  content: '';
  display: block;
  clear: both;
}

Now the sidebar looks better:

Create the “Post Details” Page

Now create the “Post Details” page, which will display a single post by id. It will be invoked when user clicks on the links in the Sidebar. It will be mapped to URL /posts/view/{id}/, e.g. http://localhost:8080/posts/view/3/.

Create “Post Details” Action in PostsController

Create the PostsController and its action view(id):

src/main/java/blog/controllers/PostsController.java

@Controller
public class PostsController {
    @Autowired
    private PostService postService;
      
    @RequestMapping("/posts/view/{id}")
    public String view(@PathVariable("id") Long id, Model model) {
        Post post = postService.findById(id);
        model.addAttribute("post", post);
        return "posts/view";
    }
}

The PostsController works like the HomeController. It handles URLs like /posts/view/{id}/ and finds the requested post using the @Autowired implementation of the PostService and renders the view “posts/view“, which corresponds to the file “view.html” in directory src/main/resources/templates/posts. For cleaner organization, all post-related views are placed in a subdirectory “posts” under “templates“.

Create “Post Details” View

Create the posts/view.html template (view) to display the post loaded by the PostsController:

src/main/resources/templates/posts/view.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head th:replace="layout :: site-head">
    <title th:text="${post.title}">View Post</title>
</head>

<body>

<header th:replace="layout :: site-header" />

<main id="posts">
  <article>
    <h2 class="title" th:text="${post.title}">Post Title</h2>
    <div class="date">
    <i>Posted on</i>
    <span th:text="${#dates.format(post.date, 'dd-MMM-yyyy')}">22-May-2016</span>
        <span th:if="${post.author}" th:remove="tag">
        <i>by</i>
        <span th:text="${post.author.fullName != null ?
                         post.author.fullName : post.author.username}">Svetlin Nakov</span>
        </span>
    </div>
    <p class="content" th:utext="${post.body}">Post content</p>
  </article>
</main>

<footer th:replace="layout :: site-footer" />

</body>

</html>

The view “posts/view.html” works exactly like the home view “index.html“. It shows the post details: title, formatted date, author (when available, print its full name or username when the full name is missing) and post body. Like any other view, it re-uses the “head“, “site-header” and “site-footer” fragments from “layout.html“. Additionally, it changes the page title to hold the post title.

Test the “Post Details” View

Run the project (just recompile it and refresh the browser) to see how the new page works:

Test the “Post Details” View for Invalid Post

Looks good, but what will happen, if a wrong post is open, e.g. /posts/view/150? Let’s see:

It would be better if the application says something like “Sorry, the post #150 is not found” in a good-looking form. You might change the error page following the Spring Boot documentation: http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-error-handling-custom-error-pages.

Implement Notifications System

Let’s implement a “notification system” that allows us to display success / error
messages, like these:

A good approach is to create a NotificationService, which will encapsulate the logic related to adding and storing the info / error messages + add some code in the site layout template to show the messages (when available). Let’s create a notification service, implementation of this service and notifications view template.

Notification Service Interface

Create a new Java interface called “NotificationService.java” in src/main/java/blog/services:

src/main/java/blog/services/NotificationService.java

package blog.services;

public interface NotificationService {
    void addInfoMessage(String msg);
    void addErrorMessage(String msg);
}

This service interface provides methods for adding error and information messages for displaying later in the view.

Notification Service Implementation

Implement the NotificationService interface in a new Java class called NotificationServiceImpl. It stores the info and error messages in a List<NotificationMessage> in the HTTP session. The HTTP session is a special place where you can store objects (key à value) and they persist for long time. HTTP session objects survive request redirections and may be accessed long time later after they are created. The notification messages will be displayed later in the site header (in layout.html). To implement the notification service, just create the class:

src/main/java/blog/services/NotificationServiceImpl.java

package blog.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

@Service()
public class NotificationServiceImpl implements NotificationService {

    public static final String NOTIFY_MSG_SESSION_KEY = "siteNotificationMessages";

    @Autowired
    private HttpSession httpSession;

    @Override
    public void addInfoMessage(String msg) {
        addNotificationMessage(NotificationMessageType.INFO, msg);
    }

    @Override
    public void addErrorMessage(String msg) {
        addNotificationMessage(NotificationMessageType.ERROR, msg);
    }

    private void addNotificationMessage(NotificationMessageType type, String msg) {
        List<NotificationMessage> notifyMessages = (List<NotificationMessage>)
        httpSession.getAttribute(NOTIFY_MSG_SESSION_KEY);
        if (notifyMessages == null) {
            notifyMessages = new ArrayList<NotificationMessage>();
        }
        notifyMessages.add(new NotificationMessage(type, msg));
        httpSession.setAttribute(NOTIFY_MSG_SESSION_KEY, notifyMessages);
    }

    public enum NotificationMessageType {
        INFO,
        ERROR
    }

    public class NotificationMessage {
        NotificationMessageType type;
        String text;

        public NotificationMessage(NotificationMessageType type, String text) {
            this.type = type;
            this.text = text;
        }

        public NotificationMessageType getType() {
            return type;
        }

        public String getText() {
            return text;
        }
    }
}

Modify the Layout View Template to Show Notifications

Now the messages are available in the HTTP session. It is time to display them after the site header and remove them from the session (after they have been successfully shown to the user). Replace the “site-header” fragment in the layout view “layout.html” with the following:

src/main/resources/templates/layout.html

<header th:fragment="site-header" th:remove="tag">
    <header>
      <a href="index.html" th:href="@{/}"><img
                        src="../public/img/site-logo.png" th:src="@{/img/site-logo.png}" /></a>
      <a href="index.html" th:href="@{/}">Home</a>
      <a href="users/login.html" th:href="@{/users/login}">Login</a>
      <a href="users/register.html" th:href="@{/users/register}">Register</a>
      <a href="posts/index.html" th:href="@{/posts}">Posts</a>
      <a href="posts/create.html" th:href="@{/posts/create}">Create Post</a>
      <a href="users/index.html" th:href="@{/users}">Users</a>
      <div id="logged-in-info">
          <span>Hello, <b>(user)</b></span>
          <form method="post" th:action="@{/users/logout}">
              <input type="submit" value="Logout"/>
          </form>
      </div>
    </header>

    <ul id="messages" th:with="notifyMessages=${session[T(blog.services
          .NotificationServiceImpl).NOTIFY_MSG_SESSION_KEY]}">
      <li th:each="msg : ${notifyMessages}" th:text="${msg.text}"
           th:class="${#strings.toLowerCase(msg.type)}">
      </li>
      <span th:if="${notifyMessages}" th:remove="all" th:text="${session.remove(
          T(blog.services.NotificationServiceImpl).NOTIFY_MSG_SESSION_KEY)}"></span>

    </ul>
</header>

The above code first replaces the site header with two elements:

  • The original <header> element which holds the site logo and top navigation.
  • A new element <ul id=”messages”> to hold the notification messages

The code to show the notification messages is complex to be explained, but in brief: it iterates over the list of notification messages, displays each message in a <li> and finally removes all messages from the HTTP session.

Modify the PostsController to Add Error Messages

Now add an error message notification in the PostsController, when an invalid post id is requested:

src/main/java/blog/controllers/PostsController.java

@Controller
public class PostsController {
        @Autowired
        private PostService postService;

        @Autowired
        private NotificationService notifyService;

        @RequestMapping("/posts/view/{id}")
        public String view(@PathVariable("id") Long id, Model model) {
            Post post = postService.findById(id);
            if (post == null) {
                notifyService.addErrorMessage("Cannot find post #" + id);
                return "redirect:/";
            }
            model.addAttribute("post", post);
            return "posts/view";
        }
}

The above code first injects the notification service by “@Autowired” annotation. It adds a check in the view(id) action and in case of invalid post id, it adds an error message though the notification service and redirects to the home page, where this message well be shown.

Add CSS Styles for the Notification Messages

src/main/resources/public/css/styles.css

ul#messages li {
  display: block;
  width: 80%;
  margin: 5px auto;
  text-align: center;
  padding: 5px;
  border-radius: 5px;
}

ul#messages li.info {
  background: #7f7;
}

ul#messages li.error {
  background: #d00;
  color: white;
}

Test the Notification Messages

To test the notification messages, open an invalid post, e.g. http://localhost:8080/posts/view/12345. The result should be like this:

Add JavaScript to Animate the Notification Messages

Now, let’s make the notification messages more fancy. Add JavaScript code that will hide automatically all notification messages after 3 seconds and will hide all notification messages on mouse click. Add the following code in the main file, holding the site JavaScript code “blog-scripts.js“:

src/main/resources/public/js/blog-scripts.js

$(function() {
    $('#messages li').click(function() {
        $(this).fadeOut();
    });
    setTimeout(function() {
        $('#messages li.info').fadeOut();
    }, 3000);
});

The above JS code is loaded by the layout template (in the “site-head” fragment), just after the jQuery library and the function in it is executed when the page is completely loaded. The code finds all <li class=”message”> elements with jQuery and attaches event handlers to hide them (with pleasant fade-out effect) on mouse click or at 3000 milliseconds timeout (for .info messages).

Create the “Login” Page

Forms are a bit more complicated. Let’s create the login page and its functionality.

Create LoginForm Model Class

First, create the login form model. It holds the validation rules for the form fields:

src/main/java/blog/forms/LoginForm.java

package blog.forms;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class LoginForm {
    @Size(min=2, max=30, message = "Username size should be in the range [2...30]")
    private String username;

    @NotNull
    @Size(min=1, max=50)
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Create UserService

Next, create the user service interface that implements the login authentication functionality:

src/main/java/blog/services/UserService.java

package blog.services;

public interface UserService {
    boolean authenticate(String username, String password);
}

Create UserServiceStubImpl

Next, create the user service stub implementation (we shall have real implementation later):

src/main/java/blog/services/UserServiceStubImpl.java

package blog.services;

import org.springframework.stereotype.Service;

import java.util.Objects;

@Service
public class UserServiceStubImpl implements UserService {
    @Override
    public boolean authenticate(String username, String password) {
         // Provide a sample password check: username == password
         return Objects.equals(username, password);
    }
}

Create the LoginController

Next, create the login controller:

src/main/java/blog/controllers/LoginController.java

package blog.controllers;

import blog.forms.LoginForm;
import blog.services.NotificationService;
import blog.services.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.validation.Valid;

@Controller
public class LoginController {

    @Autowired
    private UserService userService;

    @Autowired
    private NotificationService notifyService;

    @RequestMapping("/users/login")
    public String login(LoginForm loginForm) {
        return "users/login";
    }

    @RequestMapping(value = "/users/login", method = RequestMethod.POST)
    public String loginPage(@Valid LoginForm loginForm, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
             notifyService.addErrorMessage("Please fill the form correctly!");
             return "users/login";
        }

        if (!userService.authenticate(
             loginForm.getUsername(), loginForm.getPassword())) {
             notifyService.addErrorMessage("Invalid login!");
             return "users/login";
        }

        notifyService.addInfoMessage("Login successful");
        return "redirect:/";
    }
}

Create the Login View

Finally, create the login view:

src/main/resources/templates/users/login.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head th:replace="layout :: site-head">
  <title>Login</title>
</head>

<body>

<header th:replace="layout :: site-header" />

<h1>Login in the Blog</h1>

<form method="post" th:object="${loginForm}">
  <div><label for="username">Username:</label></div>
  <input id="username" type="text" name="username" th:value="*{username}" />
  <span class="formError" th:if="${#fields.hasErrors('username')}"
                                th:errors="*{username}">Invalid username</span>

  <div><label for="password" th:value="*{username}">Password:</label></div>
  <input id="password" type="password" name="password" th:value="*{password}" />
  <span class="formError" th:if="${#fields.hasErrors('password')}"
                                th:errors="*{password}">Invalid password</span>

  <div><input type="submit" value="Login"/>
  <a href="register.html" th:href="@{/users/register}">[Go to Register]</a></div>
</form>

<footer th:replace="layout :: site-footer" />

</body>

</html>

Add CSS for the Form Validation

Add some CSS for the form validation:

src/main/resources/public/css/styles.css

.formError {
    color: red;
    font-style: italic;
}

Test the Login Form Functionality

Now run the login form and test it:

Create the “User Registration” Page

Create the page like the previous one. It is very similar.

The next few steps are still unfinished, so you could implement them yourself.

Create the “List Posts” Page

Create the “Create New Post” Page

Create the “Delete Post” Page

Create the “Edit Existing Post” Page

Create the “List Users” Page

Part III: Connect the Application to the DB (Spring Data JPA)

In this section we shall connect the application to the database and implement data access logic with Spring Data JPA, JPA, Hibernate and MySQL.

Add Spring Data Maven Dependencies

Add Spring Data JPA and MySQL dependencies in the Maven project settings:

pom.xml

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-jpa</artifactId>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>6.0.3</version>
</dependency>

Define MySQL Connection Settings (application.properties)

Define the JPA settings to connect to your MySQL database. Ensure your MySQL server is running and the database “blog_db” exists inside it. Use the following database configuration settings:

src/main/resources/application.properties

spring.thymeleaf.cache = false

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.url
= jdbc:mysql://localhost/blog_db?characterEncoding=utf8
spring.datasource.username
= root
spring.datasource.password
=

# Configure Hibernate DDL mode: create / update
spring.jpa.properties.hibernate.hbm2ddl.auto = create

# Disable the default loggers
#logging.level.org = WARN
#logging.level.blog = WARN

### Show SQL executed with parameter bindings
#logging.level.org.hibernate.SQL = DEBUG
#logging.level.org.hibernate.type.descriptor = TRACE
#spring.jpa.properties.hibernate.format_sql = TRUE

Annotate the Entity Classes: User and Post

Put JPA annotations (table and column mappings + relationship mappings) to the entity classes in order to make then ready for persistence in the database through the JPA / Hibernate technology. Start with the User class:

src/main/java/blog/models/User.java

package blog.models;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = “users”)
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, length = 30, unique = true)
private String username;

@Column(length = 60)
private String passwordHash;

@Column(length = 100)
private String fullName;

@OneToMany(mappedBy = “author”)
private Set<Post> posts = new HashSet<Post>();

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getUsername() {
     return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPasswordHash() {
    return passwordHash;
}

public void setPasswordHash(String passwordHash) {
    this.passwordHash = passwordHash;
}

public String getFullName() {
    return fullName;
}

public void setFullName(String fullName) {
    this.fullName = fullName;
}

public Set<Post> getPosts() {
    return posts;
}

public void setPosts(Set<Post> posts) {
    this.posts = posts;
}

public User() {
}

public User(String username, String fullName) {
    this.username = username;
    this.fullName = fullName;
}

public User(Long id, String username, String fullName) {
    this.id = id;
    this.username = username;
    this.fullName = fullName;
}

@Override
public String toString() {
    return “User{” +
       “id=” + id +
       “, username='” + username + \’+
       “, passwordHash='” + passwordHash + \’+
       “, fullName='” + fullName + \’+
       ‘}’;
}

}

Annotate in the same way the Post class:

src/main/java/blog/models/Post.java

package blog.models;

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name = "posts")
public class Post {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, length = 300)
    private String title;

    @Lob @Column(nullable = false)
    private String body;

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private User author;
   
    @Column(nullable = false)
    private Date date = new Date();

    public Long getId() {
         return id;
    }

    public void setId(Long id) {
         this.id = id;
    }

    public String getTitle() {
         return title;
    }

    public void setTitle(String title) {
         this.title = title;
    }

    public String getBody() {
         return body;
    }

    public void setBody(String body) {
         this.body = body;
    }

    public User getAuthor() {
         return author;
    }

    public void setAuthor(User author) {
         this.author = author;
    }

    public Date getDate() {
         return date;
    }

    public void setDate(Date date) {
         this.date = date;
    }

     public Post() {}

     public Post(Long id, String title, String body, User author) {
          this.id = id;
          this.title = title;
          this.body = body;
          this.author = author;
    }

     @Override
     public String toString() {
         return "Post{" +
            "id=" + id +
            ", title='" + title + '\'' +
            ", body='" + body + '\'' +
            ", author=" + author +
            ", date=" + date +
            '}';
    }
}

Create UserRepository and PostRepository (Spring Data JPA)

Create the interface UserRepository. Note that you will not provide any implementation for it. Spring Data JPA will implement it for you. This is part of the “magic” behind the “Spring Data” framework:

src/main/java/blog/repositories/UserReposiory.java

package blog.repositories;

import blog.models.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

Create the interface PostRepository in similar way. Don’t implement this interface. Spring Data will create an implementation of it. This is the “magic” of the @Repository annotation.

src/main/java/blog/repositories/PostReposiory.java

package blog.repositories;

import blog.models.Post;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface PostRepository extends JpaRepository<Post, Long> {
    @Query(“SELECT p FROM Post p LEFT JOIN FETCH p.author ORDER BY p.date DESC”)
List<Post> findLatest5Posts(Pageable pageable);
}

Not that the above JPQL query will be automatically implemented and mapped to the method findLatest5Posts() in the service implementation provided by Spring Data.

Implement the PostService and UserService to Use the DB

Just add new implementations for the UserService and PostService, annotated with @Primary. This will tell the Spring Framework to use these implementations instead of the old stubs.

src/main/java/blog/services/PostServiceJpaImpl.java

package blog.services;

import blog.models.Post;
import blog.repositories.PostRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Primary
public class PostServiceJpaImpl implements PostService {

@Autowired
private PostRepository postRepo;

@Override
public List<Post> findAll() {
    return this.postRepo.findAll();
}

@Override
public List<Post> findLatest5() {
    return this.postRepo.findLatest5Posts(new PageRequest(0, 5));
}

@Override
public Post findById(Long id) {
    return this.postRepo.findOne(id);
}

@Override
public Post create(Post post) {
    return this.postRepo.save(post);
}

@Override
public Post edit(Post post) {
    return this.postRepo.save(post);
}

@Override
public void deleteById(Long id) {
    this.postRepo.delete(id);
}

}

The UserService and its implementation are similar to PostService and its implementation.

src/main/java/blog/services/UserService.java

package blog.services;

import blog.models.User;

import java.util.List;

public interface UserService {

List<User> findAll();
User findById(Long id);
User create(User user);
User edit(User user);
void deleteById(Long id);

}

The UserServiceJpaImpl class just invokes the repository methods to do its job. It is annotated with the @Service and @Primary annotations to tell the Spring Framework to make it available for @Autowire injection in the controllers:

src/main/java/blog/services/UserServiceJpaImpl.java

package blog.services;

import blog.models.User;
import blog.repositories.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Primary
public class UserServiceJpaImpl implements UserService {

@Autowired
private UserRepository userRepo;

@Override
public List<User> findAll() {
     return this.userRepo.findAll();
}

@Override
public User findById(Long id) {
    return this.userRepo.findOne(id);
}

@Override
public User create(User user) {
    return this.userRepo.save(user);
}

@Override
public User edit(User user) {
    return this.userRepo.save(user);
}

@Override
public void deleteById(Long id) {
    this.userRepo.delete(id);
}

}

Create the Database with hbm2ddl.auto

Ensure the hbm2ddl is enabled (value “create“). This will drop the database at application startup and will re-create the database tables according to the entity classes found in the project.

src/main/resources/application.properties

# Configure Hibernate DDL mode: create / update
spring.jpa.properties.hibernate.hbm2ddl.auto = create

Build and run the project. Ensure all tables are created in the MySQL. Use MySQL Workbench or other MySQL database administration tool to see the table structures:

The database will be empty: no users, no posts.

After that disable auto-table creation:

src/main/resources/application.properties

# Configure Hibernate DDL mode: create / update
spring.jpa.properties.hibernate.hbm2ddl.auto = update

Run the project again. You are ready to fill some sample data in the database.

Create Some Sample Data in MySQL (Users and Posts)

Put some data in the MySQL tables. Otherwise the home page will be empty (no blog posts).

You may use the database script from the resources coming with this lab. To insert some users and posts, execute the script db/Sample-data-users-posts.sql:

Check your database tables users and posts:

Test the Sample Users and Posts Data from MySQL

Run the application again to test the sample data:

Part IV: User Accounts with Spring Security

In this section we shall implement user accounts and access permissions, based on the Spring Security framework. This includes user registration, user login, user logout, authentication, authorization, access control, etc.

Sorry, this part of the tutorial is still unfinished. А lot of work will come here for the login / logout to be implemented using the Spring Security framework. You might check this article as reference: https://spring.io/guides/gs/securing-web/.

Download the source code of the project up to this step (still unifinished): Spring-MVC-Blog-unfinished.zip.

Enjoy!

Светлин Наков за ИТ образванието пред ТВ+

$
0
0

Наскоро (септември 2016) участвах в едно предаване в ТВ+ и разказах за моята визия за ИТ образование, за дигиталните професии, за бъдещето на ИТ индустрията, за Софтуерния университет (СофтУни), професиите, преподавателите и подготовката на качествени програмисти, ИТ специалисти и дигитални маркетинг специалисти и пътя към дигитализация на цялото общество, наред с образователните предизвикателства на дигиталния свят.

И понеже не съм блогвал скоро, споделям и още едно телевизионно участие (от юли 2016) – за липсата на ИТ специалисти през телевизия “Европа”.

И като съм почнал да шервам, споделям и едно по-подробно интервю от ИТ конференцията на JobTiger (юли 2016).

Споделям още и един разказ за моя път на ИТ предприемач (юни 2016).

Имах и едно участие в StartUp Grind (август 2016).

И няколко думи за Софтуерния университет (СофтУни) от януари 2016.

За математиката в програмирането и дали ни трябва наистина: математика, статистика, data science и machine learning @ СофтУни

$
0
0

Data Science @ SoftUni

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

СофтУни, математика и програмиране

Трябва ли един програмист да знае математика? Математика и програмиране – свързани ли са? Трябва ли да си добър математик, за да станеш програмист? Ако си добър математик, ще станеш ли добър програмист? Постоянно ме питат такива въпроси и постоянно им отговарям, че не е задължително да си добър математик, за да станеш добър програмист и аз самия съм отлично доказателство за това.

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

В началото СофтУни започна като алтернатива на държавното ИТ образование, изградена върху парадигмата “учене чрез правене“, с много практика и изграждане на реални умения, които работодателите търсят. За повечето фирми по-важни се оказаха конкретни езици за програмиране и софтуерни технологии (като PHP и Java EE), а не толкова математически фундамент. Така математиката си остана на заден план, заради липсата на търсене и заради липсата на желание у студентите да се занимават с математика и теория. С времето СофУни се утвърди като безспорен лидер на пазара на ИТ обучения и започна да подготвя повече софтуерни инженери и ИТ специалисти, отколкото всички останали учебни заведения, взети заедно.

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

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

Математиката не е за всеки!

Всъщност математика, сложни алгоритми, machine learning и подобни теми не са за всеки. Десетки хиляди работят в софтуерната индустрия на добри позиции в добри фирми, без да имат сериозни математически умения. Защо тогава всички да задълбават в математика, алгоритми, графика или пък машинно обучение? Нека с machine learning и сложни алгоритми се занимават само по-напредналите програмисти, които имат капацитет и желание да усвоят тази материя. Нека който иска да реди сайтове и формички и е доволен от това, да си го работи. Нека който иска да учи алгоритми, да си ги учи. Който има капацитет за self-driving cars, нека с това да се занимава. СофтУни дава избор! СофтУни не задължава всички да учат математика или сложни алгоритми, а само който ги пожелае, който е стигнал ниво на напредък, което му позволява да намери смисъл в тях и да ги изучава с любов и желание.

Обърнат подход: от практика към фундамента

Навремето в математическия факултет ни обясняваха как за да станеш програмист, трябвало да имаш солидна основа от фундаментална математика, всякакви там диференциални уравнения, неевклидови геометрии и незнам си какви пространства и интеграли. Набиваха ни в главите формули и уравнения и всичко това без докосване на компютър, само на дъската. И твърдяха, че така се изгражда основата на добрия програмист. Дрън-дрън. Резултатът от всичко това го знаем: отказваха студентите от математика, отказваха студентите от програмирането, отказваха студентите от ученето въобще. Завършваха много малко хора, масово се преписваше, хиляди се бореха за тройка и много малко хора намираха смисъл в изучавания материал. Липсваше практика и смисъл да учиш всичко това, липсваше мотивация, липсваха резултати. Само единици се запалваха по математиките, но не винаги ставаха добрите програмисти.

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

Аз например, никога не съм бил добър математик, но пък като ученик бях в националния отбор на България по програмиране 5 години поред и печелех медали по международните олимпиади по програмиране. Имах логическо мислене, но не бях математик. Не знаех какво е интеграл и нямах нужда да знам.

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

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

Ако искаш да правиш игри със сложна графика, започваш примерно с Unity или готова библиотека и се запалваш. Стигнеш ли по-напред, извън тривиалните стандартни инструменти, рано или късно се сблъскваш с математика, но тогава знаеш за какво ти е, намираш смисъл и започваш да я учиш с хъс. Източници много: има хиляди курсове в Coursera и световните учебни организации. От практиката към теорията. От конкретния проблем към по-общите принципи. Така се учи по-добре и е по-удачно в съвременни бързо-променящ се свят.

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

Именно затова в СофтУни по-сложните курсове (структури от данни, алгоритми, математика, data science, machine learning, computer graphics, operating systems, project management, agile methodologies и др.) се изучават по желание и към края на учебния план, след година-две навлизане в програмирането и практическата разработка на софтуер, след някоя и друга година реален стаж в софтуерна фирма. Тогава по-надчетените студенти са готови за тези знания и могат да ги поемат. А останалите – те ще намерят своя път и той може да не минава през математика и физика. От практика към фундамент – това е по-добрият път в съвременния дигитален свят!

Първо програмиране, после (евентуално) математика и по-сложни алгоритми

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

Грешно е да се опитваме да научим всеки на сложни алгоритми и математика, особено в началото, преди да сме му запалили интереса и да сме му дали смисъл да учи програмиране и технологии. Така хиляди читави студенти се отказват, не защото са глупави, а защото им е рано. Вижте какво става в Софийски и в Технически университет. Грешно е да учим теорията зад даден проблем, преди да сме се сблъскали с проблема в практиката. Грешно е да учим управление на проекти, преди да сме участвали поне в един проект и да сме разбрали нуждата от планиране и контрол на задачите. Затова съм привърженик на подхода “от практика към фундамент”.

За направлението по Data Science / Machine Learning в СофтУни

Страхотно е да добавим още едно направление от знания за търсещите нещо повече от кодене: data science / machine learning / intelligent systems / robotics. Има огромно бъдеще в тези науки. Идва ерата на роботите. Вече автомобилите без шофьор се движат по улиците. Предстои роботизация в много сфери на икономиката. Ще изчезват професии, ще се появяват нови интелигентни роботизирани устройства – и за ежедневието и за различни индустрии. Трябва да сме готови! Това е нещо повече от поредния маркетинг шум около cloud, IoT и big data. Затова в СофтУни ще развиваме обучения, работни групи и know-how в сферата на интелигентните системи и машинното обучение. Очаквайте още курсове в тази сфера.

Сега стартираме базов курс по Data Science, с повечко математика, статистика и практически занимания, но ще потърсим качествени преподаватели и за machine learning, а някой ден защо не и за self-driving cars като обучения и специализации в #СофтУни.

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

Безплатни курсове по програмиране в 28 града за напълно начинаещи от януари 2017 г.

$
0
0

Софтуерният университет (СофтУни) организира безплатни курсове по програмиране за напълно начинаещи в 28 града из цяла България от януари 2017 г. Целта е всеки, който има интерес към програмиране и технологии, да опита програмирането и се увери сам дали е за него и дали иска да се занимава сериозно. Повече програмисти и ИТ специалисти означава по-силна икономика и по-добър стандарт на живот в България, не само за ИТ специалистите, но и за всички останали.

Кои са градовете с безплатни курсове по програмиране?

В безплатните обучения могат да се включат ученици, студенти и работещи, присъствено в следните градове: София, Пловдив, Варна, Бургас, Русе, Стара Загора, Плевен, Добрич, Шумен, Сливен, Ямбол, Хасково, Велико Търново, Горна Оряховица, Благоевград, Перник, Казанлък, Пазарджик, Враца, Видин, Кърджали, Габрово, Кюстендил, Гоце Делчев, Търговище, Раковски, Белоградчик, Карнобат. Присъствените места са ограничени според капацитета на учебните зали.

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

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

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

Какво е СофтУни?

Софтуерният университет (СофтУни) е най-голямата и най-значимата образователна организация в сферата на програмирането, ИТ професиите и дигиталните компетенции в България. В обученията на СофтУни се включат между 2000 и 3000 души на месец и голяма част от тях трайно се захващат с дигитални професии. СофтУни организира над 100 учебни курса на година, включващи програмиране, софтуерни технологии, компютърна графика и дизайн, дигитален маркетинг, информационни технологии и развиване на практически дигитални компетенции.

СофтУни е иновативен и модерен образователен център, който създава истински професионалисти в света на програмирането. Обучението в СофтУни е по модела „учене чрез правене“, при което чрез практически занимания се предават фундаменталния знания от компютърните науки и софтуерното инженерство (30%) и се натрупва реален практически опит в най-търсените и съвременни езици за програмиране и софтуерни технологии (70%), а след завършване (и понякога още в средата на обучението) студентите са готови да стартират своята кариера като успешни софтуерни инженери. Образованието в СофтУни обхваща 20-25 учебни курса, организирани в систематичен учебен план по софтуерно инженерство с продължителност 1-3 години (според избраната професия).

Обучението по програмиране – важна национална кауза

Безплатните обучения по програмиране в цялата страна са вероятно най-значимият и най-мащабният образователен проект за софтуерната индустрия, който се е случвал в последните години. Очаква се в обученията да се включат над 5000 ученици, студенти и работещи, които ще опитат програмирането (присъствено или онлайн) и много от тях ще се запалят по ИТ професиите. Това е важна национална кауза: да дадем знания, умения, професия, работа и бъдеще на хиляди млади хора от всички краища на България, и да задвижим икономиката на страната, за да се вдигне жизненият стандарт.

ИТ секторът е сред най-добре платените в България, в него работят много от най-будните, най-умните, най-интелигентните, най-трудолюбивите, най-амбициозните и най-прогресивните. Софтуерната индустрия дава хляб директно на около 25 000 души (по данни на софтуерната асоциация БАСКОМ) и индиректно на поне още 3 пъти по толкова. ИТ специалистите плащат огромни данъци и индиректно задвижват и други сектори на икономиката. С 18 000 програмисти (по официални данни) към 2016 г. се произвеждат близо 2% от брутния вътрешен продукт (БВП) на страната. Ако броят на заетите в ИТ сектора значително се увеличи, това ще доведе до значим икономически ефект и по-висок жизнен стандарт в България.

Моята лична кауза и каузата на #СофтУни е да създадем 100 000 работещи в ИТ сектора в България до 2025 г. и да се приближим към голямата цел: България – силициева долина на Европа, център за високи технологии, иновации и предприемачество.

Присъствено и онлайн (дистанционно) обучение

Безплатните обучения по програмиране за начинаещи в цялата страна включват присъствени и онлайн занятия (според избраната форма на обучение).

На присъствените занятия се обяснява нов материал и се решават практически задачи под надзора на преподаватели, асистенти и ментори. Участниците в София получават безплатно и личен ментор, който им помага персонално за задачите (в лична среща, по FB, Skype и други канали).

Онлайн участниците получават видео-уроци и наставления за самостоятелна практическа работа вкъщи, съчетани с непрестанна помощ онлайн. Те получават обратна връзка (оценка) за решенията на задачите си чрез автоматизирана системата за проверка (online judge).

За кого е безплатният курс по програмиране?

Курсът по програмиране за абсолютно начинаещи е изключително практически, с много писане на код и решаване на задачи по програмиране от практиката. Всяка решена задача се оценява автоматично от онлайн системата “SoftUni Judge” и резултатите излизат на момента (в реално време). Курсът е изключително старателно подготвен лично от Светлин Наков и в него е натрупан опит от вече над 70 учебни групи за последните 3 години.

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

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

Какво обхващат безплатните уроци програмиране за начинаещи?

В безплатния курс по програмиране за начинаещи се изучават основите на програмирането: работа с данни, проверка на условия, използване на повторения (цикли), като се набляга на развиване на алгоритмично мислене чрез решаване на стотици практически задачи.

Използва се езикът C# и средата за разработка Visual Studio, но езикът няма съществено значение в толкова начален етап от навлизането в програмирането.

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

Курсът се състои от 8 учебни занятия по 4 часа + незадължителен изпит накрая.

Ето ги и учебните теми, разработени лично от Светлин Наков:

  • Кодиране за начинаещи – представяне на курса
  • Първи стъпки в програмирането – писане на прости програми
  • Прости пресмятания с числа – променливи и данни
  • Логически проверки – if-else конструкция
  • По-сложни логически проверки – вложени проверки, по-сложни логически условия
  • Повторения (цикли) – повтаряне на блок от команди многократно
  • Чертане на фигурки с цикли – вложени цикли и пресмятания
  • По-сложни цикли – алгоритмични задачи с цикли, условни конструкции и пресмятания
  • Подготовка за практически изпит по програмиране (приемен изпит в СофтУни)
  • Практически изпит по програмиране (незадължителен, за който иска сертификат или да продължи да учи)

Можете да надникнете в учебното съдържание чрез безплатните видео уроци от випуск януари 2016: https://softuni.bg/trainings/1297/programming-basics-january-2016.

Изпит и сертификат за завършващите

Обученията по основи на програмирането, организирани от СофтУни, завършват с незадължителен изпит по практическо програмиране, върху изучавания в курса учебен материал, който служи за прием в Софтуерния университет. Който се запали по програмирането и усети, че му харесва да се занимава с писане на код, може да продължи образованието си в СофтУни, където го очаква задълбочена 2-3-годишна програма, която завършва с професия и работна позиция в софтуерна фирма. Може да учите за няколко професии, сред които основните са C#/.NET софтуерен инженер, Java софтуерен инженер, JavaScript програмист или PHP уеб програмист.

При постигнат резултат от курс поне Много добър (5.00), участникът получава и сертификат от СофтУни за начални умения в програмирането.

Как да се запиша да уча програмиране безплатно?

Записването за безплатните уроци по програмиране (за всички градове, присъствено и онлайн) става от сайта на СофтУни. Попълнете формата за кандидатстване в срок до 5 януари 2017 г. от сайта на СофтУни ии се запишете за безплатно обучение по програмиране във вашия град:

https://softuni.bg/apply

Наков: пътят на един олимпиец към образованието по програмиране и Софтуерния университет (СофтУни)

$
0
0

На 21 декември се проведе шеста годишна олимпийска среща на Олимпийското сдружение, което обединява настоящи и бивши национални състезатели по информатика, математика, физика, астрономия, химия, биология и математическа лингвистика, учители и деятели за подготовката за олимпиадите. Беше изключително приятно да се срещна с голямо количество умни млади хора, успели по своя път (или на които им предстои да успеят), предприемачи, преподаватели, докторанти, учени, … хора от цвета на нацията. Бях поканен и да разкажа моят път след олимпиадите и състезанията по програмиране и с какво се занимавам сега, 15-20 години след медалите по международните олимпиади по информатика.

Светлин Наков: пътят от олимпиадите по информатика към СофтУни

Презентация: пътят от олимпиадите по информатика към СофтУни

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


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

$
0
0

Днес направих 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 часа с въпросите от публиката):

Професия C# / .NET Developer: как се става .NET програмист?

$
0
0

Днес ще разкажа подробно за професията “.NET Developer” и как се става C# програмист, с какви езици за програмиране и софтуерни технологии работят .NET разработчиците на софтуер и как можем да ги научим, от къде да стартираме и какво да учим. Гледайте запис от видеото на живо със Светлин Наков за професията “C# програмист”:

Какво всъщност правят .NET програмистите?

.NET програмистите разработват софтуер (пишат програми и софтуерни системи) с езика C# и .NET платформата и средата за разработка Visual Studio, създават ASP.NET MVC уеб приложения, ползват бази данни и MS SQL Server, разработват back-end с ASP.NET и front-end с HTML, CSS и JavaScript или изграждат мобилни приложения с Xamarin.

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

Ученето на C# и .NET чрез става “чрез правене”


Програмирането се учи с правене. Трябват ви поне 70% практическа работа и писане на код всеки ден в продължение на поне година. Само с четене или гледане на видео не става. Трябва да решавате много, много задачи, да правите проекти и да трупате опит, хиляди часове. Ученето на C# и .NET технологиите става по същия начин: с много писане на код, решаване на задачи и създаване на практически проекти, години наред. Точно такъв е подходът за преподаване на .NET технологии в Софтуерния университет (СофтУни):

  • Стартът е с навлизане в писането на код. След това се изучават сериозно основите на програмирането и се развива алгоритмично мислене, с много практика, решаване на задачи и писане на проекти.
  • Продължението включва изучаване на базови принципи от софтуерното инженерство и компютърните науки, изучаване на концепции като процедурно програмиране, ООП, функционално програмиране, структури от данни и алгоритми, бази данни, уеб технологии и модели за комуникация от компютърния и софтуерния свят.
  • Всичко това се преплита с изучаване на конкретни езици за програмиране (като C# и JavaScript) и технологии за разработка (като .NET, ASP.NET и Entity Framework).

Практически проекти

За да станеш .NET програмист, трябва да се научиш да пишеш код (да кодиш), да развиеш алгоритмично мислене, да понатрупаш знания за компютърните науки и софтуерната разработка и да овладееш на добро ниво езика C# и .NET технологиите. В СофтУни преминаваме през всичко това за около 2 години.

  • Учим сериозно програмиране и решаваме много, много практически задачи (няколко ститици), за да развием алгоритмично мислене и problem solving skills.
  • Изучаваме в дълбочина фундаменталните принципи на програмирането, софтуерната разработка и комппютърните науки, обектно-ориентираното програмиране, функционалното програмиране, структурите от данни, принципите на базите данни, концепциите на уеб технологиите, основите на софтуерните архитектури и много други фундаментални знания за професията.
  • Работим по практически проекти със C#, .NET, JavaScript и SQL Server, където разработваме истински софтуер, който тръгва в ръцете ни.
  • При изучване на .NET професията тренираме сериозно уменията си по програмиране със C# и Visual Studio, ООП, SQL Server, ASP.NET MVC, Entity Framework, HTML5 и JavaScript.
  • Трупаме практически опит чрез работа в екип в GitHub среда.

Кариерен старт в топ фирми от бранша

Учим програмиране, за да придобием добра професия и да стартираме работа в добра фирма, при приятни условия, с добро заплащане и добри перспективи за растеж и професионално развитие, нали така?

Точно такова е и моето разбиране и това мое разбиране съм го пренесъл в СофтУни и затова даваме кариерен старт на студентите в края на обученията, а понякога и по-рано, преди да са завършили. Статистиката ни е следната: 92% от завършилите започват работа, но пък не всички започнали обучението си, завършват.

Всички студенти, които имат успех поне много добър (4.50) получават достъп до кариерния център на СофтУни (т.е. им търсим работа). За целта работим с топ работодатели от софтуерната и ИТ индустрията, които са упомонети на страницата “партньори”.

Философията на СофтУни за обучение на .NET инженери

Философията на СофтУни за обучение по професия “C# / .NET разработчик” комбинира умения по програмиране, базови структури от данни и развиване на алгоритмично мислене с фундаментални знания от компютърните науки и софтуерното инженерство и съвременни .NET и уеб технологии за изграждане на модерни софтуерни приложения. Учебният план за C# програмисти обхваща:

  • Фундаментални софтуерни умения: отлично ниво на програмиране, работа със сорс контрол системи, владеене на базови структури от данни, обектно-ориентирано програмиране (ООП), качествен код и функционално програмиране, автоматизирано тестване с unit testing и mocking, работа с бази данни, познаване на съвременните уеб стандарти, работа в екип с Git и GitHub;
  • Практически технологии за уеб разработка със C# и .NET: DB сървър MS SQL Server и език SQL, ORM технологии и Entity Framework, back-end технологии и платформа ASP.NET, framework за уеб разработка ASP.NET MVC, уеб сървър IIS, платформа .NET Core;
  • Уеб front-end технологии: HTML, CSS, JavaScript и jQuery, използване на AJAX, REST, JSON и JavaScript SPA приложения.

Обучението по C# и .NET разработка в СофтУни е много сериозно и задълбочено и формира всички базови познания и практически умения за успешен кариерен старт за junior позиции в софтуерната индустрия.

Факти за C# и .NET платформата. Знаете ли, че?

  • Стартовата заплата на един C# .NET developer е 800-1000 лв. чисто.
  • .NET и C# са в топ 5 на най-търсените технологии в софтуерната индустрия в България.
  • Отвореният код е в основата на платформата .NET Core, която е публичен проект в GitHub.
  • Езикът C# е разработен от Microsoft и е международен ISO стандарт.
  • .NET технологиите се ползват за разработка на всякакъв вид приложен софтуер: уеб приложения, мобилни приложения, 3D графика, игри, сървърни приложения.

Защо да уча C# и .NET?

Ако искате да се захванете с програмирането сериозно и да го направите своя професия, трябва да положите доста труд: да овладеете умението да пишете програмен код и да понатрупате опит с програмирането, да развиете алгоритмично мислене чрез решаване на стотици практически задачи и да изучите поне една платформа за разработка (например .NET, PHP, Java или HTML5).

Защо да се захващате точно с .NET платформата, езикът C# и сродните му технологии (като релационната база данни SQL Server, технологията за обектно-релационен достъп до данни Entity Framework, библиотеката за създаване на уеб приложения ASP.NET и други), а не с някоя друга платформа за софтуерна разработка?

  • Езикът C# е един от най-приятните съвременни езици за програмиране. Той комбинира процедурно, обектно-ориентирано и функционално програмиране, с изчистен и кратък синтаксис. C# е изключително е лесен за учене и постоянно се обновява с нови версии и подобрения, вече близо две десетилетия.
  • .NET платформата (и двете й разновидности .NET Framework и .NET Core) са съвременни софтуерни платформи за разработка, много богати като функционалност и възможности, като технология сред най-добре развитите, предпочитани от милиони разработчици по целия свят. С .NET технологиите се разработват най-разнообразни приложения.
    • С .NET можете да изграждате съвременни уеб приложения (Web applications) и уеб услуги (RESTful Web Services), използвайки езика C# и технологичните рамки (frameworks) ASP.NET MVC, ASP.NET WebAPI и ASP.NET Core заедно с технологиите за интеграция с бази данни ADO.NET и работната рамка Entity Framework (EF). С програмния модел MVC (model-view-controller) уеб разработката в ASP.NET се разделя на модели (POCO класове), контролери (System.Web.Mvc.Controller и System.Web.Http.ApiController класове) и изгледи (с Razor view engine).
    • На C# можете да пишете мобилни приложения за iOS, Android и Windows Phone, използвайки мобилната платформа Xamarin. Тя позволява създаване на native mobile apps с езика C# в средата Visual Studio, без да се налага да учите Java, Swift и Objective-C. С библиотеката Xamarin Forms с езика C# можете да изграждате естествен потребителски интерфейс (native mobile UI).
    • Със C# можете да изграждате сървърни (back-end) приложения с технологията ASP.NET за изработка на уеб приложения и REST услуги. С ASP.NET се създават уеб контролери и действия, които обработват HTTP заявки и връщат HTML, JSON или XML отговор. За интеграция с бази данни C# уеб приложенията използват Entity Framework за ORM-базиран достъп до таблиците в базата, RDBMS система Microsoft SQL Server за съхранение на данните и T-SQL за съхранени процедури. C# backend приложенията се тестват с технологии за unit testing и като MSTest (Visual Studio Team Test) и mocking като Moq.
    • С .NET технологиите разработвате с лекота приложения с бази данни, използвайки ORM библиотеката Entity Framework (EF) и програмния модел ADO.NET, сървъри за релационни бази данни (като MS SQL Server, MySQL и Azure SQL) и библиотеки за работа с XML (парсери), JSON и други формати за данни.
    • Езикът C# е сред най-използваните за създаване на настолни приложения (desktop apps) с Universal Windows Platform (UWP), езикът за описание на потребителски интерфейси XAML, системата за XAML базирани Windows UI приложения WPF и други съвременни UI технологии.
    • .NET е водеща технология и при разработката на приложения за cloud среда (cloud apps), където интеграцията с Microsoft Azure е много развита. В Azure с езика C# можете да използвате десетки съвременни cloud технологии, като Azure Web Apps и Azure Web Sites за хостинг на облачни приложения, cloud SQL база данни, документна база данни (NoSQL), machine learning услуги, big data решения и много други.
    • На езика C# можете да разработвате и компютърни игри с Unity game engine, от който получавате наготово съвременна платформа за 2D и 3D компютърна графика и анимация, с физика, обекти, движения, колизии и т.н. Със C# и Unity можете да създавате графични и гейминг приложения за desktop, Web и мобилни устройства.
  • Голямо търсене на C# / .NET програмисти. Поради доброто технологично ниво на .NET платформата и нейната отвореност, предлагането на работа за .NET developers е сред топ 5 на най-използваните и най-търсените в софтуерната индустрия в България. Погледнете в сайтовете за обяви за работа за C# и .NET специалисти, за да се уверите колко много отворени позиции има за .NET developers.

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

Да станеш C# програмист означава да изучиш C# програмирането и .NET технологиите и да натрупаш практически опит с тях. Това включва следните няколко стъпки:

  1. Натрупване на умения по програмиране.
  2. Развиване на алгоритмично мислене.
  3. Овладяване на основите на компютърните науки и софтуерното инженерство.
  4. Овладяване на .NET технологиите за разработка на софтуер.
  5. Трупане на практически опит с .NET технологиите.

Натрупване на умения по програмиране

Първата стъпка, за да станеш програмист е да се научиш да пишеш код и да овладееш основите на програмирането, без значение от езика за програмиране. Понеже в тази статия става дума, че интересите са ви насочени към C# програмирането и .NET разработката, имам следния съвет като за старт:

Научете се да програмирате (натрупайте coding skills) с езика C# и средата за разработка Visual Studio. Това включва работа с променливи и данни, писане на условни конструкции (проверки) и цикли, работа с масиви и списъци, обработка на символни низове (стрингове), работа с класове и обекти, работа със среда за разработка (IDE) и други базови програмни умения.

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

Развиване на алгоритмично мислене

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

Най-добрият начин да се развие алгоритмично мислене е чрез решаване на стотици задачи по програмиране, особено ако имат алгоритмичен характер. В СофтУни алгоритмичното мислене се изгражда за няколко месеца чрез поредица от задълбочени курсове като Programming Fundamentals, в които се решават голям брой практически задачи по програмиране с нарастваща сложност.

Овладяване на основите на компютърните науки и софтуерното инженерство

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

Ето някои от по-важните области от софтуерното инженерство, които са необходими за да започнеш работа в областта на компютърното програмиране със C# и .NET:

  • Базови познания по структури от данни и алгоритми: сложност на алгоритъм, работа с линейни структури данни (списък, стек, опашка), дървовидни структури (дървета  графи) и хеш-таблици (речници), алгоритми за търсене и сортиране, рекурсия, комбинаторика, графи, динамично оптимиране и други. Изучават се подробно в курсовете по структури от данни и алгоритми.
  • Работа със сорс контрол системи (хранилища за сорс код) като Git, SVN и платформи за колаборация като GitHub, клониране на repository, промяна, commit и push на промените, решаване на конфликти и merge, работа със задачи (issue tracking). Изучават се в курса по фундаментални основи и принципи на програмирането.
  • Обектно-ориентирано програмиране (ООП) и шаблони за дизайн, работа с класове и интерфейси, капсулация на данни (encapsulation), наследяване на класове и имплементация на интерфейси, абстракция и полиморфизъм, хвърляне и хващане на изключения, работа с OO design patterns. Изучават се в курсовете по C# OOP Basics и C# Advanced OOP.
  • Компонентно тестване (unit testing), mocking (подпъхване на функционалност) и работа с инструменти за unit testing като NUnit и MSTest. Изучават се в курса по ООП за напреднали и качествен код.
  • Функционално програмиране, работа с функции, функционални изрази, ламбда функции, функции от по-висок ред, функции, връщащи функция, затваряне на състояния с closure, IIFE и други. Изучават се в курсовете по JavaScript за напреднали и C# за напреднали.
  • Бази от данни и SQL, създаване на релационна схема чрез моделиране на таблици и връзки (E/R diagram), писане на SQL заявки за CRUD операции чрез DML заявките, извличане на данни с SQL SELECT, селекция, съединения на таблици (joins), филтриране с WHERE, сортиране, групиране, обединения, вмъкване на данни с SQL INSERT, изтриване на данни с SQL DELETE, модификация на данни с SQL UPDATE, работа с DDL заявки, съхранени процедури и функции на ниво база. Базите данни се изучават в курса по бази данни. Фокусът е върху MS SQL Server – релационната база данни на Microsoft (създаделите на C# и .NET технологиите).
  • ORM технологии, чрез които таблиците от релационната база данни се прехвърлят в C# класове и се управляват чрез DbContext класа, който предоставя CRUD функционалност в обектно-ориентиран стил. Работата с ORM технологии в C# се практикува в курса по бази от данни за напреднали.
  • Уеб приложния и HTTP – познания в тази област са необходими на всеки съвременен софтуерен разработчик, тъй като болшинството от мрежовата комуникация между приложенията работи с HTTP протокола. Концепциите за изграждане на уеб приложения и REST услуги са също основополагащи за практическата софтуерна разработка. Такива фундаментални знания и умения за уеб разработка се изграждат в курса по основи на уеб разработката.
  • Софтуерни архитектури, client-server, MVC – това са концептуални познания от софтуерното инженерство. Те се изучават на начално ниво в курса “Софтуерни технологии” и се развиват чрез много практика.
  • Front-end разработка, работа с HTML, CSS и JavaScript са сред редовните изисквания в обявите за работа за софтуерни инженери, програмисти и разработчици. Тези умения се развиват в курса по HTML и CSS и в курсовете за JavaScript front-end разработка.
  • За развитието на един софтуерен инженер, от плюс са уменията за работа с операционни системи и мрежи, познаване на хардуера, уменията за мрежово програмиране, разбиране на парадигмите на конкурентно (паралелно) програмиране, използване на процеси и методологии за разработка на софтуер (например Scrum и agile development), разбиране на концепции и инструменти за софтуерно тестване, разбиране на принципи и инструменти за софтуерен дизайн и много други. Такива знания и умения се развиват с изборните курсове в СофтУни.

Овладяване на .NET технологиите за разработка на софтуер

Освен фундаменталните знания за програмирането и софтуерното инженерство, един .NET разработчик трябва да научи на добро ниво и най-използваните .NET технологии:

  • Достъп до бази данни с Entity Framework (EF) и Entity Framework Core, дефиниране на entity класове, мапинг на класовете към database таблици, работа с DbContext, database-first техниката, code-first подхода, конфигурация на code first database миграции, работа с unit of work шаблона, реализация на CRUD операции през DbContext, работа с транзакции и други.
  • Създаване на уеб приложения с ASP.NET MVC и ASP.NET Core, дефиниране на MVC контролери (наследяване на Controller класа) и обработка на HTTP GET действия, които рендират данни във вид на HTML, рендиране на HTML форми за Razor view engine, обработка на HTTP POST заявки от HTML форми с MVC контролер, работа с ViewBag и view models, мапинг към database модели от EF, интеграция на MVC контролер с Entity Framework и бази от данни, работа с partial views, имплементация на login / logout и автентикация, scaffolding на CRUD заявки с MVC контролери, действия и модели и други ASP.NET тънкости.
  • Създаване на REST услуги с ASP.NET Web API и ASP.NET Core, разработка на REST service endpoints с наследяване на ApiControler класа, дефиниране на действия (controller actions), мапинг на входните параметри от URL заявката или от тялото на POST заявката, обработване на заявката (синхронна и асинхронна), достъп до SQL Serrver през Entity Framework чрез наследника на DbContext класа и връщане на отговор (JSON, XHML, HTTP error code или друг).
  • Мобилна разработка със C# и Xamarin – създаване на native C# mobile apps за телефони и таблети, iPhone, Android и други мобилни платформи.

Освен добро владеене на програмирането и .NET технологиите, съвременните софтуерни разработчици трябва да имат и умения по уеб front-end технологии:

  • Изграждане на уеб сайтове и уеб-базиран потребителски интерфейс с HTML и CSS, основни HTML тагове, структура на HTML документ, семaнтичен HTML, работа с HTML елементи и атрибути, div, span, параграфи, таблици, форми и контроли, CSS селектори и правила за разположение (layout) и стилизиране.
  • JavaScript, jQuery и JS библиотеки за front-end JS разработка, работа с JavaScript езика, ООП в JavaScript, closures, шаблони за модул и revealing module, библиотеки за JS-базиран user interface като React и AngularJS.

Трупане на практически опит с .NET технологиите

Трупането на опит става най-вече след започване на работа в софтуерна или ИТ фирма. Опит се трупа с бачкане, с много години бачкане, с много правене, бъркане, поправяне, писане, пренаписване и т.н.

Поради недостиг на време в университета се правят малки проекти с учебна цел и това е съвсем нормално, защото никой не иска да учи 10 години, за да излезе с 10-годишен опит от университета. Учебните проекти дават начален опит, но не могат да ви направят опитни .NET инженери. Колкото и да се стараете, след едно добро обучение можете да излезете на ниво програмист-стажант или най-много junior developer.

Какви умения ще добия от .NET курсовете в СофтУни?

Обучението по специализация “C# / .NET разработчик” в СофтУни дава практически умения за .NET разработка – такива, каквито се търсят от софтуерните фирми в обявите за работа за junior .NET developer:

  • Програмиране на езика C#, работа с Visual Studio, използване на колекции, ООП, класове и обекти, работа с Git и GitHub
  • Познания на базови структури от данни и алгоритми, умения за решаване на проблеми със C# и Visual Studio
  • Разработване на уеб приложения с ASP.NET MVC, Entity Framework и SQL Server
  • Разработване на DB приложения с Entity Framework, T-SQL и SQL Server
  • Разработване на back-end приложения с ASP.NET WebAPI, Entity Framework и SQL Server
  • Разработване на front-end приложения с HTML, CSS, JavaScript, AJAX и REST

Кои технологии се изучават в СофтУни за професия “.NET Developer”?

СофтУни предлага професията C# / .NET разработчик, в която се изучават следните 15 курса по програмиране и софтуерни технологии:

  • Programming Basics – обхваща основи на програмирането с езика C# и средата за разработка Visual Studio, работа с променливи, използване на проверки (if-else) и цикли за повтаряне на блокове код.
  • Programming Fundamentals – развива алгоритмично мислене и умения за решаване на задачи по програмиране с използване на колекции (масиви, списъци, речници и множества и операции върху тях: добавяне, търсене, промяна, вмъкване, изтриване, сортиране, въвеждане и отпечатване), текстообработка със стрингове и регулярни изрази и задачи върху символни низове, работа със сорс контрол системи, Git хранилища и колаборация в GitHub, използване на C# методи и инструменти за дебъгване (трасиране на кода, breakpoints, инспектиране на променливите), четене и писане на текстови и бинарни файлове, достъп до директории, обработка на изключения (хвърляне и хващане на exception), работа с обекти и класове на начално ниво, ползване на съществуващи .NET библиотеки и APIs.
  • Software Technologies – запознава навлизащите в софтуерното инженерство с най-използваните технологии за софтуерна разработка на начално ниво, от front-end с HTML, CSS и JavaScript до уеб сървърни приложения с MVC frameworks и бази данни. Прави се преглед на JavaScript сървърни технологии (Node.js, Express и MongoDB), PHP уеб разработка (PHP + MySQL), C# уеб разработка (ASP.NET MVC + Entity Framework + SQL Server) и Java уеб разработка (Java + Spring MVC + Hibernate + MySQL). Като практически проект се изгражда блог система от нулата, включваща преглед на блог статии и коментарите по тях, login и logout, административна част с добавяне на ново съдържание и промяна на съществуващото. Блогът се реализира по подобен начин с уеб приложения, базирано на сървърен MVC framework на четири различни езика: JavaScript, PHP, C# и Java.
  • C# Advanced – запознава с програмни техники за напреднали, базови структури от данни (като стек, опашка, списък, множество и речник и операциите върху тях – добавяне, търсене, изтриване, промяна, въвеждане и отпечатване), концепции от C# функционалното програмиране, работа със C# заявки и LINQ и ползване на LINQ API с ламбда изрази, асинхронно програмиране с async и await.
  • C# OOP Basics – дава базово разбиране на парадигмата обектно-ориентирано програмиране (ООП) в света на C#, умения за работа с класове и обекти, дефиниране на класове в C# и техните членове (полета, свойства, методи, конструктори, събития), работа със статични членове, капсулация на данни чрез private поле + getter + setter, наследяване и изграждане на прости обектно-ориентирани йерархии от класове, полиморфизъм и използване на абстрактни действия с подмяна на поведението в класа наследник.
  • C# OOP Advanced – задълбочава познанията по ООП в контекста на C# програмирането и въвежда техники за писане на качествен програмен код, задълбочава знанията по абстракция и уменията по изграждане на ОО йерархии чрез наследяване на класове и имплементиране на интерфейси, въвежда програмните техники “unit testing” и “mocking” и преработка на лош код (refactoring), запознава с писането на итератори и компаратори, работата с изброен тип (enum) и .NET атрибути, използването на шаблонни типове (generic types) и комуникацията между обекти с делегати и събития, както използване на Reflection API (отражение на типовете).
  • Databases Basics & MS SQL Server – дава солидни основи за работа с релационни бази от данни и database сървъри, използване на езика SQL в контекста на RDBMS системата Microsoft SQL Server, дизайн на бази данни и създаване на E/R диаграми, работа с SQL DML командите (CRUD операции), SELECT заявки, проекция, селекция, съединение на таблици, филтриране, сортиране, групиране, SQL функции, работа с SQL DDL командите (CREATE, ALTER, DROP), писане на подзаявки, писане на съхранени процедури, функции и тригери, управление на транзакции, работа с индекси и оптимизации на бързодействието.
    • Databases Advanced & Entity Framework – поставя сериозен фундамент и стабилни технически умения за работа с данни в C# среда – от ADO.NET и изпращане на SQL заявки към база данни до работа с ORM технологии и парсване на XML; започва се от ADO.NET, настройка на connection string, работа с DbCommand и ResultSet класовете, през параметрични SQL заявки (prepared statement), продължава се с ORM системите и по-конкретно Entity Framework (EF), инсталация на EF през NuGet, конфигурация на EF, seed методи за пълнене на начални данни, концепция за миграции, продължава се с DB first mapping на съществуваща база от данни, CRUD заявки през DbContext класа (LINQ заявки за извличане на данни от базата, добавяне на записи, изтриване на записи и промяна на съществуващи записи), работа с code first mappings, по-сложни ORM техники като използване на транзакции, inverse mappings, fluent API, lazy loading, N+1 query проблемът и неговото решение, include в EF и други EF техники; работа с JSON данни, JSON парсери в .NET и JSON сериализация, XML парсери в .NET и обработка на XML данни.
  • C# Web Development Basics – дава стабилни базови познания по уеб програмиране и протокола HTTP и позволява задълбочено усвояване на концепциите на съвременното сървърно уеб програмиране; започва с езика HTML, концепцията за уеб сървър и CGI комуникация, работа с уеб форми и предаване на данни с HTTP GET и POST заявки, продължава с детайлите около HTTP протокола, работа с HTTP сесии, cookies в уеб браузъра и state management, базова работа с Bootstrap, писане на собствен уеб сървър на C# с комуникация по сокет с multi-threaded модел на обработка на HTTP заявките, парсване и рутиране на заявките, създаване на проста MVC архитектура и мини MVC framework на C#, изграждане на persistence layer с Entity Framework и писане на data-driven Web приложение на C# от нулата, без ASP.NET или друг framework.
  • C# MVC Frameworks & ASP.NET – навлиза в дълбочина в сървърното уеб програмиране със C# чрез технологията ASP.NET MVC: от създаване на MVC проект, включване на необходимите NuGet пакети, създаване на MVC контролери и действия, които хващат HTTP GET и POST заявки, създаване на Razor изгледи за визуализация на данни (cshtml синтаксис), конфигурация на рутирането на заявките, до по-сложни изгледи, работа с layouts и секции, view helpers за рендиране на форми и контроли за вход, частични изгледи (partial views), области от уеб приложението (MVC areas), работа с Entity Framework и достъп до база данни от ASP.NET MVC приложение, генериране на контролери, view модели и изгледи за CRUD операциите по даден entity клас с техниката “scaffolding”, валидация на данните от HTML форма, работа с model binders, шаблони за визуализация и редакция на данни (view & editor templates), използване на Session, TempData и Cache обектите, използване на inversion of control контейнер “Ninject” за dependency injection в контролерите и auto-mapper за автоматично прехвърляне на данни между domain model и view model класовете, работа с ASP.NET Identity системата и имплементация на login / logout / регистрация на потребител и подобни функционалности, защита на достъпа чрез автентикация и оторизация, работа с AJAX заявки, използване на уеб сокети (web sockets) и SignalR технологията, използване на библиотеки с MVC контроли.
  • JavaScript Fundamentals – поставя основите на JavaScript програмирането с много практически занимания, като се използват съвременните JS стандартни (modern JavaScript), от работа с променливи и данни, смесване на HTML и JavaScript код, през условни конструкции и цикли, до функции (параметри, извикване, връщане на резултат, вложени функции) и използване на lambda изрази, работа с масиви и многомерни масиви и особеностите им в JS, обработка на текст (стрингове) и използване на регулярни изрази в JavaScript, работа с обекти, асоциативни масиви, множества и речници със средствата на JavaScript езика.
  • JavaScript Advanced – продължава по-задълбочено навлизането в концепциите на JavaScript програмирането и писането на обектно-ориентиран JS код; обхваща се работата с DOM дървото на HTML документа и обработка на DOM събития (във front-end среда), използване на jQuery библиотеката, работа с JS функции и IIFE изрази, затваряне на състояние във функция (концепция за closure), концепция за композиране на обекти като опростен подход към ООП (обединяване на данни и действия е JS обект), използване на шаблоните “module” и “revealing module” за създаване на stateful обекти с капсулирани private данни с тях, прототипно наследяване на обекти, концепцията за класове, обекти и наследяване в стила на ООП езиците, използване на конструктори, свойства и методи, наследяване на класове с прототипни вериги, unit testing с инструментите за JS тестинг Mocha и Chai, работа с транспилатори и Babel, управление на изключенията и обработка на грешки в JS среда, генератор функции и асинхронно изпълнение.
  • JavaScript Applications – фокусира върху приложната част на JavaScript front-end програмирането и изграждането на цялостни single-page приложения, които визуализират и обработват данни от REST услуги с AJAX; започва се от работа с HTTP и BaaS услуги за съхранение на данни с RESTful API, ползване на Postman за изпращане на HTTP REST заявки, извикване на REST услуги с jQuery AJAX, достъп до GitHub API, Firebase и Kinvey mBaaS през REST интерфейс с HTTP заявки, и се продължава с концепциите на promises за асинхронно изпълнение на поредица от действия, обяснява се работата със localStorage и sessionStorage, и накрая се изграждат цялостни front-end JS приложения (SPA apps) с JS базирана MVC архитектура (от страна на клиента), която използва рутинг библиотеки като Sammy.js и templating библиотеки като Mustache.js и REST-базиран back-end; изучава се още работата с React и JSX компонентите, както и класически инструменти за JS разработка като webpack, grunt, gulp, ESLint и други.
  • Web Fundamentals & HTML5 – поставя основите на изграждането на уеб сайтове с HTML и CSS, основни HTML тагове (div, span, параграф, линкове, картинки, списъци), работа със CSS (включване на CSS от HTML документ, селектори и правила), работа със структурата на HTML документа, ползване на семантични тагове, създаване на HTML таблици, ползване на по-сложни CSS селектори (nested selectors и pseudo selectors), работа със CSS стойности и мерни единици, приоритет на селекторите, концепции за CSS позициониране и разположение на елементите (layout), настройка на шрифтове, цветове, контур, отмествания (margin & padding), плаващи елементи (CSS floating), блокови и inline-block елементи и подреждането им, работа с HTML форми и различните видове контроли (текст, падащ списък, дата и други) и стилизиране на HTML формуляри със CSS, изграждане на адаптивен дизайн за различни устройства с media queries и flexbox, техники за responsive images, tables, forms и други адаптивни елементи, работа с Bootstrap, използване на плавни премествания (transitions) и анимации и използване на популярни HTML front-end библиотеки като Font Awesome, слайдери, нотификации и други.
  • WordPress Basics – дава базови практически умения за изграждане на WordPress сайтове, инсталиране и настройка на WordPress, настройка на хостинг среда и домейн, инсталиране на теми (WP themes) и добавки (WP plugins), създаване и редакция на уеб съдържание, създаване на форма за контакт, галерия, слайдер, създаване на собствена WP тема и изграждане на цялостен WordPrress сайт от нулата, с използване на готова WordPress тема, безплатни плъгини и инструменти за визуално редактиране на съдържание.

Успешно усвоилите учебния материал от изброените курсове от C# професията в СофтУни с лекота си намират работа като .NET софтуерни инженери през кариерния център на СофтУни или самостоятелно.

Безплатни C# курсове и уроци по .NET програмиране и C# видео уроци

СофтУни предоставя безплатен достъп до всички видео уроци, презентации, постъпкови ръководства и учебни материали от C# и .NET обученията за професия .NET Developer. Достатъчно е да се регистрирате като потребител в сайта и получавате C# видео уроците безплатно през посочените курсове от професия “.NET разработчик”.

Гледайте нашите безплатни C# уроци по .NET програмиране. Тъй като уроците по C# програмиране са огромен брой (няколко хиляди!), трябва да си изберете някои от курсовете в СофтУни и след това някоя от инстанциите на съответния курс и след това да си изберете някоя от темите от курса. Изберете безплатен курс от .NET програмата на СофтУни:

Сайтът на СофтУни наистина предоставя безплатни видео уроци по C# и .NET разработка и това важи за материалите от всички изброени по-горе учебни курсове по .NET програмиране. Материалите и видео курсовете са с отворен лиценз Creative Commons.

Как да уча безплатно C# и .NET?

Вземете си безплатен курс по C# програмиране, в няколко части (цяла поредица видео обучения за C#, която представлява доста задълбочен безплатен C# курс с над 100 часа видео): Programming Basics, Programming Fundamentals, C# Advanced, C# OOP Basics.

Продължете след това да изучавате и практикувате .NET програмирането с нашите безплатни .NET курсове и безплатни видео обучения за .NET разработка. Ето списък с курсовете за .NET програмисти, които са достъпни за всички регистрирани в сайта на СофтУни потребители под формата на безплатни .NET видео уроци и .NET tutorials: Databases Basics & MS SQL Server, Databases Advanced & Entity Framework, C# Web Development Basics, C# MVC Frameworks & ASP.NET.

Допълнете знанията си за .NET и C# програмирането с front-end обучения, които получавате от нас под формата на безплатни видео уроци за HTML, CSS, WordPress и JavaScript програмиране: Web Fundamentals & HTML5, WordPress Basics, JavaScript Fundamentals, JavaScript Advanced, JavaScript Applications.

Инвестирайте в своето образование! От вас зависи да вземете добра професия и да работите добра работа! Учете, вместо да се оплаквате. Образовайте се и си осигурете добро бъдеще. От вас зависи, наистина!

Професия Java Developer: как се става Java програмист?

$
0
0

Днес ще разкажа подробно за професията “Java Developer” и как се става Java програмист, с какви езици за програмиране и софтуерни технологии работят Java и Java EE разработчиците на софтуер и как можем да се научим на Java програмиране и Java Enterprise разработка, от къде да стартираме и какво да учим, стъпка по стъпка.

Ще разкажа за различните платформи, в които се използва езикът Java: десктоп Java (за настолни приложения), Java for Android (за разработка на Android мобилни приложения), Java ЕЕ (Java Enterprise Edition – за големи корпоративни приложения) и Java Embedded (за разработка на IoT приложения с Java).

Ще обясня за стъпките през които минава всеки един начинаещ програмист, за да овладее професията “Java developer” и защо няма особена разлика дали учиш Java или C# или друг език за програмиране, както и кои са фундаменталните умения на софтуерните разработчици, които не зависят от конкретните езици и технологии за разработка.

Гледайте видеото от Facebook излъчването на живо със Светлин Наков по темата “Как се става Java програмист“, в което всичко описано в тази статия е подробно обяснено на живо:

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

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

Java програмистите са програмисти, които използват езика Java и Java технологиите за своята работа. Те пишат софтуер (създават програми и софтуерни системи) на Java, използват Java инструменти и технологии и среди за разработка (като Eclipse и IntelliJ IDEA), създават Java EE уеб приложения, ползват бази данни (MySQL, Oracle, PostgreSQL) през Java интерфейси и раотни рамки (като JDBC, JPA и Hibernate), разработват back-end с Java EE или Spring Framework и front-end с HTML, CSS и JavaScript или изграждат мобилни приложения с Android SDK.

Факти за Java. Знаете ли, че?

  • Стартовата заплата на един junior Java developer е 800-1100 лв. чисто.
  • Java е в топ 3 на най-търсените технологии в софтуерната индустрия в България.
  • Отвореният код е в основата на Java платформата и технологиите от Java екосистемата.
  • Езикът Java се използва от над 9 милиона софтуерни специалисти в целия свят.
  • Java технологиите се ползват за разработка на приложен и enterprise софтуер: уеб приложения, мобилни приложения, сървърни приложения, enterprise приложения, embedded приложения и други.

Защо да уча Java, Java EE и Spring Framework?

Ако искате да се захванете с програмирането сериозно и да го направите своя професия, трябва да положите доста труд: да овладеете умението да пишете програмен код и да натрупате опит с програмирането, да развиете алгоритмично мислене чрез решаване на стотици практически задачи и да изучите поне една платформа за разработка (например Java, PHP, .NET или HTML5).

Защо да се захващате точно с Java платформата, езика Java и сродните му технологии (като работната рамка Spring Framework, релационната база данни MySQL, технологията за обектно-релационен достъп до данни JPA в комбинация със Hibernate и Spring.Data, библиотеката за създаване на уеб приложения Spring MVC и други), а не с някоя друга платформа за софтуерна разработка?

  • Езикът Java е един от най-използваните съвременни обектно-ориентирани езици за програмиране, насочен към разработка на големи и сложни проекти. Той комбинира процедурно, обектно-ориентирано и отчасти функционално програмиране. Java е лесен за учене (не е сложен език) и има голяма общност от разработчици около него.
  • Java платформата и нейните варианти (Java SEJava EE, Android и Java Embedded) са съвременни софтуерни платформи за разработка, много богати на функционалност и възможности, технологично изпитани в продължения на десетилетия и предпочитани от милиони разработчици по целия свят. С Java технологиите се разработват най-разнообразни приложения.
    • С Java EE и Spring Framework можете да изграждате съвременни уеб приложения (Web applications) и уеб услуги (RESTful Web Services), използвайки езика Java и технологичните рамки (frameworks) Java Servlets / JSP / JSF, JAX-RS или Spring MVC, заедно с технологиите за интеграция с бази данни JDBC и работните рамки Java Persistence API (JPA) или Spring Data. С програмния модел MVC (model-view-controller) уеб разработката в Spring MVC се разделя на модели (POJO класове), контролери (анотирани с @Controller класове) и изгледи (с JSP или Thymeleaf view engine).
    • На Java можете да пишете мобилни приложения за Android, използвайки Android SDK. Тя позволява създаване на native mobile apps с езика Java в средата Android Studio.
    • С Java можете да изграждате сървърни (back-end) приложения с различни технологии: Java Enterprise Edition (Java EE), Spring Framework, Spring MVC, Spring Data REST, Spring Boot и други. Със Spring MVC се създават уеб контролери и действия, които обработват HTTP заявки и връщат HTML, JSON или XML отговор. За интеграция с бази данни Java уеб приложенията използват най-често Java Persistence API (JPA) за ORM-базиран достъп до таблиците в базата, RDBMS система MySQL, Oracle или PostgreSQL за съхранение на данните и PL-SQL за съхранени процедури. Java backend приложенията се тестват с технологии за unit testing и като JUnit и mocking като JMockit.
    • Базираната на езика Java и на Java екосистемата платформа Java Enterprise Edition (Java EE) е най-използваната в света технология за enterprise разработка и се използва от десетилетия за изграждане на големи, тежки, скъпи и сложни корпоративни приложения, портали и платформи, съобразени с нуждите на големия бизнес.
    • С Java технологиите разработвате с лекота приложения с бази данни, използвайки ORM технологиите JPA, Hibernate, Spring Data и Spring Data JPA и програмния модел JDBC, сървъри за релационни бази данни (като MySQL, Oracle и PostgreSQL) и библиотеки за работа с XML (парсери) като JAXP и JDOM, ползване на JSON и други формати за данни.
    • Езикът Java може да се използва и за създаване на настолни приложения (desktop apps) с платформи като JavaFX и Eclipse RCP и други съвременни UI технологии.
    • Java е водеща технология и при разработката на приложения за cloud среда (cloud apps), където интеграцията с Google App Engine е много развита. В AppEngine с езика Java можете да използвате десетки съвременни cloud технологии за хостинг на облачни приложения, cloud SQL бази данни, документни бази данни (NoSQL), machine learning услуги, big data решения и много други.
  • Огромно търсене на Java програмисти. Поради растящите нужди от enterprise разработка и нестихващото използване на Java за изграждане на големи, сериозни корпоративни проекти (банков сектор, финанси, телеком индустрия и други), предлагането на работа за Java developers е сред топ 3 на най-използваните и най-търсените в софтуерната индустрия в България. Погледнете в сайтовете за обяви за работа за Java специалисти, за да се уверите колко много отворени позиции има за Java разработчици.

Философията на СофтУни за обучение на Java инженери

Философията на СофтУни за обучение по професия “Java / Java EE разработчик” комбинира умения по програмиране, базови структури от данни и развиване на алгоритмично мислене с фундаментални знания от компютърните науки и софтуерното инженерство и съвременни Java и уеб технологии за изграждане на модерни софтуерни приложения. Учебният план за Java програмисти обхваща:

  • Фундаментални софтуерни умения: отлично ниво на програмиране, работа със сорс контрол системи, владеене на базови структури от данни, обектно-ориентирано програмиране (ООП), качествен код и функционално програмиране, автоматизирано тестване с unit testing и mocking, работа с бази данни, познаване на съвременните уеб стандарти, работа със сорс контрол системи като Git и GitHub;
  • Практически технологии за уеб и enterprise разработка с Java и Spring Framework: DB сървър MySQL и език SQL, ORM технологии, JPA и Hibernate, back-end технологии и платформа Spring Framework, работна рамка на Java уеб разработка Spring MVC, сървър за Java уеб приложения Apache Tomcat, платформа Java EE, инструменти ant и maven;
  • Уеб front-end технологии: HTML, CSS, JavaScript и jQuery, използване на AJAX, REST, JSON и изграждане на JavaScript SPA приложения.

Обучението по Java разработка в СофтУни е много сериозно и задълбочено и формира всички базови познания и практически умения за успешен кариерен старт за junior Java позиции в софтуерната индустрия.

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

Да станеш Java програмист означава да изучиш Java програмирането и Java технологиите и да натрупаш практически опит с тях. Това включва следните няколко стъпки:

  1. Натрупване на умения по програмиране.
  2. Развиване на алгоритмично мислене.
  3. Овладяване на основите на компютърните науки и софтуерното инженерство.
  4. Овладяване на Java технологиите за разработка на софтуер.
  5. Трупане на практически опит с Java технологиите.

Натрупване на умения по програмиране

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

Научете се да програмирате (натрупайте coding skills) с езика Java и средата за разработка IntelliJ IDEA или Eclipse или друга. Това включва работа с променливи и данни, писане на условни конструкции (проверки) и цикли, работа с масиви и списъци, обработка на символни низове (стрингове), работа с класове и обекти, работа със среда за разработка (IDE) и други базови програмни умения.

Можете да започнете безплатно с курсовете по основи на програмирането в СофтУни. Те са изключително подходящи за напълно начинаещи, както и за по-напреднали, защото систематично поднасят знанията и ви въвличат в много практика. Може да стартирате с език за програмиране по избор: C#, Java, JavaScript, Python, C++ или друг.

Развиване на алгоритмично мислене

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

Най-добрият начин да се развие алгоритмично мислене е чрез решаване на стотици задачи по програмиране, особено ако имат алгоритмичен характер. В СофтУни алгоритмичното мислене се изгражда за няколко месеца чрез поредица от задълбочени курсове като Programming Fundamentals, в които се решават голям брой практически задачи по програмиране с нарастваща сложност.

Овладяване на основите на компютърните науки и софтуерното инженерство

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

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

  • Базови познания по структури от данни и алгоритми: сложност на алгоритъм, работа с линейни структури данни (списък, стек, опашка), дървовидни структури (дървета  графи) и хеш-таблици (речници), алгоритми за търсене и сортиране, рекурсия, комбинаторика, графи, динамично оптимиране и други. Изучават се подробно в курсовете по структури от данни и алгоритми.
  • Работа със сорс контрол системи (хранилища за сорс код) като Git, SVN и платформи за колаборация като GitHub, клониране на repository, промяна, commit и push на промените, решаване на конфликти и merge, работа със задачи (issue tracking). Изучават се в курса по фундаментални основи и принципи на програмирането.
  • Обектно-ориентирано програмиране (ООП) и шаблони за дизайн, работа с класове и интерфейси, капсулация на данни (encapsulation), наследяване на класове и имплементация на интерфейси, абстракция и полиморфизъм, хвърляне и хващане на изключения, работа с OO design patterns. Изучават се в курсовете по Java OOP Basics и Java OOP Advanced.
  • Компонентно тестване (unit testing), mocking (подпъхване на функционалност) и работа с инструменти за unit testing като JUnit. Изучават се в курса по ООП за напреднали и качествен код.
  • Функционално програмиране, работа с функции, функционални изрази, ламбда функции, функции от по-висок ред, функции, връщащи функция, затваряне на състояния с closure, IIFE и други. Изучават се в курсовете по JavaScript за напреднали и Java за напреднали.
  • Бази от данни и SQL, създаване на релационна схема чрез моделиране на таблици и връзки (E/R diagram), писане на SQL заявки за CRUD операции чрез DML заявките, извличане на данни с SQL SELECT, селекция, съединения на таблици (joins), филтриране с WHERE, сортиране, групиране, обединения, вмъкване на данни с SQL INSERT, изтриване на данни с SQL DELETE, модификация на данни с SQL UPDATE, работа с DDL заявки, съхранени процедури и функции на ниво база. Базите данни се изучават в курса по бази данни. Фокусът е върху MySQL – най-използваната релационната база данни в света.
  • ORM технологии, чрез които таблиците от релационната база данни се прехвърлят в Java класове и се управляват чрез EntityManager класа, който предоставя CRUD функционалност в обектно-ориентиран стил. Работата с ORM технологии в Java се практикува в курса по бази от данни за напреднали.
  • Уеб приложния и HTTP – познания в тази област са необходими на всеки съвременен софтуерен разработчик, тъй като болшинството от мрежовата комуникация между приложенията работи с HTTP протокола. Концепциите за изграждане на уеб приложения и REST услуги са също основополагащи за практическата софтуерна разработка. Такива фундаментални знания и умения за уеб разработка се изграждат в курса по основи на уеб разработката и се развиват в курса по Java уеб MVC разработка.
  • Софтуерни архитектури, client-server, MVC – това са концептуални познания от софтуерното инженерство. Те се изучават на начално ниво в курса “Софтуерни технологии” и се развиват чрез много практика.
  • Front-end разработка, работа с HTML, CSS и JavaScript са сред редовните изисквания в обявите за работа за софтуерни инженери, програмисти и разработчици. Тези умения се развиват в курса по HTML и CSS и в курсовете за JavaScript front-end разработка.
  • За развитието на един софтуерен инженер, от плюс са уменията за работа с операционни системи и мрежи, познаване на хардуера, уменията за мрежово програмиране, разбиране на парадигмите на конкурентно (паралелно) програмиране, използване на процеси и методологии за разработка на софтуер (например Scrum и agile development), разбиране на концепции и инструменти за софтуерно тестване, разбиране на принципи и инструменти за софтуерен дизайн и много други. Такива знания и умения се развиват с изборните курсове в СофтУни.

Овладяване на Java технологиите за разработка на софтуер

Освен фундаменталните знания за програмирането и софтуерното инженерство, един Java разработчик трябва да научи на добро ниво и най-използваните Java технологии:

  • Достъп до бази данни с JDBC, JPA (Java Persistence API), Hibernate, Spring Data и Spring Data JPA, дефиниране на entity класове, мапинг на класовете към database таблици, работа с EntityManager, database-first техниката, code-first подхода, реализация на CRUD операции, работа с транзакции и други. Изучават се в курса по Java ORM Frameworks.
  • Създаване на уеб приложения с Java EE среда и Spring Framework среда, работа със Servlet container и Java EE application server, работа с WAR пакети, build среда Maven, мапинг на сървлети, дефиниране на MVC контролери (създаване на Controller клас) и обработка на HTTP GET действия, които рендират данни във вид на HTML, рендиране на HTML форми с JSP или друг view engine, обработка на HTTP POST заявки от HTML форми с MVC контролер, работа с view models, мапинг към database модели от JPA и Spring Data, създаване на Spring service класове и използване на dependency injection, интеграция на Spring MVC контролер със Spring service клас и база от данни и други тънкости на Java Web разработката. Всичко това се изучава сериозно в курсовете по основи на уеб разработката с Java и Java уеб разработка със Spring MVC.
  • Създаване на REST услуги със Spring Framework и Spring Data REST, разработка на REST service endpoints, дефиниране на действия (controller actions), мапинг на входните параметри от URL заявката или от тялото на POST заявката, обработване на заявката, достъп до MySQL през Spring Data JPA и връщане на отговор (JSON, XHML, HTTP error code или друг). Изучава се в курса по Java уеб разработка.
  • Мобилна разработка с Android SDK – създаване на native Java mobile apps за Android телефони и таблети.

Освен добро владеене на програмирането и Java технологиите, съвременните софтуерни разработчици трябва да имат и умения по уеб front-end технологии:

  • Изграждане на уеб сайтове и уеб-базиран потребителски интерфейс с HTML и CSS, основни HTML тагове, структура на HTML документ, семaнтичен HTML, работа с HTML елементи и атрибути, div, span, параграфи, таблици, форми и контроли, CSS селектори и правила за разположение (layout) и стилизиране.
  • JavaScript, jQuery и JS библиотеки за front-end JS разработка, работа с JavaScript езика, ООП в JavaScript, closures, шаблони за модул и revealing module, библиотеки за JS-базиран user interface като React и AngularJS.

Трупане на практически опит с Java технологиите

Трупането на опит става най-вече след започване на работа в софтуерна или ИТ фирма. Опит се трупа с бачкане, с много години бачкане, с много правене, бъркане, поправяне, писане, пренаписване и т.н.

Поради недостиг на време в университета се правят малки проекти с учебна цел и това е съвсем нормално, защото никой не иска да учи 10 години, за да излезе с 10-годишен опит от университета. Учебните проекти дават начален опит, но не могат да ви направят опитни Java инженери. Колкото и да се стараете, след едно добро обучение можете да излезете на ниво програмист-стажант или най-много junior developer.

Как да стана Java програмист?

Да се върнем на основния въпрос: “Как да стана Java програмист?“, “Как да науча Java технологиите и да започна работа като junior Java developer?“, “Как да науча Java“? Имам кратък и наистина добър отговор:

Запиши Java професията в СофтУни

Не е лесно, нито бързо, нито става без учене, но ако инвестираш в себе си сериозно, за 1-2 години, стъпка по стъпка, ще получиш добро начално Java ниво като за работа като Java програмист. Успех!

Професия JavaScript Developer: как се става JS програмист?

$
0
0

Днес ще разкажа подробно за професията “JavaScript Developer” и как се става JS програмист, с какви езици и софтуерни технологии работят JavaScript front-end, JS back-end и full-stack JS разработчиците на софтуер и как можем да се научим на JavaScript програмиранеJavaScript уеб фронт-енд разработка и JavaScript server-side разработка, от къде да стартираме и какво да учим, стъпка по стъпка.

Ще разкажа за различните сценарии и платформи, в които се използват езикът JavaScript (за по-кратко JS) и технологиите от JavaScript екосистемата:

  • JavaScript за уеб front-end разработка – за front-end приложения в браузъра и SPA (single page apps), които взаимодействат с HTML и CSS кода в уеб браузъра и променят динамично DOM дървото чрез JS код
  • JavaScript за back-end разработка – за разработка на сървърни приложения с JS, Node.js и инструменти за JS разработка като Grunt, Babel и Webpack
  • Full-stack JavaScript разработка – за разработка на цялостни end-to-end JavaScript приложения, които имат сървърна част (JS-базиран back-end) и клиентска част (JS-базиран front-end)
  • JavaScript за мобилна разработка – за разработка на iOS / Android / Windows Phone / други мобилни приложения с езика JavaScript и технологиите от JS екосистемата
  • JavaScript за desktop разработка – за разработка на настолни приложения с JavaScript, използвайки уеб технологиите и HTML5 платформата и инструменти и библиотеки от JavaScript екосистемата
  • JavaScript за IoT (Internet of Things) – за разработка на приложения за микроконтролери и вградени системи с езика JavaScript

Ще обясня за стъпките през които минава всеки един начинаещ програмист, за да овладее професията “JavaScript Developer” и защо няма особена разлика дали учиш JavaScript, C#, Python или друг език за програмиране, както и кои са фундаменталните умения на софтуерните разработчици, които не зависят от конкретните езици и технологии за разработка.

Професия “JavaScript разработчик” – видео

Гледайте видеото от Facebook включването на живо със Светлин Наков по темата “Как се става JS програмист?“, в което всичко описано в тази статия е обяснено в по-големи детайли, с примери от практиката и въпроси на живо:

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

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

JavaScript програмистите са програмисти, които използват езика JavaScript и JS технологиите за своята работа. Те пишат софтуер (създават програми и софтуерни системи) на JavaScript:

  • Създават JavaScript front-end: съвременни потребителски интерфейси с HTML, CSS, Angular, React, Meteor, Vue.js, Ember.js или друг JS framework
  • Пишат JavaScript back-end: изграждат сървърна логика за обработка на данни с Node.js, Express.js и други сървърни JS технологии и технологични рамки (frameworks)
  • Използват JavaScript инструменти като npm, Grunt, gulp, Bower, Yeoman, ESLint, Babel и Webpack
  • Използват съвременни JS и уеб технологии като asynchronous programming, web sockets, device APIs, AJAX и REST
  • Използват среди за разработка (IDE) като Sublime Text, Atom, Visual Studio Code и WebStorm
  • Имплементират комуникация между клиентски JS приложения и сървърен JS код с AJAX и REST, по web socket или с друга съвременна технология
  • Ползват бази данни като MongoDB и MySQL през JavaScript интерфейси и работни рамки като Mongoose и Sequelize
  • Изграждат мобилни JS приложения с Cordova, React Native, NativeScript или Ionic, или друг JS mobile framework
  • Разработват desktop приложения с JavaScript с Electron.js, HTML, CSS, JS и други front-end технологии
  • Пишат IoT софтуер за микроконтролери с JavaScript, използвайки технологии като JerryScript и Cyclon.js.

Еволюцията на JavaScript

Езикът JavaScript започва развитието си като прост скриптинг инструмент в уеб браузърите на Netscape, а по-късно е пренесен в Internet Explorer, Mozilla и уеб браузърите от зората на Интернет, а в днешни дни е основна градивна част от съвременните уеб браузъри като Chrome, Firefox, Safari, Edge и Opera.

JavaScript е по начало нестрого типизиран (скриптов, интерпретеруем) език с голяма доза функционален стил на програмиране, но постепенно в JS навлизат парадигми от процедурното програмиране, ООП (обектно-ориентирано програмиране) и други програмни концепции. В по-новите имплементации JS започва да се компилира до известна степен и да се изпълнява в оптимизирани виртуални машини за по-добър performance.

По-късно JS се пренася и от страната на сървъра с платформата Node.js и полека става важна и масово използвана технология при сървърната (back-end) разработка. Постепенно, с развитието на JS екосистемата тя се разширява и обхваща мобилната разработка, десктоп приложенията и микроконтролерите. В днешно време може да се каже, че JS е универсален език за разработка на приложен софтуер.

Големият тласък на развитието на JavaScript идва с навлизането на т.нар. “съвременен JavaScript” (modern JavaScript), стандартите ES6 (ECMAScript 6), ES2015, ES2016 / ES7, ES2017 / ES8, ES2018 и по-новите. Те добавят съвременни техники от другите езици (като класическо ООП с класове и наследяване, ламбда изрази, генератори, подобрен синтаксис за паралелност, асинхронни функции, съвременен синтаксис и други) и отстраняват добре известни проблеми и болки от JS миналото. В днешно време под JavaScript се подразбира “съвременният JS”, т.е. версиите след ES6. С помощта на транспилатори можем спокойно да пишем на съвременен JS и да стартираме кода под стари браузъри и JS среди.

С навлизането на HTML5 платформата в съвременните уеб браузъри се появяват десетки съвременни уеб технологии (като WebSocket API, WebRTC, HTTP/2, SVG, WebGL, geo-location API, local storage APIs, mobile device APIs), които дават възможност за изграждане на иновативни JS технологии и модерни JS технологични рамки (frameworks). JavaScript е основният език за програмиране за HTML5 платформата и без съмнение ще се ползва все повече и ще продължава да се развива бурно и иновативно.

Факти за JavaScript (JS). Знаете ли, че?

  • Стартовата заплата на един junior JavaScript developer е 800-1000 лв. чисто.
  • JavaScript е в топ 5 на най-търсените технологии в софтуерната индустрия в България.
  • JavaScript екосистемата е сред най-бързо развиващите се в софтуерната индустрия.
  • Езикът JavaScript се използва от над 10 милиона софтуерни специалисти в целия свят и в над 50% от проектите в GitHub.
  • JavaScript технологиите се ползват за разработка на front-end приложения, сървърен софтуер, desktop приложения, мобилни приложения и IoT софтуер.

Защо да уча JavaScript, HTML5 и Node.js?

Ако искате да се захванете с програмирането сериозно и да го направите своя професия, трябва да положите доста труд: да овладеете умението да пишете програмен код и да натрупате опит с програмирането, да развиете алгоритмично мислене чрез решаване на стотици практически задачи и да изучите поне една платформа за разработка (например HTML5, Java, PHP, .NET или друга).

Защо да се захващате точно с JavaScript екосистемата (с технологии като Vanilla JS, Angular, React, Meteor, Node.js, MongoDB, Express.js и други JS технологии), а не с някоя друга платформа за софтуерна разработка?

  • Езикът JavaScript е най-използваният съвременен интерпретиран език за програмиране в света, насочен към разработка на front-end и сървърни проекти. Той комбинира функционално, процедурно и обектно-ориентирано програмиране и е асинхронен по природа. JavaScript е лесен за учене и има огромна общност от разработчици около него, а JS технологиите непрестанно се развиват и заменят от нови и по-съвършени.
  • JavaScript технологиите имат много широко предназначение: използват се за изграждане на front-end приложения (потребителски интерфейс), за скалируеми сървърни приложения (back-end), за full-stack (цялостни) JS приложения, за изоморфни JS приложения (isomorphocs JavaScript), за десктоп (настолни) приложения, мобилни апликации, приложения за микроконтролери и cloud-базирани системи.
  • Огромно търсене на JavaScript програмисти. Поради растящите нужди от JS front-end и full-stack JS разработка и разрастващото се приложение на JavaScript технологиите в дигиталните индустрии, предлагането на работа за JavaScript developers е сред топ 5 на най-използваните и най-търсените в софтуерната индустрия в България, а езикът JavaScript стандартно изискване за всички уеб разработчици (PHP, C#, Java и Pythn developers). Погледнете в сайтовете за обяви за работа за JavaScript специалисти, за да се уверите колко много отворени позиции има, свързани с езика JavaScript и JS технологиите.
  • Редом с HTML, CSS и SQL, JavaScript е почти задължителен език за всички софтуерни инженери по целия свят. Малко или много, всеки софтуерен инженер трябва да владее JavaScript и JS технологии, за да ги използва редом с основните езици и платформи, за които програмира. Научете JavaScript, просто се налага!

Front-End JavaScript

В софтуерната индустрия понятията “front-end developer” и “front-end разработка” могат да означават две различни неща:

  • Сайтаджия, който реже Photoshop дизайни към HTML, прави уеб страници и сайтове с HTML и CSS, ползва CSS frameworks като Bootstrap, и по между другито пише и по някой ред елементарен JS код с jQuery за ровичкане в DOM дървото и интегрира JS компоненти и библиотеки за раздвижване на сайтовете (слайдери, popups, JS effects, UI компоненти и други). Това е ниското ниво web front-end developer, който “прави сайтовете красиви и раздвижени”.
  • JavaScript front-end developer, който разработва сериозен уеб потребителски интерфейс (Web front-end UI) със съвременни JS средства (като Vanilla JS) и JS front-end библиотеки (като AngularJS, React + Redux + Flux, Vue.js, Ember.js, Meteor и други), комуникира със сървърна логика с AJAX, web sockets и други технологии, ползва свъременни UI библиотеки и пише големи и сложни JS single page приложения. Това е високото ниво JS front-end developer и изисква много по-високи умения от обикновен “сайтаджия”.

Независимо дали става дума за сайтаджии или корави JS front-end developers, и двете групи фронт-ендъри решават проблеми, свръзани с cross-browser compatibility и поддръжка на остарели браузъри и технологиите около тях (остарял HTML и стари версии на CSS, остарял JavaScript, поддръжка на стария JavaScript стандарт ES5, липса на web sockets, SVG, WebGL и HTTP/2 имплементация и други). За тези цели JS front-end разработчиците ползват библиотеки, техники и инструменти за поддръжка на стари бразуъри, като HTML5 shims и polyfills и разчитат на JS-подобни езици като CoffeeScript, TypeScript и транспилатори като Babel за превеждане между различни версии и варианти на JS езиците като ES6, ES2015, ES2016 и ES2017.

Какво прави един JS front-end developer?

Има няколко вида front-end разработчици:

  • Web front-end специалистите разработват UI с платформата HTML5. Те създават динамични страници с HTML, CSS и JavaScript.
  • JavaScript уеб front-end разработчиците използват JS за работа с DOM, работят с jQuery и други библиотеки, използват UI toolkits като jQuery UI, KendoUI, Webix, JQwidgets, EasyUI и други.
  • JavaScript SPA разработчиците разработват сложни, съвременни потребителски интерфейси с чист JavaScript (Vanilla JS) и JS front-end технологични рамки (frameworks) като AngularJS, React, Vue.js, Ember.js и други JS библиотеки като jQuery.

Всички JS front-end разработчици разработват потребителски интерфейси с HTML, CSS и JavaScript за HTML5 платформата, но го правят с различни технологии и понякога използвайки различна философия и от там и различни нива на умения по програмиране и владеене на front-end JS библиотеки и технологии.

Съвременните течения в JS front-end frameworks следват все повече концепцията “Progressive Web Apps“, която изисква JS приложенията да са безкомпромисно бързи, надеждни и ангажиращи потребителя и взаимодействащи цялостно с неговото работно устройство и работна среда.

JavaScript for Desktop

JavaScript технологи като Electron.js  и NW.js позволяват разработка на JS cross-platform desktop apps, т.е. настолни приложения, преносими към различни платформи (Windows, Mac OS и Linux). Пример за широко-използвани JS desktop приложения, изградени с Electron са средата за разработка Visual Studio Code и чат-системата Slack.

JavaScript for Mobile

JavaScript е широко използвана технология за писане на мобилни приложения за iOS, Android, Windows Phone и други мобилни платформи. Основно предимство при писането на JS за мобилни платформи, е многоплатформеност (write once, run anywhere), ползване на уеб технологиите и езика JavaScript и добре известни JS библиотеки и бягането от неприятни езици като Objective C и C++ for mobile.

Има два вида JS mobile технологии:

  • Web UI-based mobile apps: използват HTML и CSS, изпълнявани в уеб-браузъра на мобилното устройство. Такива приложения обикновено са бавни и не са много гъвкави, понякога изглеждат различно от native приложенията. Създават се с JS технологии за мобилни приложения като:
    • Cordova / PhoneGap + jQuery UI / Mobile Angular UI
    • Ionic (runs over Cordova)
    • Meteor (runs over Cordova)
  • Native mobile apps: използват езика JavaScript, но рисуват потребителския интерфейс на мобилното приложение с комбинация от HTML, CSS и native UI компоненти от съответната мобилна платформа (Android / iOS /друга) и ползват native APIs. По този начин се запазва пълната функционалност на мобилната платформа и натуралния външен вид на приложението, а бързодействието е същото като native mobile app (с Java, Swift, Objective C или XAML). Ето и най-използваните native JS mobile frameworks:
    • React Native
    • NativeScript
    • Titanium / Appcelerator

Back-End JavaScript

Платформата Node.js е задвижващата сила на JS back-end разработката. Тя представлява сървърна JavaScript виртуална машина (Google V8 JS engine), която работи асинхронно, с неблокиращи операции и event-driven workflow, и с това постига невероятна производителност и ефективност при обслужване на голям брой паралелни потребители и задачи. Заедно с модулната система npm (Node package manager), Node.js предоставя богат набор от библиотеки и технологии за сървърна back-end разработка.

От страна на сървъра JavaScript разработката стъпва върху широк набор от JS инструменти за разработка (build tools, transpilers, bundling tools и други) като Grunt, Gulp, Bower, Babel, Browserify, Webpack, Yeoman и ESLint.

Back-end JS разработката разчита сериозно на съвременни JS библиотеки и JS технологични рамки (JS frameworks) като:

  • JS библиотеки за server-side уеб разработка като Express.js (за обслужване на HTTP заявки, уеб сървър функционалност и REST услуги + template engines като Jade, Mustache и Pug) и Socket.io (за real-time комуникация по web socket).
  • Съвърни компоненти от цялостни full-stack JS frameworks като Mojito.js и Meteor.

Full-Stack JavaScript

Концепцията “full-stack JavaScript” и професията “full-stack developer” са свързани с изработка на цялостни JavaScript приложения, в които се използва езикът JavaScript както за клиентската front-end функционалност (потребителски интерфейс, клиентска логика), така и за сървърната back-end функционалност (сървърна логика, данни, бизнес процеси). Думичката “stack” произхожда от съвместното използване на последователно навързани една с друга технологии, които осигуряват:

  • Сървърна, хостинг и мрежова среда (най-често nginx + Node.js + JS библиотеки в Linux, container или cloud среда)
  • Слой за данни (база данни MongoDB, MySQL / MariaDB, Redis или друга + JavaScript обекти и функционалност за достъп до данните)
  • Бизнес логика (JavaScript модули, обекти и класове)
  • API layer (примерно MVC framework с RESTful интерфейс като Express.js или web sockets комуникация като Socket.io или цялостен API layer framework като Total.js)
  • UI framework за уеб или mobile front-end (най-често базиран на HTML + CSS + Vanilla JS + JS библиотеки) или SPA framework като AngularJS, ReactJS, Ember.js, Vue.js, Backbone.js или друга JS front-end библиотека.

Ето и няколко от най-популярните JS full-stack development технологии:

  • MEAN Stack: MongoDB + Express.js + AngularJS + Node.js
  • MERN StackMongoDB + Express.js + React + Redux + Node.js + Webpack
  • Meteor: Node.js + MongoDB + Connect + Distributed Data Protocol (DDP) + jQuery + client-side UI framework +  Cordova + hot code reload + още куп технологии

Isomorphic JavaScript

Изоморфните JS приложения са вариант на full-stack JS приложенията и се изграждат върху цялостен (isomorphic) JS framework, който работи едновременно на сървъра (back-end) и на клиента (front-end). Изоморфните JavaScript технологии и работни рамки предлагат цялостна архитектура, структура и организация на JS приложението (сървърна и клиентска част), като предоставят технологии, които обработват и подават данните от страна на бек-енда и поемат данните и визуализират потребителския интерфейс от страна на фронт-енда. Така един единствен изоморфен JS framework се ползва и като front-end и като back-end технология едновременно, което улеснява поддръжката, позволява споделяне на голямо количество код между клиента и сървъра и улеснява разработката и поддръжката. Например компоненти, технологии за рендиране, templating, data binding, MVC концепции и други framework компоненти се ползват и на сървъра (в Node.js) и на клиента (в уеб браузъра). Пример за такива isomorphic JS frameworks са Meteor, RendrDerbyJS и други. Счита се, че това ново течение JS приложение е бъдещето на full-stack разработката.

Embedded JavaScript

JavaScript за вградени системи (embedded systems) и микроконтролери е технология за изпълнение на JavaScript код с тънък JS engine като JerryScript. С нейна помощ микроконтролери и мини-компютри като Arduino, Raspberry Pi и Tessel се програмират директно с JavaScript, а чрез специализирани библиотеки и API извиквания може да се управляват входове и изходи с общо предназначение (GPIO), да се четат и пишат аналоговите и цифровите входове и изходи на контролера (digital & analog IO pins), и да се взаимодейства със сензори и управлява закачена за контролера периферия.

Как да стана JavaScript Developer?

Философията на СофтУни за обучение по професия “JavaScript разработчик” комбинира изграждане на солидни умения по програмиране и развиване на алгоритмично мислене с фундаментални знания от компютърните науки и софтуерното инженерство и съвременни JavaScript и уеб технологии за изграждане на модерни софтуерни приложения. Учебният план за JS програмисти обхваща:

  • Фундаментални софтуерни умения: отлично ниво на програмиране, сорс контрол системи, базови структури от данни, функционално програмиране, ООП, качествен код, бази данни, уеб стандарти, екипно взаимодействие с Git и GitHub, автоматизация на тестването с unit testing и mocking, test-driven development (TDD).
  • Практически технологии за уеб front-end с JavaScript: платформа HTML5, уеб front-end технологии HTML, CSS, JavaScript и jQuery, работа с AJAX и REST базирани услуги с JSON и HTTP и създаване на Single-Page-Apps с JS frameworks като Angular и React.
  • Технологии за JS сървърна разработка (back-end): MEAN стек, MERN стек, програмиране за Node.js, използване на полулярни npm пакети, уеб framework Express.js, използване на нерелационна база данни MongoDB и build на JS проекти с Grunt, Babel и Webpack и други JS server-side frameworks и JS библиотеки.

Обучението по JavaScript разработка в СофтУни е много сериозно и задълбочено и изгражда всички базови познания и практически умения за успешен кариерен старт за junior позиции в софтуерната индустрия.

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

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

  1. Натрупване на умения по програмиране – те не зависят от езика за програмиране.
  2. Развиване на алгоритмично мислене – не зависи от езика за програмиране.
  3. Овладяване на основите на компютърните науки и софтуерното инженерство – не зависи от езика за програмиране.
  4. Овладяване на JavaScript технологиите за разработка на софтуер.
  5. Трупане на практически опит с JavaScript технологиите.

Натрупване на умения по програмиране

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

Научете се да програмирате (натрупайте coding skills) с езика JavaScript и подходяща среда за разработка като WebStormVisual Studio Code, Sublime Text или другo IDE. Това включва работа с променливи и данни, писане на условни конструкции (проверки) и цикли, използване на функции, работа с масиви и списъци, обработка на символни низове (стрингове), работа с обекти, композиция на обекти, работа с модули и класове, работа със среда за разработка (IDE) и други базови програмни умения.

Можете да започнете безплатно с курсовете по основи на програмирането в СофтУни. Те са изключително подходящи за напълно начинаещи, както и за по-напреднали, защото систематично поднасят знанията и ви въвличат в много практика. Може да стартирате с език за програмиране по избор: JavaScript, C#, Java, Python, C++, PHP или друг.

Развиване на алгоритмично мислене

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

Алгоритмичното мислене, известно още като “математическо мислене” и “инженерно мислене“, е донякъде свързано с овладяване на базови математически концепции, които са мостът между математиката и програмирането: работа с координатни системи, използване на вектори и матрици, разбиране на поведението на дискертни и недискретни математически функции, концепцията “чиста функция”, крайните автомати и state machines, базови понятия от комбинаторика и статистика, понятията “алгоритъм”, “сложност на алгоритъм”, математическо моделиране на проблеми от практиката и други. Всичко това се изучава когато теоретичните постановки, известни от математиката, се използват и приложат на практика чрез решаване на задачи и писане на работещи алгоритми.

Най-добрият начин да се развие алгоритмично мислене е чрез решаване на стотици задачи по програмиране с алгоритмичен характер. В СофтУни алгоритмичното мислене се изгражда за няколко месеца чрез поредица от задълбочени курсове като “Фундаментални концепции на програмирането“, в които се решават голям брой практически задачи по програмиране с нарастваща сложност.

Овладяване на основите на компютърните науки и софтуерното инженерство

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

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

  • Базови познания по структури от данни и алгоритми: сложност на алгоритъм, работа с линейни структури данни (списък, стек, опашка), дървовидни структури (дървета  графи) и хеш-таблици (речници), алгоритми за търсене и сортиране, рекурсия, комбинаторика, графи, динамично оптимиране и други. Изучават се подробно в курсовете по структури от данни и алгоритми.
  • Работа със сорс контрол системи (хранилища за сорс код) като Git, SVN и платформи за колаборация като GitHub, клониране на repository, промяна, commit и push на промените, решаване на конфликти и merge, работа със задачи (issue tracking), упправление на задачи с инструументи като GitHub Issues и Trello. Изучават се в курса по фундаментални основи и принципи на програмирането.
  • Функционално програмиране, работа с функции, функционални изрази, ламбда функции, функции от по-висок ред, функции, връщащи функция, затваряне на състояния с closure, IIFE, revealing module и други. Изучават се в курсовете по JavaScript основи и JavaScript за напреднали.
  • Обектно-ориентирано програмиране (ООП) и шаблони за дизайн, работа с класове и интерфейси, капсулация на данни (encapsulation), наследяване на класове и имплементация на интерфейси, абстракция и полиморфизъм, хвърляне и хващане на изключения, работа с OO design patterns. Изучават се частично в курса JavaScript за напреднали, тъй като в JavaScript няма пълна имплементация на обектно-ориентирано програмиране и някои ООП техники се нуждаят от адаптация.
  • Компонентно тестване (unit testing), mocking (подпъхване на функционалност) и работа с инструменти за unit testing като Mocha и Chai и концепцията за писане на тестовете преди кода (test-driven development – TDD). Изучават се в курса JavaScript за напреднали.
  • Бази от данни и SQL, създаване на релационна схема чрез моделиране на таблици и връзки (E/R diagram), писане на SQL заявки за CRUD операции чрез DML заявките, извличане на данни с SQL SELECT, селекция, съединения на таблици (joins), филтриране с WHERE, сортиране, групиране, обединения, вмъкване на данни с SQL INSERT, изтриване на данни с SQL DELETE, модификация на данни с SQL UPDATE, работа с DDL заявки, съхранени процедури и функции на ниво база. Релационните бази данни се изучават в курса по бази данни с фокус върху MySQL / MariaDB. Нерелационните бази данни (NoSQL databases) се изучават в курса по сървърно JS програмиране “Node.js & Express.js основи“.
  • Уеб приложния и HTTP – познания в тази област са необходими на всеки съвременен софтуерен разработчик, тъй като болшинството от мрежовата комуникация между приложенията работи с HTTP протокола и web sockets. Концепциите за изграждане на уеб приложения и REST услуги са също основополагащи за практическата софтуерна разработка. Такива фундаментални знания и умения за уеб разработка се изграждат в няколко тренинга в СофтУни: курсът “Софтуерни технологии“, курсът по “Front-End JavaScript разработка” и курса по “сървърно JS програмиране с Node.js и Express.js“.
  • Front-end разработка, работа с HTML, CSS и JavaScript са сред редовните изисквания в обявите за работа за софтуерни инженери, програмисти и разработчици. Тези умения се развиват в курса по HTML и CSS и в курсовете за JavaScript front-end разработка.
  • Софтуерни архитектури, client-server, MVC – това са концептуални познания от софтуерното инженерство. Те се изучават на начално ниво в курса “Софтуерни технологии” и се развиват в технологичните курсове за създаване на single-page apps “Front-End разработка с Angular” и “Front-End приложения с React и Redux” чрез много практика.
  • За развитието на един софтуерен инженер, от плюс са уменията за работа с операционни системи и мрежи, познаване на хардуера, уменията за мрежово програмиране, разбиране на парадигмите на конкурентно (паралелно) програмиране, използване на процеси и методологии за разработка на софтуер (например Scrum и agile development), разбиране на концепции и инструменти за софтуерно тестване, разбиране на принципи и инструменти за софтуерен дизайн и много други. Такива знания и умения се развиват с изборните курсове в СофтУни.

Овладяване на JavaScript технологиите за разработка на софтуер

Освен фундаменталните знания за програмирането и софтуерното инженерство, един JavaScript разработчик трябва да научи на добро ниво и най-използваните JavaScript технологии:

  • Технологии за Front-End JavaScript разработка: изучават се доста сериозно в СофтУни по време на професионалните модули от професията “JavaScript Developer”. В учебния план са включени задълбочени курсове по уеб сайтове с HTML и CSS, курс по “JavaScript front-end разработка” и курсове по “Single Page Apps разработка с Angular” и “Front-End разработка с React и Redux“.
    • Учи се и се практикува сериозно изграждането на уеб сайтове и уеб-базиран потребителски интерфейс с HTML и CSS, основни HTML тагове, структура на HTML документ, семaнтичен HTML, работа с HTML елементи и атрибути, div, span, параграфи, таблици, форми и контроли, CSS селектори и правила за разположение (layout) и стилизиране, CSS препроцесори Sass и Less и CSS framework Bootstrap, концепции за адаптивен дизайн, progressive enhancement и graceful degradation.
    • Изучава се изграждането на уеб front-end приложения с client-side MVC frameworks, които извличат данни от back-end REST service с AJAX или друга комуникация и рендират Web UI от JSON данни чрез шаблони, компоненти или друга UI технология. Използват се jQuery и JS библиотеки за front-end JS разработка, ООП в JavaScript, closures, шаблони за модул и revealing module и библиотеки за JS-базиран user interface като React и AngularJS.
  • Технологии за Back-End JavaScript разработка: сървърните JS технологии се изучават се доста сериозно в СофтУни. Обученията включват няколко курса за концепциите на JavaScript (JavaScript основи и JavaScript за напреднали) и практически курс по сървърно JS програмиране с Node.js, Express.js и MongoDB“.
    • Изучават се всички по-масово използвани инструменти от сървърната JavaScript разработка (пакетни системи npm и bower, билд системи grunt, gulp и Webpack, транспилация с Babel, unit testing с mocha и chai, TDD, качество на кода и проверка с ESLint, код генерация с Yeoman и други).
    • По време на курсовете студентите създават RESTful back-end APIs и server-side Web apps с JavaScript, Node.js, Express.js и NoSQL база данни MongoDB, ползват template engines като Jade и Mustache, рендират динамичен HTML и подават данни в JSON и други формати.
  • Технологии за Full-Stack JavaScript разработка: при обучението на JS разработчици в СофтУни комбинираме JS front-end с JS-back-end разработка и така се курсистите получават задълбочени познания по MEAN stack и MERN stack за full-stack JS development.

Трупане на практически опит с JavaScript технологиите

Трупането на опит става най-вече след започване на работа в софтуерна или ИТ фирма. Опит се трупа с бачкане, с много години бачкане, с много правене, бъркане, поправяне, писане, пренаписване и учене чрез практика.

Поради недостиг на време в университета се правят малки проекти с учебна цел и това е съвсем нормално, защото никой не иска да учи 10 години, за да излезе с 10-годишен опит от университета. Учебните проекти дават начален опит, но не могат да ви направят опитни JavaScript инженери. Колкото и да се стараете, след едно добро обучение можете да излезете на ниво програмист-стажант или най-много junior developer.

Как да стана JavaScript програмист?

Да се върнем на основния въпрос: “Как да стана JavaScript програмист?“, “Как да науча JavaScript front-end, JS back-end и JS full-stack технологиите и да започна работа като junior JS developer?“, “Как да науча JavaScript програмирането“? Имам кратък и наистина добър отговор:

Запиши JavaScript професията в СофтУни

Не е лесно, нито бързо, нито става без учене, но ако инвестираш в себе си сериозно, за 1-2 години, стъпка по стъпка, ще получиш добро начално JavaScript ниво като за работа като JavaScript програмист. Успех!

Професия PHP Developer: как се става PHP уеб разработчик?

$
0
0

PHP Web DevelopmentДнес ще разкажа подробно за професията “PHP Web Developer” и как се става PHP програмист, с какви софтуерни технологии работят PHP разработчиците и как можем да се научим на PHP уеб разработка, съвременни уеб технологии, работа с бази данни и PHP frameworks, от къде да стартираме и какво да учим, стъпка по стъпка. По-конкретно ще обясня за:

  • Езикът PHP и екосистемата около него.
  • Платформата LAMP (Linux + Apache + MySQL +  PHP / Python / Perl).
  • PHP MVC Frameworks и как да пишем организирано и структурирано сериозни PHP проекти.
  • Връзката между PHP уеб разработката и HTML5 платформата и уеб front-end технологиите (HTML, CSS, JavaScript, DOM, AJAX, REST, JSON, WebSockets, JS библиотеки, JS frameworks и други).

Ще обясня за стъпките през които минава всеки един начинаещ програмист, за да овладее професията “PHP Developer” и защо няма особена разлика дали учиш PHP, JavaScript, C#, Python или друг език за програмиране, както и кои са фундаменталните умения на софтуерните разработчици, които не зависят от конкретните езици и технологии за разработка. Ще изясня защо трябва да преминем през основните етапи от изучаването на професията PHP Web Developer: овладяване на програмирането (без значение от езика), развиване на алгоритмично мислене, натрупване на базови познания по компютърни науки и софтуерно инженерство, развиване на технологични умения с PHP, MySQL, HTML, CSS и JS и трупане на практически опит с PHP уеб разработката.

Професия “PHP уеб разработчик” – видео

Гледайте видеото от Facebook включването на живо със Светлин Наков по темата “Как се става PHP програмист?“, в което всичко описано в тази статия е обяснено в по-големи детайли, с примери от практиката и въпроси на живо:

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

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

PHP програмистите са програмисти, които използват езика PHP и технологиите от PHP екосистемата (платформата LAMP, базата данни MySQL, front-end уеб технологиите HTML, CSS, JavaScript и различни JS библитеки) за разработка на уеб сайтове, уеб приложения и уеб базиран софтуер. По-конкретно, PHP разработчиците:

  • Пишат PHP-базирани уеб приложения.
    • PHP програмистите изграждат уеб базиран софтуер с PHP, MySQL, различни PHP библиотеки и PHP технологични рамки (frameworks).
  • Пишат PHP back-end.
    • PHP програмистите изграждат сървърна логика за съхранение и обработка на данни с PHP, MySQL, ORM технологии за опростен достъп до бази данни и други сървърни PHP технологии и технологични рамки (frameworks), разработват REST услуги (RESTful back-end services) и сървърни компоненти с PHP.
  • Създават уеб front-end с HTML + CSS + JS и JS библиотеки и технологии.
    • По природа PHP е сървърна (back-end) технология и се използва заедно с front-end технологии като HTML, CSS и JS, които визуализират данните на уеб приложението в уеб браузъра.
    • Затова всички PHP програмисти владеят до голяма степен съвременни технологии за изграждане на уеб потребителски интерфейси като HTML, CSS, JavaScript, AJAX, REST, WebSockets и JavaScript библиотеки като jQuery, Angular и React.
  • Използват инструменти за PHP разработка като:
    • Инструменти за инспектиране на MySQL бази данни като phpMyAdmin и MySQL Workbench.
    • Linux операционна система и Cron задачи, уеб сървър Apache, сървър за проксиране на уеб трафик nginx, инструменти за виртуализация като Docker и Vagrant.
    • Пакетни системи PEAR и Composer за включване на PHP библиотеки, дебъгер Xdebug, frameworks за unit testing като PHPUnit.
  • Използват среди за разработка (IDE) като:
    • Eclipse for PHP, PhpStorm, Netbeans for PHP, Aptana Studio, Zend Studio, Vim, Sublime Text, Atom, Visual Studio Code и други.
  • Имплементират комуникация между клиентски front-end приложения и сървърен PHP код с AJAX и REST, по web socket или с друга съвременна технология за комуникация в уеб среда.
  • Ползват бази данни като MySQL, PostgreSQL, MongoDB и други през PHP интерфейси като PDO и MySQLi и обектно-релационни ORM технологии за PHP като Eloquent ORM, Doctrine, Yii Active Record и други.

Еволюцията на PHP

PHP започва като прост скриптов език за създаване на динамични уеб страници. Поради своята леснота за работа и леснота за научаване и в комбинация с широката поддръжка от уеб хостинг компаниите, PHP лека полека се утвърждава като лидерът при езиците за сървърна уеб разработка, който задвижва половината Интернет сайтове в света (в добрите си години), най-вече чрез платформи за CMS и e-commerce като WordPress, Drupal, Joomla, OpenCart, Magento.

Към 2017 г. PHP задвижда 37% от топ милион сайтовете в Интернет (източник).

В началото (преди PHP 5) езикът PHP е процедурно-ориентиран и това му донася славата на “езика на мазачите” заради често срещана в миналото лоша организация и затруднена поддръжка на PHP кода, с липса на стандарти, с огромен брой безразборно разпръснати функции в глобалния scope, с безразборно навързани PHP файлове, без свястна Unicode поддръжка и с много проблеми, особено при по-големи проекти.

В по-новите си версии (след PHP 5) езикът PHP става съвременен обектно-ориентиран език, силно повлиян от Java и поддържа всички съвременни ООП парадигми (namespaces, класове, интерфейси, обекти, абстракция, наследяване, полиморфизъм, капсулация, изключения и други).

В най-новите си версии (с идването на PHP 6 и PHP 7) постепенно в PHP е въведена възможността за типизация на данните (type hinting), която значително намалява грешките и подобрява организацията на кода.

С по-новите версии на PHP в езика навлиза и функционално програмиране, което дава повече гъвкавост на разработчиците: first-class functions (функцията като стойност на променлива), higher-order functions (функцията като аргумент на друга функция), анонимни функции и closures (затваране на състояние във функция).

PHP започва като интерпретеруем език, но в последните години за него са разработени и виртуални машини като HHVM и оптимизации в Zend Engine (най-разпространената PHP импелемнтация), които многократно ускоряват производителността му.

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

В съвременния си вид PHP вече не е език за мазачи и може да се ползва за добре структурирани, качествени уеб проекти, използващи добри практики за разработка и качествен код, базирани на модерни парадигми за разработка, не отстъпващи на лидери в сървърното програмиране като Java, C# и Node.js. Научете повече за кадърното използване на PHP технологиите от общността “PHP: The Right Way“.

Факти за PHP. Знаете ли, че?

  • Стартовата заплата на един junior PHP developer е 800-1000 лв. чисто.
  • PHP и MySQL са в топ 5 на най-търсените технологии в софтуерната индустрия в България.
  • PHP технологиите задвижват 1/3 от Интернет сайтовете в целия свят света.
  • Езикът PHP се използва от над 5 милиона програмисти в целия свят.
  • PHP технологиите се ползват за разработка на уеб приложения и back-end системи.

Какво е PHP?

PHP е съвременен скриптов език за сървърно уеб програмиране с отворен код, който съчетава процедурно, обектно-ориентирано и функционално програмиране. Предназначен е за сървърна (back-end) уеб разработка: за писане на уеб приложения и уеб услуги.

PHP е много широко използван език и задвижва стотици милиони сайтове по целия свят, най-вече около open-source екосистемата на WordPress, Drupal, Magento, OpenCart и десетки други уеб CMS системи, уеб магазини, форуми, блогове и други уеб софтуери.

PHP разработчиците обикновено използват базата данни с отворен код MySQL (или по-навият й вариант MariaDB), за да съхраняват данните на уеб приложението във вид на таблици с редове и колони (използвайки релационна схема). Връзката между PHP и MySQL става директно с интерфейса MySQLi или PDO. Понякога вместо MySQL се ползва друга база данни, например PostgreSQL, Oracle, SQL Server, SQLite или MongoDB.

Какво е LAMP?

Платформата LAMP е традиционната среда за изпълнение на PHP уеб приложения. LAMP означава Linux + Apache + MySQL + PHP и представлява стек от back-end технологии за уеб разработка с PHP.

  • Linux като операционна система изпълнява в себе си уеб сървъра Apache (или уеб прокси сървъра nginx в комбинация с няколко Apache инстанции).
  • При постъпване на HTTP заявка Apache сървърът изпълнява заявения от заявката PHP скрипт (чрез модула mod_php извиквайки PHP интерпретатора).
  • PHP скриптът обработва клиентската HTTP заявка, изпълнява някаква бизнес логика, тегли или записва някакви данни от MySQL базата данни и връща обратно към клиента HTML страница с резултата от зявката.
  • Всичко това се комбинира с традиционни Linux инструменти и софтуери като cron jobs, sendmail/ qmail / друг пощенски сървър, Linux потребители и процеси, Linux файлова система и права на файловете, Linux отдалечен достъп (ftp, ssh, scp, nfs), криптосистема OpenSSL, DNS сървър bind, уеб прокси сървър nginx, Apache .htaccess конфигурация, mod_rewrite правила и други.

Рядко за production среда и по-често за development среда се използва и Windows варианта на LAMP, който се нарича XAMPP (Apache + MariaDB + PHP + Perl за Windows).

Какво е PHP MVC Framework?

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

Болшинството PHP frameworks използват MVC (Model-View-Controller) като архитектурна парадигма за разделяне на кода на изгледи (които визуализират данните и потребителския интерфейс), контролери (които изпълняват заявките, променят базата данни и подготвят данните за визуализация) и модели (които съхраняват данните в база данни).

Всички сериозни PHP разработки ползват някакъв PHP framework. Това може да е както framework написан от програмиста (custom PHP framework), така и някой добре известен индустриален open-source PHP MVC framework (което е по-масовия случай) като Symfony, Laravel, CodeIgniter, Yii, Zend, Slim, Phalcon, CakePHP или друг.

Най-използваните към 2017 г. в практиката PHP frameworks са Symfony и Laravel.

  • Symfony е мощен PHP web development framework с отворен код, който се грижи за всички аспекти на PHP уеб разработката: налага използване на MVC архитектура, задава структура на PHP приложението, занимава се с routing на HTTP заявките, намиране и изпълнение на контролерите, извикване на изгледите и рендиране на HTML страницата през Twig темплейти, достъп до базата данни през Doctrine ORM технологията, работа с форми, валидация и прехвърляне на данни, автентикация и управление на потребители, управление на сесия, кеширане и много други. Върху Symfony са изградени широко използване PHP приложения като форумната система phpBB и CMS системата за управление на съдържание Drupal.
  • Laravel е съвременен PHP framework за уеб разработка с отворен код, който се грижи за всички аспекти на PHP уеб разработката: налага използване на MVC архитектура, задава структура на PHP приложението, занимава се с routing на HTTP заявките, намиране и изпълнение на контролерите, извикване на изгледите и рендиране на HTML страницата през Blade темплейти, достъп до базата данни през Eloquent ORM технологията, работа с форми, валидация и прехвърляне на данни, автентикация и управление на потребители, управление на сесия, кеширане и много други. Сравнително нова технология, направена по съвременни парадигми и технологии, близка по концепции до ASP.NET MVC.

Защо да уча PHP технологии (език PHP, LAMP, Symfony / Laravel, HTML, CSS и JavaScript)?

Ако искате да се захванете с програмирането сериозно и да го направите своя професия, трябва да положите доста труд: да овладеете умението да пишете програмен код и да натрупате опит с програмирането, да развиете алгоритмично мислене чрез решаване на стотици практически задачи и да изучите поне една платформа за разработка (например HTML5, Java, PHP, .NET или друга).

Защо да се захващате точно с PHP екосистемата (с технологии като PHP, MySQL, Symfony, Laravel, HTML, CSS и JS), а не с някоя друга платформа за софтуерна разработка?

  • Езикът PHP е най-използваният съвременен скриптов език за сървърно уеб програмиране в света, насочен към разработка на back-end и уеб приложения. Той комбинира процедурно, обектно-ориентирано и функционално програмиране. PHP е лесен за учене, с добра документация и има огромна общност от разработчици около него.
  • Огромно търсене на PHP програмисти. Предлагането на работа за PHP developers е сред топ 5 на най-използваните и най-търсените в софтуерната индустрия в България. Заради дигитализацията на бизнеса и ежедневието, нуждата от уеб разработчици постоянно нараства. И понеже PHP е сред най-предпочитаните платформи за уеб разработка (поради своята леснота на използване, технологична зрялост и огромна общност от специалисти), расте и нуждата от PHP разработчици. Погледнете в сайтовете за обяви за работа за PHP програмисти, за да се уверите колко много отворени позиции има за PHP разработчици.

Как да стана PHP програмист?

Философията на СофтУни за обучение по професия “PHP уеб разработчик” комбинира изграждане на солидни умения по програмиране и развиване на алгоритмично мислене с фундаментални знания от компютърните науки и софтуерното инженерство и съвременни PHP и уеб технологии за изграждане на модерни уеб приложения. Учебният план обхваща:

  • Фундаментални софтуерни умения: отлично ниво на програмиране, работа със сорс контрол системи и екипно взаимодействие с Git и GitHub, обектно-ориентирано и функционално програмиране, бази данни и стандарти за уеб разработка;
  • Практически уеб back-end технологии с PHP: LAMP стек, Linux, Apache уеб сървър, език PHP, сървър за бази данни MySQL и език за заявки SQL, ORM системи за опростен достъп до данни, и PHP MVC frameworks за улеснена разработка на уеб приложения и REST услуги, инструменти за unit testing, управление на PHP пакети и инструменти за PHP разработка;
  • Технологии за уеб front-end разработка: HTML5 платформа, HTML и CSS за уеб потребителски интерфейс, JavaScript, jQuery, AJAX, REST и JSON за динамично съдържание.

Обучението за PHP програмисти в СофтУни е много сериозно и задълбочено и изгражда всички базови познания и практически умения за успешен кариерен старт за junior позиции в софтуерната индустрия.

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

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

  1. Натрупване на умения по програмиране – не зависят от езика за програмиране.
  2. Развиване на алгоритмично мислене – не зависи от езика за програмиране.
  3. Овладяване на основите на компютърните науки и софтуерното инженерство – не зависи от езика за програмиране.
  4. Овладяване на PHP, MySQL и уеб front-end технологиите за разработка на софтуер.
  5. Трупане на практически опит с PHP уеб разработката.

Натрупване на умения по програмиране

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

Научете се да програмирате (натрупайте coding skills) с езика PHP, JavaScript или друг и подходяща среда за разработка като PhpStormWebStormVisual Studio Code, Sublime Text или другo IDE. Това включва работа с променливи и данни, писане на условни конструкции (проверки) и цикли, използване на функции, работа с масиви и списъци, обработка на символни низове (стрингове), работа с асоциативни масиви и обекти, работа с файлове и скриптове, дефиниране на класове, работа със среда за разработка (IDE) и други базови програмни умения.

Можете да започнете безплатно с курсовете по основи на програмирането в СофтУни. Те са изключително подходящи за напълно начинаещи, както и за по-напреднали, защото систематично поднасят знанията и ви въвличат в много практика. Може да стартирате с език за програмиране по избор: PHP, JavaScript, C#, Java, Python, C++ или друг.

Развиване на алгоритмично мислене

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

Алгоритмичното мислене, известно още като “математическо мислене” и “инженерно мислене“, е донякъде свързано с овладяване на базови математически концепции, които са мостът между математиката и програмирането: работа с координатни системи, използване на вектори и матрици, разбиране на поведението на дискертни и недискретни математически функции, концепцията “чиста функция”, крайните автомати и state machines, базови понятия от комбинаторика и статистика, понятията “алгоритъм”, “сложност на алгоритъм”, математическо моделиране на проблеми от практиката и други. Всичко това се изучава когато теоретичните постановки, известни от математиката, се използват и приложат на практика чрез решаване на задачи и писане на работещ код.

Най-добрият начин да се развие алгоритмично мислене е чрез решаване на стотици задачи по програмиране с алгоритмичен характер. В СофтУни алгоритмичното мислене се изгражда за няколко месеца чрез поредица от задълбочени курсове като “Фундаментални концепции на програмирането“, в които се решават голям брой практически задачи по програмиране с нарастваща сложност.

Овладяване на основите на компютърните науки и софтуерното инженерство

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

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

  • Работа със сорс контрол системи (хранилища за сорс код) като Git, SVN и платформи за колаборация като GitHub, клониране на repository, промяна, commit и push на промените, решаване на конфликти и merge, работа със задачи (issue tracking), упправление на задачи с инструменти като GitHub Issues и Trello. Изучават се в курса по фундаментални основи и принципи на програмирането, както и по време на екипните проекти (teamwork) в СофтУни.
  • Обектно-ориентирано програмиране (ООП) и шаблони за дизайн, работа с класове и интерфейси, капсулация на данни (encapsulation), наследяване на класове и имплементация на интерфейси, абстракция и полиморфизъм, хвърляне и хващане на изключения, работа с OO design patterns. Изучават се в курса “PHP основи” и донякъде в курса JavaScript за напреднали (тъй като JS имплементтира ООП по свой специфичен  начин).
  • Функционално програмиране, работа с функции, функционални изрази, ламбда функции, функции от по-висок ред, функции, връщащи функция, затваряне на състояния с closure, IIFE, revealing module и други. Изучават се в курсовете по JavaScript основи и JavaScript за напреднали и донякъде в курса “PHP основи“.
  • Бази от данни и SQL, създаване на релационна схема чрез моделиране на таблици и връзки (E/R diagram), писане на SQL заявки за CRUD операции чрез DML заявките, извличане на данни с SQL SELECT, селекция, съединения на таблици (joins), филтриране с WHERE, сортиране, групиране, обединения, ползване на SQL функции, вмъкване на данни с SQL INSERT, изтриване на данни с SQL DELETE, модификация на данни с SQL UPDATE, работа с DDL заявки. Изучават се в курса “PHP основи“, където е отделено сериозно внимание на базата данни MySQL (или по-новият й вариант MariaDB).
  • Уеб приложения и HTTP – познания в тази област са необходими на всеки съвременен софтуерен разработчик, тъй като болшинството от мрежовата комуникация между приложенията работи с HTTP протокола и WebSockets. Концепциите за изграждане на уеб приложения и REST услуги са също основополагащи за практическата софтуерна разработка. Такива фундаментални знания и умения за уеб разработка се изграждат в няколко тренинга от PHP професията в СофтУни: курсът “Софтуерни технологии“, курсът “PHP MVC Frameworks” и курсът по “Front-End JavaScript разработка”.
  • Front-end разработка, работа с HTML, CSS и JavaScript са сред редовните изисквания в обявите за работа за софтуерни инженери, програмисти и разработчици. Тези умения се развиват на добро ниво в курса по HTML и CSS и в курсовете за JavaScript front-end разработка.
  • Софтуерни архитектури, client-server, MVC – това са концептуални познания от софтуерното инженерство. Те се изучават на начално ниво в курса “Софтуерни технологии” и се развиват в технологичните курса за създаване на PHP уеб приложения “PHP MVC Frameworks” и курса за JS приложения “JavaScript front-end разработка” чрез много практика.
  • Базови познания по структури от данни и алгоритми: сложност на алгоритъм, работа с линейни структури данни (списък, стек, опашка), дървовидни структури (дървета  графи) и хеш-таблици (речници), алгоритми за търсене и сортиране, рекурсия, комбинаторика, графи, динамично оптимиране и други. Изучават се подробно в курсовете по структури от данни и алгоритми.
  • Компонентно тестване (unit testing), mocking (подпъхване на функционалност) и работа с инструменти за unit testing като Mocha и Chai и концепцията за писане на тестовете преди кода (test-driven development – TDD). Изучават се в курса JavaScript за напреднали.
  • За развитието на един софтуерен инженер, от плюс са уменията за работа с операционни системи и мрежи, познаване на хардуера, уменията за мрежово програмиране, разбиране на парадигмите на конкурентно (паралелно) програмиране, използване на процеси и методологии за разработка на софтуер (например Scrum и agile development), разбиране на концепции и инструменти за софтуерно тестване, разбиране на принципи и инструменти за софтуерен дизайн и много други. Такива знания и умения се развиват с изборните курсове в СофтУни, както и при натруване на опит по време на екипните проекти.

Овладяване на PHP технологиите за уеб разработка и уеб front-end технологиите

Освен фундаменталните знания за програмирането и софтуерното инженерство, един PHP разработчик трябва да научи на добро ниво и най-използваните PHP технологии и уеб front-end технологиите:

  • Технологии за PHP уеб разработка: изучават се доста сериозно в СофтУни по време на професионалните модули от професията “PHP Developer”, най-вече в курсовете “PHP основи” и “PHP MVC Frameworks“:
    • PHP технологиите включват владеене на езика PHP, базата данни MySQL, пакетния мениджър Composer, различни PHP библиотеки, интерфейси към бази данни като PDO и MySQLi, обектно-ориентирано програмиране с PHP, обработка на HTTP заявки и генериране на HTTP отговори, работа с HTTP cookies и сесии, обработка на данни, изпратени от HTML форми и други.
    • Работа с PHP frameworks за разработка на уеб приложения като Symfony и Laravel. Това включва инсталация и настройка на framework, създаване на проект, създаване на изгледи (views) и ползване на templating engines като Twig и Jade, писане на контролери с GET заявки за визуализация на данни и уеб формуляри и POST заявки за изпращане на форми и имплементиране на CRUD операции, работа с форми, валидация и въвеждане на данни, писане на модели (data models), работа с бази данни през ORM engine, контрол на достъпа, автентикация, потребители и авторизация и много други типични функционалности за уеб приложенията.
  • Технологии за уеб front-end разработка:
    • В учебния план за PHP професията са включени и задълбочени курсове по уеб сайтове с HTML и CSS, сериозни курсове по концепциите на JavaScript езика и практически технологичен курс по “JavaScript front-end разработка”.
    • Учи се и се практикува сериозно изграждането на уеб сайтове и уеб-базиран потребителски интерфейс с HTML и CSS, основни HTML тагове, структура на HTML документ, семaнтичен HTML, работа с HTML елементи и атрибути, div, span, параграфи, таблици, форми и контроли, CSS селектори и правила за разположение (layout) и стилизиране и други.
    • Изучава се изграждането на уеб front-end приложения, които извличат данни от back-end REST service с AJAX или друга комуникация и рендират Web UI от JSON данни чрез шаблони, компоненти или друга UI технология. Използват се jQuery и JS библиотеки за front-end JS разработка, ООП в JavaScript, closures, шаблони за модул и revealing module, promises и библиотеки за JS-базиран user interface.
  • По време на PHP курсовете студентите създават RESTful back-end APIs и server-side Web apps с PHP и PHP MVC frameworks като Symfony и Laravel, ползват template engines като Twig, Jade и Mustache, рендират динамичен HTML или подават данни към клиента в JSON и други формати.

Трупане на практически опит с PHP и уеб технологиите

Трупането на опит става най-вече след започване на работа в софтуерна или ИТ фирма. Опит се трупа с бачкане, с много години бачкане, с много правене, бъркане, поправяне, писане, пренаписване и учене чрез практика.

Поради недостиг на време в университета се правят малки проекти с учебна цел и това е съвсем нормално, защото никой не иска да учи 10 години, за да излезе с 10-годишен опит от университета. Учебните проекти дават начален опит, но не могат да ви направят опитни PHP уеб програмисти. Колкото и да се стараете, след едно добро обучение можете да излезете на ниво програмист-стажант или най-много junior developer.

Как да стана PHP програмист?

Да се върнем на основния въпрос: “Как да стана PHP програмист?“, “Как да науча PHP програмирането и уеб front-end технологиите и да започна работа като junior PHP developer?“, “Как да науча PHP програмирането“? Имам кратък и наистина добър отговор:

Запиши PHP професията в СофтУни

Не е лесно, нито бързо, нито става без учене, но ако инвестираш в себе си сериозно, за 1-2 години, стъпка по стъпка, ще получиш добро начално PHP и front-end ниво като за започване на работа като PHP програмист. Успех!

Viewing all 99 articles
Browse latest View live