Beste antwoord
Bekijk deze python-meme
Antwoord
Enkele redenen:
- Op een bepaald punt kan het menselijk brein geen verbeteringen in snelheid waarnemen. Als ik mijn Python-code opnieuw implementeer in C en het werkt 200x sneller, dan merkt de gebruiker niet eens dat de originele code al binnen 0,01 seconden liep. Heck, ze merken het waarschijnlijk niet eens als de originele code maar in 0,1 liep. seconden. Het verschil tussen 0,1 seconden en 0,0005 seconden is voor de meeste mensen niet waarneembaar. Zelfs voor de mensen die het echt kunnen onderscheiden, voelt het nog steeds volkomen onopvallend.
- De traagheid hangt sterk af van hoe u het gebruikt. Het echte probleem is dat veel mensen kampen met het probleem van voortijdige optimalisatie. Ja, Python is traag, maar de kans is groot dat uw code niet echt traag is vanwege Python; het is traag omdat uw code de verkeerde gegevensstructuren en algoritmen gebruikt om een bepaald probleem aan te pakken. Het gebruik van een gecompileerde taal zoals C verbergt alleen het probleem. Ja, het is sneller, maar het is alleen sneller bij een inefficiënt algoritme. Het gebruik van de juiste datastructuren en algoritmen zal schalen, vrijwel ongeacht in welke taal je ze implementeert en ongeacht hoeveel data je uiteindelijk verwerkt. Overschakelen naar een snellere taal zal alleen op korte termijn winst opleveren. Een O (n!) – algoritme is nog steeds een O (n!) – algoritme, zelfs als je het implementeert in C! Echt goed geïnformeerde ingenieurs weten dit en kunnen applicaties maken die meer dan snel genoeg zijn en die goed schalen, ongeacht de implementatietaal, omdat ze de juiste structuren en algoritmen gebruiken.
- Python is (en zal waarschijnlijk blijven) in de eerste plaats een lijm-taal; het is erg goed in het verbinden software die niet oorspronkelijk was Ik was bedoeld om rechtstreeks met elkaar samen te werken. Het is ook goed in het automatiseren van taken die normaal gesproken met de hand zouden worden gedaan. Voor deze doeleinden is het meer dan snel genoeg, aangezien het belangrijkste werk sowieso elders gebeurt. Voor “snellere” talen zoals C is dit soort lijm zo pijnlijk traag en foutgevoelig voor code dat het nauwelijks de moeite waard is. Elke winst in uitvoeringssnelheid wordt ruimschoots gecompenseerd door de hoeveelheid verspilde ontwikkelaarstijd die is besteed aan het werkend krijgen. Dat is een belangrijke reden waarom het zo populair blijft.
- Sommige knelpunten vallen simpelweg buiten de directe controle van de implementatietaal. IO is een veel voorkomende. Ik heb momenteel te maken met een applicatie waarin alles in Python meer dan snel genoeg is. Pas wanneer we het netwerk raken om de database te doorzoeken, worden de zaken traag. Mijn profilering laat zien dat zelfs de langzaamste stukjes van de Python-code totaal onbeduidend zijn in vergelijking met de tijd die wordt besteed aan het wachten op de netwerk-IO. Ik probeer nu manieren te vinden om de database minder te raken (caching aan de clientzijde, het vermijden van overtollige gezondheidscontroles met de gegevens, enz.). Zelfs als ik de applicatie in assembler zou schrijven, zou dit nog steeds een probleem zijn. Het oplossen van dit probleem met Python is eigenlijk sneller en gemakkelijker omdat het wordt geleverd met (zeer robuuste) profileringsbibliotheken in de standaardbibliotheek. Veel “snelle” gecompileerde talen komen traditioneel niet met dit uit de doos.
De moraal van het verhaal is: ontwikkelaarstijd overtreft machinetijd, bijna altijd. Als dat niet het geval is. hold, traagheid is meestal te lokaliseren naar bepaalde knelpunten die gemakkelijk genoeg kunnen worden geoptimaliseerd naar een externe bibliotheek of service. De momenten waarop iets echt niet kan worden geoptimaliseerd naar een externe bibliotheek of service, zijn verbazingwekkend zeldzaam. Zoals in, bijna onbestaande.
Een uitzondering is als u vanaf het begin weet dat uw toepassing vereist zo dicht mogelijk bij realtime prestaties en het merendeel van de code zal computergericht zijn. Een goed voorbeeld zijn videogames of DCC-applicaties. Deze kunnen beter zo dicht mogelijk bij realtime zijn, anders heeft u geen gebruiker basis om over te spreken.
Maar tenzij dit het geval is, geven veel ontwikkelaars de voorkeur aan de productiviteitswinst van Python, al was het maar voor prototyping.