Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  7 2353
Som en noob som har lyst og lære meg litt programmering, hvilket språk ville dere valgt? Skriv gjerne hvorfor.
Hvilket er enklest og mest fleksibelt? Er det ene objektivt bedre enn det andre generelt sett? Eller har de såpass ulike kvaliteter at det er vanskelig og prøve og sammenligne dem? Og man må nesten bare finne ut hva man ønsker og fokusere på, og gå ut ifra det? Noe jeg sliter med... Hehe
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
De er forskjellige språk på et ganske fundamentalt nivå. Selv foretrekker jeg å jobbe med C# (og implisitt .NET, rammeverket som for alle praktiske formål hører til språket), men er ikke fremmed for Python 3 heller.

Begge er relativt greie å hanskes med, begge er ganske fleksible, det er få "universelle sannheter" mtp hva som er objektivt bedre. Begge er allsidige nok til at du stort sett nok kan greie å bruke begge til det meste du vil. Egentlig burde du finne mer ut av hva du vil oppnå med et språk for å gjøre det lettere å svare på.
  • Python er, og kommer sannsynligvis til å være i overskuelig framtid, bedre på multiplattform. .NET har .NET Core (og Mono), men Core er relativt nytt og har ikke paritet for f.eks. GUI-applikasjoner ennå. .NET har historisk vært en Windows-først-plattform. Hvis du skal kode for web er de mer likestilt igjen da det ser ut til å ha vært hovedfokus for Core-initiativet så langt.
  • Python har et standardbibliotek i særklasse. .NET tilbyr et ganske respektabelt standardbibliotek og er fullt av snacks i forhold til andre språk, men Python er ubestridt på området. Støtten for tredjeparts libraries er også, så vidt jeg vet, bedre hos Python, hvis man ser bortsett fra...
  • ... at Python har den evigvarende v2 vs v3-hodepinen og jeg vedder på at den ikke står overfor noen umiddelbar løsning nå heller. Kort fortalt: bakoverkompatibiliteten gikk i dass mellom disse versjonene, og det er fortsatt folk som ikke har byttet versjon. Nå til den skumle delen: 3.0 kom ut i 2008.
  • C# er statisk typet og det gjør en del hjelpemidler mer effektive. Kompilatoren kan plukke opp hele klasser med "feil" som kan være vanskelige å se, og verktøyene i VS er fantastiske selv om det er et ressurssluk uten like.
  • C# har LINQ, og LINQ er sexy. Det er en blanding av "tradisjonell" objektorientert/imperativ og funksjonell programmering som lar deg eliminere MYE boilerplate-kode hvis du er vant til f.eks. Java. Python har samme greia, men ofte i form av enten såkalte "comprehensions" eller funksjoner som må nøstes utenpå hverandre, mens C#/.NET lar deg skrive dem "etter hverandre" på en måte jeg personlig tror de fleste vil finne mye behageligere å skrive og lese. Se om du finner en sammenlikning, ellers skal jeg mekke en - men denne posten begynner å bli lang.
  • Python har en del forskjellige måter å gjøre ting på i noen tilfeller, men bare noen av dem blir betraktet som "riktige" eller "pythonic", noe jeg personlig finner forvirrende. Dette kan godt være et utslag at jeg kjenner C#/.NET bedre og at det blir mer åpenbart i Python uten at det ene nødvendigvis er bedre eller verre.
Python eller Processing er veldig gode språk å lære seg. Begge er moderne objektorienterte og har en enkel syntax.

Hvis du finner ut at du vil lære nye språk etterhvert så gir de godt grunnlag for videre læring.
For det første, så kan det være greit å gå litt bort fra "bedre enn" på generell basis når det kommer til programmering. Språk er som verktøyene i kassa til en snekker. En hammer er objektivt bedre enn en sag om du skal spikre noe, men ikke til alt på byggeplassen. For å holde analogien til snekkere, så er det viktigere å lære metode og tankegang i programmering enn selve bruken av ett verktøy. I starten har du nok med å forstå forskjellen på functions, conditionals, loops, lambdas etc., nøyaktig hvilket språk du bruker er ikke det viktige ettersom de fleste språk tilbyr det mye av/så godt som det samme(med unntak av de som absolutt skal ha et språk som kun er reaktivt for en eller annen esoterisk grunn). Det gjør også at så fort du kan de generelle prinsippene, så er det relativt greit å hoppe over til et nytt språk.

Så til det du faktisk spør om - jeg ville valgt Python og det er bare fordi jeg vet det finnes en haug av ressurser og miljøer der ute som hjelper newbies og lager oppgaver. Du vil rett og slett lettere få hjelp enn om du går for Python ettersom flere kan/bruker Python. Om du ikke bare vil lage noe som popper opp på skjermen kan du f.eks gå til innkjøp av en Raspberry Pi og et eller annet byggesett med instruksjoner, så kan du sette opp noen LED-skjermer til å gjøre noe/andre småting(jada, kan også gjøres med C#). For noen er det mer tilfredstillende å se fysisk at noe skjer, enn en liten endring på skjermen, men det varierer så klart.
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.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
En ekstra tanke jeg har: det kan godt hende at det er "utslagsgivende" hvilke plattformer du vil utvikle for, dvs. for Windows C#, for alt annet Python. Grunnen er at hvert språk krever litt ekstra dill på minst én plattform siden Python ikke kommer med Windows, og .NET ikke kommer med noe annet enn Windows.

Hvis du ser på C#, noe jeg vil anbefale, vil jeg også anbefale Visual Studio, som er gratis i en Community Edition. Hvis du ikke skal utvikle Windows, ville jeg brukt den enklere editoren Visual Studio Code, som er multiplattform og kan brukes til utvikling i svært mange språk. Bare vær obs på at i C#s tilfelle kommer vscode til å gi noe mindre verktøystøtte enn VS.

Jeg er uenig i Dyrets poeng om at prosjektstruktur og kompilatoren utgjør et nevneverdig "hinder".
  • Det er ganske elementært å hanskes med prosjekttyper og maler - 30 sek når du lager et nytt prosjekt, ellers ser du ikke noe til dem.
  • Prosjektfilene er enkle å behandle i IDE-et, som gjør den tunge løftingen for deg.
  • Manuell fikling med PATH har aldri vært et poeng for grunnleggende utvikling for meg gjennom 10+ år på .NET
  • Feilmeldinger må du forholde deg til i alle tilfeller - det har null å si om språket er kompilert eller ikke. Det eneste som har noe å si for et språk er at feilmeldingene er lesbare, "googlbare" og ikke misvisende, og ingen av språkene har noe problem med dette. Forskjellen går i ytterste konsekvens ut på at du får feil tidligere i prosessen med en kompilator som passer på og at den plukker opp feil som ellers ville dukket opp mens programmet kjører, eller blitt til subtile bugs som er et helvete å nøste opp i.

Kompilatoren du bruker i C#/.NET er rask og har nokså vennlige meldinger. Det er ikke C++.

For å reiterere det siste poenget: en feil du kan få på kompilatorstadiet er en feil du ønsker få på kompilatorstadiet - det er rett og slett enklere og tryggere. Kompilatoren plukker opp feil uten at du må "treffe" riktig kodelinje, den går gjennom alt uansett, mens feil i tolkede språk ofte først skjer når du kjører gjennom den spesifikke koden om den så er avhengig av det særeste settet omstendigheter.
Syns dere går litt vel langt nå, Dyret og Robhol. Skremmer jo folk Men som Xasma sier, det er mer ett verktøy i kassa. Du kommer til å lære begge uansett. Selv synes jeg C#/Java ga litt mer dypere forståelse. Python er noe mer hokus pokkus. Men er enklere å komme i gang med. Lag deg konto på CodeAcademy og peis gjennom f.eks Python der
Takker for svar folkens.

Istedenfor og bruke hammer, tenkte jeg mer på om det ene er en bedre leatherman enn det andre.
Tror jeg fortsetter med c# inntil videre, det er det jeg har holdt på mest med. Og en plass må man begynne.