Tout d'abord, j'ai déjà cherché sur le site et lu tous les sujets précédents "autodidacte vs collège". La majorité des réponses défendaient que le choix du collège était le meilleur choix, pour deux raisons principales:
Aller au collège vous donne le papier, qui est essentiel pour décrocher des emplois, surtout en période économique difficile.
Aller au collège vous donne une base de programmation solide, vous enseignant les principes qui seront essentiels quel que soit la langue / le chemin que vous suivrez.
Voici ma question: je ne m'inquiète pas du tout pour la raison 1, car j'ai déjà ma propre entreprise (je crée des sites Web / je fais du marketing d'affiliation) et une situation financière stable, donc je suis sûr que je n'aurai pas besoin de regarder autour de moi pour un travail.
Je m'inquiète cependant pour la raison 2. Autrement dit, je veux m'assurer d'avoir une base de programmation aussi solide que n'importe qui d'autre, et je me demande si cela est possible avec l'auto-apprentissage.
Supposons que je prenne mon temps pour étudier les bases, comme les mathématiques discrètes, la conception d'algorithmes, la logique de programmation, l'architecture informatique, l'assemblage, la programmation C, les bases de données et les structures de données - principalement en utilisant des livres, des ressources en ligne et beaucoup de codage. Disons que je passe 1-2 ans à couvrir ces bases.
Pensez-vous que ma fondation serait solide ou manquerait encore par rapport à quelqu'un qui est allé à l'université?
Réponses:
Absolument. Oui c'est possible. Comment puis-je savoir? Parce que je l'ai fait!
C'est difficile. Ne vous faites aucune illusion à ce sujet. Sans tuteur où aller lorsque les choses ne fonctionnent pas, vous devez résoudre vous-même les problèmes. Il y a beaucoup à apprendre et si vous n'êtes pas motivé ou si vous n'êtes pas suffisamment dévoué, vous ne pourrez pas le faire. Pour moi, j'ai du mal à être motivé par quoi que ce soit, mais j'aime tellement apprendre et programmer que je n'ai pas à me battre.
Quelques conseils:
Comment savez-vous que vous avez terminé? Eh bien, la raison pour laquelle vous entreprenez un diplôme est pour que vous deveniez compétent en programmation. Lorsque vous êtes sûr de pouvoir écrire n'importe quel logiciel avec un temps raisonnable, vous êtes programmeur, mais cela ne signifie pas que vous devez arrêter d'apprendre.
Soit dit en passant, je souffre maintenant du premier point. Être loin de toute entreprise de développement de logiciels n'aide pas non plus.
la source
Je pense que la désignation la plus importante du Collège / Université est de vous apprendre à apprendre des choses par vous-même. Peu importe, que ce soit la programmation, la physique, la chimie, les mathématiques, etc. L'université m'a appris à apprendre sans l'aide de personne.
la source
Certaines personnes prospèrent dans des environnements académiques et ont même besoin qu'elles apprennent (généralement comme une forme de motivation). D'autres (comme moi) ne le font pas et peuvent même les trouver rebutants.
J'ai eu une longue carrière dans le logiciel sans avoir obtenu de diplôme. Vers la fin de cette carrière, j'étais dans un rôle d'architecte et l'architecte principal de mon projet a dit que ma connaissance des logiciels et de l'informatique (les deux ne sont pas la même chose!) Équivalait facilement à une maîtrise de l'Université de Waterloo (une des meilleures écoles CS du Canada).
Il y a bien sûr certaines lacunes dans mon bassin de connaissances. Mes compétences en mathématiques sont suffisantes pour suivre ce que j'apprends aujourd'hui. Je déteste les mathématiques pures et je ne peux généralement pas être obligé de me tenir au courant des dernières nouveautés. Cela a parfois mis un frein à ma compréhension des choses (comme, par exemple, Haskell) jusqu'à ce que mes compétences en mathématiques atteignent un niveau suffisant pour comprendre les concepts. Mais le fait demeure que l'information est disponible sans que je sois près d'un CS universitaire ou d'un département de mathématiques. Tout ce que je peux vraiment dire, c'est que parfois ma séquence d'apprentissage est sous-optimale - je dois parfois revenir en arrière et remplir du matériel de base avant de poursuivre ce que je fais.
la source
Je pense que votre fondation sera solide, à condition que vous ayez la discipline nécessaire pour vous asseoir et vous enseigner toutes ces choses et travailler à travers les exemples. J'ai un diplôme, mais c'est en génie, pas en informatique. J'ai travaillé avec de nombreux excellents programmeurs professionnels qui ont appris tout ce qu'ils doivent savoir. L'autoformation est quelque chose dont vous aurez besoin de toute façon pour être un bon programmeur, car il y a toujours une nouvelle technologie qui n'apparaît pas à l'école.
la source
Comme pour la plupart des choses dans la vie, ma réponse est solide, cela dépend de la personne . Je crois fermement que vous n'avez pas besoin d'un baccalauréat pour être programmeur; cependant, d'après mon expérience, le collège a tendance à exposer les gens à des problèmes et à des idées qu'ils ne peuvent pas rencontrer par eux-mêmes grâce à une étude indépendante.
De nos jours, une personne motivée peut aller en ligne, et grâce à des sources telles que MIT Open Courseware , mettre en place un cours d'étude indépendante qui leur donnera une assez large étendue de connaissances et c'est cette étendue de connaissances que je ressens est ce qui fait un bon développeur. Cependant, une personne qui n'est pas aussi motivée pourrait trouver qu'elle est capable d'obtenir en apprenant une seule langue et peut être en mesure de se contenter de sa carrière.
Comme je l'ai dit précédemment, je pense que c'est l'étendue des connaissances qui fait un bon développeur car cela signifie qu'ils ont été exposés à plus de problèmes et ont développé leurs compétences en résolution de problèmes. Vous n'avez pas besoin d'aller à l'école pour obtenir cette étendue de connaissances, mais l'école vous aide certainement à cet égard, car un bon programme d'études vous obligera à développer une étendue de connaissances.
la source
En tant que programmeur, je trouve que je joue constamment avec des API et des langages non liés au travail (Ruby on Rails, Python, Node.js, etc.). Je le fais plus par intérêt que pour le travail. J'ai 2 diplômes associés mais même après 10 ans de programmation en Java / JEE je trouve que la théorie d'un diplôme BS me manque vraiment (Big O, Algorithmes, Descrete Math, etc).
Je prends des cours du soir à temps partiel pour obtenir mon BS en informatique, mais il n'y a pas beaucoup de théorie CS offerte dans ce programme. J'obtiens mon diplôme principalement pour avoir le "papier" car c'est plus business que technique mais c'est ma seule option pour les cours du soir.
Découvrez MIT Open Coursware . C'est gratuit et c'est une excellente ressource pour combler les lacunes de la théorie CS / Math.
la source
Je crois que c'est une erreur de penser que le collège / l'université vous donnera par définition une bonne base de programmation. Ils vous apprendront beaucoup de théorie et beaucoup de façons différentes de penser à un problème. C'est bien beau, mais transformer cette théorie en pratique est un ensemble de compétences différent.
Le seul moyen efficace d'enseigner la bonne application de la théorie est le mentorat et la pratique. En bref, vous devez essayer d'appliquer la théorie du mieux que vous le pouvez et vous fier à quelqu'un qui a plus d'expérience pour vous formuler des critiques constructives ou vous orienter dans la bonne direction. Votre mentor ne fera pas votre travail pour vous, mais vous aidera à mieux faire votre travail.
Je ne serais pas le développeur que je suis aujourd'hui sans l'aide de bons mentors au début de ma carrière. Travailler sur des projets open source est un bon moyen de trouver des mentors qui seront prêts à passer du temps à marteler les détails. Du moins, ce fut mon expérience. J'ai également eu un mentor dans mon premier travail de programmation qui m'a aidé à comprendre comment concevoir des applications facilement étendues.
Y a-t-il donc des avantages pour le collège / l'université? Oui. Cependant, ils ne sont pas équipés pour vous aider à transformer la théorie en pratique, sauf si vous la prenez sur vous. Si vous commencez à essayer d'appliquer ce que vous apprenez à l'université, vous pouvez commencer à poser les bons types de questions qui vous aideront à vraiment comprendre la théorie à un niveau plus pratique. Si vous attendez d'être au travail, vous venez de retarder cet important processus d'apprentissage.
la source
Les gens ont tendance à surestimer l'importance des fondements théoriques, des mathématiques et des connaissances algorithmiques de l'OMI. Les raisons pour lesquelles les programmeurs poussent et interviewent ces choses sont qu'ils sont eux-mêmes des "mordus" des mathématiques.
Maintenant, il y a bien sûr une programmation où il est utile de savoir ce qu'est une "machine d'état", ou comment utiliser une recherche "Booyer-Moore". Il y a même des problèmes où il peut être utile de connaître de vraies mathématiques, comme si vous travaillez avec des calculs financiers ou des simulations physiques.
Cependant, le fait est que 90% de la programmation n'est généralement pas de ceux-ci, peu d'entre nous font du développement algorithmique hardcore. La plupart des choses que vous devez apprendre peuvent être apprises au fur et à mesure. Pas besoin de construire un immense édifice de fondation mais plutôt garder une curiosité constante pour résoudre différents problèmes.
Je suis moi-même 100% autodidacte et je n'ai jamais eu de problème pour apprendre les algorithmes. J'ai fait du travail sur les systèmes financiers et même cela était faisable sans aucune connaissance théorique approfondie.
Être bon en programmation ne concerne pas les fondations, il s'agit d'élargir continuellement votre boîte à outils et l'apprentissage que vous obtenez est tellement plus utile lorsque vous pouvez le placer dans le contexte d'un problème qui a vraiment besoin d'être résolu plutôt que de pure recherche théorique.
Vous n'avez pas besoin de tout savoir en détail, c'est pour cela que Google, StackOverflow et Wikipedia sont là :) Vous avez cependant besoin de connaître l' existence de différents outils et méthodes pour réaliser qu'ils sont utilisables et applicables à votre situation. Vous devez également acquérir l'expérience de savoir quel outil est le mieux à appliquer. Les fondations sont généralement gâtées pour les débutants car ils n'ont aucune expérience de la raison pour laquelle un outil particulier serait utile. Si vous avez beaucoup d'expérience, certaines choses vont simplement "cliquer" en place.
Certaines choses que je recommanderais cependant:
Si ce n'est pas le cas, commencez à vous familiariser avec les modèles de conception, c'est l'outil le plus pratique et universel de votre boîte à outils.
Lisez quelques aperçus généraux des différents algorithmes si vous êtes curieux, juste pour savoir ce qu'il y a quand vous en aurez besoin
En savoir plus sur la parallélisation et le multithreading (et sur certains programmes fonctionnels). Être capable de prendre en charge plusieurs cœurs est important aujourd'hui et va bientôt disparaître, c'est donc une connaissance cruciale.
Faites des projets de loisir stimulants et expérimentaux qui poussent vos compétences vers l'avant et vous forcent à apprendre des choses en contexte.
la source
Une chose que le collège vous aidera avec laquelle vous pourriez avoir du mal à vous débrouiller seul est la capacité de lire et de comprendre les articles de recherche universitaire, en particulier les mathématiques. Cependant, même cela peut être réalisé par vous-même, mais il est utile que des instructeurs et des pairs vous guident dans le processus d'apprentissage pour obtenir les connaissances plus rapidement et plus facilement.
En tant que programmeur général de systèmes d'information, vous ne lirez probablement pas les articles de recherche pour bien faire. Les systèmes d'information d'aujourd'hui sont assez simples et la plupart des algorithmes intenses tels que la recherche, le tri et l'indexation sont effectués par les systèmes de base de données. Tant que vous comprenez les concepts, vous ne devriez avoir aucune difficulté.
Si vous décidez de vous impliquer dans des domaines de programmation plus difficiles tels que le développement de micro-systèmes d'exploitation, le développement de compilateurs, l'intelligence artificielle, etc., avoir la capacité de lire et de comprendre des documents de recherche peut être essentiel pour mettre en œuvre des systèmes rapidement et efficacement.
En ce qui concerne la possibilité d'appliquer les connaissances, c'est très individualiste. Les personnes qui vont au collège peuvent ne pas être en mesure d'appliquer les principes aussi bien que ceux qui ne vont pas au collège. Il y a un vieux dicton qui dit: «peu importe ce qui entre mais ce qui sort».
Pour résumer, les connaissances que vous obtenez en allant au collège peuvent vous aider à mieux comprendre et communiquer avec le monde universitaire. Cependant, la connaissance peut être obtenue sans aller au collège. Avoir un diplôme permet de persuader plus facilement les autres que vous savez ce que vous faites et pouvez comprendre les articles de recherche universitaire.
la source
Je ne pense pas que beaucoup de gens obtiendront une aussi bonne "fondation" grâce à l'autoformation qu'ils le feraient en allant à l'université, du moins pas dans le même laps de temps. Deux ans à lire des livres au hasard et à jouer avec des problèmes de jouets pendant votre temps libre ne vous mèneront pas au même niveau que deux ans d'études ciblées avec un programme organisé. Cela vous suffira-t-il pour vous en sortir? Très probablement. Mais si vous voulez vraiment "une aussi bonne fondation que quiconque", cela prendra plus de deux ans.
Pour ne pas vous décourager, ce ne serait certainement pas une perte de temps. Je ne suis tout simplement pas très confiant que beaucoup de gens peuvent réunir l'équivalent de deux années de collège en deux ans tout en gérant leur propre entreprise et en ayant une sorte de vie personnelle / familiale.
la source
Je me développe professionnellement depuis une décennie sans diplôme. Lorsque j'interviewe des personnes, je m'intéresse à leur capacité à résoudre des problèmes et à coder. Cela dit, il y a des entreprises / rôles auxquels je ne suis pas éligible uniquement parce qu'ils insistent sur un diplôme. Certains consultants ont cette politique car ils peuvent vous vendre plus pour les clients.
la source
Si vous jouez au jeu des nombres, ceux qui ont un diplôme obtiennent de meilleurs emplois et paient.
Tous ceux qui ont obtenu le diplôme n'ont pas appris / se sont souvenus de quoi que ce soit.
La plupart des gens ne prendraient pas le temps d'apprendre une grande partie de la théorie / des antécédents / des bases comme ils le feraient s'ils allaient à l'université. Peut-être que vos parents vous soutiendraient pendant 4 ans d'auto-apprentissage; tout le monde doit trouver un emploi.
L'inconvénient serait que si vous aviez un diplôme CS et échouiez à un certain niveau, vous pourriez être considéré comme ayant une faible puissance. Avouons-le, si vous ne l'avez pas obtenu en 4 ans d'alimentation à la cuillère, vous ne le découvrirez pas sur le côté tout en maintenant un emploi à temps plein. Exceptions bien sûr.
la source
Si vous voulez vraiment gagner votre vie dans le domaine du développement logiciel sans diplôme, je vous suggère de contacter votre université locale. Obtenez d'eux une liste des cours qui seraient nécessaires si vous obteniez un diplôme. La grande majorité des universités auront cette information disponible sur demande, ainsi qu'un synopsis / programme / liste de livres pour chacun des cours. Descendez cette liste. Recherchez les livres en question. Voir quels sujets ils couvrent. Si vous voyez quelque chose de couvert que vous ne comprenez pas, achetez / consultez le livre et apprenez-le. À la fin de ce processus, vous devriez au moins savoir ce que vous savez et ce que vous ne savez pas, et être assez compétitif avec votre diplômé universitaire moyen (qui peut avoir dormi / triché dans certains de ces cours de toute façon).
la source
Oui et non. Certaines choses sont brutalement difficiles à saisir sans professeur. Habituellement, c'est le truc le plus mathématique.
Je crois - et je crois toujours après avoir aidé à commencer les majors CS en tant qu'AT - que toute personne sans retard mental peut apprendre à coder au niveau PHP / Java / C #. Ce n'est pas, fondamentalement, difficile.
D'ailleurs, l'assemblage et les autres domaines technologiques que vous mentionnez ne le sont pas non plus. Ce sont des détails d'implémentation qui sont bons à savoir.
Les structures de données, les algorithmes, la conception numérique, l'architecture informatique et l'algèbre de base de données sont assez difficiles, si l'apprentissage est approfondi.
la source
Je ne doute pas qu'une personne motivée et dévouée puisse obtenir une base solide, mais si vous choisissez de ne pas obtenir un diplôme, vous manquerez de nombreux aspects qui amélioreront votre développement. L'une de ces choses et peut-être la plus importante est l'exposition à des personnes partageant les mêmes idées avec lesquelles vous pouvez échanger des idées et des concepts. Il est également très agréable de pouvoir écouter les expériences d'instructeurs qui ont une sagesse précieuse à transmettre et peuvent parfois redresser des concepts mal compris dans une phrase ou deux. Il est agréable de pouvoir clarifier les concepts au moment de l'exposition initiale plutôt que de laisser les mauvaises idées couler et de les trier plus tard.
la source