Местный колледж преподает C ++ студентам первого курса (16 лет) без опыта программирования.
В качестве первого языка программирования подходит C ++?
Местный колледж преподает C ++ студентам первого курса (16 лет) без опыта программирования.
В качестве первого языка программирования подходит 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 <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
}
Что это за #include
команда? Что std::cout
. Почему то ::
? Что такое <<
? Оооо, это перегруженный оператор! Что за перегруженный оператор? Ооо, потому ints
что он немного сдвигается, но для чего бы то ни было std::cout
, он выводит вещи на консоль. Оооо, std::cout
это поток, и у потоков их <<
и >>
оператор перегружены.
Давайте посмотрим на тот же пример в Python:
print("Hello World!")
Вот и все, давайте код некоторых алгоритмов.
Вероятно, это не очень хороший первый язык: сложный синтаксис, множество правил, старый язык, подверженное ошибкам управление памятью. Лучше учить своих учеников чему-то более оригинальному, например, 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 ++ для вводного курса по программированию для первокурсников:
Стандартные языки, такие как C или C ++, не подходят для этого курса, потому что их сложность и недостатки препятствуют как неформальным, так и механизированным методам рассуждений.
CMU предлагает два вводных курса, обязательный и функциональный. SML был выбран для функционального программирования. Я не знаю, что было выбрано для обязательного курса, но в докладе упоминается подмножество 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 #, что означает очень близкий к человеческому языку, его очень английский. Поэтому я бы рекомендовал изучать программирование от высокого уровня до низкого уровня.