@ Анна Лир: Конечно, любой язык может быть первым языком, но это не квалифицирует C ++ как хороший первый язык. Если бы ваш ответ был действительным, я бы отказался признать его бесполезным.
Эд Джеймс
6
@Doug: Я программирую на C ++ для жизни ... в чем ваша точка зрения?
Матье М.
9
@Dough - 70% компьютерных проектов сегодня связаны с написанием программного обеспечения для встроенных систем и микро устройств. Угадайте, какие языки используются для этих проектов? Угадайте, кто лучше всего оснащен для позиций начального уровня? Конечно, не пони Java или .NET пони. Звучит грубо, но школы оказали плохую услугу целому поколению выпускников CS, обучив их только для 30% рынка труда программистов. У нас переизбыток программистов в секторе приложений (30%), а в системном секторе (70%). Эти цифры никуда не денутся. Будущие возможности карьерного роста? Да правильно.
luis.espinal
Ответы:
61
Решительно Нет .
Для любой цели, которую вы имеете в виду для студентов, другой язык или последовательность языков будут быстрее и лучше. Примеры.
«Студенты должны понимать концепции низкого уровня».
«Низкоуровневое» кодирование не состоит в том, чтобы получать объекты new, возвращать их назад deleteи иногда иметь указатель, указывающий куда-то, чего не должно быть. Функции, классы и шаблоны не являются низкоуровневыми. RAII, 12 способов использовать const, std::ostream::operator<<, protectedи newне являются понятиями низкого уровня. Эти вещи имеют низкоуровневые последствия, и вы пропускаете их в течение нескольких месяцев или до следующего урока и вместо этого учите горы семантики C ++.
Я предлагаю ассемблер с хорошей средой и учебным материалом, таким как MIPS или MMIX. Если вы спешите, научите C обходным путям хотя бы взглянуть на вывод ассемблера. Это даст вам все низкоуровневое понимание, которое делает C ++, а затем и немного, быстрее.
«Студенты должны понимать объектную ориентацию».
Объектная ориентация, встроенная в C ++, слишком сложна для обучения концепции ОО или почти любой другой концепции высокого уровня. См . C ++ FAQ для хорошего, длинного списка потенциальных причин, почему. Вы либо должны поразить все эти вещи, что займет очень много времени у новых программистов; или же вам придется пропустить многие из них, оставив новых программистов в неведении - фактически, не зная C ++!
Я предлагаю изучать более простой, высокоуровневый язык с объектами в первую очередь (Python, Ruby, Squeak, Common Lisp, Racket), если вы вообще должны учить C ++. Кроме того, изучите полиморфизм как концепцию, отдельную от ОО, посетив функциональный язык.
«Студенты должны понимать шаблоны и метапрограммирование шаблонов».
Никто действительно не спрашивает об этом, но я бы хотел, чтобы они это сделали. C ++ имеет хорошие шаблоны и STL - это круто, но они не должны быть достаточно приоритетными, чтобы сначала научить C ++. Обучение системе типов OCaml или Haskell, а затем модификация этих концепций может быть быстрее в любом случае.
«Студенты должны научиться решать проблемы».
Да, вы получаете это на любом языке, и вы получите больше, если это будет почти на любом языке, кроме C ++, потому что там намного меньше багажа. Опять же, смотрите C ++ FAQ для получения списка всех вещей, которые студенты будут изучать вместо навыков решения проблем.
«Все вышеперечисленное, и нам нужно использовать только один язык». или «Работодатели хотят этого». или «Нам нужен язык в стиле C». или...
Учить больше, чем один язык.
Идея, что вы экономите время или энергию, обучая или изучая только один язык, совершенно нелепа. Он основан на идее, что изучение любого данного языка занимает ровно X человеко-месяцев ( подсказка! Подсказка! ), Где X - это одно число или одно число для каждого языка. Это почти идентично идее, что вы можете сэкономить время и деньги, пропуская все эти «требования» и «тестирование» мусора.
Что касается множественных синтаксисов, вы опасно наносите вред студентам, если учите их ожидать синтаксиса C на каждом языке, делая их дико предвзятыми по отношению к другим языкам.
Практически любой путь быстрее и лучше, чем начинать с C ++. Изучение простого языка высокого уровня, а затем C ++ будет быстрее. Изучение ассемблера, а затем C ++ будет быстрее. Что-нибудь кроме C ++ поможет студентам быстрее и они будут знать, как загружаться. Только не учите сначала C ++.
Отличный ответ! Действительно, многие функции C ++ совсем не связаны с низкоуровневым программированием.
Марко Мустапик
7
+1, отличный ответ. Это правда, что иногда прихоти C ++ ошибочно приравниваются к «низкоуровневости». Вы связались с C ++ FAQ, но я бы также порекомендовал людям взглянуть на C ++ FQA (или «Часто задаваемые вопросы»: P)
Полностью согласен. Даже Malbolge будет лучше, чем C ++ для начинающих.
правильном направлении
2
Моя единственная оговорка - вы можете многому научиться, не вдаваясь в подробности, которые в основном касаются только людей, разрабатывающих библиотеки. До тех пор, пока вы ясно даете понять, что вы делаете только базовый C ++ ... но опять же, чему вы все равно научили?
Steve314
54
Нет, C ++ - сложный язык даже для опытных разработчиков C ++. Даже для самых простых алгоритмов вы должны объяснить многие тонкости языка. Рассмотрим пример Hello World:
Что это за #includeкоманда? Что std::cout. Почему то ::? Что такое <<? Оооо, это перегруженный оператор! Что за перегруженный оператор? Ооо, потому intsчто он немного сдвигается, но для чего бы то ни было std::cout, он выводит вещи на консоль. Оооо, std::coutэто поток, и у потоков их <<и >>оператор перегружены.
Python подойдет для семиклассника. Студент колледжа может понять гораздо больше.
Гюльшан
13
Конечно, но мы говорим о первом языке. C ++ известен тем, что его трудно изучать и осваивать по сравнению с другими языками. Зачем использовать его для обучения программированию? Студент может изучать C ++ позже, когда он знает некоторые основы программирования.
Марко Мустапик
8
Вы даже не упомянули аргумент-зависимый поиск << :)
MetricSystem
6
Вам не нужно знать абсолютно все, чтобы начать работу с языком. кут << что угодно; «просто работает», вам не нужно вдаваться в мельчайшие подробности, пока вы не расскажете о перегрузке оператора и т. д. позже.
Колен
6
Я бы взял Python поверх C ++ в любой день недели в качестве вводного языка.
jprete
21
Вероятно, это не очень хороший первый язык: сложный синтаксис, множество правил, старый язык, подверженное ошибкам управление памятью. Лучше учить своих учеников чему-то более оригинальному, например, Smalltalk, или чему-то более приятному для программирования, например Python, или чему-то функциональному, например, Haskell.
Они могут изучать C ++ позже в жизни (если они не могут с этим поделать), после того как они выучили лучшие языки
Хаскель как родной язык был бы интересным экспериментом.
Ларри Коулман
@Larry, курс CS Кембриджского университета преподает SML в качестве первого языка.
Питер Тейлор
1
Функциональное программирование искажает ваш мозг - я знаю, что MIT начинался со Scheme довольно рано, но я рад, что я не начал заниматься функциональным программированием до тех пор, пока после двух лет гибридного процедурного / OO-стиля в школе.
justkt
11
@justkt: Все языки крутят ваш мозг. Это просто вопрос того, как вы хотите, чтобы это искажалось.
Дэвид Торнли
+1, но я бы не стал категорически обозначать языки, кроме C ++, как обязательно «лучше».
Greyfade
18
Краткий ответ: да!
Я бы сказал, что любой язык является подходящим началом, но особенно C ++ (или эквивалентный). В наши дни C # и Java являются основными языками использования и программирования, благодаря которым вы быстро учитесь опираться на API и IDE, но с C ++ вы получаете возможность изучать программирование с нуля, включая оптимизацию производительности и т. Д.
Нет ничего плохого в том, чтобы изучить основы программирования, циклов и сортировки, прежде чем просто слепо полагаться на языки, встроенные в .Sort ();
Циклы и сортировка, да. Вы можете сделать это на любом языке. Но зачем начинать работать с указателями и странным синтаксисом, если этого можно избежать? Вы можете узнать все это позже, когда у вас будет больше опыта программирования.
Марко Мустапик
4
@Marco: Вводный учебник Страуструпа «Программирование: принципы и практика с использованием C ++» представляет указатели примерно в середине книги. Вы можете делать много вещей в C ++, не вводя указатель.
Дэвид Торнли
4
«Это никогда не плохая идея, чтобы выучить основы ... раньше ...» Есть ли у вас какие- либо исследования, чтобы поддержать это утверждение? Я знаю, что многие умные люди утверждают, что общеизвестно, что «снизу вверх» - единственный верный способ обучения, но это очень спорный момент, и единственное (по общему признанию, очень ограниченное) дидактическое исследование, которое я знаю, указывает на противоположный вывод.
Конрад Рудольф
1
@ Дэвид: Проблема в том, что «делать много вещей в C ++» без указателей еще хуже. Без указателей все ваши объекты объявляются в стеке, что когда-либо было одной из худших идей программирования. Типы значений и наследование / полиморфизм просто не смешиваются, и попытка смешать их приводит к целым категориям ошибок, которых нет в лучше разработанных языках.
Мейсон Уилер
9
О боже, нет! Зачем сжигать ограниченный запас мозговых циклов на ненужных идиосинкразиях C ++? Зачем сосредотачиваться на нерелевантных вещах низкого уровня, таких как управление памятью, когда цель состоит в том, чтобы изучить основные понятия в программировании? Зачем прыгать в глубокий конец ?!
Маглоб
14
На самом деле я считаю, что это, вероятно, хороший выбор в качестве первого языка по очень практической причине: после изучения C ++ любой другой язык, с которым вы столкнетесь, будет казаться легким для изучения.
При всем уважении к Дейкстре, практически невозможно обучить хорошему программированию студентов, которые ранее имели опыт работы с C ++; как потенциальные программисты, они умственно изуродованы за пределами надежд на возрождение. ;)
Мейсон Уилер
3
Им придется избавиться от множества вредных привычек в C ++. Если использовать другой пример, делает ли знание ассемблера лучшего программиста на Java? Я бы сказал, что это не так.
Андрес Ф.
16
@ Андрес Ф .: Должен не согласиться с этим. Знание ассемблера делает вас лучшим программистом независимо от того, во что вы пишете, потому что тогда вы сможете понять, что на самом деле происходит.
Мейсон Уилер
2
@Andres: я видел слишком много программистов на Java / C #, приходящих на другие языки и втискивающих все в объекты ... им не хватает опыта.
Матье М.
3
@Andres F. - За 12 лет работы на Java я столкнулся с моей долей программистов на Java, которые действительно отстой в том, что не имеют никакого отношения к таким вопросам, как распределение ресурсов, RAII, не знают, как программировать дружественные к gc приложения, и т. д. Знание ассемблера и знание скомпилированных языков без автоматической поддержки мусора и поддержки парадигм, отличных от OO (C, C ++, Ada или почти любой скомпилированный язык семейства Algol), научит вас писать эффективные и большие системы на Java, C #, Python, вы называете это. Кроме того, объектная модель в C ++ совсем не похожа на Java.
luis.espinal
10
Я учил себя C ++, когда мне было 15-16 лет.
Лучше оставить магию другим и изучить внутреннюю работу вещей самостоятельно.
Проще говоря, если вы не можете понять синтаксис и семантику начального уровня C ++, вы не так уж хороши в компьютерах. Это не так сложно. Нет веских причин избегать "C с классами".
Если вы ожидаете, что студенты начнут работать над метапрограммированием шаблонов, выводя полиморфные вызовы и распутывая множественные иерархии наследования - это смешно для класса начального уровня для любого языка, который вы используете.
Есть очень плохая тенденция хотеть скрыть тонкости программирования для студентов. Это не очень хорошо (см. Эссе Java Schools Spolsky). Эти люди попадают в DailyWTF, если у них не получается поразмыслить. Утечка абстракций, и когда (не если) утечка абстракции, это хуже, чем иметь дело с этим. Я работал в качестве TA для студентов начального уровня C ++. Либо вещи должны быть спрятаны полностью, либо они должны быть выведены на свет для изучения. Магия - враг ученика.
Если бы мне пришлось рекомендовать начальный язык, скомпилированный с машинным кодом, вариант Pascal, вероятно, был бы лучшим подходом. Из того, что я помню, у него более регулярный и структурированный подход, чем у семьи C.
@Ed: Не совсем. Я освоил If и Goto в QBASIC, и это было об этом. Указатели, массивы, функции, классы и т. Д. Были в моем будущем C ++. Рекурсия тоже была непостижимой.
Пол Натан
5
Подождите, никто не ожидает, что кто-то будет работать над проектом с использованием C ++ без предварительного понимания C ++! Это действительно привело бы к созданию кода, достойного TheDailyWTF. Но вопреки вашему утверждению, изучение C ++ не тривиально (и это не "C с классами"). C ++ имеет огромный, запутанный и иногда бессмысленный синтаксис и грамматику, а также бесконечное количество ключевых слов и правил. Это ужасный язык для начала. Как язык обучения это ужасно, потому что заставляет студентов думать, что недостатки С ++ естественны и неизбежны в мире программирования.
Андрес Ф.
1
Andr: Вы настаиваете на ложной дихотомии: "~ C ++ или All C ++". Это ошибочно.
Пол Натан
1
@ Пол: достаточно справедливо. Но учтите это: даже синтаксис и грамматика упрощенного C ++ запутанны, потому что он должен поддерживать все функции полного языка. Итак, вы уже пошли на компромисс в использовании уродливого языка, даже если вы учите его в более простых формах. Я предполагаю, что вы не просто программируете на C с каким-то синтетическим сахаром (он же «C с классами»), потому что в этом случае вам лучше подойдет обычный C!
Андрес Ф.
2
@Андр: Не совсем. C ++ предлагает значительное синтаксическое упрощение по сравнению с C89. Кроме того, для целей начального уровня все очень просто для всех случаев, о которых я могу подумать ...
Пол Натан,
8
Я бы сказал «нет» - у меня было рвение и желание изучать программирование, и я сразу же начал учебу в колледже по классу C ++. В сочетании с учителем, который преподавал C ++, как если бы это был другой язык (концепции, которые имели для них смысл, не обязательно концепции языка или приложения реального мира), и проекты, которые бросали на нас сразу каждую неделю, я терпел крах и сгорал вместе с половина класса. К тому времени, когда я мог даже переваривать, экспериментировать и применять то, чему меня учили, я боролся с домашним заданием проекта, которое удваивалось как тесты. Я бы сказал, что это был курс уровня 200, а не 100.
Я действительно старался изо всех сил. Я не просил сочувствия, я знал, что это будет вызовом, но учитель даже не помог бы мне. Просто сказал мне пойти читать учебник, как я делал.
Я бы поспорил (а некоторые не согласились бы), что Ruby или Python - намного лучший язык, чтобы вломить кого-то в мир программирования. Чистый, лаконичный, читаемый, понятный синтаксис.
Любой язык является плохим первым языком, если плохо преподается.
Дэвид Торнли
3
@ Дэвид Торнли: однако, даже при правильном обучении некоторые языки являются плохим выбором в качестве первых языков. Например, Кобол.
Андрес Ф.
Я согласен, я чувствую, что с лучшим учителем, который позаботился о том, чтобы привлекать других, а не просто проходить материал курса с молниеносной скоростью, результат мог быть другим. Это просто катилось слишком быстро для меня.
Кевин
@ Andrés F .: Я не согласен с этим. Тем не менее, рассказ Кевина был о плохом учителе, и плохой учитель может испортить Python или Scheme в качестве первого языка (мои две кандидатуры за хороший первый язык).
Дэвид Торнли
2
@Chris: Я запрограммировал на Коболе, и мне жаль тебя :)
Андрес Ф.
8
Нет.
Как язык обучения, C ++ лишь незначительно лучше, чем C, который является одним из худших языков обучения. Это вводит много сложности заранее, некоторые части языка не интуитивно понятны, и большую часть времени вы изучаете больше о C ++, чем о программировании в целом.
Это не значит, что C ++ (или C) - плохие языки, или их не стоит изучать; просто есть лучшие обучающие языки, такие как Python.
С - сложный язык для преподавания, но он, безусловно, один из худших. COBOL и Java считают пирог одним из худших, намного хуже, чем C. Хорошая вещь в C состоит в том, что вам приходится иметь дело с внутренним металлом заранее (без необходимости углубляться в ассемблер). Людей успешно учат с C в качестве основного языка. Конечно, есть и другие, более изящные варианты, такие как Python или Ruby (или любой язык с множественной парадигмой, который не требует ненужных усилий даже для самых простых задач.) C не является одним из худших учений. выбор, а не длинный выстрел.
luis.espinal
1
Маргинально лучше? Как вы фигурируете? C ++ берет все плохое в C и строит на нем !
Мейсон Уилер
1
@MasonWheeler: Главным образом потому, что C ++ предоставляет честный Богу stringтип данных, который перегружает операторы, например +, =и ==выполняет то, что более или менее ожидают ученики, по сравнению с тем, как должна выполняться обработка строк в C. Следовательно, «незначительно» , Я не рекомендовал бы ни как язык обучения.
Джон Боде
7
Существует два основных типа послесреднего образования: университет и ремесленное училище. Разница в том, что вы хотите быть готовым сделать после окончания учебы. В автомобильной сфере вы будете механиком или инженером-механиком.
При этом C ++ - отличный первый язык, если вы хотите быть инженером, и паршивый, если вы хотите быть программным эквивалентом механика.
Вступительный класс на C ++ собирается потратить много времени на обсуждение типов данных, определений, объявлений, указателей, распределения памяти и так далее. Это отличная основа, если вы намерены потратить несколько семестров на то, чтобы сделать что-то полезное, но хотите знать, что, как только вы туда доберетесь, у вас есть основание справиться с любой степенью сложности.
С другой стороны, если вы хотите быть в состоянии сделать что-то полезное быстрее, но не возражаете, если домен и сложность ограничены, то тратить все это время на эти концепции более низкого уровня будет пустой тратой времени. Есть много программистов, которые могут написать отличный валидатор HTML-форм, но не имеют ни малейшего понятия, как подойти к разработке драйвера устройства.
Конечно. Моим первым языком был C, но это было просто для того, чтобы облегчить наш класс в C ++. Это сделало Java намного проще в обращении, когда я поступил в университет C ++ может иметь немного более крутой кривой обучения, но если его учат правильно, все должно быть хорошо.
Нет, C ++ не подходит в качестве первого языка. Как показано здесь, многие профессиональные программисты разделяют это мнение, но это также мнение, которое имеют профессиональные учителя.
Вот что доклад от декана Университета Карнеги - Меллона должен сказать об использовании C ++ для вводного курса по программированию для первокурсников:
Стандартные языки, такие как C или C ++, не подходят для этого курса, потому что их сложность и недостатки препятствуют как неформальным, так и механизированным методам рассуждений.
CMU предлагает два вводных курса, обязательный и функциональный. SML был выбран для функционального программирования. Я не знаю, что было выбрано для обязательного курса, но в докладе упоминается подмножество C.
Конечно. Есть и другие языки, которые студентам первого курса легче понять. Однако есть способы, которыми учитель может медленно вводить понятия в C ++.
Определенно C ++ может быть самым первым языком. Но это о том, как хорошо это преподается.
Все говорят, первый язык должен быть очень легко понять. Но я хочу сказать, что большинство людей начинают программировать на уровне бакалавриата. Таким образом, вы можете научить чему-то, что они способны понять. А с C ++ вы можете перейти с более низкого уровня на более высокий уровень программирования.
Но почему бы не начать на более высоком уровне программирования? Это уровень, на котором мы решаем большинство проблем (за исключением, конечно, определенных проблем, специфичных для конкретной области). Затем, если им нужно приблизиться к металлу, они могут выучить C ++, ассемблер и т. Д.
Andres F.
Я согласен, это о том, как хорошо это преподается!
Гэри Уиллоуби
2
Абсолютно нет.
Если бы у меня был свой путь, я бы почти полностью запретил его использование в академической среде. Не по причинам, которые противоречат уже сделанным, а потому, что слишком многие думают, что C ++ (или его вариации) - это решение практически для любой проблемы, потому что вы можете использовать его практически в любой ситуации. Это отвертка программирования.
Некоторые люди используют это, чтобы затянуть винты, совершенно разумный инструмент для работы. Другие используют его как монтировку, хотя часто и эффективны, но на самом деле не идеальны, потому что отвертка, независимо от того, что скажет вам ваш отец, не является монтировкой и может катастрофически потерпеть неудачу из-за неправильного использования, потому что состав хвостовика не сделан намеренно за те силы, с которыми столкнулся бы монстр. Третьи могут попытаться использовать его как пуансон или долото, и они почти всегда будут сталкиваться с проблемами, потому что рукоятка отвертки не была создана для того, чтобы поразить жестокое обращение, которому должен противостоять удар или долото.
На мой взгляд, работа программиста состоит в том, чтобы в целом перевести реальные проблемы в автоматизацию, которая обеспечивает некоторую степень повышения эффективности (уменьшение выделения ресурсов для выполнения задачи), скорости (уменьшение времени на выполнение задачи), предсказуемости (повышение повторяемости). задачи), или организации (повысить осведомленность о взаимосвязи между задачами).
Понятно, что каждый, кто программирует, должен иметь общие знания о низкоуровневых операциях компьютеров и, в частности, об устройстве ввода-вывода и распределении памяти, безусловно, редко приходится действительно использовать эти знания в какой-либо значительной степени, не говоря уже о том, чтобы использовать их для Подавляющее большинство задач. Попытка сделать это без понимания более широкого контекста проблемы вносит ненужный риск в усилие.
Абсурдно, что первым языком программирования должен быть C / C ++ или близкие варианты, так как класс проблем, которые решают C и его производные, безусловно, не подходит для некоторого сколь угодно большого процента текущих и будущих проблем (кроме тех случаев, когда нужно спасать ранее закрученная программа), и на самом деле это всего лишь небольшой набор грядущих проблем. Большинство программистов никогда не приблизятся к разработке основных функций ОС или прямых интерфейсов устройств, несмотря на растущее преимущество небольших мобильных, взаимосвязанных устройств. Большинство будет работать и жить так, как мы. Исправление и постепенный отказ от кода, которому более двух поколений, реализация по технологии, которая уже показывает возраст, или работа на периферии технологии в приложении killer (x + 1).
Для первого языка я бы посмотрел на Lego NXT, легкий, но многофункциональный вариант LabView. Хотя Lego NXT не используется широко на коммерческих предприятиях, он представит фундаментальную природу того, что он должен программировать «богатым сенсором» способом. Я мог бы связать его с несколько платформенно-нейтральным языком сценариев, таким как Javascript или TCL / TK. И то, и другое было бы относительно неэффективным с точки зрения того, что вы должны обнаружить для выполнения очень простых, но эффективных задач, с высокой отдачей с точки зрения цикла обратной связи и гибкости, позволяющей вводить и решать проблемы различной степени сложности. Кроме того, это дает хорошую возможность для студентов, поскольку они продвигаются, чтобы исследовать потенциал для превышения того, что обеспечено в консервированной окружающей среде: шанс попробовать работать в темноте, сырой,
После того, как они научатся управлять четырьмя цилиндрами в автоматическом режиме, перейдите к большому механическому модулю v8, если они действительно заинтересованы и мотивированы. Если Джоэл не может найти программистов рок-звезды под каким-либо камнем под ногами, ему, возможно, придется искать в другом месте или переосмыслить, почему ему может понадобиться больше, чем куча отверток в его наборе инструментов.
Вот некоторые из моментов, когда новички легко допускают ошибки в C ++:
делать задания там, где вы хотели протестировать = vs ==
Отсутствует ;
Читаемость фигурных скобок по сравнению, например, с начала паскаля
И затем есть все включаемые файлы, макросы, управление памятью и т.д., чтобы запутать.
Поэтому я бы сказал, что C ++ не лучший язык для начала - однако нет сомнений, что он может быть очень полезным, когда вы его изучите.
Я бы - как и другие также предлагали - использовать C #, Java или, может быть, даже VB - и хорошую IDE с подсветкой синтаксиса, отладчиком и т. Д., Чтобы упростить восстановление после ошибок.
Когда я учился в колледже, C ++ был базовым языком, который преподавался в течение первого года обучения в колледже. Теория заключалась в том, что он содержал некоторые сложные концепции программирования, поэтому, если вы могли овладеть им, вы могли бы выбрать другие языки. Это послужило мне хорошим фундаментом.
Сказав это, в течение моего старшего года я работал в комитете, чтобы определить, стоит ли переключать основной язык на Java. После разговора с несколькими известными работодателями и некоторыми выпускниками факультета было решено, что переключение на Java было наилучшим интересом для студентов. Работодатели, с которыми мы говорили, хотели, чтобы люди имели опыт работы с языком, который они использовали, чтобы нанять их. Я считаю, что сейчас, спустя 10 лет, они все еще используют Java в качестве основного языка.
На аналогичной ноте мы искали, чтобы нанять пару недавних выпускников колледжа с действительно хорошими навыками C ++. Мы не смогли найти ни одного.
Я бы сказал, да. Но любой язык действительно может быть первым языком. Я думаю, что C ++ хорош, потому что, хотя он сложен, а иногда и сложен, он показывает вам, что вы действительно можете сделать (без ограничений). Кроме того, он имеет некоторый объектно-ориентированный дизайн, который может помочь вам подготовиться к освоению других языков.
C ++ был моим первым языком, и я рад, что это было. Это заставило меня задуматься об ООП на раннем этапе, и я благодарен за это. Но, в конце концов, все сводится к тому, что вы хотите сделать. Язык не так важен, потому что, если вы сможете освоить один язык, скорее всего, у вас не возникнет проблем с выбором другого. Что ты хочешь делать? Делать игры? Программа для мобильных телефонов? У каждого будут инструменты и языки, лучше подходящие для него.
C ++ - экспертный язык, а не начинающий ... сначала сказал бы C, а не Java или C # или Python ... почему? потому что C учит вас заботиться о вашей памяти и некоторых хитрых понятиях, таких как указатели, которые «скрыты» всеми языками, но присутствуют повсюду. Я видел так много молодых разработчиков, которые даже не понимают, почему иногда нужно освобождать память, и считают, что сборщик мусора - это не маленький карлик, который очищает все кодовые крэпсы: они создают экземпляры, они создают и взрываются, даже если у них есть XXXXGb. ОЗУ ... Но они не понимают, почему сборщик мусора не просто магически чистит все! И я видел разработчиков такого рода, которые пишут на C ++ (и даже безумнее на Corba), и это была бойня !!!!!!!!!! Поэтому я бы посоветовал изучить кодирование на C, а затем перейти к Python / Java / C # для концепций объектов и всего, что есть вокруг. Затем, когда вы понимаете все это, вы переходите на C ++ и чувствуете силу C ++, но вы также обнаруживаете все его опасности и то, почему он никому не должен использоваться;)
NO. В C ++ есть так много всего, что новичку трудно понять. Не вдавайтесь в заблуждение "все языки программирования равны".
Начните с Basic или Pascal (игнорируйте «они устарели»), а затем с C / C ++ / Java / C # / Perl. Или, если у вас есть шанс, сначала с Logo & Karel, а затем Basic или Pascal.
П.Д. В некоторых университетах и колледжах есть класс использования и сравнения языков программирования, и бывает, что я преподавал этот класс ;-)
Вы можете выбрать любой язык для изучения основ программирования. Я изучил материал на C / C ++. но через 7 лет инструменты / языки меняются в моей школе, и они предпочитают java / C #. языки - это просто инструменты. То, что вам нужно, чтобы стать лучше, это основы. Например, в MIT люди изучают основы алгоритма, используя python. например, Java может быть полезна для веб-программирования. но C / C ++ хороши для сервисов и высокопроизводительных приложений. Так что это зависит от ваших ситуаций.
Если «подходящий» означает «возможный», да. Если за «хорошо», то точно нет.
Можно любить, даже любить C ++, но для этого вам лучше выучить несколько языков и поработать несколько десятилетий с гнилыми кодовыми базами, которые покажутся вам чарующими, получить опыт «создания нетривиального программного обеспечения, которое работает на самом деле» - тогда у C ++ будет очарование.
Не в начале, когда вы девственны, возитесь с небольшими, простыми (но предположительно интересными и веселыми) проблемами.
Я бы начал с python, за которым следовал SICP (схема) или что-то подобное. Может быть перевернутым или чередующимся. С ними вы можете просто пойти и разобраться с проблемой. Вместо того, чтобы сражаться с системой, ходите в глубокой грязи и изучайте всевозможные нелогичные причуды и их исторические причины.
Позже, когда вы уже можете запрограммировать свой выход из бумажного пакета, переключитесь на голое железо: изучите способы сборки и несколько архитектур, а также, возможно, Knuth's Mix. Я не имею в виду запоминание кодов операций или делать много реальных вещей, просто чтобы понять память, регистры, ALU, кэши, прерывания и получить уровень чтения.
Затем с этим фундаментом вы можете познакомиться с другими языками, включая C ++. Может быть, хорошая идея добавить немного «истории и эволюции языков» между ними.
Честно говоря, здесь нет правильного или неправильного ответа, я лично обнаружил, что C ++ можно понять. Я изучил все это вплоть до ООП (я запутался в «этом», которое я теперь не понимаю, как я не мог получить это, но что угодно). Попробуй, не унывай. Если вы застряли, проверьте другие языки и продолжайте изучать новые. Идея состоит в том, что, когда вы видите одну и ту же концепцию в 2-3 различных формах, вы поймете их лучше Как я уже сказал, концепция указателя «this» смутила меня, но когда я увидел то же самое в Python (вместо этого назвал себя), он сразу понял меня, потому что я понял это в C ++. Изучайте Java, если можете, как это делают многие колледжи. Изучайте python или ruby, так как это язык du jour, и если вы можете исследовать больше нишевых / новых вещей, таких как Clojure (и все другие списки), Haskell, Scala ...
Я бы начал с Java или C #. Если вы хотите изучать C ++, это, вероятно, станет легче после изучения основ, таких как, что такое класс, как делать циклы и разветвления (если, затем операторы) и т. Д. Гораздо важнее научиться смотреть на проблема или математическое уравнение и запрограммируйте его, чтобы выяснить, освободили ли вы всю свою память или что-то еще.
Похоже, что за этим вопросом стоит предположение: «С ++ кажется настолько сложным, сможет ли 16-летний ребенок выбрать его в качестве первого языка (компьютерного программирования)?»
К тому времени, когда нам исполняется 4 или 5 лет, мы собираем большинство конструкций на родном языке, просто с таким большим вниманием к нему, когда слушаем, как другие говорят. Формирование великих предложений занимает время, никаких вопросов нет.
С ++, несомненно, намного менее сложен / сложен, чем, скажем, большинство человеческих языков. 16-летние должны быть в состоянии забрать его. Будут ли они писать отличный код с ним? Надо подождать и посмотреть.
Человеческие языки могут позволить себе иметь сложный синтаксис, потому что если у вас есть грамматика или орфография, люди все равно могут понять вас. Не так с компьютерными языками.
Ден04
-3
Новички должны сначала оценить «программирование». По моему опыту обучения в классе начинающих, они в первую очередь оценили то, что понимают больше всего. Как и Python против C #, они ценят Python, потому что он очень высокий уровень и не использует символы, подобные C #, что означает очень близкий к человеческому языку, его очень английский. Поэтому я бы рекомендовал изучать программирование от высокого уровня до низкого уровня.
Ответы:
Решительно Нет .
Для любой цели, которую вы имеете в виду для студентов, другой язык или последовательность языков будут быстрее и лучше. Примеры.
«Студенты должны понимать концепции низкого уровня».
«Низкоуровневое» кодирование не состоит в том, чтобы получать объекты
new
, возвращать их назадdelete
и иногда иметь указатель, указывающий куда-то, чего не должно быть. Функции, классы и шаблоны не являются низкоуровневыми. RAII, 12 способов использоватьconst
,std::ostream::operator<<
,protected
иnew
не являются понятиями низкого уровня. Эти вещи имеют низкоуровневые последствия, и вы пропускаете их в течение нескольких месяцев или до следующего урока и вместо этого учите горы семантики C ++.Я предлагаю ассемблер с хорошей средой и учебным материалом, таким как MIPS или MMIX. Если вы спешите, научите C обходным путям хотя бы взглянуть на вывод ассемблера. Это даст вам все низкоуровневое понимание, которое делает C ++, а затем и немного, быстрее.
«Студенты должны понимать объектную ориентацию».
Объектная ориентация, встроенная в C ++, слишком сложна для обучения концепции ОО или почти любой другой концепции высокого уровня. См . C ++ FAQ для хорошего, длинного списка потенциальных причин, почему. Вы либо должны поразить все эти вещи, что займет очень много времени у новых программистов; или же вам придется пропустить многие из них, оставив новых программистов в неведении - фактически, не зная C ++!
Я предлагаю изучать более простой, высокоуровневый язык с объектами в первую очередь (Python, Ruby, Squeak, Common Lisp, Racket), если вы вообще должны учить C ++. Кроме того, изучите полиморфизм как концепцию, отдельную от ОО, посетив функциональный язык.
«Студенты должны понимать шаблоны и метапрограммирование шаблонов».
Никто действительно не спрашивает об этом, но я бы хотел, чтобы они это сделали. C ++ имеет хорошие шаблоны и STL - это круто, но они не должны быть достаточно приоритетными, чтобы сначала научить C ++. Обучение системе типов OCaml или Haskell, а затем модификация этих концепций может быть быстрее в любом случае.
«Студенты должны научиться решать проблемы».
Да, вы получаете это на любом языке, и вы получите больше, если это будет почти на любом языке, кроме C ++, потому что там намного меньше багажа. Опять же, смотрите C ++ FAQ для получения списка всех вещей, которые студенты будут изучать вместо навыков решения проблем.
«Все вышеперечисленное, и нам нужно использовать только один язык». или «Работодатели хотят этого». или «Нам нужен язык в стиле C». или...
Учить больше, чем один язык.
Идея, что вы экономите время или энергию, обучая или изучая только один язык, совершенно нелепа. Он основан на идее, что изучение любого данного языка занимает ровно X человеко-месяцев ( подсказка! Подсказка! ), Где X - это одно число или одно число для каждого языка. Это почти идентично идее, что вы можете сэкономить время и деньги, пропуская все эти «требования» и «тестирование» мусора.
Что касается множественных синтаксисов, вы опасно наносите вред студентам, если учите их ожидать синтаксиса C на каждом языке, делая их дико предвзятыми по отношению к другим языкам.
Практически любой путь быстрее и лучше, чем начинать с C ++. Изучение простого языка высокого уровня, а затем C ++ будет быстрее. Изучение ассемблера, а затем C ++ будет быстрее. Что-нибудь кроме C ++ поможет студентам быстрее и они будут знать, как загружаться. Только не учите сначала C ++.
источник
Нет, C ++ - сложный язык даже для опытных разработчиков C ++. Даже для самых простых алгоритмов вы должны объяснить многие тонкости языка. Рассмотрим пример Hello World:
Что это за
#include
команда? Чтоstd::cout
. Почему то::
? Что такое<<
? Оооо, это перегруженный оператор! Что за перегруженный оператор? Ооо, потомуints
что он немного сдвигается, но для чего бы то ни былоstd::cout
, он выводит вещи на консоль. Оооо,std::cout
это поток, и у потоков их<<
и>>
оператор перегружены.Давайте посмотрим на тот же пример в Python:
Вот и все, давайте код некоторых алгоритмов.
источник
Вероятно, это не очень хороший первый язык: сложный синтаксис, множество правил, старый язык, подверженное ошибкам управление памятью. Лучше учить своих учеников чему-то более оригинальному, например, Smalltalk, или чему-то более приятному для программирования, например Python, или чему-то функциональному, например, Haskell.
Они могут изучать C ++ позже в жизни (если они не могут с этим поделать), после того как они выучили лучшие языки
источник
Краткий ответ: да!
Я бы сказал, что любой язык является подходящим началом, но особенно C ++ (или эквивалентный). В наши дни C # и Java являются основными языками использования и программирования, благодаря которым вы быстро учитесь опираться на API и IDE, но с C ++ вы получаете возможность изучать программирование с нуля, включая оптимизацию производительности и т. Д.
Нет ничего плохого в том, чтобы изучить основы программирования, циклов и сортировки, прежде чем просто слепо полагаться на языки, встроенные в .Sort ();
источник
На самом деле я считаю, что это, вероятно, хороший выбор в качестве первого языка по очень практической причине: после изучения C ++ любой другой язык, с которым вы столкнетесь, будет казаться легким для изучения.
источник
Я учил себя C ++, когда мне было 15-16 лет.
Лучше оставить магию другим и изучить внутреннюю работу вещей самостоятельно.
Проще говоря, если вы не можете понять синтаксис и семантику начального уровня C ++, вы не так уж хороши в компьютерах. Это не так сложно. Нет веских причин избегать "C с классами".
Если вы ожидаете, что студенты начнут работать над метапрограммированием шаблонов, выводя полиморфные вызовы и распутывая множественные иерархии наследования - это смешно для класса начального уровня для любого языка, который вы используете.
Есть очень плохая тенденция хотеть скрыть тонкости программирования для студентов. Это не очень хорошо (см. Эссе Java Schools Spolsky). Эти люди попадают в DailyWTF, если у них не получается поразмыслить. Утечка абстракций, и когда (не если) утечка абстракции, это хуже, чем иметь дело с этим. Я работал в качестве TA для студентов начального уровня C ++. Либо вещи должны быть спрятаны полностью, либо они должны быть выведены на свет для изучения. Магия - враг ученика.
Если бы мне пришлось рекомендовать начальный язык, скомпилированный с машинным кодом, вариант Pascal, вероятно, был бы лучшим подходом. Из того, что я помню, у него более регулярный и структурированный подход, чем у семьи C.
источник
Я бы сказал «нет» - у меня было рвение и желание изучать программирование, и я сразу же начал учебу в колледже по классу C ++. В сочетании с учителем, который преподавал C ++, как если бы это был другой язык (концепции, которые имели для них смысл, не обязательно концепции языка или приложения реального мира), и проекты, которые бросали на нас сразу каждую неделю, я терпел крах и сгорал вместе с половина класса. К тому времени, когда я мог даже переваривать, экспериментировать и применять то, чему меня учили, я боролся с домашним заданием проекта, которое удваивалось как тесты. Я бы сказал, что это был курс уровня 200, а не 100.
Я действительно старался изо всех сил. Я не просил сочувствия, я знал, что это будет вызовом, но учитель даже не помог бы мне. Просто сказал мне пойти читать учебник, как я делал.
Я бы поспорил (а некоторые не согласились бы), что Ruby или Python - намного лучший язык, чтобы вломить кого-то в мир программирования. Чистый, лаконичный, читаемый, понятный синтаксис.
источник
Нет.
Как язык обучения, C ++ лишь незначительно лучше, чем C, который является одним из худших языков обучения. Это вводит много сложности заранее, некоторые части языка не интуитивно понятны, и большую часть времени вы изучаете больше о C ++, чем о программировании в целом.
Это не значит, что C ++ (или C) - плохие языки, или их не стоит изучать; просто есть лучшие обучающие языки, такие как Python.
источник
string
тип данных, который перегружает операторы, например+
,=
и==
выполняет то, что более или менее ожидают ученики, по сравнению с тем, как должна выполняться обработка строк в C. Следовательно, «незначительно» , Я не рекомендовал бы ни как язык обучения.Существует два основных типа послесреднего образования: университет и ремесленное училище. Разница в том, что вы хотите быть готовым сделать после окончания учебы. В автомобильной сфере вы будете механиком или инженером-механиком.
При этом C ++ - отличный первый язык, если вы хотите быть инженером, и паршивый, если вы хотите быть программным эквивалентом механика.
Вступительный класс на C ++ собирается потратить много времени на обсуждение типов данных, определений, объявлений, указателей, распределения памяти и так далее. Это отличная основа, если вы намерены потратить несколько семестров на то, чтобы сделать что-то полезное, но хотите знать, что, как только вы туда доберетесь, у вас есть основание справиться с любой степенью сложности.
С другой стороны, если вы хотите быть в состоянии сделать что-то полезное быстрее, но не возражаете, если домен и сложность ограничены, то тратить все это время на эти концепции более низкого уровня будет пустой тратой времени. Есть много программистов, которые могут написать отличный валидатор HTML-форм, но не имеют ни малейшего понятия, как подойти к разработке драйвера устройства.
источник
Конечно. Моим первым языком был C, но это было просто для того, чтобы облегчить наш класс в C ++. Это сделало Java намного проще в обращении, когда я поступил в университет C ++ может иметь немного более крутой кривой обучения, но если его учат правильно, все должно быть хорошо.
источник
Нет, C ++ не подходит в качестве первого языка. Как показано здесь, многие профессиональные программисты разделяют это мнение, но это также мнение, которое имеют профессиональные учителя.
Вот что доклад от декана Университета Карнеги - Меллона должен сказать об использовании C ++ для вводного курса по программированию для первокурсников:
CMU предлагает два вводных курса, обязательный и функциональный. SML был выбран для функционального программирования. Я не знаю, что было выбрано для обязательного курса, но в докладе упоминается подмножество C.
источник
Конечно. Есть и другие языки, которые студентам первого курса легче понять. Однако есть способы, которыми учитель может медленно вводить понятия в C ++.
источник
Определенно C ++ может быть самым первым языком. Но это о том, как хорошо это преподается.
Все говорят, первый язык должен быть очень легко понять. Но я хочу сказать, что большинство людей начинают программировать на уровне бакалавриата. Таким образом, вы можете научить чему-то, что они способны понять. А с C ++ вы можете перейти с более низкого уровня на более высокий уровень программирования.
источник
Абсолютно нет.
Если бы у меня был свой путь, я бы почти полностью запретил его использование в академической среде. Не по причинам, которые противоречат уже сделанным, а потому, что слишком многие думают, что C ++ (или его вариации) - это решение практически для любой проблемы, потому что вы можете использовать его практически в любой ситуации. Это отвертка программирования.
Некоторые люди используют это, чтобы затянуть винты, совершенно разумный инструмент для работы. Другие используют его как монтировку, хотя часто и эффективны, но на самом деле не идеальны, потому что отвертка, независимо от того, что скажет вам ваш отец, не является монтировкой и может катастрофически потерпеть неудачу из-за неправильного использования, потому что состав хвостовика не сделан намеренно за те силы, с которыми столкнулся бы монстр. Третьи могут попытаться использовать его как пуансон или долото, и они почти всегда будут сталкиваться с проблемами, потому что рукоятка отвертки не была создана для того, чтобы поразить жестокое обращение, которому должен противостоять удар или долото.
На мой взгляд, работа программиста состоит в том, чтобы в целом перевести реальные проблемы в автоматизацию, которая обеспечивает некоторую степень повышения эффективности (уменьшение выделения ресурсов для выполнения задачи), скорости (уменьшение времени на выполнение задачи), предсказуемости (повышение повторяемости). задачи), или организации (повысить осведомленность о взаимосвязи между задачами).
Понятно, что каждый, кто программирует, должен иметь общие знания о низкоуровневых операциях компьютеров и, в частности, об устройстве ввода-вывода и распределении памяти, безусловно, редко приходится действительно использовать эти знания в какой-либо значительной степени, не говоря уже о том, чтобы использовать их для Подавляющее большинство задач. Попытка сделать это без понимания более широкого контекста проблемы вносит ненужный риск в усилие.
Абсурдно, что первым языком программирования должен быть C / C ++ или близкие варианты, так как класс проблем, которые решают C и его производные, безусловно, не подходит для некоторого сколь угодно большого процента текущих и будущих проблем (кроме тех случаев, когда нужно спасать ранее закрученная программа), и на самом деле это всего лишь небольшой набор грядущих проблем. Большинство программистов никогда не приблизятся к разработке основных функций ОС или прямых интерфейсов устройств, несмотря на растущее преимущество небольших мобильных, взаимосвязанных устройств. Большинство будет работать и жить так, как мы. Исправление и постепенный отказ от кода, которому более двух поколений, реализация по технологии, которая уже показывает возраст, или работа на периферии технологии в приложении killer (x + 1).
Для первого языка я бы посмотрел на Lego NXT, легкий, но многофункциональный вариант LabView. Хотя Lego NXT не используется широко на коммерческих предприятиях, он представит фундаментальную природу того, что он должен программировать «богатым сенсором» способом. Я мог бы связать его с несколько платформенно-нейтральным языком сценариев, таким как Javascript или TCL / TK. И то, и другое было бы относительно неэффективным с точки зрения того, что вы должны обнаружить для выполнения очень простых, но эффективных задач, с высокой отдачей с точки зрения цикла обратной связи и гибкости, позволяющей вводить и решать проблемы различной степени сложности. Кроме того, это дает хорошую возможность для студентов, поскольку они продвигаются, чтобы исследовать потенциал для превышения того, что обеспечено в консервированной окружающей среде: шанс попробовать работать в темноте, сырой,
После того, как они научатся управлять четырьмя цилиндрами в автоматическом режиме, перейдите к большому механическому модулю v8, если они действительно заинтересованы и мотивированы. Если Джоэл не может найти программистов рок-звезды под каким-либо камнем под ногами, ему, возможно, придется искать в другом месте или переосмыслить, почему ему может понадобиться больше, чем куча отверток в его наборе инструментов.
источник
Вот некоторые из моментов, когда новички легко допускают ошибки в C ++:
делать задания там, где вы хотели протестировать = vs ==
Отсутствует ;
Читаемость фигурных скобок по сравнению, например, с начала паскаля
И затем есть все включаемые файлы, макросы, управление памятью и т.д., чтобы запутать.
Поэтому я бы сказал, что C ++ не лучший язык для начала - однако нет сомнений, что он может быть очень полезным, когда вы его изучите.
Я бы - как и другие также предлагали - использовать C #, Java или, может быть, даже VB - и хорошую IDE с подсветкой синтаксиса, отладчиком и т. Д., Чтобы упростить восстановление после ошибок.
источник
Когда я учился в колледже, C ++ был базовым языком, который преподавался в течение первого года обучения в колледже. Теория заключалась в том, что он содержал некоторые сложные концепции программирования, поэтому, если вы могли овладеть им, вы могли бы выбрать другие языки. Это послужило мне хорошим фундаментом.
Сказав это, в течение моего старшего года я работал в комитете, чтобы определить, стоит ли переключать основной язык на Java. После разговора с несколькими известными работодателями и некоторыми выпускниками факультета было решено, что переключение на Java было наилучшим интересом для студентов. Работодатели, с которыми мы говорили, хотели, чтобы люди имели опыт работы с языком, который они использовали, чтобы нанять их. Я считаю, что сейчас, спустя 10 лет, они все еще используют Java в качестве основного языка.
На аналогичной ноте мы искали, чтобы нанять пару недавних выпускников колледжа с действительно хорошими навыками C ++. Мы не смогли найти ни одного.
источник
Я бы сказал, да. Но любой язык действительно может быть первым языком. Я думаю, что C ++ хорош, потому что, хотя он сложен, а иногда и сложен, он показывает вам, что вы действительно можете сделать (без ограничений). Кроме того, он имеет некоторый объектно-ориентированный дизайн, который может помочь вам подготовиться к освоению других языков.
C ++ был моим первым языком, и я рад, что это было. Это заставило меня задуматься об ООП на раннем этапе, и я благодарен за это. Но, в конце концов, все сводится к тому, что вы хотите сделать. Язык не так важен, потому что, если вы сможете освоить один язык, скорее всего, у вас не возникнет проблем с выбором другого. Что ты хочешь делать? Делать игры? Программа для мобильных телефонов? У каждого будут инструменты и языки, лучше подходящие для него.
источник
C ++ - экспертный язык, а не начинающий ... сначала сказал бы C, а не Java или C # или Python ... почему? потому что C учит вас заботиться о вашей памяти и некоторых хитрых понятиях, таких как указатели, которые «скрыты» всеми языками, но присутствуют повсюду. Я видел так много молодых разработчиков, которые даже не понимают, почему иногда нужно освобождать память, и считают, что сборщик мусора - это не маленький карлик, который очищает все кодовые крэпсы: они создают экземпляры, они создают и взрываются, даже если у них есть XXXXGb. ОЗУ ... Но они не понимают, почему сборщик мусора не просто магически чистит все! И я видел разработчиков такого рода, которые пишут на C ++ (и даже безумнее на Corba), и это была бойня !!!!!!!!!! Поэтому я бы посоветовал изучить кодирование на C, а затем перейти к Python / Java / C # для концепций объектов и всего, что есть вокруг. Затем, когда вы понимаете все это, вы переходите на C ++ и чувствуете силу C ++, но вы также обнаруживаете все его опасности и то, почему он никому не должен использоваться;)
источник
NO. В C ++ есть так много всего, что новичку трудно понять. Не вдавайтесь в заблуждение "все языки программирования равны".
Начните с Basic или Pascal (игнорируйте «они устарели»), а затем с C / C ++ / Java / C # / Perl. Или, если у вас есть шанс, сначала с Logo & Karel, а затем Basic или Pascal.
П.Д. В некоторых университетах и колледжах есть класс использования и сравнения языков программирования, и бывает, что я преподавал этот класс ;-)
источник
Вы можете выбрать любой язык для изучения основ программирования. Я изучил материал на C / C ++. но через 7 лет инструменты / языки меняются в моей школе, и они предпочитают java / C #. языки - это просто инструменты. То, что вам нужно, чтобы стать лучше, это основы. Например, в MIT люди изучают основы алгоритма, используя python. например, Java может быть полезна для веб-программирования. но C / C ++ хороши для сервисов и высокопроизводительных приложений. Так что это зависит от ваших ситуаций.
источник
Если «подходящий» означает «возможный», да. Если за «хорошо», то точно нет.
Можно любить, даже любить C ++, но для этого вам лучше выучить несколько языков и поработать несколько десятилетий с гнилыми кодовыми базами, которые покажутся вам чарующими, получить опыт «создания нетривиального программного обеспечения, которое работает на самом деле» - тогда у C ++ будет очарование.
Не в начале, когда вы девственны, возитесь с небольшими, простыми (но предположительно интересными и веселыми) проблемами.
Я бы начал с python, за которым следовал SICP (схема) или что-то подобное. Может быть перевернутым или чередующимся. С ними вы можете просто пойти и разобраться с проблемой. Вместо того, чтобы сражаться с системой, ходите в глубокой грязи и изучайте всевозможные нелогичные причуды и их исторические причины.
Позже, когда вы уже можете запрограммировать свой выход из бумажного пакета, переключитесь на голое железо: изучите способы сборки и несколько архитектур, а также, возможно, Knuth's Mix. Я не имею в виду запоминание кодов операций или делать много реальных вещей, просто чтобы понять память, регистры, ALU, кэши, прерывания и получить уровень чтения.
Затем с этим фундаментом вы можете познакомиться с другими языками, включая C ++. Может быть, хорошая идея добавить немного «истории и эволюции языков» между ними.
источник
Я начал с C ++ в средней школе. Я взял копию этой книги: C ++ Как программировать от Deitel и Deitel . Эта книга довольно хорошая.
Честно говоря, здесь нет правильного или неправильного ответа, я лично обнаружил, что C ++ можно понять. Я изучил все это вплоть до ООП (я запутался в «этом», которое я теперь не понимаю, как я не мог получить это, но что угодно). Попробуй, не унывай. Если вы застряли, проверьте другие языки и продолжайте изучать новые. Идея состоит в том, что, когда вы видите одну и ту же концепцию в 2-3 различных формах, вы поймете их лучше Как я уже сказал, концепция указателя «this» смутила меня, но когда я увидел то же самое в Python (вместо этого назвал себя), он сразу понял меня, потому что я понял это в C ++. Изучайте Java, если можете, как это делают многие колледжи. Изучайте python или ruby, так как это язык du jour, и если вы можете исследовать больше нишевых / новых вещей, таких как Clojure (и все другие списки), Haskell, Scala ...
источник
Я бы начал с Java или C #. Если вы хотите изучать C ++, это, вероятно, станет легче после изучения основ, таких как, что такое класс, как делать циклы и разветвления (если, затем операторы) и т. Д. Гораздо важнее научиться смотреть на проблема или математическое уравнение и запрограммируйте его, чтобы выяснить, освободили ли вы всю свою память или что-то еще.
источник
Похоже, что за этим вопросом стоит предположение: «С ++ кажется настолько сложным, сможет ли 16-летний ребенок выбрать его в качестве первого языка (компьютерного программирования)?»
К тому времени, когда нам исполняется 4 или 5 лет, мы собираем большинство конструкций на родном языке, просто с таким большим вниманием к нему, когда слушаем, как другие говорят. Формирование великих предложений занимает время, никаких вопросов нет.
С ++, несомненно, намного менее сложен / сложен, чем, скажем, большинство человеческих языков. 16-летние должны быть в состоянии забрать его. Будут ли они писать отличный код с ним? Надо подождать и посмотреть.
источник
Новички должны сначала оценить «программирование». По моему опыту обучения в классе начинающих, они в первую очередь оценили то, что понимают больше всего. Как и Python против C #, они ценят Python, потому что он очень высокий уровень и не использует символы, подобные C #, что означает очень близкий к человеческому языку, его очень английский. Поэтому я бы рекомендовал изучать программирование от высокого уровня до низкого уровня.
источник