Skrivet av dasomannen:
Hej! Jag är lite sugen på att lära mig programmering. Har lite kunskaper inom IT (jobbat 4+ år inom support osv) men är helt grön på programmeringsbiten.
Jag har några frågor som några av er eventuellt har svar på:
- Vilket språk rekommenderar ni att man borde börja med att lära sig?
- Finns det några bra distans/intensiv/yrkesförberedande utbildningar som ni kan rekommendera?
- Övriga tips kring detta.
Tacksam för förslag
Oh, en "vilket språk rekommenderar ni" fråga! Sådana få de flesta andra skyttegravskrig att framstå som banala sandlådebråk, men känner att det inte går att låta bli att svara på sådant
Frågan kring vilket språk man ska börja med är till stor del irrelevant om målet är att lära sig programmera. Tror ingen skulle föreslå det jag lärde mig programmera med, BASIC+assembler, men även det gick ju rätt bra i slutändan...
Ska du lära dig på egen hand är mitt tips att testa lite olika språk. Har skrivit en hel del i Python och tycker det är riktigt bra för småprogram. Har testat på en lång rad andra dynamiskt typade programspråk och för mig passar dessa väldigt illa, även om jag har en viss förkärlek till Lisp (men skulle inte rekommendera att köra det som förstaspråk, det är hemskt att köra Lips i en debugger).
Orsaken att välja "stora" språk som C, C++, Java, JavaScript eller C# är primärt att dessa har generellt sett det bästa stödet i verktyg, IDEer, kompilatorer, etc.
Kan man välja helt fritt kan man ju väga in områden man är intresserad av. Jag vet att det går att hitta undantag, men är man (som jag är) intresserad av att skriva programvara för operativsystem, realtids-system, spel eller andra fall där prestanda är kritiskt finns egentligen bara tre val: C, C++ och Rust.
Alla relevanta OS kärnor är idag skrivna i C medan grundläggande services är skrivna i C eller C++. Både Windows- och Linux-gängen har avfärdat C++ i kärnan, men båda dessa (och andra inom RTOS/embedded) tittar på att börja skriva vissa delar i Rust framöver.
Skulle jag förslå ett språk att lära sig 2020 är det just Rust. Multi-core CPUer är idag en självklarhet, Rust hindrar dig skriva (kompileringsfel) en lång rad buggar relaterat till multi-core problem som anses "normala" i C, C++, Java, C#, Python, i princip alla språk som kan köra mer än en tråd. För någon som redan kan någon av C-språken (C, C++, C#, Java) är det en hyfsad initialt tröskel att börja med Rust, men gissar att en nybörjare kanske inte alls kliver ned i de hålen då en sådan inte lärt sig "fel" sätt att hantera vissa saker!
Är man intresserad primärt av webbprogrammering är JavaScript en självklarhet, eller möjligen TypeScript om man som jag vill ha statiskt typning. Orsak: JS är webbens assembler, allt bygger på JS där så är rätt irrelevant vad man tycker om JS som språk. Rätt använt är JS är rätt mycket Lisp med vettig placering av parenteser, vilket bl.a. gör att man kan skriva interaktiva debuggers som uppför sig på ett rimligt sätt
Är man primärt intresserad av spelprogrammering skulle jag vilja skriva: använd Rust. Förhoppningsvis kommer man gå allt mer från C++ till Rust här, men just nu är C++ totaldominant inom spelprogrammering. Om du väljer C++, se till att helt ignorera "gamla" C++, se till att lära dig C++11 och senare. Sättet man skriver "bra" C++ kod ser rätt annorlunda ut i modern C++ (C++11/14/17/20) jämfört med tidigare. Enda anledningen att överhuvudtaget bry sig om "gamla" C++ är om man är tvungen (jobbar med en gammal kodbas).
Vill man kliva runt i "back-end" träsket kommer det primärt handla om Java och C#. Java är långt större i världen i stort, men C#/.Net är väldigt populärt här hemma i Svedala!
Java är ju mer än ett språk, det är också en plattform. Håller man sig till plattformen Java finns ju lite roligare språk som Kotlin (viktigt att kunna om man vill jobba med Android)! Då jag jobbar en hel del med Jenkins är jag mer eller mindre tvingad till att uthärda Groovy. Det finns värre språk, men skulle själv inte använda Groovy för något alls om det gick att välja...
Arduino har nämnts. Gillar man att kunna "se" resultatet av sitt program mer handgripligen är det en jättebra plattform. Rekommenderar i så fall Visual Studio Code + Plattform IO. Även om det går att köra de flesta språk här, så är det nog enklast för en nybörjare att hålla sig till "standardvalet" som är en väldigt nedskalad variant av C++ (mer C med nyckelordet "class" tillagt).
Föredrar man Python (eller Rust, C, C++, eller vad det nu må vara) men vill pillra med lågnivå på ett lättsmält sätt är en RPi4 ett lysande val!
Både Arduino och RPi4 har fördelen att projekten tenderar vara väldigt begränsade, vilket är trevligt när man är nybörjare då det går rimligt fort att komma i "mål". RPi4 är inte smärtsamt långsam, så den går hyfsat OK att jobba på likt en "vanlig" dator. Det gör vissa moment lite enklare, t.ex. köra debugger.
Visst man man välja någon av de obskyra språken "ingen" använder. Men man bör nog ha en idé om varför man gör det om man väljer fritt. Går man en utbildning och får något av dessa slängt i knät är det bara att gilla läget, är målet att lära sig programmera spelar som sagt inte språket superstor roll.