C++ och dess framtid att programmera minnessäkert - Hur går utvecklingen?

Permalänk
Medlem
Skrivet av serafim:

?? Sambandet med det jag skrev ??

Att mönster kan användas till MYCKET
Det pågår en diskussion om mönstret HN och överlagring där jag hävdar att mönster är lättare för utvecklare om de skall skala koden. Vår hjärna fungerar inte helt olikt där när du använt mönster för att hitta snabbare.

Huller och buller är inte snabbt

Permalänk
Medlem
Skrivet av klk:

Att mönster kan användas till MYCKET
Det pågår en diskussion om mönstret HN och överlagring där jag hävdar att mönster är lättare för utvecklare om de skall skala koden. Vår hjärna fungerar inte helt olikt där när du använt mönster för att hitta snabbare.

Huller och buller är inte snabbt

HN ett mönster? Det är en teknik för namngivning i programmering, inte ett designmönster.
B-träd är inte heller ett designmönster utan en indexstruktur för att indexera stora datamängder.

Permalänk
Skrivet av klk:

Huller och buller är inte snabbt

Nu måste jag fråga, du talar dig varm för data oriented design och hur snabbt det blir för att man utnyttjar cachen bättre. Om vi har ett ECS där objekten bara innehåller ett ID till sitt entry i tabellen, är inte tabellen normalt oordnad då, dvs. huller om buller?

Permalänk
Medlem
Skrivet av serafim:

HN ett mönster? Det är en teknik för namngivning i programmering, inte ett designmönster.
B-träd är inte heller ett designmönster utan en indexstruktur för att indexera stora datamängder.

mönster = regelbundenhet, återkommande, rutin, standard, trend och så vidare.

Du vet jag är uppväxt på den tiden men lärde sig tänka själv

Permalänk
Medlem
Skrivet av klk:

mönster = regelbundenhet, återkommande, rutin, standard, trend och så vidare.

Du vet jag är uppväxt på den tiden men lärde sig tänka själv

Det virrigt framställda är förmodligen även virrigt tänkt.

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Nu måste jag fråga, du talar dig varm för data oriented design och hur snabbt det blir för att man utnyttjar cachen bättre. Om vi har ett ECS där objekten bara innehåller ett ID till sitt entry i tabellen, är inte tabellen normalt oordnad då, dvs. huller om buller?

Beror på context, hur data skall användas och vad id är. Låt säga att id endast är en nyckel för att snabbt komma åt data, då ligger förmodligen mer information om datat någon annanstans. Hur vet en del i koden att den just vill komma åt vissa id (viss data). Om id också fungerar som en slags taggning, att man kan förstå vad det är för objekt så går det att göra mer om det behovet finns.

Inte säker på att jag uppfattade din fråga korrekt så får ursäkta om mitt svar inte stämmer

Permalänk
Medlem
Skrivet av serafim:

Det virrigt framställda är förmodligen även virrigt tänkt.

Kanske, beror ju på vad man gör av det men inom programmering är det extremt viktigt att tänka själv. Det är ju det som är så fantastiskt med yrket, hela tiden nya problem där utvecklare måste tänka ut lösningar. Självklart varierar det hur mycket frihet man har men har svårt att tänka mig att det finns något annat yrke där det går att få så mycket utlopp för kreativitet som programmering

Permalänk
Skrivet av klk:

Beror på context, hur data skall användas och vad id är. Låt säga att id endast är en nyckel för att snabbt komma åt data, då ligger förmodligen mer information om datat någon annanstans. Hur vet en del i koden att den just vill komma åt vissa id (viss data). Om id också fungerar som en slags taggning, att man kan förstå vad det är för objekt så går det att göra mer om det behovet finns.

Inte säker på att jag uppfattade din fråga korrekt så får ursäkta om mitt svar inte stämmer

Den bilden jag hade av ett ECS var att man ofta stoppade data i tabellen i den ordning objekten skapades och ID helt enkelt var indexet i tabellen. Även om du har nycklar bland datat i tabellen är väl tabellen i sig typiskt osorterad? Osorterat == huller om buller.

Jag vill bara vara lite putslustig och peka på motsägelsen:
DOD == Snabbt
DOD == Huller om buller
Huller om buller != snabbt.

Forget about it, det var inget viktigt.

Permalänk
Medlem
Skrivet av klk:

mönster = regelbundenhet, återkommande, rutin, standard, trend och så vidare.

Du vet jag är uppväxt på den tiden men lärde sig tänka själv

"Att tänka fritt är stort, att tänka rätt är större"

När man diskuterar ett område där det finns vedertagen terminologi så hjälper det väldigt mycket om alla inblandade
använder den terminologin istället för att, som du, använda orden med helt andra betydelser.

Permalänk
Medlem
Skrivet av klk:

När du skriver kod, vad tänker du på? Har du något du försöker tänka på för att koden skall se bra ut och fungera bra i resten av projektet?

Är det ett projekt där det redan finns en etablerad kodstandard så följer man den.
Annars så väljer man någon av de mer etablerade varianterna för hur kod skall se ut och följer den - och det kan variera från språk till språk hur konventionerna ser ut.

Så länge man är konsekvent så spelar detaljerna ingen större roll. Fyra tecken indrag eller åtta tecken indrag är inte viktigt. Om man
använder namn som is_ready eller isReady spelar heller ingen större roll. Det viktiga är att samma konventioner följs i hela koden - och inte ens det är egentligen himla viktigt även om det underlättar.

Permalänk
Medlem
Skrivet av klk:

Kanske, beror ju på vad man gör av det men inom programmering är det extremt viktigt att tänka själv. Det är ju det som är så fantastiskt med yrket, hela tiden nya problem där utvecklare måste tänka ut lösningar. Självklart varierar det hur mycket frihet man har men har svårt att tänka mig att det finns något annat yrke där det går att få så mycket utlopp för kreativitet som programmering

Stor kreativ frihet har man ju i de flesta konstnärliga yrkena och i många hantverksyrken. Och den kreativa friheten är kanske stor om man ägnar sig åt programmering för nöjes skull, t.ex. som hobby, men i större mjukvaruprojekt kan jag inte påstå att man har särskilt mycket utlopp för kreativitet. Där är man beroende av andra, av problemdomänen, programspråksvalet, m.m. och mycket av arbetet går efter erfarenhet och redan fastlagda algoritmer och rutiner.
Stor kreativ frihet hade jag när jag skrev webb-krälare åt ett projekt, d.v.s. program som sökte av webben efter viss typ av information men så småningom blev det rutin av det också. Men kul var det och det ska man inte underskatta, det får gärna vara roligt.
Också när jag skrev program för analys av storskaliga experiment kände jag till en början att jag hade stor frihet men så småningom blev det matematisk kunskap som krävdes och man hamnade i en stadig lunk i och med att man funnit hur man skulle realisera de matematiska ekvationerna i programkod.
I de flesta fallen gäller det ju att överföra en modell över en (begränsad) verklighet till ett datorprogram och det är mest i design- och modelleringsarbetet man har friheten. Väl framme vid programmerandet blir det ändå mest en jämn lunk.
Ibland kan det spetsa till sig men oftast är det när man ska hitta en bugg. Det kan vara lite speciellt.
Kreativitet kommer in då man ger sig på att lösa problem man inte tidigare stött på men efter många år i branchen blir det inte så ofta.

Permalänk
Medlem
Skrivet av WebbkodsFrilansaren:

Jag tror det är någon form av "pseudokod" reverse-engineered av personen ifråga? Eller är det där riktig C-kod trots allt? Jag tänkte att det var resultatet av någon kodkonvertering eller -transpilering?

Jag fick taskiga vibbar från ett gammalt jobb där en av systemprogrammerarna programmerade så.
Alla variabler hette "v"+ett ordningstal, alla funktioner hette f+ett ordningstal, alla funktioner som i princip fungerade som procedurer hette p+ett ordningstal, inga kommentarer eftersom han tyckte koden var självförklarande, "kommentarer är bara i vägen och gör att man inte får något flyt i läsningen av koden"
Å andra sidan kunde han på något mystiskt sätt sina program i detalj trots att det rörde sig om ett stort antal program.
Man kunde beskriva ett fel man upptäckt och han kunde svara något i stil med:
"Ah, troligen taskig initiering av v123 i modulen m22", och det han sa stämde i 9 fall av 10.
Men det var en mardröm för alla andra när de var tvungna att sätta sig in i hans program.

Permalänk
Medlem
Skrivet av serafim:

Stor kreativ frihet har man ju i de flesta konstnärliga yrkena och i många hantverksyrken. Och den kreativa friheten är kanske stor om man ägnar sig åt programmering för nöjes skull, t.ex. som hobby, men i större mjukvaruprojekt kan jag inte påstå att man har särskilt mycket utlopp för kreativitet. Där är man beroende av andra, av problemdomänen, programspråksvalet, m.m. och mycket av arbetet går efter erfarenhet och redan fastlagda algoritmer och rutiner.

Och de som driver sådana projekt måste förstå det och anpassa sig så att utvecklarna får utlopp för kreativitet på andra sätt. Det handlar inte nödvändigtvis om att vara kreativ i produktkoden, utan om att stimulera hjärnan. Går att göra massor av saker för att stimulera kreativiteten, till exempel att tillåta helt egna sidoprojekt, som kanske inte ens har med produkten att göra.

När människor har kul och skapar så lär de sig extremt mycket mer och snabbare jämfört med när något är tråkigt. De trivs bättre på jobbet och det skapar en mycket bättre stämning totalt.

Att det skulle "kosta" tid tror jag inte på. Utvecklare spenderar ändå extremt lite tid på att skriva produktionskod. Oftast sitter de och funderar ut lösningar, är i möten eller gör annat som inte är särskilt kreativt, inte är dåligt i sig, men när det är för tråkigt sjunker inlärningseffekten och stämningen går ner.

Som denna tråd som handlar om minnesproblematik, det är en träningssak.

Permalänk
Medlem
Skrivet av Erik_T:

Är det ett projekt där det redan finns en etablerad kodstandard så följer man den.

Tänkte inte direkt på kodstandard utan mer arkitektur, hur metoder, objekt och annat skrivs.
Och låt säga att kodstandarden gör det svårt och lösa problem med bra arkitektur, hur gör du då?

Permalänk
Medlem
Skrivet av klk:

Tänkte inte direkt på kodstandard utan mer arkitektur, hur metoder, objekt och annat skrivs.
Och låt säga att kodstandarden gör det svårt och lösa problem med bra arkitektur, hur gör du då?

Jag kan inte tänka mig någon situation där kodstandarden skulle påverka vilken arkitektur man kan välja.

Permalänk
Medlem
Skrivet av Erik_T:

Jag kan inte tänka mig någon situation där kodstandarden skulle påverka vilken arkitektur man kan välja.

Ok men det kan jag

Har nämnt tidigare i tråden att jag knappar lite kod med min son för att han skall lära sig (tonåring)
För mig som lärare åt honom är det viktigt att han förstår problemen och då gör fel, när man gör fel så lär man sig som bäst.

  • Har då ett exempel här för i början för nya utvecklare är det ofta svår att veta hur metoder skrivs så det går att hålla ordning. Alla kan skriva 5 metoder och de kan heta vad som helst, den som skrivit minns vad de gör.

  • Så ökar antalet metoder och programmeraren märker att, oj jag måste ändra. Nu är antalet metoder uppe i 10, fortfarande tillräckligt för att klara av att minnas men lite svettigare är det.

  • Så skrivs mer kod och nu är vi uppe i 20, krävs en ny refaktorering som påverkar en del andra metoder och när de ändras måste de som använder dessa metoder också ändras, nu börjar det bli jobbigt.

Ett mål för mig är att han så snabbt som möjligt skall förstå det här och förstå hur snabbt det går att trassla till det samt hur och varför kod skrivs på ett sätt så man inte trasslar till det.

Han har kommit en bit och beskriver senaste refaktoreringen

11 stycken metoder såg ut så här

Citat:

1. PrepareEmptyXml_s
2. PrepareXml_s
3. AppendEntry_s
4. EntryExists_s
5. ReadFile_s
6. ReadFile_s (overload)
7. CreateTable_s
8. FilePath
9. CurrentTime_s
10. GetHistoryPath_s
11. CurrentDirectory_s

En refaktorering gjordes och efter den (som inte är helt klar) ser metoderna ut så här

Citat:

1. PrepareEmptyXml_s
2. PrepareXml_s
3. XML_AppendEntry_s
4. XML_EntryExists_s
5. XML_ReadFile_s
6. XML_ReadFile_s (overload)
7. CreateTable_s
8. FilePath
9. DATE_CurrentTime_s
10. GetHistoryPath_s
11. CurrentDirectory_s

C kodare känner säkert igen en del av tekniken Istället för att använda namespace (då det saknas i C) använder många C kodare typen av data som en del av nament.

Vad jag försökte visa och få han att förstå är hur snabbt man trasslar till det om man skriver metoder som gör flera saker, få han att förstå vikten av att bara göra en sak. Samt vad är en sak.

De metoder som börjar med XML_ jobbar BARA på XML och det är absolut förbjudet och lägga in något annat i dem.

På det viset klarar han nu och hålla ordning på mer metoder.

Det här är också något som är ganska lätt och se när andra kodar, hur de skriver sina metoder, vad för typ av logik de lägger i dem och vipps så vet man hur snabbt kodare kommer trassla in sig (slår aldrig fel).

Permalänk
Skrivet av klk:

Ok men det kan jag

Och detta har med kodstandard att göra för att C inte har namespaces? Jag tror @Erik_T syftade på style guide, snarare än språket självt. Ordet "etablerad" förekom och det tror jag inte förekommer så ofta när man diskuterar C. K&R, C89, C99 eller C11, vilken tycker du är etablerad?

Permalänk
Medlem
Skrivet av Ingetledigtnamn:

Och detta har med kodstandard att göra för att C inte har namespaces? Jag tror @Erik_T syftade på style guide, snarare än språket självt. Ordet "etablerad" förekom och det tror jag inte förekommer så ofta när man diskuterar C. K&R, C89, C99 eller C11, vilken tycker du är etablerad?

Ok, exakt vad Erik tänkte på eller hur han tolkade min fråga vet jag självklart inte.

Min tanke med första frågan var annars hur utvecklare tänker när de skriver kod. Kodstandard är bara något man följer.

Nästan alla kör lowerCamelCase och den är hemsk för den lär utvecklare tänka fel

Permalänk
Medlem
Skrivet av klk:

Och de som driver sådana projekt måste förstå det och anpassa sig så att utvecklarna får utlopp för kreativitet på andra sätt. Det handlar inte nödvändigtvis om att vara kreativ i produktkoden, utan om att stimulera hjärnan. Går att göra massor av saker för att stimulera kreativiteten, till exempel att tillåta helt egna sidoprojekt, som kanske inte ens har med produkten att göra.

När människor har kul och skapar så lär de sig extremt mycket mer och snabbare jämfört med när något är tråkigt. De trivs bättre på jobbet och det skapar en mycket bättre stämning totalt.

Att det skulle "kosta" tid tror jag inte på. Utvecklare spenderar ändå extremt lite tid på att skriva produktionskod. Oftast sitter de och funderar ut lösningar, är i möten eller gör annat som inte är särskilt kreativt, inte är dåligt i sig, men när det är för tråkigt sjunker inlärningseffekten och stämningen går ner.

Som denna tråd som handlar om minnesproblematik, det är en träningssak.

Det låter inte som om du deltagit i några stora utvecklingprojekt. Man har definitivt inte tid eller utrymme för att "tillåta helt egna sidoprojekt, som kanske inte ens har med produkten att göra". Man har oftast tidspress i form av att andra grupper i projektet behöver det man håller på att utveckla. Och nej, utvecklare spenderar definitivt inte "extremt lite tid på att skriva produktionskod", de flesta ser möten som ett nödvändigt ont och tycker att de kunde vara kortare. Skapandet av effektiv (och korrekt) kod är ju kreativt i sig men det är inte så ofta man hamnar i en situation där man måste sitta och fundera ut lösningar. Erfarna programmerare vet hur de ska hitta lösningar, man har tillgång till mycket litteratur i de ämnen man håller på med (nuförtiden också mycket info på nätet).
Vad gäller inlärning så är det något man måste hålla på med hela tiden eftersom man tappar kunskaper när man inte använder dem, både när det gäller programmering och matematik (och i stort dett allt anant också). Så man läser på när man börjar med något nytt även om man hållit på med det tidigare, dels för att fräscha upp minnet och dels för att ta till sig nyheter på området.
Jag har flera hyllmeter med böcker om matematik (även datarelaterad matematik), programspråksteori, programspråk, grundläggande programmering och speciella programmeringstekniker för olika problemområden. Och jag läser dem fortfarande. Jag har mycket om databasteknik och databasteori eftersom mitt specialområde varit databaser och hur man använder dem i diverse olika programvaror.
Har jag haft roligt? Javisst och det har jag fortfarande.
Har det varit intressant? Ja, det också och det är det än så länge.
Har jag harvat med kod och tyckt att det varit tradigt? Det också men det har alltid gått över.

Permalänk
Medlem
Skrivet av serafim:

Det låter inte som om du deltagit i några stora utvecklingprojekt. Man har definitivt inte tid eller utrymme för att "tillåta helt egna sidoprojekt, som kanske inte ens har med produkten att göra". Man har oftast tidspress i form av att andra grupper i projektet behöver det man håller på att utveckla. Och nej, utvecklare spenderar definitivt inte "extremt lite tid på att skriva produktionskod",

Precis det du beskriver är det som händer när man inte förstår hur viktigt det är för utvecklare att träna och med träningen lär de sig att undvika misstag
Det går självklart aldrig att skriva felfri kod men "stora" projekt har ibland blivit stora på grund av massa trassel

Permalänk
Medlem
Skrivet av klk:

Precis det du beskriver är det som händer när man inte förstår hur viktigt det är för utvecklare att träna och med träningen lär de sig att undvika misstag
Det går självklart aldrig att skriva felfri kod men "stora" projekt har ibland blivit stora på grund av massa trassel

???

Permalänk
Medlem
Skrivet av klk:

Ok men det kan jag

Har nämnt tidigare i tråden att jag knappar lite kod med min son för att han skall lära sig (tonåring)
För mig som lärare åt honom är det viktigt att han förstår problemen och då gör fel, när man gör fel så lär man sig som bäst.

  • Har då ett exempel här för i början för nya utvecklare är det ofta svår att veta hur metoder skrivs så det går att hålla ordning. Alla kan skriva 5 metoder och de kan heta vad som helst, den som skrivit minns vad de gör.

  • Så ökar antalet metoder och programmeraren märker att, oj jag måste ändra. Nu är antalet metoder uppe i 10, fortfarande tillräckligt för att klara av att minnas men lite svettigare är det.

  • Så skrivs mer kod och nu är vi uppe i 20, krävs en ny refaktorering som påverkar en del andra metoder och när de ändras måste de som använder dessa metoder också ändras, nu börjar det bli jobbigt.

Ett mål för mig är att han så snabbt som möjligt skall förstå det här och förstå hur snabbt det går att trassla till det samt hur och varför kod skrivs på ett sätt så man inte trasslar till det.

Han har kommit en bit och beskriver senaste refaktoreringen

11 stycken metoder såg ut så här
En refaktorering gjordes och efter den (som inte är helt klar) ser metoderna ut så här

C kodare känner säkert igen en del av tekniken Istället för att använda namespace (då det saknas i C) använder många C kodare typen av data som en del av nament.

Vad jag försökte visa och få han att förstå är hur snabbt man trasslar till det om man skriver metoder som gör flera saker, få han att förstå vikten av att bara göra en sak. Samt vad är en sak.

De metoder som börjar med XML_ jobbar BARA på XML och det är absolut förbjudet och lägga in något annat i dem.

På det viset klarar han nu och hålla ordning på mer metoder.

Det här är också något som är ganska lätt och se när andra kodar, hur de skriver sina metoder, vad för typ av logik de lägger i dem och vipps så vet man hur snabbt kodare kommer trassla in sig (slår aldrig fel).

Vad är det för språk du lär honom att programmera i?

Permalänk
Medlem
Skrivet av serafim:

Vad är det för språk du lär honom att programmera i?

C (eller vi kör C++) men skriver kod lite mer som C. Han håller ju på i skolan med och där får de lära sig annat, perl, javascript och C# har de pillat med.

Enligt mig är C ett mycket bra språk och börja med, kanske det bästa.
JavaScript är också bra och där handlar det om att den som lär sig snabbt kan göra saker och det är lätt och trassla in sig. Trasslar man in sig så måste man fixa koden och det är bra och få den träningen

Nya utvecklare behöver ha starkt fokus på att lära sig hantera kod