Loading...

Интервю с Георги Георгиев: "Със С++ ще си изградите солидна представа за функционирането и на други езици и технологии"

avatar Георги Кацаров 7 минути
Интервю с Георги Георгиев: "Със С++ ще си изградите солидна представа за функционирането и на други езици и технологии"

Предимствата от ученето на C++
Огромният принос на C++ към развитието на ИТ индустрията, и особено на определени нейни ниши, го е направил един от най-известните езици за програмиране. Многоплатформен, бърз, един от езиците утвърдил обектно-ориентираното програмиране, с мощен набор от инструменти за работа както на ниско, така и на високо ниво – от управление на индивидуалните единици памет, през ползване на вградени структури данни, алгоритми и обекти, до възможности за функционално програмиране и template metaprogramming – C++ е водещ език в среди, където ефикасността, предвидимостта и стабилността на софтуера са ключови. Игри, 3D графика и физични симулации, операционни системи, driver-и, софтуер за редакция на мултимедия, програмиране за embedded устройства, дори и messaging apps като Telegram ползват C++, заради възможностите и философията му за предоставяне на максимален контрол на програмиста над езика. Но причините за изучаването на този език, станал почти синоним на програмиране в някои среди, не приключват с приложимостта му.

Кога научи C++, как си го ползвал, и какво ценно имаш в опита си за споделяне?
Началото на моето запознаване със C++ е доста клиширано – като бях малък исках да пиша игри, и когато в гимназията ми се отвори възможност да уча програмиране, се възползвах. В училищата в България масово се учи C++, съответно така започнах и аз. Имах интерес и много мотивация – а мотивация трябва в значими количества като учиш C++ – и почнах да си пиша неща вкъщи. Започнах с елементарни игри – едно от първите ми творения беше морски шах в конзолата. Ходих на състезания по алгоритми, но по-сериозните ми постижения започнаха, когато с един приятел решихме да пишем проекти свързани с 3D графика и да ги презентираме по състезания… бяхме 10-11 клас. Определено се хвърлихме в дълбокото, но това ми даде възможност да се сблъскам както със силните, така и с трудните страни на C++ и ми помогна да осмисля и открия сам много от нещата, които ги пише по „дебелите книги“ за програмирането като цяло и за ефикасното ползване C++. Допусках много грешки, но в последствие се учих от тях. За пример – първият ни голям проект, с който почнахме да печелим състезания, беше софтуер за 3D моделиране (от типа на 3D Studio Max, Blender, Google SketchUp и т.н.), който имаше 16 хиляди реда код… в ЕДИН файл! Неоспоримо голяма глупост, но ме научи как да управлявам големи бази код, как да кръщавам променливи и функции така че да ги намирам лесно (средата за разработка, която ползвах, беше една идея по-напреднала от notepad), и разбира се ме научи, че кодът трябва да бъде разделян. Тук се изразиха и първите ми сериозни сблъсъци с езика – проблеми като как да заделям и освобождавам паметта, четенето на информация байт по байт и т.н., но предимствата бяха доста повече. BuilderZ – така се казваше проекта – работеше доста бързо, въпреки липсата на оптимизации от моя страна. Общо взето бързината на езика компенсира за липсата ми на умения за писане на ефикасен код. Няколко години по-късно видях подобен софтуер от съученици, писан на C#, който работеше значително по-бавно от нашия софтуер, въпреки че беше 2D, а нашият беше 3D.
Следващия ни голям проект беше DriveFreeZ, симулатор за шофиране, който комбинираше 3D графика, физична симулация, както и тривиална механична симулация. Там възможностите на C++ наистина си проличаха – ефикасен трансфер на данни и команди към видеокартата, синхронизирани с изчисления на позиции и сили през физичната библиотека Bullet, всичко това опаковано в рамка от класове и удобно ползвано през обекти, на които беше лесно с по 1-2 реда код да им бъде казано да се движат, спират, променят посоки, сблъскват и прочие.
След тези (и други по-малки) проекти и няколко награди по състезания, започнах да водя лекции – както за C++ и 3D графика, така и за други езици и технологии, което още повече ми изгради опита и ми позволи да оценя силните и слабите страни на C++, но факта че започнах от този език много ми помогна да разбера не само как да ползвам други езици, а как тези езици функционират „под капака“.
В момента работя за VirtualRacingSchool.com, където анализираме телеметрия от racing sims (например iRacing), и там софтуерът, който ползваме за извличане на данните от RAM паметта и пращане към сървърите ни, е изцяло написан на C++.

Защо да учим C++?
Освен очевидните неща, които езика дава – бързодействие, ООП и точен контрол над изпълнението на програмата – смятам, че изучаването на C++ дава предимства, дори и в последствие да не пишете на C++. Както споменахме по-горе, езикът е многоплатформен (можете да програмирате за всякакви операционни системи и устройства) и ви дава възможност да работите както на „ниско“ ниво (достъп до индивидуални байтове памет, указатели, точно подреждане в структурата на паметта, контрол над заделянето и освобождаването на памет), така и на „високо“ ниво (класове, обекти, функционални обекти, шаблони и метапрограмиране), и също така създателите му са избрали философията да оставят програмиста да прави това, което иска, вместо да го предпазват от грешки.
Има две значителни последствия от това. Първото, сравнително очевидно, е че не сте ограничени в определен стил на програмиране, и че можете ефикасно да разработите практически всякакъв софтуер – от игра, през социална мрежа, до софтуер в self-driving автомобил. Второто последствие е, както се казва в клишето, „С голямата мощ идва голяма отговорност“ – за да работите добре с всичките инструменти, които C++ предоставя, трябва да го учите съвестно. C++ не е език, който предпазва програмиста от грешки, и рядко прощава ако го ползвате без да разбирате добре точно как работи. Това означава, че докато учите C++ няма просто да учите как да го ползвате, а как работи езикът, и донякъде как работи хардуерът под него. Така ще си улесните изучаването на други езици и технологии, защото ще си изградите солидна представа за функционирането им и дисциплина да ги изучавате в тяхната цялост, а не само как да ги ползвате в ограничени ситуации.

Подходящ ли е C++ за начинаещи?
Краткият отговор е: зависи от това дали искате да станете добри програмисти. Дългият отговор е, ами, по-дълъг.
Заради гореспоменатите неща C++ е мощен и малко по-труден за изучаване език. В него има повече детайли за запомняне, но и повече инструменти от по-новите езици от неговото семейство (например Java, C#). Има повече възможности да сгрешите и грешките са по-опасни от други езици, но това ви обучава да сте дисциплинирани и внимателни, както и да мислите за основата на технологията, с която работите. Напълно възможно е да сте начинаещ и да започнете със C++, като това като цяло ще ви даде повече познания, отколкото с други езици, но ще бъде малко по-трудно и малко по-натоварващо.
Не казвам, че не можете да станете добри програмисти започвайки с друг език. Казвам, че ако се научите да програмирате добре със C++, тогава почти със сигурност ще станете добри програмисти и изучаването на други езици ще ви е сравнително лесно.

Съвременен език за програмиране ли е C++?
Категорично да. Силно застъпен е в ИТ индустрията, и то на много важни места – има не малко позиции за C++ разработчици. Самият език бива развиван и разширяван, като последните няколко итерации бяха C++11, C++14 и C++17 – съответно финализирани през 2011, 2014 и 2017 – и осъвремениха езика до степен, в която изразителността му доближава езици като C# и Java. Синтаксисът му все още е малко по-тежък от техните, но не значително и всички стандартни неща в програмирането са лесни за описване на C++ - ако го разбирате и познавате добре.

На какво ниво ще изучаваме C++ в курса C++ Fundamentals в SoftUni?
Програмата на курса е на „средно“ ниво – ще учим как да ползваме C++ като съвременен език за програмиране, като ще опознаем как да изпълняваме стандартни задачи в програмирането и как да използваме широко-разпространени структури данни и алгоритми. Заедно с това ще обърнем доста внимание на потенциални грешки в ползването на C++ и как да ги избягваме, ще видим някои от нещата достъпни през „ниското ниво“ на работа със C++ - как се пазят поредици от данни в паметта и как да ги ползваме ефикасно – и също така ще се докоснем до „високото ниво“ – работа с класове и STL. Но основното ни внимание ще е върху това как да пишем работещ, разбираем, и лесен за модификация код ползвайки функции, линейни структури данни, асоциативни контейнери и други стандартни инструменти в репертоара на C++.

Омръзна ми да чета, нещо за финал?
C++ е език, който е не само мощен във възможностите си, но и в начинът на мислене и разбиране, който ученето му налага в програмистите работещи с него. Ако обичате аналогиите, C++ в ИТ индустрията е като състезателните автомобили – бърз, проектиран за да може да бъде извлечена всяка капка функционалност и скорост от него, ако сте добър състезател, и използваем както в интензивни ситуации, така и за по-стандартни цели. Факт е, че е по-труден за овладяване от други, по-„стандартни“ езици, и че грешките с него могат да бъдат по-опасни, но за сметка на това тези, които могат да го ползват добре са ценени професионалисти, както като C++ разработчици, така и на други позиции. Очаквам ви в курса "C++ Fundamentals - май 2018".

Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.