Должен ли я учить C, если я уже знаю ассемблер? - PullRequest
4 голосов
/ 29 января 2009

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

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

Стоит ли еще усилий, чтобы взломать K & R и потратить некоторое драгоценное время на изучение тонкостей языка C, или мне лучше всего уделить время изучению чего-то еще?

Ответы [ 14 ]

16 голосов
/ 29 января 2009

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

Ну, вычеркните это, посмотрите на других и решите сами. Если вы хотите:

  • остаются близкими к низкому уровню, но приобретают мобильность
  • сможет работать с огромной кодовой базой, которую C уже имеет
  • просто узнать что-то новое

тогда вы можете изучать C.

11 голосов
/ 29 января 2009

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

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

3 голосов
/ 29 января 2009

Абсолютно! Обучение C улучшит ваше программирование на ассемблере. Когда вы изучите C, вы начнете передавать структурированный метод программированию на ассемблере. Я заметил, что чем больше я изучаю языки высокого уровня, тем лучше организация и понятность программирования на ассемблере.

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

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

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

3 голосов
/ 29 января 2009

Вы знаете сборку и, кажется, знаете C #. Изучать еще один язык никогда не бывает плохо, но я бы рекомендовал изучать C только в том случае, если он понадобится вам в ближайшем будущем. Я думаю, что вы бы расширили свои знания, изучая динамический язык, такой как Ruby, или функционал, такой как Common Lisp.

1 голос
/ 29 января 2009

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

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

1 голос
/ 29 января 2009

Никто не упомянул ....

что C - это путь к написанию ассемблера быстрее. Когда я писал компьютерные игры, мы сначала все писали на C, а затем переписывали части, которые занимали все время, старое правило 80-20. 80% времени занято в 20% кода.

Для этого мы скомпилировали код, который хотели переписать, и использовали флаг файла дампа в ассемблер. Затем мы взяли сгенерированный C-файл ассемблера и использовали его в качестве основы для написания более оптимизированного ассемблерного кода. Это было намного быстрее, чем начинать с нуля.

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

Tony

1 голос
/ 29 января 2009

C переносимо (если вы пишете это внимательно), это хорошая причина для меня.

1 голос
/ 29 января 2009

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

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

Но если вы обнаружите, что вам нечего делать в C, то профессионально нет смысла изучать это.

Однако, если вы хотите сделать это как хобби или личное дело. Тогда твое время, делай что хочешь.

0 голосов
/ 21 июля 2017

ДА, это как ядро ​​всех языков программирования, почти каждый язык построен на его основе, и вы чувствуете, что знаете c #, вам не понадобится много времени, чтобы выучить c если вы много работали над сборкой, я думаю, вы когда-нибудь сможете, если еще не работаете с ней, я не думаю, что есть работа по программированию, которая хочет, чтобы вы знали только ассемблер, C необходим даже для самого низкого уровня программного обеспечения, такого как операционные системы используйте C и Windows также использует C ++, так что, на мой взгляд, вы не должны даже думать об этом C, это как фундаментальное знание, даже большинство веб-разработчиков знают C

0 голосов
/ 29 января 2009

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

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

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