Есть ли вероятность того, что кто-то, кто выучил все ключевые аспекты C ++ и хорошо знает основы языка, выучит другие языки (такие как Python, Perl, Java) быстрее и проще?
Есть ли вероятность того, что кто-то, кто выучил все ключевые аспекты C ++ и хорошо знает основы языка, выучит другие языки (такие как Python, Perl, Java) быстрее и проще?
Ответы:
Глубокое знание любого языка программирования, вероятно, поможет вам быстрее освоить другие языки. Это так отчасти потому, что программирование - это способ мышления, а не изучение синтаксиса. Большинство методов программирования будет справедливо для большинства других языков программирования. Вот почему люди говорят, что вы всегда изучаете второй язык программирования быстрее, чем первый.
C ++ - это язык, который обеспечивает гораздо больший «контроль», чем другие языки. Это может быть как хорошо, так и плохо. Например, реальное оружие лучше, чем пневматическое, когда вы идете в лес (потому что вы действительно можете с него что-то сбить), но оно также более опасно для вас и окружающих. В C ++ есть такие понятия, как управление памятью, о которых вам не нужно беспокоиться в большинстве других языков. Однако твердое понимание этих концепций далеко не бессмысленно даже при работе с языками автоматического управления памятью. Вы также можете выполнять побитовые операции и намного опускаться до «металла» с таким языком, как C ++. Даже базовое понимание в этих областях может помочь вам как программисту на любом языке.
Я лично изучил Java сначала почти за 3 года до изучения C ++, и я должен сказать, что сожалею об этом (uni course ...). Это сделало изучение C ++ (я все еще учусь - далеко не «глубоким» знанием: D) не таким простым, как мне бы того хотелось. Если бы я сделал это наоборот, я бы сказал, что мне было бы намного легче. Особенно, когда вы знаете, ПОЧЕМУ что-то делается определенным образом, а не просто будьте уверены в автоматическом волшебстве языка. Если мне позволят высказать мнение, я бы предложил: C (для основных и универсальных парадигм программирования) -> C ++ (для базового понимания ООП наряду с управлением памятью) -> Затем вы можете перейти на любой «настоящий» язык ООП с хорошая основа, или вы можете продолжить с более сложными темами в C ++, все в зависимости от того, что вы
OR
иAND
К сожалению нет. На самом деле это большая проблема при обучении C ++ на уроках программирования, особенно на уровне начинающих: вы можете изучать принципы программирования или выучить язык C ++, но в языке C ++ слишком много подводных камней и глупых маленьких ошибок, чтобы эффективно учиться в объем одного семестра класса!
Есть много вещей, которые были опробованы в C ++ и в конечном итоге стали идиоматическими в языке благодаря явной инерции, что почти во всех других языках с тех пор рассматривалось и отвергалось, потому что оказалось огромной ошибкой. Основными из них являются шаблоны C ++ и объектная модель C ++ (объекты как типы значений никогда не бывают полезными, поскольку они нарушают подстановку Лискова и саму ООП.)
Поэтому, если вы сначала получите глубокие знания C ++, а затем захотите изучать другие языки программирования, будет много вредных и контрпродуктивных программ, которые вам придется выучить , чтобы быть эффективными на других языках программирования.
Нет. Хорошее знание C ++ облегчит изучение других языков, подобных C ++. Но это было бы скучно. Почему вы хотите знать два одинаковых языка? Это ничего не купит. (Обратите внимание, что это не относится к C ++. Это применимо к любому языку. Сравните с естественными языками: изучение итальянского языка не облегчит изучение других языков. Это облегчит изучение испанского, французского или португальского языка и изучение трех языков. из них будет легче выучить четвертый, но даже изучение всех романских языков не поможет вам в изучении финского, китайского, хинди, иврита, арабского, пушту, греческого и т. д.)
Языки программирования реализуют парадигмы. Питер ван Рой собрал плакат 34 основных парадигм программирования .
Парадигмы, в свою очередь, состоят из понятий. На этом плакате перечислено около 18 концепций.
Все парадигмы (или, по крайней мере, те, что на плакате) составлены из этих концепций. Все языки реализуют одну или несколько парадигм, состоящих из этих концепций. Итак, если вы изучите эти концепции, вы (в некотором смысле) выучите каждый язык программирования одновременно.
Конечно, есть еще много специфических особенностей языка (среди них синтаксис). Кроме того, этот плакат полностью игнорирует типизацию, и, конечно, существует существенная разница между системой типов System F <: ω- стиля, системой типов в стиле Scala или динамической системой типов с утиным типом, не говоря уже о системе зависимых типов. à la Idris, Agda, Coq, Guru или ATS.
Я бы сказал, что глубокое знание любого языка программирования поможет в изучении других, по крайней мере, других языков в той же семье. Например, знание C ++ не сильно поможет с LISP или Haskell, но для объектно-ориентированных процедурных языков это поможет. Мой подход состоял в том, чтобы попытаться выучить язык из каждого из различных семейств (процедурный, функциональный, объектно-ориентированный и т. Д.) Языков, тогда эти знания могут быть перенесены на другие языки в этой семье. С другой стороны, глубокое знание APL не поможет ни с чем другим ...
Я собираюсь взять другую интерпретацию здесь.
C ++ - это хороший язык для изучения памяти и структур данных, поскольку он заставляет вас тщательно продумывать такие понятия, как владение объектами и продолжительность жизни. А изучение памяти и структур данных является одной из важнейших частей любой учебной программы по разработке программного обеспечения.
Но вы должны изучать структуры данных. Если вы просто «выучите C ++», вы не очень сильно выиграете, и это может замедлить процесс изучения других языков в краткосрочной перспективе.
Когда я учился в колледже, Data Structures был обязательным курсом на уровне новичка, принятым после CS1 (который по крайней мере половина класса выбрала). Это было сложно. Формат курса был в основном «Вот структура данных, которую вы никогда не видели раньше [например, левая куча ]. Реализуйте ее в C ++ за неделю и сделайте так, чтобы ваш вывод точно соответствовал нашему ожидаемому выводу, побайтно, поэтому мы может оценить это автоматически. " Затем на следующей неделе вы получите новую структуру данных и новое назначение. Я, вероятно, узнал больше на этом одном курсе, чем на всех других моих курсах вместе взятых.
Это тот тип обучения, который вам нужно сделать, чтобы C ++ был ценным.
Каждый язык, который вы изучаете, облегчает изучение следующего, особенно в рамках одной и той же парадигмы. Они сильно заимствуют друг у друга, и через некоторое время вы попадаете в точку, когда новый язык выглядит просто как набор функций из других языков с несколькими уникальными особенностями.
Я не думаю, что C ++ лучше или хуже любого другого языка в этом отношении. Это один из наиболее многословных языков, которые я знаю, и он усложняет некоторые вещи, которые просты в большинстве других языков, но это не обязательно приводит к облегчению изучения следующего языка . Это обычно делает следующий язык чувствовать себя легче использования , хотя. Есть разница
Нет. Глубокое знание C или подмножества C ++, которое «в основном C», поможет при изучении других языков, по крайней мере, при представлении того, что должны делать их реализации. Глубокое знание C ++, , с другой стороны, в основном будет информацией, которая вводит в заблуждение или не имеет значения при изучении других языков; если вы изучите объектную ориентацию в C ++ более чем на поверхностном уровне, например, когда вы перейдете к Perl / Python / Ruby, вы потратите больше времени на изучение того, что вы знаете, чем на его использование, поскольку объекты на этих языках реализованы в совершенно другой способчем в C ++. То же самое верно в большей или меньшей степени для большинства других языков и для других языковых функций (например, шаблоны C ++ и полиморфизм Haskell - это в основном одна и та же функция, опять же, с совершенно разными реализациями). Поэтому глубокое знание C ++ в основном будет специфичным для C ++.