Välkommen till linuxportalen.se!

Linuxportalen.se är Sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.

Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!

Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!

Återkommande problem med programmerings-tutorials

 Jag har länge försökt lära mig att koda. Oftast faller det på att jag egentligen redan har allt jag behöver. Det är något av ett lyxproblem, detta inser jag, men det är svårt att hålla motivationen uppe när man faktiskt inte behöver något gjort just för tillfället. Det är därför ganska bra med välkommenterade exempel. Det är just här de flesta tutorial-guider faller. Även om kodsnuttarna är välskrivna och väl dokumenterade och beskrivna så glömmer man oftast att sätta koden i ett perspektiv. Varför kan man inte för varje kapitel ha ett exempel med överdrivet mycket kommentarer, och gärna med grafiska illustrationer? Detta skulle, i min mening, vara av mycket nytta. 

För övrigt verkar nästan alla guider vara skrivna antingen för totala nybörjare eller för proffsprogrammerare som vill byta språk, men väldigt sällan för tekniskt kompetenta personer som förstår grundbultarna och bara vill fylla på med syntax och "best practices".

Nåja, kanske är det mina koncentrationssvårigheter som förstör för mig, men det vara bara en tanke.

Alternativ för kommentarvisning

Välj ditt önskade sätt att visa kommentarerna och klicka på "Spara" för att verkställa dina ändringar.

abergmans bild

Det är ditt Downssyndrom som sabbar det:D  Nej skämt å sido, jag håller faktiskt med dig där. Det är jävligt tunnt med material för oss som har hyfsad koll, men som inte är yrkesprogramerare.

 

 

Kristians bild

Köp en bok om språket i fråga, kolla igenom grundtutorials och lär dig filosofin och syntaxen. Börja koda små testgrejer så du känner dig bekväm. Dra sen hem ett öppen källkodsprojekt och börja läs och hacka koden Smile

 

 

---------------------------------------

 

polters bild

Många FOSS-projekt verkar vara otroligt dåligt kommenterade. Detta är min erfarenhet i alla fall.

Lasps bild

Då kommer mitt andra tips! Ta ett väkänt öppet progam som Mine eller Masken.

Skriv och testa det grafiska. Å Du polter, blanda inte in så mycket matematik, det kan datorn fixa. Wink

Kör en sak i taget  Do While untill värdet är nått!

leochingkwakes bild

Matematik är roligt, och dessutom användbart att kunna.

polters bild

 Användbart? JA! Roligt? *mummelmummel*

leochingkwakes bild

För mig är det roligt i alla fall. En fördel också om det är roligt med tanke på vad jag tänkt läsa på universitetet sen Wink

Lasps bild

 Kunskap är  aldrig tung att bära. men i detta fallet gällde väl frågan programmering! Då är ett så stort område som matematik bara förvillande!
Ta itu med det som du känner för att göra, och bara det till att börja med.

När vi Skapade underlagen för Sintercast, hade vi tillgång till en annan Lennart, Professor, som bröt ut bitarna som vi sedan kunde stoppa in som formler.
Världens bästa matematiker är inte samma som världens bästa programmerare.
Gör en sak i taget. Var en man! Wink

leochingkwakes bild

Ingen multitasking då?

För mig skulle det vara ett stort problem att fokusera på en sak. Det är nämligen omöjligt för mig, jag gör alltid flera saker samtidigt.

Lasps bild

 Naturligtsvis kan man göra fler saker, men det är klokt att koncentrera sig istället för att splittra  Eller hur?
Kan du leverera!
Nu försökte jag att vara konstruktiv gentemot frågeställarens grundfråga!
Man kan trolla på många sätt Michael.

Lasps bild

Jag har jobbat i många år med programutveckling, problemlösning och liknande.

Jag ser ingen bättre väg än att härma, precis som ett barn lär sig att gå eller tala.

Som du redan har fått råd, ta ner ett enkelt projekt (litet , överblickbart).

Gå igen så att du har full koll, kanske skriver du ner en struktur över hur jobbet görs, bollar över till en mer läskunning och frågar.

Så börjar du att omvandla Vänd på höger vänster Vänd på text Säkra upp input osv.

Så nästa projekt skriver du först vad du vill att programmet (eller användare) skall få lov att åstadkomma med ditt nya program.

Jag har sett alltför mycket som inte är nedskrivet i Pseudokod. Det är ett bra sätt att förstå vad som behövs.

polters bild

Jag skulle vilja lära mig mer matematik också. Kan man göra det på egen han mån tro? Har bara läst Kurs B i gymnasiet.

leochingkwakes bild

Du kan ju validera på Komvux, du läser på egen hand och sen går du ner och gör tester. Tror det kostar 500kr per test dock. Annars kan man ju läsa på distans via NTI Vux. Dom har alla nivåer i gymnasiematte.

http://www.nti.se/vux/

Hur validering fungerar brukar man hitta via kommunens hemsida och sen vuxenutbildning...

Allt detta om du vill ha betyg sen. Är du inte ute efter betyg så finns det ju massor av böcker att köpa och sidor på nätet där man kan få hjälp. Både svenska och engelska sidor.

http://svemat.kevius.com/index.html

http://www.matteguiden.se/index2.php

Bra forum (dock lite högre nivå på grejer) http://www.vetenskapsforum.com/

Kristians bild

Det finns så många områden inom programmering. Jag kan bara rabbla upp ett fåtal. De flesta programmerare rör sig bara i ett fåtal av dessa, det är omöjligt att gå in på djupet inom allting.

* Grundläggande förståelse för variabler, villkorsatser och hopp (loopar, gotos och funktionsanrop) oberoende av språk. Detta är det klassiska "procedurell programmering".

* Grundläggande syntax och filosofi i olika språk. "Filosofi" låter kanske lite flummigt men ett språk är så mycket mer än bara en stel syntax. Olika språk låter programmeraren tänka och uttrycka sig på helt olika sätt (Haskel/LISP kontra Java/C++ som ett extremt exempel). Det är dock inte språken som är viktiga utan de principer de underlättar. C lär ut koncept kring pekare, stack och minneshantering. Lär man sig Java, C++ eller Python bör man lära sig "objektorienterad programmering". Lär man sig Haskel, LISP, Python eller Ruby bör man bekanta sig med lambdas och closures - "funktionell programmering". Eric Raymond : "Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot."

* Programuppdelning. Hur delar man upp kod i moduler (funktioner, klasser, program och bibliotek) på ett bra sätt? Skaffa en bok om objektorienterad design/designmönster och öva, öva och öva åter.

* Mjukvarukonstruktion. Hur ser man till att hålla en deadline? Hur håller man nere komplexiten samtidigt som man gör det möjligt att senare utöka ett program? Här rekommenderas boken "Code complete" (bry er inte om att den kommer från "Microsoft Press" - den är värd sin vikt i guld och det är en tung bjässe http://cc2e.com/) samt övning, övning och åter övning.

* Kodstil. I större projekt där många samarbetar är det viktigt att koden är lätt att förstå och lättläst. Därför bör man hålla sig till särskilda regler för hur koden ska se ut. http://en.wikipedia.org/wiki/Programming_style Kod som inte följer rätt stil blir sällan accepterad i öppen källkodsprojekt och ej heller på professionella företag.

* Debugging. Hur felsöker man program?

* Bugghantering. Hur fungerar en bugtracker?

* Algoritmer, optimering och profiling. Vilka olika datastrukturer finns? Vad passar till vad och vad har de för tidskomplexitet? Vad är tidskomplexitet och hur tar man reda på hur denna förhåller sig för en viss metod? Hur optimerar man ett program?

* Testning. Hur testar man kod? Hur skriver man testbar kod (så man slipper upprepande manuell debugging)? Kolla in google techtalks föredrag kring "test driven development" samt Robert C Martins tal under Öredev.

* Versionshantering. Lär dig skilnaden på centraliserad och distribuerad versionshantering. Bli bekant med svn men gärna också med git.

* Realtidsprogramming, eller i alla fall "concurrent programming". Det handlar om hur man hanterar trådar och processer och får dem att samsas om gemensamma resurser utan att huset brakar samman. Det är lättare sagt än gjort. Köp en bok om concurrent programming.

* Nätverksprogramming. Hur hanterar man sockets? Vad är tcp/udp, hur är ett (bra) protokoll uppbyggt, hur överför man information på ett portabelt sätt? Köp en bok om nätverksprogrammering. Det behöver inte vara på särskilt djup nivå, det viktiga är att lära sig koncepten.

* Databaser. Hur fungerar en databas? Hur gör man uppslag och hur bygger man upp en struktur som går att underhålla?

* Web. Lär dig grundläggande html/css, php och ruby (om rails står på schemat). Hur skriver man moduler för olika frameworks? Hur skriver man säker kod för webben?

* Lågnivåkommunikation. Hur fungerar olika i/o-kanaler såsom i2c, rs232, usb osv?

* Grafik. Hur fungerar SDL? Hur fungerar OpenGL?

* GUI-programmering. Lär dig förstå Model View Controller eller liknande metoder för att separera grafiskt gränssnitt från systemets "motor". Testa på QT/GTK och eller andra toolkits och se hur MVC kan tillämpas.

* Teckenkodning. Hur fungerar Unicode och dess varianter?

* UNIX. Vad är det som gör att ett OS kan överleva i 40 år? Vad är det som är så lyckat med dess design och kultur? Var finns dess brister? Hur överför man dessa lärdomar till andra system och miljöer? http://www.faqs.org/docs/artu/

* Läs och skriv kod. Ju mer du skriver och ju mer du läser ju bättre blir du.

 

---------------------------------------

 

abergmans bild

Mina damer och herrar, jag vill nominera det här inlägget till LP Hall Of Fame - Där bara de riktigt välskriva inläggen hamnar!

Grymt välskrivet inlägg Kristian, även jag som inte är någon dunderhacker av rang så förstår jag vad du vill ha sagt och känner igen mycket av det du säger.

 

 

Lasps bild

 När jag läste Kristians svar på polters fråga, kände jag bara en stark tilltro till att polter nu har fått en bra start.
Jag skäms nästan själv över att inte ha förstått att det är så man skall svara.

Jag har erbjudit Kristian och andra över en öl, att gå in på mitt ämne Databaser och SQL. Tänk om vi kunde ha sådana grundläggande kunskapsöverföringar.
Ett jättestort tack till Kristian som har visat vägen.

Men jag vill påminna om att även om man har en plan över målet, bör man veta vart man är för att kunna ta ut riktningen.
Så kan man öva på detta om och om igen säger Lasp

PS/ ikväll har jag labbat med ascii koder inbäddade i RFID över Rs232 in till terminal. /DS

Kristians bild

Man tackar Smile Jag låtsas svamla om web/databaser men i själva verket har jag inte en susning om dessa ämnen. Här behövs det påfyllning i kunskapsbanken.

---------------------------------------

 

abergmans bild

Webb ligger mig varmt om hjärtat, det man inte kan göra på webben är inte värt att göra:)

 

 

ein.anderssons bild

 Håller med fullt ut, numera finns det (nästan) inget man inte kan göra med weben.

Denna text får användas enligt CCommons BY-ND 2.5 med undantag från att den inte får kopieras, sändas eller distribueras utan att informera mig

polters bild

Web är inte så intressant för mig. När jag behöver något sånt gjort så bjuder jag Bergman på en öl eller två (sen låter jag en nykter snubbe rätta hans fel).

abergmans bild

Jag hade gärna druckit en öl eller 3 och lyssnat på lite om databaser, jag tror det är ett ämne som många tror sig kunna, men egentligen inte vet ett smack om.

 

 

 

polters bild

Wow! Vilket inlägg!

Detta var otroligt bra för mig, inte bara för förklaringens skull utan även för att jag insåg att jag förstår många av de punkter du listade redan. En fråga jag har på rak arm: lambda, var hittar jag en bra förklaring?

Jag har läst lite om 'test driven development' och jag förstår konceptet och hur det snabbar på utveckling.

Databaser: Jag förstår hur SQL fungerar och konceptet med tabeller och rader.

GUI: Har experimenterat med GTK genom Monodevelop, men.. GTK är, i min mening, hemskt krångligt. Qt däremot verkar vara riktigt trevligt.

Överlag vill jag tacka dig för ditt inlägg. Det var mycket motiverande!

När jag kommer hem från jobbet idag ska jag börja skriva mitt textbaserade äventyrsspel, som jag satt och ritade diagram över igår. Wink

Kristians bild

I funktionella språk är funktioner "första klassens objekt", dvs de kan skapas, tilldelas och skickas runt lite var som helst precis som vanliga värden. Låt oss ta ett exempel i LISP där man har en lista "v" av heltal. Man önskar skriva ut produkten av alla tal som är mindre än 10, en lösning skulle kunna se ut enligt.

(print (reduce '(lambda(x y)  (* x y)) (filter '(lambda (x) (< x 10) v))))

I Java hade kanske lösningen sett ut enligt

int sum = 0;

for (int i = 0; i < v.length; ++i) {

    if (v[i] < 10) {

        sum *= v[i];

    }

}

System.out.println(sum);

I funktionella språk så "filterar" man data för att beräkna/utföra något precis som man gör med pipes i shellet. Man kan likna "map" med "xargs", "filter" med "grep" och "reduce" med "awk".  Dessa finesser är grunden för LISP/Haskel men de har börjat jobba sig in i moderna språk såsom C# http://diditwith.net/PermaLink,guid,a1a76478-03d2-428f-9db6-9cf4e300ea0f...

Dessa verktyg finns även i Python men har allt mer ersatts av "list comprehension" (vilket också förekommer i Haskel, LISP och JavaScript). Guido tycker att detta sätt är uttrycka sig är desto mer "pythonic".

En closure är en lambda som dessutom har en eller flera variabel/variabler kopplat till sig, dvs dess tillstånd kan ändras om den anropas vid olika tillfällen. En funktor i C++ är precis samma sak, men desto klumpigare att skapa och använda.

 

---------------------------------------

 

jeffs bild

"reduce" med "awk"

Laughing out loud

------

Kristians bild

Fel av mig. awk kan agera som både "filter", "map" och "reduce" om man så vill Wink Det är ju ett komplett programmeringspråk.

---------------------------------------

 

hoths bild

Ja, awk är en lysande uppfinning. Man kan göra "allt" men det känns ibland lite komplicerat. När jag skriver skript så använder jag awk för att ta ut poster ur rader och skriva ut dem i lämplig ordning. Evenytuellt kompletterad med annan text. Andra kommandon som brukar finnas på samma rag är grep och sort.

----
Linux växer snabbast!

jeffs bild

Gör digsjälv en tjänst och lär dig Perl. Lika lätt som awk, dubbelt så kraftfullt och tiotusen gånger mer mångsidigt (fuckyeah CPAN!). Plus att det är roligt. Smile

------

hoths bild

Perl är säkert ett utmärkt språk. Hittills så har jag klarat mig med mina scriptar. Skulle jag skriva något "bättre" så blir det antagligen i tcl/tk (tickel). Mest beroende på att vi har en av världens bästa tcl/tk programmerare anställd i bolaget. Nej, jag skojar inte.

----
Linux växer snabbast!

Kristians bild

Håller med. Behövde skapa lite längre script för en embedded-platform på jobb och det enda som fanns att tillgå var bourne-shell (tyvärr småbuggig sådan) och awk. Man KAN skriva längre välstrukturerade script med funktioner i awk, men det känns krångligt. Jag testade istället att bygga lua och det funkade prima, ett väldigt smidigt och för sin styrka minimalt beroende (dryga 100 kb) för sådana syften Smile

Dess minimalistiska natur är också dess svaghet, antalet standardbibliotek är väldigt få. Nog kan man utföra enkel I/O, hantera strängar och köra systemkommandon, men mycket därkring saknas. Det finns dock mängder av extrabibliotek till lua, däribland http://luaforge.net/projects/penlight/ vilket försöker få in delar av pythons mest använda bibliotek och finesser i lua.

Lua används dock i huvudsak som ett inbäddat scriptspråk och där är det mycket viktigt att scriptkoden inte kan accessa fler resurser än tillåtet, dvs ju fler bibliotek som finns tillgängliga ju svårare är det att bygga ett säkert system.

 

---------------------------------------