web-dev-qa-db-fra.com

Attentes des diplômés par rapport à la réalité

Lors du choix de ce que nous voulons étudier et de faire avec nos carrières et notre vie, nous avons tous des attentes de ce que cela va être comme. Maintenant que je suis dans l'industrie depuis presque une décennie, je me suis réfléchi un peu sur ce que je pensais (à l'arrière quand j'étudais d'étudier la science informatique) La vie de la programmation devait être comme et comment ça se passe en réalité être.

Mes deux plus grands chocs (ou devrais-je dire, les attentes brisées) sont de loin la quantité de travail de maintenance impliquée dans des logiciels et le manque général de professionnalisme:

  1. Maintenance: à l'UNI, nous avons tous été informés que la majorité des travaux logiciels utilisent des systèmes existants. Donc, je savais pour m'attendre à cela dans le résumé. Mais je n'ai jamais imaginé à quel point cela se passerait-t-il. Peut-être que c'est quelque chose que j'ai mentalement vitré et espérais construire de nouvelles choses froides de zéro beaucoup plus. Mais il est vrai que la plupart des travaux de maintenance, de fixation de bugs et de support de soutien.

  2. manque de professionnalisme: à UNI, j'ai toujours eu l'impression que le travail logiciel commercial est très orienté vers le processus et de manière rigoureuse. J'avais des images de processus ISO, des raies de documentation technique, de toutes les caractéristiques et de bogues étant strictement documentées et un environnement généralement professionnel. Il est venu de réaliser que la plupart des entreprises de logiciels n'offrent aucune différence à une équipe d'élèves travaillant sur un projet de grands semestres. Et j'ai travaillé dans le petit magasin Agile Hack Shop et l'entreprise d'entreprise de taille moyenne. Pendant que je ne dirais pas que cela a toujours été "non professionnel", cela ressemble vraiment à l'industrie du logiciel (dans l'ensemble) est loin de la forte discipline d'ingénierie que je m'attendais à ce que ce soit.

Quelqu'un d'autre a-t-il eu des expériences similaires à cela? Quelles sont les façons dont vos attentes de ce que notre profession serait différente de la réalité?

50
Bobby Tables

Je sens ton homme. Je viens de graver peu plus d'une année il y a un peu plus de temps, a sauté lors de la première offre d'emploi qui a montré mon chemin et obtenu le plus grand choc de ma vie.

Choses que je ne m'attendais pas:

Le stress scolaire et le stress de travail ne sont pas les mêmes - Le stress du travail sur un projet d'école avec des amis ou le travail en solo, même avec cette date limite de thèse ou une défense de projet spéciale ne se compare pas au stress de Des délais de travail apparemment déraisonnables, des problèmes de communication, (un peu de politique de bureau) et des temps de crunch.

manque de meilleures pratiques - Même chose que votre expérience sur le professionnalisme. Avant de prendre mon premier emploi et pendant ma période de formation, je me suis précipité sur la révision et la lecture sur les meilleures pratiques en matière de programmation et de génie logiciel. Celles-ci ne sont pas suivies aussi bien qu'elles devraient pour des raisons pratiques et équitables. Et parfois, vos connaissances comptent très peu contre d'autres qui ont simplement peur de l'inconnu et traitent ces pratiques avec dédain.

ce qu'ils ont enseigné à l'école n'étaient que la pointe de l'iceberg - Je pensais que ce que j'ai appris à étudier et de classes suffisait pour me faire passer, j'ai été choqué de dire le moins que je fixais abasoulé Le premier morceau de code que j'étais censé maintenir. Beaucoup de compétences que j'utilise maintenant ont été apprises au travail ou pendant mon travail que je continue à me demander si j'avais pu le faire sans diplôme universitaire. XD

L'importance de la communication - m'a fait comprendre ce que toutes ces classes d'anglais étaient pour. Avant le monde réel, je ne pouvais pas voir la pertinence d'avoir trois à quatre classes d'anglais différentes au collège quand on a enseigné depuis que nous étions dans la première année. Vous n'êtes pas utilisé dans votre travail lorsque vous pouvez parler à un ordinateur mais ne parle pas aux gens.

27
Jonn

La plupart des travaux que vous faites n'est pas révélateur

Lorsque chez UNI, j'ai travaillé sur des routines AI pour contrôler les robots de joueurs de football, j'ai construit des compilateurs et piraté sur les noyaux du système d'exploitation.

Mais dans le monde réel, 99%* du développement de logiciels est en fait assez ennuyeux. J'ai toujours admiré des architectes ou des constructeurs qui, lorsqu'ils ont demandé "Que faites-vous dans la vie?" peut pointer vers un bâtiment ou autre chose et dire "je l'ai fait ça". Mais la plupart des développeurs de logiciels ne peuvent pas faire cela. Quand on leur a demandé "Que faites-vous dans la vie?" Le plus proche de celui que j'ai jamais pu venir, c'est quand j'avais l'habitude de travailler pour une entreprise qui a construit des logiciels qui ont traité SMS messages pour les stations de radio et similaires ... Je pouvais dire , "Vous savez que lorsque vous envoyez une texton à une station de radio pour voter pour une chanson, j'ai écrit le logiciel qui traite ces votes et des trucs." Néanmoins de la quasi aussi cool que de pouvoir pointer vers un bâtiment et dire "J'ai construit cette."

Bien sûr, il y a -sont personnes qui peuvent dire "j'ai travaillé sur Windows" ou quoi que ce soit, mais je suis sûr qu'ils ne disent pas à personne qui craint de la prochaine question "je peux" T Obtenez mon imprimante au travail, pouvez-vous résoudre ce problème pour moi? "


* et 62% de toutes les statistiques sont composées sur place

18
Dean Harding

Si vous regardez des logiciels aujourd'hui, à travers la lentille de l'histoire de l'ingénierie, c'est certainement ingénierie d'une sorte, mais c'est le genre d'ingénierie que les gens sans le concept de l'arc ont fait. La plupart des logiciels aujourd'hui ressemblent à une pyramide égyptienne avec des millions de briques empilées les unes sur les autres, sans aucune intégrité structurelle, mais juste effectuées par une force brute et des milliers d'esclaves. -Alan Kay, 2004

l'entretien complet: http://quue.acm.org/detail.cfm?id=103952

Je ne suis pas de vétérinaire de l'industrie; Dans le contraire, je suis un diplômé récent, mais d'une école supérieure de CS à l'US mais mon sentiment instinctif est que la façon dont nous construisons des logiciels est fausse. Plutôt que de frapper le bouton de pause et de réexaminer les fondamentaux de la façon dont nous sommes programmés, nous venons de vous précipiter en utilisant des modèles datés de la cinquantaine, 60s ajoutant continuellement un peu de sucre sur le dessus. Si nous continuons comme ça, nous n'aurons jamais dépassé où nous sommes. Les humains ne peuvent tout simplement pas gérer la complexité des choses qui sont la taille de la carte Windows MS Windows. Nous avons besoin d'une nouvelle façon. Je ne sais pas ce que c'est.

Je pense que c'est la raison sous-jacente du sentiment que les grands et les petits magasins de logiciels semblent faire des logiciels en le piratant sans une compréhension profonde des principes fondamentaux.

17
maharishi
  • Le développement est principalement le travail d'équipe. Cela signifie que la communication (parlée et la lecture), la lecture des autres modules de l'autre et la réutilisation des modules précédents (à la fois interne et externe) est quelque chose à faire face presque tous les jours. Dans mon collège, au moins je devais coder avec plus de gens à très peu d'occasions, alors je pensais que la partie principale du travail était de coder seul, dans le désert. Ce n'est pas.
  • Expliquer les choses à des non-développeurs est difficile (également couvert pour le premier point) et est de votre responsabilité de faire vos points (non pas des 99% du monde).
  • Le bon test est le test qui échoue. (la première fois, au moins) et, bien sûr, il n'y a pas de code sans bogue. Vous n'êtes pas un mauvais programmeur si vous avez des bugs. Les bugs ne sont qu'une partie (très importante et fastidieuse) de votre travail.
  • Il n'y a pas de balles d'argent. Chaque technologie a ses avantages et ses inconvénients.
  • Le collège ne vous apprend pas des technologies ultramodernes. Mais aussi, 90% des travaux utilisent de très anciennes technologies. Ce qui est parfois ce qui est nécessaire.
  • Les personnes non techniques prennent des décisions concernant des solutions techniques, principalement pour des raisons ésotériques telles que la maintenance, le partenariat, la disponibilité de travailleurs ...
  • Vous venez de commencer, jeune Padawan .

J'ai commencé à réaliser depuis lors du fait que le codage est un travail que vous faites conjointement avec plus de personnes, spécialement maintenant que la source ouverte est plus importante. Mais quand j'étais à l'université (financière tardive), j'étais convaincu que j'allais faire des choses à partir de zéro et que je ne regarde jamais dans le code de l'autre ni à avoir à coordonner avec d'autres ...

En regardant en arrière, pour moi une des meilleures parties est apprendre et enseigner aux autres.

5
Khelben

Je n'ai pas eu de diplôme, mais j'ai pris un peu dans les bibliothèques et les laborateurs universitaires.

  • grand fer à repasser - Les technologies qu'ils enseignaient étaient principalement des ordinateurs centraux et des minicomitateurs. Le doyen d'un collège m'a dit que je ne pourrais pas avoir un emploi parce que je ne savais même pas ce qu'était un Masterfile. Je n'avais aucune intention de travailler sur des ordinateurs centraux car je ne pouvais pas me le permettre, mais je n'allais pas être aussi stupide quant à ne pas être légèrement préparé. Vaxen était cool et j'avais hâte d'être payé au code sur mon propre micro Vax dans ma cabine. Quelle honte que le marché ait totalement imploré. (Comme il s'est avéré que j'avais deux positions travaillant avec des ordinateurs centraux ... en tant qu'entrepreneur pour IBM.)

  • Ingénierie logicielle - sur les talons de la programmation structurée, SASD et d'autres méthodologies de conception, vous avez peut-être pensé que nous allions être des ingénieurs réels. J'ai fait. Mais les enseignants donnaient très peu de conseils sur les techniques de conception que j'ai lues dans la bibliothèque. Les étudiants ont été laissés à se débrouiller pour eux-mêmes et les micro-micro-Micros ont rendu trop facile à fragmenter en code jusqu'à ce qu'ils obtiennent une réponse qu'ils étaient satisfaits. Je n'ai pas réalisé à quel point il était pire sur le marché du travail. D'une manière ou d'une autre, je dois faire un peu de nouveau code, donc ce n'était pas si ennuyeux. Mais j'ai aussi beaucoup repris beaucoup, et ils étaient assez mauvais, c'était comme un nouveau projet parce que je devais réparer beaucoup de code. C'était une combinaison de recherches de la fonctionnalité existante et de créer un nouveau code (son remplacement); Ecrire des outils pour simplifier le processus et mettre en place une meilleure gestion de projet.

  • carrière de haute technologie - C'est une chose lorsque les écoles ont de vieux bâtiments et équipements (l'équipement de la carte de perforation a été remplacé le semestre avant de commencer ... En 1984), mais lorsque vous travaillez dans un entrepôt mal éclairé Ou pour un patron qui accroche aux clients appelant la ligne de support, vous commencez à réaliser que votre description de travail n'est pas susceptible d'inclure le pop-corn de cuisson avec un laser de 5 mégawatts.

5
Huperniketes
  • La programmation informatique n'est pas physique et non intuitive.
    • Quand un constructeur de maison finit son travail, il peut se promener et voir immédiatement s'il y a quelque chose de mal. Un bug de programmation informatique ne peut pas être découvert de la même manière et peut se cacher dans le système pendant des mois, voire des décennies.
    • Bien qu'un programmeur puisse ressembler/ressentir un code source via un examen de code, il n'est pas garanti de repérer toutes les erreurs contenues dans le code. Un ordinateur, cependant, serait capable de reproduire exactement l'erreur à chaque fois en exécutant le programme avec certaines entrées. Ainsi, la compréhension humaine d'un morceau de code source est toujours un modèle imparfait de l'essours d'être les instructions à un ordinateur.
  • Il est très facile de coder un programme qui gère les cas les plus courants, mais ne parvient pas à gérer les cas de bord. [.____]
    • Dans d'autres disciplines, il est relativement facile d'appliquer une action corrective après le fait. Il peut même y avoir une connaissance spécifiquement consacrée aux actions correctives. Il n'y a pas de telle chose dans le développement de logiciels.
    • Heureusement, le développement axé sur les tests aide à codifier les cas de bord que le code est censé gérer.
    • ajouté D'autre part, certaines méthodologies de développement de logiciels semblent suggérer que nous pouvons extraire la valeur commerciale (temps plus rapide du marché, etc.) en choisissant consciemment de ne pas gérer les cas de bord et de communiquer ces décisions à les clients.
  • Les clients peuvent trouver des valeurs commerciales dans un logiciel qui ne traite que les cas les plus courants, par conséquent, les fournisseurs de logiciels ne sont pas trop préoccupés par la gestion des rares cas. [.____]
    • Les clients apprennent simplement à éviter les bords bruts.

Ajouté

  • L'élégance du code source n'est pas valorisée.
    • Les clients ne voient pas l'élégance du code source. Ils ne voient que l'élégance de l'interface utilisateur et des interactions.
    • Les programmeurs, d'autre part, ne valorisent généralement pas l'élégance de l'interface utilisateur et ne restent généralement pas dans un seul projet pendant une période suffisante pour commencer à apprécier une conception logicielle élégante.
    • Étant donné que ni les clients ni les programmeurs ne valorisent l'élégance du code source, ils ne seront ni valorisés par les entreprises.

Ajouté

Mes deux cents: s'y habituer.

3
rwong

images des processus ISO, des raies de documentation technique, de chaque fonctionnalité et de bogues étant strictement documentés, et un environnement généralement professionnel décrit assez bien mon entreprise. Nous faisons des logiciels d'infrastructure critiques/des produits matériels, donc bien, la pression est sur pour la qualité (nous sommes certifiés ISO 9001, par exemple).

3
Paul Nathan

Je pensais que, après avoir obtenu son diplôme que les responsables seraient en mesure de reconnaître un bon travail de mauvais travail. Après avoir remis la millionième copie de "Vraiment excellent code notre codeur supérieur mis en place" et l'avoir ressemblant à ceci:

def lf(p, q, r):
    x = 4
    xx = 4.5
    t = {1:p, 2:p+2, 3:p*4} #I think there's a bug in here but I don't know
    .
    .
    .

J'ai presque abandonné essayé de comprendre ce qui se passe entre les oreilles du patron aux cheveux pointilleux. "Great" signifie garder le cauchemar, "bon" désigne des accidents dans une brise doux et "désordre horrible" désigne soit cela, soit une base de code bien structurée dont les ingénieurs ont manifestement refusé de rencontrer des délais obscènes juste pour garder leur santé mentale.

2
wheaties

Beaucoup de logiciels ne font que cela au point où il est utilisé/acheté suffisamment. Quand on le fait, il a tendance à coller et n'est que "gâché" avec entretien.

Les attentes des utilisateurs augmentent chaque jour pour les caractéristiques, mais dans de nombreux domaines, elles sont inférieures dans des zones d'ingénierie. Supposons que les logiciels de transaction bancaires soient aussi solides et professionnellement conçus comme une automobile moderne. Le traitement du volume est une merveille moderne, mais ce qui abouut la fiabilité de chaque transaction? Pas tellement. Votre message sur la première merde de votre chiot sur le tapis a été laissé tomber, alors quoi. Cela ressemble plus aux petits sacs en plastique à l'épicerie. Ils font des milliards d'entre eux, ils déchirent et se déchirent et se sont jetés. La plupart des gens ne se soucient pas assez d'exiger un meilleur sac.

Je pense que le logiciel de qualité est fait, finalement. Une partie de cela frappe le marché plus tôt que la plupart des produits commis. Qui va conduire une voiture en version bêta?

1
JeffO

J'ai entendu dire que toute l'ingénierie logicielle après la maintenance de la première ligne de code est une maintenance. Et cela semble certainement correspondre à mon expérience. Le seul code que j'ai écrit qui n'a pas fini par avoir la plupart de ses coûts de maintenance était le code qui n'était si inflexible que ce n'était jamais ni utilisé brièvement.

Je pense que vous pouvez trouver des équipes d'ingénierie acheminées qui développent et suivent des processus forts qui conduisent à la libération de code robuste que l'équipe peut avoir un niveau de confiance élevé (bien que je ne voudrais pas convoquer cela avec de grandes quantités de documentation). Je crois que je travaille dans une équipe comme ça pour le moment. Bien que j'ai certainement vécu l'autre type de développement.

La chose que je suis venu à apprécier cependant, est que le défi ne trouve pas toujours l'algorithme parfait ou la solution la plus propre au problème. Mais tranchant souvent toutes sortes de contraintes (ressources, connaissances, argent, temps, compétences, risque, formation préexistante de l'utilisateur, etc.) pour atteindre le rendement le plus élevé pour l'investissement disponible. Cela construit un système le mieux adapté à tous ces facteurs et non seulement des influences techniques.

1
flamingpenguin