Езици и среди за програмиране
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++ е сравнително голям, поради популярността на езика. Интересно е, че стандартното програмиране се различава от състезателното такова дори тук - някои среди са по-удачни за състезания, отколкото за професионално програмиране и обратно. Тук ще споменем няколко безплатни такива, които можете да ползвате.
! |
Преди време беше публикуван списък с "официални" среди за програмиране по български ученически състезания, подготвен от Бойко Банчев. Силно ви препоръчвам да го разгледате на тази страница, тъй като той съдържа малко по-различна селекция от предоставената тук, а също така е значително по-подробна откъм информация както за различните среди и компилатори, така и как да ги инсталирате и настроите.
|
Може би най-популярното IDE в момента за C++. Какво можем да кажем за него? Не изисква особено много системни ресурси. Има версия както за Windows, така и за Linux. Идва с вграден GCC/GPP компилатор (който е най-стандартният за състезателните системи, тъй като е най-добрият от open source компилаторите) под Linux, и имплементацията му в MinGW за Windows. Има много настройки (как да бъде подравняван и оцветяван кода, какви аргументи да се подават на компилатора и т.н.). Има автоматично измерване на времето за изпълнение на програмата ви. Много бързо може да създадете и пуснете програма (не се изисква създаването на проект). Поради голямата си популярност най-вероятно няма да се налага да го инсталирате сами като сядате на произволен компютър на присъствено състезание. Един от недостатъците му е, че има сравнително дървен интерфейс.
С риск да бъда убит с камъни от противниците на това IDE (обявено от някои за "абоминация"), все пак ще го спомена, най-малкото заради дългите години, в които го ползвах.
В общи линии е същото като CodeBlocks, с няколко разлики. В най-новите версии (2012г.) има и 64-битов компилатор, както и такъв, поддържащ C++11, или поне някои от нещата в него. Има версия за Linux, както и теми за оцветяване на кода (можете да пробвате някоя по-нестандартна, като например
Obsidian).
Забележете, че макар и на външен вид да изглежда като стария DevC++ (4.9.9.2), това е доста по-различно "от вътре". Ако някой ви натяква колко е зле като IDE (а такива хора със сигурност ще има), може би е просто защото не знае новата разработка.
IDE-то на Microsoft за разработване на код (не само на C++). Предимствата му са, че има много добър UI, много добър дебъгер, документация, и също е доста популярен (макар и често да има инсталирани различни версии на различни места). Като цяло е платен, но има безплатна "експресна" версия за ученици и студенти. Тя на теория няма всичките фийчъри на пълната версия, но реално е напълно достатъчна за състезания. Недостатъците са, че няма версия за Linux (очаквано), компилаторът му не е стандартен (ползва Майкрософтския VC), по-тежко е (откъм системни ресурси), по-бавно се създава работеща програма (преди това трябва да се създаде проект), многото контроли са донякъде объркващи (все пак е създадена за професионални програмисти). Възможно е да го няма на компютъра, на който ще седнете, а инсталацията му е дълга (дори да има откъде да го инсталирате).
Това е пример за хубав и лесен за ползване текстов редактор за Windows. Забележете, че Notepad++ е
редактор, а не IDE. Това означава, че няма вграден компилатор, а ви помага само за писане на кода - след това трябва да си го компилирате сами. Това си има предимства и недостатъци, но преди всичко е въпрос на предпочитание. Иначе поддържа много различни езици (един от които, разбира се, е C++).
Това всъщност по-скоро бих ви го препоръчал за Java, не толкова за C++. По-професионално насочено, с хубав autocomplete, работи на най-различни операционни системи, но относително сложно и
много тежко откъм системни изисквания. Всъщност не бих ви го препоръчал за състезания на C++.
Съществуват и няколко известни по-скоро Linux-специфични среди.
За съжаление не съм го ползвал много за да имам стабилни наблюдения над него, но доколкото знам е приятен за ползване. Има IDE версия, което си е рядкост за Linux.
? |
Въпрос: Как може да генерирате рандом стринг?
Отговор: Като накарате студент първи курс да излезе от vi.
|
Наследник на vi, vim (vi improved) е мой personal favorite от редакторите за Linux (и OS X). Макар и изключително неинтуитивен и сложен за ползване в началото, е един от най-популярните и добрите редактори, които изобщо съществуват (също така и най-старите, но това е друга тема). Той е силно конфигурируем (има ли такава дума?) и използването му прави мишката напълно излишна. Има много информация за него в интернет (тъй като, незнайно защо, някои неща не са интуитивни за всички хора).
Страницата е посетена 16870 пъти.