Должен ли я изучать язык ассемблера или C, чтобы понять, как работает "настоящее программирование"? - PullRequest
2 голосов
/ 30 декабря 2010

Я веб-разработчик, в основном работающий на Ruby и C # ..

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

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

Так что мой вопрос ..

Может ли Learning C научить меня достаточно теории информатики / низкоуровневого программирования, чтобы она не выглядела как обычный денди (полный инструмент)?

Спасибо!

Daniel


Спасибо, ребята!

Некоторые действительно замечательные ответы,

Думаю, я выучу C, чтобы понять управление памятью, но я думаю, что вы правы, и мне будет лучше изучать больше языков, которые я использую!

Ответы [ 10 ]

11 голосов
/ 30 декабря 2010

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

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

Вы будете хорошо учиться только на C, поскольку это C.

Вы можете заниматься "настоящим программированием" на любом языке, если вы делаете это правильно.

3 голосов
/ 30 декабря 2010

Будет ли Learning C достаточно научить меня теория информатики / низкий уровень программирование, чтобы не выглядеть обычным денди (полный инструмент)?

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

Ассемблер в основном перемещает кусочки памяти, а иногда и делает плохую работу, если вы не знаете, что делаете. Компиляторы C ++ / C создают неплохой ассемблерный код, так что зачем делать это самостоятельно, если вам не нужно писать низкоуровневое драйверное программное обеспечение. Единственный кусочек ассемблера в наших 2 000 000 строк смешанного кода C ++ / C # - это обнаружение VMWare.

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

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

2 голосов
/ 30 декабря 2010

В конце концов, все сводится к кодам операций, регистрам и режимам адресации, которым C абсолютно ничему вас не научит. Тем не менее, монтажники тесно связаны со своими платформами; изучение написания ассемблера на x86 мало поможет вам, когда вы работаете с Sparc или PA-RISC.

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

Это то, что было бы полезно знать для вашей повседневной работы или для того, чтобы произвести впечатление на вашего босса? Может быть. Я не уверен, как бы вы применили эти знания в своем C # или Ruby-коде, который работает на виртуальной машине (в отличие от собственных двоичных файлов, сгенерированных из C).

Вы хотите удивить своего босса знаниями в области компьютерных наук, узнать о машинах Тьюринга и алгоритмах Маркова.

2 голосов
/ 30 декабря 2010

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

Я предлагаю вам сделать несколько значимых проектов на C, затем один или два на диалекте Ассемблера,может быть для микроконтроллера или специализирующихся на SSE / MMX.

1 голос
/ 31 декабря 2010

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

1 голос
/ 30 декабря 2010

«Реальное программирование» работает одинаково на всех языках, и это то, о чем вам стоит по-настоящему беспокоиться.Тем не менее, проработка чего-то в C является очень полезным упражнением /

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

Обучение ASM, конечно, также полезно, но, вероятно, его не используют, если вы хотите применить его к своей работе.Это может научить вас нескольким полезным концепциям или, по крайней мере, помочь вам лучше понять, как работает CLR (или вообще, как компиляция байт-кода и код, скомпилированный байт-кодом, делают свое дело).Возможно, вы могли бы попробовать изучить ASM для более старой / более простой платформы;вокруг все еще есть тяжелая сцена Atari 2600, и из-за ограничений, присущих платформе, некоторые из хаков, которые они делают, чтобы выжать некоторые дополнительные функции в игре, довольно круты.Современная архитектура x86_64 довольно сложная и несколько волосатая, хотя это скорее личное мнение, чем факт.Научиться использовать микроконтроллер также можно, выполняя работу, но имейте в виду, что многие (большинство?) Используют архитектуру Гарварда (то есть отдельную программу и память данных), которая отличается от архитектуры типичного универсального ЦП.

1 голос
/ 30 декабря 2010

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

C и Assembler не лучшие языки, если вы хотите изучать информатику. Как вы знаете, Ruby и C #, я думаю, вы знаете некоторую ориентацию объекта.

1 голос
/ 30 декабря 2010

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

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

1 голос
/ 30 декабря 2010

Не думаю, что знание Ассемблера сделает вас лучшим программистом на Ruby / C #.

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

Изучение синтаксиса «нового» языка не поможет вам получить больше знаний о глубине программирования.

0 голосов
/ 28 октября 2013

Ну, «настоящее программирование» не относится к конкретному языку или языкам низкого уровня.На мой взгляд, «реальное программирование» - это процесс анализа задачи, выбора наилучшего способа ее решения, введения этого метода в ряд простых шагов, а затем пересмотра и редактирования по мере необходимости, пока вы не достигнете своей цели.Исходя из этого, язык не имеет большого значения, все это в процессе мышления.Кроме того, нет ничего плохого в языках высокого уровня, я все время использую python и люблю его.Тем не менее, изучение языков низкого уровня действительно может помочь в разработке ваших программ понимания и компьютеров в целом.предложил бы c, потому что именно отсюда вытекают c # и c ++, и послужил бы основой для понимания обоих этих языков.

...