Будет знание C, и/или C++ делают меня лучшим разработчиком? [закрытый]

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

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

Править: Отвечать на некоторые вопросы. У меня есть хорошие несколько годы опыта в Java. Работали вполне немного с Delphi и приблизительно год и половину назад начал использовать C# для некоторых веб-приложений, которые я должен был создать.

16
задан user7116 14 April 2009 в 17:35
поделиться

25 ответов

Предлагаю вам прочитать эту книгу: http://csapp.cs.cmu.edu/ .

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

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

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

14
ответ дан 30 November 2019 в 15:01
поделиться

Если бы мне пришлось ответить на ваш вопрос одним словом, «ДА». Хорошо овладеть хотя бы одним языком, но всегда лучше выучить больше одного ... кто знает, что будет завтра.

Что касается понимания компьютера, C ++ может быть не очень полезным, но C ++ предоставляет вам множество возможностей при программировании.

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

0
ответ дан 30 November 2019 в 15:01
поделиться

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

http://www.cs.cf.ac.uk/Dave/C/

взгляните на эту веб-книгу, и вы сможете узнать, насколько мощным является язык ....

0
ответ дан 30 November 2019 в 15:01
поделиться

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

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

Однако следует помнить одну вещь: чтобы действительно выучить эти два языка, требуется много времени, потому что этого недостаточно для чтения о них. Вам нужно работать с ними и решать реальные проблемы. Это самая полезная часть при изучении этих языков, но это также самая неприятная и трудоемкая часть. Я учусь уже 10 лет, и я не могу сказать, что теперь знаю оба языка. Я чувствую себя довольно комфортно, но я знаю, что я далек от совершенства.

0
ответ дан 30 November 2019 в 15:01
поделиться

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

0
ответ дан 30 November 2019 в 15:01
поделиться

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

Я бы сказал, сделайте шаг вперед и изучите сборку. Я никогда не программировал профессионально на каком-либо ассемблере, но время, которое я потратил на проработку каждой главы и упражнения в Assembly Langauge для ПК , принесло мне большинство дивидендов за всю мою учебу, в школе или независимо. Вы будете знать, что такое указатель и смещение, у вас будет более глубокое понимание того, почему кодирование символов имеет значение, вы будете знать о стеке и куче, управлении памятью и т. Д. Вы никогда не сможете использовать что-либо из этого напрямую, но это сделает тебя лучшим программистом.

0
ответ дан 30 November 2019 в 15:01
поделиться

Есть поговорка:

Ты стоишь столько людей, сколько языков ты знаешь.

Это единственная реальная причина узнать их;)

0
ответ дан 30 November 2019 в 15:01
поделиться

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

0
ответ дан 30 November 2019 в 15:01
поделиться

Вы говорите о C или C ++?

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

Если вы хотите изучать язык ОО, я бы, возможно, предложил бы более простое введение в ОО - возможно, Java или C # на начальном этапе. C ++ может быть пугающим введением в эту тему.

0
ответ дан 30 November 2019 в 15:01
поделиться

Кодирование на C дает вам более близкое представление о том, что делает настоящая система. Это действительно «кодирование под металл» машины.

Это также дает вам более глубокое понимание того, что языки вроде Java / C # / Python / Ruby делают для вас.

И, наконец, подавляющее большинство (хотя Не все) BSD-код * nix / * написан на C, а также на многих современных системах, поэтому, зная, что он открывает двери для вас, стоит подумать над исправлением или попытаться присоединиться к команде в определенной компании.

1
ответ дан 30 November 2019 в 15:01
поделиться

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

Тем не менее, C, хотя старый язык, это то, что эсперанто должен был быть на человеческих языках - язык, который должен знать каждый:)

Почему? Это не важно. Важно то, что вы повсюду встретите С.

1
ответ дан 30 November 2019 в 15:01
поделиться

Да. (вроде)

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

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

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

Так что да,

1
ответ дан 30 November 2019 в 15:01
поделиться

Больше никогда не плохо знать язык! Если вы изучите C и Assembler, вы увидите, как все это началось. Это действительно полезно для бесед на собраниях;)

Это больше о вас, чем ваши навыки программирования.

1
ответ дан 30 November 2019 в 15:01
поделиться

Learning another language will make you a better coder. Especially when the language's paradigm is significantly different from any other language you already know!

Learning C will give you a much better grasp of what you are actually doing. It will be like being accustomed to a full featured graphing calculator and then learning to do all the arithmetic, algebra, calculus, and graphing yourself with just a blackboard and chalk. It will be a lot of work, but if you succeed, your mental model of the code will be much closer to what is actually happening in the machine.

This isn't really necessary to be a good coder. Actually, I believe one of the characteristics of a good coder is the ability to understand the code in a higher level of abstraction, and to see the system as a whole. Low level knowledge doesn't help you with the big picture. However, if you want to be great, you have to move beyond just good. You should be able to understand the system at many different levels of abstraction from the upper conceptual diagram level down to the bare machine code level. Knowing C will help you with understanding the low levels. Being able to debug C will help you with troubleshooting at all levels!

C++ allows you to do the low level operations of C, but adds a bunch of abstraction mechanisms and code reuse facilities so you can be a little more productive. If you already know a higher level language like Python, Ruby, Perl, VB, Java, and so on, I would recommend that you make some effort to become skilled in C and not try to tackle C++ just yet. The purpose of learning another language should be to expand your horizons. That way, even if you don't end up using it in a professional or hobbyist capacity, you will still improve your coding and analysis skills for the languages that you do use.

2
ответ дан 30 November 2019 в 15:01
поделиться

Я бы сказал, что каждый новый язык улучшает ваши навыки программирования, поэтому изучение новых - это всегда хорошая идея. Тем не менее, я считаю, что изучение языков, принадлежащих к другим парадигмам, чем та, к которой я сейчас больше всего привык, является потрясающим способом стать лучшим программистом. Например, изучение пролога впервые заставило меня по-настоящему понять рекурсию, smalltalk и ruby ​​помогли мне понять всю прелесть динамического набора текста, lisp просто взорвал мой разум, а C заставил меня осознать, что происходит за кулисами ...

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

3
ответ дан 30 November 2019 в 15:01
поделиться

Джоэл и Джефф уже спорили об этом на ранних подкастах , и они неубедительны и очень спорный.

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

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

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

Итак, я сказал бы, посмотрев на C может

3
ответ дан 30 November 2019 в 15:01
поделиться

Знание C / C ++ делает вас более полезным разработчиком. C / C ++ достаточно распространены, и синтаксис многих других языков является производным от них.

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

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

3
ответ дан 30 November 2019 в 15:01
поделиться

Существует большая статья о самосовершенствовании в программировании: «Научи себя программировать 10 лет»

В нем говорится, что всегда полезно учиться новому. C ++ сложен в изучении и еще труднее в освоении.

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

5
ответ дан 30 November 2019 в 15:01
поделиться

There is nothing special about C and C++, other than:

  • C is a remarkably unambitious language. Its goal is/was more or less to create a portable assembly language. Anything more advanced than that, has no place in the language. As such, language-wise there is nothing to learn from C. It's in no way a difficult language, but it requires a lot of work to achieve even the simplest things. And it is of course very error-prone and unsafe compared to higher level languages.
  • C++ is a remarkably complicated language. It has had a lot of different influences over the years, and has stolen ideas from a wide range of languages and programming paradigms. And then in the last decade or so, this has been topped off by the C++ community pretty much inventing their own paradigm (generic programming). As such, C++ has come up with some pretty clever solutions to a lot of common (in all languages) problems. As much as people like to look down on C++, I frequently miss it when working in C#. There are a number of high-level techniques and abstractions that are simpler, cleaner and more elegant in C++. So from a pure language perspective, I think C++ is worth learning. (And I wish Javas or C#'s designers had bothered to do that, rather than basing their languages on what can be more accurately described as "C with classes".

But I think what you're getting at is that learning these languages will give you a better understanding of "what's going on under the hood".

I can see the point in that. C/C++ gives you pointers which can be almost mapped directly to the underlying memory addresses. Learning these languages certainly gives you a kind of intuition about what's going on underneath. (But as always with intuition, it's not always correct. One of the most common mistakes in C++ is to assume that "pointers are memory addresses". They're not. In many ways they behave similarly, but pointers obey a lot of additional constraints that may or may not exist in the actual hardware.)

So for these things, why not go directly to the source? Learn assembly, learn about the CPU itself, learn about compilers.

All of the above is worth learning, and will make you a better programmer. But learn C++ for the sake of the language (it's not beautiful, but there are lessons to be learned from it), and learn about all the underlying mechanics (compilers, the hardware you're running on, the CPU) by studying those directly.

But whatever you go for, definitely diversify. You should learn the languages you actually work in, obviously, but don't stop there. Learn something else, almost regardless of what it is. More languages, or a better understanding of the underlying infrastructure, it'll all make you a better developer.

Finally, don't think of C/C++ as the "black belt". C++ in particular may be one of the hardest languages to master, but that doesn't mean those who know it are the best programmers. Far from it.

6
ответ дан 30 November 2019 в 15:01
поделиться

Знание языка не делает вас лучшим разработчиком. Правильное применение языка (большую часть времени избегайте злоупотребления понятиями языка).

Использование силы языка делает лучшего разработчика

8
ответ дан 30 November 2019 в 15:01
поделиться

I would learn C++ templates as a brain exercises. This as any other programming technique will force you to think on a task in a more wider basis.

8
ответ дан 30 November 2019 в 15:01
поделиться

Расширение базы знаний всегда приветствуется. И как часто заявлял Джоэл Спольски.

Его аргумент в том, что это похоже на вождение с палкой и знание механики, кодирование на C (или простая в использовании сборка) помогает вам понять, что происходит под капотом

10
ответ дан 30 November 2019 в 15:01
поделиться

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

Первое, что нужно запомнить, когда вы начинаете изучать, однако: Нет такого языка, как C / C ++.

19
ответ дан 30 November 2019 в 15:01
поделиться

Каждый изучаемый вами язык и инструмент делают вас лучшим программистом. Да.

24
ответ дан 30 November 2019 в 15:01
поделиться

C ++ - я не уверен.

C - конечно:

  • Это заставит вас осознать нехватку памяти - например, никто, кто не «думает», C не может понять или подумать о Apache pool

  • . Он поможет вам узнать о проблемах производительности, таких как вычисление набора векторов / битов и развертывание цикла (потому что иногда вы будете делать это вручную)

  • Вы будете чувствовать себя более комфортно с Unix

  • C по-прежнему является отраслевым языком общения

2
ответ дан 30 November 2019 в 15:01
поделиться
Другие вопросы по тегам:

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