Стоит ли изучать C, чтобы глубже понять операционные системы и компьютеры в целом? - PullRequest
8 голосов
/ 29 июня 2009

В настоящее время я работаю разработчиком Actionscript 3 и Php. Я начал изучать Php, затем перешел к Actionscript 3, и теперь я изучаю Python. Эти 3 языка являются языками высокого уровня, и ни в одном из них вам не нужно беспокоиться о низкоуровневом управлении памятью и таких вещах, как знание, какой тип данных использовать для разных чисел.

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

Так что мой вопрос к вам довольно прост. Буду ли я получать пользу от изучения C, даже если я не собираюсь работать с ним в своей сфере деятельности?

Ответы [ 18 ]

0 голосов
/ 30 июня 2009

Я также разработчик Actionscript 3 (с некоторыми добавленными Python). Learning C - это текущий проект. Я немного погрузился в Objective-C и отправил свое первое приложение в AppStore, но мне нужно более низкое понимание того, что я делаю. Я не очень заинтересован в написании компилятора или взломе ядра Linux, но по сути все, к чему я прикасаюсь, - это C / C ++ в основе, так что я думаю, что стоит потратить мое время, чтобы хотя бы получить поверхностное понимание языка.

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

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

0 голосов
/ 29 июня 2009

Например, я даже не знаю, что такое переполнение стека [... ...] и почему это происходит.

Всякий раз, когда одна функция вызывает другую, компьютер должен помнить, где при выполнении вызывающей стороны это было. Эта информация хранится в стеке: вызов функции выдвигает новую запись, говорящую «вернитесь к $ HERE, когда закончите», тогда как при возврате из функции выскакивает адрес возврата и возвращается туда (или, скорее, следующая вещь после вызова функции только что вернувшийся из).

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

Смотри также http://en.wikipedia.org/wiki/Stack_overflow

0 голосов
/ 29 июня 2009

Как и другие отмечали, изучение чего-то нового всегда стоит.

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

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

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

0 голосов
/ 29 июня 2009

Это постоянный вопрос, и многие темы были пролиты на эту тему. Ответ: да.

  • Даже если вы не используете его изо дня в день, знание низкого уровня работы компьютера всегда будет полезным.

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

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

C также довольно прост, поэтому его легче выучить, чем обычно. C книга K & R компактна по причине. Многие языки, такие как Python, Lua или Tcl, могут включать модули, написанные на C - это часто хороший способ разработки системы.

Итак, поскольку эта дискуссия, кажется, всегда разрешается: да. Изучите C. В этом вы увидите много преимуществ.

0 голосов
/ 29 июня 2009

Ответ тоже прост: да, вы бы.

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

Если вам это нравится, дерзайте!

0 голосов
/ 30 июня 2009

Мой ответ: возможно. Эти вопросы могут помочь вам решить:

  1. Вы должны решить жестко математические задачи, связанные с численные методы (исчисление, линейный алгебра, diff-eq, конечный элемент анализ и т. д.) Многие из лучших библиотеки написаны на C, и понимание того, как реализовать эти алгоритмы на другом языке будут потребовать от вас понимания C, чтобы вы мог бы перевести их.
  2. Вам нужно разработать компактные данные структуры, которые не тратят память? мой опыт в C позволил мне создать классы коллекции и строки в Java, которая использовала гораздо меньше памяти, чем стандартные классы, представленные в Библиотека J2SE.
  3. Вам нужен интерфейс с наследием Приложения? Многие написаны на С или C ++.

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

0 голосов
/ 03 июля 2009

Большую часть времени вы счастливы, зная, как что-то сделать. Но вы в конечном итоге получите, как и почему. Когда вы спрашиваете, почему вы что-то делаете, C часто может дать вам ответ из-за его низкого уровня. Конечно, любой другой «сырой» язык даст вам такие же ответы. Под сырым я подразумеваю язык, который позволяет вам иметь прямой доступ к компьютеру, а не скрывать его под множеством уровней и классов API.

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

0 голосов
/ 29 июня 2009

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

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

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

Проверьте эту ссылку.

P.S. Для лучшего понимания переполнения стека проверьте ответ Джонатана и обратитесь к симпатичному изображению sackoverflow.com в верхней части сайта.

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