Сдвиг от Java до C++

Я разрабатывал приложения на основе C# (.NET) и Java (J2EE) в течение прошлых 3 лет.

Но теперь я чувствую, Java, C# делает Вас Ламе (от изучения точки зрения), и можно разработать приложения быстро, но Вам не удается понять основное базовое понятие программирования.

Так, я пытаюсь изучить C++, но я нахожу это немного "путанием" из-за указателя, множественного наследования, некоторых конвенций и другого понятия C++, которое не существует в Java. Так, что делает Вас, парни предлагают? Как я должен чувствовать об этом?

Спасибо

PS: Я - студент, поэтому имейте все время в мире и на самом деле сместитесь.

15
задан Ispirer SQLWays Migrations 27 February 2015 в 10:42
поделиться

15 ответов

На мой взгляд, вам следует сначала изучить C, чтобы правильно понять основу, на которой построен C ++. Возьмите экземпляр «Язык программирования C» Кернигана и Ричи, который многие считают лучшим справочником по этому языку, и начните читать его. Как только вы полностью поймете C, у вас будет необходимая вам низкоуровневая база.

12
ответ дан 1 December 2019 в 02:01
поделиться

Настройте производительную среду компиляции C ++, такую ​​как Microsoft Visual C ++ 2008 Express , и перейдите по по всем ссылкам в Сайт Бьярна Строусрупа Язык программирования C ++ , начиная с C ++ Style and Technique FAQ . Если вы экспериментируете с любым другим языком, вам больше не нужно: -)

0
ответ дан 1 December 2019 в 02:01
поделиться

Для изучения C ++ я рекомендую прочитать C ++ для программистов Java Марка Аллена Вайса. Это очень помогло мне при переходе с Java на C ++, так как очень хорошо выделяет различия между языками.

3
ответ дан 1 December 2019 в 02:01
поделиться

Learn Forth. У него лучшие объекты. И это виртуальная машина. Если вам не нужна настоящая машина, посмотрите для этого Green Arrays или Sandpiper / John Rible.

Бесплатные интерпретируемые версии с потоком распространены по всей сети. Для практики. Когда вы поймете это, напишите свою собственную версию с прямым потоком. Или посетите Forth Inc и купите один для своей машины или используйте их бесплатную версию для Windows.

Java - это гибрид Forth / C, поэтому, если вы хотите перейти на Java, у вас будет кое-что из этого.

Образование:

Начиная с форта - Броди Мыслить дальше - Броди

Вторая отлично подходит для любого языка, потому что это лучшая книга по факторингу, которую я знаю. Бесплатные версии обоих в сети.

Если вы хотите сделать аппаратное обеспечение / FPGA Forth Stack Machines: The New Wave by Koopman

Все вышеперечисленные книги доступны в сети бесплатно.

-2
ответ дан 1 December 2019 в 02:01
поделиться

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

Существует также более низкий уровень вашей виртуальной машины, о котором вы, кажется, еще не знаете и который вы, возможно, захотите изучить. Чтобы узнать о внутреннем устройстве Java, я бы порекомендовал научиться программировать JVM на языке (Java) Assembly. Jasmin ( http://jasmin.sourceforge.net/ ) - эталонный ассемблер / синтаксис для этого типа программирования. Еще один замечательный ресурс - это спецификация языка Java ( http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html ), которая содержит множество внутренних компонентов Java. Изучив C, вы также можете использовать некоторые API более низкого уровня, предоставляемые JVM ( http://java.sun.com/javase/6/docs/technotes/guides/jvmti/ ), которые позволяют получать низкоуровневую информацию о запущенной JVM и писать интересные вещи, например отладчики.

Если вы изучите этот материал и самостоятельно выполните некоторые взломы, вы узнаете, как работает JVM и что компилятор фактически помещает в ваши файлы классов. Также очень вероятно, что вы откроете для себя что-то новое о самом языке программирования Java, которого не знали раньше, даже если думаете, что знаете о нем все.

Кстати, вы также можете запрограммировать виртуальную машину .Net на сборке.

0
ответ дан 1 December 2019 в 02:01
поделиться

C и C ++ делают некоторые базовые базовые концепции программирования более очевидными, но они не были разработаны Богом. Я бы поддержал предложение изучить фактические низкоуровневые системы, стоящие за вашим низкоуровневым кодом: операционные системы, компиляторы / среды выполнения (попробуйте «Основы языков программирования») и машинную архитектуру.

P.S. В общем, может быть лучше изучать C ++ самостоятельно, чем начинать с C, но для вашей конкретной цели - более близкого знакомства с низкоуровневыми небезопасными конструкциями, такими как указатели, после изучения Java - я думаю, что это лучше начать с C (и K&R), где они впереди и по центру.

1
ответ дан 1 December 2019 в 02:01
поделиться

Но теперь я чувствую, что Java, C # делают вас хромыми (с точки зрения обучения), и вы можете быстро разрабатывать свои приложения, но не понимаете базовых концепций программирования. .

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

Как разрабатывать программы - довольно хорошая книга.

2
ответ дан 1 December 2019 в 02:01
поделиться

Я бы посоветовал сначала выучить язык ассемблера. Это даст вам очень прочную основу в том, что происходит на низком уровне. Это также поможет укрепить идею о том, что «все на самом деле просто адрес».

Рекомендуется брать курс, посвященный языку ассемблера, поскольку он «заставит» вас его выучить (лично я не думаю, что ASM / это / развлечение, но оно того стоило [и требовалось для получения диплома] для мне взять класс).

Освоив сборку, переходите к C и C ++.

Удачи!

0
ответ дан 1 December 2019 в 02:01
поделиться

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

Есть еще одна причина сначала изучить C. Это проще, чем C ++, намного проще, чем C ++, и он хорошо связан с C ++ (в отличие от Java, которая не во всех аспектах, а в самых поверхностных объектно-ориентированных аспектах). Я не говорю о синтаксическом сходстве: я говорю о низкоуровневом программировании. Я говорю о концепциях указателей, которые существуют как сами по себе, так и в форме итераторов в C ++. Вы можете передавать функции в C, и вы можете передавать объекты функций в C ++.C быстро усваивается, и он очень эффективно согреет вас.

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

Начните с того, что достаньте себе книгу K&R и допейте ее. Вы не пожалеете об этом.

0
ответ дан 1 December 2019 в 02:01
поделиться

Язык ассемблера.

Начнем с Z-80. Затем добавьте x86. Тогда попробуйте 68000. Затем DSP серии TI 320. Вы также можете добавить Z-8. Просто чтобы посмотреть, как это делают разные машины.

0
ответ дан 1 December 2019 в 02:01
поделиться

Похоже, вы избегаете первой ошибки, которую совершает большинство людей, - предположения, что новый язык такой же, как и старый. C ++ отличается, и его следует изучать как новый (-ишний) язык.
Справочник, который я бы предложил, был бы C ++ Как программировать , который используется в моем университете для вводных классов C ++.

После этого посмотрите на предыдущее программное обеспечение Java, которое вы написали, и посмотрите, как вы переведете их на C ++. Синтаксис можно легко найти на CPlusPlus.com . При этом важно помнить о том, что представляет собой все различный синтаксис и как он меняет то, что происходит в программном обеспечении (т.е.различия между двумя языками). Это дает дополнительное преимущество, позволяя вам увидеть, как базовая архитектура представлена ​​для обоих языков (и для языков программирования в целом). Я не знаю хорошей книги, которая объясняла бы, как языки программирования работают под прикрытием, или я бы порекомендовал это.

Однако, если вы хотите узнать, как работает программирование, то для начала неплохо было бы начать с языка ассемблера. Ассемблер для компьютеров на базе Intel - это то, что я использовал для изучения ассемблера, и это было очень полезно.

0
ответ дан 1 December 2019 в 02:01
поделиться

Если вы хотите понять основные концепции программирования языков , я бы посоветовал книгу, например, «Концепции языков программирования» Джона Митчелла. Затем напишите несколько парсеров / интерпретаторов для простых языков. Еще один хороший ресурс - это SICP, который специфичен для Scheme (диалект LISP) и полностью доступен здесь . После того, как вы выучите несколько языков, вам не понадобится много времени, чтобы освоить синтаксис и семантику нового языка (с другой стороны, для ознакомления с основными библиотеками может потребоваться довольно много времени).

Если вы хотите узнать, как работают современные компьютеры, я бы порекомендовал изучить C и прочитать такие книги, как «Современные операционные системы» Таненбаума. C полезен в этом контексте в основном для чтения кода системного уровня. Реализация (очень) простой операционной системы может быть невероятно познавательной. Однако, возможно, лучше начать с чего-то столь же простого, как реализация базовой оболочки (например, оболочки Борна, за исключением более простой). Я также рекомендовал бы узнать, как именно работает сеть, поскольку это неотъемлемая часть современных компьютерных систем.

1
ответ дан 1 December 2019 в 02:01
поделиться

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

В конце концов, я думаю, что программирование на самом деле не так уж и сложно, и вам может понадобиться кто-то, чтобы объяснить это правильно, хотя бы один раз, чтобы все щелкнуло. Все дело в том, чтобы перефразировать одни и те же простые концепции снова и снова, чтобы построить сложные и красивые машины.

5
ответ дан 1 December 2019 в 02:01
поделиться

C ++ не более «базовый и базовый», чем любой другой современный язык программирования. У него есть модель компьютера (плоское адресное пространство памяти), но ОС и ЦП просто моделируют эту модель, используя множество уровней кэширования и разбиения на страницы, так что это не «реально». В результате для выполнения одной и той же операции иногда может потребоваться в 1000 раз больше времени, чем в другое время.

Также современный C ++ имеет множество мощных абстракций, которые не имеют более прямого отношения к тому, как работает компьютер, чем абстракции, представленные в Java и C #. OP упоминает множественное наследование - явно не более элементарно, чем наследование в других объектно-ориентированных языках. Многие другие функции C ++, исключенные из Java, являются абстракциями высокого уровня (или позволяют создавать их), и поэтому в некотором смысле Java является более низкоуровневым языком. В Java значение символов операторов всегда одно и то же, тогда как в C ++ простой == может создавать объект, который позже будет использоваться для генерации выражения SQL вместо того, чтобы выполняться в процессе.

Среды выполнения JVM и CLR (почти наверняка) написаны на C и / или C ++, так что в этом смысле очевидно, что сегодня они образуют слои. Но на уровне C / C ++ вы по-прежнему будете работать с абстракцией, которая отличается от того, «как на самом деле работает машина», поэтому вы на самом деле будете изучать другой набор абстракций, а не «реальность».И операционная система (или даже аппаратный чип) может быть спроектирована специально так, чтобы среда выполнения, подобная JVM или CLR, была собственным низкоуровневым уровнем системы; в такой системе среда выполнения C / C ++ потребует для работы «высокоуровневого» (дорогостоящего) уровня эмуляции.

Так что, вероятно, не стоит пытаться научиться программировать «в реальности». В наши дни на самом деле этого никто не делает; это пустая трата времени. Лучше узнать, как абстракции программирования помогают писать правильные программы. Если язык усложняет вам жизнь, это не доказывает, что вы делаете «настоящие вещи». Это просто означает, что вы выбрали неправильный язык для того, что пытаетесь сделать.

9
ответ дан 1 December 2019 в 02:01
поделиться

С чего бы вы ни начали, я предлагаю сбросить полные IDE. Используйте хорошие текстовые редакторы (vim / emacs)

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

В любом случае, у вас есть все лучшие ответы выше. :)

  • Ивар
0
ответ дан 1 December 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: