Содержание

Преимущества C++ как первого языка для обучения программированию / Habr

Всем доброго времени суток!

Это статья о том, почему же все-таки стоит выбрать C++ в качестве первого языка программирования для обучения студентов, и немного о проблемах преподавания в ВУЗах. Часть суждения, касающегося процесса обучения, основывается на личном опыте преподавания (три года, во время учёбы в аспирантуре), а также на общении с преподавателями и студентами.
Рассматриваются преимущества языка программирования C++ именно для обучения и с точки зрения лучшего понимания основных концепций. Остальные кандидаты на роль первого языка (Pascal/Python/C#/Java) не рассматриваются, дабы не разжигать холивар. Еще раз отмечу: не для промышленной разработки и не с точки зрения такого субъективного критерия, как удобство.
Написано под впечатлением откровенно рекламного поста «Delphi XE5 как основа для обучения программированию» (на момент написания, доступна только версия «от гугла»).

0 Введение

Для начала, хотелось бы отметить, что для студентов не профильных специальностей вопрос выбора первого языка программирования не рассматривается. Основы алгоритмизации (если они необходимы) можно осваивать хоть на Python, хоть на C++ (Java, C#, Pascal и т.д.). В данном случае, чем проще язык, тем он лучше: у людей необходимо сформировать хоть какую-то культуру алгоритмического мышления и понимания базовых конструкций. Студентам некоторых специальностей (юридические, экономические, гуманитарные), изучение ЯП совсем не требуется.
Несмотря на всю очевидность написанного выше, многим студентам-экономистам первого курса преподают программирование на Pascal на практических занятиях по информатике. Студентам, которые ещё толком не умеют работать с MS Word. Польза от таких занятий весьма и весьма сомнительна. Точно так же, студентов-математиков могут пару лет учить программировать на C++/C#/Java… но зачем? Гораздо полезнее для последующего применения своих знаний изучить программы вроде Mathcad, Simulink, Surfer и т.д.
Учитывая вышеизложенное, рассмотрим процесс выбора первого языка исключительно для студентов профильных специальностей (например, «Программная инженерия») и смешанных специальностей с уклоном в сторону IT (например, «Прикладная математика и информатика»). Во-первых, учебный план таких специальностей предполагает достаточное количество лекций и практик (т.к. рассматривается первый язык, учитывается только первый курс): для двух связанных дисциплин (информатика и программирование) около 230 часов, в зависимости от специальности. Во-вторых, наличие заинтересованности и определённого склада ума у студентов. Такие студенты чаще всего уже пробовали программировать, а возможно даже и написали сайт/игрушку. Две эти причины, в совокупности, дают неплохую базу для начала обучения и понижают порог вхождения для обучения языку. К тому же, выпускникам рассматриваемых специальностей предстоит в дальнейшем работать в индустрии разработки ПО. Следовательно, выбор первого языка для них особо важен.
1 Почему же C++?

На первом курсе закладывается базис для дальнейшего обучения и формируется подход студента к дальнейшему получению знаний. Язык программирования играет здесь не последнюю роль.
Для того чтобы выбрать C++ в качестве первого языка программирования существует четыре причины:
  1. Компилируемый язык со статической типизацией.
  2. Сочетание высокоуровневых и низкоуровневых средств.
  3. Реализация ООП.
  4. STL.

Рассмотрим данные причины более подробно.

Компилятор. Тут C++ предстаёт во всей красе. Множество компиляторов, консольные команды, этапы сборки программы… Да, первую программу нужно написать в простом текстовом редакторе без подсветки синтаксиса и автокомплита, найти чем и как её можно запустить. Такой подход формирует у человека некоторое понимание того, как всё устроено:

  • Код программы – это просто текст, который сам по себе не заработает.
  • Компилятор – это отдельная программа, которой надо указать, что и как сделать с исходным кодом, чтобы он превратился в исполняемый файл. Текстовый редактор – это тоже отдельная программа, предназначенная для написания исходного кода.
  • Существуют опции сборки, и существует не один компилятор.
  • Исходный код, написанный программистом, может быть предварительно обработан и изменён (например, препроцессором).

Будущий специалист осознает, что код сам по себе не запускается (в дальнейшем он быть может и заинтересуется, как работает, например, интерпретатор Python или JIT-компиляция). Человек будет задавать себе вопросы: «А почему?», «А в чём отличие?», «Как?». Не будет иллюзий по поводу того, что всё работает по нажатию двух волшебных кнопок или в интерактивной командной строке. Студент будет знать, что процесс сборки программы можно настроить и что исходный код может быть обработан сторонними программами. В будущем, при использовании IDE, человек будет понимать, что это всего лишь удобный комплекс программ, выполняющий большую часть рутинных операций и в случае недостаточной гибкости от неё можно отказаться или расширить.

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

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

Отдельно стоит отметить простой механизм передачи значений по ссылке, значению, указателю и перенос объекта. Что такое изменяемые и не изменяемые параметры. В дальнейшем данные концепции могут быть использованы и при изучении других языков. Студент будет понимать, например, что объект в языке N передаётся по ссылке, и если его значение изменить в функции-члене, то оно изменится везде.

Реализация ООП. Это относительно чистая реализация ООП без всякого синтаксического сахара (относительно некоторых других языков). Чётко разграниченные уровни доступа к членам класса, возможность множественного наследования и динамический полиморфизм дают возможность быстро усвоить основные концепции ООП (абстракция, наследование, инкапсуляция и полиморфизм). Указатели и динамическое выделение памяти позволяют наглядно понять такие важные механизмы, как upcasting и downcasting. В дальнейшем, основываясь на этих знаниях, легко можно понять весь синтаксический сахар в других языках. Необходимость контроля ресурсов (в том числе и «правило трёх» или уже «правило пяти», с учётом C++11), захват их в конструкторе и освобождение в деструкторе также способствуют более глубокому пониманию ООП.

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

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

2 Немного о проблемах обучения

Процесс обучения, пожалуй, одна из наиболее существенных преград, для того, чтобы реализовать все то, о чём написано в предыдущем пункте. Вероятно, этот вопрос не касается топовых IT-вузов, но если взять рядовые образовательные учреждения, то ощущается дефицит квалифицированных кадров и слабая мотивация студентов. Для большей части практических дисциплин редко привлекаются специалисты, занимающиеся непосредственно разработкой ПО. Например, человек, который не применял STL в реальных проектах, вряд ли сможет объяснить, как это делать, и главное зачем. Так же, как и преподаватель, искренне считающий, что программирование на Delphi с формочками уже есть самое настоящее ООП, учитывая, что весь код (без намёка на собственные классы, абстракцию и инкапсуляцию) пишется в обработчике нажатия на кнопку с очень понятным именем «Button1», не способствует процессу обучения. Проблемы есть и со стороны студентов, которые толком не поняли, куда и зачем они поступили. Многие студенты, не имеют мотивации к дальнейшему обучению и пониманию, а также и к самообразованию. Не смотря на то, что такие студенты и преподаватели прекрасно дополняют друг друга, в конце обучения не получится специалист, претендующий на junior-вакансию.
3 Заключение

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

habr.com

Основы C++ для начинающих программистов: вводный видеокурс

В курсе подробно и доступно разобраны базовые концепции программирования и основы C++. Прекрасный выбор для начинающих разработчиков.

C++ – один из самых востребованных и многофункциональных языков программирования. В то же время – один из самых сложных для изучения. Если вы счастливчик, для которого C++ стал первым языком, подойдите к изучению ответственно.

Крайне важно сразу построить прочный фундамент из базовых знаний, иначе все ваше здание рано или поздно рухнет.

Этот курс поможет вам плавно влиться в программирование и простыми словами объяснит непростые основы C++ .

Немного о языке

Курс начинается коротким вступительным видео, из которого вы узнаете, что C++ существует давно и может многое. Кроме того, подберете подходящий для дальнейшей работы инструмент и создадите заготовку проекта.

Каркас первой программы

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

Типы данных

Следующие несколько уроков посвящены основным типам данных языка.

Вы создадите свою первую переменную, освоите арифметические операции в полной и краткой форме, напишете простой калькулятор и научитесь генерировать случайные числа с помощью функции rand.

Расширенный набор математических операций вы найдете в этом видео.

Отдельный урок освещает тонкости работы с символами и строками. Особенность состоит в том, что в C++ не существует специального типа данных для строк, поэтому приходится что-то изобретать.

Конструкции языка

Изучая основы C++, нельзя не упомянуть об условных конструкциях всех видов и циклах, которые позволяют грамотно организовать код и избежать повторений.

Также вы познакомитесь с обработкой исключений внутри блока try-catch.

Указатели и ссылки

Одна из самых сложных концепций языка, которая часто ставит новичков в тупик. Вы разберетесь, что такое указатели (и даже указатели на указатели) и чем они отличаются от ссылок. На данном этапе эта тема может оказаться довольно трудной. Не переживайте, все станет понятнее, когда речь пойдет о функциях. Обязательно вернитесь к ней чуть позже.

Способы организации данных

Разобравшись с указателями, переходите к различным способам организации данных в C++: массивам, перечислениям и структурам.

Этот урок продемонстрирует, как создавать и инициализировать массивы, а также перебирать их элементы с помощью циклов.

Если изначально размер массива неизвестен, его можно определить во время выполнения кода. О динамическом выделении и освобождении памяти расскажет этот урок.

Еще один способ собрать данные в единый набор – это перечисления. В курсе они рассматриваются на примере лифта в торговом центре.

Структуры в C++ – это подобие упрощенных классов. Разобравшись с ними, вы сделаете первый шаг к объектно-ориентированному программированию.

Функции

Далее в курсе разбираются основы C++ функций. Вы узнаете, зачем нужны прототипы функций, а также что такое перегрузка и как она помогает организовать работу с разными типами данных и количеством параметров.

ООП

С 18 урока начинается знакомство с объектно-ориентированным программированием. В отличие от языка C в C++ эта парадигма поддерживается. Вы создадите свой первый класс, познакомитесь с модификаторами доступа и научитесь делать переменные приватными.

Облегчить создание и уничтожение экземпляров класса помогут конструкторы и деструкторы, которые рассматриваются в отдельном уроке.

Затем вы узнаете, что такое дружественные функции и как они позволяют организовать взаимодействие между классами. А после этого познакомитесь с дружественными классами на примере совсем недружелюбного объекта Volodya.

Завершают тему объектно-ориентированного программирования в C++ концепции указателя this и наследования одних классов от других:

Шаблоны

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

Курс Основы C++

Курс отлично подходит для начинающих разработчиков ПО. Автор хорошо объясняет основы C++ и программирования в целом. Все уроки подряд вы можете найти в этом плейлисте:

Удачи в обучении!

Еще больше материалов по C++:

proglib.io

Эффективное обучение C# разработчиков или Правильное программирование на C# с нуля

Эффективное обучение C# разработчиков или Правильное программирование на C# с нуля (Фишки для новичков в программировании организационного характера)

Добрый день тебе, Читатель.

Причиной написания этой статьи стало моё увлечение C# и некотоые наблюдения, изложенные ниже.
Я и помогавшие мне тренеры по избранной мной дисциплине, применяли свой опыт и наблюдательность, преследуя простую цель: Хоть кому-то облегчить жизнь программиста, сделать обучение лучше и удобней. К тому же это такое, своего рода, инсайдерство — Чистой воды GNU философия, приложенная к Майкрософтовскому продукту.

Как и многие другие, я столкнулся с отсутствием систематических и позволяющих получить понимание предмета материалов, рассчитанных на людей, к программированию ранее отношения не имевших. Говоря иначе, стало ясно, что — Нету в Укрнете такого ресурса или библиотеки с online консультантом профи, которые давали бы возможность взять и понять основы программирования. Вы скажете, минуточку, а как же Сертификационные центры Майкрософт. Есть ещё мощный и системный «Кибер Бионик Систематикс». Есть академия «ШАГ», прости Господи, ставшая притчей во языцех. Но все же обучающая. Все же…
Конечно, всё это есть. Платно, но ладно — «Бог с ними». Лишь бы доступно. Лишь бы с пользой для людей…
Здесь речь пойдёт не совсем об этом. Здесь статья о Старте. Той ситуации, когда человек хочет научиться и ищет информацию. Ищет. Ищет. Хочет. Очень хочет. И, всё-же, находит (Речь же всё таки идёт о наших студентах:) и, конечно-же, делает ошибки (Речь же всё таки идёт о наших студентах:).
Вот на их (ошибок) базе и базе здравого чувства юмора, мы и построили данный материал.
Надеемся, он понравится Вам.

Посещая профильные курсы по программированию, например Стартовый C#, Вы можете просто слушать тренера и выполнять Задачи, прилагаемые к Видео урокам по С#. Вы также можете посмотреть видео ролики по C#, доступные на прочих ресурсах, посвященных программированию в .NET и предлагающих быстрый старт, основанный на использовании инструментов этой Microsoft платформы, и предлагающих получить знания по CLR через понимание C# как языка программирования, доступного для изучения «с нуля». Несмотря на заявленную продолжительность обучающих курсов в 32, 76 или 112 часов. Поверьте мне, Вам придётся смириться с тем, что вы не сможете научиться программировать, потратив на это всего неделю-другую. Но, за этот промежуток времени, Вы вполне можете усвоить основы модели и организовать рабочий процесс, по-сути, облегчив свою работу, создав условия, максимально оптимизирующие процесс обучения программированию на C#, а также выявив «узкие места» и способы их решения.

Именно на этих «сложностях» мы и постараемся акцентировать внимание в данном материале, в тоже время стараясь давать и решения. Большинство «проблем в обучении C#» связаны с неусидчивостью, невнимательностью и, что куда более важно, нежеланием практиковать решения с абстрактно-пространственном мышлением, тем самым не позволяя, в процессе обучения, назвать проблемы и сложности – задачами и решить их. Мы надеемся, что данный материал поможет Вам в преодолении тех самых «ступенек новичка», с которыми сталкивается любой начинающий разработчик, желающий изучить C#.

Приступим.

1) Изучение С#. Первые задачи

Мы не зря выделили слово задачи. Практикуя такой подход, как замена негативных установок позитивными решениями, Вы нанесёте сокрушающий удар двум самым сильным врагам программиста С# – прокрастинации и спешке. Первочерёдная задача любого программиста напоминает задачу «ямабуси», странствующих буддистских монахов. Первым делом, если Вы хотите научится писать на C#, как и на любом другом объектно-ориентированном языке, Вам придётся обрести Осознанность. Вы должны четко осознавать, что Вам объясняют, зачем Вам нужны эти знания, какие идеи у Вас возникают при получении этих знаний и, что самое главное, Вы должны чётко осознавать, что ваш тренер по программированию не зря делает всё так, как делает. Программисты часто склонны переоценивать свой опыт. Тяга к упрощению создаваемых конструкций, случается, даёт обратные плоды – человек привыкает к тому, что его решение — это всегда «просто», а значит, малозатратно по времени и прилагаемым к решению усилиям. Так возникает прокрастинация – откладывание решений на вечное завтра и «реакция 2», названная так потому, что неосознанные новички в программировании действуют по двум моделям: либо «Я ничего не знаю и потому никогда это не пойму!» и «О! Так я это читал! Это как с тех видеокурсов по C# — Я всё это знаю!». Страх и гиперактивность — плохие помощники. А это именно они. Потому запомним вывод: никогда не торопитесь, всегда знайте зачем и почему Вы учитесь программированию здесь и сейчас, выполняйте учебный план, делая задания только правильно и в срок и лишь после этого двигайтесь дальше.

2) Работа с примерами кода в C#. Вопрос внимания и приоритетов

На начальном уровне, используя такие возможности, как очное обучение С#, видеоуроки по С# и пользуясь литературой, большинство новичков в программировании превращают плюсы в минусы. Поддержка, организованная тренером, доступом к видеоматериалам по C#, с включёнными в него задачниками и доступом к примерам в интернете, заставляют изучающих базовый C#, думать, что программирование — это нечто вроде «конструктора ЛЕГО», где код просто указывает, какие модули где лежат и что собирая их решаются задачи. Но это абсолютно не соответствует истине! Работа программиста — это написание кода. Жизнь программиста — это Понимание кода. Все тренировки производятся во имя Понимания роли тех или иных элементов, синтаксиса и понятий C#, а также среды, в которой разворачивает решения C# программист. Начало обучения программированию — это трата огромного количества времени тренера, на вопросы и разговоры о примерах C# кода, чтобы внимательно и спокойно понять, как можно работать с тем, что делает код.

3) Работа с действием. Практический разбор решений С#

Работа с примерами кода, осознанное и последовательное изучение логики C#, инструментария MS Visual Studio, верное определение приоритетов, основанное как на анализе полученных знаний в C#, так и на мнении тренера, знающего гораздо больше, страхуют Вас от «подхода менеджера», предпочитающего копипасту написанию. Код нужно писать. Это действие, свойственное программистам. И если Вы уж решили научиться программировать на C#, привыкайте Вводить решения. Строка за строкой, разбирая решения с тренером, постигая логику, понимая, почему написано так, а не иначе. Такой подход приведёт Вас к тому, что рано или поздно Вы вдруг заметите, что уже не только видите, почему писали так, а не иначе, но и можете написать иначе, проще и удобнее. «Найти и изменить» — вся суть современного программирования, на C# или любом другом современном языке. Когда Вы пишете программу, Вы всегда ищете данные, затем меняете их, вводя всё большее количество взаимосвязей, в свою очередь меняющих данные так, что из них получаются те самые – нужные данные, что были определены задачей.

4) Используйте задачники и отладчик для понимания возможностей C#. Пишите свой собственный код

Понимание примеров, знание синтаксиса, умение разбираться в системной логике и логике процессов, знакомство с ключевыми определениями абстрактно-пространственной модели C#, понятия класса C#, объекта C# и C# функции, а также умение создавать проекты в MS Visual Studio, дают Вам право пробовать свои силы. Помните, внимательность и сдержанность актуальны и здесь. Разработка своих вариантов задач из учебника и практических заданий, которые дополняли видеоуроки по C#, написание своих версий без обращения к базам исходного кода – нужна любая практика, тренирующая Вас не только как реализатора, но и как «генератора идей». Не забывайте про использование отладчика, заставляющего C# программиста проходить созданные им конструкции, строка за строкой, снова и снова, пока код не будет оптимизирован и работоспособен. Гордость за выполненную работу – вот желаемый результат в обучении IT специалистов в Украине, тем более если речь идёт о обучении программиста, избравшего путь изучения C#. Гордость, легко конвертируемая в любую избранную мотивацию. Ведь по настоящему хорошего специалиста всегда хотят все!

Осталось лишь одно правило правильного обучения C# разработчика, это постижение сути следующего ниже подраздела нашей статьи.

5) Хлопок одной ладонью или правило 10 000 вопросов. Необходимость комплексного и систематического подхода к обучению программированию на C# и в изучении .NET платформы

Если Вы научились писать код, то, наверное, это значит, что Вы уже не новичок в C#. Теперь Вы обрели самостоятельность и знаете, как принципы личностной организации рабочего процесса, так и «узкие места» и методы работы, позволяющие проходить их с лёгкостью и изяществом опытного программиста C#. Что же это значит? Вы стали C# разработчиком? Нет. Вы только сделали первый шаг. Нужен отрезвляющий хлопок одной ладонью, или говоря без притч и ассоциативного ряда с буддизмом, попросту пощечина, выданная самому себе с улыбкой. Теперь Вы можете переходить к тому, что называют Углубленное изучение C# или ответом тренеру, всё это время державшему нуба в чёрном теле. Пришла Ваша очередь, вот что это значит. 10 000. Именно 10 000 вопросов! Никак не меньше! 10 000 вопросов услышит от вас тренер в онлайн-консультации, в процессе очных занятий углубленного изучения C#, просмотра видео уроков и их обсуждения. Осознанных, неспешных, выдержанных и логичных до бешенства. Здесь и сейчас, как мы и учили Вас. Ведь Вы не просто начинающий C# программист, а человек, достигающий своих целей, умеющий мыслить абстрактно-пространственными категориями и знающий важность комплексного обучения программированию C# и изучению .NET платформы. И, да! Вот ещё кое-что. Надеюсь, теперь Вы и теперь не собираетесь обманывать себя тем, что Вы научитесь углубленной разработке на C# за пару-тройку недель.

habr.com

Введение в язык программирования C. Урок 1

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

Его живучесть можно объяснить тем, что принципы работы операционных систем относительно универсальны, они не подвержены тому прогрессу и разнообразию, которые можно наблюдать в среде десктопного и мобильного ПО, Web-приложений. C не является языком достаточно высокого уровня, он ближе к архитектуре компьютера. В результате программы на C получаются компактными и быстрыми.

C не поддерживает объектно-ориентированного программирования. Поддержка ООП реализована в C++. Хотя последний возник на основе языка C, он не является его «продолжением», а представляет собой отдельный язык, который можно изучать, не зная C. Однако изучение C полезно перед знакомством с его «продвинутым младшим братом», т.к. синтаксис языков похож, C не перегружает мозг начинающего программиста сверхвозможностями и приучает к пониманию сути происходящего.

Подходит ли C для первого знакомства с программированием? Если вы не обучаетесь в вузе по специальности, связанной с IT, то нет. C предполагает понимание организации и принципов работы аппаратного обеспечения, в частности – памяти. Здесь многое делается с помощью указателей, они играют ключевую роль; эта тема достаточно сложная для понимания и обычно не изучается в школе.

Конечно, с помощью C можно изучать основы программирования и не изучать при этом указатели. Однако человек будет думать, что знает C, мало зная о нем по существу. Язык C был создан разбирающимися в устройстве «железа» профессиональными программистами для написания операционной системы UNIX. Его не задумывали как язык для обучения начинающих.

Среды и компиляторы для программирования на C

Если вы пользуетесь одним из дистрибутивов GNU/Linux, вам подойдет любой текстовый редактор с подсветкой синтаксиса, также понадобятся GCC и терминал.

Редактор и терминал для программирования на CСуществуют редакторы для программистов, включающие различные дополнения, в том числе терминал, просмотр каталогов и др. Например, Geany или Atom.

Программирование в Geany

C – компилируемый язык программирования. В GNU/Linux для получения исполняемых файлов используется GCC – набор компиляторов, включающий в том числе компилятор для C. Чтобы из исходного файла (обычно таким файлам дают расширение *.с) получить исполняемый, надо выполнить в терминале команду примерно следующего вида:

, где gcc — команда, запускающая программу, выполняющую компиляцию и иные действия; -o – ключ, сообщающий, что мы вручную указываем имя исполняемого файла; hello – имя получаемого исполняемого файла; hello.c – имя файла с исходным кодом. Имя исполняемого файла можно не указывать:

В этом случае исполняемый файл будет иметь имя по умолчанию a.out.

Для Windows существует свой набор компиляторов – MinGW. Его можно использовать самостоятельно, однако он входит в состав простой среды разработки Dev-C++, которая может оказаться хорошим выбором для обучения программированию на языках C и С++.

При сохранении выбирайте тип файла «C source files (*.c)». Компиляция и запуск программы выполняется при нажатии клавиши F9. После исполнения программа сразу закрывается и результат невозможно увидеть. Чтобы этого не происходило, прописывают две дополнительные строки: #include <conio.h> и getch(). (Возможно это не актуально для более новой версии Dev-C++.)

«Hello World» в GNU/Linux:

#include <stdio.h>
 
int main () {
	printf ("Hello World\n");
}

«Hello World» в Windows:

#include <stdio.h>
#include <conio.h>
 
int main () {
	printf ("Hello World\n");
 
	getch();
}

С другой стороны, существует большое количество кроссплатформенных сред разработки. Например, Eclipse + модуль CDT, KDevelop, CLion. Последняя платна, выпускается компанией JetBrains – лидером в разработке IDE, однако имеет 30-ти дневный триальный период, чего может быть достаточно для обучения. CLion удобнее других IDE.

«Hello World» на C

На примере простейшей программы сразу отметим некоторые особенности языка программирования C.

В языке C роль основной ветки программы берет на себя функция main(). Эта функция всегда должна присутствовать в законченной программе на языке C, и исполнение программы начинается именно с нее. Однако объявленные внутри нее переменные не являются глобальными, их область видимости простирается только на main(). Тем не менее в языке программирования C почти весь программный код заключается в функции, и функция main() является главной и обязательной.

По умолчанию функция main() возвращает тип данных int, поэтому можно не указывать тип возвращаемых данных. Однако компилятор в этом случае выносит предупреждение.

Функция printf() предназначена для вывода данных. Ее назначение аналогично процедуре write() языка Pascal и функции print() в Python. Функция printf() после вывода не выполняет переход на новую строку. Поэтому для перехода используется специальный символ, который обозначается комбинацией \n. Законченные выражения на языке C разделяются точкой с запятой.

В языке C функции ввода-вывода не являются частью языка. Например, в Python нам не надо импортировать никакой модуль, чтобы пользоваться функциями print() и input(). В C же мы не можем просто вызвать функцию printf(), т.к. в самом C ее просто нет. Эту функцию, а также ряд других, можно подключить с помощью заголовочного файла stdio.h. Именно для этого в начале программы прописана строка #include <stdio.h>. Include с английского переводится как «включить», а stdio есть сокращение от «стандартный ввод-вывод (input-output)».

В заголовочных файлах (они оканчиваются на *.h) обычно содержаться объявления тех или иных функций. Объявление — это просто описание функции: какие параметры она принимает и что возвращает. Сам код функции (определение) находится не в заголовочном файле, а в библиотеках (других файлах), которые могут быть уже скомпилированы и расположены в системных каталогах. Перед компиляцией программы запускается препроцессор языка C. Помимо прочего он включает в начало файла программы содержимое указанных в ней заголовочных файлов.

Практическая работа

Закомментируйте1 первую строчку кода программы HelloWorld. Попробуйте скомпилировать программу. Удалось ли получить исполняемый файл? Какое предупреждение выдал компилятор?

1 // — однострочный комментарий на языке C; /* … */ — многострочный комментарий на языке C.

younglinux.info

Основы C++: первая программа

Здравствуй, уважаемый читатель сайта CodeLessons.ru! Сейчас пойдет речь о самых важных моментах в C++ на которых и основана любая программа. Мы узнаем главные части программы, а также и назначение каждой из них. Для начала вам потребуется установленная IDE (как установить Code::Blocks) готовая к работе. Если у вас все готово, то можем начинать изучение!

Видео урок

Основные особенности кода на C++

Прежде чем мы напишем первую программу на C++, надо узнать основные требования к коду на C++.Их не так много, как может показаться на первый взгляд. Вот собственно список:

  • каждая команда заканчивается точкой с запятой ; ;
  • в названии команд и прочих инструкций не может быть пробелов, а также они не могут начинаться с цифр;
  • язык С++ чувствителен к регистру символов. То есть, CODE, CoDe и code могут выполнять абсолютно разные задачи;

Это и есть главные правила, на которых основан фундамент программирования на C++.

Начало работы с C++

Для того чтобы начать работу, вы должны создать файл с расширением .cpp или новый проект в своей среде программирования.

Теперь давайте разберем главные аспекты C++ на примере. Для этого мы запустим тестовою программу, а затем шаг за шагом рассмотрим структуру программ в C++:

#include <iostream> using namespace std; int main() { cout << «I love coding!» << endl; return 0; }

#include <iostream>

using namespace std;

 

int main() {

    cout << «I love coding!» << endl;

 

    return 0;

}

Можете скопировать данный код или напечатать самостоятельно (рекомендуется).

После выполнения программы мы увидим такое окно:

I love coding!

Process returned 0 (0x0) execution time : 0.020 s

Press any key to continue.

Разбор кода

Теперь давайте приступим к разбору написанного нами кода:

  • Строка 1:

    Здесь мы указываем для C++, какие именно дополнительные функции мы хотим использовать. За это отвечает #include, где iostream, в нашей программе, требуемый нами функционал. Этот модуль отвечает за ввод и вывод информации на экран и с него. В дальнейших уроках мы научимся использовать другие стандартные модули языка C++.
  • Строка 2:

    Эта команда отвечает за использование области имен переменных std. Это отдельная тема для обсуждения, о которой мы обязательно поговорим. Пока что можете просто запомнить данную строку кода.
  • Строки 4-8:

    Это стандартная функция main. Она запускается автоматически вместе с программой. Весь код, который мы хотим исполнить, мы должны помещать между двумя фигурными скобками { } после int main().
  • Строка 5:

    cout << «I love coding!» << endl;

    cout << «I love coding!» << endl;


    В данной строке мы выводим наше сообщение на экран, с помощью оператора cout (который относиться к заголовочному файлу iostream). Оператор endl переводит вывод на новою строку. Как видите, чтобы вывести сроку мы должны обвернуть ее в кавычки. С помощью символов << мы отделяем друг от друга различные операторы.
  • Строка 7:

    Она отвечает за код ошибки, который вернет наша программа после своего выполнения. Сам код указывается после оператора return. Код 0 означает что программа отработала корректно без каких-либо ошибок. При возникновении ошибки ваша программа будет возвращать другие значения отличные от нуля. По умолчаний программа возвращает 0. Так что данная строка не обязательна.

Как видите здесь нет ничего сложного, лишь пару шаблонных строк кода. Остальное же, ограничено лишь вашим воображением и знанием языка программирования. Пожалуй основы C++ мы изучили, осталось лишь подитожить все выше перечисленное.

Подводим итоги

Из главных правил хотелось бы выделить следующие:

  • каждая инструкция в C++ не может начинаться с цифры или содержать пробелы, а заканчивается точкой с запятой;
  • чтобы использовать встроенный функционал, необходимо использовать директиву #include;
  • весь код нужно оборачивать в функцию main;
  • чтобы вывести сообщение мы должны использовать оператор вывода cout;
  • с помощью return мы можем вернуть код ошибки нашей программы;

На этом все. Можете пройти тест по пройденному материалу.

Тест «Основы С++»

Пожалуйста, подождите пока страница загрузится полностью.
Если эта надпись не исчезает долгое время, попробуйте обновить страницу. Этот тест использует javascript. Пожалуйста, влкючите javascript в вашем браузере.

If loading fails, click here to try again

Пройдите тест и проверьте уровень усвоения материала.

Количество оставшихся вопросов: 5.

В качестве домашнего задания попробуйте вывести два любых сообщения на разных строках. Свои вопросу по уроку задавайте в комментариях.

Поделиться ссылкой:

codelessons.ru

С/С++ на Linux в Visual Studio Code для начинающих / Microsoft corporate blog / Habr

Давайте начистоту, мало кто использует отладчик GDB на Linux в консольном варианте. Но что, если добавить в него красивый интерфейс? Под катом вы найдёте пошаговую инструкцию отладки кода С/С++ на Linux в Visual Studio Code.



Передаю слово автору.

Относительно недавно я переехал на Linux. Разрабатывать на Windows, конечно, удобнее и приятнее, но и здесь я нашел эффективный способ легко и быстро отлаживать код на С/С++, не прибегая к таким методам как «printf-стайл отладки» и так далее.

Итак приступим. Писать в sublime (или gedit/kate/emacs), а запускать в терминале — так себе решение, ошибку при работе с динамическим распределением памяти вряд ли найдёшь с первого раза. А если проект трудоёмкий? У меня есть более удобное решение. Да и ещё поддержка Git в редакторе, одни плюсы.

Сегодня мы поговорим про Visual Studio Code.

Установка


Ubuntu/Debian
  1. Качаем версию пакета VS Code с расширением .deb
  2. Переходим в папку, куда скачался пакет (cd ~/Загрузки или cd ~/Downloads)
  3. Пишем, где (имя пакета).deb — название файла, который вы только что скачали:
    sudo dpkg -i (имя пакета).deb
    	sudo apt-get install -f

OpenSUSE/SLE Based distrs
  1. Установим репозиторий:
    sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
    sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/zypp/repos.d/VScode.repo'

  2. Обновим пакеты и установим VS Code:
    sudo zypper refresh
    sudo zypper install code

Расширения для С/С++

Чтобы VS Code полностью сопровождал нас при работе с файлами С/С++, нужно установить расширение «cpptools». Также полезным будет поставить один из наборов сниппетов.

Настоятельно рекомендую включить автосохранение редактируемых файлов, это поможет нам в дальнейшем.

Идём дальше. Открываем любую папку (новую или нет, неважно).

У меня в этой папке уже есть пара файлов для работы с C/C++. Вы можете скопировать одну из своих наработок сюда или создать новый файл.

Осталось всего ничего. Настроить компиляцию в одну клавишу и научиться отлаживать без printf.

Шаг 1. Открываем файл .c/.cpp, который (обязательно) лежит в вашей папке.

Шаг 2. Нажимаем Ctrl+Shift+B. VS Code вам мягко намекнет, что он не знает как собирать ваш проект.


Шаг 3. Поэтому дальше настраиваем задачу сборки: выбираем «Настроить задачу сборки» -> «Others».

Шаг 4. Прописываем конфигурацию в соответствии с образцом. По сути мы пишем скрипт для консоли, так что всем кто имел дело с ней будет понятно дальнейшее. Прошу заметить, что для сборки исходников в системе должен стоять сам компилятор (gcc или другой, отличаться будет только значение поля command). Поэтому для компиляции .cpp, понадобится в поле command указать g++ или c++, а для .c gcc.

Шаг 5. В args прописываем аргументы, которые будут переданы на вход вашему компилятору. Напоминаю, что порядок должен быть примерно таким: -g, <имя файла>.

Внимание: Если в вашей программе используется несколько файлов с исходным кодом, то укажите их в разных аргументах через запятую. Также обязательным является ключ -g(а лучше даже -g3). Иначе вы не сможете отладить программу.

Если в проекте для сборки вы используете makefile, то в поле command введите make, а в качестве аргумента передайте директиву для сборки.


Шаг 6. Далее возвращаемся обратно к нашему исходнику. И нажимаем F5 и выбираем C++.

Шаг 7. Осталось только написать путь к файлу программы. По умолчанию это ${workspaceRoot}/a.out, но я в своем файле сборки указал флаг -o и переименовал файл скомпилированной программы, поэтому у меня путь до программы: ${workspaceRoot}/main.


Шаг 8. Всё, больше нам не нужно ничего для начала использования всех благ VS Code. Переходим к основному проекту.

Отладка


Для начала скомпилируем программу (нет, нет, убери терминал, теперь это делается по нажатию Ctrl+Shift+B).

Как вы видите в проводнике появился main, значит все в порядке и сборка прошла без ошибок. У меня не слишком большая программа, но выполняется она моментально. Одним словом, провал чистой воды, потому что отладка идет в отдельном терминале, который закрывается после того, как программа дошла в main() до "return 0;".


Пришло время для брейкпоинтов. Выберем строчку с "return 0;" и нажимаем F9.


Строчка, помеченная красной точкой слева — место, где остановится программа, при выполнении.

Далее нажимаем F5.

Как я и сказал, программа остановила выполнение. Обратите внимание на окно с локальными переменными.

Удобненько. Также при остановке можно наводить мышкой на переменные и структуры в коде и смотреть их значения.


Также, если на каком-то этапе выполнения вам нужно посмотреть пошаговое выполнение той или иной операции, например в цикле, то поставьте брейкпоинт перед ней и нажмите F10 для выполнения текущей строчки без захода в подпрограмму и F11 с заходом.

Также есть случаи, когда считать выражение очень муторно вручную, но для отладки вам нужно знать, например, значение суммы трех элементов массива, или значение большого логического выражения. Для этого существуют контрольные значения. Все это и многое другое могут показать вам Контрольные значения (или «watch»).

Важно:

  1. Для каждой папки вам нужно отдельно настроить файлы сборки и путь к программе.
  2. VS Code не решит ваших проблем, но поможет быстрее с ними разобраться. Причем в разы.
  3. После каждого изменения программы, ее нужно компилировать заново, нажимая Ctrl+Shift+B.

Полезные шорткаты можно посмотреть здесь.

Об авторе



Максимилиан Спиридонов — разработчик C#, студент МАИ, Microsoft Student Partner. В профессиональную разработку на .NET пришёл ещё в школе. Около года работал с реальными проектами на WPF(MVVM)+C#, MySQL, более 4-х лет разрабатывал на C#. Основная сфера интересов сейчас — это мобильная разработка на Xamarin. Также, по воле случая в сфере интересов оказались С/С++ и Linux.

habr.com

C++ уроки для начинающих — обучение с нуля для чайников

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

Полезные ссылки:

3) Большой курс по C++;

С++ берёт основу в языке Си, активно разрабатываемом ещё в 1969-1973 годах. За разработку отвечала компания Bell Labs во главе с главным разработчиком Dennis Ritchie. Через 10 лет программист из Дании Bjarne Stroustrup, в своё время являвшийся разработчиком Си, выпускает расширенную версию языка под названием С++. Вначале своего пути C++ являлся всего лишь расширением, неким дополнением к Си, которое расширяло возможности ООП. Сам Страуструп изначально рассматривал язык всего лишь как «Си с классами».

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

  • Инициация классов с объектами в ООП;
  • Принцип наследования;
  • Выгрузка или удаление функций из памяти;
  • Виртуальная работа функциями;
  • Система исключений и многое другое.

Будет интересно: Си по сей день сохраняет популярность даже несмотря на развитие C++ и доминирующее положение последнего языка в сфере функциональности. Почему старый и менее развитый язык даже сегодня популярен? Всё просто – переносить программы на новый язык — довольно затратное и долгое дело. Часть компаний просто плывут по течению и продолжают поддерживать свои программы на Си.

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

Но если вы все же хотите изучить Си перед языком C++, то предлагаем вам ознакомиться с большим видео уроком, в котором вы сможете познакомиться с этим языком:

Более детально про язык вы можете почитать на этой странице.

В скорости после выпуска С++ язык начал завоёвывать различные сферы программирования. Постепенно в него внедряли всё новые функции, что всё больше отдаляло его от роли дополнения к Си. Годами позже его перестали рассматривать продолжением или расширением и пришло время полностью отделиться от Си, тогда-то язык и назвали С++. С тех пор путь языков разошёлся, они стали независимыми (насколько это возможно).

Сегодня С++ — это функциональный и мощный язык, который получил в наследство от Си массу ключевых возможностей по управлению памятью. По этой причине он активно применяется в системном программировании.

Несколько сфер использования:

  • Разработка операционных систем. Даже сама Windows преимущественно базируется на С++;
  • Создание драйверов;
  • Написание программ с нуля;
  • Разработка и поддержка антивирусных приложений и прочего.

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

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

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

У С++ есть компиляторы и инструменты для работы с кодом на большинстве известных платформ. Это позволяет скомпилировать исходники под любую платформу.

С++ поддерживает написание программ в стиле ООП, чего не умеет Си. В этом случае приложение становится лишь набором классов, объектов, которые способны взаимодействовать с другими элементами кода. Это помогает в разработке крупных приложений.

Как поэтапно развивался С++?

Шаги развития С++:

  • 1979-1980 – С++ появился и позиционировался, как язык Си с дополнительными классами;
  • 1983 – язык начал называться, как все мы привыкли С++;
  • 1985 – релиз коммерческого варианта С++. В этот же год появилась первая бумажная книга «Языка программирования C++», она включала описание функций, возможностей и правил использования языка;
  • 1989 – выпущена вторая версия языка с расширенными возможностями;
  • С 1990 до 2011 – медленное развитие и добавление функционала. Также стоит упомянуть, что в 1998 году впервые попытались стандартизировать язык. Тот стандарт впоследствии назвали ISO/IEC 14882:1998, сегодня — С++98. В 2003 году появилась следующий вариант стандарта C++03;
  • 2011 – издание стандарта C++11, в нём появилось действительно много нововведений. Обновление обогатило язык обилием полезных возможностей;
  • 2014 – выпуск относительно малого добавления к предыдущей версии стандарта. Его прозвали C++14;
  • 2017 – последний крупный релиз языка.

Среды программирования, компиляторы

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

Для работы с C++ необходимо установить среду разработки. Вы можете установить любую удобную для вас среду или же вовсе воспользоваться онлайн компилятором. Среди самых популярных сред разработки можно отметить такие, как: Visual C++, Xcode (только Мак), GCC, Intel C++ Compiler, Embarcadero (Borland) C++ Builder.

Дополнительные курсы

Также можете посмотреть дополнительные курсы по языку C++. На нашем сайте все курсы по языку С++ вы можете найти по этой ссылке.

itproger.com