Вопрос

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

Я ценю любую помощь.Спасибо.

Это было полезно?

Решение

Сомнительно.C# не намного больше похож на C++, чем Java.Он поддерживает указатели в unsafe код, но помимо этого я не могу придумать никакой причины, по которой он мог бы стать особенно хорошим мостом от Java к C++.Кроме того, я подозреваю, что эту функцию с большей вероятностью будут использовать разработчики, пришедшие из другого направления.Если у вас есть другие причины для изучения C#, я бы посоветовал вам пойти на это, но для более легкого перехода на C++ я бы посоветовал пропустить это.

Другие советы

Я считаю, что самый простой переход от Java к C и C++ — это начать с C.

Почувствуйте указатели, а не управляемую память.

Затем, как только вы почувствуете сложные вещи в C и C++, приступайте к объектам и STL с C++.

Именно так я учился, и для меня это был очень легкий переход.

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

Я настоятельно рекомендую изучить язык программирования, который не использует систему управляемой памяти.Причина в том, что, имея дело с таким языком, вы вынуждены самостоятельно изучать тонкости управления памятью.На самом деле вы не можете ни в чем полагаться на сборщик мусора, потому что вам решать, когда объекты/структуры будут жить или умирать.

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

Моя окончательная рекомендация — сразу перейти к C++ и почувствовать его.

Если вы уже знаете Java, C# не расскажет вам о C++ больше, чем вы уже знаете.

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

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

Просто выучите С.Не беспокойтесь о «переходах»;если ваша цель — выучить C, просто перейдите прямо к нему.Java достаточно разделяет синтаксис с C, чтобы быть достаточно близким, и вам не нужно беспокоиться о C++;вы просто отвлечетесь от C++.C достаточно важен, чтобы изучать его самостоятельно, не пытаясь «смягчить удар».

Java является объектно-ориентированным, C++ может быть объектно-ориентированным, а C# в основном является объектно-ориентированным, но в этом и есть главное сходство.

C# сильно изменился по сравнению с Java, поэтому, если вы не посмотрите на C# для .NET 1.1, вы будете изучать язык, который сильно отличается от Java, и если ваша цель — C, вы будете отходить от него.

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

Указатели были для меня самой сложной частью C, когда я понял, что C — это легко.

Если вы знаете C и уже знаете Java, то C++ придется изучать меньше.

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

Концепции, почти уникальные для C++ и D:

  • РАИИ -> детерминированное управление ресурсами, которое трудно использовать неправильно и тривиально использовать правильно.Вы не научитесь этому на C# или C, там вы научитесь только ручному управлению ресурсами.
  • Метапрограммирование шаблонов -> Полнота по Тьюрингу во время компиляции.Хотя большинству программистов это не понадобится и встречается реже;обычно вы найдете это в виде библиотек (самый яркий пример:Шаблоны выражений)
  • Время компиляции, общее программирование с утиной типизацией -> C++ поставляется со множеством алгоритмов и контейнеров, не зависящих от типа.Обобщенные шаблоны C# строго типизированы и налагают дополнительные ограничения на клиентов.
  • Различные парадигмы: процедурное, объектно-ориентированное, обобщенное и немного функционального программирования.C#, Java и C преподают только часть из них.В C++ у вас есть возможность узнать, когда что наиболее уместно.
  • константная корректность и библиотека, которая является константной.

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

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

РЕДАКТИРОВАТЬ:Совет сначала изучить C++, а затем C довольно безумен...Я имею в виду, что C++ — это надмножество C, как только вы изучите C++, вам больше нечего изучать в C, кроме того, чего ему не хватает по сравнению с C++.Легче понять, почему что-то добавлялось по мере развития языка, чем гадать, почему функции C++ не были реализованы в C.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top