Comment le calcul et l'algèbre linéaire peuvent-ils être utiles à un programmeur système? [fermé]


10

J'ai trouvé un site Web disant que le calcul et l'algèbre linéaire sont nécessaires pour la programmation système.

Pour autant que je sache, la programmation système concerne osdev, les pilotes, les utilitaires, etc. Je n'arrive pas à comprendre comment le calcul et l'algèbre linéaire peuvent être utiles à cet égard. Je sais que le calcul a plusieurs applications en science, mais dans ce domaine particulier de la programmation, je ne peux tout simplement pas imaginer à quel point le calcul peut être si important.

Les informations étaient sur ce site: http://www.wikihow.com/Become-a-Programmer

Edit: Certaines réponses ici expliquent la complexité et l'optimisation de l'algorithme. Lorsque j'ai posé cette question, j'essayais d'être plus précis sur le domaine de la programmation du système. La complexité et l'optimisation des algorithmes peuvent être appliquées à n'importe quel domaine de la programmation, pas seulement à la programmation du système. C'est peut-être la raison pour laquelle je n'ai pas pu formuler une telle réflexion au moment de la question.


6
Ce n'est pas tant l'application directe que la modification de votre processus de pensée.
SomeKittens

3
Je ne fais pas beaucoup de programmation système (ok - je n'en fais pas), mais j'imagine que si vous exécutez une série de tests de performances et que vous voulez faire une analyse statistique des résultats, le calcul et l'algèbre linéaire pourraient entrer en jeu. Ils peuvent également être nécessaires lors de l'analyse de la complexité des algorithmes.
FrustratedWithFormsDesigner

2
@Telastyn: Vraiment? C'est intéressant. Comment ça marche?
FrustratedWithFormsDesigner

2
Pouvez-vous fournir un lien vers le site Web? Cela peut ajouter un contexte qui vous aidera à obtenir une réponse plus spécifique.
Caleb

2
@FrustratedWithFormsDesigner - L'analogie d'une valeur à un pointeur est comme une dérivation. Vous commencez avec une fonction et la dérivez pour obtenir une nouvelle fonction qui signifie autre chose (un int qui se réfère à une adresse mémoire plutôt qu'à un nombre). Vous pouvez même obtenir la dérivée seconde (un pointeur vers un pointeur) qui signifie un peu la même chose mais qui est différente. Ensuite, pour annuler cela, vous devez intégrer (déréférencer le pointeur), qui a quelques mises en garde (la constante perdue lors de la dérivation d'une fonction vs le découpage d'un objet). J'espère que cela a du sens, ça fait des siècles ...
Telastyn

Réponses:


6

J'imagine que ce n'est pas très important si vous écrivez des utilitaires non GUI au-dessus d'un système d'exploitation moderne sans travailler sur ses composants internes. C'est probablement une autre histoire si vous travaillez à changer un système d'exploitation moderne ou à en développer un nouveau.

Si vous travaillez avec du matériel vidéo ou un système de fenêtrage en métal nu, vous aurez besoin de connaissances en algèbre linéaire pour mettre à jour efficacement les graphiques. Je ne me suis pas regardé, mais je parie que vous pouvez trouver des exemples dans le code source de X, KDE et Gnome.

Si vous travaillez avec du matériel concernant le traitement numérique du signal, le calcul sera très important. J'imagine qu'il y a des appareils qui font leur gros travail avec le processeur du système au lieu d'un microprocesseur local et ceux-ci s'interfacent souvent avec des systèmes électriques analogiques.

Le calcul joue également un rôle important dans l'analyse des performances en plus de l'algèbre linéaire lors de la tentative d'ajustement de la courbe aux données.


Même juste faire de la programmation directx ou opengl nécessitera une certaine compréhension de l'algèbre linéaire.
Rig

@Rig: Apprenez au fur et à mesure, c'est comme ça que je l'ai fait. Apprendre du côté des mathématiques, à mon humble avis, est bass-ackwards.
Coder

8

Le commentaire de SomeKittens est juste sur l'argent: vous avez besoin de calcul et d'algèbre linéaire parce que ces cours changent la façon dont vous pensez et la façon dont vous comprenez le monde. L'algèbre linéaire consiste à mapper d'un domaine à un autre; le calcul couvre le comportement des fonctions. Ce sont eux-mêmes de puissants outils, mais les techniques que vous apprenez en étudiant ces domaines font également partie de votre image mentale du monde.

Vous avez également besoin de ces cours parce que les gens s'attendront à ce que vous puissiez penser en ces termes. Je ne vois pas souvent mes collègues prendre la dérivée d'un polynôme sur leurs tableaux blancs, mais je vois souvent des croquis de fonctions avec la tangente dessinée à un point intéressant, ou la zone sous la courbe ombrée. Nous ne nous soucions pas suffisamment des valeurs réelles pour prendre la peine de les calculer, mais il est essentiel de comprendre comment les valeurs changent et cela fait partie des conversations quotidiennes.

Tout diplôme de premier cycle en informatique nécessitera du calcul, de l'algèbre linéaire, des statistiques, de la logique et d'autres cours de mathématiques non pas parce que les programmeurs doivent appliquer les techniques directement et régulièrement (bien qu'ils puissent, selon ce qu'ils font), mais parce que vous en avez besoin connaissances pour comprendre le matériel qui vient plus tard.


2
Si je pouvais voter plus d'une fois, je le ferais.
Mr.Mindor

Bien qu'une réponse utile, mais ne répond pas à la question. Par exemple, je suis venu ici parce que je faisais récemment du piratage sur le pilote r600g pour le plaisir et je suis également intéressé à améliorer les connaissances en mathématiques, ce qui est faible. Ce serait vraiment bien de trouver une idée à implémenter dans le pilote nécessitant d'étendre mes connaissances en mathématiques, de préférence quelque chose hors de l'algèbre abstraite, de la topologie, mais pas nécessairement limité à. Un tas de requêtes telles que "mathématiques de développement des pilotes" n'ont pas abouti à un seul document, cette page est la plus proche que j'ai pu obtenir.
Hi-Angel

@ Salut Angel, je ne suis pas d'accord. Il peut ne pas répondre à la question de la manière que vous attendiez et ne pas répondre à votre question distincte «sur quoi puis-je travailler pour améliorer mes compétences en mathématiques», mais je soutiens que les mathématiques avancées sont utiles à un programmeur système principalement en ce qu'elles changent votre point de vue et offre une compréhension plus profonde. Les programmeurs graphiques utilisent régulièrement le calcul et l'algèbre linéaire, les programmeurs système le sont moins. Mais la compréhension de ces sujets est toujours importante.
Caleb

6

Je vais continuer et dire que je ne pense pas que le calcul ou l'algèbre linéaire soient susceptibles d'être importants pour la programmation des systèmes.

Je pense certainement que le calcul et l'algèbre linéaire valent la peine d'être appris en général - je suis un mathématicien! Et, comme le soulignent d'autres réponses, il existe une pertinence indirecte, car l'analyse des performances et la conception d'algorithmes peuvent utiliser des mathématiques avancées. Cependant, je ne pense pas que la programmation système soit plus dépendante de ces types de mathématiques que la plupart des autres domaines qui ne sont généralement pas considérés comme mathématiques.


Avez-vous déjà vu un GPU? :) C'est un peu mathématique, en particulier. d'écrire des pilotes pour ça ... mais c'est vrai: si vous êtes coincé, vous pouvez toujours utiliser math.stackexchange.com :))
Aadaam

Je suis aussi un infographiste; Je ressemble à cette remarque! Et vous avez raison: quiconque souhaite écrire un pilote de carte graphique doit comprendre l'infographie (et l'algèbre linéaire et le calcul de base qui en découlent) ainsi que la programmation des systèmes.
comingstorm

Pour autant que je puisse voir, il faut connaître la trigonométrie et l'algèbre linéaire pour faire quelque chose d'utile à partir de l'API graphique, mais pas pour implémenter cette API dans un pilote graphique. Là, vous vous occupez principalement de la commutation d'un tas de registres en fonction des demandes d'application. Le seul endroit où appliquer des mathématiques dans le pilote graphique que je peux imaginer sont les optimisations de son compilateur. Corrigez-moi si je me trompe - je veux l'être. En fait, je suis venu ici parce que je veux améliorer mes connaissances en mathématiques et que je fais aussi peu de piratage sur r600g, et ce serait bien de combiner les deux.
Hi-Angel

4

Je soupçonne que c'est vrai sur les bords. Les programmeurs système doivent être beaucoup plus préoccupés par les performances et la fiabilité, donc l'analyse des algorithmes peut être importante, et le calcul est parfois nécessaire pour les preuves de l'analyse Big-Oh. Des sujets comme la théorie des files d'attente et l'optimisation discrète (c'est l'optimisation mathématique et non l'optimisation du code) peuvent également jouer un rôle. Cependant, je pense que cela s'appliquerait principalement aux personnes travaillant à la pointe des systèmes d'exploitation et des protocoles réseau, pas tellement à la personne travaillant sur le pilote USB 3.0.


⁺¹ pour l'optimisation discrète, semble être intéressant et lié.
Hi-Angel

1

Votre définition de la programmation des systèmes correspond assez bien à la réponse de Wikipedia.

Si vous pensez à ce qu'il offre - c'est-à-dire. une interface logicielle dans le matériel, alors il commence à comprendre pourquoi le calcul et l'algèbre linéaire sont des compétences pratiques à avoir.

Pour résumer cette interface de bas niveau, vous devez comprendre le fonctionnement de l'appareil. Les appareils électroniques sont toujours liés par les lois de la physique. Le calcul et l'algèbre linéaire fournissent un moyen de modéliser le comportement de l'appareil. La modélisation de l'appareil vous permet de fournir un service dans ses fonctionnalités.

Cela étant dit, ces deux domaines ne sont pas la clé de voûte de la programmation système. Je connais pas mal d'EE qui ne réussissaient pas aussi bien avec le calcul et l'algèbre linéaire, mais peuvent toujours expliquer ce que l'appareil fait assez succinctement.


Cette définition de la programmation système est-elle bonne ou mauvaise?
Victor

2
Ce n'est pas très précis. L'interfaçage avec un CPU ne nécessite que la connaissance des instructions fournies.
DeadMG

@DeadMG - Je ne peux pas discuter dans le cas d'un CPU. J'avais pensé plus aux termes du matériel brut comme un accéléromètre ou une interface IO directe. Cela étant dit, la plupart d'entre eux sont dotés d'une sorte de puce pour fournir l'interface. Je pense que mes commentaires sont plus appropriés pour la logique de la puce que peut-être la couche du pilote de périphérique.

1

Les applications Web générales et / ou la programmation administrative n'impliquent pas beaucoup d'application d'algèbre linéaire ou de calcul, mais de nombreux domaines spécialisés le font. Si vous traitez avec la géométrie, vous rencontrerez forcément l'algèbre linéaire. La plupart des programmes de physique traitent aussi bien de l'algèbre que du calcul. Ainsi qu'à peu près tout ce qui a à voir avec la manipulation des formes d'onde, comme la programmation sonore et radio. En général, il est plus important de comprendre les mathématiques discrètes qui, entre autres, traitent de la théorie des ensembles, de la théorie des graphes et de la logique formelle (booléenne) qui sont utiles dans de nombreuses applications comme la gestion de l'information, les bases de données et d'autres endroits où les données et / ou la logique se combinent . Dans le cas de la programmation de systèmes, je ne vois pas beaucoup d'applications.


2
Je pense que vous pouvez vous débrouiller sans jamais utiliser le calcul ou l'algèbre linéaire dans la plupart des domaines de programmation. Cependant, si vous êtes à l'aise avec les concepts, vous seriez surpris de voir combien de problèmes différents vous pouvez les appliquer. Mesurer et prévoir la dérive d'horloge, le temps de maintien en charge de la batterie me viennent à l'esprit des choses pour lesquelles je viens d'utiliser le calcul récemment. La triangulation et la prédiction de trajectoire impliquaient une algèbre linéaire pour un problème sur lequel j'avais travaillé l'année dernière. Aucun des problèmes requis par l'utilisation de ces sujets comme les méthodes d'approximation extrêmement compliquées et médiocres précédentes que d'autres ont utilisées n'a démontré ...
Dunk

2
(suite) ... mais l'utilisation des mathématiques les plus avancées a rendu les implémentations beaucoup plus succinctes et précises qui fonctionnaient comme elles étaient censées le faire. L'IOW, le calcul et l'algèbre linéaire sont des outils puissants une fois que vous apprenez à les appliquer et ils vous aideront à vous hisser au sommet par rapport à la plupart des autres programmeurs, car la plupart ne se souciaient pas d'apprendre suffisamment les mathématiques à l'école. Pour moi, cela a signifié se mettre au travail sur des projets vraiment cool par rapport au banal.
Dunk

0

Comme d'autres l'ont mentionné, tout cours de mathématiques à l'université peut affiner vos compétences en résolution de problèmes et en raisonnement déductif. Celles-ci sont importantes pour presque tout le monde.

Mais parfois, connaître une algèbre linéaire peut être utile, en particulier pour de très bonnes idées commerciales .


0

Pour autant que je sache, la programmation système concerne osdev, les pilotes, les utilitaires, etc. Je n'arrive pas à comprendre comment le calcul et l'algèbre linéaire peuvent être utiles à cet égard.

Avec le calcul, c'est assez facile, dès que l'on regarde de plus près le contenu du cours . Il est étroitement lié à la complexité de l'algorithme, à la notation Big-O - des trucs comme ça, assez fondamentaux en programmation.

Les équations sont ce que vous obtenez lorsque vous estimez la complexité d'un algorithme. Les boucles imbriquées à trois niveaux de 0à Nsont N 3 , les boucles imbriquées à deux niveaux sont N 2 , une est N. L'évaluation que vous obtenez pourrait ressembler à (N 3 + 2 * N 2 + N) - c'est une équation.

Maintenant, si vous voulez mieux comprendre la vitesse à laquelle le temps d'exécution augmentera lorsque N augmentera, cela est étroitement lié aux dérivés / différenciation. Les autres parties du calcul que vous pouvez trouver utiles sont les limites et l'analyse asymptotique - celles-ci vous conduiront à comprendre la notation Big-O, un meilleur score lors des entrevues de programmation et, éventuellement, une meilleure programmation des systèmes.

  • Vous êtes affecté à la table d'allocation des fichiers de conception, quelle structure de données allez-vous utiliser? En supposant qu'il existe de nombreux petits fichiers rarement modifiés, qu'est-ce qui serait préférable? En supposant une quantité relativement faible de gros fichiers qui sont toujours ajoutés à la fin, allez-vous utiliser la même structure? Comment décideriez-vous?

Quant à l'algèbre linéaire , ici les applications de programmation vous tirent dessus dès la première image.

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

Si jamais vous devez gérer des graphiques raster (par exemple dans des pilotes vidéo), des images comme ci-dessus vous arriveront dans vos pires cauchemars.

  • Comment se fait-il que le test # 12345 montre le pixel manquant? ai-je fait quelque chose de mal à implémenter Bresenham ? Serait-ce juste une erreur dans la conception du test qui ne tient pas correctement compte des erreurs d'arrondi?

Il y a une tendance où CS dans chaque université que je connais se sépare des départements de mathématiques. Je pense que c'est une décision très intelligente. De plus, les étudiants CS sont censés trouver des solutions à partir des solutions existantes. Un bon élève CS lirait un document sur le conteneur, verrait un O (quelque chose), ouvrirait le wikipedia, verrait le graphique et déciderait si le conteneur est approprié. Cela prendrait 2 minutes, tout comme la vérification des exigences de réentrance et de paramètres pour certains appels de fonction API. Et, à mon humble avis, un profileur est presque toujours une meilleure solution que les mathématiques théoriques.
Coder

2
@Coder, bien sûr, certains étudiants en informatique finissent par être ceux qui doivent concevoir les conteneurs et les algorithmes en premier lieu. Pour eux, les mathématiques et le profileur sont des outils complémentaires: les mathématiques ne fourniront pas une implémentation fonctionnelle et le profileur ne vous avertira pas que vos données de test ne sont qu'un coup de chance.
Charles E. Grant
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.