Буценко Никита Олегович

студент Харьковского национального университета радиоэлектроники

г. Харьков

 

руководитель Голян Вера Владимировна

к.т.н., доцент кафедры Програмной инженерии 

Харьковского национального университета радиоэлектроники

г. Харьков

 

 Аннотация: в данной статье автор рассматривает преимущества и недостатки C++, опираясь на правила создателя С++, Бьёрна Страуструпа. Автор также приводит данные, касающиеся популярности и актуальности С++ с международных сайтов, посвященных программированию, и проводит анализ эффективности и читаемости кода, написанного на С++, решая базовые алгоритмические задачи.

 Ключевые слова: C++, АЛГОРИТМЫ, БИБЛИОТЕКИ, ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ, ЯЗЫК ПРОГРАММИРОВАНИЯ

 

 С каждым годом профессия разработчика программного обеспечения становится все более популярной и востребованной. Соответственно, у начинающих разработчиков возникает вопрос: «Каким языком программирования стоит овладеть в первую очередь?» Многие высшие учебные заведения, равно как и программисты с большим опытом работы[1], рекомендуют именно C++ как первый язык программирования. По данным TIOBE Index за февраль 2018 года, C++ занимает 3 место по популярности среди всех языков программирования[2]; по данным Stack Overflow (Developers Survey 2017) –7 место[3]. Если рассматривать обе сводки в одной плоскости, то C++ заметно уступает по популярности лишь языку прикладного программирования Java.

 Прежде чем рассматривать преимущества и недостатки C++, следует ознакомиться с правилами, которые использовал Бьёрн Страуструп при проектировании данного языка[4]:

 Си++:

  1. Разработан как универсальный язык со статическими типами данных, эффективностью и переносимостью языка Си.
  2. Разработан так, чтобы непосредственно и всесторонне поддерживать множество стилей программирования (процедурное программирование, абстракцию данных, объектно-ориентированное программирование и обобщённое программирование). 
  3. Разработан так, чтобы давать программисту свободу выбора, даже если это даёт ему возможность выбирать неправильно. 
  4. Разработан так, чтобы максимально сохранить совместимость с Си, тем самым делая возможным лёгкий переход от программирования на Си. 
  5. Избегает таких особенностей, которые зависят от платформы или не являются универсальными. 
  6. Не накладывает никакой избыточной нагрузки на программу, не использующую какие-либо возможности. 
  7. Разработан так, чтобы не требовать слишком усложнённой среды программирования.

 Первое правило явно показывает на одно из ключевых преимуществ C++ - переменная не может менять свой тип данных. Это значит, что при автодополнении интегрированная среда разработки будет предлагать исключительно те методы, которые применимы к данному типу данных. Статическая типизация также значительно уменьшает количество ошибок; многие из них исключаются уже на стадии компилирования приложения. Тем не менее, применение статической типизации влечет за собой определенные трудности с реализацией алгоритмов и читаемостью кода.

 Универсальность C++ - еще одно значительное преимущество данного языка программирования. Овладев основами, разработчик сможет писать на C++ простые десктопные приложения для Windows с помощью Windows Forms, более сложные программы для Windows и Linux, игры для разных платформ (включая Windows и Android), серверную часть сайтов (back-end) и так далее.

 Второе правило также следует отнести к преимуществам C++. Начинающий разработчик сможет сперва освоить процедурное программирование, а затем перейти к изучению ООП. Третье правило невозможно охарактеризовать исключительно как положительную или негативную особенность данного языка программирования. На начальном этапе основные ошибки (несовместимость методов с типом переменной, попытки привести одну и ту же переменную к другому типу данных) исключаются еще на стадии компилирования, поэтому пункт о «свободе выбора» для начинающих программистов не является действительным.

 Так как автор данной статьи рассматривает преимущества и недостатки языка программирования С++ как первой платформы для начинающего разработчика, то четвертый пункт (совместимость с Си) не является существенным. Однако с приобретением опыта разработчик заметит, что некоторые функции, работающие на C, также поддерживаются и C++ (например, функции ввода/вывода на экран информации scanf() и printf(), библиотека stdio.h). Вследствие этого некоторые программисты называют С++ не иначе как «Ц с классами»[5].

 Кроссплатформенность C++ является весомым преимуществом для начинающих программистов. Есть множество компиляторов и IDE, которые имеют версии для Windows, MacOS и Linux (Code::BlocksIDE предназначена для Windows и Linux, CLion – для Windows, Linux и MacOS). Разработчик может создавать приложения для разных платформ, используя «родную» для системы IDE и компилятор. QT-framework, разработанный в 1996 году, особенно упростил задачу кроссплатформенности.

 Шестое правило Страуструпа говорит об эффективности программ, написанных на C++. Если функционал программы не задействуется, то она будет потреблять меньше системных ресурсов и выполняться быстрее. Для начинающих разработчиков этот пункт означает то, что приложение будет компилироваться быстрее. Это показывают независимые тесты: так, программа, высчитывающая числа Фибоначчи[6], написанная на C++ и скомпилированная через GCC, собралась за 0.014 секунд. В данном тесте C++ уступил только Си: программа на Си скомпилировалась за 0.013 секунд. C++ быстрее компилирует программы благодаря статической типизации: компилятор не тратит время на определения типа переменной, как это происходит со многими интерпретируемыми языками наподобие JavaScript, Python, PHP и так далее (к слову, алгоритм Фибоначчи выполнился за 0.689 сек, 1.109сек и 1.307 сек на JavaScript, Python 2 и PHP соответственно).

 Преимущества седьмого правила выглядят весьма условными, так как сегодня множество производителей предлагают удобные IDE для разных языков программирования. Более того, тут C++ заметно уступает, например, JavaScript. Для разработки на JavaScript необходим минимальный инструментарий – блокнот и веб-обозреватель (эти приложения в большинстве операционных систем встроены изначально), в то время как для C++ необходим компилятор, который необходимо дополнительно скачивать и настраивать. В большинстве случаев начинающему разработчику придется устанавливать пакет «среда разработки + компилятор».

 Несмотря на такие преимущества, как кроссплатформенность и эффективность, C++ обладает высоким порогом вхождения. Вот что говорит о данном языке программирования Бондарев В.М.: «Программы на С++ обгоняют программы на других языках, как гоночный автомобиль обгоняет обычные. Но учиться программировать на них – все равно, что учиться азам вождения, сев за руль гоночного автомобиля – дорого и долго» [7]. Так, простая операция приведения числа в строку и вывода каждой из цифр числа на консоль имеет громоздкое решение в С++:

 Решение аналогичной задачи в JavaScript:

  Очевидно, что код на JavaScript проще для понимания начинающего разработчика с базовым знанием английского языка, чем код на C++. Это происходит из-за статической типизации C++: в отличие от того же JavaScript, мы не можем в пределах одной переменной перевести число в строку, к тому же метод String(), принимающий один параметр в JS выглядит логичнее, чем метод itoa() в C++, принимающий три параметра. 

 Выводы

 Все эти сложности делают С++ довольно противоречивым языком. С одной стороны, это низкоуровневый кроссплатформенный язык программирования, который еще долгое время будет актуальным из-за своей универсальности и эффективности. С другой стороны, начинающим разработчиками будет сложнее овладевать различными алгоритмами и принципами программирования на C++ именно из-за его статической типизации, ограничивающей работу с переменными. Тем не менее, начинающим разработчикам стоит начать знакомство с программированием именно с С++, так как они смогут освоить С-подобный синтаксис, а затем – парадигмы ООП, используя при этом универсальный язык программирования, который в будущем поможет им в реализации больших проектов.

 

Литература

1. https://www.kv.by/post/1052468-kakie-yazyki-programmirovaniya-izuchat-chtoby-nayti-rabotu-v-2018-godu

2. https://www.tiobe.com/tiobe-index/

3. https://insights.stackoverflow.com/survey/2017#technology

4. Страуструп Б. Дизайн и эволюция C++/ Страуструп Б. - М.: ДМК Пресс; Спб.: Питер, 2006. - 448 с.

5. https://habrahabr.ru/company/intel/blog/156863/

6. https://www.ibm.com/developerworks/ru/library/ManySpeed_08_1/index.htm

7. Бондарев В.М. Основы программирования.js : учеб. пособ.[Текст]/ В.М. Бондарев. – Х. : ФОП Коряк С. Ф., 2015. – 182 с.