it-swarm.dev

Sujets CS qu'un étudiant de premier cycle doit connaître

Au collège, je n'ai jamais été intéressé par la théorie. Je ne l'ai jamais lu. Peu importe combien j'ai essayé, j'étais incapable de lire des trucs et je ne savais pas ce qui se passait réellement. Comme par exemple, dans mon cours sur la théorie des automates, mon professeur m'a dit tout ce qui pouvait être lié à l'aspect mathématique de celui-ci, mais pas une seule fois il n'a mentionné où il serait utilisé dans la pratique. C'est juste un exemple.

J'ai réussi à passer mon collège et j'ai également effectué un stage dans une entreprise, où j'ai fait un projet et heureusement, ils ne se sont pas souciés de mes notes, car elles étaient supérieures à la moyenne.

Maintenant, je suis intéressé à savoir quelles matières un étudiant CS doit absolument et positivement connaître? Sujets pouvant être pertinents dans l'industrie. C'est parce que j'ai du temps libre sur les mains et cela m'aiderait à mieux les comprendre.

Quelles sont vos suggestions? Comme pour un, les algorithmes sont un sujet.

34
Karl

Croyez-le ou non, l'une des choses qui s'est avérée d'une importance cruciale pour moi plus tard a été la construction du compilateur. Pas la version namby-pamby moderne utilisant Lex et Yacc, c'est pour les nuls.

VRAIE construction de compilateur où vous écrivez votre propre scanner et analyseur de symboles à partir de zéro.

C'est quelque chose que je pensais ne plus jamais utiliser. Mais au cours des 20 dernières années, ce cours a prouvé son poids en or 4 fois. Chaque processeur de commandes que j'ai dû écrire, chaque scanner de messages entrants, chaque répartiteur d'utilisateurs, chaque interpréteur de script, a utilisé les principes de ce cours. Faites-le de cette façon et la vie est douce, claire et simple. ET j'ai même donné toutes les informations à un collègue qui ne l'avait pas fait - il devait en fait écrire un compilateur pour une machine abstraite. Ce que je pourrais ajouter est devenu un grand succès commercial.

Si je devais monter et remercier un professeur de cours universitaire dans n'importe quel sujet, ce serait celui-là. Sans cela, je me serais débrouillé, mais mes solutions auraient été beaucoup plus laides.

(Et avant que quelqu'un se lève et dise "vous auriez pu utiliser Lex et yacc ...", la réponse est peut-être - cela dépend beaucoup du système. Dans certains cas, les langages de programmation n'étaient pas C (par exemple PL/M et Ada), dans certains cas, aucun Lex ou Yacc facilement disponible n'était disponible pour la plate-forme. Connaître les bases signifie qu'une solution est à portée de main au lieu de se tordre les mains en essayant de comprendre comment plier un outil pour s'adapter au problème.)

42
quickly_now
  1. Structures de données/algorithmes, en particulier graphiques. La quantité de situations réelles dans lesquelles j'ai réussi à utiliser des algorithmes liés aux graphes a été une surprise pour moi. Concentrez-vous sur la connaissance des caractéristiques du moment où une structure de données ou un algorithme est approprié. Être capable de voir un problème et savoir utiliser un algorithme de programmation dynamique/gourmand par exemple est important et peut vous faire gagner beaucoup de temps.

  2. Connaissance pratique de la complexité informatique. Vous n'avez pas besoin de savoir du haut de la tête ce qu'est la limite inférieure du tri radix, mais de savoir comment déterminer le temps d'exécution le plus défavorable de quelque chose que vous écrivez est important, en particulier pour les projets à performances critiques.

  3. O.S. concepts. Gestion de la mémoire, planificateurs, etc. Chaque développeur doit vraiment avoir une solide compréhension des systèmes d'exploitation étant donné que le code que vous écrivez interagit constamment avec lui.

  4. NetSec. J'ai rencontré très peu de développeurs qui ont une solide compréhension des problèmes de sécurité de base avec le développement (débordements de tampon, xss, SQLI, etc.). C'est vraiment un must si vous voulez réussir dans l'industrie. C'est génial si vous pouvez écrire la prochaine grande chose, mais vous n'aurez pas beaucoup d'utilisateurs si vous ne sécurisez pas leurs données.

  5. Paradigmes de programmation. Connaître les caractéristiques et les différences entre la programmation OO/fonctionnelle/procédurale. L'une des meilleures classes de premier cycle que j'ai jamais eue était d'écrire 20 interprètes simples pour le fortan, le schéma, le prologue, etc. dans les langues elles-mêmes. Juste l'exposition elle-même peut vraiment vous aider à comprendre les concepts fondamentaux du développement logiciel.

37
Kurtis

Satisfaire aux exigences d'obtention du diplôme n'est pas nécessairement suffisant pour être le meilleur informaticien possible. Pour un programme d'études collégial typique, voici les dix principales choses que vous devez être sûr d'apprendre:

  1. Les bases de l'économie - Un cours d'introduction couvrant des sujets tels que compléments et substituts est vital pour travailler dans la grande économie, ou tout simplement simplement le comprendre. Bien que le concept d'un Giffen Good ne vous aide pas nécessairement, connaître externalités le sera. Cela pourrait également vous aider à comprendre que plus de situations sont gagnant-gagnant que vous ne l'auriez imaginé.

  2. Comment rédiger une épreuve - Tous les majors en informatique devraient savoir rédiger une épreuve. Et les mathématiques discrètes, tout en faisant partie d'un petit-déjeuner bien équilibré, ne comptent pas. [L'induction n'est qu'une technique de preuve, et vous pouvez vous en tirer sans vraiment en savoir beaucoup sur les preuves.] Un cours d'algèbre ou d'analyse réelle est nécessaire pour vraiment écrire des preuves. Et par algèbre, je veux dire la théorie des groupes ou l'algèbre abstraite, pas le cours que vous avez suivi au lycée. Pour le plein bénéfice, prenez l'algèbre et l'analyse réelle dans le même terme.

    Pourquoi la rédaction de preuves est-elle essentielle? Parce que c'est de la programmation! Réfléchissez à la première fois que vous avez appris à programmer: si une tâche nécessitait un if et une boucle, vous n'aviez peut-être aucune intuition sur l'endroit où les mettre en relation les uns avec les autres. Mais maintenant, la même tâche semblerait tout à fait naturelle. La rédaction d'une épreuve est très similaire. Il y a un ensemble d'astuces que vous apprenez, et une fois que vous les apprenez, les choses sont très différentes.

  3. Comment écrire - Les compétences en communication écrite sont essentielles, que vous travailliez dans l'industrie ou le monde universitaire. Il est préférable de trouver un cours de mécanique et non un cours d’écriture portant effectivement sur un sujet différent. Autrement dit, de nombreuses écoles essaieront de rendre les cours d'écriture plus pertinents ou intéressants en faisant en sorte qu'il s'agisse d'un sujet spécial. Essayez d'aller pour la version "ennuyeuse" du cours.

  4. Probabilité et statistiques - Il y a certaines choses que vous ne comprendrez correctement qu'en suivant un cours. Avec les principales exigences de CS (qui devraient vous donner des mathématiques discrètes, un calcul à variable unique et à variables multiples et une algèbre linéaire) et une algèbre et/ou une analyse réelle, la collecte de statistiques vous donnera probablement une mineure en mathématiques. L'apprentissage des statistiques peut vous aider à travailler avec d'autres scientifiques sur leurs projets.

  5. Le sujet d'actualité - Au cours des décennies précédentes, il pourrait s'agir de bases de données ou de programmation orientée objet. Aujourd'hui, il peut s'agir d'une programmation Web ou d'une architecture orientée services. Quelle que soit la mode actuelle, assurez-vous de suivre un cours. Ne serait-ce que pour voir de quoi il s'agit.

  6. Le problème d'arrêt - La plupart des problèmes ne peuvent pas être résolus par les machines. C'est une idée assez profonde que notre culture a si bien absorbée qu'elle ne semble plus choquante. Il en va de même pour la radio, Goedel et la bombe atomique; ce n’est qu’après l’art postmoderne et la guerre froide que nous avons pu à nouveau faire face à ces concepts. Cependant, suivre un cours sur la théorie de la calculabilité peut vous sensibiliser à cette preuve assez étonnante.

  7. Programmation fonctionnelle pure - Vous n'entrerez probablement pas dans la programmation fonctionnelle pure, sauf si vous y effectuez des recherches ou travaillez pour quelques sociétés sélectionnées, mais sachant cela vous aidera à être un meilleur programmeur. La raison en est que vous apprendrez de nombreuses nouvelles formes d'abstraction, et des concepts comme les nombres et les continuations et les monades de l'Église et, oui, la récursivité, et ces outils peuvent être appliqués à votre prochain programme Java Java).

  8. P et NP - OK, celui-ci est déjà sur votre chemin critique, mais faites quand même attention. Vous voulez être sûr de pouvoir corriger quelqu'un quand il appelle incorrectement NP "non polynomial". Comme si!

  9. Les sujets du cours que vous détesterez certainement - Cela pourrait être un cours CS que vous trouvez trop bas, trop théorique ou un cours non CS que vous trouvez trop répréhensible, trop dur ou trop ennuyeux. Si un cours comme celui-ci semble être un problème pour vous et que vous vous retrouvez à expliquer aux autres pourquoi vous êtes si heureux de ne pas avoir à suivre telle ou telle chose, cela devrait vous dire que vous apprendrez beaucoup en suivant le cours! Peut-être que vous n'apprendrez pas le matériel du cours, mais vous en apprendrez davantage sur vos propres limites et peut-être plus sur les justifications que vous vous faites. [Indice: ils sont généralement faibles.]

  10. Le cours non-CS que vous êtes sûr d'aimer - Au final, vous devriez vous amuser. C'est le cours dont vous profiterez probablement le moins, mais suivez-le quand même. Faites-le une fois. Si vous adorez de nombreux cours, c'est bon pour vous, mais assurez-vous que cela ne gêne pas le reste des cours de cette liste.

Mon approche ici a été pratique, basée sur des cours que vous pouvez réellement suivre. Et je me suis concentré sur les objectifs d'apprentissage qui sont susceptibles d'être appris. Remarque: Cette réponse a été adaptée d'un article de mon blog sur Dix choses que chaque étudiant en informatique devrait apprendre .

21
Macneil

Après avoir parlé à quelques représentants de l'entreprise et amis qui ont eu de nombreuses interviews:

  • Bases de données
  • OOP
  • Des algorithmes
  • Structures de données

ont tendance à être "musts" pour les nouveaux employés (ou, comme ils l'ont dit, cours "hautement recommandés").

D'autres cours qui peuvent être utiles sont la sécurité informatique, l'assemblage et l'architecture des machines. Beaucoup de mes professeurs m'ont également recommandé un cours de compilation. De plus, si vous avez le temps, je recommanderais fortement des cours de mathématiques comme la théorie des graphes, les mathématiques discrètes et la combinatoire. Vous apprenez beaucoup de capacités de raisonnement dans ces classes sur lesquelles la plupart des cours CS passent sous silence, mais finissent par être très utiles lors de l'écriture de programmes très complexes.

J'espère que cela pourra aider!

8
K-RAN

Cela dépend en grande partie de ce que vous prévoyez de faire avec le diplôme. Il semble que la plupart des majors CS se retrouvent comme ingénieurs logiciels d'une sorte ou d'une autre. Dans cet esprit, je ne sais vraiment pas pourquoi plus de gens ne se spécialisent pas seulement en génie logiciel. Je soupçonne qu'il n'y a pas suffisamment de programmes de génie logiciel disponibles, en particulier dans les institutions publiques.

Je viens d'un arrière-plan encastré. Chaque personne avec qui je travaillais avait un diplôme d'EE ou de CE et c'est en partie parce que quand les "vieux" quand ils allaient à l'université, il n'y avait pas beaucoup de programmes de CE disponibles. Donc, il est assez évident que si vous voulez travailler dans le domaine intégré, une expérience matérielle est souhaitable.

Quel que soit le domaine dans lequel vous souhaitez travailler, je pense que chaque programmeur devrait suivre un cours d'assemblage de programmation. Vous ne pourrez peut-être jamais l'utiliser, mais il vous apprendra exactement ce qui se passe au niveau du processeur pendant un appel de fonction, comment les interruptions sont gérées, comment la mémoire est structurée ou comment les différents modes d'adressage sont utilisés. Je crois que toutes ces choses feront de vous un meilleur programmeur.

En outre, bien que cela ne soit pas apparent, certains sont tous des sujets importants lors de l'examen des structures de données et des algorithmes pour une plate-forme spécifique.

6
Pemdas

Il y a 2 façons de répondre à votre question. Permettez-moi d'essayer les deux. La première façon consiste à regarder les choses du point de vue potentiel du marché du travail, les compétences de codage, etc. Voici donc ma liste:

  1. Structure de données
  2. Analyse d'algorithme
  3. Programmation orientée objet
  4. Soit un cours spécifique en C++ ou Java
  5. Systèmes d'exploitation
  6. Design de l'interface utilisateur
  7. Programmation parallèle

La deuxième façon est de regarder les choses d'un point de vue un peu abstrait et qui sait peut-être aussi un peu philosophique. La liste qui suit ne possède peut-être pas les compétences les plus recherchées par le marché du travail, mais je suis à peu près sûr que lorsque vous sortirez de ces cours, vous aurez une meilleure compréhension de l'art de développer des logiciels.

  1. Langage fini et théorie des automates
  2. Construction du compilateur
  3. La théorie des graphes
  4. Intelligence artificielle
5
Fanatic23

J'ajouterais également le génie logiciel ou les pratiques de conception à la liste, bien que leur contenu soit généralement repris par les étudiants de l'industrie.

De plus, à mon avis (pas soutenu par beaucoup d'expérience cependant), les entreprises ne veulent pas vraiment la plupart des choses théoriques enseignées dans des cours comme les bases de données, etc., elles veulent que les gens comprennent et soient capables d'utiliser ces choses.

EDIT: En raison du downvote, j'ai envie d'expliquer ma réponse. Je suis un étudiant en dernière année d'informatique, et mon expérience est basée sur mon stage et des entretiens d'embauche avec des entreprises leaders dans le domaine. D'après mon expérience, les gens sont rarement tenus d'utiliser des algorithmes compliqués ou de coder des structures de données très compliquées dans les entretiens ou dans les emplois.

Plus utile si vous pouvez créer et utiliser des bases de données, utiliser le contrôle de code source, savoir comment déboguer correctement, savoir comment utiliser les modèles de conception, etc. Cependant, comme je l'ai dit, ces compétences sont généralement acquises dans l'industrie et non couvertes par les cours. Les pratiques de génie logiciel/conception impliquent généralement la construction d'un projet de taille moyenne, très utile pour l'apprentissage de toutes ces compétences.

2
apoorv020

Il existe de nombreux cours importants, selon la direction dans laquelle vous envisagez d'aller. Cependant, en supposant que vous puissiez programmer, le cours le plus important doit être:

  • Structures de données et algorithmes

    Pratiquement tout en informatique revient à gérer les données à l'aide d'algorithmes. Portez une attention particulière aux tableaux et aux tables de hachage, car ils sont de loin les structures de données les plus utiles couramment utilisées, mais les listes, les arbres et les graphiques (enfin, les listes sont des types d'arbres restreints et les arbres sont des types de graphiques restreints) vont être important aussi. De plus, la compréhension des algorithmes est vitale pour produire du code qui n'est pas terrible. (Sinon, vous ferez des choses terribles, comme utiliser un O (n3) algorithme où un O (n Journaln) on fera l'affaire.) Si votre diplôme CS n'a pas de cours obligatoire DS + A dessus, ce n'est pas CS. Ou génie logiciel. Ou même simplement la programmation.

Mis à part cela, le cours que j'ai trouvé le plus utile au fil des ans dans plusieurs domaines a été:

  • Concurrence

    Il existe de nombreux aspects de la concurrence, mais je m'attendrais à comprendre la différence entre la mémoire partagée et la transmission de messages. Je voudrais également qu'il y ait une forte couverture des stratégies de verrouillage (mutex, sémaphores, etc.) et des transactions.

    Ceci est essentiel pour comprendre la parallélisation, bien sûr, mais il est également essentiel pour tout ce qui est distribué (par exemple, écrire un service qui est exposé à Internet, même s'il est monothread puisque les clients seront de toute façon asynchrones). Je comprends qu'il est également utile pour écrire des jeux (qui sont généralement multithread) et travailler avec des appareils intégrés.

En dehors de cela, je pense qu'il est dans l'intérêt de la plupart des étudiants de premier cycle qu'ils soient exposés à autant d'idées différentes que possible. Beaucoup de langages de programmation et de paradigmes. Beaucoup de domaines d'application différents. Une quantité raisonnable de mathématiques (encore une fois, parce que c'est utile si souvent) et aussi une certaine exposition aux facteurs humains et à la psychologie (parce que tout logiciel qui interagit avec les utilisateurs traite avec les gens). Après tout, vous ne savez jamais exactement ce que vous allez faire à l'avenir, donc la planification de la flexibilité est une excellente stratégie de vie.

2
Donal Fellows

Des choses que j'ai apprises au collège et que j'utilise tous les jours:

  • Méthodologie de conception orientée objet
  • Modèles de conception
  • Expressions régulières
  • Algorithmes et analyse de base
  • Structures de données

Je souhaite avoir suivi un cours de base de données. (J'en ai ramassé assez pour me débrouiller depuis que j'ai obtenu mon diplôme, mais j'aimerais en savoir plus.) Je souhaite également que le contrôle de version soit enseigné - il est omniprésent, extrêmement utile et a été complètement ignoré dans le programme de mon école.

J'ai dû suivre plusieurs cours de mathématiques. Je n'ai pas utilisé de calcul depuis mon diplôme. Je souhaite avoir suivi un cours de statistiques. (Encore une fois, j'ai ramassé assez pour me débrouiller depuis l'obtention de mon diplôme, mais j'aurais aimé en savoir plus.)

Au-delà du département CS, suivez un cours d'écriture. De bonnes compétences en communication écrite sont essentielles pour réussir.

2
pwc

Quand j'étais au collège, il y avait pas mal de sujets pour lesquels je ne pouvais pas voir une utilisation dans ma vie réelle et parfois cette intuition a été prouvée (les méthodes formelles ne sont vraiment pratiques que pour des problèmes triviaux dans la plupart des cas) et d'autres fois, a été tout à fait faux (la notation Big-O est très utile), donc je suppose que dans l'ensemble, mon jeune moi avait raison.

Si vous voulez vous préparer au monde réel, en plus de ce que @ K-Ran recommande ci-dessus, je vous suggère de lire Code complet et de l'utiliser comme base pour une recherche plus approfondie sur tous les sujets que vous trouvez difficiles ou ne vous sentez pas suffisamment couvert.

1
glenatron

En tant que personne qui interviewe régulièrement des candidats pour des emplois de programmation et quelqu'un qui, après avoir travaillé dans l'industrie pendant plus de 12 ans, se sent raisonnablement accompli, je suggère ce qui suit

  • Conception de base de données et SQL: Il est étonnant de voir combien de programmeurs ne connaissent pas le SQL simple, et ceux qui ont de bonnes compétences en SQL sont inestimables. Pour être en mesure de concevoir une bonne base de données peut ne pas être utile dans une entreprise qui a une structure de base de données définie, pour les start-ups et les entreprises en mutation, c'est un MUST!
  • Modèles de conception. Ils vous aideront simplement à prendre de meilleures décisions concernant une bonne conception
  • OOP: Il s'agit généralement d'un pré-requis pour la plupart des cours, mais cela vous aidera.
  • Algorithmes: parce que si peu de gens savent ce qu'est la récursivité, encore moins comprendre quand cela pourrait leur faire économiser beaucoup de codage complexe
  • Structures de données: la plupart des langages modernes traitent ces choses pour vous, mais les comprendre est la clé d'une bonne conception.

Ensuite, quelques travaux extrascolaires, lisez:

  • Livres de type certification. Ils vous apprennent souvent le type de syntaxe et d'opérateurs sous les couvertures. Il est beaucoup plus important de SAVOIR pourquoi vous faites quelque chose, plutôt que "parce que cela fonctionne", ce qui est si courant.
1
Codemwnci

CELA DÉPEND , il n'y a pas de bonne réponse à cette question.

Le programmeur est un monde général pour identifier une personne qui écrit des logiciels informatiques.

Maintenant, il existe des logiciels de toutes sortes. Par exemple, en utilisant wikipedia comme source de généralisation, nous pouvons rencontrer grande généralisation :

  • programmation système
  • logiciel de programmation
  • logiciel d'application

Dans le premier champ programmation système développez les pilotes de périphériques, le système d'exploitation, les serveurs, vous pouvez par exemple suivre un cours de système d'exploitation.

mais qu'en est-il du logiciel de programmation ? ici, comme wikipedia l'a écrit, vous pouvez coder des compilateurs, des débogueurs, des interprètes, des éditeurs de liens, des éditeurs de texte, ainsi, un cours de théorie de l'automatisation, de théorie du langage, de langage et de compilateurs peut être utile.

Non, nous ne pouvons pas parler de logiciels d'application de toute nature:
- jeux vidéo: algèbre, physique, cours orientés objet?
- logiciels mathématiques: cours de mathématiques?
- retouche d'images: cours de mathématiques, physique, algorithme?
- automatisation industrielle: mathématiques, physique, algorithme, cours de robotique?
- logiciel médical: biologie, médical, quoi d'autre?
- beaucoup de choses ici: beaucoup de cours ici.

Comme vous pouvez le voir, il y a beaucoup de cours que vous pouvez suivre et qui deviendront utiles pour votre travail.

D'après mon expérience, je suis ingénieur logiciel système et logiciel d'application dans le domaine sécurité (vous voulez suivre un cours de sécurité?), À partir d'un peu très expérience en programmation je suis de plus en plus intéressant dans les algorithmes et les systèmes distribués et encore une fois je me sens mal à l'aise dans la simplicité de l'application à usage général que j'ai écrite (renifleur, système de détection d'intrusion réseau, dissecteur et détecteur de protocole, etc.).

Comme vous l'avez appris aigrement en informatique théorique! avez-vous suivi ce cours? : P

Vous avez appris par exemple que tous les langages informatiques peuvent être intégrés dans un ensemble de fonctions mathématiques calculables et par exemple si votre expérience obtient mon même chemin, bientôt vous serez mal à l'aise dans ce petit ensemble de calcul et comme moi, vous pouvez commencer à voir comment le développement le logiciel n'est pas si attrayant et étonnant parce que le même MOTIF DE DESIGN revient encore une fois (avez-vous suivi des cours de design pattern?) et par exemple, vous pouvez commencer à vous intéresser davantage POURQUOI et COMMENT le langage peut être traduit en fonction mathématique et commencer à apprenez que le langage informatique n'est pas si complexe! vous pouvez bientôt par exemple être plus surpris par la personne et la psychologie, et vous pouvez vous y intéresser davantage et devenir un bon chef de projet! avez-vous suivi les cours sur le cycle de vie des logiciels?

Alors maintenant, quel est le cours indispensable dans votre carrière CS?

Je suggère d'apprendre autant que vous pouvez apprendre dans tous les domaines, spécialement dans le domaine théorique, car dans le domaine de travail commun, vous pouvez rapidement vous ennuyer du peu de complexité qui vous entoure et devenir un travailleur à temps plein, vous avez vraiment moins de temps pour apprendre comment les choses fonctionnent vraiment et beaucoup plus de temps pour voir comment les personnes ayant de solides connaissances théoriques ont prévu que les choses fonctionnent et vous donnent la possibilité de coder pour obtenir de la nourriture à la maison.

il y a un mauvais sens de la réalité en informatique. l'informaticien par exemple est parfois très loin du développeur de logiciels.

jetez un oeil à l'explication de wikipedia.

amusez-vous avec la vie :)

mes 2 cents.

désolé pour mon très mauvais anglais.

1
boos

Je pense que vous devriez étudier ce qui suit:

Système d'exploitation: - Même si vous n'en avez peut-être pas besoin pour travailler en tant que programmeur, mais il vaut la peine de savoir comment fonctionne un système d'exploitation et il est attendu d'un diplômé CS. Tout bon livre peut aider.

OOP: - C'est du pain et du beurre. Un indispensable. Livres si vous voulez demander: Votre premier livre devrait être: - tête première OOAD, alors vous pouvez opter pour le livre de Grady Booch et Ivar Jacobson

Structures de données et algorithmes: - Très important pour développer la pensée logique et l'état d'esprit.

Pour moi, cela suffit. Ce n'est jamais trop tard. :)

1
Abhi

J'y arrive dans une perspective légèrement différente en ce sens que je n'ai pas obtenu de diplôme en CS, j'ai obtenu mon diplôme en génie électronique (avec une mineure en affaires).

Sur cette base, je pense qu'une liste de choses que vous devez comprendre est relativement courte car je (et de nombreux autres diplômés CS) survivent joyeusement sans rien savoir sur la conception du compilateur ou similaire.

Ce que je dirais avoir ramassé et que je trouve utile:

  • Conception des SGBDR - Les SGBDR se trouvent derrière la plupart des systèmes et des sites et vous devez comprendre au moins les bases de ce qui se passe (j'ai appris cela sur le tas).
  • Conception de l'interface utilisateur de base - tous les meilleurs programmeurs avec lesquels j'ai travaillé pourraient produire une application utilisable qui n'était pas aussi laide que possible. Sauf un, mais c'est l'exception qui confirme la règle.
  • Une programmation de base - et je veux dire de base. J'ai appris du C (pour le traitement d'image et les systèmes embarqués), du langage d'assemblage (que j'avais oublié quelques semaines après avoir terminé le cours) et du Pascal (un cours d'informatique de base était standard pour tous les ingénieurs). Lors des entretiens, je suis stupéfait de voir combien peu de diplômés CS peuvent vraiment programmer d'une manière que les organisations commerciales jugeraient utile, donc je ne m'attends pas à grand-chose, mais je m'attends à ce qu'elles connaissent les bases.
  • Logique - Je l'ai appris par l'électronique numérique, les mathématiciens par la théorie, les diplômés CS par la programmation, mais quelle que soit la façon dont vous l'apprenez, vous devriez en avoir une bonne compréhension, car tout se résume à cela.
  • Compétences en communication - J'ai suivi quelques cours à l'université en dehors de mon diplôme, de mes compétences de présentation et de mon assurance. Beaucoup de bon sens mais ça ne fait jamais de mal de se faire dire plusieurs fois des choses sensées.
  • Les bases des affaires et de la comptabilité. Certains programmeurs agissent comme si cela n'avait pas d'importance, mais à mon avis, cela importe pour toute personne travaillant dans une entreprise - c'est ainsi que le jeu fonctionne et il va contrôler votre vie, alors pourquoi ne voudriez-vous pas connaître au moins les rudiments de comment et pourquoi les choses se produisent?

Et si vous avez la chance d'en apprendre davantage sur la gestion de projet, cela ne fera vraiment pas de mal, mais cela est enseigné assez mal à l'université dans de nombreux cas et c'est quelque chose que vous apprendrez un peu sur le tas simplement en travaillant sur des projets.

1
Jon Hopkins

De loin, la première chose que les étudiants CS devraient maîtriser est l'anglais.

Sans une compréhension de l'anglais parlé et écrit, vous serez toujours désavantagé.

Il suffit de regarder la myriade de questions qui se posent sur les sites Stack. Beaucoup trop d'entre eux sont difficiles à déchiffrer. Certaines personnes utilisent un mélange de l33t, textos (pas sûr du terme correct). D'autres font une déclaration et ajoutent simplement un point d'interrogation tout en manquant de petites pensées importantes comme des verbes ou des adjectifs.

Si vous ne pouvez pas communiquer, vous ne pourrez pas vous faire comprendre et encore moins comprendre ce que les autres disent.

Tout le reste n'est que des détails. Si vous pouvez communiquer, êtes d'une intelligence au moins moyenne et pouvez comprendre ce que vous lisez, vous pouvez également avoir une programmation de carrière réussie.

1
NotMe

J'ajouterais également des cours de base de ressources humaines/psychologie à la liste.

Cela peut sembler un ajout étrange, mais une partie du travail professionnel consiste à apprendre à se vendre et à négocier. Entrer dans votre première 'vraie' entrevue sans une solide connaissance des motivations du drone RH est une recette pour un désastre et risque de se terminer avec l'étudiant coincé dans un salaire bas.

Connaissez votre ennemi pour pouvoir vous protéger.

0
Peter Bernier