Quel cours d'informatique de premier cycle pour les programmeurs prépare mieux le lieu de travail? [fermé]

StackOverflow https://stackoverflow.com/questions/895165

Question

L'idée ici est d'obtenir de meilleurs programmeurs dès la sortie de l'université.

Je pense que je devrais aller avec des algorithmes, ce n'est pas exactement quelque chose que vous pouvez revenir sur votre très facilement et je pense qu'il vous permet de regarder l'efficacité et l'exactitude des logiciels sur un niveau plus profond.

Je crois aussi que l'enseignement de programmation réelle peut être utile, mais j'appris la plupart de ce que j'appris sur la programmation au travail, ce qui me fait penser à certains de ces blocs de cours de programmation (pas tous) aurait pu aller mieux utiliser.

Ces résultats feront partie d'une lettre que je veux écrire au département CS à mon ancienne école, je pense qu'il ya des tonnes de classes que j'ai pris cela n'a pas aidé du tout, et d'autres que je pense aurait été précieux .

Était-ce utile?

La solution

Je n'ai pas encore trouver un bon cours CompSci qui prépare de manière adéquate ingénieurs logiciels pour le lieu de travail. Si vous trouvez un qui a les éléments suivants [bien que ce pourrait être appelé CompSci je doute, il est plus comme logiciel Real-World Design qui est une bête très différente].

informatique est un sujet plus théorique qui a des implications mondiales très réelles, mais il est plus utile dans une lumière académique. la conception de l'algorithme, par exemple, est fantastiquement utile ingénieurs logiciels, mais pas vraiment directement utile au consommateur. Par exemple, savoir comment construire un algorithme de tri rapide, ou la compréhension de liste chaînée traversal est pas vraiment si utile dans l'environnement de génie logiciel d'aujourd'hui - bien sûr, la compréhension de la théorie est utile pour choisir les bons outils pour le travail , ne me méprends pas. En tant que développeurs, beaucoup d'entre nous comptent sur la sortie du monde de la science informatique pour faire avancer nos outils de développement, en fait, sans les nombreux développeurs seraient laissé patauger, mais mettre un diplômé en informatique en face d'un utilisateur et les amener à concevoir un morceau significatif de logiciels pour eux et l'intelligence académique va tomber en morceaux parce que les deux parlent des langues complètement différentes.

Un beaucoup plus sûr utile pour les ingénieurs logiciels comprendrait autant [et peut-être plus] des éléments suivants que je peux penser à du haut de ma tête:

  • Langue de programmation - flux de programme de base, les paradigmes, la syntaxe, etc. Ceci est la plupart du temps enseigné assez bien, donc je ne colle pas sur celui-ci trop. Bien qu'il serait utile que quelques classes complètement différentes des langages de programmation ont été enseignées - par exemple, j'ai appris C, Pascal et VB 3 (je ne me rappelle pas la version exacte?). Il serait beaucoup plus utile si les programmeurs ont appris au moins une langue fonctionnelle, un langage impératif, un langage déclaratif.
  • Debugging - Lors de l'écriture d'applications nTier [que beaucoup / la plupart des applications du monde réel sont], il serait utile de pouvoir comprendre quelque chose va mal, jusqu'au niveau du protocole si nécessaire. Outils d'analyse tels que WireShark sont utiles pour cela.
  • Communication Devices -. XML, XQuery, XPath, XSL, XSD [comme ceux-ci semblent être utilisés de façon extensive]
  • Relational Database design -. Ceci est enseigné assez bien déjà
  • Relational Database Performance Tuning - Il suffit de concevoir les tables ne suffit pas, de savoir quand il est approprié d'indexer certains champs et quand il n'est pas est aussi important et ne semble pas être couvert dans beaucoup des cours.
  • Normalisation des données Cela semble également être enseigné assez bien dans beaucoup de cas. Bien que la plupart des étudiants semblent sortir dans le monde réel crachant les théories qu'ils ont appris - « tu toujours utiliser forme normale Boyce-Codd » etc, sans penser réellement sur les implications de ces théories. Parfois, dans le monde réel, nous avons de très bonnes raisons enfreignent les règles.
  • Optimisation des requêtes - L'écriture des requêtes de base semble souvent être à la limite extérieure des diplômés des zones de confort, devrait être enseigné l'optimisation. En outre, des outils comme profileurs de requête doivent être enseignées pour aider les élèves débogage des problèmes de performance des applications.
  • Procédures stockées / Déclencheurs - Je n'ai pas encore rencontré un étudiant qui pourrait écrire une procédure stockée ou un déclencheur ou utiliser l'une manière efficace. Sélectionne / / imbriqués Sélectionne SE JOINT semble être la limite de ce qui est enseigné en matière de conception de requête.
  • Les algorithmes de base - Ceci est enseigné farely bien dans mon expérience, mais beaucoup d'étudiants ne semblent pas avoir une idée de décider quels algorithmes appliquer à des situations qui, sans être dit « l'utilisation de ces et un tel algorithme, résoudre ce problem ». Il serait utile que vous pourriez dire: « résoudre ce problème », et ils sont comme, d'accord, j'ai une flotte d'algorithmes qui seraient utiles dans cette situation, c'est la meilleure raison de x, y ou z raison et voici comment il peut être appliqué pour fournir une solution.
  • Recursion - Je n'ai pas encore trouver une approche qui peut enseigner récursion, il semble que ce soit vous ou vous ne le faites pas. L'un de ces jours, je vais trouver une bonne métaphore qui va faire ce compris par le programmeur même le plus élémentaire.
  • Abstraction -. Cela semble être quelque chose que beaucoup de cours sur brillant en dépit d'être l'un des principes fondamentaux de la POO
  • refactorisation de code -. Savoir quand à refactoriser et presque aussi important, quand pas
  • Code de réutilisation - Il semble que beaucoup de cours sont crachait coupés / singes coller - c'est pas ce que la réutilisation du code est censé signifier
  • Source de contrôle - Je n'ai pas en apprendre davantage sur le contrôle de la source jusqu'à ce que mon 3ème ou 4ème travail de programmation, et je ne sais pas un ingénieur logiciel unique personne qui a appris le contrôle de la source dans le cadre de leur cours. .. pourquoi?
  • Sauvegarde et restauration - Je n'ai pas entendu parler de cours qui enseigne cela. Combien de programmeurs débutants ont perdu leur travail parce qu'ils ne sont pas tout simplement pensent sur la sauvegarde en place? Je sais que j'ai dans le passé - pas récemment cependant. Ce n'est pas que je ne connaissais pas de sauvegarde, mais comme le dit le dicton « il ne se produira jamais pour moi. » Il vous arrive, et il sera garantie juste avant que vous devez démo tout ce que vous venez de perdre!
  • Maintenance du système de fichiers -. D'accord, certains des cours esquivent brièvement, mais beaucoup ne le font pas
  • Rédaction des spécifications de conception de bonne qualité - Cela semble toujours être fourni en tant que brève de cours, mais l'étudiant est rarement demandé de concevoir eux-mêmes ce. Rédaction d'un cadre de travail et la compréhension des modèles de document semble être bien au-delà de la portée de la plupart des cours de logiciels.
  • Documentation utilisateur - Les utilisateurs ne pensent pas comme vous, les distribuer un logiciel qui est « explicite » ou « un idiot si simple peut l'utiliser » va exploser dans votre visage. Il y a un dicton célèbre: « Aujourd'hui, la programmation est une course entre les ingénieurs logiciels cherchant à créer des programmes plus grandes et mieux zappe, et l'univers essayant de produire plus gros et plus idiots. Jusqu'à présent, l'univers est en train de gagner ». Ecrire la documentation utilisateur qu'un ancien peut suivre huit années -. Il peut sembler pénible à écrire, mais une fois qu'il est fait, et pour toujours, vous vous remercierez
  • Documentation technique -. À-dire qu'il serait utile que les élèves pourraient utiliser Sandcastle, ndoc ou tout autre outil de documentation
  • Planification test - la conception des tests et un logiciel qui permet de tester. nUnit ou similaire serait un excellent outil pour enseigner des cours de développement de logiciels. En fait, l'enseignement tout cadre de tests serait mieux que de ne pas enseigner tout ... comme cela semble être le cas.
  • FAT / SAT / UAT Test - Il serait utile de comprendre les différents scénarios de tests dans le monde réel tels que les chèques de santé mentale, des tests d'acceptation en usine et les tests d'acceptation des utilisateurs. Inscrivez-vous hors de votre logiciel est aussi important que son développement. Si vous ne livrez pas ce que le client pensait qu'ils obtiennent, vous n'êtes pas être payé -. Quelle que soit la brillante solution est sur un plan technique
  • Architecture Software -. Comprendre les différentes composantes des applications dans le monde réel n-tiers, les avantages et les inconvénients de leur utilisation
  • Interaction avec les utilisateurs - Peut-être que ce n'est pas vraiment la science informatique, mais apprendre à parler aux gens qui ne sont pas souvent sur votre longueur d'onde et ne pensent pas de la même façon que vous le faites, eest va de pair avec la communication, mais est-il vraiment les développeurs quelque chose doivent être au courant.
  • Common Sense - Ding, ding, ding, ding - il y a beaucoup de programmeurs là-bas sans une once de cela! Les cours sont conçus pour prouver que vous pouvez penser pour vous-même, je ne comprends pas pourquoi tant de diplômés viennent dans le monde réel pensant que tout ce qu'ils doivent faire est d'appliquer les règles qu'ils ont appris aveuglément sans réfléchir sur les raisons et les implications. Je vais répéter ce que je disais plus tôt - dans le monde réel nous trouvons parfois de très bonnes raisons pour avoir enfreint les règles. Nous ne les suivons pas aveuglément, et nous ne les brise pas aveuglément non plus. Le développement de logiciels est un art, et comme tous les arts, nous devons savoir quand nous pouvons et nous ne pouvons pas et aussi important alors que nous devrions et ne devrions pas enfreindre les règles. En tant que diplômé, vous avez appris les règles, vous avez prouvé. Maintenant, vous devez faire ce que le cours a été vraiment essayer de vous apprendre -. Appliquer ce que vous avez appris à penser par vous-même
  • À l'écoute - Vous seriez surpris de voir combien de fois je vois le code écrit parce que le développeur « pensait qu'ils savaient ce que le client voulait » au lieu de réellement écouter ce que l'utilisateur dit et la compréhension de leur réelle besoins.
  • Comprendre -. Va de pair avec l'écoute
  • compétences de communication
  • Parler à la technique inepte - à savoir une grande partie de votre base d'utilisateurs
  • Projet de médiation - la vente de vos idées à ceux qui écrivent les chèques
  • priorisation -. Comment décider quelles fonctionnalités sont plus importants que d'autres
  • Budget - estimation du temps
  • Gestion du temps - comment faire avancer les choses à l'heure où tout le monde autour de vous sur votre temps entravait et n'a pas soin de vos délais. Tout comme lorsque tous vos amis vous veulent aller au pub pour boire une pinte ou dix quand vous avez d'ici la fin de la journée de demain un morceau bien sûr travail que vous ne l'avez pas encore commencé en raison de.
  • fluage Scope - quand dire, non, ce n'est pas dans les spécifications / budget
  • .

Et même si vous ne parviennent à apprendre tout ce que dans votre cours, j'ose dire que vous auriez toujours en savoir plus sur trois ou quatre mois de stage à un développement de logiciels d'un conseil callibre décent que sur tout le parcours. J'ai appris plus dans mes 6 premiers mois après mon baccalauréat que moi dans tout mon parcours de 3 ans. Il est vrai que je suis tombé à plat mon visage sans bon nombre des choses que j'appris sur ce cours, mais il y avait tellement qui a été appris inutilement que aurait pu être remplacé par un contenu bien plus utile.

Autres conseils

La classe dans laquelle vous passez votre été à une véritable entreprise logiciel d'écriture.

Sérieusement - les classes CS ne sont pas destinées à produire de bons programmeurs. Ils sont destinés à produire des informaticiens qui, comme un effet secondaire, peut aussi écrire le logiciel.

Computer Science! = Programmation.

Si vous êtes à la recherche de meilleurs programmeurs, rechercher des personnes ayant fait des études d'un programme collégial de 2 ans qui se concentre spécifiquement sur ce point.

Rien ne vaut les connaissances acquises par les projets de construction, il n'a pas vraiment d'importance qui est bien sûr, si vous prenez cours des bases de données relationnelles construire un projet de système de bibliothèque, si vous prenez Assembleur construire quelque chose comme des outils PC 32 / 64 ensemble de bits.

Vous ne pouvez devenir meilleur programmeur en faisant « Programmation » pas simplement en prenant des cours et obtenir un haut GPA.

Les plus importants et pertinents ne sont pas des cours CS. Vous aurez besoin de bien communiquer. Quels que soient les cours que vous pouvez obtenir d'être un meilleur auditeur / lecteur et un meilleur écrivain / haut-parleur.

  • Business 101
  • Bureau Politique 200
  • Rien n'est jamais académique dans le monde réel

En réalité, la marche dans un travail de programmation que vous n'êtes pas censé être un développeur senior du jour 1. Apprendre quelques fondamentaux de codage vous amène certainement un long chemin, mais la légère hausse, je vois un bon nombre d'étudiants en sciences informatiques lutte le monde réel parce qu'ils ne savent pas vraiment ce qu'ils sont en train de se dans le jour 1. ils luttent avec des domaines d'affaires et de comprendre pourquoi ils font ce qu'ils font. Ils ne savent pas qui de communiquer avec d'autres gens d'affaires.

C'est une question difficile à répondre, mais une chose que je pense programmeurs dans un grand nombre de programmes CS est le manque de codage-pratique. Il est important de connaître la théorie de la science informatique, mais je pense que beaucoup de programmes CS très théoriques tombent par ne nécessitant pas des exercices de programmation dans leurs classes. Par exemple, j'ai vu beaucoup de classes AI qui nécessitent des recherches et des documents, mais pas de code. À mon avis, il est extrêmement important de comprendre la théorie de la science informatique, mais il est tout aussi important de pouvoir l'appliquer.

Je dirais que c'est un lien entre les systèmes de base de données et un cours de projet Software Engineering. est nécessaire pour ne cours un diplôme de premier cycle à mon école, mais peut être prise par étudiants de premier cycle. Avoir une certaine connaissance des bases de données est probablement plus nécessaire que les algorithmes pour la plupart des programmeurs. Travailler sur une équipe de projet, même sur un projet de cours, peut vous aider à comprendre la dynamique de l'équipe et la façon de travailler dans un environnement d'équipe.

D'autre part, je crois fermement qu'une bonne compréhension des thèmes fondamentaux de l'informatique, y compris les structures de données, des algorithmes, des systèmes d'exploitation, etc. sont essentiels pour préparer un à grandir en tant que programmeur.

Les deux plus pertinents pour le travail de mon diplôme d'ingénieur logiciel à l'Université de Sheffield ont été le module Hut Software dans la 2e année, qui a impliqué au cours d'un terme en équipe produisant un produit logiciel pour un vrai client mondial. Il y avait trois clients différents, je pense, et les équipes se sont affrontées pour produire le meilleur système pour eux.

Alors la quatrième année un tiers des marques ans est venue de la gestion d'une société de logiciels, encore une fois pour les clients du monde réel. Alors que pas tout à fait comme l'exécution d'une activité réelle, en raison des restrictions de propriété intellectuelle sur les produits que nous avons produit (comme nous étions encore étudiants à l'université, ils possédaient le travail), nous avons fait participer dans la plupart des aspects de la gestion de l'entreprise - bar tout écriture comptable / contrat.

Conception de base de données

Programmation fonctionnelle

La programmation orientée objet

x Driven Design

Mon point de vue (comme réalisateur anglais it) est qu'un jour dans un bureau vaut la peine d'une semaine à l'école et en tant que telle, si vous pouvez fidn un moyen d'obtenir une certaine expérience, il en vaudra la peine.

Autre que juste être confiant dans votre abilty, jouer à vos points forts et être prêt à google tout ce que vous ne connaissez pas!

Si vous souhaitez se démarquer de la foule habituelle informatique alors assurez-vous que vous êtes en mesure de communiquer correctement car il est étonnant de voir combien « top » Grads ne peut pas.

De meilleurs programmeurs droit hors de l'université? Jusqu'à ce que les écoles commencent l'enseignement des concepts comme la cohésion, le couplage, les bonnes pratiques de programmation, le contrôle des versions, gestion de la configuration, les modèles de développement modernes - Je ne le pense pas. Ce que je vois souvent est auto apprenants qui veulent faire l'apprentissage droit de chose sur eux-mêmes ou s'ils sont chanceux embauchés dans une organisation qui prêche et pratique de bonnes choses.

Tout dépend de ce que vous voulez programmer et quels types de problèmes sont vous intéressent.

Il est évident que le combo général de

Après que tout dépend de quel domaine vous voulez travailler. Demandez à votre conseiller, les personnes âgées à votre collège et les professeurs et leur parler de vos objectifs et vos intérêts. Ils vous conseilleront mieux que quiconque ici peut.

Cependant, ne pas ignorer la pensée critique, cours d'écriture. Prenez des cours qui vous permettent de présenter vos idées et vous préparer à parler en public.

Je pense que le cours que j'ai pris je me suis le meilleur parti de Structures de données et algorithmes . La connaissance est indépendante des progrès de la technologie, et il fournit les outils de base utilisés par les programmeurs de toutes sortes.

Une classe que nous avions nous besoin pour construire quelque chose comme un projet de service communautaire de toutes sortes. Cela nous a obligés à utiliser et à apprendre tout le génie logiciel Gambit.

Aucun moins à moins que l'enseignant décide de mettre quelques screwballs dans la classe dont le but est d'essayer de rendre les choses aussi difficiles que possible, un cours comme celui-ci sera grandement défaut ...

Structures de données et bien sûr l'algorithme, au cours de mon étudiant de premier cycle, me aide beaucoup à mon lieu de travail

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top