Предговор

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

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

Колкото и да ви се струва невероятно, базовите принципи на писане на компютърни програми не са се променили съществено през последните 15 години. Езиците за програмиране се променят, технологиите се променят, средствата за разработка се развиват, но принципите на програмирането си остават едни и същи. Когато човек се научи да мисли алгоритмично, когато се научи инстинктивно да разделя проблемите на последовател­ност от стъпки и да ги решава, когато се научи да подбира подходящи структури от данни и да пише качествен програмен код, тогава той става програмист. Когато придобиете тези умения, лесно можете да научите нови езици и различни технологии, като уеб програмиране, бази от данни, HTML, XML, SQL и още стотици други.

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

За кого е предназначена тази книга?

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

Ако никога не сте писали компютърни програми, не се притеснявайте. Винаги има първи път. В тази книга ще ви научим на програмиране от нулата. Не очакваме да знаете и можете нещо предварително. Достатъчно е да имате компютърна грамотност и желание да се занимавате с програ­миране. Останалото ще го прочетете от тази книга.

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

Ако път имате опит с програмирането, за да прецените дали тази книга е за вас, я разгледайте подробно и вижте дали са ви познати всички теми, които сме разгледали. Обърнете особено внимание на главите "Структури от данни (линейни, дървовидни, хеш-таблици)", "Принципи на обектно-ориентираното програми­ране", "Как да решаваме задачи по програми­ране?" и "Качествен програмен код". Много е вероятно дори ако имате няколко години опит, да не владеете добре работата със структури от данни, концепциите на обектно-ориентираното програмиране (включи­телно UML и design patterns) и да не познавате добрите практики за писане на качествен програмен код. Това са много важни теми, които не се срещат във всяка книга за програмиране!

Не са необходими начални познания

В тази книга не очакваме от читателите да имат предварителни знания по програмиране. Не е необходимо да сте учили информационни технологии или компютърни науки, за да четете и разбирате учебния материал. Книгата започва от нулата и постепенно ви въвлича в програми­рането. Всички технически понятия, които ще срещнете, са обяснени преди това и не е нужно да ги знаете от друго място. Ако не знаете какво е компила­тор, дебъгер, среда за разработка, променлива, масив, цикъл, конзола, символен низ, структура от данни, клас или обект, не се притеснявайте. Ще научите всички тези понятия и много други и ще се научите да ги ползвате непрестанно в ежедневната си работа. Просто четете книгата пос­ледова­телно.

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

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

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

clip_image001

Не си правете илюзии, че можете да станете програмисти, без да научите поне малко английски език! Това е просто наивно очакване. Ако не знаете английски, започнете да четете технически текстове и си вадете непознатите думи и ги заучавайте. Ще видите, че техническият английски се учи лесно и не отнема много време.

Какво обхваща тази книга?

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

На какво няма да ви научи тази книга?

Тази книга няма да ви даде професията "софтуерен инженер"! Тази книга няма да ви научи да ползвате цялата Java платформа, да работите с бази от данни, да правите динамични уеб сайтове и да боравите с прозоречен графичен потребителски интерфейс. Няма да се научите да пишете сериозни софтуерни приложения като Skype, Firefox или MS Word. За това са нужни много, много години работа.

От книгата няма да се научите софтуерно инженерство и работа в екип и няма да можете да се подгот­вите за работа по реални проекти в софтуерна фирма. За да се научите на всичко това ще ви трябват още няколко книги и допълнителни обучения, но не съжалявайте. Правите правилен избор като започвате от основите на програмирането вместо директно от уеб приложения. Това ви дава шанс да станете добър програмист, който разбира технологиите в дълбочина. След като усвоите основите на програмирането, ще ви е много по-лесно да четете за бази данни и уеб приложения и ще разбирате това, което четете, много по-лесно, отколкото, ако се захванете директно със SQL и JavaServer Faces или ASP.NET.

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

clip_image001[1]

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

Как е представена информацията?

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

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

Всички автори ясно съзнават, че примерният сорс код е едно от най-важните неща в една книга за програ­ми­ране. Именно поради тази причи­на текстът е съпроводен с много, много примери, илюстрации и картинки.

Няма как, когато всяка глава е писана от различен автор, да няма разминаване между стиловете на изказ и между качеството на отделните глави. Някои автори вложиха много старание (месеци наред) и много усилия, за да станат перфектни техните глави. Други не вложиха доста­тъчно усилия и затова някои глави не са така хубави и изчерпателни като другите. Не на последно място опитът на авторите е различен: някои програмират професионално от 1-2 години, докато други – от 15 години насам. Няма как това да не се отрази на качеството, но ви уверяваме, че всяка глава е минала редакция и отговаря поне минимално на високите изисквания на водещия автор на книгата – Светлин Наков.

Какво е Java?

Вече обяснихме, че тази книга не е за Java, а за програмирането като концепция и основни принципи. Ние използваме езика и платформата Java само като средство за писане на програмен код и не наблягаме върху спецификите на езика. Настоящата книга може да бъде намерена и във варианти за други езици като C# и C++, но разликите не са съществени.

Все пак, нека разкажем с няколко думи какво е Java.

clip_image001[2]

Java e съвременен език за програмиране и платформа за разработка и изпълнение на софтуерни приложения.

Някои си мислят, че Java е само език за програмиране, други го бъркат с JavaScript и си мислят, че служи за раздвижване на статични уеб сайтове, а трети се чудят дали Java е сорт кафе или остров в Индонезия. За да разсеяме съмненията, ще разкажем с няколко думи за езика и платфор­мата Java, а в следващата глава ще научите за тях много повече.

Езикът Java

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

Java е език от високо ниво, който прилича на C# и C++ и донякъде на езици като Delphi, VB.NET и C. Java програмите са обектно-ориентирани. Те представляват съвкупност от дефиниции на класове, които съдържат в себе си методи, а в методите е разположена програмната логика. Повече детайли за това какво е клас, какво е метод и какво представляват Java програмите ще научите в следващата глава.

В днешно време Java е един от най-популярните езици за програмиране. На него пишат милиони разработчици по цял свят. Най-големите световни софтуерни корпорации като IBM, Oracle и SAP базират своите решения на Java платформата и използват Java като основен език за разработка на своите продукти. Сред "големите" Java не се ползва единствено от Microsoft, тъй като те разра­ботват и поддържат собствена платформа, подобна на Java платформата, наречена .NET Framework и език подобен на Java, наречен C#.

Езикът Javaе първоначално разработен и поддържан от Sun Microsystems, но през 2006 г. Java плат­формата става проект с отворен коди в момента се поддържа и развива от световната Java общностсъвместно със Sun. Благодарение на отворения код популярността на Java постоянно се увеличава и броят Java разработчици непрекъснато расте.

Езикът Java се разпро­странява заедно със специална среда, върху която се изпълнява, наре­чена Java Runtime Environment (JRE). Тази среда включва т. нар. Java виртуална машина (JVM) и пакет стандартни библиотеки, предоставящи базова функционалност. Благодарение на нея Java програмите са преносими и след като веднъж бъдат написани, след това почти без промени могат да работят на стотици хардуерни платформи и операционни системи.

Java платформата

Езикът Java не се разпространява самостоятелно, а е част от платформата Java. Java платформата най-общо представлява среда за разработка и изпълнение на програми, написани на езика Java. Тя се състои от езика Java, виртуалната машина на Java (JVM), която изпълнява Java програ­мите и от съвкупност от стандартни библиотеки и инструменти за разра­ботка, като например компилаторът, който превръща Java програ­мите в разбираем за виртуалната машина междинен код (Java bytecode).

За изпълнението на програми, написани на Java, е необходимо да имате инсталиран т. нар. Java Runtime Enviroment (JRE). Това е специален софтуер, част от Java платформата, който съдържа виртуалната машина и стандартните Java библиотеки и се поддържа за различни хардуерни платформи и операционни системи. JRE е софтуер, който крайният потребител инсталира еднократно върху компютъра си, за да може да работи с Java. JRE не е стандартна част от Windows и трябва да се инсталира допълнително, точно както “Adobe Flash Player" се инсталира допъл­нително във вашия уеб браузър, за да отваряте уеб сайтове с Flash.

За разработката на Java приложения е необходимо да имате инсталиран Java Development Kit (JDK). Това е пакет инструменти, с които вие като програмисти можете да пишете Java програми, да ги компилирате и изпълнявате. JDK не е необходим на крайния потребител, а само на Java разработчиците. Крайните потребители ползват JRE.

Защо Java?

Има много причини да изберем езика Java за нашата книга. Той е съвременен език за програмиране, широкоразпространен, използван от милиони програмисти. Същевременно Java е изключително прост и лесен за научаване език (за разлика от C и C++). Нормално е да започнем от език, който е подходящ за начинаещи и се ползва много в практиката. Именно такъв език избрахме – лесен и много популярен, език, който се ползва широко в индустрията от най-големите и сериозни фирми.

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

Започвайки с програмирането от езика и платформата Java вие поемате по един много перспективен път. Ако отворите някой сайт с обяви за работа за програмисти, ще се убедите, че търсенето на Java специалисти е огромно и е по-голямо в сравнение с всякакви други езици и платформи (примерно C#, PHP или C++).

За добрия програмист езикът, на който пише, няма съществено значение, защото той умее да програмира. Каквито и езици и технологии да му трябват, той бързо ги овладява. Нашата цел е не да ви научим на Java, а да ви научим на програмиране! След като овладеете основите на програ­мирането и се научите да мислите алгоритмично, можете да научите и други езици и ще се убедите колко много приличат те на Java, тъй като програмирането се гради на принципи, които почти не се променят с годините и тази книга ви учи точно на тези принципи.

Примерите са върху Java 6 и Eclipse 3.4

Всички примери в книгата се отнасят за версия 6 на езика и платформата Java, която към момента на публикуване на книгата е последната. Всички примери за използване на средата за разработка Eclipse се отнасят за версия 3.4 на продукта, която също е последна към момента на публи­куване на книгата.

Разбира се, знанията, които придобивате за работа с Java 6 и Eclipse 3.4, ще можете да прилагате и за програмиране с други версии на Java и Eclipse, както и за работа с други езици за програмиране и други среди за разработка, защото всички те си приличат малко или много. Важното е да се научите да програмирате!

Как да четем тази книга?

Четенето на тази книга трябва да бъде съпроводено с много, много практика. Няма да се научите да програмирате, ако не го правите! Все едно да се научите да плувате от книга, без да пробвате. Няма начин! Колкото повече пишете по задачите след всяка глава, толкова повече ще научите от книгата.

Всичко, което прочетете тук, трябва да изпробвате сами на компютъра. Иначе няма да научите нищо. Примерно, когато прочетете за Eclipse и как да си направите първата проста програмка, трябва непременно да си изтеглите и инсталирате Eclipse и да пробвате да си направите някаква програмка. Иначе няма да се научите! На теория винаги е по-лесно, но програмирането е практика. Запомнете това и правете упражненията от книгата. Те са внимателно подбрани – хем не са много трудни, за да не ви откажат, хем не са много лесни, за да ви мотивират да приемете решава­нето им като предизвикателство.

clip_image001[3]

Четенето на тази книга без практика е безсмислено! Трябва да отделите за писане на програми много повече време, отколкото отделяте да четете текста.

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

Не пропускайте упражненията!

На края на всяка глава има сериозен списък със задачи за упражнения. Не ги пропускайте! Без упражненията нищо няма да научите. След като прочетете дадена глава, трябва да седнете на компютъра и да пробвате примерите, които сте видели в книгата. След това трябва да се хванете и да решите всички задачи. Ако не можете да решите всички задачи, трябва поне да се помъчите да го направите. Ако нямате време, трябва да решите поне първите няколко задачи от всяка глава. Не преминавайте напред, без да решавате задачите след всяка глава! Просто няма смисъл. Задачите са малки реални ситуации, в които прилагате прочетеното. В практиката, един ден, когато станете програмисти, ще решавате всеки ден подобни задачи, но по-големи и по-сложни.

clip_image001[4]

Непременно решавайте задачите за упражнения след всяка глава от книгата! Иначе рискувате нищо да не научите и просто да си загубите времето.

Колко време ще ни трябва за тази книга?

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

Ако искате да прочетете, разберете, научите и усвоите цялостно и в дъл­бочина целияучебния материал от тази книга, ще трябва да инвес­тирате поне 2 месеца целодневно или поне 4-5 месеца, ако четете и се упраж­нявате по малко всеки ден. Това е минималното време, за което можете да усвоите в дълбочина основните на програмирането.

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

Упражненията съдър­жат около 220 задачи с различна трудност. За някои от тях ще ви трябват по няколко минути, докато за други ще ви трябват по няколко часа (ако въобще успеете да ги решите без чужда помощ). Това означава, че ще ви трябва повече от месец по цял ден да се упражнявате или да го правите по малко в продължение на няколко месеца.

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

Защо фокусът е върху структурите от данни и алгоритмите?

Настоящата книга наред с основните познания по програмиране ви учи и на правилно алгоритмично мислене и работа с основните структури от данни в програмирането. Структурите от данни и алгоритмите са най-важните фундаментални знания на един програмист! Ако ги овладеете добре, след това няма да имате никакви проблеми да овладеете която и да е софтуерна технология, библиотека, framework или API. Именно на това разчитат и най-сериозните софтуерни фирми в света, когато наемат служители.

Интервютата за работа в Google

На интервютата за работа като софтуерен инженер в Google в Цюрих 100% от въпросите са съсредоточени върху структури от данни, алго­ритми и алгоритмично мислене. На такова интервю могат да ви накарат да реализирате на бяла дъска свързан списък (вж. главата "Линейни структури от данни") или да измис­лите алгоритъм за запълване на растерен многоъгълник (зададен като GIF изображение) с даден цвят (вж. метод на вълната в главата "Дървета и графи"). Изглежда Google ги интересува да наемат хора, които имат алгоритмично мислене и владеят основните структури от данни и базовите компютърни алгоритми. Всички технологии, които избраните кандидати ще използват след това в рабо­тата си, могат бързо да бъдат усвоени. Разбира се, не си мислете, че тази книга ще ви даде всички знания и умения, за да преминете успешно интервю за работа с Google. Знанията от книгата са абсолютно необхо­дими, но не са достатъчни. Те са само първите стъпки.

Интервютата за работа в Microsoft

На интервютата за работа като софтуерен инженер в Microsoft в Дъблин голяма част от въпросите са съсредоточени върху структури от данни, алго­ритми и алгоритмично мислене. Например могат да ви накарат да обърнете на обратно всички думи в даден символен низ (вж. главата "Символни низове") или да реализирате топологично сортиране в неори­ентиран граф (вж. главата "Дървета и графи"). За разлика от Google в Microsoft питат и за много инженерни въпроси, свързани със софтуерни архитектури, паралелна обработка (multithreding), писане на сигурен код, работа с много големи обеми от данни и тестване на софтуера. Настоя­щата книга далеч не е достатъчна, за да кандидатствате в Microsoft, но със сигурност знанията от нея могат да са ви полезни за една голяма част от въпросите.

Поглед към съдържанието на книгата

Нека сега разгледаме накратко какво ни предстои следващите глави на книгата. Ще разка­жем по няколко изречения за всяка от тях, за да знаете какво ви очаква да научите.

Глава 1. Въведение в програмирането

В главата "Въведение в програмирането" ще разгледаме основните термини от програмирането и ще напишем първата си прог­рама. Ще се запознаем с това какво е програмиране и каква е връзката му с компю­трите и програмните езици. Накратко ще разгледаме основните етапи при писането на софтуер. Ще въведем езика Java и ще се запознаем с Java платформата и Java технологиите. Ще разгледаме какви помощни сред­ства са ни необходими, за да можем да програмираме на Java. Ще използваме Java, за да напишем първата си програма, ще я компилираме и изпълним както от командния ред, така и от среда за разработка Eclipse. Ще се запознаем с документацията на Java, която позволява по-ната­тъшно изследване на възможностите на езика.

Глава 2. Примитивни типове и променливи

В главата "Примитивни типове и променливи" ще разгледаме примитив­ните типове и променливи в Java –какво представляват и как се работи с тях. Първо ще се спрем на типовете данни – целочислени типове, реални типове с плаваща запетая, булев тип, символен тип, обектен тип и стрингов тип. Ще продължим с това какво е променлива, какви са нейните характеристики, как се декларира, как се присвоява стойност и какво е инициализация на променлива. Ще се запознаем и с другото наимено­вание на променливата, а по-точно –"идентификатор". Към края на главата ще се спрем на литералите.

Глава 3. Оператори и изрази

В главата "Оператори, изрази" ще се запознаем с операторите и действи­ята, които те извършват върху различните типове данни. Ще разясним приоритета на операторите и групите оператори според броя на аргумен­тите, които приемат и това какво действие извършват. След това ще разгледаме преобразуването на типове, защо е нужно и как да се работим с него. Накрая ще разясним какво представляват изразите и как се използват.

Глава 4. Вход и изход от конзолата

В главата "Вход и изход от конзолата" ще се запознаем с конзолата. Ще обясним какво пред­ставлява тя, кога и как се използва, какви са принци­пите на пове­чето програмни езици за достъп до конзо­лата. Ще се запоз­наем с някой от възможностите на Java за взаимодей­ствие с потребителя. Ще разгледаме основните потоци за входно-изходни операции System.in, System.out и System.err, класът Scanner и използ­ването на формати­ращи низове за отпечатване на данни в различни формати.

Глава 5. Условни конструкции

В главата "Условни конструкции" ще разгледаме условните конструкции в Java, чрез които можем да изпълняваме различни действия в зависимост от някакво условие. Ще обясним синтаксиса на условните оператори: if и if-else с подходящи примери и ще разясним практичес­кото приложение на опера­тора за избор switch. Ще обърнем внимание на добрите прак­тики, които е нужно да бъдат следвани, с цел постигане на по-добър стил на програмиране при изпол­зването на вложени и други видове условни конструкции.

Глава 6. Цикли

В главата "Цикли" ще разгледаме конструкциите за цикли, с които можем да изпълняваме даден фрагмент програмен код многократно. Ще разгле­даме как се реализират повторения с условие (while и do-while цикли) и как се работи с for-цикли. Ще дадем примери за различните възмож­ности за дефиниране на цикъл, за начина им на конструиране и за някои от основните им приложения. Накрая ще разгледаме как можем да използ­ваме няколко цикъла един в друг (вложени цикли).

Глава 7. Масиви

В главата "Масиви" ще се запознаем с масивите като средства за обра­ботка на поредица от еднакви по тип елементи. Ще обясним какво представляват масивите, как можем да декларираме, съз­даваме и инициа­лизираме масиви. Ще обърнем внимание на едномерните и много­мерните масиви. Ще разгледаме различни начини за обхождане на масив, четене от стандартния вход и отпечатване на стандартния изход. Ще дадем много примери за задачи, които се решават с използването на масиви и ще ви покажем колко полезни са те.

Глава 8. Бройни системи

В главата "Бройни системи" ще разгледаме начините на работата с различни бройни системи и представянето на числата в тях. Повече внимание ще отделим на представянето на числата в десетична, двоична и шестнаде­сетична бройна система, тъй като те се използват масово в компютърната техника и в програмирането. Ще обясним и начините за кодиране на числовите данни в компютъра и видовете кодове, а именно: прав код, обратен код, допълнителен код и двоично-десетичен код.

Глава 9. Методи

В главата "Методи" ще се запознаем подробно с това какво е метод и защо се използват методи. Ще разберем как се декларират методи и какво е сигнатура на метод. Ще научим как да създадем собствен метод и съответно как да го използваме (извикваме) в последствие. Ще разбе­рем как можем да използваме параметри в методи и как да върнем резултат от метод. Накрая ще препоръчаме някои утвърдени практики при работата с методи.

Глава 10. Рекурсия

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

Глава 11. Създаване и използване на обекти

В главата "Създаване и използване на обекти" ще се запоз­наем накратко с основните понятия в обектно-ориентираното програми­ране – класовете и обектите – и ще обясним как да използваме класовете от стандартните библиотеки на Java. Ще се спрем на някои често използ­вани системни класове и ще видим как се създават и използват техни инстанции (обекти). Ще разгледаме как можем да осъществяваме достъп до полетата на даден обект, как да извикваме конструктори и как да работим със статичните полета в класовете. Накрая ще се запознаем с понятието пакети – какво ни помагат, как да ги включваме и използваме.

Глава 12. Обработка на изключения

В главата "Обработка на изключения" ще се запознаем с изключенията в Java и обектно-ориентираното програмиране. Ще се научим как да ги прихващаме чрез конструкцията try-catch, как да ги предаваме на предходните методи чрез throws и как да хвърляме соб­ствени или прихванати изключения. Ще дадем редица примери за използ­ването им. Ще разгледаме типовете изключения и йерархията, която образуват. Накрая ще се запознаем с предимствата при използва­нето на изключения и с това как най-правилно да ги прилагаме в кон­кретни ситуации.

Глава 13. Символни низове

В главата "Символни низове" ще се запознаем със символ­ните низове: как са реализирани те в Java и по какъв начин можем да обработваме текстово съдържание. Ще прегледаме различни методи за манипулация на текст; ще научим как да извличаме поднизове по зададени параметри, как да търсим за ключови думи, както и да отделяме един низ по разделители. Ще се запознаем с методи и класове за по-елегантно и стриктно формати­ране на текстовото съдържание на конзо­лата, с различни методики за извеждане на числа, а също и с извежда­нето на отделни компоненти на текущата дата. Накрая ще предоставим полезна информация за регу­лярните изрази и ще научим по какъв начин да извличаме данни, отговарящи на определен шаблон.

Глава 14. Дефиниране на класове

В главата "Дефиниране на класове" ще разберем как можем да дефини­раме собствени класове и кои са елементите на класовете. Ще се научим да декларираме полета, конструктори и свойства в класовете. Ще припомним какво е метод и ще разширим знанията си за модифи­катори и нива на достъп до полетата и методите на класовете. Ще разгле­даме особеностите на конструкторите и подробно ще обясним как обек­тите се съхраняват в динамичната памет и как се инициализират полетата им. Накрая ще обясним какво представляват статичните елементи на класа – полета (включително константи), свойства и методи и как да ги ползваме.

Глава 15. Текстови файлове

В главата "Текстови файлове" ще се запознаем с основните похвати при работа с текстови файлове в Java. Ще разясним какво е това поток, за какво служи и как се ползва. Ще обясним какво е текстов файл и как се чете и пише в текстови файлове. Ще демонстрираме и обясним добрите практики за прихващане и обра­ботка на изключения, възникващи при работата с файлове. Разбира се, всичко това ще онагледим и демон­стрираме на практика с много примери.

Глава 16. Линейни структури от данни

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

Глава 17. Дървета и графи

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

Глава 18. Речници, хеш-таблици и множества

В главата "Речници, хеш-таблици и множества" ще разгле­даме някои по-сложни структури от данни като речници и множества, и техните реализации с хеш-таблици и балан­сирани дървета. Ще обясним в детайли какво представляват хеширането и хеш-таблиците и защо са толкова важни в програмирането. Ще дискути­раме понятието "колизия" и как се полу­чават колизиите при реализация на хеш-таблици и ще пред­ложим различни подходи за разрешаването им. Ще разгледаме абстракт­ната структура данни "множество" и ще обясним как може да се реали­зира чрез речник и чрез балансирано дърво. Ще дадем при­мери, които илю­стрират приложението на описаните структури от данни в практиката.

Глава 19. Структури от данни – съпоставка и препоръки

В главата "Структури от данни – съпоставка и препоръки" ще съпоставим една с друга структурите данни, които разгледахме до момента, по отношение на скоростта, с която извършват основните опера­ции (доба­вяне, търсене, изтриване и т.н.). Ще дадем конкретни препо­ръки в какви ситуации какви структури от данни да ползваме. Ще обясним кога да предпочетем хеш-таблица, кога масив, кога динамичен масив, кога множество, реализирано чрез хеш-таблица и кога баланси­рано дърво. Всички тези структури имат вградена в Java платфор­мата импле­мен­тация. От нас се иска единствено да можем да преценяваме кога коя структура да ползваме, за да пишем ефективен и надежден програмен код. Именно на това е посветена тази глава – на ефек­тивната работа със структури от данни.

Глава 20. Принципи на обектно-ориентираното програмиране

В главата "Принципи на обектно-ориентираното програмиране" ще се запознаем с принципите на обектно-ориен­тираното програми­ране: насле­дяване на класове и имплементиране на интерфейси, абстрак­ция на данните и поведението, капсулация на данните и скриване на информа­ция за имплементацията на класовете, полиморфизъм и вирту­ални методи. Ще обясним в детайли принципите за свързаност на отговор­ностите и функционално обвързване (cohesion и coupling). Ще опишем накратко как се извършва обектно-ориентирано моделиране и как се създава обектен модел по описание на даден бизнес проблем. Ще се запознаем с езика UML и ролята му в процеса на обектно-ориентираното моделиране. Накрая ще разгледаме съвсем накратко концепцията "шаб­лони за дизайн" и ще дадем няколко типични примера за шаблони, широко използвани в практиката.

Глава 21. Качествен програмен код

В главата "Качествен програмен код" ще разгледаме основ­ните правила за писане на качествен програмен код. Ще бъде обърнато внимание на именуването на елементите от програмата (променливи, методи, класове и други), прави­лата за форматиране и подреждане на кода, добрите прак­тики за изграж­дане на висококачествени методи и принципите за качествена докумен­тация на кода. Ще бъдат дадени много примери за качествен и некаче­ствен код. Ще бъдат описани и официал­ните конвен­ции от Sun за писане на Java, както и JavaBeans специфика­цията. В процеса на работа ще бъде обяснено как да се използва средата за програмиране, за да се автомати­зират някои операции като форма­тиране и преработка на кода.

Глава 22. Как да решаваме задачи по програмиране?

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

Глави 23, 24, 25. Примерни теми от изпити по програмиране

В главите "Примерни теми от изпити по програмиране" ще разгледаме условията и ще предложим решения на девет примерни задачи от три примерни изпита по програмиране, проведени на 30.09.2005 г., на 8.04.2006 г. и на 11.12.2005 г. При решаването им ще приложим на практика описаната методология в темата "Как да решаваме задачи по програмиране".

За използваната терминология

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

-     По-голямата част от техническата документация за Java е на английски език (повечето книги и в частност официалната докумен­тация) и затова е много важно читателите да знаят английския еквивалент на всеки използван термин.

-     Много от използваните термини не са пряко свързани с Java и са навлезли отдавна в програмисткия жаргон от английски език (напри­мер "дебъгвам", "компилирам" и "плъгин"). Тези термини ще бъдат изписвани най-често на кирилица.

-     Някои термини (например "framework" и "deployment") са трудно преводими и трябва да се използват заедно с оригинала в скобки. В настоящата книга на места такива термини са превеждани по раз­лични начини (според контекста), но винаги при първо срещане се дава и оригинални­ят термин на английски език.

Как възникна тази книга?

Често се случва някой да ме попита от коя книга да започне да се учи на програмиране. Срещат се ентусиазирани младежи, които искат да се учат да програмират, но не знаят от къде да започнат. За съжаление и аз не знам коя книга да им препоръчам. Сещам се за много книги за Java – и на български и на английски, но никоя от тях не учи на програмиране. Няма много книги (особено на български език), които да учат на концепциите на програмирането, на алгоритмично мислене, на структури от данни. Има книги за начинаещи, които учат на езика Java, но не и на основите на прог­рамирането. Има и няколко хубави книги за програмиране на бъл­гарски език, но са вече остарели. Знам няколко такива книги за C и Паскал, но не и за Java или C#. В крайна сметка няма хубава книга, която горещо да препоръчам на всеки, който иска да се захване с програ­миране от нулата.

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

Историята на тази книга

Историята на тази книга е дълга и интересна. Тя започва с въведителните курсовете по програмиране в Национална академия по разработка на софтуер (НАРС) през 2005 г., когато под ръководството на Светлин Наков за тях е изготвено учебно съдържание за курс "Въведение в програмира­нето със C#". След това то е адаптирано към Java и така се получава курсът "Въведение в програмирането с Java". През годините това учебно съдържание претърпява доста промени и подобрения и достига до един изчистен и завършен вид.

Към стартирането на проекта (август 2008) курсът "Въведе­ние в програ­ми­рането с Java" се преподава в Националната академия по разработка на софтуер по учебни материали с обем 720 PowerPoint слайда, заедно с около 110 демонстрационни примера и над 200 задачи за упражнения, разделени в 15 отделни теми. Това е учебен материал по основи на програмирането, който съдържа най-важните концепции, с които един начинаещ трябва да стартира. Това е материал, който преработван и редак­тиран десетки пъти, добил вече зрялост, добре систематизиран и с проверена ефективност. Защо да не го ползваме като основа за съдържанието на книгата? Ние точно това направихме – решихме да напишем книгата ръководейки се от разработените учебни материали, като добавим от себе си нашия опит и допълним с още информация, примери и интересни задачи.

Събиране на авторския екип

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

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

На първата среща на екипа учебното съдържание претърпява малко промени. По-обемните глави се разделят на няколко отделни части (например структурите от данни), възникват няколко нови глави (напри­мер работа с изключения) и се определят автори и редактори за всяка глава. Идеята е проста: всеки да напише по 1 глава от книгата и накрая да ги съединим. За да няма голяма разлика в стиловете, форматирането и начина на представяне на информацията авторите приемат единно ръководство на писателя, в което строго се описват всички правила за писане. В крайна сметка всеки си има тема и писането започва.

За проекта се създава сайт за съвместна работа в екип в Google Code на адрес http://code.google.com/p/introjavabook/, където стои последната версия на всички текстове и материали по книгата.

Задачите и сроковете

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

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

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

Всички автори подценяват сериозно обема на работата и това е основно причината за забавянето на нейната поява. Авторите си мислят, че писането става бързо, но истината е, че за една страница текст (четене, писане, редактиране, преправяне и т.н.) отива средно по 1 час работа, та дори и повече. Сумарно за написването на цялата книга са вложени около 800-1000 работни часа труд, разпределени сред всички автори и редак­тори, което се равнява на над 6 месеца работа на един автор на пълен работен ден. Понеже всички автори пишеха в свободното си време, рабо­тата вървеше бавно и отне 4-5 месеца.

Авторският колектив

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

Идеята за участие на толкова много автори е добре проверена, тъй като по подобен начин са написани вече няколко други книги (като "Програ­миране за .NET Framework"). Въпреки, че отделните глави от книгата са писани от различни автори, те следват единен стил и високо качество. Всички глави са добре структурирани, с много заглавия и подза­главия, с много и подходящи примери, с добър стил на изказ и еднакво форма­тиране.

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

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

Следва кратко представяне на авторите (по азбучен ред).

Борис Вълков

Борис Вълков е софтуерен инженер във фирма CSC (www.csc.com). Той е преподавател във Факултета по математика и информатика на Пловдивски университет "Паисий Хилендарски", където е завършил своите бакала­върска и магистърска степени. Има опит с разработката на висококачест­вен софтуер в областта на застраховането и здравеопазването. Борис е сертифициран разработчик, използвал широк спектърът от технологии, предимно свързани със C/C++ и Java. Неговите професионални интереси включват софтуерни архитектури, дизайн и процеси за ефективно управление на софтуерни проекти. Можете да се свържете с него по e-mail: [email protected].

Веселин Колев

Веселин Колев е старши софтуерен инженер, ръководил различни екипи и проекти. Като програмист има опит с разнообразни технологии, част от които са C/C++, .NET и Java. Проектите, по които е работил, включват големи уеб базирани системи, системи за машинен превод, икономически софтуер и др. Интересите му обхващат разработването на съвременни приложения от всякакъв характер, в които се държи на качеството. Веселин има опит като лектор в Националната академия по разработка на софтуер в областта на .NET технологиите. В момента той следва Компю­търни науки във Факултета по математика и информатика на Софийски университет "Св. Климент Охридски". Можете да се свържете с него по e-mail: [email protected]. Неговият личен блог е достъпен от адрес: http://veskokolev.blogspot.com.

Владимир Цанев (Tsachev)

Владимир Цанев е софтуерен разработчик в Национална академия по разработка на софтуер (НАРС). Интересите му са свързани най-вече с open-source технологиите, използвани с Java платформата.Участвал е в разработката на проекти в областта на Интернет услугите, големи и малки информационни системи за управление и други.

Владимир е лектор в Националната академия по разработка на софтуер (НАРС), където води различни курсове свързани с разработката на софтуерни продукти с Java.

Завършил е бакалавърска степен по специалност "Приложна математика" във Факултета по математика и информатика на Софийски Университет "Св. Климент Охридски". По време на следването си там води упражнения по програмиране с Java. В момента следва магистратура със специалност "Софтуерни технологии" в същия факултет.

Личната му уеб страница се намира на адрес http://info.tsachev.org/.

Данаил Алексиев

Данаил Алексиев е студент в трети курс в Техническия Университет – София, специалност “Компютърни системи и технологии". Работи като програмист във фирма Insight Technologies (www.insight-bg.net) и лектор към Национална академия по разработка на софтуер (НАРС). Основните му професионални интереси са насочени към уеб програмирането. Данаил е основен участник в Java проектите в учебната лаборатория Unidevelop към ТУ-София. Можете да се свържете с него по e-mail: [email protected].

Лъчезар Божков

Лъчезар Божков е студент, последен курс, в Технически Университет – София, специалност ИИ на английски език. Той има значителен опит в работата с .NET Framework, Visual Studio и Microsoft SQL Server. Работил е като програмист и преподавател за Национална академия по разработка на софтуер (НАРС) и ИТ отдела на Кока-Кола Ботлърс, Ирландия, Дъблин. Можете да се свържете с Лъчезар по e-mail: [email protected].

Лъчезар Цеков

Лъчезар Цеков е софтуерен инженер и изследовател в областта на семантичните технологии във фирма Ontotext Lab (www.ontotext.com). Завършил е Технически Университет София специалност "Комуникационна Техника и Технологии". Лъчезар е работил в няколко фирми като старши програмист и има поглед над цялостния производствен цикъл на софту­ерните продукти. Основната експертиза на Лъчезар е в проектирането и реализацията на  големи корпоративни приложения базирани на Java и SOA технологиите. Лъчезар е голям привърженик на правилното използ­ване на принципите на обектно ориентираното програмиране и прилага­нето на подходящите структури от данни. За връзка можете да използвате неговия e-mail: [email protected].

Марин Георгиев

Марин Георгиев е SAP консултант в Coca Cola HBC IT Shared services. Получава своята бакалавърска степен в Технически университет - София след частичното си следване и разработване на дипломната си работа в Италия, в Universita degli Studi di Pavia. Завършил е Националната акаде­мия за разработване на софтуер (НАРС) и е сертифициран като Sun Certified Java Programmer. Професионалните интереси на Марин са насо­чени към уеб-базираните Java технологии –EJB, Seam, JSF и внедряване на SAP ERP решения. Можете да се свържете с Марин Георгиев на e-mail: [email protected].

Марио Пешев

Марио Пешев е софтуерен разработчик във фирма Nonillion (www.nonillion.eu), Sun сертифициран Java инженер. Той участва активно в писането на технически статии и материали, разработка на външни проекти като freelance developer и водене на курсове по програмиране с Java. В момента Марио следва Информатика в Нов български университет. Професионалните му интереси включват работа с иновативни технологии, информационна сигурност, софтуерни архитектури и дизайн. Личният блог на Марио е http://peshev.net/blog.

Мариян Ненчев

Мариян Ненчев е софтуерен разработчик в Insight Technologies (www.insight-bg.net) и лектор в Национална академия по разработка на софтуер (academy.devbg.org). Водил е редица курсове за обучение и пре­квалифициране на софтуерни специалисти в ИТ индустрията.Той е студент, последен курс, във Факултета по математика и информа­тика на Софийски университет "Св. Кли­мент Охридски", специалност информа­тика. Професионалните му инте­реси са насочени към разработката на enterprise приложения с Java технологиите, .NET платформата и информа­ционната сигурност в Web среда. Може­те да се свържете с Мариян по e-mail: [email protected].

Михаил Стойнов

Михаил Стойнов е магистър "Стопанско Управление" в Софийски Универ­ситет. Той е завършил е Информатика отново в Софийски Университет. В момента е софтуерен разработчик в голяма българска компания.

От няколко години Михаил е хоноруван преподавател във Факултета по математика и информатика като досега е водил част от лекциите на "Съвременни Java технологии", "Програми­ране за .NET Framework", "Раз­работка на Java уеб приложения", "Шаблони за дизайн" и "Качествен програмен код". Активно е участвал в създаването на учебните материали за курсовете. Водил е софтуерен курс в Нов Български Университет.

Михаил е участвал като автор в книгата "Програмиране за .NET Framework". Той е водил множество лекции свързани с Java и .NET Framework на различни конференции и семинари. Участвал е като лектор в акаде­мичните дни на Майкрософт.

Михаил е водил IT обучения в няколко компании в България и една в чужбина. Бил е лектор на курсове по Java, Java EE, SOA, Spring в Нацио­налната академия по разработка на софтуер (НАРС).

Михаил е работил в офисите на компании като Siemens, HP, EDS в Холандия, Германия и други държави, като там е натрупал сериозен опит както за софтуерното изкуство, така и за качественото писане на софтуер чрез участието си в големи софтуерни проекти.

Личният му блог е достъпен на адрес: http://mihail.stoynov.com/blog/.

Николай Василев

Николай Василев е завършил бакалавърската си степен във Факултета по математика и информатика на Софийски университет "Св. Климент Охрид­ски", специалност "Математика и информатика". В момента е сту­дент към магистърските програми на Софийски университет "Св. Климент Охрид­ски", специалност "Уравнения на математическата физика и приложения" и университета в Малага, Испания, специалност "Софтуерно инженерство и изкуствен интелект".

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

Той е сертифициран Sun програмист за Java 2 Platform, SE 5.0.

В периода 2002-2005 г е бил асистент към курсовете по програмиране водени от доц. Божидар Сендов, "Увод в програмирането" и "Структури от данни и програмиране".

Интересите му са свързани с проектирането и имплементацията на софтуер и участие в академични дейности.

За връзка с него можете да използвате неговата електронна поща: nikolay.vasilev@gmail.com.

Николай Недялков

Николай Недялков е президент на Асоциация за информационна сигурност, технически директор напортала за електронни разплащания и услуги eBG.bg и бизнес консултант в други компании. Николай е професионален разработчик на софтуер, консултант и преподавател с дългогодишен опит. Той е автор на редица статии и публикации и лектор на множество конференции и семинари в областта на софтуерните технологии и информационната сигурност. Преподавателският му опит се простира от асистент по "Структури от данни в програмирането", "Обектно-ориентирано програмиране със C++" и “Visual C++" до лектор в курсовете "Мрежова сигурност", “Сигурен програмен код", "Интернет програмиране с Java", “Конструиране на качествен програмен код", "Програмиране за платформа .NET" и "Разработка на приложения с Java". Интересите на Николай са концентрирани върху техническата и бизнес страната на информационната сигурност, Java и .NET технологиите и моделирането и управлението на бизнес процеси в големи организации. Николай има бакалавърска и магистърска степен от Факултета по математика и информатика на Софийски университет "Св. Климент Охридски". Като ученик е дългогодишен състезател по програмиране, с редица призови отличия.

Петър Велев

Петър Велев е софтуерен инженер и изследовател. Завършил е Техни­чески университет в София по специалност Информационни техно­логии към факултета по "Компютърни системи и управление". Петър е работил в различни фирми като младши програмист на Java. Понастоящем е докторант в Института по информационни технологии при БАН – София. Основните му интереси са в областта на софтуерното инженерство и обектно-ориентираното програмиране. Той проявява интерес и в областите на динамичните онтологии, многоагентните системи и структу­рите от данни. За връзка с Петър можете да използвате неговия e-mail: [email protected].

Радослав Иванов

Радослав Иванов е софтуерен инженер в Европейската организация за ядрени изследвания (CERN) – www.cern.ch. Завършил е Факултета по математика и информатика на Софийски университет "Св. Климент Охридски" и има сериозен професионален опит в разработката на софтуер. Той е лектор в редица курсове  в Софийски университет "Св. Климент Охридски", частни компании и организации и е съавтор на книгата "Програмиране за .NET Framework". Сред професионалните му интереси са Java технологиите, .NET платформата, архитектура и дизайн на софтуерни системи и др.

Румяна Топалска

Румяна Топалска е софтуерен разработчик във фирма Fadata (www.fadata.bg). Завършила е своята бакалавърска степен в немския факултет на Техническия университет в гр. София, специалност "Компю­търни системи и технологии" и в момента следва своята магистратура в същия университет. Основните професио­нални интереси на Румяна са в уеб програмирането, уеб услугите и интеграцията. Може да се свържете с нея на mail: [email protected].

Стефан Стаев

Стефан Стaев е софтуерен разработчик във фирма ICB (www.icb.bg). Занимава се с разработката на уеб базирани системи върху .NET платфор­мата. В момента той следва Информатика във Факултета по математика и информатика на Софийски университет "Св. Климент Охридски". Профе­сионалните му интереси са в областта на уеб технологиите. Можете да се свържете с него по e-mail: [email protected].

Светлин Наков

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

Светлин Наков има 20+ години опит като софтуерен инженер, препо­давател, консултант, ръководител на проекти и предприемач. Разработвал е уеб базирани системи с .NET, Java, Oracle и други технологии.

В момента Светлин Наков вдъхновява и задвижва Софтуерния универ­ситет (СофтУни http://softuni.bg) – най-мащабният център за практи­ческо обучение на софтуерни инженери в България, където обучава хиляди млади хора на програмиране, разработка на софтуер, компютърни науки, софтуерни технологии и работа в екип и има дава успешен кариерен старт.

Наков е автор на 7 книги за програмиране и софтуерни технологии, C# и Java. Публикувал е десетки научни и технически статии и разработки. Водил е стотици обучения в сферата на софтуерните технологии и редовно изнася презентации на технологични конференции и семинари за програмиране, разработка на софтуер и образование. Има докторска степен (PhD) по компютърни науки, медали от международни олимпиади и състезания по програмиране и е носител наградата "Джон Атанасов" на българския Президент за принос към развитието на информационните технологии и информационното общество. Преподавал е в Национална академия по разработка на софтуер (НАРС), Софийски университет "Св. Климент Охридски", Технически университет – София, Нов Български университет (НБУ), Софтуерна академия на Телерик и Софтуерен университет (СофтУни).

Научете повече за Светлин Наков и проектите, с които се занимава от неговия личен сайт: http://www.nakov.com.

Теодор Стоев

Теодор Стоев е софтуерен разработчик във фирма Wizefish. Завършил е специалност Информатика във Факултета по математика и информатика на Софийски университет "Св. Климент Охридски". В момента следва магистърска програма в същия факултет, специалност Софтуерни технологии. Неговите про­фесио­нални интереси са в областта на обектно-ориен­тирания анализ, моделиране и изграждане на софтуерни приложения, уеб технологиите и в част­ност изграждането на RIA (Rich Internet Applications). Зад гърба си има сериозен опит с алгорит­мично програмиране; участвал е в редица ученически и студентски наци­онални състезания по информатика.

Христо Тодоров

Христо Тодоров е софтуерен разработчик във фирма Fadata (www. fadata.bg). Завършил е своята бакалавърска степен във Факултета  по компютърни системи и управление на ТУ-София, където следва своята магистратура. Занимава се с разработката на уеб приложения, базирани на Jаva. Неговите професионални интереси включват дизайн, разработка и защита на уеб информационни системи. Можете да се свържете с него по e-mail: [email protected].

Цвятко Конов

Цвятко Конов е софтуерен разработчик и инструктор в Национална академия по разработка на софтуер (НАРС). Той има опит с .NET и Java технологиите. В момента следва Приложна математика в Софийски университет "Св. Климент Охридски". Професионалните му интереси включват работа с иновативни технологии, софтуерни архитектури и дизайн, както и преподавателска дейност. Личният му блог е на адрес http://tsvyatkokonov.blogspot.com/.

Редакторите

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

-     Георги Пенчев – редактор на главата "Линейни структури от данни".

-     Ивайло Иванов – редактор на главите "Примитивни типове и променливи", "Оператори и изрази" и "Вход и изход от конзолата".

-     Мирослав Николов – редактор на главите "Цикли" и "Методи".

-     Николай Давков – редактор на главата "Масиви".

-     Марио Пешев – редактор на главите "Принципи на обектно-ориентираното програмиране".

-     Пламен Табаков – редактор на главите "Въведение в програмира­нето", "Примитивни типове и променливи", "Оператори и изрази" и "Вход и изход от конзолата".

-     Радко Люцканов – редактор на главата "Обработка на изключения".

-     Светлин Наков – редактирал детайлно почти всички глави (с дребни изключения).

-     Тодор Балабанов – редактор на главите "Рекурсия", "Примерна тема от изпит по програмиране – 8.04.2006".

-     Тодор Сираков – редактор на главите "Условни конструкции" и "Символни низове".

-     Цветан Василев – редактор на главите "Масиви", "Методи" и "Дефи­ниране на класове".

Отзиви

В тази секция сме събрали отзиви и мнения за настоящата книга от известни български софтуерни инженери, с дългогодишен опит в програ­мирането, реализирали се повече от успешно в професията си. Надяваме се, че всеки от вас, който иска да бъде успешен софтуерен инженер като тях и да програмира професионално в сериозна софтуерна компания, да послуша съветите им и да отдели достатъчно време на тази книга и на решаването на задачите в нея. Ако не вярвате на авторитетния авторски колектив, повярвайте на колегите от Microsoft, Google, SAP AG, telerik и всички останали.

Отзив от Николай Манчев

Това е най-изчерпателната книга за начинаещи Java разработчици, достъпна в България. Ако търсите реализация в тази област, не се колебайте – това е книгата, която ви е нужна!

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

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

Научаването на всички тези неща „на парче“ и усилията по събирането им в единен контекст си оставаше работа на избралия „пътя на програмиста“. Понякога един такъв самообразоващ се програмист не успява да запълни огромни пропуски в познанията си просто защото няма идея за тяхното съществуване. Нека ви дам един пример, за да илюстрирам проблема.

През 2000 г. поех един голям Java проект. Екипът, който го разработваше беше от 25 души и до момента по проекта имаше написани приблизително 4 000 Java класа. Като ръководител на екипа, част от моята работа включваше редовното преглеждане на кода написан от другите програ­мисти. Един ден видях как един от моите колеги беше решил стандартната задача по сортиране на масив. Той беше написал отделен метод от около 25 реда, който реализираше тривиалния алгоритъм за сортиране по метода на мехурчето. Когато отидох при него и го запитах защо е направил това вместо да реши проблема на един единствен ред изпол­звайки Arrays.sort(), той се впусна в обяснения как вградения метод е по-тромав и е по-добре тези неща да си ги пишеш сам. Накарах го да отвори документацията и му показах, че „тромавият“ метод работи със сложност O(n*log(n)), а неговото мехурче е еталон за лоша производител­ност със своята сложност O(n*n). В следващите няколко минути от нашия разговор направих и истинското откритие – моят колега нямаше идея какво е сложност на алгоритъма, а самите му познания по стандартни алгоритми бяха трагични. В последствие открих, че той е завършил съвсем друг тип инженерна специалност, а не информатика. В това, разбира се, няма абсолютно нищо лошо. В познанията си по Java той не отстъпваше на останалите колеги, които имаха по-дълъг практически опит от него. Но в този ден ние открихме празнина в неговата квалификация на разработчик, за която той не беше и подозирал.

Не искам да оставате с погрешни впечатления от тази история. Въпреки, че един студент издържал успешно основните си изпити по специалност "Информатика" със сигурност ще знае базовите алгоритми за сортиране и ще може да изчисли тяхната сложност, той също ще има своите пропуски. Тъжната истина е, че в България университетското образование по тази специалност все още е с твърде теоретична насоченост. То твърде малко се е променило за последните 15 години. Да, програмите вече се пишат на Java и C#, но това са същите програми, които се пишеха тогава на Pascal и Ada. Преди около месец приех за консултация студент първокурсник, който следваше в специалност „Информатика“ на един от най-големите държавни университети в България. Когато седнахме да прегледаме заедно записките му от лекциите по „Увод в програмирането“ бях изумен от примерния код даван от преподавателя. Имената на методите бяха смесица от английски и транслитериран български. Имаше метод calculate и метод rezultat. Променливите носеха описателните имена a1, a2, и suma. Да, в този подход няма нищо трагично, докато се използва за примери от десет реда. Но когато този студент заеме след години своето заслужено място в някой голям проект, той ще бъде навикан от проектния ръководител, който ще му обяснява за код конвенция, именуване с префикси, логическа свързаност на отговорностите и диапазон на активност. Тогава те заедно ще открият неговата празнина в познанията по качествен код по същия начин, по който ние с моя колега открихме проблемните му познания в областта на алгоритмите.

Скъпи читателю, смело мога да заявя, че в ръцете си държиш една наистина уникална книга. Нейното съдържание е подбрано изключително внимателно. То е подредено и поднесено с внимание към детайла, на който са способни само хора с огромен практически опит и солидни научни познания като авторите на тази книга. Години наред те също са се учили „в движение“, допълвайки и разширявайки своите познания. Работили са години по огромни софтуерни проекти, участвали са в научни конференции, преподавали са на стотици студенти. Те знаят какво е нужно да знае всеки един, който се стреми към кариера в областта на разработката на софтуер и са го поднесли така, както никоя книга по увод в програмирането не го е правила до момента. Твоето пътуване през страниците ще те преведе през синтаксиса на езика Java. Ще видиш използването на голяма част от приложно-програмния му интерфейс. Ще научиш основите на обектно-ориентираното програмиране и ще боравиш свободно с термини като обекти, събития и изключения. Ще видиш най-често използваните структури от данни като масиви, дървета, хеш-таблици и графи. Ще се запознаеш с най-често използваните алгоритми за работа с тези структури и ще узнаеш за техните плюсове и минуси. Ще разбереш концепциите по конструиране на качествен програмен код и ще знаеш какво да изискваш от програмистите си, когато някой ден станеш ръководител на екип. В допълнение книгата ще те предизвика с много практически задачи, които ще ти помогнат да усвоиш по-добре и по пътя на практиката материала, който се разглежда в нея. А ако някоя от задачите те затрудни, винаги ще можеш да погледнеш решението, което авторите предоставят за всяка от тях.

Програмистите правят грешки – от това никой не е застрахован. По-добрите грешат от недоглеждане или преумора, по-лошите от незнание. Дали ще станеш добър или лош разработчик на софтуер зависи изцяло от теб и най-вече от това, доколко си готов постоянно да инвестираш в своите познания – било чрез курсове, чрез четене или чрез практическа работа. Със сигурност обаче мога да ти кажа едно – колкото и време да инвестираш в тази книга, няма да сгрешиш. Ако преди няколко години някой, желаещ да стане разработчик на софтуер, ме попиташе „От къде да започна?“  нямаше как да му дам еднозначен отговор. Днес мога без притеснения да заявя - „Започни от тази книга!“.

От все сърце ти желая успех в овладяването на тайните Java и разработката на софтуер!

Николай Манчев е консултант и софтуерен разработчик с дългогодишен опит в Java Enterprise и Service Oriented Architecture (SOA). Работил е за BEA Systems и Oracle Corporation. Той е сертифициран разработчик по програмите на Sun, BEA и Oracle. Преподава софтуерни технологии и води курсове по Мрежово програмиране, J2EE, Компресия на данни и Качествен програмен код в ПУ "Паисий Хилендарски" и СУ "Св. Климент Охридски". Водил е редица курсове за разработчици по Oracle технологии в цен­трална и източна Европа (Унгария, Гърция, Словакия, Словения, Хър­ватска и други) и е участвал в международни проекти по внедряване на J2EE базирани системи за управление на сигурността. Негови разработки в областта на алгоритмите за компресия на данни са приети и предста­вяни в САЩ от IEEE. Николай е почетен член на Българска асоциация на разработчиците на софтуер (БАРС) – www.devbg.org. Можете да се свържете с Николай по email: nick{at} manchev.org.

Отзив от Павлин Добрев – ProSyst Labs

Казват, че първата книга по програмиране е важна, защото определя стила и начина, по който се изгражда един професионален програмист. Тази книга е посветена на фундаменталните знания в програмирането – на началото непроменено повече от 30 години и поднесено по един вълнуващ начин. Струва си да започнете с нея!

Книгата "Въведение в програмирането с Java" е отлично учебно пособие, което ви дава възможност по лесен и достъпен начин да овладеете осно­вите на програмирането. Това е петата книга, написана под ръководството на Светлин Наков, и също както останалите, е изключително ориентирана към практиката. Тя е изпълнена с многобройни примери и практически съвети за решаване на основни задачи от ежедневната работа на един програмист. Водещият автор Светлин Наков е известен с преподавател­ските си умения и с отличния си усет как да обясни по интересен и разбираем начин дори най-сложните теми от разработката на софтуер. Неговият дългогодишен опит като преподавател и автор на тех­нически статии и учебни материали са му позволили да подреди и структурира темите от книгата, така че да се възприемат максимално лесно от начинаещите.

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

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

Книгата "Въведение в програмирането с Java" учи на важните принципи и концепции в програмирането, на начина, по който програмистите разсъж­дават логически, за да решават проблемите, с които се сблъскват в еже­дневната си работа. Ако трябваше заглавието на книгата да съответства още по-точно на съдържанието й, тя трябваше да се казва "Фундамен­тални основи на програмирането".

Тази книга не съдържа всичко за програмирането и няма да ви направи експерти. За да станете наистина добри програмисти, ви трябва много, много практика. Започнете от задачите за упражнения след всяка глава, но не се ограничавайте само с тях. Ще изпишете хиляди редове програ­мен код докато наистина станете добри – такъв е животът на програмиста. Тази книга е наистина силен старт! Възползвайте се от възможността да намерите всичко най-важно на куп, без да се лутате из хилядите самоучи­тели и статии в Интернет. На добър път!

Д-р Павлин Добрев е технически директор на фирма Просист Лабс (www.prosyst.com), софтуерен инженер с повече от 15 години опит, консултант и учен, доктор по Компютърни системи, комплекси и мрежи. Павлин има световен принос в развитието на съвременните компютърни технологии и технологични стандарти. Той участва активно в междуна­родни стандартизационни организации като OSGi Alliance (www.osgi.org) и Java Community Process (www.jcp.org), както и инициативи за софтуер с отворен код като Eclipse Foundation (www.eclipse.org). Павлин управлява софтуерни проекти и консултира фирми като Miele, Philips, Siemens, BMW, Bosch, Cisco Systems, France Telecom, Renault, Telefonica, Telekom Austria, Toshiba, HP, Motorola, Ford, SAP и др. в областта на вградени приложения, OSGi базирани системи за автомобили, мобилни устройства и домашни мрежи, среди за разработка и Java Enterprise сървъри за приложения. Той има много научни и технически публикации и е участник в престижни международни конференции.

Отзив от Васил Поповски – VMWare

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

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

Учудващо е колко голяма част от кандидатите за софтуерни инженери не владеят фундаментални основи на програмирането. Случва се кандидати с дългогодишен опит да не могат да нарисуват свързан списък, да не знаят как работи хеш-таблицата, да не са чували какво е сложност на алгоритъм, да не могат да сортират масив или да го сортират, но със сложност О(n3). Направо не е за вярване колко много самоуки програмисти има, които не владеят фундаменталните основи на програмирането, които ще намерите в тази книга. Много от практикуващи професията софтуерен разработчик не са наясно дори с най-основните структури от данни в програмирането и не знаят как да обходят дърво с рекурсия. За да не бъдете като тях, прочетете тази книга! Тя е първото учебно пособие, от което трябва да започнете своето развитие като програмисти. Фундаменталните познания по структури от данни и алгоритми, които ще намерите в тази книга ще са ви необходими, за да изградите успешно кариерата си на софтуерен разработчик.

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

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

Васил Поповски е софтуерен архитект във VMware България (www.vmware.com) с повече от 10 години професионален опит като Java разработчик. Във VMware България се занимава с разработка на скали­руеми, enterprise Java системи. Преди това е работил като старши мени­джър във VMware България, като технически директор във фирма Sciant и като ръководител екип в SAP Labs България.

Като ученик Васил е печелил призови отличия в редица национални и международни състезания и е носител на бронзов медал от Междуна­родната олимпиада по информатика, Сетубал, 1998 и бронзов медал от Балканиада по информатика, Драма, 1997. Като студент Васил участвал в редица национални студентски състезания и в световното междууниверси­тетско състезание по програмиране (ACM ICPC). През 2001/2002 води курса "Обработване на транзакции" в СУ "Св. Климент Охридски". Васил е един от учредителите на Българска асоциация на разработчиците на софтуер (БАРС) – www.devbg.org.

Отзив от Веселин Райчев – Google

Ако искате с първата си книга по програмиране да добиете солидни знания, които ще са ви полезни години наред, то това трябва да е вашата първа книга!

Като инженер в Google съм провеждал десетки технически интервюта и трябва да ви споделя, че кандидати, които не се справят с материала от тази книга, се отхвърлят. Наблюдавал съм, че други големи компании също имат подобна практика. Причините са много прости – без да знаете прости структури от данни, не можете да участвате в дизайна на по-сложни проекти. Без основите на обектно-ориентираното програми­ране няма да можете да работите в екип. Ако не знаете езика и стандартните библиотеки, няма да можете да работите бързо, но аз поставям това чак на трето място.  Към всеки език има достатъчно документация, която най-често може да се чете докато се създава проекта. Наблюдавал съм и съм изпитвал на собствен гръб как с добри основни познания по програмиране човек научава нови императивни езици като Python или JavaScript за два дни. Когато имате добра основа, технологиите ще ги научите.

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

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

Веселин Райчев е софтуерен инженер в Google, където се занимава с Google Maps и Google Translate. Преди това е работил в Motorola Biometrics и Metalife AG.

Веселин е печелил призови отличия в редица национални и междуна­родни състезания и е носител на бронзов медал от Международната олимпиада по информатика, Южна Корея, 2002 и сребърен медал от Балканиада по информатика. Два пъти е представял СУ "Св. Климент Охридски" на световни финали по информатика (ACM ICPC) и е препо­давал в няколко изборни курса във Факултета по математика и информа­тика на СУ.

Отзив от Димитър Костов – SAP Labs Bulgaria

Най-хубавото на тази книга е, че използва Java само като пример и илюстрация на най-важното – базовите знания, които отличават Програмиста от обикновения Кодер, а именно основите на програмирането – структури от данни и алгоритми. С тази книга можете да се научите наистина да програмирате, а между другото и да научите езика Java.

Често на интервюта за работа идват хора, които могат да те зашеметят с познания по Java, C#, Flash, SQL и т. н. – безброй технологии, нови, стари, за какво ли не. Необходимо, но не достатъчно условие за добра кариера. По две причини: само след година днешните технологии ще са стари и само след година новото поколение кандидати ще познава точно толкова добре новите технологии. Какво помага на успешните софтуерни инженери да издържат на тази динамика и конкуренция? Какво ги прави наистина ценни и защо са успешни? Защото те знаят и разбират основите на софтуера, а той се изгражда около структури от данни и алгоритми. Това им позволява да усвояват нови концепции и технологии за много кратко време и да ги прилагат ефективно – било то обектно-ориентирани езици като Java или C# или технологии като J2EE и AJAX и с тяхна помощ да решат проблеми, да създадат завършен и готов за ползване, професионално направен софтуер.

Хубавото на тази книга е, че започва от принципите на програмирането, позволява ви да добиете здрава основа, от която да можете да се развивате в произволна посока – уеб, middleware, бизнес софтуер, embedded, игри, бази данни – каквото ви е интересно и ви влече. Ще се убедите, че „езикът няма значение”, а ще научите и Java.

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

Ако в някакъв момент материалът ви се стори твърде сух и ви доскучае, прескочете бързо до някоя от главите „за професионалисти”, 19, 20, 21 или 22 да почерпите вдъхновение и смисъл, а после се върнете там, до където сте стигнали. Така може няколко пъти да прочетете тези глави (от 19 до 22), което ще ви е само от голяма полза.

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

Димитър Костов е мениджър на отдел в SAP Labs Bulgaria, където заедно с екипите си се занимава със създаването и реализацията на средата за администриране и управление на SAP NetWeaver Java application server. Преди това е бил в топ мениджмънт екипа на аутсорсинг компании, където е започнал като програмист. Работил е като ИТ консултант в различни сфери – строителство, производство, финанси, ИТ и други. Ръководил е различни по големина екипи и е разработвал софтуер за множество фирми като Mercury Interactive, Jaguar Formula 1, Ford WRC, DHL, Belair и други. Завършил е НПМГ и Софийски Университет, ФМИ, специалност Информатика. Занимава се професионално със софтуер от 1992 г.

Отзив от Явор Ташев – Microsoft

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

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

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

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

Явор Ташев, софтуерен инженер, Microsoft

Отзив от Любомир Иванов – Mobiltel

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

Ако преди 5 или 10 години някой ми беше казал, че съществува книга, от която да научим основите на управлението на хора и проекти – бюджетиране, финанси, психология, планиране и т.н., нямаше да му повярвам. Не бих повярвал и днес. За всяка от тези теми има десетки книги, които трябва да бъдат прочетени.

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

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

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

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

Приятно четене!

Любомир Иванов е ръководител на отдел "Data Services Research and Development" в Мобилтел ЕАД, където се занимава с разработка и внедряване на ИТ решения за telecom индустрията.

Отзив от Стамен Кочков – SAP Labs Bulgaria

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

Стамен Кочков е директор "Програмиране" във фирма SAP Labs Bulgaria, която е подразделение на софтуерния гигант SAP (www.sap.com). Стамен има над 15 години опит в ИТ индустрията като софтуерен разработчик, мениджър на проекти и ръководител отдел. Стамен следи Java базираните технологии още от зараждането им и активно е участвал в разработката както и управлението на успешни ИТ проекти базирани на нея.

Отзив от Станислав Овчаров – MusalaSoft

Мащабно и увлекателно въведение в професионалното програмиране! Книгата се разпростира от базови и класически програмистки концепции, през индустриални технологии и похвати, до екзотични, но уникални теми като наръчник за решаване на задачи по програмиране. Това не е поредното сухо изложение! Четенето на тази книга остава усещане за диалог с авторите. Темите са представени в достъпен и свободен стил, със силен отпечатък от личното мнение на авторите и техния професионален опит. Едно свежо и полезно попълнение за личната Ви библиотека!

Станислав Овчаров, Технически Директор, Мусала Софт

Отзив от Христо Дешев – telerik

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

Христо Дешев, софтуерен инженер, Телерик АД

Отзив от Драгомир Николов – Software AG

Една прекрасна книга, която изчерпателно запознава читателя, с осно­вите на програмирането, използвайки най-популярния език Java. Задъл­жително четиво за всеки търсещ успешна професионална реализация като програмист.

Драгомир Николов, мениджър разработка,

webMethods RnD, Software AG

Отзив от Панайот Добриков – SAP AG

Настоящата книга е едно изключително добро въведение в програми­рането за начинаещи и водещ пример в течението (промоцирано от Wikipedia и други) да се създава и разпространява достъпно за всеки знание не само безплатно, но и с изключително високо качество.

Панайот Добриков, Програмен директор в SAP AG

Автор на книгата "Програмиране=++Алгоритми;"

Книгата е безплатна!

Настоящата книга се разпространява напълно безплатно в елек­тронен вид по лиценз, който позволява използването й за всякакви цели, включи­телно и в комерсиални проекти. Книгата се разпространява и в хартиен вид срещу заплащане, което покрива разходите по отпечатването и разпрост­ранението й, без да се реализира печалба.

Спонсори

Авторският колектив благодари на спонсорите, които подпомогнаха първото издаване на книгата на хартия (през 2009 г.):

 

clip_image003

 

clip_image005

 

clip_image007

 

clip_image009

Спонсор на изданието на книгата през 2014 г. е Софтуерният университет (СофтУни):


Софтуерен университет

Лиценз

Книгата и учебните материали към нея се разпространяват свободно по следния лиценз:

Общи дефиниции

1.  Настоящият лиценз дефинира условията за използване и разпрост­ранение на учебни материали и книга “Въведение в програмирането с Java", разработени от екип под ръководството на Светлин Наков (http://www.nakov.com).

2.  Учебните материали се състоят от:

-     книга (учебник) по “Въведение в програмирането с Java";

-     примерен сорс-код;

-     демонстрационни програми;

-     задачи за упражнения;

3.  Учебните материали са достъпни за свободно изтегляне при усло­вията на настоящия лиценз от официалния сайт на проекта:

https://introprogramming.info

4.  Автори на учебните материали са лицата, взели участие в тяхното изработване. Всеки автор притежава права само над продуктите на своя труд.

5.  Потребител на учебните материали е всеки, който по някакъв начин използва тези материали или части от тях.

Права и ограничения на потребителите

1.  Потребителите имат право:

-     да използват учебните материали или части от тях за всякакви некомерсиални цели;

-     да използват сорс-кода от примерите и демонстрациите, включени към учебните материали или техни модификации, за всякакви нужди, включително и в комерсиални софтуерни продукти;

-     да разпространяват безплатно непроменени копия на учебните материали в електронен или хартиен вид;

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

2.  Потребителите нямат право:

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

-     да разпространяват срещу заплащане учебните материали или части от тях, като изклю­чение прави само програмният код;

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

Права и ограничения на авторите

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

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

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

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

Сайтът на книгата

Официалният уеб сайт на книгата "Въведение в програмирането с Java" е достъпен от адрес: https://introprogramming.info. От него можете да изтеглите цялата книга в електронен вид, сорс кода на примерите и други ресурси.

 

Светлин Наков,

София, 14.07.2008 г.

Коментирай

Трябва да сте влезнали, за да коментирате.