Menu

Nakov.com logo

Thoughts on Software Engineering

Професия Java Developer: как се става Java програмист? Как да науча Java? От къде да започна с Java?

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

Професия “Java програмист” – видео

Гледайте видеото от 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, използвайки dependency injection и inversion-of-control (IoC) container. С програмния модел 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, MariaDB, 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 (или MariaDB) и език 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 програмист. Успех!

Previews (50,258), Views (1,025), Comments (2)

2 Responses to “Професия Java Developer: как се става Java програмист? Как да науча Java? От къде да започна с Java?”

  1. 411.com says:

    411.com

    Професия Java Developer: как се става Java програмист? Как да науча Java? От къде да започна с Java? | Svetlin Nakov’s Blog

  2. It’s a pity you don’t have a donate button! I’d without a doubt
    donate to this fantastic blog! I suppose for now i’ll settle
    for bookmarking and adding your RSS feed to my
    Google account. I look forward to brand new updates and will talk about
    this blog with my Facebook group. Chat soon!

RSS feed for comments on this post. TrackBack URL

LEAVE A COMMENT