W jaki sposób rachunek różniczkowy i algebra liniowa mogą być przydatne dla programisty systemu? [Zamknięte]

10

Znalazłem stronę internetową z informacją, że rachunek programowy i algebra liniowa są niezbędne do programowania systemu.

Programowanie systemu, o ile mi wiadomo, dotyczy osdev, sterowników, narzędzi i tak dalej. Po prostu nie mogę zrozumieć, w jaki sposób rachunek różniczkowy i algebra liniowa mogą być w tym pomocne. Wiem, że rachunek różniczkowy ma kilka zastosowań w nauce, ale w tej konkretnej dziedzinie programowania po prostu nie wyobrażam sobie, jak rachunek różniczkowy może być tak ważny.

Informacje były na tej stronie: http://www.wikihow.com/Become-a-Programmer

Edycja: Niektóre odpowiedzi tutaj wyjaśniają złożoność algorytmu i optymalizację. Kiedy zadałem to pytanie, starałem się dokładniej określić obszar programowania systemu. Złożoność i optymalizacja algorytmu można zastosować do dowolnego obszaru programowania, nie tylko programowania systemu. Być może dlatego nie byłem w stanie wymyślić takiego myślenia w momencie pytania.

Zwycięzca
źródło
6
To nie tyle bezpośrednia aplikacja, co zmiana procesu myślenia.
SomeKittens
3
Nie zajmuję się dużo programowaniem systemu (ok - nie robię żadnego), ale wyobrażam sobie, że jeśli przeprowadzasz serię testów wydajności i chcesz przeprowadzić analizę statystyczną wyników, rachunek różniczkowy i algebra liniowa mogłyby wejść do gry. Mogą być również potrzebne podczas analizy złożoności algorytmów.
FrustratedWithFormsDesigner
2
@Telastyn: Naprawdę? To interesujące. Jak to działa?
FrustratedWithFormsDesigner
2
Czy możesz podać link do strony internetowej? Może dodać kontekst, który pomoże ci uzyskać bardziej szczegółową odpowiedź.
Caleb
2
@FrustratedWithFormsDesigner - analogia z wartości do wskaźnika jest jak wyprowadzenie. Zaczynasz od funkcji i uzyskujesz ją, aby uzyskać nową funkcję, która oznacza coś innego (int, który odnosi się raczej do adresu pamięci niż liczby). Możesz nawet uzyskać drugą pochodną (wskaźnik do wskaźnika), co oznacza trochę to samo, ale jest inne. Następnie, aby to cofnąć, musisz zintegrować (odrzucić wskaźnik), który ma pewne zastrzeżenia (utracona stała przy uzyskiwaniu funkcji w porównaniu do wycinania obiektów). Mam nadzieję, że to ma sens,
minęły

Odpowiedzi:

6

Wyobrażam sobie, że nie jest to bardzo ważne, jeśli piszesz narzędzia inne niż GUI na nowoczesnym systemie operacyjnym bez pracy z jego elementami wewnętrznymi. To chyba inna historia, jeśli pracujesz nad zmianą nowoczesnego systemu operacyjnego lub opracowaniem nowego.

Jeśli pracujesz ze sprzętem wideo lub systemem okienkowym bez systemu operacyjnego, będziesz potrzebować wiedzy o algebrze liniowej, aby skutecznie aktualizować grafikę. Nie szukałem siebie, ale założę się, że możesz znaleźć przykłady w kodzie źródłowym X, KDE i Gnome.

Jeśli pracujesz ze sprzętem w zakresie cyfrowego przetwarzania sygnałów, rachunek będzie bardzo ważny. Wyobrażam sobie, że istnieją urządzenia, które ciężko podnoszą za pomocą procesora systemu zamiast lokalnego mikroprocesora i często łączą się z analogowymi systemami elektrycznymi.

Również rachunek różniczkowy odgrywa ważną rolę w analizie wydajności, oprócz samej algebry liniowej, podczas próby dopasowania krzywej do danych.

Peter Smith
źródło
Nawet samo programowanie w trybie DirectX lub OpenGL będzie wymagało zrozumienia algebry liniowej.
Przypon
@Rig: Ucz się na bieżąco, tak to zrobiłem. Uczenie się od strony matematyki, IMHO, jest bas-ackwards.
Koder
8

Komentarz SomeKittens dotyczy pieniędzy: potrzebujesz rachunku różniczkowego i algebry liniowej, ponieważ te kursy zmieniają Twój sposób myślenia i sposób rozumienia świata. Algebra liniowa polega na mapowaniu z jednej domeny do drugiej; rachunek obejmuje zachowanie funkcji. Same w sobie są potężnymi narzędziami, ale techniki, których uczysz się podczas studiowania tych dziedzin, również stają się częścią twojego mentalnego obrazu świata.

Potrzebujesz również tych kursów, ponieważ ludzie będą oczekiwać, że będziesz w stanie myśleć w tych kategoriach. Często nie widzę, że moi koledzy biorą pochodną wielomianu na swoich białych tablicach, ale często widzę szkice funkcji ze styczną narysowaną w ciekawym punkcie lub obszar pod krzywą zacieniowany. Nie dbamy wystarczająco o rzeczywiste wartości, aby zawracać sobie głowę ich obliczaniem, ale zrozumienie, w jaki sposób wartości się zmieniają, jest niezbędne i jest częścią codziennych rozmów.

Każdy stopień licencjata informatyki będzie wymagał rachunku różniczkowego, algebry liniowej, statystyki, logiki i innych kursów matematycznych nie dlatego, że programiści muszą stosować techniki bezpośrednio regularnie (chociaż mogą, w zależności od tego, co robią), ale dlatego, że potrzebujesz tego wiedza pozwalająca zrozumieć materiał, który pojawi się później.

Caleb
źródło
2
Gdybym mógł to głosować więcej niż raz, zrobiłbym to.
Mr.Mindor,
Chociaż przydatna odpowiedź, ale nie odpowiada na pytanie. Np. Przyjechałem tutaj, ponieważ ostatnio hakowałem sterownik r600g dla zabawy, a także interesuję się poprawą matematyki, która jest słaba. Byłoby naprawdę miło znaleźć pomysł do zaimplementowania w sterowniku wymagający poszerzenia mojej wiedzy matematycznej, najlepiej czegoś z abstrakcyjnej algebry, topologii, ale niekoniecznie ograniczonej do. Kilka zapytań, takich jak „matematyka programowania sterowników”, nie wymyśliło ani jednego artykułu, ta strona jest najbliższa, jaką mogłem uzyskać.
Cześć Anioł
@ Hi-Angel Nie zgadzam się. To nie może odpowiedzieć na pytanie, w sposób oczekiwany i nie może odpowiedzieć na to oddzielny „co mogę pracować, aby poprawić swoje umiejętności matematycznych” pytanie, ale twierdzą, że zaawansowana matematyka jest przydatna do systemu programatora głównie na tym, że zmienia Twoja perspektywa i zapewnia głębsze zrozumienie. Programiści graficzni faktycznie używają rachunku różniczkowego i algebry liniowej regularnie, a programiści systemowi rzadziej. Ale zrozumienie tych tematów jest nadal ważne.
Caleb
6

Powiem, że nie sądzę, aby rachunek programowy lub algebra liniowa mogły być ważne dla programowania systemów.

Z pewnością uważam, że rachunku różniczkowego i algebry liniowej warto się uczyć w ogóle - jestem matematykiem! I, jak wskazują inne odpowiedzi, istnieje pewne pośrednie znaczenie, ponieważ analiza wydajności i projektowanie algorytmów mogą wykorzystywać zaawansowaną matematykę. Nie sądzę jednak, aby programowanie systemów było bardziej zależne od tego rodzaju matematyki niż większość innych dziedzin, które nie są ogólnie uważane za matematyczne.

nadchodząca burza
źródło
Widziałeś kiedyś GPU? :) To trochę matematyczne, szczególnie. napisać do niego sterowniki ... ale to prawda: jeśli utkniesz, zawsze możesz skorzystać z math.stackexchange.com :))
Aadaam
Jestem też facetem od grafiki komputerowej; Przypominam tę uwagę! I masz rację: każdy, kto chce napisać sterownik karty graficznej, musi zrozumieć grafikę komputerową (i związaną z tym algebrę liniową i podstawowy rachunek różniczkowy), a także programowanie systemów.
nadchodząca burza
O ile widzę, trzeba znać trygonometrię i algebrę liniową, aby zrobić coś użytecznego z graficznego API, ale nie implementować tego API w sterowniku graficznym. Tam najczęściej zajmujesz się przełączaniem wielu rejestrów na podstawie wniosków aplikacji. Jedyne miejsce do zastosowania matematyki w sterowniku graficznym, jakie mogę sobie wyobrazić, to optymalizacje kompilatora. Popraw mnie, jeśli się mylę - chcę być. Przyjechałem tutaj, ponieważ chcę poprawić moje matematyczne przygotowanie, a także trochę hakować na r600g, i fajnie byłoby połączyć oba te elementy.
Cześć Anioł
4

Podejrzewam, że to prawda wokół krawędzi. Programiści systemów muszą być znacznie bardziej zaniepokojeni wydajnością i niezawodnością, więc analiza algorytmów może być ważna, a rachunek jest czasem potrzebny do uzyskania dowodów analizy Big-Oh. Istotną rolę mogą odegrać takie tematy, jak teoria kolejkowania i optymalizacja dyskretna (czyli optymalizacja matematyczna, a nie optymalizacja kodu). Myślę jednak, że dotyczy to głównie osób pracujących nad najnowocześniejszymi systemami operacyjnymi i protokołami sieciowymi, a nie osób pracujących ze sterownikiem USB 3.0.

Charles E. Grant
źródło
For¹ dla dyskretnej optymalizacji wydaje się być interesujący i powiązany.
Cześć Anioł
1

Twoja definicja programowania systemów całkiem dobrze pasuje do odpowiedzi w Wikipedii.

Jeśli myślisz o tym, co zapewnia - tj. interfejs oprogramowania do sprzętu, wtedy zaczyna mieć sens, dlaczego rachunek różniczkowy i algebra liniowa są przydatnymi umiejętnościami.

Wyodrębnienie tego interfejsu niskiego poziomu wymaga zrozumienia sposobu działania urządzenia. Urządzenia elektroniczne są nadal związane prawami fizyki. Rachunek różniczkowy i algebra liniowa zapewniają środki do modelowania zachowania urządzenia. Modelowanie urządzenia pozwala zapewnić usługę pod kątem jego funkcjonalności.

To powiedziawszy, te dwa pola nie są ostatecznym celem programowania systemów. Znam sporo EE, które nie radziły sobie tak dobrze z rachunkiem i algebrą liniową, ale wciąż potrafią wyjaśnić, co urządzenie robi dość zwięźle.


źródło
Czy taka definicja programowania systemów jest dobra czy zła?
Victor
2
To niezbyt dokładne. Interfejs z procesorem wymaga jedynie znajomości dostarczonych instrukcji.
DeadMG
@DeadMG - Nie mogę się kłócić w przypadku procesora. Myślałem bardziej o surowym sprzęcie, takim jak akcelerometr lub bezpośredni interfejs IO. To powiedziawszy, większość z nich ma układ scalony zapewniający interfejs. Myślę, że moje komentarze są bardziej odpowiednie dla logiki układu, niż być może warstwy sterowników urządzeń.
1

Ogólna aplikacja internetowa i / lub programowanie administracyjne nie wymaga dużego zastosowania algebry liniowej lub rachunku różniczkowego, ale robi to wiele specjalistycznych dziedzin. Jeśli zajmujesz się geometrią, na pewno wpadniesz na algebrę liniową. Większość programowania fizyki dotyczy również algebry i rachunku różniczkowego. A także prawie wszystko, co ma związek z manipulacją falami, takie jak programowanie dźwięku i radio. Zasadniczo ważniejsze jest zrozumienie matematyki dyskretnej, która między innymi dotyczy teorii mnogości, teorii grafów i logiki formalnej (logicznej), która jest przydatna w wielu aplikacjach, takich jak zarządzanie informacjami, bazy danych i inne miejsca, w których łączą się dane i / lub logika . W przypadku programowania systemów nie widzę tak wielu aplikacji.

Na nie
źródło
2
Myślę, że możesz „przetrwać” bez użycia rachunku różniczkowego lub algebry liniowej w większości domen programistycznych. Jeśli jednak nie masz pojęcia o koncepcjach, zdziwiłbyś się, na ile różnych problemów możesz je zastosować. Pomiary i przewidywanie dryfu zegara, czasu podtrzymania baterii przychodzą na myśl rzeczy, które niedawno użyłem rachunku różniczkowego. Triangulacja i przewidywanie ścieżki obejmowały algebrę liniową dla problemu, nad którym pracowałem w zeszłym roku. Żaden z problemów nie wymagał użycia tych tematów jako poprzednich niezwykle skomplikowanych i złych metod przybliżania, które inni zastosowali, nie wykazał ...
Dunk
2
(ciąg dalszy) ... ale wykorzystanie bardziej zaawansowanej matematyki zapewniło o wiele bardziej zwięzłe i dokładne implementacje, które działały tak, jak powinny. IOW, rachunek różniczkowy i algebra liniowa są potężnymi narzędziami, gdy nauczysz się je stosować, a one pomogą ci wspiąć się na szczyt w porównaniu do większości innych programistów, ponieważ większość nie dbała o dostateczną matematykę w szkole. Dla mnie oznaczało to rozpoczęcie pracy nad naprawdę fajnymi projektami w porównaniu do przyziemności.
Dunk
0

Jak wspomnieli inni, wszelkie kursy matematyki na uniwersytecie mogą wyostrzyć Twoje umiejętności rozwiązywania problemów i rozumowania dedukcyjnego. Są ważne dla prawie każdego.

Ale czasem znajomość algebry liniowej może być pomocna, szczególnie w przypadku całkiem dobrych pomysłów biznesowych .

joshin4colours
źródło
0

Programowanie systemu, o ile mi wiadomo, dotyczy osdev, sterowników, narzędzi i tak dalej. Po prostu nie mogę zrozumieć, w jaki sposób rachunek różniczkowy i algebra liniowa mogą być w tym pomocne.

Z rachunkiem jest dość łatwe, gdy tylko przyjrzy się bliżej treści kursu . Jest ściśle związany ze złożonością algorytmu, notacją Big-O - takie rzeczy, dość fundamentalne w programowaniu.

Równania są tym, co otrzymujesz przy szacowaniu złożoności algorytmu. Trzypoziomowy zagnieżdżone pętle od 0celu Nsą N 3 , dwupoziomowe zagnieżdżone pętle są N 2 , jedno jest N. Ocena masz mógłby wyglądać (N 3 + 2 * N 2 + N) - to równanie.

Teraz, jeśli chcesz lepiej zrozumieć, jak szybko wydłuży się czas wykonania, gdy N wzrośnie, jest to ściśle związane z pochodnymi / różnicowaniem. Inne części rachunku, które mogą ci się przydać, to limity i analiza asymptotyczna - doprowadzą cię do zrozumienia notacji Big-O, lepszego punktowania podczas wywiadów programowych i być może lepszego programowania systemów.

  • Jesteś przypisany do tabeli alokacji plików projektu, jakiej struktury danych będziesz używać? Zakładając, że istnieje wiele małych plików, które są rzadko modyfikowane, co byłoby lepsze? Zakładając stosunkowo niewielką liczbę dużych plików, które zawsze są dołączane na końcu, czy zamierzasz używać tej samej struktury? Jak byś zdecydował?

Jeśli chodzi o algebrę liniową , tutaj aplikacje do programowania strzelają do ciebie od pierwszego zdjęcia.

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

Jeśli kiedykolwiek będziesz musiał poradzić sobie z grafiką rastrową (np. W sterownikach wideo), zdjęcia takie jak powyżej będą przychodzić do ciebie w najgorszych koszmarach.

  • Dlaczego ten test nr 12345 pokazuje brakujący piksel? czy zrobiłem coś złego wdrażając Bresenham ? czy może to być tylko błąd w projekcie testu, który nie uwzględnia prawidłowo błędów zaokrąglania?
komar
źródło
Istnieje trend, w którym CS na każdym uniwersytecie, który znam, oddziela się od wydziałów matematycznych. Myślę, że to bardzo mądry ruch. Ponadto uważa się, że studenci CS wymyślają rozwiązania z wykorzystaniem istniejących rozwiązań. Dobry student CS czytałby dokument na pojemniku, widziałby O (nsomething), otwierał wikipedię, oglądał wykres i decydował, czy pojemnik jest odpowiedni. Zajmie to 2 minuty, podobnie jak sprawdzenie wymagań i parametrów dla niektórych wywołań funkcji API. I IMHO, profiler jest prawie zawsze lepszym rozwiązaniem niż matematyka teoretyczna.
Koder
2
@Coder, oczywiście niektórzy studenci informatyki kończą na projektowaniu kontenerów i algorytmów. Dla nich matematyka i profiler są narzędziami uzupełniającymi: matematyka nie zapewni działającej implementacji, a profiler nie ostrzeże cię, że twoje dane testowe to tylko przypadek.
Charles E. Grant