Est-ce parce que ceux-ci ont tous été écrits dans des langues gérées et récupérées plutôt que du code natif?
Non. Le code lent fonctionnera mal malgré tout. Bien sûr, une langue particulière peut introduire certaines classes de problèmes tout en en résolvant d'autres. Mais les bons programmeurs sont tout à fait capables de trouver des solutions de contournement avec suffisamment de temps.
Est-ce les programmeurs individuels qui ont écrit le logiciel pour ces appareils?
Partiellement. Dans de nombreux cas, il s'agit très probablement au moins d'un facteur contributif. Il s'agit d'un effet secondaire malheureux d'une industrie où les bons programmeurs sont en forte demande et en pénurie. De plus, les écarts entre les différents niveaux de capacité technique peuvent être assez importants. Il va donc de soi que parfois les programmeurs chargés d'implémenter certains logiciels peuvent être félicités simplement pour les faire fonctionner (en quelque sorte).
Dans tous ces cas, les développeurs d'applications savaient exactement quelle plate-forme matérielle ils visaient et quelles étaient ses capacités; n'en ont-ils pas tenu compte?
Partiellement. Pour commencer, la plate-forme matérielle exacte n'est probablement pas connue, car elle est souvent négociée en parallèle avec divers fabricants lors du développement de logiciels. En fait, il peut même y avoir de petites modifications (mais pas nécessairement insignifiantes) du matériel sous-jacent après la version initiale. Cependant, je conviens que les capacités générales seront connues.
Une partie du problème est que le logiciel n'est probablement pas développé sur le matériel, il se fait dans des émulateurs. Cela rend difficile la prise en compte des performances réelles de l'appareil même si les émulateurs sont précis à 100% - ce qu'ils ne sont pas.
Bien sûr, cela ne justifie pas vraiment des tests insuffisants sur le matériel prototype approprié avant sa sortie. Ce blâme se situe probablement en dehors du contrôle dev / qa.
Est-ce le type qui répète "l'optimisation est la racine de tout mal", les a-t-il égarés?
Non, je suis quasiment certain qu'ils ne l'écoutent pas de toute façon; sinon il ne serait pas mal cité si souvent (c'est censé être une " optimisation prématurée ..."). :-RÉ
Il est plus probable que trop de programmeurs adoptent l'un des deux extrêmes en ce qui concerne l'optimisation.
- Soit ils l'ignorent complètement.
- Ou ils s'obsèdent avec des détails qui n'ont rien à voir avec les exigences de performances réelles . L'effet net étant que le budget est épuisé et le code est trop brouillées pour optimiser les réel en toute sécurité les problèmes de performance.
Était-ce une mentalité de "oh c'est juste 100 ms supplémentaires" à chaque fois jusqu'à ce que toutes ces millisecondes ajoutent des minutes?
Peut-être. De toute évidence, s'il Sleep(100)
a été utilisé comme équivalent de papier de soie utilisé pour ralentir le saignement d'un membre sectionné - des problèmes sont à prévoir. Cependant, je soupçonne que le problème est plus subtil que cela.
Le truc, c'est que le matériel informatique moderne (y compris les appareils embarqués) est beaucoup plus rapide que les gens ne le reconnaissent. La plupart des gens, même les programmeurs "expérimentés", ne savent pas à quel point les ordinateurs sont rapides. 100 ms, c'est long - très long . Et en l'occurrence, ce "très long temps" se divise en deux:
- La première est que les programmeurs s'inquiètent inutilement des choses qu'un ordinateur fait extrêmement rapidement. (Il se trouve que c'était juste une telle préoccupation " incrémenter une valeur 300 fois par seconde " qui m'a conduit ici en premier lieu.)
- La seconde est qu'ils ne parviennent pas toujours à faire preuve de préoccupation lorsque les choses prennent très longtemps (sur l'échelle de temps de calcul). Alors:
- s'ils ignorent les effets de la latence lors de la communication sur un réseau ou avec un périphérique de stockage;
- s'ils ignorent l'impact d'un thread bloqué et en attente d'un autre thread;
- s'ils oublient que parce que les ordinateurs fonctionnent si rapidement, il est très capable de répéter une tâche beaucoup plus souvent qu'il ne le devrait, sans que le développeur soit au courant d'un problème
- ... si une combinaison de ces oublis se produit, une routine s'exécutera de manière inattendue très lentement (sur l'échelle de temps de calcul). Quelques répétitions et cela sera même perceptible par les humains - mais il peut être difficile à cerner car des centaines de choses interconnectées fonctionnent toutes rapidement par elles-mêmes.
Est-ce ma faute, pour avoir acheté ces produits en premier lieu?
Oui définitivement. Eh bien, pas vous personnellement, mais les consommateurs en général. Les produits sont vendus (et achetés ) par des listes de contrôle des fonctionnalités. Trop peu de consommateurs exigent de meilleures performances.
Pour illustrer mon propos: La dernière fois que j'ai voulu acheter un téléphone portable, le magasin ne pouvait même pas proposer un modèle de démonstration pour jouer avec en magasin. Tout ce qu'ils avaient, c'était des coques en plastique avec des autocollants pour montrer à quoi ressemblerait l'écran. Vous ne pouvez même pas avoir une idée de ce poids - sans parler des performances ou de la convivialité. Mon point est que si suffisamment de personnes s'opposaient à ce modèle d'affaires et votaient avec leurs portefeuilles pour exprimer leur objection, nous ferions un petit pas dans la bonne direction.
Mais ils ne le font pas, donc nous ne le sommes pas; et chaque année, les nouveaux téléphones portables fonctionnent plus lentement sur un matériel plus rapide.
(Les questions non posées.)
- Les gens du marketing sont-ils à blâmer? Partiellement. Ils ont besoin de dates de sortie. Et lorsque cette date se profile, le choix entre «faire fonctionner» et «accélérer» est une évidence.
- Les vendeurs sont-ils à blâmer? Partiellement. Ils veulent plus de fonctionnalités dans la liste de contrôle. Ils accroissent les listes de fonctionnalités et ignorent les performances. Ils font (parfois) des promesses irréalistes.
- Les gestionnaires sont-ils à blâmer? Partiellement. Les gestionnaires inexpérimentés peuvent faire de nombreuses erreurs, mais même les gestionnaires très expérimentés peuvent (à juste titre) sacrifier du temps pour résoudre les problèmes de performance au profit d'autres préoccupations.
- Les spécifications sont-elles à blâmer? Partiellement. Si quelque chose n'est pas spécifié, il est beaucoup plus facile de "l'oublier" plus tard. Et si ce n'est pas spécifiquement indiqué, quel est l'objectif? (Bien que je pense personnellement que si une équipe est fière de son travail, elle se souciera de la performance malgré tout.)
- L'éducation est-elle à blâmer? Peut être. L'éducation sera probablement toujours en retrait. Je désapprouve certainement l '"éducation" qui produit rapidement des débutants avec un développement logiciel de compréhension superficielle. Cependant, une éducation qui s'appuie sur la théorie et inculque une culture d'apprentissage ne peut pas être mauvaise.
- Les mises à niveau sont-elles à blâmer? Partiellement. De nouveaux logiciels, de vieux matériels tentent vraiment le destin. Avant même la sortie de la version X, X + 1 est en cours de planification. Le nouveau logiciel est compatible, mais l'ancien matériel est-il assez rapide? At-il été testé? Un correctif de performance particulier peut être intégré dans le nouveau logiciel - encourageant une mise à niveau logicielle mal avisée.
Fondamentalement, je crois qu'il existe de nombreux facteurs contributifs. Donc, malheureusement, il n'y a pas de solution miracle pour y remédier. Mais cela ne signifie pas que c'est le destin et la tristesse. Il existe des moyens de contribuer à l'amélioration des choses.
Alors, à quel moment les choses ont-elles mal tourné pour ces produits?
À mon humble avis, nous ne pouvons pas vraiment identifier un seul point. Il existe de nombreux facteurs contributifs qui ont évolué au fil du temps.
- Compteurs de haricots: réduction des coûts, synchronisation du marché. Mais là encore, aurions-nous fait les progrès que nous avons réalisés sans la pression?
- Demande élevée et faible offre de personnes qualifiées dans l'industrie. Pas seulement des programmeurs, mais aussi des managers, des testeurs et même des commerciaux. Le manque de compétences et d'expérience conduit à des erreurs. Mais là encore, cela conduit également à l'apprentissage.
- Une technologie de pointe. Jusqu'à ce qu'une technologie arrive à maturité, elle mordra régulièrement de manière inattendue. Mais là encore, cela a souvent fourni un certain nombre d'avantages en premier lieu.
- Complication composée. Au fil du temps, l'industrie a évolué: en ajoutant plus d'outils, de technologies, de couches, de techniques, d'abstractions, de matériel, de langues, de variations, d'options. Cela rend quelque peu impossible d'avoir une compréhension "complète" des systèmes modernes. Cependant, nous sommes également capables de faire beaucoup plus dans un délai beaucoup plus court.
Que pouvons-nous faire en tant que programmeurs pour éviter d'infliger cette douleur à nos propres clients?
J'ai quelques suggestions (à la fois techniques et non techniques) qui peuvent vous aider:
- Dans la mesure du possible, utilisez votre propre produit. Rien de tel qu'une expérience de première main pour révéler des choses maladroites, lentes ou incommodes. Cependant, vous devrez éviter consciemment de contourner les carences dues aux "connaissances d'initiés". Par exemple, si vous n'avez aucun problème à synchroniser les contacts parce que vous le faites avec un script Python de porte dérobée - vous n'utilisez pas "le produit". Ce qui soulève le point suivant ...
- Écoutez vos utilisateurs (de préférence de première main, mais au moins de seconde main via le support). Je sais que les programmeurs préfèrent (généralement) rester cachés et éviter les interactions humaines; mais cela ne vous aide pas à découvrir les problèmes rencontrés par d'autres personnes lors de l'utilisation de votre produit. Par exemple, vous ne remarquerez peut-être pas que les options de menu sont lentes, car vous connaissez tous les raccourcis et les utilisez exclusivement. Même si le manuel documente entièrement tous les raccourcis, certaines personnes préfèreront toujours les menus - malgré leur insupportablement lent.
- Efforcez-vous d'améliorer vos compétences et connaissances techniques de façon continue. Développez les compétences nécessaires pour analyser de manière critique tout ce que vous apprenez. Réévaluez régulièrement vos connaissances. Dans certains cas, soyez prêt à oublier ce que vous pensiez savoir. Ce qui amène ...
- Certaines technologies / techniques peuvent être très délicates et conduire à des malentendus subtils et à des implémentations incorrectes. D'autres à travers l'évolution des connaissances communes ou des outils disponibles peuvent tomber en faveur ou par disgrâce (par exemple Singletons). Certains sujets sont si délicats qu'ils engendrent un tas de "pandits hocus-pocus" qui propagent un énorme corps de désinformation. Un bug particulier est le mien la désinformation entourant le multi-threading. Une bonne implémentation multi-thread peut améliorer considérablement l'expérience utilisateur. Malheureusement, beaucoup d'approches mal informées du multi-threading réduiront considérablement les performances, augmenteront les bugs erratiques, augmenteront les risques de blocage, compliqueront le débogage, etc.
- Prendre possession. (Non, sérieusement, je ne joue pas au bingo de la salle de conférence.) Négociez avec les gestionnaires, les propriétaires de produits et les vendeurs pour que les fonctionnalités de performance aient priorité sur certains éléments de la liste de contrôle. Exigez de meilleures spécifications. Pas enfantin, mais en posant des questions qui amènent les gens à réfléchir à la performance.
- Soyez un consommateur averti. Choisissez le téléphone qui a moins de fonctionnalités mais qui est plus rapide. (Pas un processeur plus rapide, une interface utilisateur plus rapide.) Alors vantez-vous ! Plus les consommateurs commencent à exiger des performances, plus les compteurs de haricots commenceront à les budgétiser.