Подтвердить что ты не робот

С++ как первый язык

Я занимаюсь самообучением С++ уже около 4 месяцев. Мне это нравится, и я думаю, что я хорошо себя чувствую. Однако ответ на вопрос мой вопрос заставил меня подумать, что я могу настроиться на падение.

Итак, что люди здесь думают о С++ как о первом языке для изучения? И стоит ли мне сейчас продолжать, что я сделал хороший старт?

4b9b3361

Ответ 1

Я не понимаю, почему люди все еще путают "язык" с "библиотекой". (Обращаясь к связанному ответу.) Итак, что, если С++ не имеет "родной" концепции аудио? Существует множество библиотек, которые вы можете легко использовать с С++ и которые, вероятно, лучше подходят для ваших конкретных потребностей, чем любой API-интерфейс обработки звука "стандартная библиотека".

</& напыщенная GT;

С++ - сложный язык. Есть и другие, которые легче освоить. Я бы никогда не стал спорить об этом.

Но С++ - это один из самых мощных языков. Он может быть очень эффективным и очень элегантным сразу. Разумеется, ничто не мешает вам делать все возможное.

Если я рекомендую С++ в качестве первого языка программирования? На самом деле, я не знаю ничего лучше. Другие могут защитить вас от ошибок и сделать первоначальный успех (например, ваше первое приложение GUI) проще. Но если вы основываетесь на фундаменте С++, вы всегда будете в безопасности. На самом деле вам, возможно, никогда не придется выбирать другой язык. Но если вы хотите/должны, вы найдете это смехотворно легким.

Опытный С++-кодер может делать, например, Java на полной скорости в течение нескольких недель. Наоборот? Намного сложнее.


Спустя много лет, я почувствовал, что должен изменить этот ответ. Поскольку мои дети просили меня научить их программированию, я начал это делать. Я на самом деле оказался не, начиная с С++... потому что сначала я показал им BF. В совершенно никакое время вообще, они поняли о памяти и указателях. Затем я продолжил работу с С++, и мы до сих пор наслаждаемся ими.


Еще несколько лет спустя, и я почувствовал, что действительно должен добавить эту прекрасную лекцию Кейт Грегори из CppCon 2015 к этому ответу:

Остановить обучение C.

Ответ 2

Позвольте мне сказать так:

Я взял и прошел с 94%, Sun Java Certification, не собрав ни одной строки Java (это было девять лет назад). Я смог это сделать, потому что я хорошо знал С++.

На моей первой профессиональной работе я был нанят как тестер. В мой второй день мне сказали, что я могу программировать вместо теста, если бы я усвоил достаточно PowerBuilder, чтобы быть полезным - через две недели. Поскольку я хорошо знал С++, PowerBuilder был прост.

С++ сложно, но если вы его хорошо изучите, прочитайте Stroustrup Язык программирования С++, выполните упражнения тоже, прочитайте его "Дизайн и эволюцию С++", прочитайте С++ Faq и книги Meyers и книги Herb Sutter, прочитайте comp.lang.С++. moderated, читайте Coplien Advanced С++ Programming Styles и Idioms независимо от того, какой язык OO вы хотите кодировать, - если вы изучите его хорошо, любой другой язык OO прост.

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

О. И С++ действительно забавно программировать, гораздо менее подробный, чем Java, и гораздо более гибким. Вы действительно отвечаете, а не IDE или язык. Вы можете стрелять своей ногой, но вы будете отвечать за это. И прочитайте книгу Александреску, как только узнаете шаблонов, он будет изумлять, ошарашать и радовать вас.

С++ - это весело. Прочтите "Curiously Recurring Template Pattern": это выглядит как

template< class  T> struct base {};

struct derived: base< derived > {};

Да, вы получили это право: это класс, который происходит от базы, которая была построена на основе классов. Теперь это звучит просто неясно и глупо, но для этого есть много хороших применений, и на днях я избивал свою голову, потому что вы не можете сделать это на Java (потому что Java использует стирание типов, а не шаблоны, для дженериков), но если бы я мог использовать его, я мог бы сохранить много и много кода, повторяющихся во многих классах.

В С++ гораздо больше, и если вы ограничиваете себя Java или .Net, вы никогда его не узнаете.

Ответ 3

С++ - это не простой язык для изучения, как отмечают все остальные, но есть несколько причин, по которым он делает достойное место для начала:

  • он не привязывает вас к определенной парадигме программирования (например, Java и OOP), поэтому вы можете легко экспериментировать с различными технологиями.
  • С++ не имеет колоколов и свистов, поэтому вы можете сосредоточиться на создании строительных блоков, если хотите знать, как они построены.
  • поскольку это язык, а не платформа, вы можете выбрать библиотеку или библиотеки, которые лучше всего подходят под задачу или выбранный вами стиль программирования (например, выбирая что-то вроде Poco для ощущения Javaesque, ACE для сложного раннего стиля OO и т.д.)
  • это язык программирования общего назначения, а не платформа (должен был сказать это дважды)

Трюк изучает его тщательно и правильно в первый раз. Я знаю, что я, как и многие другие, боролся с этим, изучая его как "объекты C +", прежде чем понимать его. Это трудный язык для изучения. Я бы порекомендовал искать опытного наставника С++, чтобы приложить себя к себе, а также прочитать много "рекомендуемых" книг о том, как и как не писать С++. Избегайте изучения вредных привычек.

Для начального списка чтения в определенном порядке:

  • "Ускоренный С++" от Koenig и Moo
  • "Эффективный С++/STL" Скотта Мейерса
  • "Объектно-ориентированное программное обеспечение" Бертран Мейер
  • "Программирование программистов на языке программистов" Питера ван дер Линдена
  • "Учебное пособие STL и справочное руководство" от Musser, Derge и Saini
  • "Стандартная библиотека С++" от Josuttis

Ответ 4

С++ будет (намного?) более доступным, если вы изучите "современный С++", а не "C плюс некоторые новые вещи". Например, используйте std::string, std::vector<> и unique_ptr<>/shared_ptr<> вместо строк, массивов и указателей C-стиля.

Уже упомянутый Ускоренный С++ от Koenig и Moo - это одна книга, которая делает именно это.

Ответ 5

Здесь много поддержки для С++, но я должен не согласиться. У каждого языка есть плюсы и минусы (некоторые, конечно, достигают лучшего баланса, чем другие).

Что касается первого языка, я убежден, что большинство людей научатся более эффективно программировать на языке, который: a) не имеет цикла редактирования-компиляции (который по своей природе медленнее для вас, как программист b) имеет сбор мусора c) имеет хорошую интроспекцию времени выполнения. Лучше всего, если есть интерактивный оценщик, чтобы побеседовать с.

Разработка (если не время выполнения) почти всегда быстрее на таких языках, есть меньше вещей, чтобы вас тронуть, и есть более эффективные инструменты, чтобы помочь понять, что пошло не так, когда это произошло.

Нельзя сказать, что изучение капризов управления памятью на языке, таком как С++, не стоит делать и т.д. и т.д., это просто не то место, которое вы действительно хотите начать.

Другая проблема с С++ заключается в том, что при всей ее практичности явный размер ее добавил к тому, что у нее есть несовместимые части, которые могут привести к тонким проблемам, которые лучше всего избегать как новичок.

отредактировано: Джон Д поднимает точку в комментарии, что некоторые люди, которые сначала изучают язык GC'd (который никоим образом не ограничивается "скриптовыми" языками), никогда не узнают указателей позже. Это красная селедка. Некоторые люди не могут изучать всевозможные вещи по разным причинам. Я утверждаю, что беспокоиться о указателях - это отвлечение, когда вы изучаете основы. В какой-то момент вам может потребоваться узнать о ручном управлении памятью, но это не принципиально важно для этого. Или, точнее, выгоды, сделанные путем избежания этого, более важны, чем затраты.

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

Однако ни одно из этого не будет иметь большого смысла для настоящего неофита вначале. Таким образом, некоторые из них будут в конечном итоге "делать это так, а не так". "Зачем?" "потому что я так сказал - вы еще не поймете детали". Вряд ли благоприятное начало.

Большие выгоды для изучения первого языка, хотя, вероятно, избегают цикла редактирования-компиляции (любого вида) и имеют хорошую интроспекцию.

Ответ 6

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

Итак, да, продолжайте.

Ответ 7

любой язык - хороший первый язык (в пределах разумного, а не что-то вроде lolcode)

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

Ответ 8

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

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

Ответ 9

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

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

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

Я бы сказал, что придерживаюсь С++, это не пустая трата времени, даже если вы никогда не пишете одну строчку кода С++.

Надеюсь, что это поможет:)

BW

Ответ 10

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

Я настоятельно рекомендую вам изучить и другие языки. Например, Python - это мой второй язык; он может дать вам новые идеи об объектно-ориентированном и функциональном программировании и сделать вас лучшим программистом на С++ (и лучшим программистом в целом).

Я считаю, что быть подверженным стольким языкам (и, что более важно, многим различным парадигмам программирования), сделает вас лучшим программистом в целом. Взгляните на Haskell, Prolog, Lisp и вариант Ассемблера, по крайней мере.

Ответ 11

Лично я думаю, что все должны начинаться с BASIC. Нет, действительно. По крайней мере, первые первые 2 недели до 1 месяца. Это отлично подходит для курсов средней школы. Это достаточно просто, что вы можете сосредоточиться на очень простых вещах, таких как использование переменных, циклических структур, условных выражений и вызывающих подпрограмм, не беспокоясь о структурах, объектах и ​​указателях. Однако, если вы уже пропустили все эти простые вещи, нет причин, по которым вы не можете просто продолжать работу с С++. Это отличный язык. И очень полезно. Я думаю, что люди, которые никогда не программировали на C/С++, действительно упускают из виду некоторые фундаментальные вещи, которые вы должны знать о том, как все работает на более низком уровне.

Ответ 12

Если бы вы только начали, я бы не рекомендовал С++ в качестве первого языка, потому что первое, что вам нужно понимать в качестве программиста, - это концепции программирования, а на С++ вы потратите много времени на споры с синтаксисом.

Но так как вы четыре месяца и наслаждаетесь этим, это звучит так, будто вы все в порядке, поэтому я бы сказал, продолжайте. Но округлите его с еще одним общим чтением. Что-то вроде Структура и внедрение компьютерных программ. Он научит вас вещам, которые просто пахают выброс на С++, не произойдет. Вещи, которые улучшат ваши программы на С++ (и сделают вас лучше на других языках).

Ответ 13

С++ был первым правильным языком, который я изучил, и он отлично зарекомендовал себя для изучения других языков (С# в основном).

Кроме всего прочего, это дало мне хорошее заземление в объектной ориентации, что действительно помогло, когда мы работали с Siebel и С#.

Enjoy.

Ответ 14

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

Наконец, я бы предостерег вас, чтобы вы сосредоточились больше на концепциях программирования, чем на языковых концепциях. С каждой новой синтаксической синтаксикой С++ вы узнаете, спросите себя: "Какая проблема это решает?" Это те решения проблем, которые гораздо важнее конкретной реализации на С++ или любом другом языке.

Ответ 15

Игнорировать ненавистников. С++ может быть первым языком. Мой первый язык был ассемблером на TRS-80 Model 1.

Ответ 16

Я думаю, что если вы острые и хорошо проводите время с ним, то С++ - это нулевой язык для вас.

Если вы задали мне тот же вопрос, не набрав того, чтобы попробовать, я бы предложил начать с Ады. Он столь же мощный, как С++, но гораздо менее загадочный.

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

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

Ответ 17

Для меня С++ был моим первым языком, и я думаю, что это был хороший выбор. Вы узнаете все основные принципы ООП и поймете логическую структуру программирования. Но, конечно, это зависит от того, что вы хотите с этим сделать.

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

Так что идите!

Ответ 18

С++ - это трудный первый язык для изучения, но это не невозможно, и вы будете многому научиться из него. Ключ к нему, как и все остальное, - это не сдаваться, если вы что-то не понимаете. Задавайте вопросы и читайте, если что-то не работает. В конце концов вы найдете ответ. Я думаю, что лучшая цитата, которую я могу вам рассказать о вашей задаче, взята из Рэнди Пауш:

"Кирпичные стены есть по какой-то причине. Кирпичные стены не существуют, чтобы удержать нас. Кирпичные стены там, чтобы показать вам, как сильно мы чего-то хотим. Потому что кирпичные стены там, чтобы остановить людей, которые не хотят что-то плохое. Они там, чтобы держать других людей".

Ответ 19

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

С++ также (один из) является самым сложным языком для программистов. Управляемые/интерпретируемые языки многое делают для программиста. С++ не делает ничего, кроме того, что он также не мешает вам или заставляет вас оплачивать накладные расходы на управление.

Вы хотите быть экспертом с MAD SKILLZ или просто играть?

Ответ 20

Является ли С++ хорошим первым языком?

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

Если ваша цель - просто изучить С++ для определенной цели, я действительно не знаю лучшего метода, чем идти вперед и изучать С++.

Если вам нравятся проблемы, вы можете перейти на С++. Кривая обучения довольно противная, но однажды через нее вы узнаете много чего. (Люди все еще не знают, как использовать редактор vi, в конце концов.)

Я бы рекомендовал сначала изучить материал более высокого уровня. Изучайте векторы, а не массивы, используйте умные, а не обычные указатели, такие вещи. Отчасти потому, что вы должны завершить программирование как это (для большинства целей), а отчасти потому, что сначала нужно вспомнить что-то, что нужно запомнить. В конце концов вам нужно будет изучить материал более низкого уровня, точно так же, как в конце концов вам нужно будет научиться чему-то разворачиваться.

Ответ 21

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

С++ - мощный инструмент для профессионалов. Вы можете сделать с ним ужасные вещи (http://chaosradio.ccc.de/camp2007_m4v_1951.html). Иногда вам будет очень сложно попытаться понять ошибки. Он имеет такие функции, как ручное управление памятью и арифметика указателей, которые явно имеют место в системном программировании и программном обеспечении с очень высокими требованиями к производительности (игры...), которые им нужны, но им трудно попасть в голову и не очень полезный вне этих ниш. Когда я переключился с С++ на java, я действительно научился намного быстрее, но это может быть только личная вещь.

Ответ 22

С++ - очень полезный инструмент, и я часто считаю, что мастерство С++ - это знак различия, потому что это такой сумасшедший язык.

Мой совет также изучает другой язык, например, как python или схему. Я программировал С++ довольно долгое время, но когда я начал изучать схему python и впоследствии haskell открыл мне весь новый мир мышления. Легко войти в набор ума, что С++ может делать все и делать это быстрее, поэтому нет смысла изучать другой язык.

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

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

Ответ 23

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

Ответ 24

Просто попробуйте прочитать это интервью Страуструпа. Надеюсь, он ответит на некоторые из ваших вопросов. http://www.nsbasic.com/ce/info/interview.shtml

Слова его:

"Ну, однажды, когда я сидел в своем кабинете, я подумал об этом маленькая схема, которая немного компенсировала бы баланс. Я думал я интересно, что будет, если бы был такой сложный язык, так что трудно учиться, что никто никогда не сможет затопить рынок с программистами? На самом деле, я получил некоторые идеи из X10, вы знаете, X окон. Это была такая сука графической системы, что она только побежал на те ВС 3/60 вещей.. У них были все ингредиенты за то, что я хотел. Действительно смешно сложный синтаксис, неясный функций и структуры псевдо-OO. Даже сейчас никто не пишет Код X-windows. Мотив - единственный способ пойти, если вы хотите сохранить свой здравомыслие"

Ответ 25

Вы будете делать ошибки на любом языке, который вы начнете изучать. На некоторых языках может быть меньше проблем, о которых следует помнить, у некоторых может быть немало. Какой бы язык ни был, вы обязательно придумаете свои собственные подводные камни. Теперь, когда вы провели около 4 месяцев, я бы посоветовал вам продолжить. Теперь переключатель может усложнить ситуацию, учитывая тот факт, что теперь у вас есть две возможности:

  • Unlearn С++
  • Изучите язык X с нуля

Ответ 26

Иди, иди, иди! Все любят вас за то, что они повторяют свои ранние усилия и видят себя в вас и т.д. Все сентиментальности в стороне, да, лично я думаю, что вам нужно. У вас будет гораздо больше доверия и, следовательно, чувство собственного достоинства.

Ответ 27

С++, вероятно, не лучший язык для начала, и есть намного худший выбор.

Как уже говорилось, трюк состоит в том, чтобы правильно изучить его, я имею в виду современный С++, где вы могли бы сконцентрироваться (/focus?) на алгоритмах и проблемах, а не на C с классами, где вы "Мне нужно понять управление памятью в ранних главах.

AС++ действительно очень хорошая книга для изучения современного С++. Однако, без какого-либо опыта программирования, Фрэнсис Глассборроу Вы можете сделать это, возможно, лучше выбрать, чтобы начать с.

Ответ 28

С++ был первым языком, с которым я когда-либо сталкивался. Я играл с BASIC немного в средней школе, но никогда не делал ничего более существенного, чем "Я думаю о количестве от 1 до 100". У меня не было много проблем с С++, но я не был самоучкой. В старшей школе был предложен класс AP Computer Science, и мы использовали С++ в то время (колледж-колледж проводил экзамен на С++, с тех пор они перешли на Java, я думаю). Я считаю это прекрасным как первый язык (или почти первый в моем случае), , если у вас хороший учитель.

Если вы самообучаетесь, я думаю, вы получите больше от Python. Вы можете играть с вещами прямо в REPL, так что есть намного более мгновенное удовлетворение. Сам язык также намного более строг в применении языковых идиом, что поможет вам научиться "правильному" способу делать что-то. С++ не будет мешать вам, если вы попытаетесь сделать что-то не так, и, особенно если у вас нет учителя, чтобы рассказать вам, что вы делаете неправильно, и как его исправить, вы, как правило, разрабатываете некоторые вредные привычки.

Ответ 29

Здесь у вас много хороших ответов, но я бы добавил:

Никогда не сдавайся! Если у вас нет времени или что-то вас не интересует, вы должны QUIT, но никогда ДАЖЕ!

Мне все равно, как это тяжело, продолжайте. Продолжайте медленно, если вам нужно.

Ответ 30

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

Итак, я перешел на VB.Net и С#. Я все еще очень ценю мой фон на С++, и я думаю, что это сделало меня лучшим программистом, который использовал его в первую очередь. Но я бы не хотел возвращаться.