Tråd: Python vs C#
View Single Post
For nybegynnere ville jeg nok startet på Python i dag. Hva som er "best" er en diskusjon som varierer etter svært mange faktorer, som nevnt over. Men for en enkeltperson som ønsker å lære seg programmering fra bunnen av, så er Python rimelig enkelt å komme i gang med, og det er forholdsvis kjapt å starte på programmeringsdelen. For kompilerte språk, så er starten ofte en kneik som er ganske kjip, hvor man ofte ender opp med å installere en flere gigabyte stor kompilator-pakke og IDE. Der må man opprette riktig type prosjekt, legge til kildefiler osv. og så bare håpe at PATHs er riktig satt opp, og at man forstår feilmeldingene som kompilatoren gir. Eller lære seg kryptiske makefiles.

Der Python kommer litt til kort, etter min mening, er når du begynner å få en del kode. Når du så ønsker å refaktorere litt og forenkle noen moduler, så er det ikke så lett å finne ut hvorvidt du brakk noe alvorlig eller ei. Til dette trenger du verktøy som utfører statisk testing, typ. pylint, pyflake eller lignende. Mange av feilene disse er ment å finne, er noe som kompilatoren til andre språk finner automatisk, men statisk testing utføres ofte på kompilerte språk også.

I tillegg så er det to ting som irriterer meg ved Python spesielt:
1. Pakkesystemet deres (PIP). En tredjeparts modul her kan plutselig være deprecated uten noe forvarsel, og eksempelkode du finner på nett vil derfor ikke alltid virke som du forventer. Eksempler her er PIL -> pillow, pycrypto -> pycryptodome. Noen moduler krever at du kompilerer kildekode for rask prosessering, hvis wheels ikke er tilgjengelig for din spesifikke plattform. For Windows så innebærer dette å måtte installere Visual Studio med Win10 SDK og masse dritt. I tillegg til dette så gjør Linux forskjell på pakker du har installert gjennom apt og pip, og slenger således på en skjult "--user" for å hindre at folk fucker opp OSet sitt. Måtte rimelig mange nivåer ned i koden til Debian før jeg fant dette, og det gjorde en del av jobben min svært vanskelig en stund. Altså er det så vanlig for folk å fucke opp OSet sine pakker at distroene selv har begynt å passe på hvordan du bruker pip.

2. Pakking av programmer. Hvor et program fra et kompilert språk ender opp med en binær-fil du kan distribuere (mot at mottaker laster ned .NET Framework f.eks., eller du legger ved DLL-filene som trengs), så har ikke Python noen innebygd ekvivalent. I stedet så er du nødt til å bruke pyfreeze, py2exe eller en av mange slike proprietære pakkeverktøy, hver med sine egne quirks og gotchas. Unntaket er hvis mottaker har samme Python-versjon installert da. Da kan du bare legge ved en requirements.txt-fil som lister opp alle modulene du har lasta ned, og filene i seg selv. Enkelt nok.

Python er også rimelig godt støttet på tvers av plattformer, men det er ingen garantier her, spesielt hvis du begynner å bevege deg ned på lav-nivå. Det er store forskjeller på mmap, signal og os-modulen, og dokumentasjonen vil liste opp en del av disse forskjellene med "UNIX only" eller tilsvarende for Windows. For en nybegynner er ikke dette så utrolig relevant, men det kan være årsaken til at biblioteket du laster ned ikke virker.