C как первый язык

от admin

Язык C: введение и настройка среды

С — это компьютерный язык процедурного императивного программирования общего назначения. Он был разработан в 1972 году Деннисом М. Ритчи в исследовательском центре Bell Telephone Laboratories для создания операционной системы UNIX. В 1978 году Брайан Керниган и Деннис Ритчи подготовили первое общедоступное описание языка C, известное сегодня как стандарт K&R.

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

Зачем его учить?

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

Ключевые преимущества изучения C:

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

Факты о C

  • Изобретен для создания операционной системы UNIX.
  • Стал преемником языка B, представленного примерно в начале 1970-х годов.
  • Был формализован в 1988 году Американским национальным институтом стандартов (ANSI).
  • Послужил для полного написания ОС UNIX.
  • Является самым распространенным и популярным языком системного программирования на сегодняшний день.
  • Использовался для реализации большей части современного программного обеспечения.
  • Самые популярные сегодня Linux OS и RDBMS MySQL написаны на C.

Программы на C

Программа на языке C может состоять от 3 до миллионов строк и должна быть записана в один или несколько текстовых файлов с расширением “.c”; например, hello.c. Вы можете использовать “vi”, “vim” или любой другой текстовый редактор для записи программы.

“Hello World” на C

Первый опыт программирования на языке С вам предоставит небольшая стандартная программа “Hello World”. Можете попробовать ее, используя следующее демо:

Применение C

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

Основные сферы применения языка C:

  • Операционные системы.
  • Компиляторы языков.
  • Ассемблеры.
  • Текстовые редакторы.
  • Спулеры печати.
  • Сетевые драйверы.
  • Современные программы.
  • Базы данных.
  • Языковые интерпретаторы.
  • Утилиты.

Целевая аудитория

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

Предварительные условия

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

Настройка среды

Чтобы настроить среду для языка C, вам понадобятся два программных инструмента: (а) текстовый редактор и (б) компилятор C.

Текстовый редактор

Этот инструмент будет использоваться для набора текста программы. Примерами текстовых редакторов являются:

  • Windows Notepad;
  • EDIT;
  • Brief;
  • Epsilon;
  • EMACS;
  • vim;
  • vi.

Название и версия текстовых редакторов могут отличаться в разных операционных системах. Например, если Notepad используется только в Windows, то vim или vi подходят как для Windows, так и для UNIX.

Файлы, которые создаются с помощью редактора, называются исходными файлами и содержат исходный код программ. Исходные файлы программ на C обычно называются с расширением “.c”.

Компилятор C

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

Компилятор транслирует исходный код в конечные исполняемые программы. Наиболее часто используемым и бесплатно предоставляемым является компилятор GNU C/C++. В качестве альтернативы можете использовать компиляторы от HP или Solaris, если они соответствуют вашей операционной системе.

В следующем разделе объясняется, как установить компилятор GNU C/C++ на различные ОС. Будем продолжать упоминать C/C++ вместе, потому что компилятор GNU GCC подходит как для C, так и для C++.

Установка на UNIX

Если вы используете UNIX-подобную систему, проверьте, установлен ли GCC, введя следующую команду в командной строке:

Если на вашем компьютере установлен компилятор GNU, то он должен вывести сообщение следующего вида:

Если GCC не установлен, вам придется установить его самостоятельно, используя подробные инструкции, доступные на сайте https://gcc.gnu.org/install/.

Данное руководство написано на основе Linux. Поэтому все приведенные в нем примеры были скомпилированы на Cent OS с учетом особенностей системы.

Установка на Mac OS

Если вы используете Mac OS X, самый простой способ получить GCC — загрузить среду разработки Xcode с сайта Apple и следовать простым инструкциям по установке. Xcode доступен по ссылке developer.apple.com/technologies/tools/.

Установка на Windows

Чтобы установить GCC на Windows, необходимо сначала установить MinGW. Для этого зайдите на домашнюю страницу MinGW www.mingw.org и перейдите по ссылке на страницу загрузки MinGW. Скачайте последнюю версию установщика MinGW, которая должна называться MinGW-<версия>.exe.

Во время установки MinGW, как минимум, необходимо установить gcc-core, gcc-g++, binutils и среду выполнения MinGW (можете установить и больше).

Добавьте подкаталог bin установки MinGW в переменную среды PATH, чтобы можно было определить эти инструменты в командной строке по их простым именам.

После завершения установки можете запускать gcc, g++, ar, ranlib, dlltool и остальные инструменты GNU из командной строки Windows.

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

Это статья о том, почему же все-таки стоит выбрать 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++?
  1. Компилируемый язык со статической типизацией.
  2. Сочетание высокоуровневых и низкоуровневых средств.
  3. Реализация ООП.
  4. STL.
  • Код программы – это просто текст, который сам по себе не заработает.
  • Компилятор – это отдельная программа, которой надо указать, что и как сделать с исходным кодом, чтобы он превратился в исполняемый файл. Текстовый редактор – это тоже отдельная программа, предназначенная для написания исходного кода.
  • Существуют опции сборки, и существует не один компилятор.
  • Исходный код, написанный программистом, может быть предварительно обработан и изменён (например, препроцессором).

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

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

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

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

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

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

Актуальность C# и выбор его как первого языка программирования

Первая версия язык программирования C# была выпущена в январе 2002 года вместе с Visual Studio .NET 2002. Это объектно-ориентированный язык программирования общего назначения разработанный в компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота.

Язык относится к C-подобным языкам и больше всего близок к С++ и Java. Название языка было позаимствовано из музыкальной нотации, где символ # (диез) означает повышение стоящих справа от него нот на один хроматический полутон. Это означало то, что язык является инкрементальным продолжение языка C++, в то время как C++ был последователем C.

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

Первая версия C# была разработана как простой многоцелевой язык общего назначения, и по сравнению с ней, сегодня C# это современный и мощный язык программирования.

Какие проекты пишут на C#

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

  • Web — разработка web-приложений и сервисов для платформ macOS, Windows, Linux и Docker.
  • Mobile — разработка единой кодовой базы для построения нативных приложения для iOS и Android.
  • Desktop — разработка нативных приложения под Windows и macOS.
  • Microservices — разработка независимых компонентов запускаемы в Docker контейнерах.
  • Cloud — использование существующих облачных решений или создание собственных. C# поддерживается большинством облачных платформ, такими как Azure и AWS.
  • Machine learning — разработка приложений искусственного интеллекта и машинного обучения, решающие проблемы машинного зрения, обработки речи, моделей предсказания, и тд.
  • Game development — разработка 2D и 3D игра для самых популярных десктопных и мобильных платформ.
  • Internet of Things (IoT) — разработка приложений для интернета вещей, имеющие поддержку Rasbery Pi и других одноплатных компьютеров.

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

Рейтинг языка C#

Популярность языка программирования C# была разной на протяжении всего существования языка. От снижения интереса к языку привязанного к Windows платформе примерно в 2013-2015 годах, до возрождения после появления кроссплатформенного .NET Core.

На данный момент язык занимает твердое пятое место в рейтинге языков по версиям TIOBE и Github. Именно релиз кроссплатформенной среды .NET Core с открытым исходным кодом в июне 2016 года дал новый толчок развития языка программирования C# и вернул Майкрософт прежние позиции на рынке.

Перспективы развития языка C#

Компания Mайкрософт после объединения старой версии .NET Framework поддерживаемого платформой Windows и нового кроссплатформенного .NET Core в единую платформу .NET, объявила о ежегодном обновлении языка. Данная динамика отслеживается на протяжении последних нескольких лет.

Так же в связи с тем, что исходных код .NET Core стал публично доступен, вокруг этой платформы вновь стали собираться энтузиасты и большое сообщество, что позитивно отражается на динамике развития языка C#. Компания Майкрософт старается занять как можно больше ниш рынка, поэтому активно развивает свою платформу .NET.

Читать:
Какие сайты написаны на vue

Как же меняется язык ежегодно? Конечно же не вносятся какие-то кардинальные изменения в язык программирования C#, к примеру как это было в первых версиях, появления встроенного LINQ или переходом от классической много поточности к асинхронному программированию и Task-ам. В языке появляются новые операторы, конструкции, типы данных. Кто-то может сказать, что это синтаксический сахар и язык не меняется кардинальные, но суть в том, что C# развивается в соответствии с потребностями рынка и сообщества, которым им пользуется.

Изучение C# и платформы .NET как первого языка

Ни для кого не секрет, что IT-индустрия очень быстро развивается и меняется. Следует заметить, что за последние 20 лет произошло много изменений. Это касается как ролей на проектах и состава команд, так и технологий и подходов в программировании. Переход от низкоуровневых и сложных языков программирования, где необходимо большое количество фундаментальных знаний и навыков, к платформенным и управляемым языкам, которые ускоряют разработку и упрощают жизнь программистам.

Язык программирования C# идеально подходит для изучения для студентов вузов и людей, у которых есть фундаментальные знания в области IT. Для тех, кто только хочет попробовать свои силы в IT-индустрии и не знаком с основами программирования, C# может быть сложным для изучения. C# строгий и систематичный язык, поэтому с помощью его вы сможете четко понять и изучить все тонкости программирования.

Преимущества использования и изучения C#

C# является управляемым языком программирования, что позволяет разработчику не следить за выделением и использованием памяти. Для этого существует CLR (Common Language Runtime) — виртуальная машина, которая занимается запуском приложения, а также управлением памятью.

Также C# является строго типизированным и объектно ориентированным языком, что позволяет использовать ООП в его классическом виде. Здесь нет множественного наследования классов, что упрощает понимание ООП, но есть множественная реализация интерфейсов, что дает большую гибкость для разработчиков.

Большое сообщество и универсальность языка дают большое поле для деятельности. Как уже было указано ранее, вы можете разрабатывать веб-приложения, сложные микросервисные платформы, игры, а так же мобильные приложения. Здесь действительно серьезный инструментарий для разработки, такие IDE как Visual Studio или JetBrains Rider. Наличие огромнейшего разнообразия библиотек на все случаи жизни, от обратки изображений и видео, до нейросетей. А кроссплатформенность дает возможность писать код как на Windows, так и на macOS и Linux.

Недостатки языка C#

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

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

Заключение

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

C++ как первый язык [закрыто]

Я самостоятельно изучаю C++ уже около 4 месяцев. Мне это нравится, и я думаю, что у меня неплохо получается. Однако ответ на вопрос мой заставил меня подумать, что я, возможно, готовлюсь к падению.

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

30 ответы

Я не понимаю, почему люди до сих пор путают «язык» с «библиотекой». (Ссылаясь на связанный ответ.) А что, если в С++ нет «родной» концепции звука? Существует множество библиотек, которые вы можете легко использовать с C++ и которые, вероятно, лучше подходят для ваших конкретных потребностей, чем любой универсальный API для обработки звука со стандартной библиотекой.

С++ — сложный язык. Есть и другие, которым легче научиться. Я бы никогда не стал спорить об этом.

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

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

Опытный программист на C++ может, например, написать Java на полной скорости за несколько недель. Наоборот? Много, много труднее.

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

Но еще несколько лет спустя, и я почувствовал, что действительно должен добавить к этому ответу эту прекрасную лекцию Кейт Грегори с CppCon 2015:

ответ дан 13 дек ’17, 08:12

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

+1. Я согласен со многими пунктами, кроме того, где вы говорите, что это лучший первый язык программирования. Я думаю, что быстрый прогресс (например, первое приложение с графическим интерфейсом) важен для студентов, и они могут решить, нравится ли им программирование, не перегружаясь языковыми деталями. — CiscoIP-телефон

Лично я считаю, что никто не должен кодировать приложение с графическим интерфейсом, пока он не поймет концепцию обработчиков действий. А это трудно сделать без надежного знания ООП, и невозможно сделать хорошо без большого опыта. Зачем бросать людей в глубокую воду, прежде чем они умеют плавать? — DevSolar

Когда я слышу «мощь», я думаю о том, что она может сделать, и, поскольку все, что можно сделать на C#, можно сделать на C++, но не наоборот, я бы сказал, что C++ — более мощный язык. Тем не менее, я все еще наслаждаюсь C#. — GManNickG

Хотя различие между языком и библиотекой важно, язык с легкодоступными сторонними библиотеками (Perl/CPAN, Python/PyPI) или большой стандартной библиотекой (Java, C#) имеет преимущества, а C++ не согласуется со сторонними библиотеками, поскольку почти все они разработаны вне синхронизации друг с другом. Вот почему в таких языках, как C++, вы видите огромные фреймворки, заново изобретающие колесо. (И это исходит от человека, который предпочитает C++ многим другим языкам, но я также люблю Python.) — Роджер Пейт

Позвольте мне сказать это так:

Я прошел сертификацию Sun Java Certification на 94 %. ни разу не скомпилировав строку Java (это было девять лет назад). Я смог это сделать, потому что очень хорошо знал C++.

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

C ++ — это жесткий, а если хорошо усвоишь — почитай Страуструпа Язык программирования C ++, тоже делай упражнения, читай его Дизайн и развитие C ++, читайте C++ Faq и книги Мейерса и книги Херба Саттера, читайте comp.lang.c++.moderated, читайте Coplien’s Стили и идиомы расширенного программирования на C ++ независимо от того, на каком объектно-ориентированном языке вы хотите кодировать — если вы хорошо его выучите, любой другой объектно-ориентированный язык будет легким.

Изучение C++ — отличная подготовка к обучению программированию. (И вы тоже станете хорошим программистом на C, но прочитайте K&R, чтобы стать хорошим программистом на C.)

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

C ++ — это весело. Прочитайте «Любопытно повторяющийся шаблон шаблона»: он выглядит так

Да, вы правильно поняли: это класс, производный от базы, созданной по шаблону производного класса. Сейчас это звучит просто неясно и глупо, но этому есть много хороших применений, и буквально на днях я билась головой, потому что вы не можете сделать это в Java (потому что Java использует стирание типов, а не шаблоны для дженериков), но если бы я мог использовать его, я мог бы сохранить много-много кода, повторяющегося во многих классах.

В C++ есть гораздо больше, и если вы ограничитесь Java или .Net, вы никогда этого не откроете.

ответ дан 03 апр.

+1 за невероятный поток 🙂 Мне нравилось изучать C++, и мне посчастливилось освоить его аспекты, работая с ним около 5 лет. Это по-прежнему мой «любимый» язык, хотя я почти не использую его. — Бинарная тревога

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

There’s so much more in C++, and if you limit yourself to Java or .Net, you’ll never discover it. точно. +1 только за эту фразу. — в.одду

C++ — не простой язык для изучения, как отмечают все остальные, но есть несколько причин, по которым с него стоит начать:

  • он не привязывает вас к определенной парадигме программирования (например, Java и ООП), поэтому вы можете легко экспериментировать с различными методами
  • C++ не имеет наворотов, поэтому вы можете сосредоточиться на создании строительных блоков, если хотите знать, как они строятся.
  • поскольку это язык, а не платформа, вы можете выбрать библиотеку или библиотеки, которые лучше всего соответствуют поставленной задаче или выбранному вами стилю программирования (например, выбрав что-то вроде Поко для явского чувства, ACE для жесткого раннего стиля ОО и т. д.)
  • это язык программирования общего назначения, а не платформа (пришлось сказать это дважды)

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

Для начального списка чтения в произвольном порядке:

  • «Ускоренный C++» Кенига и Му
  • «Эффективный C++/STL» Скотта Мейерса
  • Бертран Мейер «Создание объектно-ориентированного программного обеспечения».
  • «Экспертное программирование на C» Питера ван дер Линдена
  • «Учебное и справочное руководство по STL» Муссера, Дерге и Саини.
  • «Стандартная библиотека C++» Джосуттиса

ответ дан 03 апр.

Страуструп «Программирование: принципы и практика с использованием C++» тоже хорош. Я сомневаюсь в книге ван дер Линдена: хотя это отличная книга для программирования на C, я не думаю, что она полезна для C++. — Дэвид Торнли

На самом деле я думаю, что книга ван дер Линдена очень полезна для программистов на C++. Он содержит одни из лучших описаний того, как на самом деле работают указатели и управление памятью. По сути, он содержит все мельчайшие детали, которые С++ должен скрывать, но никогда не может;) — Д.Шоули

Здесь много поддержки С++, но я не согласен. У каждого языка есть свои плюсы и минусы (конечно, некоторые достигают лучшего баланса, чем другие).

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

Разработка (если не среда выполнения) почти всегда быстрее на таких языках, меньше вещей, которые могут сбить вас с толку, и есть лучшие инструменты, помогающие понять, что пошло не так, когда это произошло.

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

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

отредактировано: Джон Д. поднимает вопрос в комментарии о том, что некоторые люди, которые сначала изучают язык GC’d (который ни в коем случае не ограничивается «скриптовыми» языками), никогда не изучают указатели позже. Однако это отвлекающий маневр. Некоторым людям не удается научиться разным вещам по самым разным причинам. Я утверждаю, что беспокойство по поводу указателей — это отвлечение, когда вы изучаете основы. В какой-то момент вам может понадобиться научиться ручному управлению памятью, но поначалу это не принципиально важно. Или, точнее, прибыль, полученная за счет того, что этого удалось избежать, важнее затрат.

Однако позвольте мне прояснить: я не говорю, что C++ — худший выбор для первого языка, потому что в нем отсутствует сборка мусора. Это лишь одна из многих проблем, которые мешают хорошо изучить основы программирования. Настоящая проблема заключается в том, что это большой сложный язык с причудами повсюду и даже внутренними несоответствиями (например, указатели и исключения плохо сочетаются друг с другом). Конечно, всем этим можно управлять должным образом, и вы можете научиться хорошей практике, чтобы не попасть в беду.

Однако поначалу все это не будет иметь особого смысла для настоящего новичка. Таким образом, часть обучения в конечном итоге будет заключаться в том, чтобы «делать это так, а не так». «Зачем?» «потому что я так сказал — вы еще не поймете деталей». Вряд ли удачное начало.

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

Похожие статьи