Quelles compétences sont essentielles pour les programmes professionnels qui ne sont pas couramment enseignés dans les écoles? [fermé]


14

Je suis une majeure en informatique de première année. Je suis allé à un salon de l'emploi, j'ai remis des CV, à ma grande surprise j'ai eu une interview et finalement un stage en tant que développeur.

J'ai expliqué à l'intervieweur (qui sera mon patron) que je ne suis qu'une première année et que je n'ai pas beaucoup d'expérience en programmation. Il m'a simplement dit que parce que j'ai une solide formation en mathématiques (j'ai presque terminé mon baccalauréat en mathématiques, et j'ai quelques cours de diplômé à mon actif), il est confiant que j'irai bien.

Je réussis bien dans tous les cours de programmation mais je sens toujours que je suis désavantagé. En ce moment, je veux vraiment faire du bien dans ce travail quand il commence. Le travail utilisera principalement C #, mais en plus évidemment d'apprendre du C #, quelle est la compétence que vous souhaiteriez avoir apprise avant de devenir un vrai programmeur?

Tout conseil est grandement apprécié, mais si vous avez des livres en tête, dites-le-moi. Merci!


8
cette question a été posée à plusieurs reprises sur ce site de différentes manières. veuillez d'abord chercher et ensuite demander. jetez un oeil à la FAQ; programmers.stackexchange.com/questions/149970/… ; programmers.stackexchange.com/questions/46716/…
tgkprog

3
J'ai fait des recherches et j'ai vu ces deux questions. Mais je ne suis pas concerné par l'apprentissage du design ou du développement web. Je souhaite apprendre ce que de nombreux programmeurs pensent qu'ils auraient vraiment dû apprendre à l'école. Ces questions ont cependant d'excellents conseils, mais ce ne sont pas tout à fait ce que je recherche. Merci
Eric

+1 La seule compétence que je souhaiterais maîtriser avant de devenir programmeur à temps plein est de solides compétences en mathématiques, car les compétences en mathématiques sont sans doute la compétence la plus importante à posséder, car elles entraînent l'esprit à résoudre des problèmes et à apprendre de nouveaux concepts et en tant que programmeur, cela c'est surtout ce que je vais faire tous les jours.
Anthony

3
Workflow. Et réaliser que le code n'est pas un flocon de neige unique à la licorne. Appliquez le principe du moindre étonnement lors de la conception. Réfléchissez avant de le faire. La gestion de la complexité devient un aspect très important.
sleeplessnerd

1
En fait, je n'aime pas beaucoup travailler avec des gens ayant de solides compétences en mathématiques. Ils transforment tout en une formule mathématique au lieu d'appliquer les principes du génie logiciel. Le logiciel n'est PAS mathématique. Il est essentiel que vous écriviez votre code afin qu'il soit facile à comprendre.
Rob K

Réponses:


21

À l'école, vous apprenez à écrire du code. Ce que vous ne connaissez pas, c'est le reste du développement de logiciels. Les principales choses que je n'ai jamais apprises à l'école sont:

  • travailler au sein d'une équipe de développement
  • utilisation du contrôle de version
  • en utilisant un traqueur de bogues

Ce sont des compétences très importantes pour tout développeur, et vous ne les obtiendrez probablement pas en classe, malheureusement.


4
Travailler au sein d'une équipe de développement est à coup sûr un art subtil et complexe. Je ne comprends pas pourquoi le contrôle de version et le suivi des bogues sont toujours présentés comme un obstacle majeur pour les nouveaux développeurs. Ce sont certainement des outils importants, mais vous pointez la nouvelle personne vers les pages de manuel, un livre O'Reilly ou un tutoriel en ligne et ils peuvent ramasser l'utilisation du pain et du beurre en quelques heures. Pourquoi voudriez-vous perdre du temps en classe sur quelque chose comme ça?
Charles E. Grant

1
@ CharlesE.Grant Le contrôle de version est similaire à la programmation en ce sens que vous pouvez obtenir les bases en un temps relativement court, mais il faut de l'expérience pour l'utiliser efficacement. Et DVCS comme git et Mercurial prennent plus de temps à comprendre que CVCS comme svn.
Izkata

8
Je n'ai jamais eu de cours sur le maintien du code établi (ce qui est une partie importante du travail au sein d'une équipe de développement) et mon expérience en classe sur la façon de tester le code était minime.
Velociraptors

1
@ CharlesE.Grant: J'ai enseigné des cours de niveau supérieur en programmation et sujets connexes pendant plusieurs années. Même les étudiants diplômés ont du mal à comprendre pourquoi ils devraient utiliser un système de contrôle de révision de toute sorte. Et quand ils commencent à contrecœur à l'utiliser, ils semblent devenir très confus par elle très rapidement. +1 à Mason pour l'avoir soulevé comme un sujet important non appris.
Peter K.

1
+1 +1 +1, un pour chaque point. C'est tellement stupide qu'ils ne vous apprennent pas ces choses ... ou du moins ESSAYEZ de vous enseigner.
Radu Murzea

20

J'aimerais pouvoir savoir plus tôt dans ma carrière qu'en tant que développeur, j'ai un rôle très important dans l' entreprise . Je ne suis pas seulement un singe de code.

En tant que développeur, vous avez une main importante dans les parties de l'entreprise liées au logiciel sur lequel vous travaillez.

Si votre entreprise n'écrit pas de tests pour son code, commencez à écrire des tests maintenant.

S'ils ne suivent pas les bogues, trouvez maintenant un outil de suivi des bogues approprié.

Si votre patron veut que vous commenciez immédiatement à travailler sur une animation de fantaisie pour l'écran de démarrage de votre application de feuille de calcul - mais vous avez encore des dizaines de bogues à corriger et plusieurs fonctionnalités critiques inachevées avant la prochaine date limite de publication du client - discutez de la priorisation correcte du travail .

Même si vous n'êtes qu'un «employé normal», agir comme un consultant est un excellent moyen de vous démarquer des autres développeurs qui écrivent simplement du code et n'agissent pas comme s'ils avaient un intérêt direct dans l'entreprise.


9

Mon école ne m'a jamais appris à résoudre des problèmes. Ils m'ont appris la mécanique du codage, mais pour pouvoir étudier un problème, le comprendre et trouver une solution, c'est quelque chose qu'ils n'ont pas enseigné. Cela demande de la patience, de la rigueur et de l'intuition en plus de la compréhension d'un langage de programmation.

Ils n'ont pas non plus enseigné le travail d'équipe, le contrôle de version et l'importance d'écrire du code facile à maintenir. Ils n'ont également pas beaucoup appris sur la façon de tester les logiciels. Ils ont peut-être abordé les tests unitaires, mais ils ne se sont pas trop plongés dans les concepts de tests d'acceptation, de tests de régression, etc.

Avertissement: je suis allé au collège dans les années 80. Cependant, j'en vois des preuves chez des personnes que j'engage aujourd'hui - de nouveaux diplômés qui ont très peu de connaissances sur le monde réel de la programmation: contrôle de version, test, codage propre, compétences en débogage, etc.


+1 pour la partie test. À mon université, ils ne l'enseignent pas non plus. J'ai eu 1 classe (oui: une) où le professeur a mentionné les tests unitaires ... pendant environ 3 minutes. C'est ça.
Radu Murzea

Je sais que c'est une réponse tardive, mais c'est l'une des choses qui ont rendu mon diplôme en mathématiques attrayant pour mes employeurs. Ce point de vue est certainement partagé par les employeurs également.
Eric

D'accord, dans de nombreuses écoles, les algorithmes (alias "résolution de problèmes") ne sont pas correctement enseignés, ou pas du tout enseignés, ou ne sont pas enseignés comment l'appliquer avec un langage de programmation, même si je dois être pl "agnostique".
umlcat

Hmmmm .... votre réponse ne pourrait pas être plus opposée à ce que j'ai vécu. Le but de l'école est de donner un contexte afin que vous puissiez étudier efficacement un problème, le comprendre et trouver des solutions. Un nouveau diplômé n'est peut-être pas «bon» dans ce domaine à la sortie de l'école, mais il doit certainement être formé et capable. À mon école, ils n'enseignaient pas du tout la programmation. Vous deviez apprendre à programmer (par vous-même) tout en apprenant les informations que le cours essayait de vous enseigner. Donc, là où vous obtenez, ils n'enseignent que la "mécanique du codage", c'est au-delà de moi ...
Dunk

... Dans des écoles décentes, vous n'obtenez pas de crédit pour simplement apprendre à coder. Si vous trouvez difficile d'utiliser le contrôle de version, vous avez des problèmes beaucoup plus graves qu'aucune scolarité ne pourra vous aider. Lorsque vous trouvez la façon définitive d'écrire du code facile à entretenir, écrivez un livre et devenez riche. Personne n'a encore résolu ce problème. Vous devez avoir manqué les parties à l'école où vous deviez remettre vos programmes pour être testé. Les tests d'acceptation / de régression sont spécifiques à l'industrie et sont mieux enseignés sur le tas en le faisant à la manière de l'entreprise plutôt qu'à l'école.
Dunk

7

À mon avis, certaines des choses les plus importantes non apprises (ou correctement apprises) à l'école sont:

  • Comment utiliser correctement et IDE; utiliser toute la puissance d'un IDE moderne offre une énorme augmentation de la productivité: refactoring automatique, navigation dans le code, intégration VCS, analyse de code, complétion de code, etc.
  • Comment utiliser correctement un débogueur: débogage à distance, débogage d'applications multithread, évaluation express, etc.
  • Correction et maintenance des bugs; à l'université, ils ne vous apprennent presque rien à ce sujet, mais dans l'industrie, il est assez courant de corriger les bugs.
  • Comment travailler dans une grande équipe et sur un grand projet; fondamentalement à l'université, les projets sont plutôt petits par rapport aux grands projets industriels.
  • Comment écrire du bon code et comment mettre l'accent sur la lisibilité; cela vient avec l'expérience, mais il y a quelques livres qui vous enseignent les bases (Code complet, Code propre, etc.).
  • Comment utiliser un framework à pleine puissance, en utilisant sa personnalisation; à l'université, vous avez peut-être appris à utiliser certains cadres sur des scénarios très basiques; dans l'industrie, vous atteindrez les cas d'angle.
  • Comment comprendre et écrire du code après la spécification; vous apprendrez probablement comment écrire une spécification mais maintenant comment la lire et comment l'interpréter

VCS, les systèmes de suivi des bogues, les outils de construction, etc. sont des outils que vous devez apprendre pour pouvoir travailler avec une équipe; ils ne nécessitent pas beaucoup de temps pour être appris à un niveau de base, et sont assez simples après cela (au moins au début); la liste ci-dessus contient des subtilités qui, si elles sont connues, augmentent votre productivité.


aka "Programmation", ce n'est pas seulement connaître un langage de programmation, il y a un "environnement", un "écosystème", un "framework" ...
umlcat

4

La plus grande chose que je vois manquer aux nouveaux diplômés est une bonne compréhension du contrôle de version.

Si vous avez de l'expérience dans le développement de logiciels open source utilisant des référentiels de code source (comme GitHub ), vous avez une longueur d'avance mostsur vos camarades de classe.

La deuxième chose est une compréhension de la complexité ( big O). La plupart des gens qui sortent de l'université en ont entendu parler, mais n'ont pas encore développé de véritable logiciel là où il entre en jeu et ne comprennent donc pas sa véritable importance.

Lorsque vos ensembles de données sont si volumineux que la force brute ne les coupera jamais et que la compréhension d'autres techniques est utile et pouvoir deviner quand la force brute conviendra à la situation, c'est quelque chose que vous développez avec l'expérience et en faisant des erreurs.


1
Je pense que le manque d'éducation au contrôle de version commence à changer. Le contrôle des versions a été fortement souligné dans mon école.
Southpaw Hare

@SouthpawHare: Je ne dis pas que cela n'existe pas, ils l'ont même enseigné à l'époque. Juste que les gens qui sortent de l'Université avec cette expérience sont toujours en minorité. Et en tant que tels, ceux qui l'ont ont plus de valeur. Je ne suis pas d'accord pour dire que cela a beaucoup changé au cours des 20 dernières années.
Martin York

3

Comment bien déboguer, en particulier en utilisant un débogueur et en adoptant une approche appropriée pour s'attaquer à un bogue, c'est-à-dire découvrir ce qui est à l'origine, savoir pourquoi il est à l'origine et comprendre pourquoi votre solution le résout plutôt que d'essayer simplement et d'espérer.

La plupart des diplômés en informatique sont remarquablement pauvres en débogage et, par conséquent, mettent beaucoup plus de temps à corriger les problèmes que nécessaire et à créer plus de bogues.

D'autres choses telles que le contrôle de version, le suivi des bogues, etc. méritent d'être mentionnées, mais à mon avis, le manque d'approches sensées pour le débogage est un problème beaucoup plus important et qui nécessite plus d'apprentissage.


2

Quelle est la seule compétence que vous souhaiteriez avoir apprise avant de devenir un vrai programmeur?

D'après mon expérience, mon école ne m'a jamais appris à résoudre des problèmes.

D'après mon expérience, la programmation consiste à résoudre des problèmes. Dans mon école, ils vérifiaient seulement si vous pouvez écrire un programme sans erreur de syntaxe. Ce qui est réellement requis n'est pas fourni en entrée. La syntaxe est juste quelque chose que vous pouvez rechercher dans tous les livres si nécessaire. Mais la capacité de résoudre un problème ne peut être obtenue de n'importe où, sauf si vous vous entraînez bien et vous vous entraînez pour le résoudre.

Que ce soit de n'importe quel type, essayez de répondre au plus grand nombre de questions possible afin de vous faire confiance. Essayez de le faire avec une certaine passion dans votre esprit et vous y arriverez sûrement.


2

Prenez le temps d'apprendre quelques modèles de conception courants: usine, singleton, adaptateur, commande et observateur (mon collège ne les a pas enseignés).

Si l'entreprise utilise la méthodologie Agile pour le développement de logiciels, il serait utile de la comprendre.


2

Beaucoup de compétences dont vous aurez besoin en tant que programmeur professionnel sont presque impossibles à chacun dans un environnement universitaire / académique.

Ils ne peuvent provenir que d'une expérience de travail directement sur le terrain.

  • Apprendre à collaborer et à communiquer avec des personnes extérieures à votre "profession", comme les graphistes, les concepteurs de produits, les gestionnaires, etc.

  • Comprendre que votre travail n'est pas d'écrire du code, mais de donner vie à un produit. Plus facile à dire qu'à faire.

  • Savoir comment équilibrer les bonnes pratiques de codage avec des considérations pratiques. Acquérir la capacité de juger quand le code est «assez bon», «trop conçu» ou «doit être refactorisé».

  • Apprendre à surmonter vos propres faiblesses et insécurités. Acquérir la capacité de résister aux critiques. Lâcher votre ego. Apprendre ce que signifie prendre la responsabilité personnelle, puis la prendre.

Il est facile de lire tout cela. C'est une toute autre chose que de mettre cela en pratique. La seule façon est de le faire. Vous serez mordu plusieurs fois et cela vous fera probablement mal, mais vous en sortirez plus fort et meilleur.

Lecture pertinente: modèles d'apprentissage


1

Tout dépend de l'école. Dans mon collège, nous avons beaucoup de projets pratiques. Assez souvent en équipe et en utilisant différents contrôles de source. Je pense donc que certaines écoles se concentrent là-dessus.

Mais une chose que l'école n'enseigne pas: les détails. Très souvent, lorsque l'école enseigne une technologie ou une pratique (comme le développement Web, le développement de l'interface utilisateur JAVA, les bases de données avancées), elles ne feront qu'effleurer la surface et ne rentreront jamais dans les détails, ce qui serait nécessaire pour utiliser cette technologie ou cette pratique dans les affaires du monde réel. Vous obtiendrez un aperçu général des moyens possibles de résoudre vos problèmes, mais vous devrez vous apprendre les détails nécessaires.

Le seul moment où l'école enseigne quelque chose dans les détails, c'est quand il y a une solide base mathématique ou théorique derrière quelque chose. Des choses comme les langages formels ou les bases de données SQL font souvent partie intégrante du programme scolaire, car elles reposent sur une base mathématique et sont beaucoup utilisées en informatique ou en ingénierie.


1
  • exigences - se tromper et le repos est surtout un gaspillage
  • priorités (qui présentent dans quelle version)
  • faire ou utiliser hors de la boîte (acheter / freeware)
  • travail en équipe
  • gestion de projet - exigences, qualité (échantillons de données dans prod, cas de test, comment tester, couverture avant de coder, c'est plus comme le coût mais pas pertinent. lire un livre PMI
  • outils de communication (courrier, réunions: agenda)
  • gestion du code source

0

J'aurais aimé avoir décidé plus tôt dans le jeu si je voulais ou non être un programmeur général, apprendre de nombreuses choses, langages, bases de données et plates-formes, et finalement devenir développeur web, ou devrais-je simplement me spécialiser dans un CMS, ou même simplement se spécialiser dans Photoshop, étant un spécialiste, vos compétences seraient tout aussi précieuses et rentables que de savoir ce qu'un véritable programmeur devrait savoir. En d'autres termes, si vous avez juste besoin de gagner beaucoup d'argent, il vous suffit de vous spécialiser dans UNE CHOSE. Si vous aimez l'ordinateur et aimez résoudre des problèmes, alors soyez programmeur.

[en réfléchissant sur et après avoir appris comme 4 ou 5 «frameworks» javascript différents avant que JQuery ne se révèle vraiment fort, obtenant la certification en JAVA et n'obtenant jamais une position java, et après avoir travaillé sur plusieurs plateformes; AS400- rpg,> .NET - c # et PHP, avant de souhaiter, je viens de maîtriser photoshop et de gagner de l'argent sans avoir à corriger des bugs ou écrire des logiciels. ]

Je veux dire qu'il y a une certaine satisfaction à connaître un large éventail de sujets, mais la satisfaction est entravée lorsque vous voyez quelqu'un qui connaît juste Photoshop payer le même salaire.


2
Oui, mais ce genre de spécialiste n'ouvrira jamais sa propre boutique. Si votre rêve est d'être PDG de votre propre startup dans le futur, vous aurez besoin d'une vaste gamme de compétences.
Davor Ždralo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.