web-dev-qa-db-fra.com

Devrais-je continuer ma pratique de codage autodidacte ou apprendre à faire du codage professionnellement?

Dernièrement, je reçois des travaux professionnels, traînant avec d'autres programmeurs et je fais des amis dans l'industrie. La seule chose est que je suis à 100% autodidacte. Il est causé à mon style de s'écarter extrêmement du style de ceux qui sont correctement formés. Ce sont les techniques et l'organisation de mon code qui est différente.

C'est un mélange de plusieurs choses que je fais. J'ai tendance à mélanger plusieurs paradigmes de programmation ensemble. Comme fonctionnel et oo. Je me penche sur le côté fonctionnel plus que OO, mais je vois l'utilisation de OO quand quelque chose aurait plus de sens comme une entité abstraite. Comme un objet de jeu. Suivant je vais aussi le simple chemin quand faire quelque chose. Quand, en revanche, cela semble parfois que le code que je vois des programmeurs professionnels est compliqué pour le bien! J'utilise beaucoup de fermetures. Et enfin, je ne suis pas le meilleur commentateur. Je trouve plus facile juste de lire À travers mon code que de lire le commentaire. Et la plupart des cas, je finis juste à lire le code même s'il y a des commentaires. De plus, on m'a dit que, à cause de la façon dont j'écris simplement mon code, il est très facile de le lire.

J'entends des programmeurs formés par des professionnels poursuivir des choses comme des tests d'unités. Quelque chose que je n'ai jamais utilisé auparavant, alors je n'ai même pas la plus faible idée de ce qu'ils sont ou de la façon dont ils travaillent. Beaucoup de soulignes "_", qui ne sont pas vraiment mon goût. La plupart des techniques que j'utilise sont directement de moi, ou quelques livres que j'ai lus. Je ne sais rien à propos de MVC, j'en ai beaucoup entendu parler avec des choses comme Backbone.js. Je pense que c'est un moyen d'organiser une application. Cela me confond cependant parce que maintenant, j'ai fait mes propres structures organisationnelles.

C'est un peu douloureux. Je ne peux pas utiliser des applications de modèle lors de l'apprentissage de quelque chose de nouveau comme avec l'Ubuntu rapidement. J'ai du mal à comprendre le code que je peux dire vient de quelqu'un formé. Terminer OO La programmation laisse vraiment un mauvais goût dans ma bouche, mais cela semble être ce que tout le monde utilise strictement.

Cela ne me laissait pas si confiait dans l'aspect de mon code ou je me demandais si je provoque des étincelles lorsque je rejoignable une entreprise ou peut-être contribuer à des projets open source. En fait, j'ai plutôt peur du fait que les gens finiront par vérifier mon code. est-ce juste quelque chose de normal tout programmeur passe ou devrais-je vraiment chercher à changer mes techniques?

36
G1i1ch

En fait, je suis plutôt peur du fait que les gens finiront par être vérifier mon code.

Bon. Être conscient que les gens vont regarder votre code vous faire faire plus d'efforts.

La programmation est devenue un champ incroyablement grand. Il y a des dizaines de sujets, des outils, des niches et des spécialisations, dont certaines sont des carrières entières à eux-mêmes. Il y a une grande quantité d'apprendre et de savoir, et quand vous travaillez avec d'autres programmeurs, il y aura toujours des choses que vous savez qu'ils ne le font pas et des choses qu'ils savent que vous ne le faites pas. C'est une bonne chose.

Si vous craignez que votre expérience est incomplète, il y a beaucoup de mesures que vous pouvez prendre pour modifier que grâce à l'éducation formelle et la collaboration avec des experts formés. Mais on dirait que vous avez peur, il y a une étape quantifiable après que les gens disent " D'accord, maintenant que je maîtrise, je suis officiellement un programmeur. " Il n'y a pas étape. I " ve des moments vraiment eu où je pensais " oui, maintenant je suis en train de quelque part " après avoir appris quelque chose de nouveau, mais il n'y a pas de liste de la magie des choses que vous devez savoir et faire pour vous appeler un programmeur.

Je sais que beaucoup de choses au sujet de la programmation, je l'ai utilisé une douzaine de langues dans de nombreux projets, mais le sous-ensemble des connaissances en programmation, je peux appeler mon propre est minuscule. Et j'aime ça. Franchement, un programmeur n'est pas quelque chose que vous êtes. Un programmeur est quelque chose que vous apprenez constamment à être.

Faites l'inventaire de l'honnêteté de vos compétences, vos forces et vos faiblesses. Obtenir les commentaires des personnes ayant plus d'expérience que vous. Rechercher des positions ligne assez bien avec l'endroit où vous pensez que vous êtes - mais ne pas avoir peur d'aller pour des emplois qui sont un peu en dehors de votre maîtrise actuelle. Si vous ne prenez des emplois que vous savez déjà tout sur, vous ne serez jamais apprendre au travail.

62
asfallows

Lorsque vous commencez à développer des demandes en coopération avec d'autres développeurs, certains de ces faiblesses de style personnel vont se mettre en place.

Si vous commencez à travailler dans un magasin qui utilise des traits de soulignement, vous allez utiliser des soulignements de soulignement. Tout le monde, quels que soient leurs antécédents précédents, suit la norme de la boutique pour le style de codage.

À moins que votre style de codage soit extrêmement évident, vous feriez mieux de vous habituer à la rédaction de commentaires clairs et concis expliquant comment votre code fonctionne, de sorte que d'autres développeurs puissent le suivre.

Si vous ne connaissez rien des tests unitaires, achetez un bon livre. Il y a beaucoup de bons livres sur les tests de l'unité. Même avec mvc.

Les développeurs de logiciels professionnels savent bien jouer avec les autres, sans joindre le bac à sable. Les meilleurs savent comment lire et écrire du code quel que soit le style.

16
Robert Harvey

La programmation a une composante d'art et une composante discipline. La composante d'art consiste à réfléchir aux meilleures approches et à les mettre en œuvre; La discipline consiste à s'assurer que vous l'avez fait correctement et que d'autres peuvent comprendre votre code et l'améliorer si nécessaire.

Le composant d'art est amusant: vous le faites parce que vous l'appréciez. Naturellement, c'est la partie que vous vous enseigne d'abord.

La composante discipline est plus une nuisance: vous le faites hors de nécessité. C'est une composante essentielle de travailler dans une équipe, cependant: vous ne pouvez pas vous échapper de le faire, du moins dans une certaine mesure. Une fois que votre code est intégré à celui de vos coéquipiers, votre flexibilité pour "changer les choses à volonté" prend une plongée au nez. Pourtant, vous avez besoin d'une capacité de modification de votre code en toute confiance en réponse à la modification des exigences, ou pour résoudre les bogues. C'est là que divers tests "ennuyeux" sont disponibles: avec de nombreux tests en place, il est facile de vérifier si votre dernier changement brise ou non.

Le style de code gagne également de l'importance, car adhérer à un style commun rend le code plus facile à lire pour tout le monde. Dans les grandes entreprises, vous trouverez des emplois nocturnes qui testent automatiquement la conformité aux normes de codage et vous avertissez des avertissements méchants lorsque vous déviez.

Retour à votre question, vous concentrer sur la composante d'art est un stade précoce naturel du développement du programmeur. Cela peut prendre plusieurs années de travail dans l'industrie avant de commencer à apprécier la composante de discipline. Vous n'avez pas besoin de chercher activement à "modifier vos techniques", cependant: ils se transformeront naturellement dans le processus de travail dans une équipe.

5
dasblinkenlight

Pour votre question, vous devriez toujours chercher à changer votre technique, à embrasser le projet unique et la technologie émergente.

Le point de "Franchement, un programmeur n'est pas quelque chose que tu es. Un programmeur est quelque chose que vous apprenez constamment à être." est vraiment le soyez tous et finissez tous tout le codage.

C'est génial que vous remarquez des zones où vous faites quelque chose de différent des autres, surtout quand vous voyez que c'est une norme. Vous avez des tests de l'unité tachetée et MVC - et maintenant votre prochaine étape doit être d'en savoir plus. Voyez comment ils travaillent, ce dont vous avez besoin pour les implémenter et essayer d'avoir un sens de quand il s'agit d'un bon design pour les mettre en œuvre.

Ceci est un champ en constante évolution avec de nouvelles langues et de nouvelles modèles montantes et chutes. Si vous êtes à l'aise avec l'aspect codant, commencez à examiner la partie de conception. Apprenez ce qui les rend bon et quand les utiliser.

Ensuite, une équipe est un excellent avantage - vous avez toujours besoin d'autres yeux pour regarder votre code pour repérer les zones que vous avez précipitées ou ne pensez pas toutes les implications.

3
John D

Vous n'avez pas besoin d'être un plus grand commentateur. Mais vous devriez être un bon commier (oui, commencer à utiliser une sorte de VCS - je vous recommande GIT).

Le style est une chose qui évolue toujours. Ne t'inquiète pas pour ça. Vous apprendrez ce qui est un code réutilisable et ce qui n'est pas. Mais vous devez pratiquer et obtenir de l'aide pour cela.

Essayez d'aider dans un projet open source sur GitHub. Certaines personnes sont vraiment belles là-bas et essaieront de vous aider. C'est le meilleur conseil que je puisse vous donner.

2
YuriAlbuquerque

En fait, j'ai plutôt peur du fait que les gens finiront par vérifier mon code. Est-ce juste quelque chose de normal tout programmeur passe ou devrais-je vraiment chercher à changer mes techniques?

Comment sauriez-vous que changer sans commentaires des programmeurs plus expérimentés?

Avoir d'autres personnes revoir votre travail peut être décourageante, surtout les premières fois, mais c'est le meilleur moyen d'obtenir la critique constructive que vous devez améliorer vos compétences. Il y a un site SE pour Avis de code que vous pouvez trouver utile. Demander aux amis intelligents de regarder votre code est un autre bon moyen d'obtenir des commentaires.

2
Caleb

La chose la plus importante est de développer de la flexibilité. Plus vous êtes familier avec des concepts fondamentaux, plus vous pouvez être réactif dans n'importe quelle langue, approche de programmation, style ou environnement.

La maîtrise est de moins sur l'apprentissage de chaque/chose/il faut apprendre, et plus sur l'apprentissage/comment/faire pour résoudre un problème, dans une variété de situations.

Et la meilleure ordonnance pour cela est la pratique. Vous devriez toujours avoir un projet; Si vous êtes entre des concerts payants, prenez un jouet personnel. Temps libre un week-end? Travaillez à travers le "monde Hello" pour une langue ou une plate-forme que vous n'avez jamais utilisée auparavant. Recherchez des moyens d'apprendre beaucoup à la fois. Par exemple, construisez quelque chose dans Google App Moteur et vous apprendrez tout à la fois sur les bases de données python, bigtables et orientées colonnes. Vous aurez également une bonne dose de style Google "professionnel".

Un bon général sait comment appliquer ses savantes tactiques et son expérience collectée dans une variété de terrains. On dirait que vous avez une tactique et une expérience, mais vous devez rencontrer un terrain inconnu. C'est probablement le meilleur moyen de déterminer ce que vous savez et de quoi vous devez apprendre ensuite.

Et si le style "professionnel" est ce que vous êtes après, assumez des projets "professionnels". Trouvez un projet open-source que vous aimez, attribuez-vous à vous un changement pour faire et en figurer. Soyez prêt pour les critiques de Jackass, mais rappelez-vous que la majorité des gens de ce domaine ne sont pas obtenus là où ils devaient avoir des compétences sociales en douceur. Le but est de vous exposer autant de ce que vous voulez être le plus possible. Et vous devez vous construire assez bien pour le faire vous-même. Aucune classe ne peut vraiment vous apprendre. En fait, il est trop putain d'apprentissage de la classe aujourd'hui, et pas assez de compétences solides du monde réel.

2
johnnyb

Vous me rappelez mon auto après avoir été allée au collège d'être un ingénieur logiciel. Si vous voulez être programmeur, je dirais prendre position. Vous devrez commenter votre code, écrire des tests d'unité, comprendre, tout à fait, code orienté objet. Mais maintenant, vous n'avez aucune raison réelle de le faire. Tant que vous travaillez simplement sur de petits projets personnels. Où vous n'avez pas à répondre à personne, mais vous-même. Vous ne grandirez plus en tant que développeur.

En prenant des projets importants que beaucoup de gens travaillent sur et devoir répondre à des questions de gestion telles que "est-ce que cette version de publication est libre? Parce que nous allons le libérer au client.". Vous grandirez comme programmeur/ingénieur. Vous obtiendrez des coups de force. Vous trouverez peut-être les choses que vous avez mentionnées plus précieuses et vous pouvez trouver de nouvelles choses que personne n'avait auparavant. Vous grandirez.

Même mon collège n'a pas réussi à m'apprendre ces choses même s'ils ont essayé.

Pour les tests d'unités, recherchez le développement dirigé par des tests.

Pour commenter Pensez au code que vous avez écrit après votre départ. Et le temps, d'autres personnes vont passer en ingénierie inverse.

Pour les langues orientées objet. Comprendre au moins. C'est un outil que vous pouvez utiliser pour résoudre des problèmes de manière plus lisible.

Bonne chance: D

1
Ryan

Cela ne me laissait pas si confiait dans l'aspect de mon code ou je me demandais si je provoque des étincelles lorsque je rejoignable une entreprise ou peut-être contribuer à des projets open source. En fait, j'ai plutôt peur du fait que les gens finiront par vérifier mon code. Est-ce juste quelque chose de normal tout programmeur passe ou devrais-je vraiment chercher à changer mes techniques?

À mon avis, il n'est pas nécessaire de s'inquiéter de ce que les autres pensent de votre code si vous vous concentrez sur des mesures objectives de la qualité. Est-ce

  • Correct?
  • Compréhensible?
  • Maintenu?
  • Efficace?

En tant que premier principe, il devrait toujours être votre objectif de se concentrer sur des qualités objectives plutôt que sur les opinions des autres. Se concentrer sur les opinions des autres est le chemin de la médiocrité et, comme vous vivez, anxiété.

La seule raison de se préoccuper des opinions des autres est de pouvoir s'intégrer bien socialement (ou dans un environnement de travail) avec eux. Si vous avez à l'avant-garde de votre esprit, l'objectif d'améliorer les qualités objectives de votre travail, il n'est pas nécessaire de me sentir effrayé sur les réactions des autres - ce ne sont que des occasions d'apprendre ou, aux pires détails pratiques pour gérer .

Sois honnête avec toi-même!! Continuez à apprendre et profitez de ce que vous faites.

1
Chris

Je concerne complètement cette question. J'ai exactement les mêmes sentiments et un contexte très similaire (mais pas exactement même). Je suis censé être formé professionnellement (ou plutôt académiquement), donc je suis censé savoir sur OO Programmation, etc. La programmation n'était pas mon sujet majeur mais je le faisais. J'ai appris =OO dans certains de mes cours et ne comprenait pas la raison d'être. Enfait, la seule fois où j'ai compris OO était quand j'ai fait du travail commercial et a été contraint dans elle par deux grands mentors.

Je suis sûr que mon professeur était également brillant, mais vous voyez le véritable avantage dans la pratique dans un environnement commercial vs programmation fonctionnelle, mais vous n'avez pas la possibilité de le voir dans un cours conçu pour courir et enseigner en quelques mois. . Je n'ai pas eu la chance de travailler sur la structure basée par la MVC, mais je suis sûr que ce sera la même chose que je vais pouvoir reprendre les concepts travaillant à partir d'un livre, mais je comprendrai son avantage quand je le vois en une utilisation dans un environnement commercial. Et je suis totalement d'accord avec vous, pourquoi utiliser OO et MVC et toute autre structure complexe si vous pouvez résoudre un problème de manière plus simple. Mon conseil est de ne pas être timide du travail car il va exposer Vous vous situez différents et vous permettez de comprendre les mêmes choses dans une lumière différente.

Bien sûr, j'ai appris la syntaxe et les concepts dans mon contexte académique, mais c'est dans le monde commercial où j'ai commencé à apprendre à programmer.

0
Umar

Réponse courte: oui.

Enseigner vous-même, c'est presque tout bon.
Filtrer avec bon sens, bon conseil.

PROGRAMMATION PROFESSIONNELLEMENT DU WRT, OUI.
À quoi penses-tu?
Conférences, séminaires, certification, diplôme?
[.____] chacun a un coût/avantage.
[.____] Lorsque le ROI est bon, si vous avez les ressources, allez-y.

Pesez des conseils sur des degrés en considérant la source: les personnes avec/sans eux ont des intérêts acquis.
parler à une demi-douzaine de chacun.

Le monde universitaire est-il isolé de l'industrie? Souvent.
[.____] est un diplôme sans valeur? Dollar sage, difficile à argumenter.
[.____] Les grades gagnent presque toujours plus d'argent, mais faites attention aux prêts au collège.

Signal de connaissances? Peut-être.
[.____] Si vous détestez l'école, vous n'en tirerez pas plus que vous ne l'introduisez.

Si vous vous sentez qu'un diplôme est un objectif digne de vous, c'est probablement.

Creusez plus profondément et découvrez le programme d'étude, les coûts, l'environnement. Assurez-vous d'avoir l'intérêt, l'engagement, le temps et les ressources. Vous êtes probablement allé à l'école pendant treize ans, alors qu'est-ce que quatre autres? Ils seront les plus chers et la personne principale que vous deviez compter pour les rendre les plus précieux, c'est vous.

Les coûts peuvent être assez effrayants, mais ils ne font que parler de l'histoire car il existe de nombreuses subventions et bourses d'études pour mérite, besoin et cent d'autres raisons.

Si vous allez, choisissez des professeurs intelligents et des bourgeons.

0
DeveloperDon

Deuxième question - Puis-je utiliser mon propre style?

Vous avez deux questions.

Le premier est dans votre titre. S'il vous plaît voir ma réponse antérieure.

La seconde est détaillée dans environ cinq paragraphes où vous caractérisez la manière dont votre style diffère du style professionnel avec les points énumérés ci-dessous:

  • 100% autodidacte.
  • Différent dans la technique et l'organisation.
  • Mélange d'orientation fonctionnelle et orientée objet.
  • Moins compliqué.
  • Beaucoup de fermetures.
  • Quelques commentaires.
  • Aucun test d'unité.
  • Peu de soulignes.
  • Pas de mvc.
  • Pas de colonne vertébrale.js.
  • Aucune application de modèle.

Résumé, je pense que vous demandez si ça va d'ok que vous utilisez l'approche Frank Sinatra - "Je l'ai fait mon chemin." Je sens l'ambivalence lorsque vous appelez le professionnel du code des autres, mais vous n'êtes pas à bord. Le style est un problème personnel collant et le débat sur ce qui est bon code est sans fin et souvent une perte de temps. Certains problèmes peuvent être plus faciles si votre groupe utilise une convention de codage écrite. Veuillez vérifier s'il vous plait:

http://fr.wikipedia.org/wiki/coding_conventions

Il y a une étiquette pour tuer le code de quelqu'un d'autre, et c'est une autre chose que vous devriez travailler avec votre équipe. Mettez votre peau épaisse et espérons qu'ils ne sont pas trop brutaux, mais que ce que vous faites, n'allez pas en guerre.

Vous avez commenté l'anxiété à propos des autres voyant votre code. Préparez-vous, car non seulement ils le verront, mais ils le réécriront et vous diront que ce qui ne va pas avec votre style. Vos collègues peuvent être flexibles ou rigides. De toute façon, je vous recommande de ne pas réécrire leur code de style ni de faire chaque point de style une négociation.

Les raisons d'avoir un code uniforme (et une formation uniforme) doivent accroître la vitesse et la productivité du développement et, de même, institutionnaliser l'apprentissage des meilleures pratiques. Les problèmes tels que la camelcope ou l'utilisation_underbars peuvent sembler triviaux et petits, mais il y a des avantages à la cohérence.

Veuillez être ouvert à des tests unitaires et au développement axé sur les tests. Lorsque vous êtes seul, ne faites pas partie de faire des projets de rémunération, cela ressemble plus à un passe-temps. Vos trucs n'ont pas besoin de mailler avec ce que font les autres. Si votre code se bloque, pas de gros problème. Mais lorsque vous participez à une équipe, le code que vous écrivez peut effectuer l'intégralité de l'équipe entière, en particulier si elle atteint les clients.

De même, si votre équipe utilise MVC, veuillez en apprendre davantage sur les mêmes sources qu'elles font référence. Les méthodes de structuration des programmes peuvent faire une énorme différence comme l'a été montrée par l'expérience. Encore une fois, prenez l'exemple et le leadership de votre équipe.

Si votre équipe utilise sackbone.js, vous l'utilisez aussi. Votre équipe est comme des canards volant dans la formation. Doubler ensemble les aide à dépenser moins d'énergie, les rend plus sûr et les aide à obtenir où ils vont plus efficacement. L'analogie se décompose si vous le poussez beaucoup, mais il y a de gros avantages à utiliser des outils, des techniques et des alignements communs derrière les décisions des équipes.

0
DeveloperDon

Le conseil donné est assez utile, mais j'essaie de me rappeler que mon objectif principal est de créer des "logiciels de travail" qui sont utiles à mes utilisateurs. Mon auditoire n'est généralement pas un groupe de programmeurs - ce sont des hommes d'affaires qui sont disposés à payer de l'argent pour une solution automatisée (les utilisateurs ne se soucient pas de OO méthodologies, cadres, tests d'unité, commentaires de code , etc. Alors ne soyez pas trop raccroché dessus.)

J'ai trouvé les idéaux du manifeste agile utile dans ma carrière (www.agilemanifesto.org)

  • Individus et interactions sur les processus et les outils
  • Logiciel de travail sur une documentation complète
  • Collaboration client sur la négociation de contrat
  • Répondre au changement au sujet d'un plan
0
AlfredBr

Ce n'est pas une réponse complète, vous avez déjà plusieurs bonnes. Cependant, il y a quelques points que pour moi d'avoir un peu confus et que je n'ai pas été abordé.

C'est un mélange de plusieurs choses que je fais. J'ai tendance à mélanger plusieurs paradigmes de programmation ensemble. Comme fonctionnel et oo. Je me penche sur le côté fonctionnel plus que OO, mais je vois l'utilisation de OO lorsque quelque chose aurait plus de sens comme une entité abstraite. Comme un objet de jeu.

Pour moi, on dirait que vous êtes déroutant déclaratif vs impératif Programmation, plutôt que la programmation fonctionnelle vs orientée objet. Si vous voulez dire que vous vous penchez vers la programmation déclarative et à l'écart de l'impératif, c'est une bonne chose. Le déclaratif cherche à supprimer les effets secondaires, ce qui devrait rendre votre code plus facile à comprendre.

Les langages de programmation modernes soutiennent souvent le modèle de programmation déclaratif. Par exemple, en C #, l'utilisation de LINQ entraîne un style déclaratif, car vous ne disez pas comment obtenir ce que vous voulez; Vous ne disez que ce que vous voulez.

Terminer OO La programmation laisse vraiment un mauvais goût dans ma bouche, mais cela semble être ce que tout le monde utilise strictement.

Les langues modernes sont souvent des langues multi-paradigmes. Il est rare que quiconque utilise une langue "pure". De nombreuses langues fonctionnelles soutiennent des objets et des effets secondaires. Les langues considérées comme orientées objet ne sont souvent pas imposées à la contrainte que tout est un objet.

Que voulez-vous dire par OO complète? Je n'ai jamais travaillé sur "pur" OO code. Peut-être que vous pouvez peut-être nous donner des détails supplémentaires de ce que vous n'aimez pas. Une illustration d'un projet open source pourrait vous aider.

OO Programmings nous donne de nombreuses fonctionnalités pour soutenir des choses comme: abstraction de données, encapsulation, messagerie, modularité, polymorphisme et héritage. Si je regardais une base de code qui n'en a pas profité de cela, cela laisserait un mauvais goût dans la bouche.

0
Dave Hillier