Как исчисление и линейная алгебра могут быть полезны системному программисту? [закрыто]


10

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

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

Информация была на этом сайте: http://www.wikihow.com/Become-a-Programmer

Изменить: Некоторые ответы здесь объясняют о сложности алгоритма и оптимизации. Когда я задавал этот вопрос, я пытался быть более конкретным в области системного программирования. Сложность и оптимизация алгоритма могут быть применены к любой области программирования, а не только к системному программированию. Возможно, поэтому я не смог придумать такое мышление во время вопроса.


6
Это не столько прямое применение, сколько изменение вашего мыслительного процесса.
SomeKittens

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

2
@Telastyn: Действительно? Это интересно. Как это работает?
FrustratedWithFormsDesigner

2
Можете ли вы предоставить ссылку на веб-сайт? Это может добавить некоторый контекст, который поможет вам получить более конкретный ответ.
Калеб

2
@FrustratedWithFormsDesigner - аналогия между значением и указателем похожа на вывод. Вы начинаете с функции и получаете ее, чтобы получить новую функцию, которая означает что-то еще (int, который ссылается на адрес памяти, а не на число). Вы даже можете получить вторую производную (указатель на указатель), которая означает то же самое, но отличается. Затем, чтобы отменить это, вам нужно интегрировать (разыменовать указатель), у которого есть некоторые предостережения (потерянная константа при получении функции от среза объекта). Надеюсь, это имеет смысл, это было веками ...
Теластин

Ответы:


6

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

Если вы работаете с видеооборудованием или оконной системой «голое железо», вам понадобятся знания линейной алгебры для эффективного обновления графики. Я сам не смотрел, но держу пари, что в исходном коде вы можете найти примеры для X, KDE и Gnome.

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

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


Даже простое программирование на DirectX или OpenGL потребует некоторого понимания линейной алгебры.
Rig

@Rig: Учиться, как вы идете, вот как я это сделал. Обучение со стороны математики, ИМХО, звучит басом.
Кодер

8

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

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

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


2
Если бы я мог сказать это несколько раз, я бы это сделал.
Мистер Миндор

Хотя полезный ответ, но не отвечает на вопрос. Например, я пришел сюда, потому что недавно занимался хакерством с драйвером r600g для развлечения, а также заинтересован в улучшении математического фона, который слаб. Было бы очень приятно найти идею для реализации в драйвере, требующую расширения моих знаний по математике, желательно из абстрактной алгебры, топологии, но не обязательно ограничиваясь ими. Куча запросов, таких как «математика разработки драйверов», не дали ни единой статьи, эта страница является самой близкой, которую я мог получить.
Привет, Ангел,

@ Привет, Ангел, я не согласен. Он может не отвечать на вопрос так, как вы ожидали, и может не отвечать на ваш отдельный вопрос «над чем я могу работать, чтобы улучшить свои математические навыки», но я утверждаю, что продвинутая математика полезна системному программисту главным образом в том смысле, что она изменяется ваша точка зрения и обеспечивает более глубокое понимание. Графические программисты фактически используют исчисление и линейную алгебру на регулярной основе, а системные программисты - реже. Но понимание этих тем все еще важно.
Калеб

6

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

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


Вы когда-нибудь видели графический процессор? :) Это немного математично, особенно. написать драйверы для него ... но это правда: если вы застряли, вы всегда можете использовать math.stackexchange.com :))
Aadaam

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

Насколько я вижу, нужно знать тригонометрию и линейную алгебру, чтобы делать что-то полезное из графического API, но не для реализации этого API в графическом драйвере. Там вы в основном имеете дело с переключением нескольких регистров на основе запросов приложений. Единственное место, где можно применить математику в графическом драйвере, - это оптимизация его компилятора. Поправь меня, если я ошибаюсь - хочу быть. Я действительно приехал сюда, потому что хочу улучшить свой математический фон, а также немного взломать R600G, и было бы неплохо объединить оба.
Привет, Ангел,

4

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


⁺¹ для дискретной оптимизации, кажется интересным и связанным.
Привет, Ангел,

1

Ваше определение системного программирования довольно хорошо согласуется с ответом в Википедии.

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

Абстрагирование от низкоуровневого интерфейса требует от вас понимания того, как работает устройство. Электронные устройства все еще связаны законами физики. Исчисление и линейная алгебра предоставляют средства для моделирования поведения устройства. Моделирование устройства позволяет вам предоставлять услуги в его функциональности.

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


Это определение системного программирования правильное или неправильное?
Виктор

2
Это не очень точно. Взаимодействие с процессором требует только знания предоставленных инструкций.
DeadMG

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

1

Общее веб-приложение и / или административное программирование не требует большого применения линейной алгебры или исчисления, но многие специализированные области делают это. Если вы имеете дело с геометрией, вы обязательно столкнетесь с линейной алгеброй. Большая часть программирования физики также имеет дело с алгеброй и исчислением. Как и все, что связано с манипуляциями с волнами, например, со звуком и радиопрограммами. В общем, более важно понимать дискретную математику, которая, помимо прочего, имеет дело с теорией множеств, теорией графов и формальной (логической) логикой, которая полезна во многих приложениях, таких как управление информацией, базы данных и другие места, где объединяются данные и / или логика , В случае системного программирования я не вижу так много приложений.


2
Я думаю, что вы можете «обойтись» без использования исчисления или линейной алгебры в большинстве областей программирования. Однако, если вы знакомы с концепциями, вы будете удивлены тем, как много разных проблем вы можете применить к ним. Измеряя и прогнозируя смещение часов, время работы от батареи приходит на ум из вещей, для которых я недавно использовал исчисление. Триангуляция и предсказание пути включали линейную алгебру для задачи, над которой я работал в прошлом году. Ни одна из проблем не требовала использования этих тем в качестве предыдущих чрезвычайно сложных и плохих методов аппроксимации, которые продемонстрировали другие ...
Данк

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

0

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

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


0

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

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

Уравнения - это то, что вы получаете при оценке сложности алгоритма. Три уровня вложенных циклов от 0до Nявляются N 3 , два уровня вложенных циклов являются N 2 , один N. Оценка вы получаете может выглядеть следующим образом (N 3 + 2 * N 2 + N) - это уравнение.

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

  • Вы назначены для разработки таблицы размещения файлов, какую структуру данных вы собираетесь использовать? Предполагая, что есть много небольших файлов, которые редко изменяются, что было бы предпочтительнее? Предполагая относительно небольшое количество больших файлов, которые всегда добавляются в конце, вы собираетесь использовать ту же структуру? Как бы вы решили?

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

http://pad1.whstatic.com/images/thumb/c/c4/LaTeX-2m.jpg/251px-LaTeX-2m.jpg

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

  • Почему этот тест # 12345 показывает отсутствующий пиксель? я сделал что-то не так, осуществляя Bresenham ? Может ли это быть просто ошибкой в ​​дизайне теста, который не учитывает ошибки округления?

Существует тенденция, когда CS в каждом известном мне университете отделяется от математических факультетов. Я думаю, что это очень умный ход. Кроме того, студенты CS, как думают, находят решения от использования существующих решений. Хороший студент CS должен прочитать документ на контейнере, увидеть O (что-нибудь), открыть википедию, увидеть график и решить, подходит ли контейнер. Это займет 2 минуты, точно так же, как проверка повторного входа и требований к параметрам для вызова некоторых функций API. И, ИМХО, профилировщик почти всегда является лучшим решением, чем теоретическая математика.
Кодер

2
@Coder, конечно, некоторые студенты, изучающие информатику, в конечном итоге должны разрабатывать контейнеры и алгоритмы. Для них математика и профилировщик являются дополнительными инструментами: математика не предоставит работающую реализацию, и профилировщик не предупредит вас, что ваши данные тестирования - просто случайность.
Чарльз Грант
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.