Изучить C#, чтобы перейти на C/C++?
-
03-07-2019 - |
Вопрос
Хорошо, я только что прошел вводный курс по информатике, и в школе был выбран язык 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.