Programmering "vad" bör man kunna?

Permalänk

Programmering "vad" bör man kunna?

Hej jag är främst en hårdvarunära programmerare som programmerar en massa roligheter, nu tänker jag dock fördjupa mig på persondatorer och undrar helt enkelt vad bör man lära sig? Jag syftar framför allt på språket c++ i Windows. Men även andra språk som man bör kunna är intressant.

Det jag har skaffat är såklart en c++ bok.
C++ Primer Plus, som är bra och täcker grunderna i språket.

UML och pattern så har jag några böcker:
Software modelin & design, schaums outlines UML

Och så några böcker om programmeringsteknik, såsom:
Code Complete (2) Steve McConnell, Clean Code Robert C. Martin

Och så flera databas, närverk och -realtidssystemsböcker.

Men vad mer bör man lära sig för windowsprrogrammering? Ja c-sharp, java och VBA "kan" jag. Asp.net böcker har jag liggandes som väntar på mig. (kanske inte direkt widowsprogrammering,men man bör ändå kunna det såsom html och css)
Skapa gränssnitt i c++, så går detta att göra på flera sätt vad jag har förstått. Windows Presentation Foundation (WPF) är väl det bästa? Men vad för bok finns det som är bra för att lära sig grunderna till detta? Jag hittar inte någon riktigt bra.
Men är det något annat som man bör lära sig? På många ställen hör jag att riktiga programmerare skapar tester innan de börja koda. (t.ex. ifrån boken The clean coder, Robert C. Martin) Och pratar om saker som Test driven development, Unit test etc. Är detta verkligen något som nästan alla riktiga programmerare gör? Alltså innan de skapar en funktion så skapar de en test för denna.

Scada, Scrum etc är det för mer för folk som professionellt ska arbeta med persondatorprogrammering och en annan kan skippa p.g.a. att det blir för mycket att lära sig?

.Net, alla pratar om detta, ingen vet vad det är. (skämt) Men detta är något man bör kunna eller kan man som hobby-programmerare i windows skippa denna? Har ni då något bra boktips för Windows?

Nå alla förslag är välkomna och tips på vad man bör lära sig. (bättre på att skriva svenska, ja jag vet. hehe)

*edit*
Directx och Opengl är självklart något som man bör kunna, jag själv avvaktar dock med dessa p.g.a. tidsbrist. (jag läser på flera områden, mer än persondatorprogrammering) Boktips på bra böcker för dessa "områden" är dock inte fel. Vad jag har förstått så används dessa "bibliotek" till bra mycket mer än spel och det är kanske inte fel att kunna det allra mest grundläggande? (typ en dummies bok. hehe)

*edit2*
"Algorithm optimering" bör man såklart ha läst på. Någon som vet något bra boktips?

Datorsäkerhet och lite "IO" i windows bör man såklart kunna. För "IO" i windows så funderar jag på att köpa boken Windows via C/C++, Microsoft Press, men kommer troligen vänta tills windows 8. (då jag ändå inte hinner läsa denna bok innan detta os har kommit)

XML är detta något man bör läsa på? Man kommer i kontakt med detta med jämna mellanrum, såsom android telefoner, men jag upplever det ofta som självförklarande.

ActiveX, så har jag enbart experimenterat med detta lite granna. Det är extremt bra att kunna inte minst för kontorsapplikationsbroderier såsom MS office. Något bra boktips?

Visa signatur

[Core i7-3930K med 32GB ram, 2*256GB SSD] & [Core i7 3770K med 16 GB RAM, 256GB SSD] som tillsammans har ett [HD 5850 1GB] och 3st 24".

Permalänk
Medlem

Scrum är en projektledningsteknik, ingenting man använder som enskild utvecklare såvida man inte lider av en allvarlig personlighetsklyvning

.NET är plattformen som C#, VB, F# och andra microsoftspråk använder sig av, men även C++ i Windowsmiljö. Du kommer otvivelaktigt lära dig en del om denna plattform om du använder något av nämnda språk, men är inte något du behöver gå in på om du inte vill fördjupa dig i detaljer.

Jag skulle vilja påstå — som så många gånger innan — att val av utvecklingsspråk är en mindre detalj i förhållande till känsla för programmering. Bra kod är ett resultat av erfarenhet och intresse.
Men lär dig Scala

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Skrivet av Teknocide:

Scrum är en projektledningsteknik, ingenting man använder som enskild utvecklare såvida man inte lider av en allvarlig personlighetsklyvning

.NET är plattformen som C#, VB, F# och andra microsoftspråk använder sig av, men även C++ i Windowsmiljö. Du kommer otvivelaktigt lära dig en del om denna plattform om du använder något av nämnda språk, men är inte något du behöver gå in på om du inte vill fördjupa dig i detaljer.

Jag skulle vilja påstå — som så många gånger innan — att val av utvecklingsspråk är en mindre detalj i förhållande till känsla för programmering. Bra kod är ett resultat av erfarenhet och intresse.
Men lär dig Scala

Ja övning är ju väldigt viktigt, problemet är dock tid. Här kommer det för min del brista en hel del, men så länge det bara är 24h på ett dygn så går problemet ej lösa. (då jag har andra områden som jag också måste studera)
Och jag har läst ett antal böcker som ska hjälpa en att koda bättre. Code Complete (2) Steve McConnell och Clean Code Robert C. Martin, som är väldigt bra, i.o.f.s. grundläggande, men jag behövde det verkligen! Ja det är två skilda saker att läsa på hur man ska göra något och sedan göra det.

Angående .Net så har jag programmerat en hel del C#, (nu fick jag slänga mig in i språket). Men det var alltså .Net som arbetade i då. Och när folk frågar ifall man kan .Net, så vad menar de då? Jag var på en arbetsintervju en gång samtidigt som jag kodade ett hyfsat stort projekt i c#, då frågade en anställd om jag kunde .Net. Det kanske var en test för att se om jag var en idiot, jag tänkte då på den där virtuella miljön (.Net frameworken) som man drar hem.

*edit*
Om man ska koda .Net i c++, så är det alltså framförallt windows gränssnitt som man kodar? Är detta kanske ett bättre val än WPF för enklare programvaror?

*edit2*

Skrivet av Teknocide:

Scrum är en projektledningsteknik, ingenting man använder som enskild utvecklare såvida man inte lider av en allvarlig personlighetsklyvning

Men det kanske är bra att kunna eller något annat "byråkrati"?
När jag pratar om hobby-programmering, så syftar jag allt på lite arbete också. Men ingen arbetsgivare kommer anställa mig för mina persondatorprogrammeringskunskaper eller programmering i övrigt, utan detta denna extra kompetens i områdena, ska bara vara som ett extra bonus. (typ för arbete med industrirobotar, där man kan behöva optimera inställningarna i visionsystemet på pcn) Likaså kommer man idag inte ifrån Windowsprogrammering oavsett vad man bygger, då nästan all information någon gång ska bearbetas på en persondator.

Visa signatur

[Core i7-3930K med 32GB ram, 2*256GB SSD] & [Core i7 3770K med 16 GB RAM, 256GB SSD] som tillsammans har ett [HD 5850 1GB] och 3st 24".

Permalänk
Hedersmedlem
Skrivet av bud_bundy:

Skapa gränssnitt i c++, så går detta att göra på flera sätt vad jag har förstått. Windows Presentation Foundation (WPF) är väl det bästa?

Vad som är "bäst" finns nog många åsikter om (särskilt om man börjar tänka på plattformsoberoende och liknande). WPF är modernt med hårdvaruacceleration och separation av gui och data, medan nyheter (som ribbon) väl först brukar dyka upp i MFC?

Skrivet av bud_bundy:

Directx och Opengl är självklart något som man bör kunna, jag själv avvaktar dock med dessa p.g.a. tidsbrist.

"Självklart" är nog lite väl starkt; 90% av alla windowsutvecklare har förmodligen aldrig använt något av dem.

Skrivet av bud_bundy:

Och när folk frågar ifall man kan .Net, så vad menar de då?

.Net har ett stort standardbibliotek och system för att till exempel hantera händelser och liknande; förmodligen undrar de om man känner till och kan hantera dessa. Program i c++/CLI, c# och visual basic är till exempel väldigt lika.

Skrivet av bud_bundy:

Om man ska koda .Net i c++, så är det alltså framförallt windows gränssnitt som man kodar? Är detta kanske ett bättre val än WPF för enklare programvaror?

Alternativet till WPF är främst Windows Forms; I båda fallen står .Net vanligen för det som sker bakom scenen.

Permalänk
Medlem

Du programmerar inte .NET, du programmerar mot .NET med C++/C#/F#/VB.
Det kanske låter som hårklyveri men är viktigt att förstå. .NET är motsvarigheten till Sun/Oracles Java Runtime Environment. Bägge är språkoberoende plattformar som kör så kallad bytecode i virtuella maskiner. Javas virtuella maskin kallas kort och gott JVM, medan .NETs motsvarighet är CLR (Common Language Runtime).

Rent teoretiskt kan vilket programmeringsspråk som helst fungera på vilken virtual machine som helst, så länge källkoden omvandlas till korrekt bytecode. Till exempel finns det en uppsjö nya språk som kör direkt på JVM, exempelvis Groovy. Samma sak går att göra för .NET.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Hedersmedlem
Skrivet av Teknocide:

Samma sak går att göra för .NET.

IronPython är väl det klassiska exemplet?

Permalänk
Medlem
Skrivet av Elgot:

IronPython är väl det klassiska exemplet?

Ja det har jag hört talas om Finns ett par till, exempelvis Fantom och Scala (till viss del)
Det verkar inte lika populärt för tredjepart att integrera mot .NET av någon anledning. Osäker om det beror på att .NET är mer kontrollerat av Microsoft, eller om man helt enkelt tycker att de officiella språken är tillräckliga.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Gå gärna ner på lågnivå och lek, lär dig räkna binärt och förstå twos complement. Lägg inte för mycket tid på det men själv tycker jag det underlättar att ha lekt med det.

Annars kan jag starkt rekommendera MIT och Stanfords öppna kurser

http://ocw.mit.edu/courses/electrical-engineering-and-compute...

Stanford Programming paradigms:

http://www.youtube.com/watch?v=Ps8jOj7diA0

http://www.saas-class.org/ - Denna kursen är också en öppen från stanford, dock med ett annat format där man faktiskt gör saker som lärana kräver och får ett "diplom" för det. Just denna handlar om Software As A Service, men längre ner på sidan finns lite fler. Hoppas du hittar något som passar dig!

Bästa lycka!

Visa signatur

moops

Permalänk
Skrivet av skaune:

Gå gärna ner på lågnivå och lek, lär dig räkna binärt och förstå twos complement. Lägg inte för mycket tid på det men själv tycker jag det underlättar att ha lekt med det.

Annars kan jag starkt rekommendera MIT och Stanfords öppna kurser

http://ocw.mit.edu/courses/electrical-engineering-and-compute...

Stanford Programming paradigms:

http://www.youtube.com/watch?v=Ps8jOj7diA0

http://www.saas-class.org/ - Denna kursen är också en öppen från stanford, dock med ett annat format där man faktiskt gör saker som lärana kräver och får ett "diplom" för det. Just denna handlar om Software As A Service, men längre ner på sidan finns lite fler. Hoppas du hittar något som passar dig!

Bästa lycka!

Jo lågnivåprogrammering är något som man bör ha med i bagaget, detta underlättar vid mycket såsom felsökning. Jag själv behärskar dock området hyfsat bra, då jag bl.a. har en dataingenjörsexamen som just är inriktad på området. Men det är ett bra allmänt tips för folk som vill lära sig koda bättre.
Jag tackar även för tipsen på gratis kurser.
Sedan är jag själv en bokfanatiker, då dessa är så lätt och bära med sig och man kan läsa lite då och då. Men det är inte dumt att se på föreläsningar som du visade. Alltså omväxla hur man lär sig.
För kunskaper från böcker är skitlätt att lära sig och sedan aldrig använda, t.ex. hur man ska skriva sin kod.

Visa signatur

[Core i7-3930K med 32GB ram, 2*256GB SSD] & [Core i7 3770K med 16 GB RAM, 256GB SSD] som tillsammans har ett [HD 5850 1GB] och 3st 24".

Permalänk

The Pragmatic Programmer är en bra bok.

Det jag skulle rekommendera om du kommer från en lågnivå-bakgrund är att lära dig nått (rent) funktionellt språk, i stil med Haskell. Det och att fundera kring vad som är svårigheterna med att skriva distribuerade program. Eftersom processorer inte kan skala med klockfrekvens längre så kommer all prestanda att komma från fler kärnor, som kan vara på samma chip eller i ett kluster.