Езици и среди за програмиране

Programming Languages and IDEs

Какви езици за програмиране са подходящи за състезания?
На какъв език ще даваме кода в лекциите? Среди за програмиране на C++.
Автор: Александър Георгиев

Необходими знания

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

Програмни езици

Съществуват много програмни езици. Но тук няма да говорим за това, тъй като този сайт е предимно насочен за състезания. А в състезанията много малко от тях се използват на практика. Най-доминантният език е C/C++, като напоследък в някои състезания се наблюдава тенденция за Java.
? Знаете ли, че Генади Короткевич е постигнал всичките си успехи на IOI пишейки на Паскал? А очевидно е не по-малко добър и на C++ (на който език програмира в TopCoder) -- просто "Паскал му харесвал повече".
Pascal отдавна почна да замира, получавайки поредните няколко удара през последните 3 години, след като беше баннат от ACM състезанията, и забранен по българските ученически такива.

? Програмният език Whitespace позволява само три различни символа - шпация, табулация и нов ред. Въпреки това е доказано, че с него могат да се напишат толкова сложни програми, колкото и на C++ (той е Turing Complete). Ето сканиран код, който имплементира полиномиално решение на задачата за Търговския Пътник на Whitespace.
Други езици, които понякога се ползват (но до голяма степен в зависимост от състезанието) са Python, поради елегантния си код и богатата си вградена библиотека, както и C#, поради наистина брилянтната интеграция с Visual Studio. Python, за съжаление, e убийствено бавен в някои неща (може да бъде до 100 пъти по-бавен от C++ в някои процедури), което е и една от причините все още да не се е наложил като масов език в състезанията по програмиране.

Защо C++?

Основната причина да изберем C++ за език, на който да имплементираме алгоритмите и структурите данни на този сайт е, че в момента той е единственият позволен език на ученически състезания в България. Но дори това да не беше така, все пак той би бил изборът ни, тъй като е най-популярният език за състезания по програмиране и в световен мащаб.

Защо това е така? Все пак C++ не е нито най-лесният, нито най-красивият, нито най-помагащият на програмистите да намерят своите грешки.

? "...speaking words of wisdom: "Write in C, write in C..."
Основната причина е, че той е бърз. Ама много. А в състезателното програмиране основно се иска да пишете ефективни програми. Друга причина е, че той ви дава сила - с него може да направите на практика всичко (което е както предимство, така и недостатък). Трето, той има сравнително богата (макар и не най-богатата) стандартна библиотека, която значително улеснява живота на състезателите. Кратък код == щастлив програмист.

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

Среди за програмиране

? Интегрираните среди за програмиране (IDEs, или Integrated Development Environments) имат предимството, че идват директно свързани с компилатор и не се налага да инсталирате такъв допълнително. Нещо повече, компилирането и стартирането на кода в общия случай е направено изключително удобно (с натискане на едно единствено копче). Макар и това да не е особено приложимо при големи проекти, то е изключително удобно при писането на малки програми и спестява на състезателите известно време по време на състезания.
Под "среда за програмиране" се разбира програма, която ви помага да пишете код на даден език. Помощта може да се изразява в различни неща: оцветяване на кода за по-лесно разграничаване на функции, променливи, константи, стрингове и т.н. (code coloring); автоматично подравняване на кода (auto indentation); автоматично допълване на думи (auto completion); шорткъти за компилиране; дебъгер и т.н.
Изборът от среди за програмиране на C++ е сравнително голям, поради популярността на езика. Интересно е, че стандартното програмиране се различава от състезателното такова дори тук - някои среди са по-удачни за състезания, отколкото за професионално програмиране и обратно. Тук ще споменем няколко безплатни такива, които можете да ползвате.
! Преди време беше публикуван списък с "официални" среди за програмиране по български ученически състезания, подготвен от Бойко Банчев. Силно ви препоръчвам да го разгледате на тази страница, тъй като той съдържа малко по-различна селекция от предоставената тук, а също така е значително по-подробна откъм информация както за различните среди и компилатори, така и как да ги инсталирате и настроите.

Code::Blocks

Може би най-популярното IDE в момента за C++. Какво можем да кажем за него? Не изисква особено много системни ресурси. Има версия както за Windows, така и за Linux. Идва с вграден GCC/GPP компилатор (който е най-стандартният за състезателните системи, тъй като е най-добрият от open source компилаторите) под Linux, и имплементацията му в MinGW за Windows. Има много настройки (как да бъде подравняван и оцветяван кода, какви аргументи да се подават на компилатора и т.н.). Има автоматично измерване на времето за изпълнение на програмата ви. Много бързо може да създадете и пуснете програма (не се изисква създаването на проект). Поради голямата си популярност най-вероятно няма да се налага да го инсталирате сами като сядате на произволен компютър на присъствено състезание. Един от недостатъците му е, че има сравнително дървен интерфейс.

Dev C++

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

В общи линии е същото като CodeBlocks, с няколко разлики. В най-новите версии (2012г.) има и 64-битов компилатор, както и такъв, поддържащ C++11, или поне някои от нещата в него. Има версия за Linux, както и теми за оцветяване на кода (можете да пробвате някоя по-нестандартна, като например Obsidian).

Забележете, че макар и на външен вид да изглежда като стария DevC++ (4.9.9.2), това е доста по-различно "от вътре". Ако някой ви натяква колко е зле като IDE (а такива хора със сигурност ще има), може би е просто защото не знае новата разработка.

Microsoft Visual Studio

IDE-то на Microsoft за разработване на код (не само на C++). Предимствата му са, че има много добър UI, много добър дебъгер, документация, и също е доста популярен (макар и често да има инсталирани различни версии на различни места). Като цяло е платен, но има безплатна "експресна" версия за ученици и студенти. Тя на теория няма всичките фийчъри на пълната версия, но реално е напълно достатъчна за състезания. Недостатъците са, че няма версия за Linux (очаквано), компилаторът му не е стандартен (ползва Майкрософтския VC), по-тежко е (откъм системни ресурси), по-бавно се създава работеща програма (преди това трябва да се създаде проект), многото контроли са донякъде объркващи (все пак е създадена за професионални програмисти). Възможно е да го няма на компютъра, на който ще седнете, а инсталацията му е дълга (дори да има откъде да го инсталирате).

Notepad++

Това е пример за хубав и лесен за ползване текстов редактор за Windows. Забележете, че Notepad++ е редактор, а не IDE. Това означава, че няма вграден компилатор, а ви помага само за писане на кода - след това трябва да си го компилирате сами. Това си има предимства и недостатъци, но преди всичко е въпрос на предпочитание. Иначе поддържа много различни езици (един от които, разбира се, е C++).

Eclipse

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

Съществуват и няколко известни по-скоро Linux-специфични среди.

Kate

За съжаление не съм го ползвал много за да имам стабилни наблюдения над него, но доколкото знам е приятен за ползване. Има IDE версия, което си е рядкост за Linux.

Vim

? Въпрос: Как може да генерирате рандом стринг?
Отговор: Като накарате студент първи курс да излезе от vi.
Наследник на vi, vim (vi improved) е мой personal favorite от редакторите за Linux (и OS X). Макар и изключително неинтуитивен и сложен за ползване в началото, е един от най-популярните и добрите редактори, които изобщо съществуват (също така и най-старите, но това е друга тема). Той е силно конфигурируем (има ли такава дума?) и използването му прави мишката напълно излишна. Има много информация за него в интернет (тъй като, незнайно защо, някои неща не са интуитивни за всички хора).

За да предложите корекция, селектирайте думата или текста, който искате да бъде променен,
натиснете Enter и изпратете Вашето предложение.
Страницата е посетена 7363 пъти.

Предложете корекция

Selected text (if you see this, there is something wrong)

(Незадължително) E-mail за обратна връзка: