Nyfikenhet.
Många sena nätter.
Prova nya saker.
Läs andras kod, modifiera den, få upp förståelse för den. Låt det sjunka in.
Ok, mina förslag nedan har ingenting med hur man "programmerar" egentligen, utan allt runtomkring som även det skiljer en bra programmerare från en dålig. Så förutom programmeringslogik och kodförståelse m.m. så finns det ju ett par parametrar till.
Man behöver inte lära sig ALLT till grunden, det är förövrigt omöjligt då programmering är ett så brett spann av miljoner olika saker. T.ex. bara för att du kan ditt språk till 100% innebär inte det att du vet hur man använder words comobjekt för att automatiskt skapa dokument från ditt program osv.. Det är inget som säger att du gör bra användargränssnitt m.m.
I det vardagliga arbetet som programmerare stöter man på de mest skilda uppgifterna som kunden vill att programmet ska utföra. Då är det bra att ha en bredd på allt runt omkring också. Vad finns det för befintliga objekt man kan tänkas arbeta mot, vilka färdiga komponenter finns det att använda, ska man lägga 100timmar på att bygga ett objekt/funktion eller köpa in en komponent som klarar av det redan för en 10-del av priset och dessutom spara in arbetstiden? Har man koll på sånt och vet när/var/hur det är lönt att göra så, så är det en fördel.
Det är bra att ha *lite* kunskap om många saker för att ha i baktanken när man gör något så att man känner igen mönster och användbarhet för saken och väljer rätt metodik/funktion m.m. när det behövs. Bättre än att kunna bara 4 saker men till 100% iaf om man är allroundprogrammerare som får de mest skilda programmeringsuppdrag. Det går alltid att lära sig mer om en sak man har lite kunskap om. Det går däremot inte om du inte ens vet om att saken finns.
Jag funderar alltid på "har någon annan gjort det här?", "hur gjorde dom?", "var det bra?" osv.
När man debiterar 40 timmar på ett litet projekt så ligger det ju i verkligheten 100-tals timmar i lärotid då man suttit och experimenterat och donat och gjort små löjliga program som till 90% av fallen inte haft någon egentlig mening.
Så.. mitt bidrag är väl att man ska sitta och göra en massa löjliga program och testa saker, prova att förstå sig på ett binärfilformat t.ex., prova på att koppla in sin telefon till datorn och skriva ett program som skickar sms, prova att koppla in webcammen och få ut videoströmmen ur den, prova att förstå sig på videoströmmen.. prova prova prova. söka information hela tiden.
Jag har i många lek-projekt gjort det på det enkla sättet först, sedan har jag tittat på vad av mina funktioner och rutiner som går att bytas ut mot rena windows-API:er, det har gjort att jag har en stor förståelse och kunskap om massor av windows-apier, vilket för min del känts som en väl investerad tid så det kan jag rekommendera för windows-programmerare iaf.
Och med exempel kommer man långt när man vill lära sig så den här har varit guld värd:
http://allapi.mentalis.org/agnet/apiguide.shtml
Well.. Ganska uppenbart kanske att man måste lägga ner mycket tid om man vill kunna många saker.
I slutändan måste ju all kunskap omvandlas till ett program via programmering så man får ju självklart se till att vara "top of the line" med utvecklingen kring det också.