Hvordan jeg overvandt min modstand mod at blive Pythonista

Foto af Max Nelson på Unsplash

I over et årti har mit vigtigste 'modersmål' været #. Jeg har brugt det siden version 1 og elskede rejsen gennem funktioner som generik, anonymitet, LINQ og async og kombinerer dette med designmønstre, SOLID principper, arkitektoniske stilarter og TDD / BDD, jeg lever nu og indånder C #. Jeg plejede snobistisk at se ned til skriftsprog…

Hvordan kan du kalde dig selv en softwareingeniør og bruge et scriptingsprog? Doh!

Jeg arbejder i en finansiel organisation i byen. De valgte sprog har været Java og C # til både Front- og Back Office-applikationer. Data Science and Machine Learning er ved at blive to af de mest hypede moderne teknologier, og de skaleres nu også i finansielle institutioner. Da min baggrund er inden for datalogi (med min afhandling om datamining og kunstig intelligens), tænkte jeg, at jeg skulle tjekke det ud ...

Jeg var nødt til at opdatere min matematikviden, og efter en introduktion til ML om Pluralsight og en anden på Python, forstod jeg ikke, hvad hele ståhejen handlede om.

Hvorfor bruge Python? Jeg kan gøre alle disse ting i C # ... og faktisk meget bedre!

Jeg sagde stolt til min kollega: ”Jeg er ikke en cowboy-koder… Du kan ikke skrive en SOLID Python-applikation”.
Og han sagde: ”Hvorfor ikke? SOLID er bare principper. Du kan anvende dem på ethvert sprog ”.

Dette var øjenåbning for mig.

Jeg begyndte at undersøge Python: Det er i de tre bedste programmeringssprog (fra december 2018) ifølge TIOBE. StackOverflow bekræfter, at det har overgået C #. Det gør også HackerRank-rapporten.

Hvad? Mangler jeg et trick?

Sådan begyndte min rejse til at blive Pythonista… Jeg måtte være overbevist om, at det var umagen værd.

Her er svarene på to af mine vigtigste forbehold, dvs.

  1. Jeg elsker min karriere inden for finanssektoren. Hvad får finansielle organisationer til at bruge Python?
  2. Jeg er ikke en 'cowboy' ('cowgirl' snarere). Anvendes SOLID-principper i Python?

Hvorfor bruger finansielle organisationer Python?

Min forskning viste mig, at der er flere grunde:

- Hurtig tid til marked: Du kan gå 'fra nul til helt' ret hurtigt. Der er et rigt sæt biblioteker, der har stort set alt hvad du nogensinde vil bruge. At skrive Python-programmer er som at bygge et tårn med Lego. Du kan finde de enkelte blokke, og alt hvad du skal gøre er at lime dem sammen for at opbygge din algoritme.

- Bridges Economics og IT: Forespørgsler og teknisk kyndige forretningsfolk kan forstå og også skrive deres algoritmer i Python. Udviklere kan derefter integrere det i en fuld stack-applikation.

- Omfavner analyse: Anaconda leveres med en installation af Jupyter notebook. Dette er hver udvikler og dataforsker's legeplads til at analysere data og skabe visualiseringer. Handel, markedspriser, modellering af finansielle risici er nogle relevante områder.

Anvendes SOLID-principper i Python?

Ja de gør! Principper er ikke et mål i sig selv. Det er snarere retningslinjer for at skrive en bedre og renere kode. Der er dog ingen sølvkugle ved anvendelse af dem på funktionelle / dynamiske sprog.

Ikke desto mindre er her, hvad jeg er kommet frem til:

- Enkeltansvar: En klasse skal kun have en grund til at ændre sig.

Dette er ret ligetil, bare saml de funktioner, der ændres af samme grund til en enkelt klasse / metode / enhed. Samme som C #.

- Åben lukket: Klasserne skal være åbne for udvidelse og lukket for ændring. Basen / abstrakt klassen er lukket for ændring. Konkrete underklasser oprettes for at ændre deres opførsel.

Mange måder at opnå dette inkluderer: arv, komposition, designmønstre (dekoratør, strategi osv.). Python tillader flere arv af klasser, bortset fra at det er det samme som C #.

- Liskov-substitution: Hvis S er en undertype af T, kan objekter af type T erstattes med objekter af type S uden at ændre nogen af ​​de ønskede egenskaber ved T. Med andre ord bør den afledte klasse udvide sin overordnede klasse uden at ændre dens opførsel.

Så længe du kan skelne forskellen mellem sammensætning og arv, så er Bob din onkel. Vær også opmærksom på abeplacering, da dette helt sikkert vil bryde dette princip.

- Interface-adskillelse: Klienter skal ikke tvinges til at være afhængige af grænseflader, som de ikke bruger.

Der er ingen grænseflader i Python, så dette er ikke for relevant. Men generelt handler det om at holde klasserne og de eksponerede metoder til et minimum samt muligheden for at arve fra flere konkrete klasser for at give klienter specifik adfærd.

- Afhængighedsinversion: Moduler på højt niveau bør ikke afhænge af moduler på lavt niveau. Begge skal afhænge af abstraktioner. Abstraktioner skal ikke afhænge af detaljer - detaljerne skal afhænge af abstraktioner.

Som et dynamisk sprog kræver Python ikke brug af abstraktioner for at lette afkoblingen.

Hvad jeg håbede på at finde, da jeg startede denne analyse, er, at C # vinder ‘Sprogkampen’ over Python, men jeg indså, at det er en dårlig programmør, hvis udviklingsværktøjssæt kun indeholder et programmeringssprog!

Jeg ville personligt bruge C # til at opbygge en stor skala, virksomhedsapplikation (især på serversiden), men jeg er fuldstændig konverteret til Python til hurtigere udvikling og bevis på koncepter - overvejende når det drejer sig om Data Science eller Machine Learning domæner!

Tak, fordi du læste min første artikel