Luttant en tant que programmeur. Besoin de conseils [fermé]

20

Je suis développeur depuis plusieurs années. Je suis assez bon dans ce que je fais et je peux "faire le travail".

Mais il y a une différence entre "faire le travail" et "faire le travail correctement". Prenons un exemple.

Récemment, j'ai développé un site Web à partir de zéro. Le site Web fonctionne bien et je n'ai eu aucun problème. En parcourant le code, je me suis dit que j'aurais pu mieux le faire. J'aurais pu réduire mes requêtes MySQL. J'aurais pu utiliser MVC pour faciliter l'extension (il doit être étendu maintenant).

J'ai décidé de réécrire le projet en utilisant CodeIgniter. J'aime le cadre. Mais j'ai ensuite été détourné parce que pour réduire mes requêtes MySQL, j'ai dû apprendre des jointures avancées.

Et c'est ça le problème. Chaque fois que je fais un travail correctement, je suis dans une roue d'apprentissage constante. Et des sujets tels que les jointures MySQL avancées prennent du temps à apprendre, puis à mettre en œuvre.

Je ne travaille pas pour une entreprise. Je fais tout seul. J'imagine donc que si je travaillais en tant que développeur PHP pour une entreprise, il y aurait des équipes distinctes pour gérer le SQL.

Être en solo c'est difficile. Et parfois, bien que mes connaissances soient avancées, je me retrouve à poser question après question. J'ai probablement beaucoup de fierté dans mon travail. Mais si je devais travailler pour une entreprise qui s'occupe de projets complets, j'imagine que les projets prennent du temps car je devrais en apprendre de plus en plus pour satisfaire ma fierté et m'assurer que je fais les choses "correctement".

J'ai l'intention d'obtenir un emploi après la nouvelle année. J'ai besoin de la sécurité d'emploi. C'est pourquoi je pose cette question.

Quels conseils pouvez-vous donner en termes de développement personnel et d'amélioration personnelle? Dois-je moins m'inquiéter? Ou peut-être chercher un emploi en tant que développeur PHP lorsque je ne traiterai pas directement les requêtes SQL?

James Guvna Jeffery
la source
54
si vous ne voulez pas apprendre constamment, vous êtes dans le mauvais domaine
6
@JamesGuvnaJeffery: s'ils n'accordent pas (à aucun moment) de temps pour apprendre pendant un projet, je ne voudrais pas y travailler parce qu'en tant que développeur, j'arrêterais de m'améliorer.
Marjan Venema
3
le travail est l'apprentissage, ils ne vous donnent pas ce temps magique pour étudier, en fait ils le font, cela s'appelle "votre temps personnel". Ils ne l'appellent pas «formation en cours d'emploi» sans raison. Si vous n'êtes pas à l'aise d'être un apprenant auto-initié et d'apprendre tout le temps sans rémunération, comme je l'ai dit, vous êtes probablement dans le mauvais domaine.
5
L'ancien code est censé sucer. Ne vous tuez pas dessus; essayez juste de vous améliorer avec le temps. Réécrire un projet de travail n'a guère de sens pratique. Les clients ne paieront pas de supplément pour cela. codinghorror.com/blog/2006/10/…
Job
2
Vous ne comprenez pas ce que je dis, travailler pour une entreprise est exactement l'OPPOSÉ de ce que vous épousez et que vous aimez faire. Il travaille sur le calendrier de quelqu'un d'autre, en utilisant ce qu'il dicte et comment il le dicte sans compromis mais sans temps pour étudier de nouvelles choses sur son temps et pas le temps de mettre en œuvre des choses dans de nouvelles choses passionnantes que vous apprenez dans votre temps personnel. C'est la réalité d'être un développeur de logiciels d'entreprise. Je doute que vous soyez aussi dévoué à un environnement d'entreprise que vous le dites à votre style expérimental de recherche et développement auquel vous êtes habitué.

Réponses:

33

Conseil: N'ayez pas peur d'apprendre de nouvelles choses - vous avez fait un bon premier pas en reconnaissant que vous pouviez faire mieux, puis vous avez fait l'effort d'apprendre comment vous pourriez faire mieux. Oui, cela prend plus de temps à l'avance, mais le gain en vaut généralement la peine à long terme. Maintenant que vous connaissez CodeIgniter, vous pouvez l'utiliser pour les prochains projets futurs. Vous pouvez le mettre sur votre CV. Maintenant que vous connaissez les techniques SQL avancées, vos futurs projets en bénéficieront. Si vous arrêtez d'apprendre, vous stagnerez.

FrustratedWithFormsDesigner
la source
21

Ce que vous vivez me semble tout à fait normal. C'est ainsi que nous travaillons sur notre métier et nous améliorons de plus en plus ce que nous faisons.

grokus
la source
10

... J'ai décidé de réécrire le projet en utilisant CodeIgniter. J'aime le cadre. Mais j'ai ensuite été détourné parce que pour réduire mes requêtes MySQL, j'ai dû apprendre des jointures avancées.

Et c'est ça le problème. Chaque fois que je fais un travail correctement, je suis dans une roue d'apprentissage constante. Et des sujets tels que MySQL avancé prendre rejoint le temps d'apprendre, puis le temps de mettre en œuvre ...

Bien donné ci-dessus, je pense qu'il est logique pour vous de vous concentrer sur l'amélioration de votre capacité à planifier à l'avance, à établir et à hiérarchiser la file d'attente de travail, à gérer votre temps - des trucs comme ça.

Vraiment, cela semble être la seule chose qui manque dans votre attitude. Ce que vous appelez le «détournement» est essentiellement un autre travail («apprendre les jointures avancées») qui doit être planifié, priorisé et mis en file d'attente.

moucheron
la source
Merci @gnat. J'apprécie vraiment ces réponses positives. Je peux certainement être d'accord avec vous sur ce que vous avez dit.
James Guvna Jeffery
9

Être un professionnel dans ce domaine, c'est constamment se casser contre sa propre insuffisance. Faites cela du 8 au 5 du lundi au vendredi, peut-être plus si une date limite approche, passez un bon week-end et revenez pour plus lundi. Voilà le travail.

Faire des logiciels demande une certaine humilité. Si vous êtes quelqu'un qui doit avoir raison et qui doit prouver qu'il savait déjà tout, ce n'est peut-être pas le domaine pour vous.

Je ne peux pas imaginer ne pas apprendre quelque chose chaque jour. Je ne pense pas que je voudrais ce travail.

Dan Ray
la source
D'après mon expérience, c'est bien d'être quelqu'un qui doit avoir raison, aussi longtemps que l'on peut aussi souffrir d'insuffisance gastrique. Je me botte sur chaque petite chose qui n'est pas parfaite. C'est pourquoi je fais mieux les choses au fil du temps.
Tom Anderson
Eh bien, c'est le paradoxe n'est-ce pas? Hubris est l'une des trois vertus du programmeur. Mais d'après mon expérience, être "poussé de façon compulsive à prouver que je suis intelligent en montrant que je savais déjà tout avant de l'apprendre" est une tendance que les développeurs débutants abandonnent ou ne durent pas longtemps dans ce domaine.
Dan Ray
Peut-être ralentir plutôt que de lâcher prise? Il y a longtemps, heureusement, j'ai pris l'habitude de proclamer que je savais des choses que je ne savais pas. Cependant, je déteste toujours admettre ne pas savoir les choses; la nécessité de combler l'écart entre ce que je sais et ce que je veux pouvoir dire, je sais, est tout à fait un moteur pour moi. Pas nécessairement pour tout le monde!
Tom Anderson
Je ne sais pas, Tom. Il me semble que ce moment d'embarras que vous ne savez pas déjà quelque chose est un moment que vous pourriez passer à l'apprendre. J'aime en savoir autant que le prochain, mais je n'ai aucun problème à dire "je ne sais pas".
Dan Ray
6

Être en solo est difficile. En revanche, lorsque vous travaillez avec une équipe de développeurs, tout le monde apprend les uns des autres. En tant qu'équipe, vous allez acquérir beaucoup de connaissances en travaillant avec d'autres développeurs, et avec beaucoup moins d'efforts que lorsque vous essayez de tout comprendre par vous-même.

Cela dit, en tant que développeur, vous devez vous engager à constamment apprendre. Qu'il s'agisse de lire de la documentation pour de nouveaux cadres ou des livres sur le développement, vous devez faire un effort constant pour maintenir vos connaissances à jour et en croissance. Cependant, faire partie d'une équipe peut clarifier le domaine dans lequel vous devez en savoir le plus à un moment donné.

En ce qui concerne votre point sur la révision de votre ancien code et la réécriture: j'ai trouvé que mon propre code représente toujours le meilleur de ce que je savais au moment où je l'ai écrit. Plusieurs fois, je reviens à quelque chose que j'ai écrit il y a des années et me tape sur le front, quand je vois à quel point j'aurais pu faire mieux, compte tenu de ce que je sais maintenant . Mais c'est la nature de l'expérience, vous l'obtenez après en avoir besoin ...

Enfin, lorsque vous développez une application, vous avez toujours besoin de faire preuve de bon sens commercial, de décider quand il est préférable de couper les coins pour terminer plus rapidement et quand il est nécessaire de prendre plus de temps pour apprendre quelque chose de nouveau qui améliorerait la conception et la qualité. de la demande. Il y a un univers de choses à apprendre dans le monde du logiciel. Sans exercer ce genre de bon jugement, vous pourriez vous retrouver à tourner les roues en apprenant, en réfléchissant, en repensant, mais sans rien faire.

Sam Goldberg
la source
+1 pour la deuxième phrase. J'ai appris plus de mes collègues, travaillant dans un certain nombre d'organisations différentes, que je n'ai jamais appris en lisant (livres ou en ligne). Il semble de votre question que travailler en équipe pendant un certain temps vous ferait du bien.
Dawood dit de réintégrer Monica
3

Je pense que vos préoccupations sont valables, mais vous ne devriez pas perdre le sommeil. Je crois qu'un être technologue vient avec les bagages suivants:

  • Vous devez constamment apprendre de nouvelles choses. Soit vous apprenez à aimer cela, soit vous ne le faites pas.
  • Il y a bien plus de choses que vous voudrez maîtriser que l'on ne pourrait jamais savoir.
  • Vous développerez des compétences au cours d'un projet que vous souhaiteriez avoir au cours du projet.
  • Par conséquent, vous voudrez toujours revenir en arrière et refaire ce projet. Il est si difficile de sortir quelque chose qui pourrait être mieux.

En fin de compte, il semble que vous vous souciez de la création de logiciels de qualité, ce que vous ne pouvez pas apprendre . Sachez que vous devez différencier la construction d'une solution de haute qualité avec la construction de quelque chose de parfait. On dirait que tu es comme moi et que tu ne te sentiras jamais parfait. Ce serait plus inquiétant si vous ne sentiez pas que vous aviez une chance de vous améliorer et d'améliorer votre travail.

Il est difficile d'être un mec de tous les métiers (maître d'aucun), mais vous devez vraiment trouver comment identifier les choses qui vous intéressent le plus et qui vous sont les plus utiles, et vous concentrer sur elles. Trouvez la meilleure façon de «sous-traiter» d'autres travaux à d'autres personnes ou outils .

Joe
la source
2

Je pense que vous devez moins vous soucier de "faire les choses correctement". Efforcez-vous de la perfection, mais réalisez qu'il n'est pas vraiment possible de concevoir une solution parfaite, encore plus la première fois. Le fait que vous vous inquiétiez suffisamment de bien faire les choses pour poser cette question signifie que vous êtes déjà sur la bonne voie.

Quant à votre frustration d'apprendre de nouvelles choses, j'ai trouvé que travailler en groupe et pouvoir demander et discuter du problème avec d'autres programmeurs supprimait la douleur de découvrir ce que je devais apprendre et le remplaçait avec la joie de découvrir quelque chose de nouveau et apprendre à l'appliquer.

J'adore écrire des logiciels, mais parfois il y a effectivement de la peine à ne pas apprendre réellement quelque chose de nouveau, mais à trouver exactement ce que vous devez apprendre pour pouvoir réaliser ce que vous voulez faire.

D'après ce que je comprends, j'ai été dans une position similaire à vous. Coder quelque chose seul peut être à la fois frustrant et difficile, et gratifiant et quelque peu amusant à d'autres moments.

Faites exactement ce que vous prévoyez de faire, trouvez un emploi où vous ferez partie d'une équipe (et faites de votre mieux pour vous assurer de décrocher un emploi quelque part qui ne craint pas). Travailler avec d'autres personnes qui utilisent les mêmes technologies et conçoivent le même logiciel augmentera votre compréhension et votre application de ces technologies et modèles de conception presque du jour au lendemain.

Quant à savoir comment faire quelque chose de bien la première fois, eh bien, comment sauriez-vous qu'il y avait une meilleure façon que si vous l'aviez déjà fait d'une certaine manière la première fois? La compétence en conception de logiciels dépend souvent largement de l'expérience. Joel Spolsky est un génie logiciel, mais si vous lisez beaucoup de ses articles, vous remarquerez qu'ils sont en grande partie le résultat de l'expérience et de l'intelligence.

En ce qui concerne la partie SQL, en tant que développeur .NET, je n'ai pas encore travaillé n'importe où avec un développeur de base de données dédié, nous écrivons tous notre propre SQL, mais il y a souvent des développeurs qui sont très bons en SQL qui sont prêts à vous aider avec les trucs plus en profondeur.

Vous parlez comme un gars intelligent, je ne pense pas que vous devriez être si dur avec vous-même.

333Mhz
la source
1

C'est tout à fait normal et ce n'est pas quelque chose qui devrait vous inquiéter trop. Vous devez continuellement apprendre de nouvelles compétences, mais vous devez également apprendre à hiérarchiser et à gérer votre temps. Vous devez également éviter le piège du réaménagement inutile.

Le programmeur inexpérimenté sera souvent entraîné dans le piège du réaménagement:

Je n'ai pas écrit ce programme parfaitement, et maintenant je dois l'étendre ou le modifier. Il va falloir beaucoup de travail pour modifier le code existant en raison de la façon dont je l'ai écrit. J'ai appris tellement plus depuis, je suis sûr que la meilleure chose serait de réécrire tout le programme. Je suis sûr que je pourrais l'écrire beaucoup mieux cette fois.

Il y a un certain nombre de problèmes avec cette logique.

  • c'est beaucoup de travail de modifier ou d'ajouter au code existant, mais ne sera-ce pas beaucoup plus de tout réécrire?
  • si vous réécrivez tout, il y a de fortes chances que vous fassiez de nouveaux bugs, et cela prendra plus de temps que vous ne le pensez (surtout si vous êtes inexpérimenté). Envisagez-vous tout ce qui est impliqué dans l'écriture du système? (rappelez-vous combien de temps cela vous a pris la première fois)
  • vous avez beaucoup appris depuis que vous avez écrit le programme à l'origine (vous pourrez donc peut-être l'améliorer), mais vous en apprendrez également davantage le mois / l'année prochaine. Ce que vous fait penser que vous ne voudrez pas tout réécrire à nouveau à un moment donné à l'avenir?
  • le test ultime d'un programme est qu'il fonctionne . Tu n'as rien de mieux à faire?

Il ne peut jamais faire de mal d'envisager et de planifier un réaménagement. Cela signifie que vous devez réfléchir à la façon dont vous souhaitez réécrire votre programme et tenter d'identifier les problèmes que vous rencontrerez. Dans ce cas, vous auriez identifié les `` jointures SQL avancées '' dont vous avez besoin, puis enquêter sur leur fonctionnement et en savoir plus.

Si vous pensez que vous n'auriez pas identifié le manque de connaissances avancées sur les jointures grâce à la planification (sans commencer le développement), vous devez améliorer vos compétences en planification. Essayez de penser à quelle partie du plan n'était pas suffisamment détaillée. Vous devez entrer dans les détails autant que nécessaire jusqu'à ce que vous soyez sûr que l'ensemble du système est techniquement possible.

Cette approche vous permettra d'apprendre à l' avance .

Enfin, l'apprentissage sur le tas fait partie intégrante de la programmation. Cela ne signifie toutefois pas que vous commencez une tâche et que vous réalisez ensuite que vous devez vous arrêter pendant une semaine pour en savoir plus sur, disons, le HTML de base. Vous pouvez vous arrêter quelques heures pour en savoir plus, mais votre employeur ne vous paie que pour faire le travail. Apprenez efficacement - ne lisez pas l'introduction et l'historique, juste comment cela fonctionne et comment il s'intégrera à votre programme. Si vous devez arrêter de travailler pendant des jours pour apprendre à terminer une partie du programme, vous le faites mal.

Kirk Broadhurst
la source
1

Vous pouvez penser que l'apprentissage de nouvelles technologies et de nouveaux problèmes est une perte de temps. Mais ne paniquez pas. C'est normal. Cela fait partie de votre pratique en tant que programmeur d'apprendre ... sinon nous serions tous coincés avec COBOL.

Les professionnels indépendants ajustent leurs commissions en conséquence et les périodes d'apprentissage sont entre autres choses à prendre en compte dans vos estimations de temps. La prochaine fois que vous décidez d'introduire un nouveau cadre, assurez-vous de prévoir suffisamment de temps pour l'apprendre.

Spoike
la source
0

Mais il y a une différence entre "faire le travail" et "faire le travail correctement".

Non, il n'y en a pas, et je pense que c'est la racine de votre problème ici. Il me semble que vous êtes trop accroché à vous soucier de faire les choses «correctement», car en tant que développeur individuel, vous ne voyez pas comment les autres fonctionnent. Mais correctement selon qui? Qui est cette personne magique qui peut décréter que ce que vous faites est «correct»? Prenez 100 des meilleurs programmeurs du monde, et je vous garantis que deux ne seront pas d'accord à 100% sur chaque sujet de programmation.

En fin de compte, ce qui compte, c'est que vos clients soient satisfaits. Si les programmes que vous créez résolvent les problèmes qu'ils sont censés résoudre et le font de manière rentable, vous le faites correctement. Il n'est pas plus intrinsèquement correct, par exemple, d'utiliser codeigniter que d'utiliser votre propre framework. Le corollaire à cela est que si vous produisez un tas de merde, vous le faites «mal» quels que soient les processus ou les «meilleures pratiques» suivis.

Que vous revisitez votre code et que vous voyez des moyens de l'améliorer est une partie normale du processus de développement. Ce n'est pas un signe que vous ne faites pas les choses «correctement». C'est un signe que vous êtes dédié à l'apprentissage et à l'amélioration. De tout ce que je vois dans votre message, vous n'avez aucun problème.

Maintenant, va donner un coup de pied * * *

GrandmasterB
la source
Je suis en désaccord avec cela. Il existe des moyens de programmation qui sont beaucoup plus faciles à maintenir et facilement lisibles que d'autres, et il y a des tas de livres dédiés à l'amélioration du programmeur afin qu'ils puissent écrire un meilleur code.
TehShrike
Merci @grandmasterB. TehShrike, et référence à ces livres?
James Guvna Jeffery
3
" aucun ne sera d'accord à 100% sur tous les sujets de programmation " - peut-être, mais au moins 80% seront d'accord sur au moins 80% des sujets de programmation. Voilà le consensus professionnel. Il n'y a pas de «droits» absolus, mais il existe des bonnes pratiques et elles méritent d'être connues.
Kirk Broadhurst,
1
Très bien, mais si votre programme ne résout pas le problème, ses meilleures pratiques ou non, cela n'a pas été fait correctement. Il existe un moyen objectif de savoir si un programme est exécuté correctement - si le client remet des feuillets verts ou un autre paiement en échange de votre travail. Toute autre mesure est simplement une opinion.
GrandmasterB
2
Et lorsque votre client estime que votre devis pour un changement est excessif et trouve un autre expert pour confirmer ces sentiments parce qu'il était mal codé, vous êtes sans travail.
JeffO