web-dev-qa-db-fra.com

Quels facteurs devraient influencer comment je détermine quand abandonner un petit projet avec un ami?

Je me suis retrouvé dans un endroit difficile à la fin. Travaille sur un jeu avec une programmation Buddy depuis près de 8 mois maintenant. Nous avons tous deux commencé comme nouveaux arrivants pour programmer vers août de l'année dernière, il est un étudiant de 2e année de CS, je suis une technologie de soutien informatique par échange et je suis un programmeur autodidacte avec des multitudes de livres et d'abonnements en ligne.

La question que j'ai constamment vu est que, comme nous écrivons un morceau de code, cela sera souvent un peu piraté ensemble, a beaucoup d'échecs, et s'il s'agit d'un nouveau concept à l'un de nous, plein de solutions naïves. C'est bien, nous apprenons, je m'attends à ce que nos deux Code soient un peu piraté ensemble sur les sapins ou la deuxième passe. Le problème se présente quand il s'agit de fixer et de refrivre les comportements piratés ensemble.

Mon partenaire tiendra son comportement fraîchement pavé, refusant de manière flagrante de voir toute erreur au moment où elle commence à fonctionner. Réclamant près de la perfection à partir d'un morceau de structure, je ne peux même pas essayer d'utiliser même s'il avait des commentaires et des méthodes et des champs nommés de manière appropriée. Peu importe à quel point j'essaye, je ne peux tout simplement pas le faire voir les défauts flagreux évidents qui empêcheront tout changement supplémentaire ou expansion du comportement sans le casser complètement et tout ce qui est si étroitement couplé pour qu'ils puissent aussi bien être dans la même classe. Des solutions piratées restent perpétuellement piratées, les designs mal pensés restent comme où ils ont été conçus et testés pour la première fois.

Je passe autant de temps à manger du nouveau code que je l'écrivant moi-même, je suis une perte de quoi faire. Mon partenaire a perdu ce soir et a clairement indiqué que peu importe la référence, peu importe la pratique courante, quelle que soit la preuve irréfutable, son code restera comme il l'a fait pour la première fois. Même si des livres entiers ont été écrits sur la raison pour laquelle vous voulez éviter de faire quelque chose, il refusera de reconnaître leur validité réclamant que c'est juste un avis de quelqu'un.

J'ai un intérêt direct dans notre projet, mais je ne suis pas sûr que je puisse continuer à travailler avec mon partenaire. Je semble avoir trois options ouvertes à moi.

  • Arrêtez de vous occuper de la base de code qui fonctionne au-delà du point de compilation et de traiter simplement d'essayer de maintenir et d'analyser le comportement qui sort à peine. En espérant qu'une fois que les choses commencent à briser sérieusement, il le verra et essayera de faire plus que simplement mettre un pansement sur le design fondamentalement imparfait.
  • Continuez les arguments sans fin sur les problèmes qui ont été imaginés il y a une décennie par d'autres personnes beaucoup plus capables.
  • Arrêtez la programmation sur ce projet, abandonnant près de 10 000 lignes de mon code et d'innombrables heures émettant la conception et essayer de trouver un nouveau projet seul.

Quelle approche puis-je prendre pour déterminer s'il vaut la peine de continuer avec ce projet avec cette personne? Ou quels facteurs devraient influencer ma décision? Nous avons écrit beaucoup de code et je ne veux pas abandonner cela sauf si nécessaire.

30
Douglas Gaskell

expédié, le code imparfait est meilleur que le code parfait sur le tableau blanc qui ne devient jamais expédié.

Cela étant dit...

Ceux d'entre vous avec plus d'expérience, ou qui ont été dans des situations similaires. Qu'est-ce que tu as fait? Que recommanderiez-vous que je fais?

Je considérerais ce qui suit.

  • Quel est le but de ce projet? Amusant? De l'argent? Apprendre?
    • Est-ce que vous accomplissez cet objectif?
  • Cette personne vous permettra-t-elle réellement de mieux accomplir vos objectifs?
  • À quelle distance allez-vous réellement expédier?
  • Ces problèmes empêchent-ils du lancement? Ou sont-ils une affaire de fierté personnelle?
  • Y a-t-il des avantages à travailler avec quelqu'un sur une base volontaire quand il est frustrant?

Arrêtez la programmation sur ce projet, abandonnant près de 10 000 lignes de mon code et d'innombrables heures émettant sur la conception et essaie de trouver un nouveau projet seul.

Considérez ce qui précède, essayez de penser à travers les travaux supplémentaires requis.

Vous devez déterminer vos priorités et déterminer si les problèmes liés à travailler avec cette personne en valent la peine. Nous ne pouvons pas comprendre cela pour vous.

Mon partenaire a perdu ce soir et a clairement indiqué que peu importe la référence, peu importe la pratique courante, quelle que soit la preuve irréfutable, son code restera comme il l'a fait pour la première fois.

Vous savez que vous ne voulez pas travailler avec ce type de personne.

Vous faites un projet comme celui-ci probablement parce que vous voulez apprendre la programmation et trouvez l'élégance dans l'artisanat lui-même.

26
enderland

Cela peut être une chose culturelle. Dans certaines cultures, admettez que vous ayez commis une erreur, et demandez à quelqu'un d'admettre que de faire une erreur concerne la chose la plus rudité que vous puissiez faire. Si c'est cette situation, fuyez.

Dans mon expérience avec des personnes très intelligentes, si vous leur dites que quelque chose qu'ils font est moins que parfait, ils vous donneront (1) vous donner une raison correcte et facile à comprendre pourquoi ce qu'ils font est réellement, (2) dire Vous savez que c'est faux, mais ils n'ont pas le temps de le réparer à cause des priorités, ou (3) merci de l'avoir dirigé et de le réparer.

Refuser d'apprendre concerne le pire attribut qu'un développeur de logiciel pourrait avoir. Laissez-le à ça. La vie est trop courte et précieuse pour perdre votre temps sur lui.

58
gnasher729

Peut-être que le moyen le plus simple est d'amener quelqu'un d'autre dans le projet - vous avez tort et que son codeBase est trop intelligent pour vous, ou que vous avez raison et c'est trop intelligent pour tout le monde. Vous découvrirez bientôt et vous sauvegarderez si cela se révèle être des ordures, convolués, le code de niveau junior-programmeur.

D'autre part, un produit de travail vaut n'importe quel nombre d'années de code précis finement réglé, élégant et claire. Faites le jeu, expédiez-le, à l'écart alors - laissez-le le maintenir et ne travaille pas sur V2.

12
gbjbaanb

Voici quelques idées même si certaines d'entre elles sont mutuellement exclusives.

  • Responsabilités de source séparées. Si vous travaillez sur le module A et lui sur le module B, vous pouvez concurrencer vos différents styles. Est-ce qu'il relâche des caractéristiques de travail souvent? Atte-t-il un point où il a besoin de réécrire son code de zéro? Refactorez le code de vos modules et ne le touchez pas,

  • Laissez-le faire le maintien de son pire code. S'il le fait, vous avez évité une tâche affreuse. S'il n'est pas capable, il ressentira la douleur.

  • Considérez-le d'un utilisateur ou d'un point de vue professionnel. Dans certains cas, vous n'avez besoin que d'un produit viable que Google ou Microsoft pourrait acheter. Dans d'autres, vous lancez un produit sur le marché et soutenir des milliers de clients avec une buggy ou un code piraté sera l'enfer. N'est pas la même chose si votre code contrôle des drones avec des missiles nucléaires ou des vidéos heureuses pour les adolescents.

  • Il fait les cours, vous faites les tests. Le code de refactorisation avec des tests est plus facile et plus sûr. De cette façon, vous n'aurez pas besoin de regarder à l'intérieur du code que de la barre Junit. Cela suppose que A) Vous êtes des tests de programmation, B) votre code de collègue est testable. Si vous trouvez difficile de construire les tests pendant la phase de codage, cela sera pire.

  • Aller ensemble à la formation ou aux événements. Lorsque vous ne savez pas que le bon moyen est assez naturel, utilisez la seule façon de savoir que vous connaissez. Voir le code de l'autre pourrait ne pas tout résoudre, mais ne fera pas mal d'essayer.

  • Trouvez vos forces complémentaires. Le refactoring peut parfois être amusant. S'il écrit des choses qui au moins travailler, vous pourriez alors faire le refactoring. Il peut faire Spikes pour explorer des solutions qui ne se terminent pas dans le code de production.

  • Il pourrait ne pas vouloir réécrire le code mais il pourrait accepter d'écrire le nouveau code mieux. Je comprends que la réécriture est dure, ennuyeuse et peut briser des choses. Cultiver des îles de qualité. De cette façon, il aura de bons exemples de comment faire des choses.

  • Utilisez la règle Boy Scout . Faites des choses laissées incroyables à moins que vous n'ayez besoin de travailler dessus. Si un module est mal écrit mais fonctionne et n'a pas besoin de changer le laissez comme ça. Si vous devez corriger un bogue ou remplir une fonctionnalité, améliorez-la un peu. Après quelque temps, les 20% des classes que vous modifiez 80% du temps s'améliorera. Plus d'îles de qualité.

Nous ne pouvons pas suggérer quelle est la meilleure solution sans vous connaître tous les deux. Bonne chance.

9
Borjab

Ok, voici une réponse que vous ne voudrez probablement pas.

Ne "corrige" pas le code que s'il ne met pas en œuvre la fonctionnalité.

Voici mon raisonnement. Vous essayez probablement de gagner de l'argent. Pour gagner de l'argent, vous devez expédier des fonctionnalités remplies rapidement. Personne ne vous paiera plus pour un jeu d'ordinateur "bien codé".

La plupart des entreprises ont le même problème. Réfacteur du code existant pour le faire "mieux", parfois même objectivement mieux en termes de vitesse ou de fiabilité OU Écrire de nouvelles fonctionnalités.

99% du temps qu'ils choisissent d'écrire les nouvelles fonctionnalités car le résultat d'une analyse de coûts simplifiée.

4
Ewan

J'aime toutes les réponses jusqu'à présent. Prendre l'un des points de l'Enderland Réponse :

Y a-t-il des avantages à travailler avec quelqu'un sur une base volontaire quand il est frustrant?

J'aimerais prendre ce temps pour brancher Exchange de pile d'examen de code . C'est un endroit merveilleux où vous pouvez obtenir votre code critiqué par des professionnels. Et honnêtement, beaucoup de critiques de code Il y a énormément utile pour les personnes impliquées - les demandeurs, les répondeurs et ceux qui trébuchent et les lisent. Vous obtenez rarement des critiques utiles dans un cadre professionnel (ce qui peut être le cas aux endroits où j'ai travaillé pour une raison quelconque).

Mon conseil est de poster une partie de votre code pour examen. Je ne suggérerais pas d'utiliser comme munitions pour prouver que ce gars tort - je doute qu'il va le prendre au cœur - mais vous pouvez obtenir des informations très utiles à la fois sur le code que vous avez écrit et que vous avez écrit. Je recommande de soumettre les morceaux de code que vous vous battez le plus. Selon toute vraisemblance, vous avez tort de mal à la fois dans une certaine mesure et vous pouvez utiliser l'examen comme moyen d'obtenir une tierce partie objective à entrer. Cela accomplira quelques choses:

  • Vous pouvez déconnecter de la tension émotionnelle de la situation.

  • Vous obtenez des conseils professionnels en temps réel. Un grand boost à ce que vous apprenez.

  • Quelqu'un vous dira que vous avez tort. Ce qui est bon, parce que quiconque programmant à n'importe quel temps va entendre cela. Vous pouvez le gérer mal comme ce mec avec lequel vous travaillez, ou vous pouvez apprendre à le gérer.

Je pense que si vous utilisez les critiques de code de droite, vous avez beaucoup à gagner en faisant face à cette personne extrêmement frustrante. Et c'est beaucoup plus interactif qu'un livre ou un site Web qui dit "Faites cela, car c'est la bonne façon la plupart du temps".

De même, il y a le échange de pile de développeur de je . Pas tellement un endroit pour poster du code pour examen, mais pour poser des questions sur les concepts/idées que vous avez des difficultés à lutter. Encore une fois, cet endroit est extrêmement utile pour toutes les personnes impliquées.

Vous avez peut-être déjà vu ces deux sites avant; Je voulais juste m'assurer qu'ils font partie de votre outils.

3
Shaz

En supposant que vous décidez d'abandonner le projet:

  • Fourche le code et le refacteur, en l'utilisant comme un élément de portefeuille 'avant/après'
  • Depuis que l'objectif était (principalement ou en partie) d'apprendre à apprendre la programmation et, depuis l'apprentissage, quelque chose prend 2-4 fois tant que ce que vous savez déjà, ce travail n'est pas vraiment gaspillé.
  • 'Attachment de coûts Sunk' (l'investissement que vous avez déjà fait dans une entreprise avant d'apprendre que c'était une mauvaise idée) est l'une des erreurs humaines les plus courantes dans la prise de décision
  • Garder l'amitié, encadrer votre décision de prioriser l'amitié sur le codage
2
Amy

Cela semble assez désespéré. Je voudrais probablement abandonner et passer à autre chose si j'en ai senti à ce sujet comme vous le faites; Il arrive définitivement un moment pour aller à l'écart et vous êtes peut-être là.

Si vous n'êtes pas prêt à vous promener, vous devez trouver un moyen de trouver un meilleur accord sur votre processus. On dirait que vous avez des normes de codage, mais que vous ne connaissez pas les normes convenues. La prochaine fois que vous viendrez à un carrefour, la prochaine fois que vous voulez un singe avec un peu de code et que votre copain veut la laisser seul, tirer pour une conversation le long des lignes suivantes:

douglas: Je veux le changer parce que x, qui est ici dans nos directives.

buddy: C'est bien comment c'est.

douglas: Vous dites donc que nous devrions changer les lignes directrices?

buddy: Non, je pense juste que c'est bien comment c'est.

douglas: Quelles sont les lignes directrices?

buddy: Je ne sais pas - vous les avez écrites.

douglas: Quelles directives écrivez-vous?

buddy: Je n'écrirais pas de lignes directrices. C'est une perte de temps.

douglas: Nous devrions donc simplement jeter les lignes directrices et écrire quelle que soit la merde que nous pensons à l'époque?

buddy: Ce n'est pas une merde.

douglas: Est-ce parfait? Est-ce idéal?

buddy: ça fait le travail; Passons à la fonction suivante.

douglas: Y a-t-il quelque chose que nous pouvons être d'accord, que X est bon code et y est un mauvais code?

buddy: Laisse-moi tranquille; Je veux juste coder!

Eh bien, ça ne va pas bien, l'a-t-il fait? Je suppose que le sentiment que j'ai est que toi et mon pote veulent des choses différentes. S'il y a quelque chose que vous pouvez être d'accord, super; Commencez à partir de là et construisez-le dessus. Mais vous ne pouvez pas le faire accepter de vouloir ce que vous voulez - plus que vous ne pourriez vous faire envie de savoir ce qu'il semble vouloir. Si vous pouvez trouver ce désir commun et venir à un accord commun à partir de là, vous pouvez peut-être travailler ensemble.

douglas: Que veux-tu?

buddy: Je veux juste coder.

douglas: Je veux aussi coder, mais je veux me sentir fier de mon code.

buddy: Je suis fier de mon code.

douglas: Voici une fonction que je suis fier de - qu'en pensez-vous?

buddy: Eh bien, ça va, mais vous ne devriez pas recalculer x à l'intérieur de la boucle; C'est inefficace.

douglas: Vous dites donc que nous devrions toujours calculer des valeurs constantes en dehors des boucles?

buddy: Eh bien, duh!

douglas: Pensez-vous que cela devrait être dans nos directives?

buddy: Bien sûr.

douglas: OK, je vais l'ajouter à nos directives et je vais mettre à jour mon code ...

douglas: Comment ça va maintenant?

buddy: Bien.

Maintenant, Buddy contribue aux directives (toutefois indirectement), et il a donc un peu de propriété. Peut-être - juste peut-être - il commencera à les prendre plus sérieusement. Je pense que je serais enclin à essuyer l'ardoise et à recommencer aux lignes directrices, à laisser la plupart ou tous venir de copain au début. Allez-y et écrivez le code de merde afin qu'il ait le besoin d'ajouter aux directives; laissez-les venir de lui. Peut-être alors il commencera à comprendre la raison d'eux.

Mais si vous préférez abandonner et passer à autre chose - cela pourrait ne pas être une mauvaise option non plus.

2
Carl Manaster

Pour ajouter des points supplémentaires à toutes les grandes réponses:

  • Combien plus d'effort prendra-t-il pour terminer le projet? Notez que la finition des "10% des 10%" prend beaucoup plus de temps que les gens attendent. Cela inclut les tests de lecture/le réglage, la fixation de la convivialité, l'adaptation d'une variété de plates-formes cible, libérant, ... Si c'est un jeu iOS, il y a la signature de code et la révision de Apple. Honnêtement, la finition peut prendre aussi longtemps que le premier "90%". Et ce sera plus difficile si le code est aussi mauvais que vous le suggérez. (Pouvez-vous commencer à le tester maintenant?)
  • De manière réaliste, quelle est la probabilité que les gens apprécieront votre jeu?
  • Méfiez-vous de la " Sunk Coût Heuristic ". Évaluez 10 000 investissements en ligne à code à la lumière de la grande image, en regardant en arrière sur un produit fini et sans optimisme indu.
  • Pouvez-vous continuer si cela prend 3 ans? Vous avez deux styles de développement différents (pas une bonne correspondance d'équipe). On dirait que vous êtes près de la fin de votre patience et si vous continuez, cela pourrait être difficile de rester amis.
1
Jerry101

tL; DR Vous devriez subirablement abandonner le projet.

Sans en savoir plus à ce sujet, alors vous nous avez dit, je spéculerais que le frottement que vous rencontrez est lié à l'expérience.

Même si vous n'êtes pas un programmeur de profession en tant que professionnel, vous avez probablement appris la solution difficile à faire la première fois la première fois, votre référence à votre futur auto indique que vous l'avez vêtue dans le passé et appris pas à.

Votre étudiant de 2e année CS, même si assez doué, il manque probablement de la perspective d'avoir fait cela (si vous êtes comme moi, à plusieurs reprises :).

Il/elle sera jamais Croire vraiment en la valeur de la fixation des choses que vous allez enfreindre les cicatrices de ne pas le faire ou est encadrée dans une culture avec une discipline d'ingénierie exceptionnelle, ou les deux.

Cette personne mai Soyez votre pair de programmation, mais est non Votre projet Peer, ainsi que ce jeu en tant que projet par pairs est probablement une cause perdue. Sauf si vous êtes prêt à simplement manger le coût futur. Peut-être que la relation est assez précieuse pour vous. Dans ce cas, donnez-vous une corde suffisante pour vous accrocher et intervenir pour aider à nettoyer le désordre lorsque cette personne est obligée de reconnaître le problème.

Sinon, citer de cautionner et faire un projet avec un pair ou faire un projet mentor/mentoré où c'est la dynamique dès le départ.

1
Jared Smith

Vous devriez simplement continuer à faire votre code comme vous le pensez, avec des commentaires et une copie de votre version du code (au cas où il modifie votre code).

Ne vous battez pas, ne vous fâchez pas, souriez simplement quand vous voyez ses mauvaises décisions.

Ne vous plaignez que comme un utilisateur, s'il travaille, ne vous plaignez pas.

N'abandonnez pas non plus, il est important de s'habituer à des personnes différentes de vous, cela se produira dans un vrai travail.

0
Mandrill