Почему C ++ часто является первым языком, преподаваемым в колледже? [закрыто]

12

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

Я видел, что многим людям не нравится C ++, и я читал множество причин, почему. Похоже, популярное мнение, что C ++ не очень хороший язык. У меня сложилось впечатление, что он не очень понравился, основываясь на некоторых вопросах на StackExchange, а также на постах, таких как:
http://damienkatz.net/2004/08/why-c-sucks.html
http://blogs.kde.org/ узел / 2298
http://blogs.cio.com/esther_schindler/linus_torvalds_why_c_sucks
http://www.dacris.com/blog/2010/02/16/why-c-sucks-part-2/
и т. д.

(Примечание: я не считаю, что C ++ - это плохой язык. На самом деле это основной язык, которым я пользуюсь. Однако Интернет, как и некоторые профессора, создали у меня впечатление, что это не очень популярный язык. На самом деле один из моих профессоров постоянно треплет на C ++, но это все еще начальный язык в моем колледже!)

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

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

Casey Patton
источник
6
Какие школы и где? Все те, кто рядом со мной (трое в городе и несколько других в паре часов езды) преподают Java как родной язык. C ++ приходит в течение последнего года или двух (в зависимости от того, какие курсы студент проходит). Так было, по крайней мере, последние 10 лет.
FrustratedWithFormsDesigner
7
Профессора, как и другие программисты, имеют только умеренно рациональные симпатии и антипатии. В то же время они, как студенты, лишены опыта.
Майк Данлавей
@Casey Вы, вероятно, столкнетесь здесь с некоторыми пользователями, поскольку вы только представили утверждение, что C ++ не нравится, но не оправдывает его. Если вы просто хотите узнать, почему C ++ выбран в университетах, я настоятельно рекомендую вам отредактировать любые ссылки, которые ему нравятся или не нравятся, поскольку это в значительной степени не имеет отношения к вашему актуальному вопросу.
Адам Лир
4
В первый год все дело в отделении пшеницы от плевел.
Стивен Эверс
2
Было бы интересно получить некоторую статистику о том, сколько колледжей / университетов используют какие языки для своих вводных курсов.
Джерри Гроб

Ответы:

25

Каждый язык имеет культ поклонников и ненавистников; это верно для C ++, Java, C #, Haskell, Objective-C, что угодно.

Есть много веских причин любить или не любить язык.

В конце концов, есть несколько причин, почему C ++ преимущественно преподается в университетах:

Не спешите отвергать его как «плохой» язык; Я рекомендую вам погрузиться в это, по-настоящему изучить его, создать несколько проектов среднего и большого размера, используя его. Затем сделайте то же самое с другими языками; в этот момент у вас будет достаточно опыта и понимания, чтобы сказать: «Я думаю, что C ++ плох, потому что X, Y, Z» или «Я думаю, что C ++ хорош, потому что A, B, C, которого нет в Java».

Тебе еще есть чему поучиться, молодой кузнечик.

Bitgarden
источник
2
Это может быть не «плохой» язык, если вы переходите к философии «плохой - это субъективно», но практически для любой комбинации технических проблем существует более производительный, более безопасный язык. На мой взгляд, причина, по которой C ++ преподается, заключается в том, что это то, что люди используют, и это то, что люди используют, потому что это то, что люди знают, и это то, что люди знают, потому что это то, чему учат университеты. Помимо популярности, C ++ не имеет существенных достоинств, которые я вижу, и я программирую с этим профессионально.
weberc2
13

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

Карл Билефельдт
источник
9
Я обеспокоен тем фактом, что эта ложная аналогия собрала так много голосов. Это не так, как работает обучение. Одно из многих заблуждений дидактики.
Конрад Рудольф
12
C++ isn't that bad. 

То, чему учат в школе, обычно зависит от того, что знают профессора, и что использовалось в промышленности и популярно в то время.

Думайте о школах как о капсуле времени в прошлое. :)

Я действительно хотел бы, чтобы все было наоборот.

dustyprogrammer
источник
очень разумный момент! Мне не давали никаких упражнений на умные указатели или RTTI или RAII в колледже. WTF!
Чани
12

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

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

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

Наконец, у него нет «коммерческих» проблем, которые есть у некоторых других языков (например, Java-Oracle или .NET-MS). Я знаю, что многие университеты не хотят обвиняться в том, что они преподают продукт одной конкретной компании другому.

Скотт Уитлок
источник
1
+1 для с ++ не является коммерческим языком. Хорошо изучать язык, не беспокоясь о политике и деловой тактике. <установка Java7 на Linux например>
Chani
5

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

Может быть несколько причин изучать C ++ в колледже с первого года обучения:

  • Это в основном используется. Существующая кодовая база просто огромна, и даже сейчас, когда есть языки как Ruby, Python или C #, C ++ все еще широко используется даже при создании приложений с нуля, в том числе для веб-сайтов. В этом случае изучение C ++ является хорошим выбором. По крайней мере, лучше, чем тратить два года на изучение Ады, то есть то, что вы никогда не будете использовать в своей жизни, если не будете разрабатывать приложения для космических кораблей.

  • Это не слишком абстрактно. Например, как вы можете объяснить студентам, что такое указатели, если они изучили только C # или Java?

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

Это делает C ++ более подходящим, чем Ada, Java или PHP.

Арсений Мурзенко
источник
1
Кажется, что C будет лучше для ваших вторых двух очков. Существуют ли школы, которые обучают Аде? Я бы определенно взял это за C ++, но опять же я странный!
Джетти
C ++ выбран для коммерческих продуктов, потому что это то, что люди знают больше, а не из-за его технических проблем. C ++ является небезопасным, сложным в использовании языком по сравнению со многими современными языками. Языки выбираются не по существу, а потому, что они популярны.
weberc2
Кроме того, я не могу думать о многих вещах, которые Ada делает хуже, чем C ++, и я бы предпочел использовать это, чем C ++ (мой код был бы проще и безопаснее, в любом случае), и я программирую на C ++ профессионально! А для обучения студентов указателям, всегда есть Ada, Go или любой из множества вменяемых языков. И что касается вашего последнего пункта, C ++ излишне сложен. Многие из проблем, с которыми сталкиваются программисты на C ++, не имеют ничего общего с программированием, а с преодолением C ++. Программирование на любом уровне довольно просто на здравом языке.
weberc2
5

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

Тем не менее, на языке, таком как Java, вы можете иметь быстрое время развертывания, имея лишь некоторые расширенные знания о плюсах и минусах языка / стандартной библиотеки. Черт, я знаю только пять вещей из стандартной библиотеки Java наизусть (кроме основных вещей, таких как коллекции, конечно).

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

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

user32288
источник
Возможно, это не относится к объектному коду, но обещание языков C, в том числе C ++, заключалось в том, что когда-то существовали компиляторы практически для каждой платформы, поэтому один и тот же исходный код можно было использовать для компиляции приложений для самых разных платформ.
JohnFx
Это на самом деле правда. Большинство * NIX-платформ имеют встроенные компиляторы, и это имеет тенденцию оказывать психологическое влияние на большинство людей в форме «Конечно, я мог бы скачать ЭТОТ компилятор, но этот поставляется с моей ОС, так что он наверняка будет лучшим».
Вы должны попробовать другие языки помимо Java - есть альтернативы, которые составляют лучшее из обоих миров. Go, например, предлагает скорость, мобильность и простоту, и это делает параллелизм быстрым.
weberc2
4

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

Майк
источник
Это звучит как аргумент в пользу Ады, а не C ++ ...
weberc2
3

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

Для запуска и запуска этой исходной программы "hello world" меньше синтаксиса "пух" по сравнению с java или C #. Должен ли новичок видеть слово «статический» в приложении «Hello World»? В Java / C # они делают.

Jojo
источник
3

Когда я изучал информатику, сначала изучали Java, но сейчас мой университет преподает нам два языка для компьютерных лингвистов: сначала Пролог, а затем С ++.

C ++ преподается (по крайней мере) по следующим причинам:

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

  • Это действительно быстро. Вы не можете использовать Python, Scheme или Prolog для обработки огромных наборов данных, что часто встречается в наши дни. Представьте себе алгоритмы графа с миллионами узлов. (Вот почему компьютерные игры обычно пишутся на C ++.)

  • Студенты могут узнать, что делает компилятор. На самом деле, пока я только изучал Java (начиная с старшей школы), работа компилятора всегда казалась мне волшебной. Вы просто не узнаете о стеке и куче, о статических и динамических связях и т. Д. Как новичок в Java. C ++ де-мистифицирует весь компьютер.

  • Что бы он ни делал, это нормально во время обучения (хотя, возможно, это один из самых сложных языков, если вы действительно углубитесь в это). Он предлагает хорошую библиотеку, которая помогает с плавной кривой обучения. (Однако существуют разные подходы к этому. В моем университете нас учили, как писать собственные классы строк и умные указатели, прежде чем нам разрешили использовать библиотеку; Бьярн Страуструп, изобретатель C ++, поощряет противоположный порядок.)

Феликс Домбек
источник
Это не объясняет, почему Ада, например, не преподается как первый язык.
weberc2
2

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

Я действительно люблю язык и считаю, что он превосходит большинство альтернатив.

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

Также хорошее чтение - http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

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

Хорошее чтение, чтобы коснуться одной из смежных тем - http://blogs.msdn.com/b/oldnewthing/archive/2004/04/22/118161.aspx

кодировщик
источник
3
Этот ответ просто совершенно неверный. Прежде всего потому, что нет языка под названием «C / C ++».
Конрад Рудольф
1
  1. Профессорам не нравится готовить новый курс, и есть предел того, сколько вы можете предложить.
  2. Языки приходят и уходят, поэтому они перестали пытаться оставаться на переднем крае (см. № 1)
  3. Это университет, а не техникум. Больше внимания уделяется обеспечению основы, чем профессиональной подготовке.
  4. Охватывает достаточно широкий спектр программирования: серверное, настольное, встраиваемое, UNIX, Windows.
  5. Они используют это как курс отсеивания. У каждой основной области изучения есть по крайней мере одна.
JeffO
источник
1

Раньше был Паскаль, раньше Паскаль был чем-то похожим на Basic. Интересная часть - что дальше? Может быть, ничего. У меня есть мысль о том, почему C ++. Потому что это тяжело, но не так сложно, шутка. Нет, я действительно понимаю, что C ++ является хорошим языком для системного программирования, я знаю, что есть много проектов, написанных на C ++, и есть тонны библиотек, поэтому студенты могут создавать все с его помощью. Но мы говорим о студентах и ​​их возможности создавать логику и понимать систему. Вы не можете быть хорошим программистом на C ++, если не можете создать простую логику и понять, как работает система, и это, на мой взгляд, главная причина. И да, еще одна простая причина - стабильное начало карьеры.

CND
источник