Так что же делать. Бросать учебник по С++ и начинать учить C#?
Я говорил о том, что не вижу большого резона изучать С++
с нуля. Если ты недалеко ушел от нуля, то вполне можно подумать о переходе на C#. Если же успел изрядно продвинуться, двигайся дальше, иначе так до пенсии и будешь прыгать - пока освоишь C#, уже выдумают какой-нибудь C$, и работать будет просто некогда.
Мне тут не понятны некоторые моменты:
1. Ты как-то писал о том, что в C# придёться забыть про структурное программирование.
Как я понял про него придётся забыть по причине того, что он не поддерживается языком C#. Но само по себе структурное программирование стоит забывать.?
Забывать из того, что
знал, вообще ничего не следует. Нужно лишь четко осознавать границы применимости той или иной парадигмы.
Основная идея структурного программирования - разбить основную задачу на ряд более простых и реализовывать каждую из них как отдельную процедуру. Каждая подзадача, в свою очередь, также делится на более простые, и так до тех пор, пока не выйдем на уровень тривиальных операций, которые легко выражаются средствами языка программирования. Таким образом, структурная программа - это набор взаимосвязанных процедур и структур данных, которые ими обрабатываются.
Объектная парадигма предлагает совсем другой взгляд на программу. Теперь программа - это набор объектов, которые обмениваются сообщениями. Каждый объект имеет собственный интерфейс, который определяет, какие сообщения объект может корректно обрабатывать. Кроме того, объект имеет набор обязательств перед другими объектами. Если в первом случае основу программы составляли процедуры, выполняющие действия над данными, то теперь мы имеем вместо этого объекты, посылающие друг другу сообщения, то есть акцент смещен с алгоритмов на сущности.
В C# (равно как и в Java) ты просто не сможешь создать отдельную процедуру, как мог в C++ или Pascal. Нужно просто привыкнуть к новому стилю программирования, и тогда ты не станешь пользоваться одиночными функциями, даже если пишешь на C++.
2. И вообще, если не учитывать, что придётся поддерживать старое программное обеспечение, стоит ли не думая бросать С++.
Или есть всё-таки что-то, о чём стоит сожалеть при оставлении С++.
Сам по себе С++ не так уж плох. Но, к сожалению, программы на чистом языке можно встретить лишь в учебниках (да и то не во всех). Если ты пишешь в среде MS Windows, тебе нужно создавать окна и элементы управления на них, запускать потоки и синхронизировать их и так далее. Но все эти средства уже не входят в стандарт С++ (да и не могли бы, поскольку зависят от операционной системы). И вот тут-то ты и поймешь всю разницу между красивой и гладкой программой из учебника Страуструпа и настоящей работающей программой в Visual C++.
Собственно, у тебя есть два основных выбора. Во-первых, ты можешь вызывать WinAPI. На API можно сделать практически все, но практически все там делать трудно, поскольку интерфейс весьма низкоуровневый. Поэтому помимо своей задачи тебе придется манипулировать хэндлами и громоздкими структурами, отлавливать низкоуровневые сообщения, и не дай тебе господь перепутать последовательность вызовов функций или забыть разыменовать указатель, - будешь вылизывать программу по шагам в отладчике, интерпретируя невразумительные сообщения об ошибках, ежели таковые будут.
Во-вторых, ты можешь использовать библиотеку MFC. По недоразумению некоторые считают ее объектно-ориентированной, но ты очень быстро убедишься, что это не так, - если структуры объявить классами и прилепить к ним несколько методов, объектами они от этого не станут. На каждом шагу ты будешь видеть торчащие уши тех же хэндлов и структур, постоянно будешь прибегать к помощи всевозможных визардов, которые будут набивать твой код невразумительными цепочками макросов, и т.д.
В общем, мое мнение такое. Сам по себе язык С++ в том виде, как его задумал Страуструп, весьма неплох (со скидкой на почтенный возраст, конечно). Но то, что мы имеем в виде MS VC++, продукт не самый приятный, и лично я расстаюсь с ним без малейшего сожаления. После него C#/.NET - как глоток свежего воздуха.