Sujet / théorie le plus difficile en informatique? [fermé]


17

Quelle est la matière / théorie CS la plus difficile que vous ayez étudiée mais importante pour le domaine? Et la raison s'il vous plait?


3
Je pense que cela dépend en grande partie de la personne qui apprend le sujet et de la personne qui l'enseigne
Mahmoud Hossam

Réponses:


37

"Il y a 2 problèmes difficiles en informatique: les erreurs de mise en cache, de nommage et off-by-1"


4
J'ajouterais du filetage ...
Carra

35

Honnêtement, la construction du compilateur!


13
+1 Les compilateurs ont été les plus difficiles et les plus gratifiants.
dietbuddha

3
C'était là-haut avec le plus de travail et une bonne préparation pour le codage grognement, mais je ne pense pas que ce soit si difficile. Peut-être plus difficile sans utiliser YACC ou les outils que nous avons utilisés, je ne sais pas.
Peter Turner

4
Les compilateurs ne sont vraiment difficiles que parce que la plupart des théories datent de périodes de contraintes matérielles incroyablement sévères et une grande partie de l'instruction formelle n'a pas avancé trop loin. Jetez un œil à Let's Build A Compiler pour voir à quel point l'écriture par le compilateur peut être facile si vous l'abordez sous un angle différent.
Mason Wheeler

1
@Martin York, en tant qu'écrivain de compilateur, je pense que la complexité de l'implémentation des compilateurs est surestimée sérieusement. En général, un compilateur est beaucoup plus simple qu'un interprète. Je soupçonne que c'est un Dragon Book et son genre est à blâmer, ils proposent les façons les plus compliquées de faire des choses simples et prêtent trop d'attention à l'étape la moins importante, à savoir l'analyse.
SK-logic

1
@Martin York, il existe des techniques pour maintenir un AST aussi simple et maintenable que possible, quelle que soit la complexité du langage source. Il existe également un certain nombre de techniques très simples mais puissantes pour garder chaque étape de la compilation triviale et isolée.
SK-logic

22

Conception et analyse d'algorithmes

Je pense que cette question dépend de l'enseignant que vous avez eu et de la façon dont cette matière a été organisée dans votre carrière.

L'analyse d'algorithmes peut être aussi difficile que quelqu'un le souhaite. Prenez en compte qu'il y a des problèmes non résolus, et pas seulement: des problèmes qui ne peuvent pas être résolus.

Le fait est que vous pouvez avoir un problème, et si vous savez qu'il ne peut pas être résolu, c'est parfait. Et si vous ne le faites pas? Vous pouvez passer beaucoup de temps à essayer de démontrer qu'il est NP-Complete ou à trouver une solution temporelle polynomiale pour le résoudre.

Démontrer la complétude NP n'est pas facile. Oui, beaucoup de problèmes sont connus, mais le problème est de trouver les réductions pour démontrer que c'est NP-Complete. Et si vous passez beaucoup d'heures / jours / mois à essayer de le démontrer, et que cela peut être résolu en temps polynomial? :)

Il y a aussi d'autres sujets, comme les compilateurs , la théorie de groupe et les fonctions récursives primitives qui peuvent être aussi difficiles que le plan du sujet ou le professeur le veut;)


1
s / Analisis / Analyse ... sinon exactement ce que je pense ... fonctions récursives primitives, uargh !!
Felix Dombek

D'accord, je me suis embrouillé dans mon baccalauréat sans être confiant d'avoir jamais réussi à `` prouver '' quoi que ce soit (bien que mon cours d'algorithmes était beaucoup trop simple, à cause du professeur)
Peter Turner

Je vais vous montrer ces jours-ci à quel point les algorithmes peuvent être difficiles :)
Oscar Mederos

18

Reconnaissance de formes, c'est-à-dire intelligence artificielle. Cela fait référence à l'informatique intelligente ainsi qu'à d'autres outils de reconnaissance de formes tels que la reconnaissance optique de caractères, la voix au texte, l'identification faciale, etc.

Beaucoup des choses "sympas" que vous pouvez faire ou souhaiteriez faire avec les ordinateurs s'appuient sur ces algorithmes, et nous essayons de les perfectionner depuis des décennies sans grand succès.


C'est difficile parce que ce n'est pas quelque chose de déterministe. Développer une bonne reconnaissance de modèle d'IA nécessite une expérimentation pour chaque application pour laquelle vous souhaitez l'utiliser, pour vous assurer de choisir le bon algorithme, les bonnes fonctionnalités, etc ...
Ken Bloom

1
Je commence tout juste à gravir cette montagne particulière (reconnaissance des formes). C'est dur. BEAUCOUP de mathématiques. Grands, énormes tas de maths intimidants, me fixant, osant entrer.
David Poole

eh bien ... la reconnaissance de modèle peut également être considérée comme des statistiques appliquées, ce n'est pas seulement un problème dans la plage de CS
aggietech

12

Mon choix est la théorie de la calculabilité

(Hmm ... peut-être que ce n'est pas si important, mais c'était sûr difficile)


2
Je suis d'accord et je le généraliserais personnellement en en.wikipedia.org/wiki/Theory_of_computation .
Matt H

Je conviens que la théorie du calcul était difficile, mais c'était aussi l'un de mes sujets préférés. Certes, je faisais une double spécialisation en mathématiques ...
Poindexter

+1 J'ai aussi une double majoration. Je pourrais gérer une introduction à ce genre de choses, mais la version diplômée ... content que je l'ai laissé tomber!
Job

c'était dur, nous n'en savons pas tellement que ça n'a pas beaucoup d'importance.
Afficher le nom le


7

théorie des catégories (mathématiques discrètes), mais ça vaut le coup


Quels avantages spécifiques avez-vous retirés de l'apprentissage de la théorie des catégories?
zvrba

@zvrba: une compréhension plus approfondie des techniques d'abstraction et de la cartographie des problèmes
Steven A. Lowe

D'où l'avez-vous appris?
zvrba

@zvrba: Je ne vois pas le livre sur ma bibliothèque, il est probablement toujours en stockage (remodelage) mais je pense que c'était ce livre amazon.com/Category-Computer-Scientists-Foundations-Computing/…
Steven A. Lowe

6

Cryptographie

Si vous le faites un peu mal, cela pourrait coûter des millions à une entreprise.


Bien que de plus en plus populaire, Crypto n'est pas unique aux logiciels.
JBRWilkinson

La crypto n'est pas si difficile. Le problème est que la sécurité ne peut pas être testée facilement, donc vous ne remarquez vos erreurs que lorsque quelqu'un vous pirate. Mais le manque de testabilité s'applique à la plupart des formes de sécurité informatique, pas seulement à la cryptographie.
CodesInChaos

4

Systèmes d'exploitation, en particulier la partie qui a quelque chose à voir avec le filetage.

Et la raison n'est pas parce qu'il était si difficile de faire manger de la pizza à la fourchette par 5 philosophes. La raison en est que l'écriture de code multithread est en soi difficile et pas nécessairement facile à calculer pour l'esprit humain (au moins masculin - selon ma femme).


9
Laissez votre femme écrire le code multithread alors :)

3
N'oubliez pas qu'en matière de multithreading à mémoire partagée, l'ordinateur est un porc sournois qui est là pour vous attraper. Doublement ainsi lorsqu'il s'agit d'un processeur multicœur; un noyau peut vous distraire devant vos yeux là où vous regardez, et l'autre peut alors passer derrière vous et vous poignarder dans le dos.
Donal Fellows

3

Moi aussi, je vote pour Compiler Design. Surtout là où la partie DFA et NFA entre en jeu. Je ne suis pas aussi clair sur les problèmes NP et autres.


Ouais, j'aurais eu plus de mal avec les compilateurs si je n'avais pas pris la théorie du calcul en premier.
Peter Turner

Les DFA et NFA sont des aliments pour poulets. Attendez d'avoir à analyser LALR (1).
David Thornley

3

Théorie des files d'attente

Eh bien, techniquement, c'est une branche des mathématiques, mais elle est très pertinente en CS.

Presque tout dans CS est basé sur des files d'attente (visibles (évidentes) et invisibles (pas si évidentes ou implicites)).

Au début de CS, les files d'attente étaient évidentes.
Une file d'attente de programmes (chacun programme un jeu de cartes).

De nos jours, les files d'attente ne sont pas si évidentes. Internet par exemple: un réseau à commutation de paquets, mais les paquets forment des files d'attente et le routage des paquets est une forme de minimisation des files d'attente.


Hey! (? Êtes-vous un (programmeur Lisp)
Mark C

Non (Autant que (On pourrait (voir), Mais (Cela a été (connu)). Pour arriver)).
Martin York

3

Analyse numérique

Ce n'est pas trop difficile avec les problèmes de jouets qui vous sont donnés dans le cours, mais une fois que vous commencez à considérer de vrais problèmes, cela se transforme en corvée grave.


2

Interpréter les exigences du client lorsque le client ne sait pas vraiment ce qu'il veut. Ce n'est pas enseigné au collège et c'est l'une des compétences les plus essentielles à posséder.


1
Je ne suis pas sûr d'être d'accord avec celui-ci comme étant un concept informatique. Je ne vois pas non plus comment cela peut être résolu en utilisant la méthode scientifique.
jmort253

@ jmort253 - C'est vrai, mais l'informatique essaie (sans succès à mon avis) d'étudier ce domaine avec des méthodes formelles de conception et de validation.
mouviciel

Je suis d'accord n'est pas un concept "informatique" - mais quand j'ai commencé ma carrière, je n'étais pas conscient / inconscient du fait que les clients ne savent pas ce qu'ils veulent. Je pensais que TOUS les projets logiciels étaient livrés avec une sorte de document d'exigences formelles. Peut-être un sujet de conférence pour un cours de génie logiciel (peut-être que mon collège ne l'a pas couvert)?
Steven Striga

1

Personnellement, le mien était Formal Logic. C'était difficile de commencer, mais une fois que vous avez établi les règles et que vous avez réussi à jouer suffisamment avec, votre cerveau s'en vaLogic++; , ce qui en développement est une très bonne chose.

En guise de note complémentaire, je réponds directement à la question - ce n'était certainement pas le sujet le plus difficile lorsque j'ai obtenu mon diplôme, mais c'était probablement le sujet le plus difficile "applicable dans la vie réelle".


La logique formelle est quelque chose avec laquelle j'ai eu une relation amour / haine. J'ai aimé réfléchir à travers les concepts, mais je n'ai jamais pu comprendre comment cela m'aidait plus tard lorsque j'ai rencontré des problèmes du monde réel qui nécessitaient une réflexion logique.
jmort253

@ jmort253 - C'était vraiment la même chose pour moi. J'ai même eu du mal au point de penser que j'allais échouer, j'ai étudié si longtemps et durement jusqu'à ce qu'il clique enfin dans ma tête. Après cela, les avantages ont été incroyables.
Kyle Rozendo

1

Constructions du compilateur. Difficile mais doit comprendre les concepts derrière


5
Vous devriez voter pour la même réponse qui vous a été fournie, plutôt que de répéter la même réponse.
Abimaran Kugathasan

1

Conception du noyau n'importe qui? Eh bien, je ne sais pas vraiment comment cela se fait et quelles sont les fonctionnalités ciblées pour un système d'exploitation, mais pour moi, penser à la conception d'un noyau doit être une tâche intimidante.

Je pense aussi à la sécurité informatique ; Je ne sais pas vraiment ce qui rend un système dangereux, sauf bien sûr, les débordements de tampon évidents, les injections XSS et SQL.

Je ne suis pas sûr, mais il semble que certains algorithmes soient également dangereux; regardez le projet MetaSploit, il répertorie tous les types et types de violations de sécurité: vous pouvez voir qu'il existe de nombreuses façons dont un programme peut être défectueux.


1

Il existe de nombreux sujets délicats dans le domaine, mais mes choix pour une difficulté persistante sont ceux impliquant les propriétés du système global . Voici des exemples de ce sujet général:

  • Multi-threading sûr et sans blocage
  • Sécurité

Ce sont difficiles parce que vous recherchez quelque chose qui n'existe que lorsque tout est correct; vous avez besoin d'une propriété système globale et pourtant pratiquement tous les outils disponibles (et tous ceux qui s'adaptent aux problèmes réels de mon expérience) ne font vraiment que du raisonnement local. C'est le processus de passer du raisonnement sur les morceaux du programme à l'ensemble du shebang qui est difficile, en particulier parce qu'il est tout à fait possible d'avoir des morceaux qui sont tous corrects en eux-mêmes mais où il y a encore des bogues subtils parce que les composants sont mal organisés; les bogues peuvent être des caractéristiques émergentes indésirables…


0

Services d'information sur la gestion Pendant ma période collégiale, j'avais un sujet de gestion par semestre, ce qui me rendait complètement fou.
Dure! les sujets comme Compiler Design , OS Design etc. sont difficiles mais ils sont vraiment intéressants et stimulants. J'ai vraiment gâché des sujets comme le système / les services d'information de gestion, etc., car ils sont pleins d'ennui et vous devez passer par beaucoup de théorie.


2
Plein d'ennui parce qu'ils parlent des subtilités conceptuelles de chaque système, tandis que la moitié des gens n'ont jamais écrit de système eux-mêmes (mais ils en ont sûrement utilisé une variété). En outre, les séminaires utilisent autant de mots chargés mais ne fournissent pas un exemple réel en anglais simple. Comme les systèmes d'aide à la décision ... ne pourriez-vous pas simplement déposer quelques captures d'écran des rapports Google Analytics, FML, juste pour mettre les étudiants sur la même page avant de vous lancer dans un orgasme intellectuel devant le public.
Filip Dupanović

0

Si vous travaillez en C / C ++, les pointeurs sont le concept le plus important à connaître. Mais d'une manière ou d'une autre, je ne l'ai jamais entièrement compris à l'université.


12
vraiment? Je veux dire, chaque personne est différente, mais je pense qu'il y a beaucoup (je veux dire, beaucoup ) de sujets plus difficiles que de simples pointeurs . Par exemple, Computer's Architecture , Assambler qui sont en quelque sorte liés à des pointeurs ;)
Oscar Mederos

Certes, mais vous trouverez la compréhension du référencement de la mémoire via les assembleurs beaucoup plus facile, car vous travaillez en fait avec des pointeurs bruts , tandis qu'en C / C ++, vous travaillez avec des références à des pointeurs, ce qui confond tout le monde, car l'abstraction n'est jamais parlée ouvertement sur.
Filip Dupanović

2
Ah assambler, le meilleur thé du programmeur
Matt Ellen

Le gars a posé des sujets difficiles mais importants, d'où des pointeurs.
Manoj R

@Matt: Vous venez de faire ma journée: D @Manoj R: Les pointeurs sont triviaux si vous les considérez simplement comme un accès au tableau. Ou l'accès à la baie est-il difficile?
back2dos

0

Conception et analyse d'algorithmes. Ce n'est pas tant qu'il est difficile de comprendre et d'analyser des algorithmes connus , c'est que la conception et l'analyse de nouveaux algorithmes pour des problèmes difficiles sont difficiles, et nécessitent une large compréhension de nombreux domaines et une pratique dans l'application de nombreuses techniques différentes.


0

Programmation par contraintes. qui traite des problèmes combinatoires, des problèmes NP-complets.



0

Quelle est la matière / théorie CS la plus difficile que vous ayez étudiée mais importante pour le domaine?

Mathématiques discrètes.

C'était difficile parce que les théories sont très peu reliées entre elles mais elles sont utilisées dans CS. Trop de mémorisation je suppose ...

Preuve par induction, Big O, récursion, division et conquête, Théorie des graphes, bla bla .. argh!

Pour moi, le compilateur était facile, car nous devions prendre la théorie des automates. ^^


0

Notation Z / méthodes formelles utilisées pour me faire mal au cerveau à l'université. Principalement parce que je détestais ça. Difficile est beaucoup plus facile lorsque vous aimez ce que vous faites et beaucoup plus difficile lorsque vous ne le faites pas.


0

J'aime vos réponses (et je n'ai pas oublié de les voter), comme le compilateur, le noyau, etc., mais la plupart des programmeurs n'ont jamais rencontré ces problèmes. Il y a un problème un peu plus facile, mais plus courant: concurrence - threads, verrouillage. Il est très facile d'écrire un programme qui produit des erreurs magiques, si nous faisons même un petit bogue dans l'architecture de concurrence.

Donc, je dis, ce n'est pas le problème le plus difficile en informatique, mais parce qu'il est couramment utilisé, il est dangereux.


0

Programmation orientée objet

C'est probablement parce que je me suis coupé les dents sur FORTRAN et APL, mais le passage des langages strictement procéduraux aux objets est une chose avec laquelle je me bats depuis des années. Cela n'aide pas que les soi-disant «experts» écrivent des articles et des didacticiels contradictoires sur ce que signifie être orienté objet et les meilleures / bonnes façons de construire des programmes orientés objet.

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.