Första kurs C-programmering - hur gå vidare ?

Permalänk

Första kurs C-programmering - hur gå vidare ?

Hej
Jag har ganska nyligen läst en första grundkurs i C-programmering. Tyckte efter denna kurs att i alla fall C-programmering var ganska tråkigt och tidsödande. När jag läst böcker inom C++ innan har det varit ganska intressant men kursen satte stopp för det.
Kunde ju sitta i timmar och det sen visade sig att man glömt några tecken.

Jag har dock inte helt knäckt utan det finns en gnutta hopp kvar att det ska va kul.

Om jag inte tyckte det var kul att sitta vid en dator i 4 timmar+ och programmera uppgifter i C finns det andra områden som jag kanske ändå skulle tycka om t.ex. mekatronik, elektroteknik ? Jag hade bra betyg i matte. Insåg dock att programmeringen inte innehåller någon matte alls mer än plus, minus osv. Mest logiskt tänk.

En uppgift jag tyckte var mycket rolig dock var att man för hand skulle lösa binära uttryck som t.ex.

int a=1,b=2,c=3
a & -b & -c blir 0000 0000
a& -b & c blir 0000 0001

Vad jag förstått är en ing. utbildning i datateknik i princip bara programmering även jobb. Hur ska jag tänka ? Kanske gillar jag mer mekatronik, elektronik alltså mer hårvarunära programmering. Jag är mer intresserad av att jobba med självkörande bilar, styrning av grävmaskiner osv än att göra nya banksystem.

Visa signatur

Bärbar: Lenovo Ideapad 700 Signature Edition
CPU: i5 6300 HQ 2,30 GHz, RAM: 8 GB, GPU: Nvidea Geforce GTX 950M, Hårddisk: 256 GB SSD.

Lenovo Legion 5: AMD Ryzen 7 5800H, 16 GB RAM, RTX 3060, 1000 GB SSD

Permalänk
Medlem
Skrivet av 4cyberspace:

Hej
Jag har ganska nyligen läst en första grundkurs i C-programmering. Tyckte efter denna kurs att i alla fall C-programmering var ganska tråkigt och tidsödande. När jag läst böcker inom C++ innan har det varit ganska intressant men kursen satte stopp för det.
Kunde ju sitta i timmar och det sen visade sig att man glömt några tecken.

Jag har dock inte helt knäckt utan det finns en gnutta hopp kvar att det ska va kul.

Om jag inte tyckte det var kul att sitta vid en dator i 4 timmar+ och programmera uppgifter i C finns det andra områden som jag kanske ändå skulle tycka om t.ex. mekatronik, elektroteknik ? Jag hade bra betyg i matte. Insåg dock att programmeringen inte innehåller någon matte alls mer än plus, minus osv. Mest logiskt tänk.

En uppgift jag tyckte var mycket rolig dock var att man för hand skulle lösa binära uttryck som t.ex.

int a=1,b=2,c=3
a & -b & -c blir 0000 0000
a& -b & c blir 0000 0001

Vad jag förstått är en ing. utbildning i datateknik i princip bara programmering även jobb. Hur ska jag tänka ? Kanske gillar jag mer mekatronik, elektronik alltså mer hårvarunära programmering. Jag är mer intresserad av att jobba med självkörande bilar, styrning av grävmaskiner osv än att göra nya banksystem.

Det kan väl säkert variera lite mellan olika högskolor exakt hur programmet ser ut, men "i princip bara programmering" är inte alls min syn på vad en civilingenjörsutbildning i datateknik innebär.
Snarast mest matte (är väl ett tema i civilingenjörsutbildningar rent allmänt), teoretiska kurser som relaterar till datastrukturer, algoritmer, komplexitet, m.m. Relativt lite faktisk programmering, men det kan väl variera lite beroende på inriktning.

Hoppet på slutet "att göra nya banksystem" känns rätt svårförankrat, men om du har specifika intresseområden så ska du ju definitivt se över vilka utbildningar som kan täcka in vad.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

Skilj mellan "att lära sig ett programmeringsspråk" och "att lära sig programmera".
Av rent praktiska skäl brukar inledande programmeringskurser försöka lära ut bägge två samtidigt.
Av de två är "att lära sig programmera" den svåraste och roligaste biten.

Sådana där småfel som att glömma ett semikolon lär man sig snabbt att hantera, och att känna igen när det är det som blivit fel.

Programmering i sig innebär inte så mycket ren matematik - men vissa programmeringsuppgifter kräver väldigt mycker matematik. T.ex. olika varianter av numerisk analys, eller att skriva en motor för 3D-grafik.

En ingenjörsutbildning innehåller en hel del förutom programmering. Exakt vad som ingår varierar ju mellan olika utbildningar, men utgå från att det är en rejäl dos matematik och en del fysik - eller mycket fysik beroende på utbildning.

Elektronik och programmering av elektronik är olika saker, även om det naturligtvis finns en hel del överlapp.

Om du funderar på en högkoleutbildning så skulle jag rekommendera att du tittar på någon av de mer generella civilingenjörsutbildningarna, som t.e.x Teknisk Fysik. Där får du lära dig en hel del om väldigt mycket (Matematik, fysik, elektronik, programmering, signalbehandling, m.m. m.m.) och kan senare specialisera dig mot vad du tyckte var roligast.

Permalänk
Skrivet av evil penguin:

Det kan väl säkert variera lite mellan olika högskolor exakt hur programmet ser ut, men "i princip bara programmering" är inte alls min syn på vad en civilingenjörsutbildning i datateknik innebär.
Snarast mest matte (är väl ett tema i civilingenjörsutbildningar rent allmänt), teoretiska kurser som relaterar till datastrukturer, algoritmer, komplexitet, m.m. Relativt lite faktisk programmering, men det kan väl variera lite beroende på inriktning.

Hoppet på slutet "att göra nya banksystem" känns rätt svårförankrat, men om du har specifika intresseområden så ska du ju definitivt se över vilka utbildningar som kan täcka in vad.

Tack för ditt svar. Jo jag vet att t.ex. ett civilingenjörsprogram i t.ex. datateknik innehåller mycket kurser i matematik, datastrukturer etc. Men det man kommer jobba med sen blir ju väldigt troligtvis inom programmering/systemutveckling och det innehåller inte mycket matte har jag fått intrycket av. Bläddrade igenom en riktigt tjock bok i C++ programmering. Såg ingen avancerad matte. Däremot samma sorts logik. Mata in något, skriv ut något, vänta på något med en whilesats, om detta är större än det här så skriv ut detta, om detta pekar mot det så hämta det osv.

Om du nu inte programmerar avancerade spel/grafik så har jag fått bilden att programmering är väldigt lite matte men mycket logiskt tänkande. Nu ska jag inte komma och lära upp andra eftersom jag är väldigt ny på programmering. Men man sitter väl knappast med derivator, integraler eller imaginära tal i programmering ?

Jag jämför t.ex. att man programmerar ett nytt tidrapporteringssystem på ett företag t.ex. kontra att få utveckla ny teknik som abs systemet i en bil eller i robotar.

Visa signatur

Bärbar: Lenovo Ideapad 700 Signature Edition
CPU: i5 6300 HQ 2,30 GHz, RAM: 8 GB, GPU: Nvidea Geforce GTX 950M, Hårddisk: 256 GB SSD.

Lenovo Legion 5: AMD Ryzen 7 5800H, 16 GB RAM, RTX 3060, 1000 GB SSD

Permalänk
Skrivet av Erik_T:

Skilj mellan "att lära sig ett programmeringsspråk" och "att lära sig programmera".
Av rent praktiska skäl brukar inledande programmeringskurser försöka lära ut bägge två samtidigt.
Av de två är "att lära sig programmera" den svåraste och roligaste biten.

Sådana där småfel som att glömma ett semikolon lär man sig snabbt att hantera, och att känna igen när det är det som blivit fel.

Programmering i sig innebär inte så mycket ren matematik - men vissa programmeringsuppgifter kräver väldigt mycker matematik. T.ex. olika varianter av numerisk analys, eller att skriva en motor för 3D-grafik.

En ingenjörsutbildning innehåller en hel del förutom programmering. Exakt vad som ingår varierar ju mellan olika utbildningar, men utgå från att det är en rejäl dos matematik och en del fysik - eller mycket fysik beroende på utbildning.

Elektronik och programmering av elektronik är olika saker, även om det naturligtvis finns en hel del överlapp.

Om du funderar på en högkoleutbildning så skulle jag rekommendera att du tittar på någon av de mer generella civilingenjörsutbildningarna, som t.e.x Teknisk Fysik. Där får du lära dig en hel del om väldigt mycket (Matematik, fysik, elektronik, programmering, signalbehandling, m.m. m.m.) och kan senare specialisera dig mot vad du tyckte var roligast.

Okej, instämmer i princip allt du säger. Men säg att jag gillar exemplet jag gav i inledningen, går det att spinna vidare på i något ? Eller det kanske bara är basics ?

int a=1,b=2,c=3
a & -b & -c blir 0000 0000
a& -b & c blir 0000 0001

Vad är skillnaden på att programmera en hemsida eller ett tidrapporteringssystem jämfört med att utveckla en robot t.ex. eller abs systemet i en bil ?

Jag undrar också om t.ex. en mekatronik ingenjör eller elektroingenjör lär sig en annan "typ" av programmering jämfört med datateknik ?

Visa signatur

Bärbar: Lenovo Ideapad 700 Signature Edition
CPU: i5 6300 HQ 2,30 GHz, RAM: 8 GB, GPU: Nvidea Geforce GTX 950M, Hårddisk: 256 GB SSD.

Lenovo Legion 5: AMD Ryzen 7 5800H, 16 GB RAM, RTX 3060, 1000 GB SSD

Permalänk
Medlem
Skrivet av 4cyberspace:

Tack för ditt svar. Jo jag vet att t.ex. ett civilingenjörsprogram i t.ex. datateknik innehåller mycket kurser i matematik, datastrukturer etc. Men det man kommer jobba med sen blir ju väldigt troligtvis inom programmering/systemutveckling och det innehåller inte mycket matte har jag fått intrycket av. Bläddrade igenom en riktigt tjock bok i C++ programmering. Såg ingen avancerad matte. Däremot samma sorts logik. Mata in något, skriv ut något, vänta på något med en whilesats, om detta är större än det här så skriv ut detta, om detta pekar mot det så hämta det osv.

Om du nu inte programmerar avancerade spel/grafik så har jag fått bilden att programmering är väldigt lite matte men mycket logiskt tänkande. Nu ska jag inte komma och lära upp andra eftersom jag är väldigt ny på programmering. Men man sitter väl knappast med derivator, integraler eller imaginära tal i programmering ?

Jag jämför t.ex. att man programmerar ett nytt tidrapporteringssystem på ett företag t.ex. kontra att få utveckla ny teknik som abs systemet i en bil eller i robotar.

Det beror ju helt på vad det är man programmerar. Som du är inne på så involverar all programmering logik och åtminstone lite enkel aritmetik, men hur mycket matematik det är i övrigt beror ju helt på själva problemet som ska lösas.

Om man håller sig till triviala exempel eller en situation där utvecklaren mer eller mindre bara "limmar ihop" redan färdiga lösningar så är det väl ofta inte mer matematik än så. Det är väl dock inte den typ av arbete som en civilingenjörsutbildning egentligen är avsedd för i första hand.

Men om man istället tar mjukvaran till en självkörande bil, ett exempel som du nämnde, så kan du nog räkna med att det är väldigt mycket matematik "under huven".

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Skrivet av evil penguin:

Det beror ju helt på vad det är man programmerar. Som du är inne på så involverar all programmering logik och åtminstone lite enkel aritmetik, men hur mycket matematik det är i övrigt beror ju helt på själva problemet som ska lösas.

Om man håller sig till triviala exempel eller en situation där utvecklaren mer eller mindre bara "limmar ihop" redan färdiga lösningar så är det väl ofta inte mer matematik än så. Det är väl dock inte den typ av arbete som en civilingenjörsutbildning egentligen är avsedd för i första hand.

Men om man istället tar mjukvaran till en självkörande bil, ett exempel som du nämnde, så kan du nog räkna med att det är väldigt mycket matematik "under huven".

Okej. Vad tror du om det jag skrev till användaren innan ? Alltså om du vet om det är någon skillnad i programmering om man jämför en mekatronik ingenjör/elektroingenjör jämfört med dataingenjör ? Har de en annan infallsvinkel och lär sig andra system ?

En mekatronik ingejör ska ju programmera robotar, styrsystem osv. Ställ det i kontrast med vad en dataingenjör programmerar.

Visa signatur

Bärbar: Lenovo Ideapad 700 Signature Edition
CPU: i5 6300 HQ 2,30 GHz, RAM: 8 GB, GPU: Nvidea Geforce GTX 950M, Hårddisk: 256 GB SSD.

Lenovo Legion 5: AMD Ryzen 7 5800H, 16 GB RAM, RTX 3060, 1000 GB SSD

Permalänk
Medlem

Nu vet jag inte vilken erfarenhet och kunskap du har av programmering, men här har du lite inspiration (med tanke på det du skrev om mer hårdvarunära och självklrande fordon):

OpenCV (Volvo och sannolikt många flera använder någon liknande plattform i självkörande fordon):
https://docs.opencv.org/3.4.3/df/d65/tutorial_table_of_conten...
https://newatlas.com/volvo-auto-braking-cyclist-detection-sys...

TensorFlow (och machine learning generellt, inte direkt hårdvarunära men mycket bra att ha förståelse för underliggande logik och matematik):
https://www.tensorflow.org/
https://en.wikipedia.org/wiki/Machine_learning
http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/

R (programmeringsspråk med fokus på statistik):
https://en.wikipedia.org/wiki/R_(programming_language)

Oavsett om du går vidare inom programmering eller ej rekommenderar jag att du lär dig lite Regex (implementerat i alla språk jag provat, användbart när helst du behöver extrahera/byta ut små delar i stora mängder data):
https://en.wikipedia.org/wiki/Regular_expression
(exempel:) https://www.regexpal.com/?fam=105773

Nu jobbar jag inte som mjukvaruutvecklare och hade inte det som inriktning efter gymnasiet, men just machine learning och "AI" är det väldigt få som har någon förståelse för alls, och när det kommer till machine learning och big data så är behovet mycket större än tillgången på folk som förstår det och kan utveckla lösningar för det (se bara på vad t.ex. IBM gör med Watson). Statistik och matematisk modellering kopplat till detta är det ännu färre som förstår och kan tillämpa.

För de som tror de vill lära sig programmering brukar jag ge samma råd, kom på något du vill skapa/lösa som du kan göra med hjälp av att programmera. Att programmera är bara själva skrivandet av kod, alltså att översätta i maskinspråk vad du vill att datorn skall göra, om du jobbar rätt kommer du spendera mycket mer tid med penna och papper för att strukturera och bryta ner ditt problem i hanterbara delproblem innan du överhuvudtaget skriver någon kod. Och du kommer lära dig att olika språk (och bibliotek) kommer lämpa sig olika väl för olika problemställningar.

Om du saknar matematiken i den programmering du gjort hittills är det inte nödvändigtvis konstigt, syftet med nästan alla bibliotek, oavsett språk, syftar till att abstrahera bort komplexiteten så att du inte ska behöva tänka på den och bygga något som funkar. Det betyder inte att matematiken inte finns där och inte är viktig, faktum är att det kan vara kul att återskapa funktionalitet som någon redan implementerat för att lära sig själv hur det funkar. Om du skriver kod från grunden så kommer du med tid förstå varför dessa bibliotek finns och varför man efter ett tag hellre spenderar flera timmar på att leta efter någon annan som redan utvecklat en lösning på ett problem istället för att skriva kod själv.

När (och om) du väl hittar ett problem du vill och kan lösa genom att skriva kod, då kommer det vara mycket lättare att navigera i djungeln som är programmering då du blir bättre och bättre på att beskriva (och googla) vad du vill åstadkomma. Om du dessutom (till skillnad från jag själv) förstår matematik och beräkning, så kan du hitta mycket mer eleganta och effektiva lösningar än många andra.

Och sist men inte minst, du kommer behöva skriva mycket kod. Du kommer behöva misslyckas många gånger, komma tillbaka till kod efter några dagar och inte förstå vad den gör eller hur du kunde varit så dum som skrev den som du gjorde. Det är så man lär sig, och vad du lär dig beror mer på hur du väljer att lösa problem än vad ditt problem är.

Edit:

Skrivet av 4cyberspace:

Okej. Vad tror du om det jag skrev till användaren innan ? Alltså om du vet om det är någon skillnad i programmering om man jämför en mekatronik ingenjör/elektroingenjör jämfört med dataingenjör ? Har de en annan infallsvinkel och lär sig andra system ?

En mekatronik ingejör ska ju programmera robotar, styrsystem osv. Ställ det i kontrast med vad en dataingenjör programmerar.

Jag svarar lite kort på denna. Det jag skrev ovan är definitivt inom sfären datavetenskap, det är också det som intresserar mig mer. Någon annan kanske kan berätta mer om deras upplevelser om mekatronikprogram på högskola men jag skulle säga att den stora skillnaden är reglertekniken. Inom mekatronik styr du hårdvara, hårdvara som i allra högsta grad är analog, bara för att du lägger en "etta" på en utgång på t.ex. en PLC betyder det inte att t.ex. en solenoid i samma millisekund ändrar läge. Du måste ta hänsyn till alla parametrar för hårdvaran du styr, vilket för t.ex. förbränningsmotorer som påverkas i allra högsta grad av omgivande temperatur, lufttryck etc.

En dataingenjör, som är ett mycket mer brett begrepp än vad det borde vara, behöver i de allra flesta fall inte bry sig om hur hårdvaran rent elektromekaniskt fungerar, hårdvaran i de flesta fall är datorer som pratar med varandra över kända protokoll, en dataingenjör går inte ut i en serverhall och skruvar i ett rack pga något udda hårdvaruproblem som gör att hennes/hans applikation hänger sig.

Visa signatur

data, representation av värden, text etc. lämpad för överföring, tolkning eller bearbetning av människor eller maskiner.
dator, digital automatisk beräkningsmaskin som styrs av ett i dess minne lagrat program.

Permalänk
Medlem
Skrivet av 4cyberspace:

Okej. Vad tror du om det jag skrev till användaren innan ? Alltså om du vet om det är någon skillnad i programmering om man jämför en mekatronik ingenjör/elektroingenjör jämfört med dataingenjör ? Har de en annan infallsvinkel och lär sig andra system ?

En mekatronik ingejör ska ju programmera robotar, styrsystem osv. Ställ det i kontrast med vad en dataingenjör programmerar.

Jag skulle rekommendera att du drar nytta av studievägledarna på någon högskola du är intresserad av, de är ju mer pålästa angående skillnaden på de olika programmen samt vad det nu kan finnas för olika specialiseringar. (Inget jag avser att läsa på om, och skiljer ju även en del mellan olika högskolor.)

"Ställ det i kontrast med vad en dataingenjör programmerar." känns svårt. Det är i min mening mer öppet för att kunna vara inom vitt skilda områden.

Om jag skulle gissa lite grovt så skulle jag säga:
Mekatronik: programmet kombinerar mer olika grejer (data, maskin/mekanik, elektronik) för att lära dig något lite mer specialiserat.
Datateknik: mer fokuserat på data-sidan i sig, men i grunden mindre specialiserat vilket användningsområde.

Sedan jobbar förstås folk inte nödvändigtvis med vad deras utbildning var tänkt att leda till, och vad folk lär sig på egen hand och i yrkeslivet är ju ofta mer avgörande än vad de lärt sig under sin utbildning.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av 4cyberspace:

Okej, instämmer i princip allt du säger. Men säg att jag gillar exemplet jag gav i inledningen, går det att spinna vidare på i något ? Eller det kanske bara är basics ?

int a=1,b=2,c=3
a & -b & -c blir 0000 0000
a& -b & c blir 0000 0001

Det där är väldigt mycket basics.
Ungefär som division inom matematiken, något man bör kunna göra för hand men i praktiken tar man fram en miniräknare för att göra det.

Citat:

Vad är skillnaden på att programmera en hemsida eller ett tidrapporteringssystem jämfört med att utveckla en robot t.ex. eller abs systemet i en bil ?

Själva programmeringen - inte så mycket.
Skillnaden är mest i de domänspecifika delarna - dvs att förstå hur ett tidsrapporteringssystem skall fungera och vara uppbyggt kontra förstå hur ett abs system fungerar. I det senare fallet tillkommer även realtidsaspekter - vissa uppgifter måste system kunna göra inom en utsatt tid.

Citat:

Jag undrar också om t.ex. en mekatronik ingenjör eller elektroingenjör lär sig en annan "typ" av programmering jämfört med datateknik ?

Framför allt lär de sig mycket mindre programmering, och betydligt mer om mekanik/elektronik.