J'ai initialement démarré avec un petit projet, éditer des fichiers PHP et tel dans le NotePad ++. Il était facile de penser à une fonctionnalité et de l'ajouter sous forme de fichier séparé sur le projet. Au fur et à mesure que le projet devenait grand, ma productivité a commencé à diminuer car je ne me souvenais pas de toutes les fonctions que j'ai faites et où elles ont été stockées, etc. Ensuite, j'ai ajouté un IDE (PHPP) et SVN, puis j'ai remarqué un grand boost de productivité. p>
Je me trouve à nouveau sur la productivité (car tout devient trop complexe). Le projet est passé d'environ 20 fichiers ou donc des fichiers, et devient difficile de gérer tous dans ma tête (même en utilisant un IDE). Je me demande si les gens ont des conseils sur ce que je peux faire pour accroître la productivité. (Quel est le niveau suivant? S'il y en a un) p>
Tous les outils logiciels ou conseils sur la manière d'approcher la conception du programme / rendre les choses plus simples pour visualiser au moins? p>
Je sais qu'il n'y a pas de balle d'argent, mais toutes les idées seraient utiles. P>
Par exemple, utilisez-vous certains outils pour passer la journée à partir d'une IDE / SVN. En outre, écrivez-vous du code d'une certaine manière afin que cela ne soit pas un problème à l'avenir? (Spécificités s'il vous plaît). P>
23 Réponses :
Des langues non typées et de procédure se décomposent dans de grands projets. C'est toujours comme ça, c'est pourquoi OO a été fait et des choses comme le découplage et l'encapsulation sont considérées comme des méthodologies de conception de bonnes méthodes. P>
Bien sûr, utilisez d'abord la programmation et l'héritage OO. Ensuite, j'utiliserais le cadre comme le code allumeur de code pour commencer, ajoutez un module pour la mise en page (vous auriez donc une mise en page cohérente du site) et peut-être peu d'autres, point de ne pas passer trop de temps sur des choses courantes. Malheureusement, les migrations de CI ne sont pas géniales, mais elles existent, alors quelque chose due à ces lignes serait utile pour faire face à la DB. Avec ceux-ci, vous pouvez avoir votre productivité à nouveau car vous ne passerez pas de temps sur de petites choses. p>
chose avec des projets plus importants est qu'ils ont plusieurs aspects et plus ceux-ci existent, plus vous avez besoin de passer en compte. P>
J'espère que cela aide. P>
Ne soyez jamais fier de la modification du code dans un bloc-notes! L'IDE économise votre temps et augmente votre efficacité. Lorsque le projet devient grand, vous devez prendre soin de la gestion de projet et coller à un "modèle de processus" efficace, tel que RUP (processus rationnel unifié), EUP ou OOSP. STRUT> Votre SVN fait partie de la SCM . Bien sûr, il existe de beaucoup plus d'activités définies dans un motif.As pour le problème de gestion de fichiers, vous pouvez les diviser en différents forfaits et les sauvegarder dans différents endroits. Si vous n'avez aucune idée de "Génie logicielle", vous pouvez vous référer à des livres écrits par Scott W Ambler ou d'autres sur SE (Génie logiciel). N'oubliez pas que le logiciel est bien plus que Code! P>
+1 IDE sont parfaits pour la complexité de masquage. Le problème est que la complexité existe toujours. Et malheureusement, les idées ont souvent leur propre taxe de complexité.
Il a déjà mentionné qu'il utilise un IDE ...
Il a déjà mentionné l'IDE, il demande à quelle est la prochaine étape ... et tous ces Moppets Up-vote Top Réponse ...
L'utilisation d'un IDE n'est pas l'idée principale de ma réponse. J'ai dit d'utiliser un IDE juste pour soutenir son choix. Choisissez un modèle de processus et apprendre des concepts de base d'ingénierie logicielle sont les plus importants.
dessiner et / ou écrivez-le. Si vous dites que c'est «tout dans votre tête», alors prenez du temps du codage et documentez votre travail. Cela peut inclure des paragraphes expliquant pourquoi vous avez fait quelque chose. P>
Les diagrammes et autres visuels vous aideront également à le garder organisé. p>
J'ai trouvé certains programmeurs ignorent les facteurs non techniques dans les projets. Cela est particulièrement vrai pour les développeurs isolés qui n'ont pas la structure d'un groupe pour les guider. Votre travail est plus que le code et vous devriez examiner tous les aspects de votre processus. P>
Je suis d'accord 500%. Tout le code du monde ne veut rien dire si vous ne pouvez pas gérer comment il est entièrement mis en place, et après un certain point de complexité, la plupart des gens ne peuvent tout simplement pas faire cela. La mettre sur papier ou utiliser des outils de cas sont de grandes façons de visualiser la manière dont les choses fonctionnent, bien mieux que de tout garder tout dans la tête.
Le développement axé sur les tests pourrait vous être utile. p>
Créez d'abord vos tests, puis écrivez le code pour transmettre ces tests. P>
Lorsque vous ajoutez / modifiez n'importe quel code, demandez une suite de test de régression que vous pouvez exécuter pour vous assurer que vous n'avez pas brisé quelque chose. Dans mon expérience, cela permet d'économiser de temps, en particulier comme une application pousse en complexité et à la taille. P>
La productivité sur les grandes bases de code est moins sur les outils et plus sur le code que vous écrivez. Passez du temps à améliorer la qualité de votre code, à la fois nouveaux et existants. Oui, cela vous ralentit à court terme, mais il vous permet de maintenir votre rythme au fil du temps. P>
Ceci s'applique quelles que soient vos outils ou votre langue. Les meilleurs outils du monde n'aideront pas à quelqu'un qui sort de faire du désordre. Pour commencer, je garderais des idées simples à l'esprit: p>
Pour beaucoup plus d'informations approfondies sur la façon de concevoir un excellent code Je suggère d'avoir une navigation sur ici a>. p>
J'avais l'habitude de travailler sur un projet qui avait environ un million de lignes de code (C #, C ++) et il s'agit toujours de grandir. P>
1) Pour gérer une telle base de code, la structure de dossiers de l'archive SVN a été créée de manière à imiter diverses couches architecturales de notre produit. De cette façon, il est devenu plus facile de trouver notre chemin à travers les archives. P>
2) Nous avons également eu notre propre outil de construction personnalisé. Lorsque vous avez une base de code énorme, il pourrait ne pas être réalisable de tout construire à tout moment vous souhaitez tester une petite fonctionnalité. Notre outil de construction personnalisé a eu beaucoup d'options, qui pourrait construire les archives à n'importe quelle granularité. P>
3) Habituellement ce que j'ai observé, c'est si vous obtenez les fonctionnalités génériques / les aides à droite, construire de nouvelles choses sur elle devient plus facile et évite également le blague de code. P>
4) Configurez un wiki, si le nombre de développeurs travaillant sur votre projet est plus. La documentation Wiki est sans effort, la recherche capable et utile si elle est bien faite. P>
C'est tout ce que je peux penser en ce moment. J'espère que cela aide p>
L'utilisation d'un cadre PHP MVC réduirait considérablement la quantité de code que vous devez suivre. Cela s'occupera de nombreuses choses que vous avez probablement dû vous écrire comme une session, une couche de base de données, etc. En utilisant un cadre, cela vous aidera à organiser vos fichiers logiquement. P>
J'ai constaté que le développement de Développement dirigé par des tests (TDD) / Développement dirigé par le comportement (BDD) m'aide à garder les choses en ordre, car elles deviennent plus grandes. Même si vous écrivez simplement des tests d'unité, laissez de côté fonctionnel, intégration et autres tests, cela seul peut être une aide énorme. Au fur et à mesure que votre base de code se transforme en une truc du marais lourd, vos tests le garderont plus ou moins dans la bonne direction et l'empêcheront de trébucher sur un rocher, tombant face à face dans la boue et se noie parce que c'est aussi lourd pour se lever. p>
Si vous écrivez suffisamment de tests et ils sont bien pensés, ils peuvent le faire pour que vous puissiez faire des changements et savoir tout de suite si le changement a cassé quelque chose. Sans tests, après un certain point, vous ne pouvez rien changer. P>
Je ne connais pas trop la scène PHP, mais il semble qu'il existe des cadres de test pour PHP, dont une appelée Phpunit . P>
Qu'en est-il de ce mythe flottant autour de cette OOP sauvera la journée? Si c'est vrai, comment se fait-il que les gars de Linux / noyau poussent encore de nouvelles versions sur une base hebdomadaire? En d'autres termes, tous les programmeurs ASM / C sont condamnés à la complexité «Hello World»? P>
Vous ne savez pas exactement ce que vous demandez exactement. Je veux dire travailler sur les problèmes avant et quand ils se produisent: p>
Si vous avez à plusieurs fichiers et locs, je vous réduisez et réorganisez-les. Par exemple, en construisant ou en utilisant des cadres solides rock pour certaines tâches (PDO au lieu de MySQL ()). En d'autres termes, ne vous répétez pas. Noms de fonction courtes, accrocheuses et similaires: get_user_id (), get_task_id (), db_query () .... p> li>
La communication dans le groupe est-elle un problème? Essayez Wikis, essayez interne im, essayez d'utiliser plus de commentaires, demandez au groupe ce qu'ils n'aiment pas et que vous souhaitez être amélioré. Cela dépend totalement du projet. P> LI>
Si vous travaillez dans un groupe, ne soyez pas partout. Travailler sur vos pièces et les améliorer. Cela fait gagner du temps que vous devez entrer dans les autres membres de l'état d'esprit des programmeurs. Un changement à la fois. N'ouvrez pas 200 fichiers et modifiez des objets totalement indépendants. P> li>
automatiser et accélérer tout, si possible: déploiement, version de la version, documentation, tests. p> li>
Les grands projets sont de gros projets et ceux-ci sont toujours difficiles à comprendre. Le baiser est bon, mais dans mon expérience, il est parfois utile de décomposer la chose à des composants de travail indépendamment communiquant via XML, des interfaces spécifiques à la langue, etc. En bref: faites beaucoup de petits projets hors du grand. P > li>
Je garde une liste personnelle todo / mémoriser comme "myName.todo.txt". P> li>
Le déploiement rapide est obligatoire! Par exemple, installez une lampe locale / XAMPP et affichez directement vos modifications. P> li> ul>
Vous avez un projet énorme pour PHP, à mon avis. Cela peut être fait, mais vous avez vraiment besoin d'organiser. P>
rompre autant que possible dans des morceaux indépendants, chacun avec une petite interface. P>
"Terminer" autant que vous le pouvez. Traitez ensuite que le code «fini» en tant qu'API, vous n'avez donc plus besoin de le regarder. 4,5 jours de la semaine, supposons que quelqu'un d'autre l'a écrit et que vous ne connaissez que l'interface. P>
Obtenez l'habitude d'étudier régulièrement votre code et de rechercher des moyens de Éliminer la répétition forte> (c'est-à-dire appliquer le principe de ne pas vous répéter ni le principe séché), et soyez impitoyable dans le refactoring de cette répétition. Plus vous appuyez sur des extraits de code communs en méthodes et classes réutilisables, plus il est facile d'écrire un nouveau code et plus vous gagnez sur le problème. p>
Utiliser un bon fort> IDE fort> vous aidera à trouver des points communs et à appliquer des refacteurs. P>
Recherchez également la source ouverte
gros projet en php? Pas seulement des balles d'argent, il n'y a pas de balles de plomb et même des balles argileuses sont rares. P>
langue différente! p>
Ma première pensée est que vous devez écrire des objets. Votre commentaire sur "C'est tout dans ma tête" m'inquiète que P>
Je trouve un wiki, même si je suis le seul utilisateur, est utile phénoménalement pour organiser mes pensées. Le processus d'édition est facile et rapide, ce qui me permet de vider littéralement le contenu de mon cerveau dans un milieu numérique interrogeable. P>
Peu importe quel wiki vous choisissez, prenez juste un peu de temps pour apprendre vraiment la syntaxe, de sorte que vous n'aborquez pas constamment votre attention sur le formatage. P>
Assieds-toi et Dump Strong>. P>
Une fois que vous avez des trucs sur la page, vous pouvez commencer à réorganiser vos pensées et il est plus facile de voir l'ensemble de l'architecture du système à un niveau élevé quand il est juste à l'avant de vous. P>
J'ai aussi trouvé de nombreuses façons intelligentes et intéressantes de réparer mon architecture en faisant tout cela devant moi dans un moyen complètement différent. P>
+1 pour ce que je voulais dire. Vous ne devriez pas avoir besoin de vous "rappeler". Vous devriez être capable de parcourir votre documentation pour trouver tout ce qui existe dans le système. Vous avez des docs, non? Sinon, faites ce que Bob dit.
Comme Steve McConnel dit, le principal défi de la programmation est la gestion de la complexité. P>
Vous avez plusieurs façons de le gérer: P>
Dans mon opinion personnelle, les deux premiers points (outils et techniques) sont en effet bonne, mais pas quelque chose qui change vraiment. Par exemple, j'ai des collègues de mon équipe qui utilisent des anciens éditeurs et sont presque aussi productifs que des collègues utilisant Eclipse.
Les deux autres points, d'autre part, aideront beaucoup plus: la discipline, les bonnes conceptions et le refactoring aideront à maintenir la complexité aussi bas que possible et à une bonne équipe de travail permet de s'attaquer à des projets plus importants que seul serait vraiment trop complexe. p>
Cependant, comme vous l'avez déjà signalé, il n'y a pas de balle d'argent. En fin de compte, la complexité de tout logiciel réussi augmente à un point où sa maintenance peut devenir si coûteuse de nécessiter une nouvelle génération complète.
Et c'est la vie dans le logiciel: -) p>
Arrêtez de prétendre que vous pouvez tout garder dans votre tête. À un moment donné (on dirait que vous l'avez atteint), ce n'est tout simplement plus possible. Comment traiter un projet trop grand pour mémoriser? Eh bien, de la même manière que vous traitez des projets écrits par une autre personne ou que vous écrivez pour être maintenu par quelqu'un d'autre. P>
L'élément le plus important: écrire un bon code. Utilisez des noms cohérents et significatifs pour les classes, les méthodes, les variables, etc. Ecrire des fonctions (resp. Les méthodes) qui font exactement ce que dit le nom, pas plus, pas moins. Pas de raccourcis délicat, des effets secondaires inattendus, des fusques de temps, des surprises. Vous devez être capable d'utiliser une fonction en toute confiance, sans lire sa mise en œuvre pour vérifier ce qu'elle fait et comment. P>
Organisez votre code. Code GUI séparé du code logique des entreprises. Gardez-les dans des dossiers séparés. Si un fichier contient les deux, le refacteur. Si vous avez généré un code, conservez-le dans un dossier séparé (vous n'êtes donc jamais tenté de le modifier). P>
Utilisez un système de contrôle de révision. (Vous ne pouvez pas dire trop souvent) p>
Aller sur un membre ici, mais rompre le projet dans des projets plus petits / API / modules / forfaits / assemblages (appelez-les ce que vous voulez) devrait être la prochaine étape logique ici. P>
Le cerveau humain ne peut traiter que de tellement de choses en même temps, il y a tant que notre mémoire de travail peut gérer. Cacher des détails plus petits derrière un niveau d'abstraction plus élevé vous permettra d'oublier ces fichiers jusqu'à ce qu'il y ait quelque chose qui ne va pas sous la hotte. Si cela ne se passe jamais, il suffit d'ouvrir ce capot particulier pour le réparer là-bas. Utilisez un niveau différent d'abstractions et vos projets deviendront soudainement beaucoup plus petits, où seule une poignée d'unités aura un sens alors que le reste est juste de les faire fonctionner. Le POO est très bon pour cacher des détails sur la mise en œuvre tout en exposant des fonctionnalistes de niveau supérieur. Cela étant dit qu'il y ait d'autres paradigmes que le POOV que vous pouvez choisir. P>
Donc, mon conseil à vous à ce stade p>
Cela vous permettra de réduire considérablement le nombre de choses que vous devez vous souvenir de votre projet et de bien augmenter la prochaine commande de magnitude. P>
Ensuite, votre prochaine étape consistera à examiner plus en profondeur et en savoir plus sur les modèles d'architecture et de conception. Ils vous aideront à réduire encore plus le domaine de votre système. P>
Tidbits utiles p>
Profil de votre processus! strong> p>
Tout comme le code de profil, vous pouvez profiler votre processus de développement. P>
Look a été le plus de temps passé et essayer d'optimiser cette partie de votre processus. P>
Je pense que vous devriez lire le livre classique de Brooks ' Le mythique mensuel de l'homme, édition anniversaire a> '. Bien que le livre original décrit le travail effectué au milieu des années 60, les vérités sous-jacentes sont toujours exactes. Et le dernier papier sur ' Aucune balle d'argent ' (qui est incluse avec l'édition anniversaire) est très perspicace. p>
Mettez succinctement, le livre explique que, comme les programmes grossissent, ils deviennent plus difficiles à gérer (comprendre, entretenir, développer) car il y a plus de choses à penser. Presque toutes les techniques de conception et les techniques de programmation autour sont utilisées pour tenter de limiter ces problèmes, mais les problèmes existent car les logiciels deviennent plus gros (c'est la partie «essence» du sous-titre de Bullet Silver »). P>
+1 pour le contexte historique et recommander ce livre.
Le plus grand coup pour votre argent viendra probablement de:
Contrôle de la version (par exemple SVN, Mercurial, Git, etc.)
Serveur de construction (par exemple Hudson)
Tests
Refactoring p>
Le fait froid est que l'efficacité du développeur va diminuer avec la taille du projet. Cela est connu depuis des décennies. Il existe des méthodes pour aider, mais elles nécessitent une certaine discipline. P>
La meilleure solution consiste à aller à un niveau d'abstraction plus élevé. Écrivez des routines qui serviront de blocs de construction, que vous pouvez utiliser comme si elles étaient des constructions de bibliothèque ou de langue standard. Documenter leurs interfaces et programmer uniquement les interfaces. Si vous avez déjà eu l'impression de savoir comment une routine que vous ne travaillez pas est mise en œuvre, vous utilisez le problème ou ne pas documenter suffisamment l'interface. Soyez lent à ajouter à une interface, plus lentement pour supprimer n'importe quoi et rappelez-vous que les éléments changeants de celui-ci peuvent vous mordre mal. P>
La localité est votre ami. Plus vous pouvez vous concentrer sur une petite zone, mieux vous êtes. La programmation aux interfaces aide ceci. Garder les routines cohésives l'aide, de sorte que les routines font une chose à la fois. P>
L'orientation objet est très utile, car elle favorise les deux ci-dessus. Il favorise l'encapsulation et le codage à une interface et des groupes de code associés ensemble. P>
Le développement axé sur les tests est précieux pour appliquer la programmation à une interface. Écrivez des tests basés sur l'interface, pas sur la mise en œuvre. Cela a l'effet secondaire intéressant que les suites de test eux-mêmes aident à définir l'interface. S'il n'est pas testé pour, vous ne comptez pas dessus. Assurez-vous de pouvoir exécuter facilement des suites de test et d'entrer dans l'habitude. P>
Le refactoring va être nécessaire. Planifiez-le, en particulier lorsque vous changez. Vous avez besoin de code propre. De plus, vous constaterez inévitablement que vous avez mis la fonctionnalité au mauvais endroit. P>
N'oubliez pas non plus qu'aucun de cela ne va résoudre entièrement le problème. Les grands projets logiciels sont intrinsèquement difficiles. P>
Vous devez récupérer votre processus de construction de code. Peut-être votre code aussi. P>
Je suggère également de lire le code de lecture. P>