J'ai vu un certain nombre de questions similaires à celle que je voudrais poser, alors voici quelques similaires questions.
À mon humble avis, ils ne sont ni tout à fait ce que je demande, ni aussi approfondis que j'espère (je ne veux pas balayer les réponses aux questions ci-dessous, ni discréditer les demandeurs, je veux juste être un un peu plus approfondi):
Un diplôme CS peut-il bénéficier à un programmeur plus âgé?
Importance du diplôme CS lors de la candidature à des emplois de développement?
Maintenant que j'ai des clauses de non-responsabilité, laissez-moi étoffer ma question, en commençant par un bref historique de mon expérience en tant que développeur de logiciels.
Tout d'abord, j'ai été incroyablement chanceux. J'ai eu plusieurs opportunités d'emploi (quelques projets PHP/MySQL backend lourds et plusieurs applications WP7 en XAML/C #) à travers lesquelles j'ai vraiment appris tout ce que je sais sur le développement de logiciels. Presque tous les emplois de développement logiciel que j'ai eus étaient ceux que je n'étais pas légitimement qualifié pour avoir (et je l'ai dit clairement à mes employeurs avant qu'ils ne m'engagent). Je ne veux pas me donner de crédit là où ce n'est pas dû, mais je dirais que l'humilité parfaite dispense de modestie .
Dans presque tous les emplois de développement que j'ai eus, j'ai dépassé les attentes de mon employeur et je me suis avéré être un atout précieux. Il y a bien sûr des exceptions1 . Mais mon point est que je suis assez intelligent et j'ai pu m'enseigner ce que je devais savoir pour réussir dans mon travail. Avec chaque travail que j'avais, j'étais étiré de plus en plus.
J'assiste au campus de Seattle de l'Université de Washington , et j'en suis actuellement à ma quatrième année avec deux ans à faire, et je travaille sur un diplôme en mathématiques. Pendant les différents emplois que j'ai eus (voir mon curriculum vitae si vous voulez cette liste), j'ai également fréquenté l'école en tant qu'étudiant à temps plein.
Comme je pense que la plupart des développeurs seraient d'accord, étudier les cours de premier cycle généraux typiques, y compris les cours d'introductionde programmation ABSOLUMENT PALES en comparaison avec l'écriture code réel, construction réel2 produits, travaillant avec personnes géniales et affectant positivement la vie des utilisateurs 3 .
Alors ... au fur et à mesure ... j'ai passé beaucoup plus de temps et d'énergie à travailler au lieu de me concentrer sur mes études. Parfois, je jouais très horriblement , mais pour la plupart, j'ai pu rester à flot avec mes notes.
Cependant le programme informatique à UW est très , - très , très , très compétitif.
Donc, ce n'était pas une surprise pour moi quand j'ai été rejeté par le programme. Deux fois. Ironiquement, la même fenêtre d'une demi-heure dans laquelle j'ai reçu l'avis de rejet toujours poli, bien que décourageant, par e-mail, j'ai reçu un appel d'Amazon me proposant un stage d'été4 en tant que SDE.
Alors que je regarde autour de moi d'autres hommes de mon âge (21 ans), qui partagent les mêmes objectifs que moi dans le développement de logiciels, je me sens plutôt bien où j'en suis, ce que j'apprends, qui je suis et quoi Je peux faire. Il y a bien sûr beaucoup, beaucoup, beaucoup plus brillants de 21 ans que moi, je ne veux pas dire que je me démarque dans la foule, mais simplement que je sens que je ne suis pas abyssalement derrière les progrès de mon pair moyen .
J'ai confiance en ma capacité à réussir dans le monde du logiciel. Plus important encore, je me sens confiant dans ma capacité et mon désir de continuer à grandir, à apprendre et à être humblement gêné quand j'en ai vraiment besoin.
Je me retrouve à poursuivre un diplôme de mathématiques dans le seul but d'avoir un diplôme. Il y a ceux qui disent que je devrais abandonner et commencer à travailler maintenant (comme j'ai eu l'occasion de le faire), et il y a ceux qui disent que je devrais vraiment terminer mon diplôme. J'ai décidé de poursuivre mes études pour des raisons entièrement différentes de celles des deux camps, alors ne m'encouragez pas d'une manière ou d'une autre à ce sujet. Considérez le problème "clos" :)
* DEEP BREATH * ... désolé, c'est plus long que prévu.
Comment trier ces compétences par ordre d'importance?
Quelle est la meilleure façon (au cours des deux prochaines années) de compléter mes études pour atteindre ces attributs de manière à égaler ou même dépasser le niveau d'un étudiant de premier cycle CS d'une université de haut niveau?
Voici les étapes que je prends déjà:
Si vous êtes arrivé jusqu'ici, vous méritez un cookie :) J'apprécie que vous portiez avec moi.
Alors ... communauté de développement, développeurs chevronnés, camarades de classe qui sont dans le même bateau que moi, quels conseils auriez-vous?
Aussi ... veuillez garder à l'esprit mes dénis de responsabilité en haut de cet article sur ce que je PAS demande.
Je me rends compte que je n'ai pas fourni de paramètres très concrets pour ce que je considère comme une "réponse" réussie à mes questions. Je pense que la question est très vague et pourrait justifier un certain nombre de réponses "correctes".
Après un laps de temps raisonnable, je sélectionnerai la réponse qui correspond aux attributs suivants:
Il y a donc quelques paramètres pour "correct". Ils sont très élevés, je pense, mais je les ai conçus comme une sorte de plan pour ce que j'imagine que la "meilleure" réponse serait. De toute évidence, avec suffisamment de temps, je sélectionnerai la réponse correspondante la plus proche comme "réponse".
(1) - J'ai travaillé sur une version antérieure de ce site Web, et bien que nous n'ayons pas eu de conversation explicite À ce sujet, je sentais que je n'étais pas du tout en mesure de bien faire ( cela peut être mis en évidence par le fait qu'ils ont depuis complètement changé de site Web. (2) - Premièrement, oui, c'est un vrai produit (même si j'écris ce billet dans Chrome. ..), et ça botte le cul. Deuxièmement, j'étais un développeur de lycée stagiaire en test, j'ai écrit une preuve du code conceptuel de Pour certaines des nouvelles fonctionnalités d'IE8 ... c'était donc il y a quelque temps. (3) - À au moment de cette publication, je suis le développeur qui a écrit cette application, je ne suis plus responsable de sa base de code (4) - Mon stage commencera en juin 2012, et je vais travailler dans l'équipe du magasin Web .
OK, je trouve trop tentant de ne pas répondre à votre question, alors me voici ...
J'ai 26 ans , et grâce à mon père (btw, mathématicien et actuellement professeur), j'ai eu la chance d'un très début de ma vie autour des ordinateurs. (en 1986, quand je suis né, bien que ce ne soit pas la chose la plus courante à l'époque, nous avions toujours un ou deux ordinateurs à la maison). Cela étant dit, et - évidemment à cause de ma nature curieuse et orientée vers les mathématiques/la résolution de problèmes - il ne m'a pas fallu longtemps pour me passionner pour la programmation. D'abord avec Pascal, à l'âge de 7-8 ans, puis à peu près tout le reste vient de suivre.
Tout d'abord, permettez-moi de dire que pendant mes études, j'ai toujours excellé dans tout ce qui touche aux mathématiques, tout simplement parce que j'aimais ça, et honnêtement, je pouvais facilement suivre l'exemple de mon père et devenir mathématicien aussi. Mais cela ne s'est pas produit.
Ce qui s'est passé est probablement la plus grosse erreur de ma vie (jusqu'à présent): comment appelleriez-vous cela quand quelqu'un amoureux du code , qui speaks 15+ langues et a écrit des milliers de lignes de code (des compilateurs aux micro-noyaux et frameworks web) à l'âge de 18 ans, tout d'un coup (les raisons sont encore trop obscures dans mon esprit, mais le général , même si elle est subtile, l'influence de votre environnement n'est jamais trop négligeable) décide de poursuivre une carrière en médecine ? Je suppose une "erreur".
Le résultat? 5 ans plus tard (à 23 ans) et 1 an avant de terminer mon diplôme de médecine (travaillant toujours sur des projets de programmation open source personnels comme passe-temps tout le temps), j'ai décidé que j'en avais assez et j'ai décidé d'arrêter. Et ce n'était pas seulement que je détestais tellement ce nouveau domaine (la médecine), mais aussi qu'il y avait quelque chose de troublant dans toute cette situation, une démangeaison insatiable cachée au fond de nous ... ( qu'est-ce que ça aurait été si. ..?) De plus, je venais de réaliser que mon hobby, ce que je considérais génial mais je n'avais même pas imaginé un vrai travail, je pouvais non seulement apporter de l'argent mais aussi en apporter beaucoup + me garder heureux en tant qu'individu. J'ai donc décidé d'arrêter. (= le meilleur choix, même si c'est un peu tard, je ne l'ai jamais fait).
Donc, je suis ici maintenant, un futur médecin (psychiatre sur le point de faire une dépression nerveuse pour être précis; stupide moi!) Qui va chercher un CS degree (sur ma 3ème année en fait; et, honnêtement, le poursuivre afin de ne pas finir par manquer de ceux redoutés qualifications typiques ...) et un professionnel plus qu'heureux qui travaille sur quelque chose que j'adore et certainement le sujet sur lequel j'ai le plus à offrir.
La programmation est l'un des très rares domaines où les très bons trouveront toujours leur chemin, peu importe quoi. Et ce n'est certainement PAS une question de qualifications typiques (honnêtement, si j'avais une entreprise et que je voulais recruter des programmeurs, je peux facilement dire qui est bon en quelques minutes - qu'il ait même un diplôme ou non)
Ce qu'il faut pour être un bon programmeur, c'est: l'intelligence mathématique (mais PAS les mathématiques en soi) et la passion (qui rendra l'infini des heures à étudier un plaisir au lieu d'un fardeau; et, même si je ne m'en suis pas rendu compte, croyez-moi, j'ai étudié des tonnes de matériel sur le sujet dans ma vie, uniquement par moi-même). L'éducation formelle est une bonne chose, mais elle est un peu surfaite. Les ingrédients de base du succès sont les deux premiers.
Les mathématiques sont définitivement le lieu de naissance de CS. Mais CS n'est plus seulement des mathématiques. J'ai toujours eu un fort cerveau orienté vers les mathématiques, mais je ne suis en aucun cas un gourou des mathématiques. Et honnêtement, dans la programmation quotidienne, (à moins que vous ne vouliez construire un moteur graphique ou quelque chose de trop localisé), vous n'aurez probablement jamais besoin d'autre chose que de la simple arithmétique (addition, soustraction, multiplication, division, modulo) et quelques choses sur les tableaux. (Beaucoup seront en désaccord avec moi, probablement des mathématiciens ou des programmeurs trop académiques, mais maîtriser définitivement le calcul n'est PAS ce qu'il faut pour être un bon programmeur). Avoir une bonne formation en mathématiques vous aidera peut-être, mais PAS à cause des mathématiques elles-mêmes; cela vous aidera uniquement sur la base d'une chose commune que ces deux domaines partagent: les compétences en résolution de problèmes.
Les mathématiques sont une science (et une science que je respecte).
La programmation est un art. (Et une science appliquée aussi, si vous insistez) Mais gardez cela à l'esprit: un art - et c'est comme ça que j'ai toujours traité. Et comme pour tous les arts, il ne peut pas être enseigné. Je peux vous enseigner la manière formelle de dessiner un visage et de vous rendre meilleur que la moyenne, mais cela ne fera pas de vous un Da Vinci, ni un Klimt. Les Mona Lisas sont peintes par Da Vincis et non par des peintres soigneusement éduqués. Le grand code est écrit par de grands artistes du code. Et les compétences et le dévouement peuvent facilement l'emporter sur l'éducation formelle.
- Comment déterminer objectivement les domaines d'études, les connaissances générales et les autres compétences que j'aurais acquises grâce à un diplôme CS que je pourrais ou non manquer maintenant?
Cependant, je devrais vraiment savoir ce qui est inclus dans le diplôme de mathématiques, permettez-moi de résumer ce que vous manquerez probablement d'un diplôme CS (comme cours/matières/etc - inspiré par programme d'études de mon université ) sans ordre particulier:
- Comment trier ces compétences par ordre d'importance?
Savoir à quoi prioriser dans un domaine en constante évolution car CS sera toujours un pari - un jeu de devinettes .
Apprenez à savoir ce que vous voulez faire et faites confiance à votre instinct. Bien sûr, avoir une solide connaissance de base est un must. Mais ce que vous allez approfondir, c'est entièrement à vous. Aussi, planifiez soigneusement votre carrière: si vous voulez être employé, choisissez votre cible et soyez bon dans ce domaine (par exemple, vouloir être employé par Google et ne sachant pas lire un simple Python est probablement une de ces situations d'interdiction). Si vous démarrez quelque chose par vous-même (une entreprise), alors vous n'avez pas de "patron" à satisfaire; choisissez ce qui vous convient le mieux.
Par exemple, si vous voulez faire quelque chose en rapport avec le Web, je vous conseillerais certainement de choisir: PHP/MySQL/HTML/CSS/JavaScript (+ jQuery/AJAX) . Mais c'est juste moi. Quelqu'un peut aimer (ou voir plus d'avenir) Ruby/Rails qu'en PHP.
Par exemple, je code maintenant principalement en Objective-C/Cocoa . Pourrais-je vous conseiller de poursuivre dans cette voie? Définitivement pas. C'est-à-dire: sauf si vous aimez les Mac ou si vous voulez faire carrière dans la vente de logiciels liés à Mac/iPhone. Si vous êtes dans le développement Windows, optez pour C #/.NET Framework serait probablement votre meilleur choix. (si vous voulez avoir une idée de ce que je préfère, jetez un œil à mon profil StackOverflow )
- Quelle est la meilleure façon (au cours des deux prochaines années) de compléter mes études pour atteindre ces attributs de manière à égaler ou même dépasser le niveau d'un étudiant de premier cycle CS d'une université de haut niveau?
Étudiez beaucoup (livres, Internet, code d'autrui, peu importe) et écrivez autant de code que possible.
Ah, et essayez d'obtenir un emploi dans tout ce qui concerne le code. (J'ai d'abord commencé à travailler comme pigiste et ça a été une expérience vraiment précieuse, juste pour voir comment les choses fonctionnent vraiment dans le monde réel).
Juste mes .2 cents amicaux ... :-)
Sidenote: Je sais que certains de mes points peuvent sembler controversés, et je suis sûr que il y en aura beaucoup qui seront en désaccord avec moi. C'est acceptable. Mais cela ne change pas ma façon de voir les choses - et surtout les choses que j'aime.
Comment déterminer objectivement les domaines d'études, les connaissances générales et les autres compétences que j'aurais acquises grâce à un diplôme CS que je pourrais ou non manquer maintenant?
Parcourez le programme d'études du département CS à UW, empruntez et parcourez la lecture requise, regardez les examens et les exercices de laboratoire précédents (devoirs). Si vous n'avez aucune idée de la façon dont vous aborderiez le problème, vous avez un trou dans vos connaissances.
Comment trier ces compétences par ordre d'importance?
Pensez au type de programmation que vous aimeriez faire à l'avenir. Si vous êtes heureux de créer des sites Web et des applications CRUD, il semble que vous ayez déjà toutes les connaissances dont vous avez besoin.
L'éducation CS entre en scène si vous êtes intéressé à comprendre comment fonctionnent les bases de données [distribuées], les serveurs Web, les compilateurs et les interprètes, les systèmes d'exploitation, les protocoles réseau, etc. sous le capot, et souhaitez construire de tels systèmes toi même.
Quelle est la meilleure façon (au cours des deux prochaines années) de compléter mes études pour atteindre ces attributs de manière à égaler ou même dépasser le niveau d'un étudiant de premier cycle CS d'une université de haut niveau?
Je ne sais pas. Pour moi, le plus grand avantage de l'université était 1) d'élargir mes horizons (j'ai oublié 90% des détails que j'ai appris à l'université, mais je me souviens des concepts et des idées), et 2) de garder ma motivation intrinsèque pour apprendre les choses de déclin: il est plus facile de maintenir sa motivation lorsque vous travaillez vers un objectif - examen, autre examen, etc. jusqu'à l'obtention de votre diplôme. (De plus, structurer l'auto-éducation n'est pas une tâche facile.)
[Ajouté: choisissez une université dont vous souhaitez suivre le programme CS, choisissez des cours dans les sujets qui vous intéressent et suivez vous-même le programme: devoirs, examens, etc. La plupart des cours publient des diapositives et des devoirs/examens des années précédentes .]
Un conseil cependant: N'ABANDONNEZ PAS votre diplôme en mathématiques. Toute personne brillante peut apprendre à programmer, mais les mathématiques vous donneront un avantage concurrentiel si vous souhaitez travailler sur des applications autres que CRUD/frontend, par exemple des simulations fluides et mécaniques, des graphiques informatiques, des applications de traitement d'image, de reconnaissance et d'apprentissage automatique, (même la finance!) etc.
MISE À JOUR 2 - expérience [longue]: j'ai obtenu une maîtrise à la faculté d'EE: les deux premières années étaient un programme commun (physique, génie électrique, électronique analogique et numérique, et beaucoup de mathématiques - algèbre linéaire; mathématiques discrètes; réel, vecteur et analyse appliquée complexe.) Cela a été très précieux, en particulier la partie EE et électronique - cela m'a permis de travailler sur des projets mixtes HW-SW, et la coopération avec les concepteurs HW a été très excitante. Je n'ai rien contribué à la conception HW, mais j'ai pu suivre le concepteur HW "déboguer" son diagramme schématique et poser des questions sensées [nous n'étions pas sûrs si le bug était en SW ou HW - il s'est avéré qu'il était en HW: -)].
Ensuite, les lignes se sont ramifiées et j'ai choisi la ligne CS. Certains des "détails" ont contribué à ancrer les concepts (par exemple, "exécuter" l'algorithme de Dijkstra à la main). J'ai également appris détails sur le fonctionnement des processeurs (signaux de bus, interprétation des diagrammes de bus, exécution, etc.) sur l'exemple du Motorola 68000 déjà obsolète, mais les concepts appris par les détails ne sont pas très différent pour les processeurs modernes non plus.
Autres détails, esp. Les implémentations SW (par exemple, l'implémentation de Dijkstra), étaient pour moi [puisque je suis devenu assez bon en codage au lycée] un exercice inutile de débogage et ont contribué ZÉRO à la compréhension des concepts.
Et puis je me suis inscrit au programme de doctorat, où j'ai dû suivre des cours obligatoires. J'ai été déçu par le choix des cours, car beaucoup d'entre eux semblaient davantage orientés vers les demandes de l'industrie (par exemple, en utilisant Python pour l'analyse des données scientifiques - merci, je peux programmer et je '' Je suis tout à fait capable de m'enseigner cela - ce qui impliquait encore beaucoup de codage inutile) plutôt que d'enseigner des concepts fondamentaux (heureusement, j'ai trouvé des cours sur l'optimisation discrète, l'analyse statique des programmes et l'analyse formelle avec Promela).
Ainsi, certains détails étaient utiles pour enraciner les concepts, et certains constituaient une charge carrément inutile (un autre exemple: programmer la communication par port série entre deux ordinateurs. J'étais déjà habitué à lire et interpréter les spécifications matérielles et à programmer le matériel via des registres, donc c'était juste. Peut-être que je suis naïf en supposant que les ingénieurs CS à devenir moyens n'ont pas besoin d'être éduqués sur la façon de lire les documents HW).
En conclusion: exposez-vous à de nombreux concepts différents (idées de haut niveau) et entrez dans les détails pour ceux que vous souhaitez hiérarchiser et devenir extrêmement bon. [Vous NE POUVEZ PAS être extrêmement bon dans tout!]
Voici essentiellement ma question: comment déterminer objectivement les domaines d'études, les connaissances générales et les autres compétences que j'aurais acquises grâce à un diplôme en sciences de la santé que je pourrais ou non manquer maintenant?
Si vous apprenez quelque chose de nouvea de votre étude. Ensuite, vous pouvez objectivement dire que vous avez gagné cela grâce à un diplôme CS.
A1. Le pourquoi
Un diplôme CS est conceptuellement sur l'apprentissage. Si l'on revient d'un diplôme CS sans différence nette, son objectif principal n'est pas atteint. Les examens et les cours sont la mesure "officielle" de ce qui a été appris. Cependant, la compréhension individuelle (ai-je appris quelque chose de nouveau?) Devrait être une meilleure mesure objective.
A1. L'expérience
J'ai tous deux été dans le milieu universitaire et travaille maintenant professionnellement. J'ai choisi un Master en informatique car je voulais élargir ma compréhension et j'ai une passion pour l'apprentissage.
Mon monde s'est élargi grâce à l'obtention d'un Master en informatique. Mon monde s'est également élargi du travail professionnel.
Comment trier ces compétences par ordre d'importance?
L'importance est relative sur qui pose la question et pour quelle situation. Si c'est pour personnel croissance, alors c'est très important. Si c'est pour l'industrie, alors des choses comme les algorithmes et les bonnes pratiques de logiciel OOP/standard sont importantes.
A2. Le pourquoi
La "portée" d'importance dépend fortement du "contexte". Sans contexte, les mérites des compétences sont difficiles à trier.
A2. L'expérience
J'ai constaté que les compétences acquises à partir de "l'université" vs "dans le domaine" sont différentes. Les "compétences" à l'université sont plus "théoriques", de l'industrie ses plus "pratiques". Pour cette raison, cette différence signifie que les compétences sont en effet classées différemment en termes d'importance.
Quelle est la meilleure façon (au cours des deux prochaines années) de compléter mes études pour atteindre ces attributs de manière à égaler ou même dépasser le niveau d'un étudiant de premier cycle CS d'une université de haut niveau?
Poussez votre auto au-delà point de rupture, et quand vous pause continuez à vous casser à nouveau.
Qu'est-ce que je veux dire?
Si vous arrivez à un point où vous ne comprenez pas, alors vous vous êtes brisé. Continuez à apprendre jusqu'à ce que vous compreniez. Puis Poussez plus loin jusqu'à ce que vous trouviez autre chose que vous ne comprenez pas (à l'infini) .
A3. Le pourquoi
Si vous apprenez et restez dans vos limites, vous ne serez "ok" que. Vous ne voulez pas être "ok". Vous voulez être le "meilleur" possible. Vous ne pouvez pas atteindre votre véritable potentiel si vous ne poussez PAS CONSTAMMENT au-delà de vos limites.
A3. L'expérience
Je serai toujours un étudiant à vie, je ne vais pas énumérer mes compétences actuelles, si vous êtes curieux, vous pouvez simplement voir mon profil.
La seule chose que je dirai, c'est que. Je ne suis jamais satisfait de mes connaissances actuelles. Je veux voler plus haut, voir plus loin et aller plus loin.
J'interviewe et participe au recrutement de beaucoup de juniors fraîchement sortis du collège. Je n'ai encore embauché personne sur la base des compétences en la matière qu'ils ont acquises dans le cadre du programme qu'ils ont suivi. La raison en est simple: aucun programme CS (ou tout autre programme) que j'ai rencontré n'enseigne de compétences concrètes liées à la programmation ou au développement de logiciels à un niveau professionnel, commercial. Être capable de lancer des modèles et des solutions pour des équations différentielles complexes et écrire des algorithmes de tri spéciaux optimisés peut avoir une valeur académique et/ou scientifique, mais cela n'a aucune incidence sur le développement général de logiciels.
Que dois-je chercher alors? Eh bien, je m'attends à ce qu'un diplômé universitaire ait perfectionné l'art d'apprendre. C'est, après tout, ce qu'un bon collège devrait enseigner à ses étudiants. Comment analyser et décomposer les problèmes généraux en composants logiques et discrets qui peuvent être résolus de manière prévisible. Une approche méthodique pour trouver, évaluer, organiser et appliquer les connaissances et les informations vers une solution.
Aussi, je recherche des personnes qui comprennent qu'un groupe de personnes, travaillant ensemble et communiquant, vaut bien plus que la somme de ses individus. Cela nécessite de la maturité et de l'humilité et la capacité à la fois de donner et de demander de l'aide.
Donc, pour revenir à la portée de votre question: alors qu'un diplôme CS pourrait améliorer vos chances d'obtenir cette première entrevue à la sortie de l'université, je trouve que cela a peu ou pas d'incidence sur votre réussite ou vos compétences en tant que développeur. J'ai toujours suivi la philosophie "embaucher pour l'attitude, s'entraîner pour les compétences" et c'est bien payé.
Mon conseil: continuez votre diplôme en mathématiques si c'est quelque chose qui vous intéresse. Toute éducation scientifique vous servira bien, alors choisissez celle que vous aimez le plus car c'est celle dans laquelle vous êtes le plus susceptible d'Excel. Ensuite, concentrez-vous sur l'apprentissage des choses importantes: comment apprendre, comment analyser et aborder la solution des problèmes dans d'une manière structurée, comment interagir et coopérer avec d'autres personnes, comment assumer le leadership et la responsabilité de votre prestation et de celle de vos coéquipiers. Le reste n'est que technologie et codage, les outils du métier. Ceux-ci, vous pouvez et vous apprendrez par vous-même. Acquérir et étudier certaines connaissances générales, comme les modèles de conception populaires et les paradigmes architecturaux. Commencez à écrire des programmes pour vous entraîner. Choisissez une base linguistique et technologique assez à jour, mais ne faites pas l'erreur de penser que c'est la dernière que vous apprendrez. Les outils et les langages changent tout le temps, de sorte que le développement de logiciels est un processus constant d'apprentissage.
Comment déterminer objectivement les domaines d'études, les connaissances générales et les autres compétences que j'aurais acquises grâce à un diplôme CS que je pourrais ou non manquer maintenant?
Regardez simplement les exigences du diplôme, puis recherchez le programme de chaque classe.
Comment trier ces compétences par ordre d'importance?
Vous ne pouvez pas vraiment le faire vous-même sans le recul. Je dirais que la chose la plus importante qui manque à la plupart des programmeurs autodidactes est l'analyse et la conception d'algorithmes. Le reste peut être ramassé à la pièce.
Quelle est la meilleure façon (au cours des deux prochaines années) de compléter mes études pour atteindre ces attributs de manière à égaler ou même dépasser le niveau d'un étudiant de premier cycle CS d'une université de haut niveau?
Même si vous n'êtes pas admis au programme, vous pouvez souvent suivre des cours dans d'autres départements au choix. Une de mes classes préférées était une classe de projet d'ingénierie aérospatiale où j'ai travaillé sur l'électronique et le firmware pour un petit satellite.
Vous pouvez également acheter le manuel utilisé par votre classe. Je l'ai fait pour quelques cours que je ne pouvais pas intégrer à mon emploi du temps. Une autre option est didacticiel ouvert du MIT .
Pourquoi pensez-vous qu'un diplôme CS est si important pour être Programmeur réussi?
Ce dont vous avez besoin pour réussir votre programmation, c'est:
Habituellement, le diplôme CS vous fera entrer dans l'industrie, mais si vous n'avez pas la passion et la soif de connaissances, vous en souffrirez et vous ne serez jamais un bon programmeur.
On dirait que vous êtes déjà entré dans l'industrie, et vous avez certainement l'impression d'avoir à la fois la passion et la soif de connaissances.
Ce que vous devez faire, c'est continuer à rechercher, à apprendre et à acquérir de l'expérience, et l'industrie saura vous apprécier sans diplôme.
n exemple de quelqu'un avec qui je travaille
l'un des développeurs de logiciels travaillant dans mon équipe a un diplôme en droit ... après quelques années, elle a compris qu'elle n'aimait pas du tout le droit et qu'elle voulait être programmeur. elle ne pouvait pas trouver un emploi en tant que programmeur (pas d'expérience, pas de diplôme), alors elle a suivi un cours d'informatique de 6 mois, puis elle a obtenu un emploi, et elle est un grand développeur depuis.
À mon humble avis, il n'y a pas de tâches de programmation (ou de ventes ou de sysadmin, etc.), il n'y a que des tâches de résolution de problèmes. Nous embauchons et payons des personnes pour résoudre les problèmes, l'écriture de code n'est qu'une partie de la résolution du problème. Oui, même les ventes sont une forme de résolution de problèmes. Ainsi, un diplôme en mathématiques prouve que vous pouvez résoudre des problèmes ainsi qu'un diplôme CS.
De votre annonce, il est clair que vous obtenez beaucoup d'expérience/de stages. Génial! ne vous inquiétez pas de trouver un emploi après l'obtention de votre diplôme.
Pour tenter de répondre à vos questions:
des classes? choisissez des classes CS théoriques plutôt que des classes d'écriture de code. Trouvez des classes non CS/mathématiques par exemple. la philosophie, il vous aidera à vous démarquer de la foule
priorités? apprendre de nouvelles choses (pas seulement des cours faciles que vous connaissez déjà à moitié)
deux prochaines années? parler aux gens, apprendre, nouer des relations, rechercher des activités extérieures. (Les loisirs/sports/passe-temps loin du travail/des études sont un indice pour voir à quel point un candidat est motivé.)
Derniers conseils: obtenez votre diplôme dès que possible. Construisez un réseau de contacts. Et le seul emploi sûr est de créer votre propre emploi. Recherchez des idées/opportunités où vous pouvez démarrer votre propre entreprise. Bonne chance.
Tout d'abord, laissez-moi LOL à la stipulation "concise mais approfondie" vers la fin de votre grand opus.
Comment déterminer objectivement les domaines d'études, les connaissances générales et les autres compétences que j'aurais acquises grâce à un diplôme CS que je pourrais ou non manquer maintenant?
Comme d'autres l'ont mentionné, vous pouvez commencer à le catalogue des cours . Mais je vous encourage à sortir des limites de cette liste. C'est en fait bien que vous vous spécialisez en mathématiques. De nombreux ingénieurs avec lesquels j'ai travaillé ne se souviennent pas comment effectuer une intégration simple, et n'ont jamais exploré en dehors des murs des cours de mathématiques discrets traditionnels de CS.
Cette réponse semble assez clairsemée en termes de détails. Je n'ai pas de diplôme CS et je ne me suis pas retrouvé à manquer dans les domaines nécessaires. Je souhaite cependant avoir consacré plus de temps aux autres choses qui m'intéressaient. Histoire, linguistique et anglais, par exemple.
Comment trier ces compétences par ordre d'importance?
Apprenez ce que vous aimez
Qu'est-ce qui est important pour toi? Qu'est-ce qui est important pour les employeurs? Mon heuristique personnelle a toujours été d'apprendre ce qui me semble le plus intéressant - vous besoin d'aimer ce que vous faites; sinon, vous vous épuiserez. Le logiciel est un domaine d'activité si vaste qu'il semble toujours y avoir un emploi disponible pour un développeur compétent qui est passionné par n'importe quoi de ces compétences.
Apprenez à apprendre et poussez-vous
Je suppose que cela m'amène à deux méta-compétences que je placerais au-dessus des autres: apprendre les choses avec voracité et travailler dur. Ceux-ci peuvent sembler clichés et douloureusement évidents, mais la combinaison est rare. J'ai été partout sur la carte en termes de compétences "nécessaires" - front-end HTML/javascript aux extensions de langage au développement mobile à la vision par ordinateur à l'administration des systèmes et inversement, sur plus de 7 langues. La seule véritable compétence de base dans tout cela est d'avoir pris l'habitude de surmonter ma propre ignorance.
J'adore vraiment Jack White philosophie des guitares et de la musique (sérieusement, allez voir ça), et je pense que c'est extrêmement applicable au monde de la programmation. Mettez les choses un peu plus loin hors de portée. Pousse toi. Ensuite, il vous semblera facile quand tout ce que quelqu'un veut que vous fassiez est votre travail.
Quelle est la meilleure façon (au cours des deux prochaines années) de compléter mes études pour atteindre ces attributs de manière à égaler ou même dépasser le niveau d'un étudiant de premier cycle CS d'une université de haut niveau?
Classes CS non majeures
Comme vous, le département CS de UW m'a rejeté ... même si je pense que je l'ai laissé faire une troisième fois avant de reprendre mes esprits. J'ai fini avec une majeure en informatique et une mineure en mathématiques appliquées. Mais j'ai quand même pris la totalité piste CS non majeure. C'est CSE 373, 410, 413, 415 et 417. Donc, je suis sûr que vous devez d'abord suivre votre passion. Le mien m'a conduit à ces cours. Et je pense que vous obtenez une formation de base assez complète avec eux, même si cela peut être un peu léger du côté théorique des choses.
Maintenant, voici la chose sympa: avec l'informatique, la plupart de ces éléments ont compté dans mes choix obligatoires. Dans le département de mathématiques, vous devrez peut-être obtenir une approbation explicite, et cela peut être un tronçon pour tout sauf CSE 417.
Invoquez un enquête DARS (probablement un lien UWNetID uniquement) et voyez où en sont les choses. Je le faisais pour diverses majors ad nauseum.
Classes AMATH
Dans le même ordre d'idées, le le département de mathématiques appliquées a certaines classes qui pourrait être utilisé comme exigences électives. Vous pourriez même être mineur en AMATH comme le vôtre.
Pourquoi est-ce que je mentionne cela? Informatique numérique - par ex. AMATH 301/352 - est un énorme mystère pour la plupart des programmeurs. Si vous n'en tirez rien d'autre, vous pourrez écrire articles de blog intéressants . Mais je dirais que connaître les problèmes entourant les types numériques d'une langue et savoir comment les mesurer et les améliorer est très important.
Construisez quelque chose!
La chose la plus importante que vous puissiez faire est de construire quelque chose de nouveau. Prenez une idée du début à la fin. Ne laissez pas quelque chose de facile dans votre zone de confort.
Les classes de programmation les plus fructueuses que j'ai prises toujours avaient un grand composant de programmation pratique. Pour un ingénieur, la théorie est extrêmement importante - tant qu'elle peut être transformée en quelque chose de réel. Alors allez chercher un papier CS au son cool et essayez de le mettre en œuvre. Sérieusement.
Obtenir un emploi
Maintenant, vous avez déjà mentionné que vous avez un stage chez Amazon. C'est génial. L'expérience de travail réelle est vraiment la clé! Il y a beaucoup de personnes avec des diplômes CS qui ne peuvent pas programmer leur sortie d'un sac en papier humide. Avoir une bonne expérience de travail vaut façon plus qu'un diplôme.
Tout d'abord, permettez-moi de dire que je suis très heureux que vous ayez posé cette question car c'est une question que je me suis posée au fil des ans.
Je suppose que je pourrais me considérer un peu comme un succès dans ce domaine, jusqu'à présent. J'ai une certaine expérience collégiale et j'aimerais éventuellement terminer mes études collégiales en informatique, mais je n'ai pas encore mérité de diplôme à ce stade de ma vie. J'ai cependant eu pas mal de succès en génie logiciel malgré cet inconvénient (qui dure depuis 10 ans). Je dois être honnête avec vous, cependant, ce n'était pas nécessairement une chose facile à faire (bien sûr, je parierais que tout ce qui en vaut la peine n'est PAS le plus facile). Je vais aussi dire que ce n'est toujours pas la chose la plus simple. Il existe de nombreuses entreprises prêtes à donner une chance au bon candidat, mais je suis entré en contact avec d'autres qui rechigneront à l'absence de ce "sceau d'approbation" de l'enseignement collégial. Cependant, je le voulais (et je le veux toujours) tellement que j'étais prêt à faire tout ce que je pouvais pour acquérir une expérience dans la langue dans laquelle je voulais travailler à l'époque.
Cela a commencé en .net dans une très grande entreprise. En tant que non-programmeur (travaillant à l'époque comme représentant du support technique), j'ai appris tout ce que je pouvais sur les langages et technologies utilisés tels qu'ils s'appliquaient à l'entreprise pour laquelle je travaillais. De plus, et c'est probablement la chose la plus importante, j'ai mis en réseau. J'ai envoyé un e-mail à chaque personne que je pouvais trouver dans le répertoire qui avait Ingénieur logiciel dans leur titre. Étais-je ennuyeux? Probablement. J'ai toujours été courtois et auto-respectueux avec un désir d'apprendre. Je planifiais des déjeuners ou je les trouvais simplement à la cafétéria et m'asseyais pour essayer d'avoir une conversation. Parfois, c'était embarrassant ou je me faisais snober, mais au final, cela a donné les résultats escomptés. J'ai pu obtenir des informations d'identification de petite durée sur certaines bases de données internes et après un certain temps, j'ai acquis les informations d'identification requises pour développer des logiciels sur leur plate-forme propriétaire. Peu de temps après, je me suis retrouvé en position au sein de l'entreprise pour apporter quelques compétences en développement d'outils internes à l'équipe d'analyse sur laquelle je travaillais à l'époque. À partir de là, je me suis toujours efforcé d'être le gars le plus intelligent de la pièce de la manière la plus simple possible. J'étais impatient et je me suis assuré que tout le monde le savait. J'ai toujours essayé de fournir une solution dans la mesure du possible et j'ai constaté que si vous essayez suffisamment, il y a très peu de domaines de problèmes qui sont impossibles à résoudre (en dehors de la théorie quantique, peut-être).
Pour conclure ce qui pourrait être une longue histoire (et si vous êtes dans le nord-ouest du Pacifique, j'aimerais discuter autour d'une bière), j'ai eu ma "grosse pause" dans une toute petite startup qui était prête à me donner un coup de feu . Ils ont échangé mon manque d'expérience contre un salaire un peu plus faible, et j'ai commencé à courir. J'ai ensuite rebondi d'une petite boutique de développement à l'autre au cours des prochaines années, gagnant des amitiés et des compétences en cours de route, jusqu'à ce que je sois enfin développeur principal et directeur d'une petite société d'ingénierie.
Un point clé à retenir ici, si je ne l'ai pas communiqué suffisamment efficacement, c'est que vous devez vous mettre en réseau. Faites-vous des amis, prenez des bières et des rires, et trouvez des personnes qui sont dans le domaine dans lequel vous voulez travailler (de préférence dans votre pile technologique de choix). Assurez-vous que les gens connaissent votre volonté de faire tout ce qu'il faut et votre empressement à faire le travail, peu importe son importance. Vous devez essentiellement "surmonter" votre manque d'éducation formelle. Entrez et amusez-vous avec. Cette industrie est la meilleure au monde, à mon humble avis. J'ai noué des amitiés et des contacts durables qui m'ont aidé d'un endroit à l'autre et je continuerai à faire de même pour eux chaque fois que l'occasion se présentera.