Como o cálculo e a álgebra linear podem ser úteis para um programador de sistemas? [fechadas]

10

Eu encontrei um site dizendo que cálculo e álgebra linear são necessários para a programação do sistema.

A programação do sistema, tanto quanto eu sei, é sobre osdev, drivers, utilitários e assim por diante. Eu simplesmente não consigo descobrir como o cálculo e a álgebra linear podem ser úteis nisso. Sei que o cálculo tem várias aplicações na ciência, mas neste campo específico da programação não consigo imaginar como o cálculo pode ser tão importante.

As informações estavam neste site: http://www.wikihow.com/Become-a-Programmer

Edit: Algumas respostas aqui estão explicando sobre a complexidade e a otimização do algoritmo. Quando fiz essa pergunta, estava tentando ser mais específico sobre a área de Programação de Sistemas. A complexidade e a otimização do algoritmo podem ser aplicadas a qualquer área da programação, não apenas à Programação do Sistema. Talvez seja por isso que eu não tenha conseguido pensar nisso no momento da pergunta.

Vencedor
fonte
6
Não é tanto uma aplicação direta quanto mudar seu processo de pensamento.
SomeKittens
3
Não faço muita programação do sistema (ok - não faço nenhuma), mas imagino que se você estiver executando uma série de testes de desempenho e quiser fazer uma análise estatística dos resultados, o cálculo e a álgebra linear podem entre no jogo. Eles também podem ser necessários ao fazer análises de complexidade de algoritmos.
FrustratedWithFormsDesigner
2
@Telastyn: Sério? Isso é interessante. Como isso funciona?
FrustratedWithFormsDesigner
2
Você pode fornecer um link para o site? Pode adicionar um contexto que o ajudará a obter uma resposta mais específica.
22712 Caleb
2
@FrustratedWithFormsDesigner - A analogia é de um valor para um ponteiro é como derivação. Você começa com uma função e a deriva para obter uma nova função que significa outra coisa (um int que se refere a um endereço de memória e não a um número). Você pode até obter a segunda derivada (um ponteiro para um ponteiro) que significa quase a mesma coisa, mas é diferente. Então, para desfazer isso, é necessário integrar (desreferenciar o ponteiro), que possui algumas ressalvas (a constante perdida ao derivar uma função versus um objeto fatiado). Esperemos que isso faz sentido, tem sido as idades ...
Telastyn

Respostas:

6

Eu imagino que isso não é muito importante se você estiver escrevendo utilitários que não são da GUI em cima de um sistema operacional moderno sem trabalhar em seus componentes internos. Provavelmente é uma história diferente se você estiver trabalhando para alterar um sistema operacional moderno ou desenvolver um novo.

Se você estiver trabalhando com hardware de vídeo ou um sistema de janelas com metal nu, precisará de conhecimentos de álgebra linear para atualizar eficientemente os gráficos. Eu não me procurei, mas aposto que você pode encontrar exemplos no código fonte do X, KDE e Gnome.

Se você estiver trabalhando com hardware relacionado ao processamento de sinal digital, o cálculo será muito importante. Eu imagino que existem alguns dispositivos que realizam seu trabalho pesado com a CPU do sistema, em vez de um microprocessador local, e estes geralmente fazem interface com sistemas elétricos analógicos.

Além disso, o cálculo desempenha um papel importante na análise de desempenho, além de apenas álgebra linear ao tentar ajustar a curva aos dados.

Peter Smith
fonte
Mesmo apenas fazendo programação directx ou opengl exigirá algum entendimento de álgebra linear.
Rig
@ Rig: Aprenda como você vai, é assim que eu fiz. Aprender do lado da matemática, IMHO, é um reconhecimento acústico dos graves.
Coder
8

O comentário de SomeKittens está certo: você precisa de cálculo e álgebra linear porque esses cursos mudam a maneira como você pensa e a maneira como entende o mundo. Álgebra linear é tudo sobre o mapeamento de um domínio para outro; o cálculo cobre o modo como as funções se comportam. Eles mesmos são ferramentas poderosas, mas as técnicas que você aprende ao estudar esses campos também se tornam parte de sua imagem mental do mundo.

Você também precisa desses cursos, porque as pessoas esperam que você seja capaz de pensar nesses termos. Não costumo ver meus colegas tirando a derivada de um polinômio em seus quadros brancos, mas frequentemente vejo esboços de funções com a tangente desenhada em algum ponto interessante, ou a área sob a curva sombreada. Não nos importamos o suficiente com os valores reais para incomodá-los em calculá-los, mas entender como os valores mudam é essencial e faz parte das conversas diárias.

Qualquer graduação em ciência da computação exigirá cálculo, álgebra linear, estatística, lógica e outros cursos de matemática, não porque os programadores precisem aplicar as técnicas diretamente regularmente (embora possam, dependendo do que fazem), mas porque você precisa disso. conhecimento para entender o material que vem depois.

Caleb
fonte
2
Se eu pudesse aprovar isso mais de uma vez, faria.
Mr.Mindor
Embora seja uma resposta útil, mas não responde à pergunta. Por exemplo, vim para cá porque recentemente fiz hackers no driver r600g por diversão e também estou interessado em melhorar o histórico de matemática, que é fraco. Seria muito bom encontrar uma idéia para implementar no driver que requer estender meus conhecimentos de matemática, de preferência algo fora da álgebra abstrata, topologia, mas não necessariamente limitado a. Um monte de consultas como "matemática do desenvolvimento de drivers" não foi apresentada em um único artigo; esta página é a mais próxima que pude chegar.
Hi-Angel
@ Oi-Angel, eu discordo. Pode não responder à pergunta da maneira que você esperava, e pode não responder à sua pergunta separada "em que posso trabalhar para melhorar minhas habilidades matemáticas", mas afirmo que a matemática avançada é útil para um programador de sistemas principalmente porque muda sua perspectiva e fornece uma compreensão mais profunda. Os programadores gráficos, na verdade, usam cálculo e álgebra linear regularmente; os programadores de sistemas, menos. Mas entender esses tópicos ainda é importante.
Caleb
6

Vou seguir em frente e dizer que não acho que cálculo ou álgebra linear sejam importantes para a programação de sistemas.

Eu certamente acho que cálculo e álgebra linear valem a pena aprender em geral - eu sou um cara de matemática! E, como outras respostas apontam, há alguma relevância indireta, pois a análise de desempenho e o design de algoritmos podem usar matemática avançada. No entanto, não acho que a programação de sistemas seja mais dependente desses tipos de matemática do que a maioria dos outros campos que geralmente não são considerados matemáticos.

tempestade
fonte
Já viu uma GPU? :) É um pouco matemático, esp. aos condutores de escrita para ele ... mas é verdade: Se você está preso, você sempre pode usar math.stackexchange.com :))
Aadaam
Eu também sou um cara de computação gráfica; Eu me pareço com esse comentário! E você está certo: quem quer escrever um driver de placa gráfica precisa entender a computação gráfica (e a álgebra linear e o cálculo básico), bem como a programação de sistemas.
26712 Comestorm
Tanto quanto eu posso ver, é preciso conhecer trigonometria e álgebra linear para fazer algo útil com a API gráfica, mas não para implementar essa API em um driver gráfico. Lá você lida principalmente com a alternância de vários registros com base em solicitações de aplicativos. O único lugar para aplicar a matemática no driver gráfico que posso imaginar são as otimizações para seu compilador. Me corrija se eu estiver errado - eu quero estar. Na verdade, eu vim aqui porque quero melhorar meus conhecimentos de matemática e também faço pouco hacking no r600g, e seria bom combinar os dois.
Hi-Angel
4

Eu suspeito que é verdade nas bordas. Os programadores de sistemas precisam estar muito mais preocupados com desempenho e confiabilidade, de modo que a análise de algoritmos pode ser importante, e às vezes é necessário cálculo para provas da análise Big-Oh. Assuntos como teoria das filas e otimização discreta (otimização matemática, não otimização de código) também podem desempenhar um papel. No entanto, acho que isso se aplicaria principalmente às pessoas que trabalham no limite dos sistemas operacionais e protocolos de rede, e não tanto à pessoa que trabalha no driver USB 3.0.

Charles E. Grant
fonte
⁺¹ para otimização discreta, parece ser interessante e relacionado.
Hi-Angel
1

Sua definição de programação de sistemas está muito bem alinhada com a resposta na Wikipedia.

Se você pensa sobre o que está fornecendo - ie. como uma interface de software para hardware, começa a fazer sentido por que cálculo e álgebra linear são habilidades úteis.

Abstrair essa interface de baixo nível requer que você entenda como o dispositivo opera. Os dispositivos eletrônicos ainda estão sujeitos às leis da física. O cálculo e a álgebra linear fornecem um meio para modelar o comportamento do dispositivo. A modelagem do dispositivo permite fornecer um serviço em sua funcionalidade.

Dito isto, esses dois campos não são o ponto final para a Programação de Sistemas. Conheço alguns EE que não se saíram tão bem com cálculo e álgebra linear, mas ainda podem explicar o que o dispositivo está fazendo de maneira bastante sucinta.


fonte
Essa definição de programação de sistemas está certa ou errada?
213 Victor Victor
2
Isso não é muito preciso. A interface com uma CPU requer apenas o conhecimento das instruções fornecidas.
26412 DeadMG
@DeadMG - Não posso discutir no caso de uma CPU. Eu estava pensando mais nos termos do hardware bruto, como um acelerômetro ou uma interface IO direta. Dito isto, a maioria deles tem algum tipo de chip para fornecer a interface. Eu acho que meus comentários são mais apropriados para a lógica dentro do chip do que talvez a camada do driver de dispositivo.
1

Aplicações gerais da Web e / ou programação administrativa não envolvem muita aplicação de álgebra linear ou cálculo, mas muitos campos especializados o fazem. Se você lida com geometria, certamente encontrará álgebra linear. A maioria dos programas de física também lida com álgebra e cálculo. Assim como qualquer outra coisa relacionada à manipulação de formas de onda, como programação de som e rádio. Em geral, é mais importante entender matemática discreta que, entre outras coisas, lida com teoria dos conjuntos, teoria dos grafos e lógica formal (booleana), que é útil em muitas aplicações como gerenciamento de informações, bancos de dados e outros locais onde dados e / ou lógica combinam . No caso da programação de sistemas, não vejo muitas aplicações.

Onno
fonte
2
Eu acho que você pode "conviver" sem nunca usar cálculo ou álgebra linear na maioria dos domínios de programação. No entanto, se você se sentir confortável com os conceitos, ficará surpreso com quantos problemas diferentes poderá aplicá-los. Medindo e prevendo o desvio do relógio, o tempo de manutenção da bateria vem à mente das coisas que eu usei recentemente no cálculo. A triangulação e a previsão de caminho envolviam álgebra linear para um problema em que trabalhei no ano passado. Nenhum dos problemas necessário usar esses tópicos como os métodos de aproximação pobres extremamente complicado e anteriores que outros usaram demonstrado ...
Dunk
2
(cont.) ... mas o uso da matemática mais avançada resultou em implementações muito mais sucintas e precisas que funcionavam como deveriam. IOW, cálculo e álgebra linear são ferramentas poderosas depois que você aprender a aplicá-las e elas o ajudarão a subir ao topo em comparação com quase todos os outros programadores, já que a maioria não se importou em aprender matemática suficientemente enquanto estava na escola. Para mim, isso significou começar a trabalhar em projetos muito legais versus o mundano.
217 Dunk
0

Como outros já mencionaram, qualquer curso de matemática na universidade pode aprimorar suas habilidades de resolução de problemas e raciocínio dedutivo. Estes são importantes para quase qualquer um.

Às vezes, porém, conhecer alguma álgebra linear pode ser útil, principalmente para algumas boas idéias de negócios .

joshin4colours
fonte
0

A programação do sistema, tanto quanto eu sei, é sobre osdev, drivers, utilitários e assim por diante. Eu simplesmente não consigo descobrir como o cálculo e a álgebra linear podem ser úteis nisso.

Com o cálculo, é muito fácil, assim que se olha mais de perto o conteúdo do curso . Está intimamente relacionado à complexidade do algoritmo, à notação Big-O - coisas assim, bastante fundamentais na programação.

Equações são o que você obtém ao estimar a complexidade do algoritmo. Os loops aninhados em três níveis de 0a Nsão N 3 , os loops aninhados em dois níveis são N 2 , um é N. A avaliação que você pode obter pode ser (N 3 + 2 * N 2 + N) - essa é uma equação.

Agora, se você quiser entender melhor a rapidez com que o tempo de execução aumentará quando N aumentar, isso está intimamente relacionado a derivadas / diferenciação. Outras partes do cálculo que você pode achar úteis são os limites e a análise assintótica - isso o levará a entender a notação Big-O, a uma melhor pontuação nas entrevistas de programação e, possivelmente, a uma melhor programação de sistemas.

  • Você está designado para criar a tabela de alocação de arquivos. Que estrutura de dados você usará? Supondo que existem muitos arquivos pequenos que raramente são modificados, o que seria preferível? Supondo que uma quantidade relativamente pequena de arquivos grandes que sempre são anexados ao final, você usará a mesma estrutura? Como você decidiria?

Quanto à Álgebra Linear , aqui os aplicativos de programação atiram em você desde a primeira imagem.

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

Se você precisar lidar com gráficos raster (por exemplo, em drivers de vídeo), as imagens acima aparecerão nos seus piores pesadelos.

  • Como é que o teste nº 12345 mostra o pixel ausente? fiz algo errado ao implementar Bresenham ? poderia ser apenas um erro no projeto de teste não contabilizar adequadamente os erros de arredondamento?
mosquito
fonte
Há uma tendência em que o CS em todas as universidades que conheço está se separando dos departamentos de matemática. Eu acho que é uma jogada muito inteligente. Além disso, acredita-se que os alunos de CS descubram soluções usando as soluções existentes. Um bom aluno de CS leria um documento no contêiner, veria um O (algo), abriria a wikipedia, ver o gráfico e decidiria se o contêiner é apropriado. Isso levaria 2 minutos, assim como verificar a reentrada e os requisitos de parâmetro para algumas chamadas de função da API. E, IMHO, um criador de perfil é quase sempre uma solução melhor do que a matemática teórica.
Coder
2
@ Codificador, é claro que alguns estudantes de ciência da computação acabam sendo os que precisam projetar os contêineres e algoritmos em primeiro lugar. Para eles, a matemática e o criador de perfil são ferramentas complementares: a matemática não fornece uma implementação funcional e o criador de perfil não avisa que seus dados de teste são apenas um acaso.
26812 Charles E. Grant