Nous l'avons tous entendu; chaque fois qu'il y a une discussion sur CS Grads ayant des compétences de développement médiocres, une personne a finalement dit,
L'informatique n'est pas une ingénierie logicielle.
Le problème que je vois est que la programmation et le développement de logiciels sont enseigné dans CS Courses. Ils sont juste couramment enseignés mal. S'il est enseigné, alors pourquoi ne pas l'apprendre correctement la première fois? *
Je voudrais donc voir quelles sont les opinions sur 2 questions:
Est le CS! = SE ARGUMENTER UN COPOUT OU EXCUSE POUR NE PAS L'ENSEIGNEMENT DES COMPÉTENCES DE PROGRAMMATION.
Quelle que soit votre réponse à la question 1; Si vous étiez dans la position tout-puissant de faire une telle décision: voudriez-vous mettre l'accent sur l'enseignement approprié de la programmation dans CS Cours?
*. J'ai une suspicion, basée sur des preuves anecdotiques que j'ai obtenues tout au long de mon éducation, que la plupart des universitaires sur le terrain n'ont pas eu à rédiger un code à maintenir et n'ont pas maintenu le code et n'ont pas les connaissances/compétences l'apprendre efficacement.
Je ne pense pas que ce soit un copout, mais plutôt une affirmation selon laquelle l'informatique n'est pas Génie logiciel, ce n'est pas la programmation - c'est, eh bien, la science du calcul formalisé. En substance, c'est Math (En fait, de nombreux programmes CS ont commencé comme des programmes de mathématiques appliqués).
Je pense que le problème réside davantage avec l'industrie que l'université. L'industrie voit un diplôme CS coté sur un curriculumité et pense: "Great, ce gars de ce type avec des ordinateurs" et l'engage à faire n'importe quoi En ce qui concerne un ordinateur: la programmation, le développement de logiciels, tout ce que . Ces choses ne se trouvent pas nécessairement dans le domaine de l'expertise d'un diplômé CS. À son tour, beaucoup de personnes qui aiment construire des ordinateurs ou jouer des jeux vidéo entrent dans un programme CS s'attendent à ce genre de choses et à obtenir une surprise impolie; C'est-à-dire que, beaucoup d'élèves entrant dans CS n'appartiennent pas vraiment là et seraient mieux dans un programme de diplôme plus ciblé.
Deuxièmement, il y a un très Un temps limité pour enseigner au CS - un sujet très large - dans un programme de premier cycle typique. Mon curriculum de premier cycle avait 8 cours de CS (pour un BA) ou 12 cours de CS (pour un BS), ainsi que tous les cours de mathématiques requis. Ce n'est pas beaucoup de temps pour enseigner cs et math et programmation et Génie logiciel, donc à un moment donné que vous avez décider ce qui est important et ce que un élève peut prendre seul.
Ce dernier point est crucial: je pense un bon élève - dans n'importe quel sujet - explorera des idées sur elles-mêmes. J'ai un diplôme CS, mais je pense que je suis sorti de l'université en tant que développeur décent, car j'ai étudié et écrit logiciel seul. Le collège n'est pas tout à propos des cours; Il s'agit également de donner aux élèves le temps de développer leurs compétences semi-autonomes, tout en donnant des orientations précieuses.
Je maintiens cette théorie d'enseignement - CS, Maths, etc. - est tout aussi important, sinon plus IMPORTANT, que d'enseignement des compétences spécifiques liées à l'emploi. Si vous enseignez à un étudiant le pourquoi Derrière les méthodes et les techniques, et pas seulement le quoi, vous finirez avec quelqu'un qui est beaucoup plus adaptable lors de l'application sa connaissance. Par exemple, je suis allé à une "école Java" beaucoup maligne et j'ai donc été enseignée à Java, mais j'ai également eu des cours dans la théorie des langues de programmation, qui a expliqué le pourquoi Derrière de nombreuses langues; En conséquence, j'ai appris à écrire beaucoup de logiciels que si je n'avais pas cette expérience. Bien sûr, je n'écris pas de logiciels à Haskell dans mon travail de jour, mais en sachant que beaucoup de théorie de la langue de programmation m'ont permis de mieux comprendre que a été applicable à mon travail de programmeur.
Je pense aussi que l'industrie s'attend à trop d'étudiants. L'industrie veut réduire ses propres coûts. Au lieu de former de nouvelles recrues pour leur emploi, elles s'attendent à ce que les collèges deviennent des écoles commerciales/techniques; En effet, ils veulent que les collèges fassent leur formation. Les diplômés des collèges ne peuvent pas être censés savoir tout frais de départ de l'université. Être un bon développeur est autant sur l'expérience que sur la connaissance (surtout dans un domaine relativement jeune comme le développement de logiciels).
Une partie du problème ici est le fait que 4 ans ne soit pas suffisamment de temps pour devenir un ingénieur logiciel poli. Étant donné que nous voulons que le sous-traitant ait une exposition à plus de choses que de simples cours de mathématiques et de CS et du fait qu'il y a beaucoup de mécanique pure à apprendre (algorithmes, structures de données, syntaxe de langues), on ne peut pas s'attendre à un CS Green CS Major comme étant un ingénieur logiciel.
Je conviendrais que cs! = SE et je ne suis pas sûr de pouvoir aller à l'école et de devenir un se (même avec une maîtrise)
CS n'est en fait pas soi-même. Et les gens semblent confondre les deux tout le temps, même en l'admettant. L'informatique devrait vraiment être renommé quelque chose comme la calculologie ou la science de l'informatique. En fait, l'informatique a très peu à voir avec des ordinateurs. C'est la théorie des graphes, l'analyse des algorithmes, les structures de données, etc.
Les gens veulent assumer une fraîcheur CS Grad est en fait un ITT GRAD; Ils veulent quelqu'un qui a été formé dans une vocation. L'informatique est la science, la programmation est un art. Ce ne sont pas les mêmes.
C'est comme demander pourquoi une période de physique fraîche n'est pas un bon ingénieur de la voiture. C'est idiot.
Est le CS! = SE ARGUMENTER UN COPOUT OU EXCUSE POUR NE PAS L'ENSEIGNEMENT DES COMPÉTENCES DE PROGRAMMATION.
Non. CS n'est pas SE. C'est un fait, pas une excuse.
Quelle que soit votre réponse à la question 1; Si vous étiez dans la position tout-puissant de faire une telle décision: voudriez-vous mettre l'accent sur l'enseignement approprié de la programmation dans CS Cours?
Non, ce serait comme obliger les astronomes à apprendre les détails de la construction de télescopes. Ou forcer les programmeurs à apprendre les détails des ordinateurs de construction. Stuffs liés, mais un homme n'a pas besoin de tout savoir.
Oui, cela ressemble à un flexible pour moi et un signe de l'immaturité de CS en tant que discipline académique.
Une société chimique américaine accréditée B.S. Le programme nécessite que vous ayez passé des cours spécifiques pour démontrer des compétences particulières dans les deux théories (classes de cours) et la pratique (classes de laboratoire). À l'heure actuelle, CS n'a rien de tel que cela autant que je sache.
L'un de mes professeurs de Grad Schol était un théoricien de Tour de la Tour de l'ivoire dont le bureau n'a jamais été souillé avec quelque chose de plus chimique physiquement que d'un poisson de poisson avec des rochers magiques, mais quand j'étais son Ta pour Freshman Chem, il s'est également révélé être une chimiste d'un banc assez compétent .
Lorsque j'ai travaillé comme chimiste de peinture industrielle, ils auraient ri leur tête à la notion que j'aurais un baccalauréat et que j'avais incompétent dans le laboratoire. Bien sûr, les détails de ce que je faisais dans le laboratoire étaient différents de ce que j'avais eu dans les classes de laboratoire à l'école, mais les principes étaient les mêmes - nous avons juste utilisé un mélangeur de peinture et une boîte, plutôt qu'un bécher et un agitateur magnétique .
Si l'on pouvait appliquer la même approche du CS, les détails de ce que l'on pourrait enseigner en tant que compétences de développement de logiciels pratiques pour un curriculum CS/SE pourrait varier d'une école à l'école et au fil du temps. Mais cela sonne juste fou pour moi qu'il est acceptable que quelqu'un puisse obtenir un diplôme sur le terrain et ne pas être compétent pour écrire, déboguer et entretenir certains type de code. (Bien sûr, c'est comme ça que les choses sont réellement dans de nombreux programmes CS, mais c'est toujours fou.)
Je conviens que 4 ans suffisent suffisamment de temps pour leur donner une bonne fondation sur laquelle grandir. Cependant, je pense qu'une chose qui aide vraiment, c'est que les personnes de l'industrie participent au développement du programme et même à l'enseignement dans la classe. L'année dernière, j'étais membre de l'industrie dans une classe de développement de logiciels dans une université locale. C'était une expérience d'ouverture très oculaire pour moi. Le professeur et moi avons travaillé ensemble sur le contenu du cours et nous avons mis beaucoup plus d'informations sur le processus de développement, les meilleures pratiques de l'industrie et les situations "du monde réel" qu'ils avaient déjà fait auparavant. Ce que nous avons découvert, c'est que, parce que la plupart des instructeurs ne développent pas de code largement utilisé et maintenu, apportant une personne de l'industrie a contribué à identifier et à enseigner les compétences nécessaires pour le faire. Le professeur a fait tout le classement et a fourni l'expertise en enseignement que je manquais.
J'ai un diplôme CS et pour une année complète de mon programme, il n'y avait aucune programmation, seule la théorie. On nous a dit que nous n'avions pas de diplôme en programmation mais en informatique. Si vous voulez être un programmeur, allez au collège communautaire.
Nous avons appris sur des algorithmns, des modèles de conception et beaucoup de la théorie sur la résolution de problèmes sans langage spacifique. Les langages de programmation vont et vont, mais la théorie soulignée reste la même.
Donc, à votre première question, non, je ne pense pas que cs! = SE est un copout. C'est un fait.
À votre deuxième question, non, je ne pense pas que je le ferais. Comment vous enseignez-vous la programmation? Au-delà des boucles, des ifs, des méthodes, des classes et des OOP, quelle serait la "programmation appropriée" et comment le feriez-vous pour tout langage de programmation? Vous avez besoin d'un code d'écriture d'expérience, quelque chose qu'un degré de 4 ans ne peut vous préparé.
Une chose que je ferais, c'est offrir une classe sur le développement dans le monde réel. Contrôle de la source, suivi de billets/bugs, traçage de code et tout ce que le jazz serait un bon départ pour préparer tous les diplômés de ce qu'ils feront face à leurs nouveaux emplois.
Je pense que c'est sur nous lorsque nous embauchons un nouveau diplômé de comprendre qu'ils n'allaient probablement pas écrire le code primé. Ils ont besoin de conseils et de direction.
Oui, c'est un COPOUT 100%, ils devraient être des compétences à long terme qui seront utiles tout au long de notre carrière. Que votre intention soit ou non d'aller dans le monde universitaire ou dans l'industrie, vous devrez être capable de programmer de manière à pouvoir être maintenue, même si ce n'est que par vous-même.
Oui, bien que cela ne soit souligné que dans les cours appropriés. Personnellement, si je dois vous parler pour mieux comprendre comment vous avez essayé de mettre en œuvre un algorithme, je marquerais votre note.
Même si vous allez une recherche pure CS, vous devrez probablement créer du code pour démontrer vos idées. Les compétences de programmation appropriées vous seront utiles à un moment donné, alors pourquoi ne pas commencer au collège.
Je pense que notre problème est que nous sommes beaucoup plus que des médecins que nous ne sommes disposés à admettre ... Nous avons cette idée qu'un degré de quatre ans devrait préparer les étudiants à écrire des logiciels. Ce n'est même pas proche.
Notre profession est en grande partie à ses balbutiements par rapport aux autres disciplines. Peut-être que la question devrait être la suivante: comment pouvons-nous améliorer CS afin que les étudiants diplômés de ce diplôme soient mieux adaptés pour devenir des membres productifs d'une équipe de développement de logiciels réels dans une période beaucoup plus courte?
Peut-être devrions-nous être plus comme la médecine. Quatre années de travail de base (CS diplôme), puis résidentiellement - pratique de l'embarcation sous la supervision d'un ingénieur logiciel plus expérimenté. C'est peut-être ce que nous avons déjà, mais c'est moins formel ... je veux dire, comme un résident, nous apprenons nos compétences les plus précieuses sur le lieu de travail dans nos premiers emplois.
Peut-être que la discipline que nous devons juste formaliser cela mieux.
De ma propre expérience (je suis étudiant en ce moment), je dois dire oui, c'est une excuse. Tout le monde se réfère à CS comme une science qui nous enseigne toutes les bases des ordinateurs, ainsi que comme une succursale spéciale dans CS qui enseigne explicitement la programmation. IMO, tout le monde qui a BS en CS, doit savoir écrire un code bon et optimisé (même si la programmation n'est pas sa zone de spécialité). Donc oui, si j'avais une position tout-puissant de faire une telle décision, je forcerais les étudiants à acquérir de bonnes compétences en programmation.
En supposant que l'objectif est d'éduquer de bons ingénieurs logiciels (programmeurs), car le monde a besoin d'eux, est-ce que c'est bien de répondre en disant ce que je pense devrait être enseigné?
Tout d'abord, cela est important car le transfert de connaissances est actuellement inefficace. Lorsque des programmeurs potentiels sont en cours, leurs esprits sont ouverts et ils absorbent ce qu'ils sont enseignés. Dans le même temps, les professeurs (j'étais un) Trop souvent intéressé à remplir le pipeline des études supérieures avec des étudiants pouvant travailler sur des sujets ésotériques. Lorsque l'objection est soulevée que les étudiants ne sont pas préparés aux problèmes du monde réel, j'ai vu des professeurs réclamer ce n'est pas leur travail. C'est le travail du monde réel.
Ensuite, lorsque les étudiants deviennent des programmeurs dans le monde réel, sont-ils désireux d'apprendre de leurs nouveaux collègues? Pas dans mon expérience. Ils sont plutôt impatients de répandre n'importe quel gangel qu'ils ont acquis à l'école. Je me souviens d'un étudiant et d'un jeune pratiquant pensant à quel point cela allait faire de nouvelles idées parmi les vieux fuddy-duddies là-bas. Maintenant que je suis un vieux Fuddy-Duddy, je vois à quel point il est difficile d'ouvrir les yeux de nouveaux programmeurs à la différence entre la théorie et la pratique.
J'étais étudiant en ingénierie, en génie électrique mécanique et ultérieur. Une partie fondamentale de c'était a) des fondements mathématiques, et b) la résolution pratique des problèmes. L'ingénierie logicielle devrait être comme ça, pas seulement la programmation.
Je pense que l'ingénierie logicielle (programmation) doit être enseignée avec suffisamment d'informatique pour être une Connaissance pratique - Théorie de base de l'automate et la théorie de l'information. Celles-ci n'ont pas besoin d'être faites de grande profondeur. Après enseignement de la programmation de base, il devrait y avoir des projets coopératifs de taille non provisoire. Une partie essentielle de ceux-ci devrait être une proposition et une prise en compte de solutions alternatives de problèmes spécifiques, avec une analyse des avantages et des inconvénients, pas seulement la dernière religion ou la "prochaine grande chose" ou une taille unique. Enfin, il devrait y avoir une coopération et un partenariat entre l'industrie et les universités, de sorte que des idées et des améliorations puissent être communiquées dans les deux sens, améliorant considérablement le contrôle de la qualité.
Les informaticiens et les ingénieurs logiciels sont différents. Les scientifiques sont les gars qui exécutent les expériences folles et proposent les algorithmes que nous avons des ingénieurs logiciels pour être mieux.
Pensez aux chimistes menant des expériences pour une entreprise pharméceutique. Ils ne se soucient pas de la manière de produire le produit chimique en masse. Ils se soucient pas non plus de marketing, d'emballage, de distribution ou de tout ce qui arrive au médicament après leur découverte. Enfer ils ne se soucient même pas du processus de certification. Tout ce qu'ils se soucient de trouver un produit chimique qui a un effet qui est donné aux sujets testés. La société est responsable de la déplacer au-delà de cela.
Les informaticiens sont comme ces chimistes. Tout ce qu'ils font, c'est tester les théories avec code. Ils ne se soucient pas de la maintenable au code. Ils prouvent une théorie et passent à la suivante. Quelqu'un d'autre paquets qui algorithmique et le rend utiles pour les masses et que nous avons une vision MP3 ou informatique avec la vidéo Kinect ou Streaming sur votre iPhone. Donc, cs! = SE est un argument valide.
La deuxième partie de votre question. Si j'ai offert un diplôme en théorie de la musique, il pourrait y avoir un cours obligatoire dans la composition de l'échantillon ou quelque chose qui n'aurait besoin de personne pour étudier un instrument. C'est à l'étudiant de rechercher les connaissances souhaitées. L'informatique n'est pas une ingénierie logicielle ... Si vous voulez apprendre SE, prenez une double majeure.
Ceux qui peuvent faire; ceux qui ne peuvent pas enseigner.
Dans mon université, la base de connaissances des enseignants est terriblement déficiente. J'ai vu des professeurs de difficulté à comprendre comment représenter des tables semi-structurées dans XML tout en maintenant un doctorat dans la conception de la base de données. Je l'ai vu mon professeur Assemblée me demander ce que fait mon code quand il est son extrait de code I copié et collé. J'ai vu mon professeur de conception de logiciels nous dire que la méthode agile est la même que la méthode de la cascade, seulement plus rapide que le modèle de processus de développement itératif a et ne peut avoir que 3 itérations, car c'est ce que l'image utilise le livre. Un de mes professeurs ne savait même pas ce qu'était une déclaration d'étranglement.
Je ne crois pas qu'ils sont " Faire face à ", ou de faire des excuses, je crois vraiment qu'ils font du mieux qu'ils peuvent avec leurs expériences, qu'ils ont quelques précieux.
Je suis d'accord avec les autres personnes qui postaient ici que 4 ans ne suffisent pas à devenir programmeur expérimenté, mais l'expérience que mes professeurs n'avaient pas suffisaient de les rendre assaisonnés non plus. C'est un peu comme dans l'ombre de Ender, où Bean remarque que les métriques utilisées par les enseignants de Battle School sont courtes parce que la dernière guerre qui est la règle du guide, était trop courte pour montrer vraiment ce qui est réellement nécessaire. Dans d'autres mots, les enseignants faisaient de leur mieux, mais n'ont pas eu l'expérience de savoir ce qui est vraiment nécessaire pour faire un bon commandant (ou un bon programmeur dans ce cas).