boek over hoe een programma opbouwen

Gestart door Havoc, 01 maart 2017, 12:50:22 PM

Havoc

Citaat van: Flip op 09 maart 2017, 09:50:08 AMEr bestaan wel boeken om in een bepaalde taal te leren programmeren.
Zo ben ik ooit begonnen.
Om iets uit te testen moet je een baan hebben natuurlijk.
Verder een digitaal systeem en hier hangt veel van af hoe je commando's en terug meldingen enz  moet verwerken.
Veel digitale systemen beschikken over een zg protocol een soort handleiding om met een interface en pc te werken.
Geen klein werk . Voor mij is het een hobby in een hobby .

Zo heb ik ook het grootste deel geleerd. Enig probleem is dat die boeken je de taal leren maar niet leren programmeren. En dat is nu het probleem. Hoe steek je vanaf het begin structuur in wat je doet zodat je klein klan beginnen en niet altijd alles moet herschrijven omdat je iets wil toevoegen.

Ik doe de hele interfacing zelf, er komen geen protocollen aan te pas. Heel de opzet is dat het eigenlijk een grote IO poort is. De I2C doet enkel port extending. Ik zet een bitje om iets te doen (led je branden, wissel omzetten) of lees een bit. Er zijn ook pwm's en die zet ik gewoon een richting en duty cycle.

Citaat van: ysbeer op 09 maart 2017, 12:01:08 PMEcht modern ben ik niet met mijn zelf geschreven trein besturing.
Maar vuur is ook niet zo modern en we gebruiken het nog steeds.
Volgens mij gaat het er om is het niet te moeilijk en werkt het goed.
Ik gebruik power basic nu nog zonder compiler ,maar het kan wel met.
....
Wel is het zo dat mijn baan nog voor 90% analoog loopt.
Trouwens voor seinen /wissels/ e,d is digitaal sturen eigenlijk onzin en nogal duur
decoders/terugmelders tegen wat draad (reken maar uit)

Modern gaat dat ook niet zijn. Eenmaal opgestart komt er geen scherm/muis/keyboard aan te pas. Ga wel in C werken, gewoon omdat ik niets anders ken, de boeken in de kast heb staan en ik voor de usb interface daar een lib voor heb.

De baan zelf is ook 100% analog. Geen loc decders etc. Gewoon er staat een trein in het schaduwstation op spoor x, ik wil die op spoor y in het station, wel dan zoekt de pc een rijweg uit, legt de wissels om en zet al de seinen. Ofwel laat de pc zelf de trein rijden, ofwel doe ik dat dan. Eigenlijk vervangt de pc bij mij een container of 2 relais.

Phillipe: die Jackson ga ik eens zoeken.

PS: ik dacht dit op een tablet tetypen, maar dat kl**eding wil altijd de woorden veranderen naar wat hij denkt dat "juist" is. Nogal lastig want ik typ nederlands, engels en frans. Die Androdinges trekt echt op niks. Dacht dat het op de telefoon aan het kleine toetsenbord en scherm lag maar het is gewoon slecht.
Met vakantie voor onbepaalde duur.

wouterdt

Persoonlijk zou ik iedereen die wil leren programmeren aanraden om in een wat hogere programmeertaal te beginnen dan c of c++. Daarin kan je sneller meer doen en bereiken en dat motiveert meer.
Eens je de gang van zaken hebt begrepen, kan je altijd van taal wisselen, dat gaat dan veel vlotter.
Ik persoonlijk vind python fantastisch, leesbaar (ook achteraf  ;D) en makkelijk te schrijven
https://gathering.tweakers.net/forum/list_messages/1566266

Havoc

Citaat van: wouterdt op 10 maart 2017, 07:43:48 AM
Persoonlijk zou ik iedereen die wil leren programmeren aanraden om in een wat hogere programmeertaal te beginnen dan c of c++. Daarin kan je sneller meer doen en bereiken en dat motiveert meer.
Eens je de gang van zaken hebt begrepen, kan je altijd van taal wisselen, dat gaat dan veel vlotter.
Ik persoonlijk vind python fantastisch, leesbaar (ook achteraf  ;D) en makkelijk te schrijven
https://gathering.tweakers.net/forum/list_messages/1566266

Misschien. Ik ben van de oude stempel toen python en zo nog niet bestond en c++ net begon op te komen. Maar ik blijf ervan overtuigd dat je je taal moet aanpassen aan wat je wil bereiken. De grote hoop van wat ik moet doen is bitjes omzetten wat toch wel simpel is in c. Er is niets grafisch te doen en file io is niet meer dan een configuratie inlezen.
Met vakantie voor onbepaalde duur.

Stieven76

Misschien ipv C++ te gebruiken overstappen naar C#. De overstap is niet zo heel lastig, beide lijken nogal op elkaar. C# is zelfs gemakkelijker. Vind je ook onnoemelijk veel info van op het net, stapels ebooks enz.
Je vind ook genoeg video's op bv youtube of artikels op het internet ivm de architectuur voor een (dot net C#) programma.

Michiel

#19
C vind ik nog steeds de meest duidelijke taal, procedureel en uiterst expliciet: je zegt wat het doet, en het doet wat je zegt, met alle kemels en blunders. Nadeel, je moet echt alles weer uitspinnen tot elementaire logica en operaties.

Java vind ik een heerlijke taal wanneer je eerder object-gericht wilt werken. Heel concequent in syntax (c-like), fantastisch voor klein of middelgrote projecten, maar een ramp op het vlak van geheugenbeheer, met enorme verspilling en een rampzalige garbage collector.

C++ is mossel noch vis, geen C maar ook geen Java. C# is mossel noch vis maar gebonden aan Microsoft, dus C# ontgaat me compleet.  C++ is wel een heel technsiche taal, performant en dirwijlls gebruikt voor technische ontwikkelingen (vb gaming) en grote, volumineuze projecten.

Python is dan weer uiterst impliciet. Je heb geen controle over hoe Python iets uitvoert. Er bestaan geen declaraties, dus heb je het raden naar of python je variabel als double, integer of string interpreteert. Dikwijls lopen jouw ideëen en pythons interpretaties aardig uit elkaar. Ook het collection management (loop'en door arrays en dergelijke) is erg fussy. Ik voel me niet comfortabel met Python en erger me dikwijls, maar jongeren blijken er wel snel mee weg te zijn.

Php leuk voor zeer kleine projectjes, maar ook erg fussy in z"n syntax. Maar voor piep-klein eenvoudige projectjes ben je snel klaar.

Assembler, Basic en Pascal zijn voor mij volledig passé, en hebben voor mij geen toepassingsgebied meer.
groetjes, Michiel ...een modelbaan bouwend: het station Brussel-Luxemburg in 1:160, en een paar videos.
TPIe - Belgische Staatsspoorwegen - DCC(Lenz) - Koploper - N(1:160) - code55(Peco) - zelfbouwer(50%)

Stieven76

CiteerC# is mossel noch vis maar gebonden aan Microsoft, dus C# ontgaat me compleet.

Wat bedoel je met mossel noch vis? In de wereld waar ik in zit (ICT Consultancy) wordt bijna altijd C# gebruikt. Wij bouwen hier complexe en grote websites mee, gecombineerd met andere technologieën natuurlijk. Ook voor Windows desktop applicaties in het bedrijfsleven wordt heel veel C# gebruikt.
C# is echt wel een volwaardige programmeertaal waar je alle kanten mee uit kunt. Al hangt het wss wel wat af van wat je exact wil maken. ;)

Michiel

Stieven, je hebt natuurlijk gelijk. Het is bij ons (Federaal Wetenschappelijk) dat C# geen meerwaarde heeft, maar in een ander omgeving zal het dat zeker hebben.  ;)
groetjes, Michiel ...een modelbaan bouwend: het station Brussel-Luxemburg in 1:160, en een paar videos.
TPIe - Belgische Staatsspoorwegen - DCC(Lenz) - Koploper - N(1:160) - code55(Peco) - zelfbouwer(50%)

Havoc

Citaat van: Stieven76 op 10 maart 2017, 09:19:40 AM
CiteerC# is mossel noch vis maar gebonden aan Microsoft, dus C# ontgaat me compleet.

Wat bedoel je met mossel noch vis? In de wereld waar ik in zit (ICT Consultancy) wordt bijna altijd C# gebruikt. Wij bouwen hier complexe en grote websites mee, gecombineerd met andere technologieën natuurlijk. Ook voor Windows desktop applicaties in het bedrijfsleven wordt heel veel C# gebruikt.

Vermits dit niet voor een website is, onder linux geen .net is en helemaal geen desktop applicatie zijn dat dus zeker geen reden om een nieuwe taal te leren.

En het gaat niet over taal. Ik zoek over organisatie, structuur etc.
Met vakantie voor onbepaalde duur.

Flip

Citaat

Ik doe de hele interfacing zelf, er komen geen protocollen aan te pas. Heel de opzet is dat het eigenlijk een grote IO poort is. De I2C doet enkel port extending. Ik zet een bitje om iets te doen (led je branden, wissel omzetten) of lees een bit. Er zijn ook pwm's en die zet ik gewoon een richting en duty cycle.


Havoc : ik begrijp het niet . Een eenvoudig voorbeeld. Als je een digitaal systeem gebruikt kun je niet zonder enige uitleg hoe je bv een lok laat vooruit rijden en aan welke welke snelheid ?

Flip
Lenz digital PC sturing

wouterdt

De keuze van de taal hangt ook af van wat je wil doen.

Als je dicht op de hardware wil zitten (en dan vooral qua performance), dan ga je voor C(++) denk hierbij aan 3D engines voor games enzo. Je wil wel low level manipulaties doen maar qua performance neem ik aan dat het geen probleem zal zijn.

Wil je een taal waarin een rigide werkstructuur wordt afgedwongen met klasses/interfaces/... maar die toch meer gemak biedt ja dan kom je uit bij java(overal) of c# (Windows ) maar deze talen gaan dan wat meer resources vragen.

Ik persoonlijk vind dat de manier van werken die deze talen vragen (expliciet declaraties/gebruik van publieke en private data) te strikt voor een hobby projectje waar je toch zoveel mogelijk wenst te bereiken in je schaarse vrije tijd. Ze zijn beter in enterprise omgevingen met hele teams van programmeurs/Analysten/...

Talen zoals Python bieden veel vrijheid, en alles gaat vlot en je kan flexibeler en vlugger werken.

Ik denk trouwens dat de meeste talen bitwise operations ondersteunen, daar moet je je niet door laten afschrikken( https://wiki.python.org/moin/BitwiseOperators)

Maar het allerbelangrijkste is dat je  moet de taal nemen waarin je comfortabel kan werken.
Als jij het liefst schrijft in C, dan maak je het gewoon in C.
Als je dit sneller kunt doen dan een andere taal leren en het daarin doen, doe dat dan.

Jij bent de Project leider, jij beslist  ;D


Havoc

Citaat van: Flip op 10 maart 2017, 17:30:10 PM
Citaat

Ik doe de hele interfacing zelf, er komen geen protocollen aan te pas. Heel de opzet is dat het eigenlijk een grote IO poort is. De I2C doet enkel port extending. Ik zet een bitje om iets te doen (led je branden, wissel omzetten) of lees een bit. Er zijn ook pwm's en die zet ik gewoon een richting en duty cycle.


Havoc : ik begrijp het niet . Een eenvoudig voorbeeld. Als je een digitaal systeem gebruikt kun je niet zonder enige uitleg hoe je bv een lok laat vooruit rijden en aan welke welke snelheid ?

Flip

Wat ik bedoel is dat ik geen protocol moet ondersteunen zoals DCC of S88 of wat er ook naar een DCC centrale moet geschreven en gelezen worden. De hele opzet is dat alles wat buiten de pc hangt gewoon I/O is. Dus een wissel omzetten wordt bitje x van poort y van ic z op "1" zetten, wachten tot bit a van poort b op adres c "1" wordt (terugmelding) en dan die eerste bit terug uitzetten. Als een loc een bepaalde snelheid moet hebben (uitgerekend door de pc) dan worden al de pwm uitgangen die aan die rijweg hangen op duty cycle q% gezet, dat is opnieuw een bepaalde waarde naar een bepaald register schrijven.

De protocollen omdie bits te gaan omzetten zoveel meter verder onder de baan doet de hardware.

Denk dat we hier even over verschillende definities van protocollen aan het praten zijn. Voor mij is de I2C op de bus een protocol, maar daar kom ik niet tussen behalve de max frequentie instellen 1x in het begin. Hoe het verband is tussen de clock en data hou ik me niet bezig.
Met vakantie voor onbepaalde duur.

Flip


OK laat maar eens weten wanneer uw eerste treinen  hun rondjes rijden    ;)

Vol automatisch dan met stop in station bediening van wissels en seinen .
Terug naar opstelstation enz;

Groeten

Flip
Lenz digital PC sturing

Havoc

Vermits het 30 jaar geduurd heeft om een baanplan te maken zal dit niet voor morgen zijn. Soms is de reis waardevoller dan de bestemming...
Met vakantie voor onbepaalde duur.

Werner

Heb eens gezocht in m'n boekenkast, het meeste is taal specifiek, vooral dan Java en C++.

Deze 2 zijn algemeen:
- McConnell, S., Code Complete, Redmond, Microsoft Press, 1993, ISBN 1-55615-484-4
- Gamma, E., et al, Design Patterns; Elements of Reusable Object-Oriented Software, 20ste druk, Upper Saddle River, Addison-Wesley, 2000, ISBN 0-201-63361-2
Je leert er niet mee programmeren, maar er worden wel voorbeelden gegeven van hoe structuur in te brengen, en patronen te herkennen.

En ook, hoewel off-topic, zijn de volgende 2 wel in het Nederlands, en heel goed voor de beginner, dus vermeld ik ze maar:
- Warmer, J., Kleppe, A., Praktisch UML, s.l. Addison-Wesley, 1999, ISBN 90-6789-937-2
- van der Lans, R. F., het SQL leerboek; vijfde herziene uitgave, 5de druk, 3de oplage, Schoonhoven, Academic Service, 2000, ISBN 90-395-0755-4

Voor Engelstalige titels kan je de beoordelingen op bijvoorbeeld Amazon UK of US lezen.

En het helpt ook om eens op Wikipedia te zoeken/lezen: bijvoorbeeld https://nl.wikipedia.org/wiki/Model-view-controller-model
Waarbij de controller ook input ontvangt van de spoorbaan (bvb bezetmeldingen), en de view output naar de spoorbaan is (bvb seinen).  Het model is je eigen data structuur, die de secties in je baan beschrijft/opsomt.  De bezetmelders (input) laten je weten in welke sectie er iets gebeurt, en daar kan je de dan de gerelateerde seinen mee aansturen (output).  De "fysieke" in- en output kan je loskoppelen met een aparte reeks functies (bibliotheek) van je eigenlijke programma code.
Dat is wat ik begrepen uit je bovenstaande vragen, maar ik kan me vergissen.
H0, 2-rail analoog, grotendeels Belgisch.
Mijn broncode: wat niet is getest, werkt niet; wat niet werkt, is niet getest geweest.

patrick smout

Citaat van: Werner op 27 maart 2017, 00:20:23 AM
En ook, hoewel off-topic, zijn de volgende 2 wel in het Nederlands, en heel goed voor de beginner, dus vermeld ik ze maar:
- Warmer, J., Kleppe, A., Praktisch UML, s.l. Addison-Wesley, 1999, ISBN 90-6789-937-2
- van der Lans, R. F., het SQL leerboek; vijfde herziene uitgave, 5de druk, 3de oplage, Schoonhoven, Academic Service, 2000, ISBN 90-395-0755-4
Een goed boek over UML lijkt me niet echt off-topic hoor. Een goed programma komt enkel tot stand dankzij een goed software ontwerp (design). Jammer genoeg wordt er te snel voorbij gegaan aan design. Coderen is immers zoveel leuker ...

Citaat van: Werner op 27 maart 2017, 00:20:23 AM
En het helpt ook om eens op Wikipedia te zoeken/lezen: bijvoorbeeld https://nl.wikipedia.org/wiki/Model-view-controller-model
Waarbij de controller ook input ontvangt van de spoorbaan (bvb bezetmeldingen), en de view output naar de spoorbaan is (bvb seinen).  Het model is je eigen data structuur, die de secties in je baan beschrijft/opsomt.  De bezetmelders (input) laten je weten in welke sectie er iets gebeurt, en daar kan je de dan de gerelateerde seinen mee aansturen (output).  De "fysieke" in- en output kan je loskoppelen met een aparte reeks functies (bibliotheek) van je eigenlijke programma code.
Interessante blik op MVC (Model View Controller). Veelal wordt MVC geassocieerd met (lees toegepast op) gebruikersinterfaces (UI). Dit vind ik een verfrissend idee, heel origineel (al ben ik er nog niet helemaal uit of dit probleem nu hierdoor eenvoudiger wordt).

Ter aanvulling van m'n vorige post volgende boeken-tip "Design Patterns for Embedded Systems in C" van Bruce Powel Douglass uitgegeven door Elsevier. Op het einde van het boek is er ook een appendix met een overzicht(je) van de UML notatie. Niet voldoende om het te doorgronden maar wel een aanzet. Zoals hierboven al aangegeven, goed boek van UML is zeker ook een aanrader: "Real Time UML workshop for embedded systems" eveneens van Bruce Powel Douglass  (bestaat ook nog een recentere versie van)

mvg,

Patrick Smout
Met vriendelijke groeten,

Patrick Smout