«Computer Science! = Software Engineering» est-il une excuse pour enseigner mal la programmation?

23

Nous l'avons tous entendu; chaque fois qu'il y a une discussion sur les diplômés CS ayant de faibles compétences en développement, quelqu'un dit finalement,

L'informatique n'est pas le génie logiciel.

Le problème que je vois est que la programmation et le développement de logiciels sont enseignés dans des cours CS. Ils sont tout simplement mal enseignés. Si c'est enseigné, alors pourquoi ne pas l'enseigner correctement la première fois? *

Je voudrais donc voir quelles sont les opinions sur 2 questions:

  1. L'argument CS! = SE est-il une excuse ou une excuse pour ne pas enseigner correctement les compétences en programmation.

  2. Quelle que soit votre réponse à la question 1; si vous étiez dans la position toute-puissante de prendre une telle décision: forceriez-vous de mettre l'accent sur un bon enseignement de la programmation dans les cours de CS?

*. Je soupçonne, sur la base de preuves anecdotiques que j'ai obtenues tout au long de mes études, que la plupart des universitaires dans le domaine n'ont pas eu à écrire du code pour être maintenu et n'ont pas maintenu le code, et par conséquent n'ont pas les connaissances / compétences pour l'enseigner efficacement.

Steve Evers
la source
7
Je vais clarifier mon commentaire; dans mon esprit, ils sont différents (CS! = SE). Donc, si je remplace CS et SE par 2 autres champs A, B, où A! = B, vous pourriez obtenir quelque chose comme Bowling Lessons! = Japanese History. Alors votre argument devient: le BL! = JH est-il une excuse pour ne pas enseigner correctement JH? Cette question est désormais absurde et doit être rejetée. Si vous avez vu un diplômé CS qui ne savait pas pourquoi vous utilisiez une table de hachage sur une liste chaînée, il a été mal formé. Si vous avez vu un diplômé CS qui a fait un mauvais code de refactorisation, cela peut être excusé.
Jeremiah Nunn
2
@Jeremiag Nunn: Pour utiliser votre analogie: l'histoire japonaise n'est pas enseignée en tandem avec le bowling. Je fais valoir que chaque programme CS enseigne en fait la programmation et qu'il utilise l'argument "CS! = SE" pour s'excuser de bien l'enseigner.
Steven Evers
2
Une autre pensée: le manque de compétences en SE dans un diplômé CS particulier est-il la faute de l'école ou de l'élève? Dans chaque classe, vous auriez probablement une compétence assez large, de compétente à horrible.
Adam Lear
2
@SnOrfus L'ingénierie logicielle est l'art de créer des logiciels. L'informatique est la théorie derrière le logiciel. Connaître les deux est idéal, mais ils sont toujours séparés. Une meilleure analogie (IMO) que celle de @ Jeremiah serait de construire des instruments plutôt que de les jouer.
dash-tom-bang
5
La note de bas de page sur les universitaires n'ayant pas à écrire du code maintenable est presque exactement le point. Ce n'est pas ce qui importe à CS.
dash-tom-bang

Réponses:

27

Je ne pense pas que ce soit un copout, mais plutôt une affirmation que l'informatique n'est pas le génie logiciel, ce n'est pas la programmation - c'est, bien, la science du calcul formalisé. Essentiellement, ce sont les mathématiques (en fait, de nombreux programmes CS ont commencé comme des programmes de mathématiques appliquées).

Je pense que le problème réside davantage dans l'industrie que dans le milieu universitaire. L'industrie voit un diplôme CS inscrit sur un curriculum vitae et pense: «Super, ce gars est bon avec les ordinateurs», et l'embauche pour faire tout ce qui touche à un ordinateur: informatique, programmation, développement de logiciels, peu importe. Ces choses ne relèvent pas nécessairement du domaine d'expertise d'un diplômé CS. À leur tour, beaucoup de gens qui aiment construire des ordinateurs ou jouer à des jeux vidéo entrent dans un programme CS s'attendant à faire ce genre de choses, et obtiennent une grossière surprise; c.-à-d., beaucoup d'étudiants qui entrent en CS n'y appartiennent pas vraiment et seraient mieux dans un programme d'études plus ciblé.

Deuxièmement, il y a un temps très limité pour enseigner la CS - une matière très large - dans un programme de premier cycle typique. Mon programme de premier cycle comptait 8 cours CS (pour un BA) ou 12 cours CS (pour un BS), plus tous les cours de mathématiques requis. Ce n'est pas beaucoup de temps pour enseigner le CS et les mathématiques et la programmation et le génie logiciel, donc à un moment donné, vous devez décider ce qui est important et ce qu'un étudiant peut ramasser par lui-même.

Ce dernier point est crucial: je pense qu'un bon étudiant - dans n'importe quel domaine - explorera les idées par lui-même. J'ai un diplôme CS, mais je pense que je suis sorti de l'université en tant que développeur décent, parce que j'ai étudié et écrit des logiciels par moi-même . L'université n'est pas tout au sujet des classes; il s'agit également de donner aux étudiants le temps de développer leurs compétences de manière semi-autonome, tout en leur donnant de précieux conseils.

Je maintiens que l'enseignement de la théorie - CS, mathématiques, etc. - est tout aussi important, sinon plus , que l'enseignement de compétences spécifiques liées à l'emploi. Si vous enseignez à un étudiant le pourquoi des méthodes et des techniques, et pas seulement le quoi , vous vous retrouverez avec quelqu'un qui est beaucoup plus adaptable lors de l'application de ses connaissances. Par exemple, je suis allé dans une "école Java" très décriée et j'ai donc été enseigné en Java, mais j'ai également suivi des cours de théorie des langages de programmation, qui expliquaient pourquoi derrière de nombreux langages; en conséquence, j'ai appris à écrire de bien meilleurs logiciels que si je n'avais pas cette formation. Bien sûr, je n'écris pas de logiciels dans Haskell dans mon travail de jour, mais la connaissance de beaucoup de théorie du langage de programmation m'a permis de comprendre quea été applicable à mon travail de programmeur.

Je pense aussi que l'industrie attend trop des étudiants. L'industrie veut réduire ses propres coûts, donc au lieu de former de nouvelles recrues pour leur emploi, ils s'attendent à ce que les collèges deviennent des écoles de métiers / techniques; en fait, ils veulent que les collèges fassent leur formation à leur place. On ne peut pas s'attendre à ce que les diplômés du collège sachent tout ce qui sort du collège. Être un bon développeur est autant une question d'expérience que de connaissance (en particulier dans un domaine relativement jeune comme le développement de logiciels).

mipadi
la source
C'est exactement ma pensée, mais expliquée bien mieux que ma réponse.
Jeremiah Nunn
+1: Tant de bonnes choses ici, je détesterais choisir une chose, mais étant donné que CS est originaire de mathématiques appliquées, cela n'implique-t-il pas l'importance de son application - dans ce cas, la programmation?
Steven Evers
2
@SnOrfus: Dans la mesure où la programmation est appliquée aux mathématiques, oui. Mais tout comme l'informatique! = Génie logiciel, programmation! = Génie logiciel non plus.
mipadi
1
@David Thornley: Premièrement, moi-même et tous ceux que je connais qui ont pris la physique ont utilisé un oscilliscope pour étudier les ondes. Pourtant, l'analogie ne tient pas. Les étudiants apprennent déjà la programmation dans le cadre d'un diplôme CS. Vous étiez, j'étais, nous tous qui avons assisté à une non-vénération. Ce n'était même pas une section unique d'un cours. C'est une partie intégrante d'au moins 1-2 classes par semestre.
Steven Evers
2
+1 pour avoir expliqué que l'école (collège, université, peu importe) devrait vous apprendre à pêcher et pas seulement vous donner le poisson
Emiliano
25

Une partie du problème ici est le fait que 4 ans ne suffisent pas pour devenir un ingénieur logiciel raffiné. Étant donné que nous voulons que le premier cycle soit exposé à plus de choses que des cours de mathématiques et de CS et qu'il y ait beaucoup de mécanique pure à apprendre (algorithmes, structures de données, syntaxe du langage), nous ne pouvons pas nous attendre à ce qu'un CS vert soit un ingénieur logiciel.

Je serais d'accord que CS! = SE et je ne suis pas sûr que vous puissiez simplement aller à l'école et devenir SE (même avec un Master)

bigtang
la source
+! 1: Je vois votre point, mais ce n'est pas seulement «poli». Beaucoup manquent de compétences très basiques.
Steven Evers
Je suppose que cela dépend de ce que vous considérez comme des compétences très basiques. Par exemple, SQL est une compétence de base dans mon esprit, mais j'ai trouvé que mes diplômés CS sont en fait assez faibles et je pense que c'est à prévoir. Si vous dites qu'ils sont faibles dans la syntaxe du langage ou la modularité de base ou les concepts de POO, alors c'est un gros problème et je commencerais à chercher des diplômés dans différentes écoles
bigtang
Je programme professionnellement depuis 14 ans. J'ai regardé SQL et je peux même créer des requêtes de base, mais même ces compétences de base ne sont arrivées que l'année dernière. SQL n'est pas CS. SQL est une implémentation de la théorie des bases de données, qui est CS.
dash-tom-bang
@ dash-tom-bang: Considérez-vous les instructions de flux de contrôle dans les langages impératifs comme des bases? Je peux confirmer qu'il existe des diplômes totalisant de nouveaux diplômés CS qui ne connaissent pas la majorité d'entre eux.
Steven Evers
Je ne considérerais pas la mise en œuvre du contrôle de flux dans un langage particulier comme faisant partie des «bases de l'informatique». Cependant, si quelqu'un ne comprend pas le contrôle de flux comme un concept, il n'a pas appris le CS.
dash-tom-bang
10

CS n'est en fait pas SE. Et les gens semblent confondre les deux tout le temps, même en l'admettant. L'informatique devrait vraiment être renommée quelque chose comme la informatique, ou la science de l'informatique. En fait, l'informatique a très peu à voir avec les ordinateurs. C'est la théorie des graphes, l'analyse d'algorithmes, les structures de données, etc.

Les gens veulent supposer qu'un nouveau diplômé CS est en fait un diplômé ITT; ils veulent quelqu'un qui a été formé dans une vocation. L'informatique est une science, la programmation est un art. Ce ne sont pas les mêmes.

C'est comme demander pourquoi un nouveau diplômé en physique n'est pas un bon ingénieur automobile. C'est idiot.

Jeremiah Nunn
la source
2
La programmation est un métier, pas un art.
dash-tom-bang
6
La programmation est de l'artisanat, de l'ingénierie et de l' art.
Maciej Piechotka
2
Je ne le renommerais pas. Qu'est-ce que l'informatique, mais la science des ordinateurs? en d'autres termes, l'étude des machines à calculer, ce qui implique l'étude du calcul.
Michael K
1
Doit être renommé parce que les gens ont fait de la confusion comme vous. connaissez-vous Edsger W. Dijastra? il a dit un jour: "l'informatique ne concerne pas plus les ordinateurs que l'astronomie ne concerne les télescopes". :)
boos
1
L'art crée la beauté; l'artisanat crée l'utilité. L'art est créé pour sa beauté; le métier est créé pour son utilité. L'art pourrait être utile; l'artisanat pourrait être beau. Le génie logiciel crée un utilitaire; par conséquent, le génie logiciel est un métier.
systemovich
8
  1. Aux États-Unis au moins, l'éducation dans son ensemble est devenue une affaire de profit. Les écoles bousculent les programmes dans tous les domaines pour augmenter les inscriptions. Il y a plus de gens à l'université qui n'y appartiennent plus que jamais. Apprendre des techniques appropriées n'est pas quelque chose que vous pouvez enseigner facilement, alors ce n'est pas le cas.
  2. Personnellement, je mettrais davantage l'accent sur le SE qu'il n'y en a habituellement, mais je pense que le CS en tant que programme est moins approprié pour les personnes qui cherchent à entrer dans l'industrie. Je pense que davantage d'institutions devraient proposer un programme pratique d'ES.
ChaosPandion
la source
+1 pour # 1. Je l'ai remarqué quand je suis allé à l'école. C'était une école à but lucratif et je sentais que beaucoup d'étudiants n'étaient pas qualifiés pour y être. De plus, l'école ne recevait que de l'argent par cours et en cas d'échec d'un élève, ils n'obtenaient plus d'argent de leur part, donc très souvent les enseignants faisaient de leur mieux pour dépasser les élèves. Nous avons eu au moins une personne diplômée avec son diplôme qui, je ne pense pas, pourrait même écrire un programme Hello World dans leur choix de langue!
Rachel
depuis que vous avez abordé le système éducatif américain et le rôle du profit, voici une chorale obligatoire de Milton Friedman: youtube.com/watch?v=W3Seg0JE1PM
Job
7

L'argument CS! = SE est-il une excuse ou une excuse pour ne pas enseigner correctement les compétences en 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 toute-puissante de prendre une telle décision: forceriez-vous de mettre l'accent sur un bon enseignement de la programmation dans les cours de CS?

Ce serait comme forcer les astronomes à apprendre les détails de la construction de télescopes. Ou forcer les programmeurs à apprendre les détails de la construction d'ordinateurs. Des choses connexes, mais un homme n'a pas besoin de tout savoir.

Joonas Pulakka
la source
6

Oui, cela me semble être une dérobade et un signe de l'immaturité de CS en tant que discipline académique.

Un programme BS accrédité par l'American Chemical Society vous oblige à avoir réussi des cours spécifiques pour démontrer des compétences particulières à la fois en théorie (cours magistraux) et en pratique (cours de laboratoire). À l'heure actuelle, CS n'a rien de tel pour autant que je sache.

Un de mes professeurs diplômés était un théoricien de la tour d'ivoire dont le bureau n'a jamais été souillé par quelque chose de plus physiquement chimique qu'un bocal à poisson avec Magic Rocks, mais quand j'étais son TA pour la chimie de première année, il s'est également avéré être un chimiste de banc assez compétent. .

Quand je travaillais comme chimiste industriel en peinture, ils se moquaient de l'idée que j'aurais un baccalauréat et que je serais incompétent au laboratoire. Bien sûr, les détails de ce que je faisais en laboratoire étaient différents de ceux que j'avais en classe à l'école, mais les principes étaient les mêmes - nous avons simplement utilisé un mélangeur de peinture et une boîte, plutôt qu'un bécher et un agitateur magnétique .

Si l'on devait appliquer la même approche à la CS, les détails de ce que l'on pourrait enseigner en tant que compétences pratiques de développement de logiciels pour un programme CS / SE pourraient varier d'une école à l'autre et au fil du temps. Mais il me semble juste fou qu'il soit acceptable que quelqu'un puisse obtenir un diplôme dans le domaine et ne pas être capable d'écrire, de déboguer et de maintenir une sorte de code. (Bien sûr, c'est ainsi que les choses se passent dans de nombreux programmes CS, mais c'est toujours fou.)

Bob Murphy
la source
Ce n'est pas fou, c'est une épidémie. Environ 90% du code que j'ai vu écrit par mes pairs est aussi maintenable que la tour penchée de Pise.
Marcel Valdez Orozco
5

Je suis d'accord que 4 ans ne sont que le temps suffisant pour leur donner une bonne base sur laquelle grandir. Cependant, je pense qu'une chose qui aide vraiment, c'est lorsque les gens de l'industrie s'impliquent dans l'élaboration du programme d'études et même l'enseignement en classe. L'année dernière, j'étais boursier de l'industrie dans une classe de développement logiciel dans une université locale. Ce fut une expérience très révélatrice 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 "réelles" qu'ils ne l'avaient fait auparavant. Ce que nous avons découvert, c'est que, comme la plupart des instructeurs ne développent pas de code largement utilisé et maintenu, le fait de faire appel à quelqu'un de l'industrie a aidé à identifier et à enseigner les compétences nécessaires pour le faire.

Beth Whitezel
la source
J'aimerais essayer quelque chose comme ça.
ChaosPandion
Vous devriez contacter votre université locale et voir si elles ont quelque chose comme ça. Où vous situez-vous?
Beth Whitezel
3
  1. Oui, c'est un copout à 100%, ils devraient enseigner des compétences à long terme qui seront utiles tout au long de notre carrière. Que votre intention soit d'aller dans le monde universitaire ou dans l'industrie, vous devrez être en mesure de programmer d'une manière qui peut être maintenue, même si ce n'est que par vous-même.

  2. 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é d'implémenter un algorithme, je noterais votre note.

Même si vous faites de la recherche CS pure, vous devrez probablement créer du code pour démontrer vos idées. De bonnes compétences en programmation vous seront utiles à un moment donné, alors pourquoi ne pas commencer au collège.

JustJohn
la source
Les compétences à long terme sont le CS. "Java" n'est pas une compétence à long terme, pas plus que .NET, SQL, Pascal ou COBOL. À moins que par «à long terme», vous ne vouliez dire «être heureux d'avoir un emploi quand ils ont besoin de quelqu'un pour entretenir ces anciens systèmes».
dash-tom-bang
Bien que je convienne que les compétences de base (CS) sont nécessaires, je veux dire écrire du code qui est maintenable et facile à lire quel que soit le langage de programmation dans lequel il est écrit. Donc, à long terme, des compétences qui vont au-delà des technologies utilisées.
JustJohn
1
IMHO CS est nécessaire pour pouvoir aborder un problème plus complexe, beaucoup de gens ici, n'ont pas besoin d'un degré CS pour écrire du code, mais si vous devez gérer une matrice 10x10 millions de données et le manipuler, je ne peux pas comprendre comment un SE peut le gérer sans diplôme CS.
boos
3

Je pense que notre problème est que nous sommes beaucoup plus comme des médecins que nous sommes prêts à l'admettre ... Nous avons cette idée qu'un diplôme de quatre ans devrait préparer les étudiants à écrire des logiciels. Ce n'est même pas proche.

Notre profession en est à ses balbutiements par rapport à d'autres disciplines. Peut-être que la question devrait être: comment pouvons-nous améliorer la CS afin que les étudiants qui obtiennent leur diplôme soient mieux adaptés pour devenir des membres productifs d'une équipe de développement de logiciels dans un délai beaucoup plus court?

Nous devrions peut-être ressembler davantage à la médecine. Quatre ans de travail de base (diplôme CS) puis résidence - pratique de l'artisanat 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 qu'en tant que discipline, nous avons juste besoin de mieux formaliser cela.

Chris Holmes
la source
Ou un programme Master Craftsman / Apprentice
Austin Salonen
1
Le programme MD n'est pas un programme scientifique. Vous voulez étudier la science, vous prenez la biologie. Si vous avez un problème médical, cependant, ne le confiez pas à un biologiste.
David Thornley
C'est une très bonne idée: formaliser le fait que le génie logiciel est aussi une question d'expérience. Il en va de même pour les avocats et les médecins
Emiliano
Mais de quoi parle-t-on de David? Combien d'entre nous ont un diplôme en sciences sociales et passent ensuite notre carrière à faire de l'informatique? Ce que la plupart d'entre nous faisons vraiment, c'est aller dans le monde et pratiquer le métier du développement logiciel. C'est la même chose qu'un MD: ils "pratiquent" la médecine. Nous pratiquons la création d'applications.
Chris Holmes du
@Chris Holmes: Je suis vraiment ennuyé par l'idée qu'un diplôme CSci est censé vous transformer en programmeur prêt à embaucher dans un emploi utilisant le dernier langage à chaud. Il y a beaucoup de place pour ce type de diplôme ou de certificat, probablement beaucoup plus que le véritable CSci. Je pense que le développement de logiciels est analogue à la pratique de la médecine ici, mais vous ne recevez pas votre MD des départements de biologie ou de psychologie, vous l'obtenez de l'école de médecine. C'est un diplôme très respecté, mais ce n'est pas un doctorat.
David Thornley
3

J'ai un diplôme CS, et pendant toute une année de mon programme, il n'y a pas eu de programmation, seulement de la théorie. On nous a dit que nous n'obtenons pas de diplôme en programmation mais en informatique. Si vous voulez être programmeur, allez au collège communautaire.

Nous avons appris des algorithmes, des modèles de conception et beaucoup de théorie sur la résolution de problèmes sans langage spatial. Les langages de programmation vont et viennent, mais la théorie sous-jacente reste la même.

Donc, à votre première question, non, je ne pense pas que CS! = SE soit un copout. C'est un fait.

Pour votre deuxième question, non, je ne pense pas que je le ferais. Comment enseignez-vous correctement la programmation? Au-delà des boucles, ifs, méthodes, classes et POO, quelle serait la «programmation appropriée» et comment la rendriez-vous pertinente pour n'importe quel langage de programmation? Vous avez besoin d'expérience en écriture de code, quelque chose qu'un diplôme de 4 ans ne peut pas vous préparer.

Une chose que je ferais cependant est de donner un cours sur le développement dans le monde réel. Le contrôle des sources, le suivi des tickets / bogues, le traçage du code et tout ce jazz serait un bon début pour préparer tous les futurs diplômés à ce à quoi ils seront confrontés dans leurs nouveaux emplois.

Je pense que c'est à nous que nous embauchons un nouveau diplômé pour comprendre qu'il n'écrira probablement pas de code primé. Ils ont besoin d'orientation et de direction.

Tyanna
la source
++ - excellents points. Ce serait bien si les programmes CS offraient une classe ou deux sur ce truc du "monde réel", je suis d'accord. Nous en avions parlé à mon université (en 1993) mais cela n'a jamais abouti.
dash-tom-bang
Comment étiez-vous censé démontrer votre compétence dans les cours qui ont constitué l'année de la théorie de la non programmation uniquement? Examens purement écrits?
Carson63000
@ Carson630000 - missions écrites, parfois écrivant des diagrammes d'état, parfois écrivant des essais indiquant comment nous aborderions et résoudrions un problème ou comment nous appliquerions divers concepts CS. Cela nous a obligés à comprendre la théorie et non un langage de programmation spécifique.
Tyanna
2

Il est important pour l'université de trouver un bon équilibre entre les connaissances théoriques et les compétences pratiques. En suivant différents cours, j'ai appris les deux. Au cours des premières années, il y avait beaucoup de mathématiques et d'algorithmes / structures de données. Ce qui a suivi était un choix: soit vous pouviez continuer à apprendre l'informatique (sorte de parcours artistique, où vous pouviez par exemple suivre des cours avec des algorithmes sophistiqués de correspondance de chaînes) ou vous concentrer sur le génie logiciel. Vous deviez encore obtenir une solide expérience en programmation pendant cette période.

J'ai choisi le génie logiciel, car je n'ai jamais été très intéressé par les problèmes abstraits. Mais même ceux qui aimaient l'informatique pure devaient:

  • programmer un petit système de fichiers dans l'espace utilisateur, créer un linuxmodule noyau et modifier le noyau lui-même, écrire un jeu orienté objet pur dans SmallTalk,
  • rédiger son propre protocole de communication puis en mettre en œuvre un, choisi par l'enseignant (c'était vraiment cool, quand les programmes de deux élèves pouvaient facilement communiquer, bien qu'ils n'aient pas collaboré auparavant),
  • créer un plus grand projet Javadans une équipe de quatre personnes,
  • construire un projet de programmation fonctionnelle,
  • écrire plusieurs programmes solides Cpour la programmation parallèle (les idées étaient abstraites, mais les critiques étaient assez dures, comme perdre des points pour ne pas fournir une sortie appropriée, lorsque le programme échouait, comme un bon unix programdevrait le faire),
  • créer un portail web en utilisant un framework web (nous avons choisi djangoce qui m'a fait aimer ce framework),
  • créer un assez gros programme en utilisant LAMP(j'ai encore des cauchemars php, mais utilisé à la postgresqlplace de MySQLet je suis très heureux de le savoir DBMSmaintenant),
  • et si quelqu'un choisissait, il pourrait écrire un programme pour sa thèse de maîtrise - j'ai écrit pythonun programme de bureau de 10k lignes en utilisant PyQt.

Peut-être qu'il y avait d'autres projets, mais je les ai simplement oubliés maintenant.

Mon point est: tout dépend de l'école. J'ai une grande aversion pour une approche d'ingénierie logicielle pure, où Javaest la langue principale. J'ai dû aider un ami une fois, qui fréquente une telle école et a dû écrire un programme pour une programmation parallèle. Je devais écrire pour lui au fond, parce qu'il cependant, que sizeof(some_string)dans Cdonne la longueur de la chaîne.

Je vais être honnête: je détestais les mathématiques, j'avais mal, quand je devais me préparer à des tâches abstraites, qui seraient servies lors d'examens d'algorithmes / structures de données. Mais cela me donne un certain avantage: je peux penser de manière très abstraite. C'est comme lorsque vous apprenez les arts martiaux et ne gardez pas votre garde (du moins dans ceux où vous êtes censé le faire). L'entraîneur ne cesse de venir et de vous frapper dans la tête, lorsque vous baissez les mains, parce que vous avez oublié ou parce que vous êtes trop fatigué pour les garder. Mais après un certain temps, il vous suffit de les garder. Et il devient vraiment difficile de vous frapper au visage. De même pour les problèmes algorithmiques abstraits. Comprenez le contenu de l' introduction aux algorithmes et très peu de choses surprendront au travail.

gruszczy
la source
Cela ressemble à un bon programme. Un peu de théorie. Beaucoup de pratique.
Mike Dunlavey
1

Je pense que la réponse est oui (en quelque sorte).

Le truc, c'est qu'il n'est pas possible d'enseigner aux enfants dans une courte période de programmation. Ils devraient être formés à la réflexion logique des programmeurs, comment résoudre (à plus petite échelle) les problèmes du programmeur.

Je suis certain que les programmes de l'école devraient être révisés. Dans mon tout petit pays du "tiers-monde", heureusement, un effort est fait pour que cela se produise. Nous sommes le premier pays à mettre en œuvre le programme OLPC; http://laptop.org/en/

Trufa
la source
1

D'après 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 de l'informatique, et SE comme une branche spéciale de CS qui enseigne explicitement la programmation. Imo, tous ceux qui ont BS dans CS, doivent savoir comment écrire du bon code optimisé (même si la programmation n'est pas sa spécialité). Alors oui, si j'avais une position toute-puissante de prendre une telle décision, je forcerais les étudiants à acquérir de bonnes compétences en programmation.

Ilija Eftimov
la source
Mon diplôme est intitulé Informatique et génie logiciel, et était conçu pour vous donner le meilleur des deux mondes, c'est-à-dire être un programmeur compétent et connaître suffisamment la théorie pour pouvoir poursuivre des études supérieures ou de la recherche. Je pense que c'était une bonne approche.
Michael K du
1

En supposant que le but est de former de bons ingénieurs logiciels (programmeurs) parce que le monde en a besoin, est-il correct de répondre en disant ce que je pense devrait être enseigné?

Tout d'abord, cela est important car actuellement le transfert de connaissances est très inefficace. Lorsque les futurs programmeurs sont en classe, leur esprit est ouvert et ils absorbent ce qu'ils ont appris. Dans le même temps, les professeurs (j'en étais un) sont trop souvent plus intéressés à remplir le pipeline des études supérieures avec des étudiants qui peuvent 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 affirmer que ce n'était pas leur travail . C'est le travail du monde réel.

Ensuite, lorsque les étudiants deviennent programmeurs dans le monde réel, sont-ils désireux d'apprendre de leurs nouveaux collègues? Pas d'après mon expérience. Au contraire, ils sont désireux de diffuser tout évangile qu'ils ont acquis à l'école. Je me souviens, en tant qu'étudiant et jeune pratiquant, de penser à quel point il allait être difficile de favoriser de nouvelles idées parmi les vieux mecs fous. Maintenant que je suis un vieil idiot, je vois à quel point il est difficile d'ouvrir les yeux de nouveaux programmeurs sur la différence entre la théorie et la pratique.

J'étais étudiant en génie, en génie mécanique et plus tard en génie électrique. Un élément fondamental de cela était a) les fondements mathématiques et b) la résolution pratique des problèmes. Le génie logiciel devrait être comme ça, pas seulement la programmation.

Je pense que le génie logiciel (programmation) devrait être enseigné avec suffisamment d'informatique pour être une connaissance pratique - la théorie de base des automates et la théorie de l'information. Celles-ci n'ont pas besoin d'être approfondies. Une fois les compétences de base en programmation enseignées, il devrait y avoir des projets coopératifs de taille non triviale. Une partie essentielle de ceux-ci devrait être la proposition et la considération de solutions alternatives à des 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 la solution universelle. Enfin, il devrait y avoir une coopération et un partenariat entre l'industrie et le monde universitaire, afin que les idées et les améliorations puissent être communiquées dans les deux sens, ce qui améliore considérablement le contrôle de la qualité.

Mike Dunlavey
la source
0

Ceux qui le peuvent, le font; ceux qui ne peuvent pas enseigner.

Dans mon université, la base de connaissances des enseignants est cruellement déficiente. J'ai vu des enseignants avoir du mal à comprendre comment représenter des tables semi-structurées en XML tout en détenant un doctorat en conception de base de données. J'ai vu mon professeur d'assemblage me demander ce que fait mon code quand c'est son extrait de code que j'ai 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 en cascade, mais plus rapidement, que le modèle de processus de développement itératif a et ne peut avoir que 3 itérations parce que c'est ce que l'image que le livre utilise comme exemple illustre. Un de mes professeurs ne savait même pas ce qu'était une autre déclaration.

Je ne pense pas qu'ils «s'en sortent» ou qu'ils fassent des excuses, je crois vraiment qu'ils font du mieux qu'ils peuvent avec leurs expériences, qu'ils ont très peu.

Je suis d'accord avec les autres personnes qui postent ici que 4 ans ne suffisent pas pour devenir un programmeur chevronné, mais l'expérience que mes professeurs ont eue ne suffit pas non plus pour les rendre chevronnés. C'est un peu comme dans Ender's Shadow, où Bean remarque que les mesures utilisées par les enseignants à l'école de bataille sont insuffisantes parce que la dernière guerre qui est la règle directrice, était trop courte pour montrer vraiment ce qui est réellement nécessaire. En d'autres termes, les enseignants faisaient de leur mieux, mais n'avaient pas l'expérience nécessaire pour savoir ce qui était vraiment nécessaire pour faire un bon commandant (ou un bon programmeur dans ce cas).

Malfist
la source
3
Je pense que beaucoup de vos exemples ne sont évidemment que des cas où votre professeur essaie de simplifier les choses à votre avantage. Those that can, do; those that cannot, teach.Je ne suis pas du tout d'accord non plus: les carrières académiques et industrielles conduisent à des modes de vie complètement différents. Une grande partie de la recherche mondiale provient d'universitaires. Et je ne vois pas comment vous avez répondu à la question d'origine.
Personne
2
Qu'est-ce que XML a à voir avec la conception d'une base de données, outre le fait que l'on pourrait, si on n'était pas intéressé par les performances, utiliser XML comme magasin de sauvegarde pour une base de données? Cela ne veut pas dire que certains enseignants peuvent manquer le point (je me souviens avoir discuté avec un instructeur des points supprimés en raison de «commentaires excessifs» lorsque le programme à ce point enseignait «commenter comme le vent»), mais c'est en quelque sorte surévalué. Si quelqu'un veut apprendre Java, il existe des moyens moins coûteux de le faire que de suivre un programme CS.
dash-tom-bang
1
Il y a aussi le fait que certaines universités sont pires que d'autres, et la vôtre peut avoir un département CS particulièrement mauvais. Traditionnellement, les personnes CS diplômées ont été en mesure de gagner beaucoup plus d'argent dans l'industrie que dans le monde universitaire, donc ceux du monde universitaire étaient ceux qui voulaient vraiment être là et ceux qui ne pouvaient pas occuper un emploi dans le monde réel. J'ai vu les deux, et je soupçonne que le ratio varie d'une université à l'autre.
David Thornley
@ dash-tom-bang, XML est un exemple presque parfait de bases de données semi-structurées. en.wikipedia.org/wiki/Semi-structured_model
Malfist
1
XML utilisé comme celui-ci est toujours une implémentation d'une théorie de base de données. Ce n'est pas lui-même la théorie.
dash-tom-bang
0

Les informaticiens et les ingénieurs logiciels sont différents. Les scientifiques sont les gars qui effectuent les expériences folles et proposent les algorithmes que nous, ingénieurs logiciels, utilisons pour être meilleurs.

Pensez à des chimistes qui mènent des expériences pour une entreprise pharmaceutique. Ils ne se soucient pas de la façon de produire le produit chimique en masse. Ils ne se soucient pas non plus du marketing, de l'emballage, de la distribution ou de tout ce qui arrive au médicament après l'avoir découvert. Enfer, ils ne se soucient même pas du processus de certification. Tout ce qui leur importe, c'est de trouver un produit chimique qui a un effet lorsqu'il est administré aux sujets testés. Il incombe à l'entreprise de la dépasser.

Les informaticiens sont comme ces chimistes. Tout ce qu'ils font, c'est tester des théories avec du code. Ils ne se soucient pas de la maintenabilité du code. Ils prouvent une théorie et passent à la suivante. Quelqu'un d'autre emballe cet algorithme et le rend utile pour les masses et nous avons la vision MP3 ou par ordinateur avec le Kinect ou la vidéo en streaming sur votre iPhone. Donc CS! = SE est un argument valide.

WRT la deuxième partie de votre question. Si je proposais un diplôme en théorie de la musique, il pourrait y avoir un cours obligatoire en écriture de chansons ou quelque chose comme ça, mais ne demanderait à personne d'étudier un instrument. C'est à l'étudiant de rechercher les connaissances qu'il veut. L'informatique n'est pas du génie logiciel ... si vous voulez apprendre le SE, prenez une double majeure.

Michael Brown
la source
0

Edsger Wybe Dijkstra était un informaticien néerlandais.

Il a reçu le prix Turing de 1972 pour ses contributions fondamentales au développement de langages de programmation , a déclaré un jour:

"LA SCIENCE INFORMATIQUE N'EST PLUS SUR LES ORDINATEURS QUE L'ASTROMIE SUR LES TÉLESCOPES."

CS est VRAIMENT DIFFÉRENT D'UN SE. (CS! = SE).

Un CS est un scientifique qui a acquis des connaissances en INFORMATIQUE.

L'INFORMATIQUE ou l'informatique (parfois abrégé CS) est l'étude des fondements théoriques de l'information et du calcul et des techniques pratiques pour leur mise en œuvre et leur application dans les systèmes informatiques.Elle est fréquemment décrite comme l'étude systématique des processus algorithmiques qui créent, décrivent, et transformer l'information.

L'informatique a de nombreux sous-domaines par exemple:

  • Informatique théorique
  • Théorie du calcul
  • Algorithmes et structures de données
  • Éléments informatiques et architecture
  • Multiprocessing
  • Science informatique
  • Intelligence artificielle
  • Systèmes logiciels

Beaucoup d'entre nous n'ont besoin d'aucune de ces compétences dans leur travail quotidien ou du moins un peu.

SOFTWARE ENGINEER (SE) est une profession dédiée à la conception, l'implémentation et la modification de logiciels afin qu'ils soient de meilleure qualité, plus abordables, maintenables et plus rapides à construire. Il s'agit d'une "approche systématique de l'analyse, de la conception, de l'évaluation, de la mise en œuvre, des tests, de la maintenance et de la réingénierie d'un logiciel en appliquant l'ingénierie au logiciel"

En tant que connaissance CS, il est supposé avoir les connaissances nécessaires pour gérer de vrais problèmes complexes sans connaître un très bon langage de programmation. À mon humble avis, ici, nous pouvons ouvrir un autre fil, où un DEGRÉ pour moi est UNIQUEMENT UN POINT DE DÉPART et non un OBJECTIF FIN.

En tant que connaissances SE, il est censé avoir les connaissances nécessaires pour gérer la production de ce problème complexe réel et gérer le développement d'une équipe ou d'un projet dans ce domaine.

Ensemble, faites la recherche scientifique d'un CS en sciences appliquées avec l'aide d'un SE.

Je ne veux pas dire que CS est meilleur que SE, je veux dire CS! = SE.

Ce genre de question est la même que celle que les non-informaticiens se posent lorsqu'ils se demandent pourquoi, en tant que programmeurs, vous ne pouvez pas résoudre par téléphone le problème du programme X, Y, Z sur le système d'exploitation J, M, N. ;)

En fait, je m'ennuie vraiment de coder après 10 ans de développement de systèmes Unix dans le domaine de la sécurité et après avoir lu cette question, je comprends, j'ai besoin d'étudier plus d'informatique et moins de langage informatique et de système informatique ou de protocole!

Personne à mon travail ne peut faire la différence entre SE et CS! c'est vraiment une mauvaise chose.

Si vous pensez qu'un CS peut être une excuse pour de mauvaises compétences en programmation, vous ne savez vraiment pas ce que c'est qu'un CS et ce qu'est SE.

Je suppose que vous êtes un SE, savez-vous par exemple que tous les langages, tous les paradigmes et toutes les choses liées au langage informatique peuvent être exprimés mathématiquement dans un ensemble de fonctions récursives partielles et quoi que vous appreniez une nouvelle langue, TOUT NOUVEAU LANGAGE, vous n'êtes que apprendre une nouvelle abstraction sur la même fonction partielle récursive?

s'amuser :)

boos
la source