De manière générale, vers quel type d'optimisations vous orientez-vous généralement lors de la conception de logiciels?
Êtes-vous le type qui préfère optimiser votre conception pour
- Temps de développement (c.-à-d. Rapide à écrire et / ou plus facile à entretenir)?
- Temps de traitement
- Espace de stockage (RAM, DB, disque, etc.)
Bien sûr, cela est très subjectif au type de problèmes à résoudre et aux délais impliqués, donc j'aimerais entendre les raisons qui vous feraient choisir une forme d'optimisation plutôt qu'une autre.
design
optimization
Jason Whitehorn
la source
la source
Réponses:
Entretien
Ensuite, profilez si nécessaire et optimisez pour la vitesse. J'ai rarement eu besoin d'un stockage - du moins pas au cours des 10 dernières années. Avant cela, je l'ai fait.
la source
Temps de développement
Le traitement et le stockage sont bon marché. Votre temps n'est pas.
Juste pour noter:
Cela ne signifie pas faire un mauvais travail d'écriture de code juste pour le terminer rapidement. Cela signifie écrire le code d'une manière qui facilite un développement rapide. Cela dépend également entièrement de vos cas d'utilisation. S'il s'agit d'un site Web simple de deux ou trois pages avec un formulaire de contact, vous n'avez probablement pas besoin d'utiliser un framework PHP. Quelques inclusions et un script de mailer accéléreront le développement. Si le plan est plutôt de créer une plate-forme flexible sur laquelle se développer et ajouter de nouvelles fonctionnalités, il vaut la peine de prendre le temps de la disposer correctement et de coder en conséquence, car cela accélérera le développement futur.
En comparaison directe avec le temps de traitement et le stockage, je penche vers un temps de développement plus rapide. L'utilisation de la fonction de soustraction collectionutils est-elle la méthode la plus rapide et la plus efficace en termes de mémoire pour soustraire des collections? Non! Mais c'est un temps de développement plus rapide. Si vous rencontrez des goulots d'étranglement de performances ou de mémoire, vous pouvez les résoudre plus tard. Optimiser avant de savoir ce qui doit être optimisé est une perte de temps et c'est ce contre quoi je plaide.
la source
Expérience utilisateur.
C'est la seule valeur qui compte pour votre client.
Le temps de développement est moins important. Je peux écrire une application en ligne de commande complète beaucoup plus rapidement qu'une interface graphique, mais si Mme Jane ne peut pas comprendre comment faire cracher les rapports qu'elle veut, c'est inutile.
L'entretien est moins important. Je peux réparer une balançoire très rapidement, mais si elle se trouve au milieu d'une forêt, les utilisateurs ne peuvent pas la trouver.
Le temps de traitement est moins important. Si je fais une voiture qui passe de 0 à la vitesse de la lumière en 60 secondes, les utilisateurs ne peuvent pas diriger.
L'esthétique est moins importante. Je peux peindre une Joconde, mais si elle est cachée derrière un mur, personne ne la voit.
L'expérience utilisateur est la seule valeur qui compte. Faire une application qui fait exactement ce que l'utilisateur veut de la manière attendue par l'utilisateur est l'ultime réalisation.
la source
Il n'y a qu'une seule chose à optimiser et c'est:
Ce que veulent vos clients
Vos clients ont-ils besoin du programme le plus rapide possible? Optimiser pour la vitesse.
Vos clients ont-ils besoin d'une fiabilité absolue? Optimiser pour cela.
En ont-ils besoin demain ou ce sera inutile? Optimiser pour la vitesse de développement.
Fonctionnant sur un appareil incroyablement minuscule avec des ressources limitées? Optimiser pour ces ressources.
la source
Temps de traitement
Le temps de mon utilisateur n'est pas bon marché. Qui sème le vent récolte la tempête.Je viens de mettre à jour une application que j'utilise l'année dernière. Ils avaient complètement réécrit l'application et le garçon était lent. J'ai finalement dû acheter un nouvel ordinateur pour le faire fonctionner rapidement. Je vous garantis que ce n'était pas bon marché, mais mon temps est plus précieux.
la source
J'ai tendance à limiter la consommation de mémoire et les allocations. Je sais que c'est de la vieille école, mais:
la source
Je dirais que j'optimise vers l'efficacité, l'efficacité étant définie comme un compromis entre le temps de développement, la maintenabilité future, l'expérience utilisateur et les ressources consommées. En tant que développeur, vous devez jongler avec tout cela pour maintenir une sorte d'équilibre.
Comment atteignez-vous cet équilibre? Eh bien, vous devez d'abord établir quelques constantes, telles que la date limite, le matériel sur lequel votre application s'exécutera et le type de personne qui l'utilisera. Sans les connaître, vous ne pouvez pas établir le bon équilibre et hiérarchiser où cela est nécessaire.
Par exemple, si vous développez une application serveur sur une machine puissante, vous voudrez peut-être sacrifier l'efficacité des performances pour vous assurer de respecter un délai inamovible. Cependant, si votre développeur a une application qui doit répondre rapidement aux entrées des utilisateurs (pensez à un jeu vidéo), vous devez prioriser votre routine d'entrée pour vous assurer qu'elle n'est pas en retard.
la source
Quelle que soit la technologie de virtualisation que j'utilise
Vous vous souvenez du temps où les systèmes avec plus de 512 Mo de RAM étaient considérés comme à la pointe de la technologie? Je passe mes journées à écrire du code pour le précédent.
Je travaille principalement sur des programmes de bas niveau qui s'exécutent sur le domaine privilégié dans un environnement Xen. Notre plafond pour le domaine privilégié est de 512 Mo, ce qui laisse le reste de la RAM disponible pour nos clients. Il est également typique pour nous de limiter le domaine privilégié à un seul cœur de processeur.
Me voici donc en train d'écrire du code qui fonctionnera sur un tout nouveau serveur de 6 000 $, et chaque programme doit fonctionner (idéalement) dans un plafond alloué de 100 Ko, ou éviter complètement l'allocation de mémoire dynamique.
De manière concise, j'optimise pour:
Je dois également être extrêmement diligent en ce qui concerne le temps passé à attendre les verrous, à attendre les E / S ou à simplement attendre en général. Une grande partie de mon temps est consacrée à l'amélioration des bibliothèques de sockets non bloquantes existantes et à la recherche de méthodes plus pratiques de programmation sans verrouillage.
Chaque jour, je trouve un peu ironique que j'écris du code comme je l'ai fait il y a 15 ans, sur des systèmes achetés le mois dernier, en raison des progrès technologiques.
Cela est typique de tous ceux qui travaillent sur des plates-formes embarquées, même si beaucoup d'entre eux ont au moins 1 Go à leur disposition. Comme le souligne Jason, cela est également typique lors de l'écriture de programmes à exécuter sur des appareils mobiles. La liste est longue, kiosques, clients légers, cadres, etc.
Je commence à penser que les restrictions matérielles séparent vraiment les programmeurs des gens qui peuvent faire fonctionner quelque chose sans se soucier de ce qu'il consomme réellement. Je m'inquiète (votez contre moi si vous devez) quelles langues ce type complètement abstrait et cette mémoire vérifient dans le pool collectif de bon sens qui (autrefois) partageait les programmeurs de diverses disciplines.
la source
Résultats de recherche
En tant qu'universitaire, j'ai pensé que je devrais partager ce que j'optimise. Notez que ce n'est pas tout à fait la même chose que l'optimisation pour un temps de développement plus court. Souvent, cela signifie que le travail peut soutenir une question de recherche, mais ne pas être un produit livrable et poli. Cela pourrait être considéré comme un problème de qualité, et cela pourrait expliquer pourquoi beaucoup disent que les informaticiens (universitaires) n'ont aucune expérience du "monde réel". (Par exemple, "Ne sauraient-ils pas comment développer un produit livrable autrement?" )
C'est une ligne fine. En termes d'impact, vous voulez que votre travail soit utilisé et cité par d'autres, et l'effet Iceberg de Joel entre en jeu: un peu de poli et d'éclat peut aller très loin. Mais si vous ne jetez pas les bases d'autres projets sur lesquels s'appuyer, vous ne pourrez peut-être pas justifier le temps passé à fabriquer un produit livrable.
la source
... après tout le reste
... enfin, optimisez pour les performances ;-)
la source
Qualité / Test
Optimisez vers la qualité, en veillant à ce qu'il y ait du temps dans le calendrier de développement pour les tests, à la fois les tests unitaires et les tests après les fonctionnalités / phases.
la source
Cela dépend des besoins de votre programme.
La plupart de ce que je fais est fortement contraint par la capacité de traitement et la mémoire, mais ne passe pas par de nombreux changements importants, voire aucun, au cours de l'année moyenne.
Dans le passé, j'ai travaillé sur des projets où le code est fréquemment modifié de sorte que la maintenabilité devient plus importante dans ces cas.
J'ai également travaillé sur des systèmes dans le passé où la quantité de données est le problème le plus important, même sur le disque pour le stockage, mais le plus souvent, la taille devient un problème lorsque vous devez déplacer les données beaucoup ou trop lentement lien.
la source
L'élégance .
Si votre code est bien conçu, il aura plusieurs effets:
la source
Temps de développement, absolument. J'optimise également pour la bande passante, mais je ne vais pas au binaire.
la source
Depuis que je fais des installations sur plusieurs types de systèmes, de l'ordinateur central IBM aux PC, j'optimise d'abord la compatibilité, puis la taille, puis la vitesse.
la source
Ça dépend
Si vous travaillez sur un système de traitement vidéo intégré en temps réel, vous optimisez la vitesse de traitement. Si vous travaillez sur un traitement de texte, vous optimisez le temps de développement.
Cependant, dans tous les cas, votre code doit fonctionner et il doit être maintenable.
la source
Expressivité de mon intention.
Je veux que quelqu'un lisant mon code puisse voir facilement quelles opérations j'essayais d'appeler sur le domaine. De même, j'essaie de minimiser les indésirables non sémantiques (accolades, mots-clés 'fonction' dans js, etc.) pour faciliter la numérisation.
Bien sûr, vous devez équilibrer cela par maintenabilité. J'adore écrire des fonctions qui renvoient des fonctions et toutes sortes de techniques avancées et elles font avancer mon objectif, mais si l'avantage est faible, je préférerai m'en tenir aux techniques que les programmeurs jr solides connaissent.
la source
Tous
Temps de traitement
Les ordinateurs d'aujourd'hui sont rapides, mais loin de suffire. Il existe de nombreuses situations dans lesquelles les performances sont critiques - si vous utilisez des serveurs multimédia en streaming.
Espace de rangement
Votre client peut avoir un gros disque, disons 1 To. Lequel peut être repris par 1000 films HD, si vous voulez en faire un service c'est loin d'être suffisant, non?
Temps de développement
Eh bien, je ne sais pas si cela compte comme "optimisation", ce que je fais, c'est que j'utilise Java au lieu de C ++, et le développement est 10 fois plus rapide. J'ai l'impression de dire ce que je pense directement à l'ordinateur, très directement en avant et totalement rock!
BTW Je crois que pour accélérer le développement de votre processus de développement, vous devez choisir java, ne jamais essayer de détritus comme python ... qui prétend qu'ils peuvent vous raccourcir le temps DEV.
la source