Skrivet av LinusNeuman:
C# och lite HTML. Men vad spelar det för roll, är det e-penis mätning?
C# är en nedkortad och förenklad version av C++, så varför i in i trollskogen skulle vi be honom att börja lära sig det?
C# och C++ är en av de två absolut mest komplicerade språk som överhuvudtaget skapats, så skulle definitivt inte kalla någon av dessa för enkla. Skulle gissa att du aldrig tittat på något annat språk mer än C# alt. att du faktiskt inte läst språkdefinitionen för C# som är väldigt lång, inte alls speciellt mycket kortare än den för C++.
Däremot kan man definitivt skapa både det ena och det andra både i C# och C++ utan att kunna ens hälften av respektive språk och är rätt övertygad om att de flesta som "kan" C#/C++ faktiskt bara håller sig till relativt små delmängder av både språken och tillhörande standardbibliotek.
Java är ett definitivt ett enklare språk än C# och som extra grädde på moset så kan Java flyttas mellan alla idag relevanta OS för desktop och servers samt att även under Windows så är numera Java mer effektivt än C# i genomsnitt. T.ex. så har JVM implementationerna från både Oracle och IBM stöd för dynamisk omkompilering av koden (re-JIT) kombinerat med s.k. escape analysis, eller i mindre tekniska termer: Java har en mer avancerad virtuell maskin än .Net.
Men även Java är ett relativt komplicerat språk (sett till språkdefinition) jämfört med t.ex. Scheme eller Clojure, men ingen av dessa språk är (tyvärr) speciellt vanliga i industrin så av den anledningen kanske man känner att C++,C# eller Java är mer intressant att lära sig.
Och ska man kort förklara OOP så är det ett sätt att modellera program genom att representera världen med minnes-areor (objekt) som innehåller en eller flera egenskaper (attribut) som man typiskt modifierar och/eller läser genom funktioner som är associerad med en viss uppsättning egenskaper (en klass).
OOP har varit väldigt framgångsrikt de senaste 15-20 åren, men faktum är att det sättet att konstruera program är ett horribelt sätt att modellera program som man vill kunna köras på många CPU-kärnor. I teorin så skulle funktionell programmering (typ Haskell, Clojure, Erlang, ML) lösa dessa problem, men i praktiken har det visat sig att funktionell programmering må leda till program som är korrekta, men de blir relativt ineffektiva på dagens SMP system då man måste ta väldigt mycket hänsyn till layout och design av CPU-cache om man vill skriva effektiva multicore program. D.v.s. övergången till multicore system har tyvärr också inneburit att livet för oss programmerare blivit rejält mycket mer komplicerat, till viss del en återgång till 80-talet när man fortfarande var tvungen att begripa sig på ganska specifika detaljer om HW.
Notera att för de flesta som jobbar med programmering så fungerar det ypperligt att vara helt ovetande om HW-design och liknande då det är ganska få som faktiskt skriver riktigt prestanda-kritiska program. Men trådskaparen här nämner spel, som är ett exempel på programvara som faktiskt kräver att man får ut mycket av sin HW, så den aspekten ska inte utelämnas.
Det positiva med C++ jämfört med Java och C# är att C++ tvingar inte in en i OOP. OOP är en av flera paradigm som C++ stödjer + att vill man göra lite mer seriösa/krävande spel så är det C++ som gäller oavsett plattform (även iOS, Android och numera även WP8 använder normalt sett C++ för spel).
C++ är tillsammans med C de enda språken (jag känner till och känner till rätt många språk) som ger programmeraren den kontroll som krävs för att skriva riktigt effektiva, CPU-bundna och icke s.k. embarrassingly parallel program. De som tänker protestera och hävda att man kan skriva väldigt effektiva program i Java och C# också så tänk igen: är programmen inte I/O-bundna (definitivt sant om det finns en databas med i bilden) eller begränsade av något annat än CPU?
Har även sett Python nämnas. Python är definitivt ett bra språk för saker som inte är prestanda-kritiska och ett program i Python är typiskt betydligt kortare än motsvarande i C++, C# eller Java. Men OOP aspekterna i Python är rätt kassa, de är en efterkonstruktion och det märks. Är man ute efter ett dynamiskt språk som genererar korta och koncisa program med bra OOP stöd så är Ruby ett betydligt bättre val!
Men efter att ha skrivit allt detta: är man bara ute efter att lära sig grunderna så fungerar faktiskt i princip vilket språk som helst. Lärde mig själv grunderna i BASIC och assembler (6502, Z80 och 68000). Det största misstag man kan göra om man vill utvecklas är att fastna i ett enda språk. Även om man bara jobbar i ett enda språk på jobbet så blir man en bättre programmerare även i det språken om man lär sig grunderna i en rad andra språk då kommer lära sig se alternativa sätt att lösa ett givet problem.