L’informatique se résume-t-elle au codage ? Si non, qu’apprend-on réellement en informatique à l’université ?


Non. Malheureusement, cette idée fausse est courante.

En réalité, pendant la première ou les deux premières années, vous apprendrez probablement surtout à coder. Mais ce n'est qu'un prétexte pour les véritables sujets d'informatique. Malheureusement, l'informatique, contrairement à la plupart des domaines, n'a pas de cours de synthèse, donc la plupart des étudiants n'ont aucune idée de ce qu'est l'informatique jusqu'à ce qu'ils soient à mi-chemin de la majeure.


Mais je vais vous donner un aperçu :

Informatique classique
(ce sont des sujets que la plupart des universités couvrent sous une forme ou une autre)

  • Modèles théoriques de calcul - l'idée d'un ordinateur existait avant que les machines n'existent physiquement, et vous pouvez prouver mathématiquement les limites théoriques de différents types de modèles de calcul.
  • Architecture informatique - les modèles théoriques décrivent la fonctionnalité, mais pas la mise en œuvre physique, donc l'architecture informatique ajoute une couche physique aux modèles théoriques, et c'est là que vous entrez dans les composants physiques que vous mettez ensemble pour faire fonctionner un ordinateur.
  • Algorithmes et notions de calcul efficace - une fois que vous avez un modèle de calcul, qu'il soit théorique ou physique, vous voulez résoudre des problèmes avec l'ordinateur. Vous concevez des procédures pour l'ordinateur, appelées algorithmes, pour résoudre différents types de problèmes, et vous voulez pouvoir comparer différents algorithmes en termes d'efficacité. Vous apprendrez donc des méthodes formelles d'analyse et de comparaison de l'efficacité. Vous apprendrez également différentes stratégies de résolution de problèmes qui ont été utilisées dans la conception d'algorithmes.
  • Conception de systèmes - chaque algorithme peut être considéré comme une tâche spécifique pour résoudre un problème spécifique, mais nous voulons souvent que les ordinateurs ne se contentent pas d'une seule tâche, mais qu'ils soient un système complexe capable de gérer simultanément de nombreuses tâches. Vous découvrirez donc les principes de conception de systèmes qui ont été utilisés pour concevoir des systèmes aussi complexes. Plus précisément, la gestion des ressources est un sujet important. L'ordinateur dispose de ressources limitées - la RAM est une ressource, le système de fichiers est une ressource, l'écran est une ressource, même le CPU et le temps lui-même sont des ressources. Vous pouvez également avoir des garanties différentes pour différents types de tâches exécutées sur le système - certaines tâches sont critiques en termes de temps, certaines tâches ont priorité sur d'autres tâches, certaines tâches sont autorisées à échouer et d'autres doivent toujours réussir, etc. Alors comment gérer les ressources pour assurer les garanties souhaitées ? Ces principes sont généralement adressés aux étudiants en leur apprenant à construire un système d'exploitation comme UNIX, mais s'appliquent également à la construction d'autres types de systèmes comme les serveurs web et les bases de données.
  • Conception du réseau - une fois que vous avez un tas de systèmes, comment les faire communiquer entre eux ? Quel type de protocoles voulez-vous utiliser ? Comment gérez-vous la congestion sur le réseau ? Comment gérer les pertes d'informations et les retards ? Le réseau lui-même peut être considéré comme un système géant. Dans un certain sens, il s'agit donc d'une extension plus avancée de la conception de systèmes. Un réseau est un système où la communication est fondamentale pour la gestion des ressources, et où des tolérances supplémentaires doivent être faites pour les entités voyous du réseau qui ne se comportent pas comme elles sont censées le faire.
  • Conception et mise en œuvre d'un langage de programmation - Comment allez-vous concevoir un nouveau langage de programmation, et quelles caractéristiques voulez-vous qu'il ait ? Ensuite, comment créer un compilateur qui analyse ce langage et le traduit en quelque chose qu'une machine comprendrait ? Souvent, ce sujet sera divisé en deux cours distincts. Le premier cours se concentrera sur la manière dont les informaticiens classent et modélisent les langages de programmation, la théorie des langages de programmation. L'autre cours se concentrera sur la construction de compilateurs - essentiellement les techniques pour traduire un langage formel en un autre.
  • Intelligence artificielle - Dès le début de l'informatique, les premiers pionniers comme Alan Turing ont envisagé les ordinateurs comme des "machines pensantes". Et depuis cette époque, les informaticiens sont fascinés par l'idée de donner aux ordinateurs un comportement intelligent. Un cours d'IA traditionnel vous apprendrait certaines des techniques (probablement pas toutes) que les informaticiens ont utilisées (avec plus ou moins de succès) pour produire ce que certaines personnes peuvent considérer comme un comportement intelligent. Bien sûr, la notion d'"intelligence" est très discutable, de sorte qu'un cours d'IA couvrirait également les différentes métriques et les critères que les informaticiens ont proposés pour évaluer l'intelligence artificielle.

Informatique moderne
(sujets que votre université peut ou non proposer, généralement en tant que cours facultatifs)

Les sujets répertoriés sous "Informatique classique" sont ceux qui ont été établis dans les années 60 et 70, lorsque les principales applications de l'informatique consistaient à construire des systèmes d'exploitation et des compilateurs. Depuis lors, les applications de l'informatique ont explosé en un nombre presque infini, ce qui a introduit de nombreux nouveaux sujets dans l'informatique. Certains de ces sujets s'appuient directement sur les principes des classiques, et d'autres sujets empruntent beaucoup de principes à d'autres domaines des mathématiques et des sciences.

Il est utile de souligner que si tous les nouveaux sujets de l'informatique introduits depuis les années 70 correspondent à une certaine application de l'informatique, l'inverse n'est pas vrai. Toutes les applications de l'informatique ne créent pas des sujets académiques légitimes en informatique.

Et dès que j'ai mentionné cela, cela ouvre une grande boîte de Pandore parce qu'il y a matière à débat sur ce qui est un sujet académique légitime en informatique et ce qui ne l'est pas. Je peux vous dire qu'un certain nombre des sujets que les autres réponses ont énumérés, je ne pense pas qu'ils devraient être considérés comme des sujets d'informatique, indépendamment du fait qu'un département CS quelque part les offre ou non.

Mais toute la raison d'ouvrir cette boîte de Pandore est que les étudiants confondent souvent l'informatique avec ses applications, et supposent que le but de l'informatique est de leur enseigner des applications spécifiques plutôt que les principes que ces applications exigent.

Par exemple, "Construire des traitements de texte" pourrait être une application de l'informatique, mais à peu près personne ne considérerait cela comme un sujet légitime pour inclure un programme d'informatique. Pour construire un traitement de texte, vous allez devoir utiliser beaucoup de principes de l'informatique classique, mais il n'y a pas de nouveaux principes spécifiques à la conception des traitements de texte à apprendre - du moins aucun que les universitaires aient étudié. Il ne s'agit donc pas d'un nouveau sujet, juste d'une application d'anciens sujets.

De même, je ne considérerais pas non plus le "développement Web" comme un véritable sujet d'informatique - malgré le fait que certains départements CS puissent proposer ce cours en raison de la demande populaire. Bien sûr, vous apprenez peut-être quelque chose de nouveau, puisque vous ne connaissiez peut-être pas HTML, JavaScript ou PHP avant de suivre le cours. Mais la raison pour laquelle ce cours ne passe pas le test de l'odeur, à mon avis, est qu'il ne s'agit pas d'un sujet où il est possible d'améliorer ce que vous apprenez. Si vous suivez un cours sur les systèmes d'exploitation, vous pourriez un jour trouver un moyen d'améliorer les principes de conception des systèmes que vous apprenez. C'est la base scientifique de l'informatique : tous les principes de résolution de problèmes que vous apprenez peuvent un jour être améliorés si quelqu'un propose de meilleures solutions. Mais avec le développement web, vous n'apprenez pas un nouveau principe scientifique - vous apprenez des langages arbitraires que quelqu'un d'autre a décidé que ce devait être le langage du web.

D'un autre côté, un cours de "Conception de systèmes d'information multimédia interactifs en réseau" pourrait être un sujet hypothétique légitime en informatique. La différence entre ce cours et le cours de "développement Web", c'est que si ce cours parlerait aussi du fonctionnement du World Wide Web, puisque c'est l'exemple le plus connu d'un tel système, ce n'est pas là que le cours s'arrête. C'est un sujet plus large et il y a de la place pour une enquête académique - le WWW est-il la meilleure façon de construire un système comme celui-ci, ou pourrait-il y avoir une meilleure façon ? Maintenant, vous pouvez l'examiner sous différents angles - économie sociale, théorie de la représentation de l'information, informatique virtuelle, etc. Et ces différentes perspectives vous donnent des principes de conception auxquels vous pouvez réfléchir.

En tout cas, voici d'autres sujets informatiques légitimes sur lesquels vous pourriez tomber : Apprentissage automatique, traitement du langage naturel, vision par ordinateur, robotique, rendu graphique, interaction homme-machine, systèmes de bases de données, cryptographie, sécurité informatique, biologie informatique, génie logiciel, systèmes de raisonnement automatisé, simulation, informatique quantique.

.