Ответ 1
У меня та же проблема. Я использую совершенно разные цветовые схемы для Visual Studio (темный-на-свете для С++, свет в темноте для С# и VB).
Кажется, помогает моему мозгу облегчить переход.
~ 80% кода, который я пишу, находится на С#. Другой ~ 20% находится на С++. Всякий раз, когда мне приходится переключаться с С# на С++, мне требуется довольно много времени, чтобы мысленно "переключить передачи" на мышление на С++. Я делаю простые ошибки с помощью указателей и выделения памяти, которые я бы не сделал, когда был в университете. После периода настройки я в порядке, и запись в собственном коде происходит естественным образом.
Это нормально? Кто-нибудь еще сталкивается с чем-то подобным, и если да, то что вы делаете, чтобы сократить время, которое это тратит?
Изменить: я не говорю, что я не могу работать с распределением памяти и указателями. Я удобно использую их часто в своем коде на С++. Просто не сразу после работы в С# в течение длительных периодов времени.
У меня та же проблема. Я использую совершенно разные цветовые схемы для Visual Studio (темный-на-свете для С++, свет в темноте для С# и VB).
Кажется, помогает моему мозгу облегчить переход.
У вас есть контрольный список частых ошибок, которые вы выполняете при переключении с одного на другой и каждый раз ссылаетесь на него. Простой, но эффективный.
Я делаю простые ошибки с помощью указателей и выделения памяти, которые я бы не сделал, когда был в университете.
Хорошо, там твоя проблема. Изучите С++ достаточно хорошо, чтобы увидеть, как вы можете избежать беспорядка с указателями и выделениями памяти в первую очередь.
Тогда переключение между управляемым и неуправляемым кодом становится тривиальным.
Это только проблема для вас, потому что вы переключаетесь между С#, где вам не нужно беспокоиться ни о чем, и С++, который вы не знаете достаточно хорошо, чтобы безопасно использовать.
Управление памятью на С++ не сложно. Если вы ошибаетесь, это потому, что вы не изучили его должным образом. В хорошо продуманном коде С++ это просто не проблема. Это происходит автоматически, как в С#.
Я делаю это все время. Проекты С++, над которыми я работаю, имеют несколько вещей, чтобы облегчить работу с памятью/ресурсом.
a) использовать обертки RAII
b) систематически используйте boost shared_ptr
Эти 2 вещи допускают огонь и забывают программирование на динамически распределенных вещах (у нас есть хорошо определенные идиомы, которые все знают)
Плюс у нас есть хорошо отлаженная библиотека для выполнения блокировок, потоков и т.д.
Помогает много
И, конечно, время от времени я жалуюсь на
но - эй - это жизнь
Да, слишком плохо, поэтому многие колледжи и университеты не могут обучать студентов управлению ресурсами.
RAII поможет вам, если вы будете использовать его последовательно.
Потратьте время и дважды проверьте свою работу. Как только вы вернетесь в паз, вы быстро ускоряетесь.
Я чувствую твою боль; когда я иду С# → С++, я вроде как пьяный.
Обычно я запускаю переключатель, читая несколько страниц кода, прежде чем погрузиться и начну.
Я сам это испытал. Его не только С# для С++, но и неуправляемый. Это происходит при каждом изменении. У меня была эта проблема при переходе с VB на VС++, CС++ на С#, С# на VС++ и даже С# на VB.net(истинная история - любезность ';').
Единственное время, которое требуется для настройки, которая отличается...
Это одна из причин, по которой я делаю гораздо больше работы в VB.NET, чем в С#. Я не забываю, на каком языке я нахожусь. Если у вас есть этот вариант, я рекомендую его. В С# действительно нет ничего, что вы могли бы сделать в VB.NET, и радикально отличающийся синтаксис помогает мне переключать контекст.
Мне нужно все время переходить от кодирования SQL на основе SQL к Sybase-SQL.
То, что я нахожу, помогает использовать одну и ту же процедуру на моем вторичном мониторе, со всеми хорошими вещами в нем, простым курсором, настройкой proc, if-then statements.. все действующие коды на этом языке, поэтому, если я забудьте, какая среда имеет вариант ELSIF или ELSE IF, я могу проверить источник своего шаблона, чтобы узнать.
Всякий раз, когда я переключаюсь с С++ на Java, я всегда все еще думаю о том, где выделяется память. Я считаю, что проще всего не переключиться на мысль о том, что память управляется... подумайте о том, где это происходит, и подумайте, куда бы вы ее выпустили, если бы вы писали ее на языке без управляемой памяти. И просто не пишите строки кода, которые вы в противном случае хотели бы.
Это нормально, если проблемы переходят с одного языка на другой. С# кажется достаточно близким к С++, но на самом деле это не так.
Но имейте в виду, что в "современном" С++ большую часть времени вы не будете использовать управление памятью. Он будет скрыт от вас, поэтому я обычно не занимаюсь указателями (в худшем случае с умными указателями). Но я знаю, как они работают. И это также должно быть, может быть, вам нужно немного практиковать, поскольку другой участник сказал, что язык C имеет право.
Но в С++ есть такие вещи, как шаблоны, функторы, алгоритмы, потоки, которые нуждаются в немного мышления, потому что это не java-С#, как вы могли бы привыкнуть. И, конечно же, использование стандартной библиотеки шаблонов и, в конечном итоге, повышение.
Но хорошо, что "хороший" разработчик С++ должен знать, почему он не использует указатели:)