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


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: Вчися, як підеш, ось так я і зробив. Навчання з математичної сторони, ІМХО - бас-аванс.
Coder

8

Коментар SomeKittens є правильним щодо грошей: Вам потрібна обчислення та лінійна алгебра, оскільки ці курси змінюють ваш погляд та спосіб розуміння світу. Лінійна алгебра стосується відображення з одного домену в інший; числення обчислює поведінку функцій. Вони самі є потужними інструментами, але методи, які ви вивчаєте, вивчаючи ці поля, також стають частиною вашої ментальної картини світу.

Також вам потрібні ці курси, оскільки люди очікують, що ви зможете думати в цих термінах. Я не часто бачу, як мої колеги беруть похідне від многочлена на своїх білих дошках, але часто бачу ескізи функцій з дотичною, намальованою в якійсь цікавій точці, або область під кривою затінена. Ми недостатньо дбаємо про фактичні значення, щоб заважати їх обчислювати, але розуміння того, як змінюються значення, є важливим, і це частина щоденних розмов.

Будь-яка ступінь бакалавра з інформатики вимагатиме обчислення, лінійної алгебри, статистики, логіки та інших математичних курсів не тому, що програмістам потрібно застосовувати методи безпосередньо на регулярній основі (хоча вони можуть, залежно від того, що вони роблять), а тому, що вам це потрібно знання для розуміння матеріалу, який надходить пізніше.


2
Якби я міг би схвалити це не раз,
Містер Міндор

Хоч і корисна відповідь, але не відповідає на питання. Наприклад, я прийшов сюди, тому що нещодавно я робив хакерство на драйвер r600g для розваги, а також зацікавлений у покращенні математичного фону, який є слабким. Було б дуже приємно знайти ідею втілити в драйвер, що вимагає розширення моїх математичних знань, бажано, щось із абстрактної алгебри, топології, але не обов'язково обмежуватися цим. Купа запитів на кшталт "математика розвитку драйверів" не придумала жодного паперу, ця сторінка є найближчою, яку я міг отримати.
Привіт-Ангел

@ Привіт-Ангел Я не згоден. Він може не відповісти на питання так, як ви очікували, і може не відповісти на ваше окреме питання "над чим я можу працювати над тим, щоб вдосконалити свої математичні навички", але я стверджую, що розширена математика корисна системному програмісту головним чином, оскільки вона змінюється Ваша перспектива і забезпечує глибше розуміння. Графічні програмісти фактично використовують обчислення та лінійну алгебру регулярно, а системні програмісти - не так. Але розуміння цих тем все ще важливо.
Калеб

6

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

Я, звичайно, думаю, числення та лінійна алгебра загалом варто вивчити - я хлопець з математики! І, як зазначають інші відповіді, є деяка непряма актуальність, оскільки аналіз продуктивності та розробка алгоритмів можуть використовувати розширену математику. Однак я не думаю, що програмування систем більше не залежить від тих видів математики, ніж більшість інших полів, які, як правило, не вважаються математичними.


Коли-небудь бачили GPU? :) Це трохи математично, особливо. писати драйвери для цього ... але це правда: якщо ви застрягли, ви завжди можете використовувати math.stackexchange.com :))
Aadaam

Я теж хлопець з комп'ютерної графіки; Я нагадую це зауваження! І ви маєте рацію: кожен, хто хоче написати драйвер відеокарти, повинен розуміти комп’ютерну графіку (і лінійну алгебру та основне обчислення, що тягне за собою), а також системне програмування.
прийдешній шторм

Наскільки я бачу, потрібно знати тригонометрію та лінійну алгебру, щоб зробити щось корисне з графічного API, але не реалізовувати цей API у графічному драйвері. Там ви здебільшого займаєтесь переключенням купівлі регістрів на основі запитів додатків. Єдине місце, де можна застосувати математику в графічному драйвері, я можу собі уявити, це оптимізація його компілятора. Виправте мене, якщо я помиляюся - я хочу бути. Я насправді прийшов сюди, тому що хочу покращити свій математичний досвід, а також роблю невеликий злом на r600g, і було б непогано поєднувати обидва.
Привіт-Ангел

4

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


⁺¹ для дискретної оптимізації, здається, цікавою та пов’язаною.
Привіт-Ангел

1

Ваше визначення системного програмування досить добре відповідає відповіді у Вікіпедії.

Якщо ви думаєте про те, що це забезпечує - тобто. програмний інтерфейс до апаратного забезпечення, тоді він починає мати сенс, чому обчислення та лінійна алгебра - це корисні навички.

Абстрагуючись від того, що інтерфейс низького рівня вимагає, щоб ви зрозуміли, як працює пристрій. Електронні пристрої все ще пов'язані законами фізики. Обчислення та лінійна алгебра - це засіб моделювання поведінки пристрою. Моделювання пристрою дозволяє надати послугу в її функціональність.

Зважаючи на це, ці два поля не є остаточним для системного програмування. Я знаю досить багато ЕЕ, які не справились добре з численням і лінійною алгеброю, але все ще можуть пояснити, що пристрій робить досить лаконічно.


Правильне чи неправильне визначення системного програмування?
Віктор

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 показує відсутні піксель? я щось неправильно зробив, втілюючи Бресенхама ? Чи може це бути просто помилкою в тестовій конструкції, яка не належним чином враховує помилки округлення?

Існує тенденція, коли CS у кожному університеті, який я знаю, відокремлюється від математичних факультетів. Я думаю, що це дуже розумний хід. Більше того, студенти CS вважають, що вони можуть з'ясувати рішення, використовуючи існуючі рішення. Хороший студент CS прочитав документ на контейнері, побачив би O (нічого), відкрив вікіпедію, побачив графік і вирішив, чи відповідає контейнер. Це займе 2 хвилини, як і перевірка вимог щодо перенавчання та параметрів для деяких викликів функції API. І, IMHO, профілер майже завжди є кращим рішенням, ніж теоретична математика.
Кодер

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