Mijn laatste (grote) reviews: Medal of Honor (VR), Half-Life: Alyx (VR)
Voor standaard setters?jacobras schreef op donderdag 6 september 2018 @ 15:09:
Method chaining is niks mis mee, toch? Handig bij builder classes.
The ships hung in the sky in much the same way that bricks don’t.
Ik ben überhaupt niet zo'n fan van 'standaard setters'. Op een pure DTO of iets dergelijks kan het nog wel, maar meestal zijn classes maar losse fields met setters een teken van tight coupling / matige encapsulation.
Method chaining kan best handig zijn. Zoals gezegd is een builder pattern een prima voorbeeld. Als je een object aanmaakt met een lege constructoraanroep en er vervolgens 10 setters op aanroept, dan is method chaining ook wat leesbaarder. Al is dat vooral een antipattern omdat je dan beter een builder kunt gebruiken of eens kunt kijken of je object misschien niet wat verplichte state initialisation moet hebben via een constructor.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Maar dan heb je wel het probleem dat het niet aan de bean spec voldoet. Niet elk framework kan er goed mee omgaan.
Als het immutable objecten waren, dan is het wel weer te begrijpen (maar die returnen geen 'this'
Wat mij betreft zou hier iets voor gevonden moeten worden.
let the past be the past.
Als het immutable objecten waren, dan had je überhaupt geen setters gehad natuurlijk.SPee schreef op donderdag 6 september 2018 @ 19:17:
Ik snap het wel. Als je een object aanmaakt en een aantal velden zet, dan is dat in Java al een hele blok code. D.m.v. die return kan die code een stuk korter.
Maar dan heb je wel het probleem dat het niet aan de bean spec voldoet. Niet elk framework kan er goed mee omgaan.
Als het immutable objecten waren, dan is het wel weer te begrijpen (maar die returnen geen 'this')
Wat mij betreft zou hier iets voor gevonden moeten worden.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Nu moet ik heel eerder zeggen dat ik dit ook met enige regelmaat moeilijk te vermijden vindt.Standeman schreef op donderdag 6 september 2018 @ 15:01:
En uiteraard veel methoden / class namen zoals "AbstractedDitIsEenObjectDatZoEnZoDoetMaarTochStiekemWatAndersServiceImplementation". Een gezonde mix van NL en EN.
Aan de ene kant is het 'correcter' om alles in je code in het Engels te houden omdat de syntax zelf in het Engels is, maar om voor al je modellen, objecten, variabelen etc perse Engelse termen te gaan gebruiken slaat af en toe ook nergens op.
Dat is bij mijn huidige klant ook de stelregel rondom naamgeving. Domein termen NL-talig houden en niet (vaak krampachtig) naar EN vertalen. Het maakt communicatie ook makkelijker als iedereen hetzelfde beestje bij dezelfde naam noemt. Ja, het lijkt wat knullig, maar soit._NooT_ schreef op vrijdag 7 september 2018 @ 13:23:
[...]
Nu moet ik heel eerder zeggen dat ik dit ook met enige regelmaat moeilijk te vermijden vindt.
Aan de ene kant is het 'correcter' om alles in je code in het Engels te houden omdat de syntax zelf in het Engels is, maar om voor al je modellen, objecten, variabelen etc perse Engelse termen te gaan gebruiken slaat af en toe ook nergens op.

Termen als bsn, huurtoeslag, tussenvoegsel, franchise en erfdienstbaarheid vertalen omdat Engels cool is

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
En toen besloot je 5 jaar verder om de maintenance te outsourcen, of je komt erachter dat software engineers schaars zijn en dat nog een disclaimer dat ze NL moeten zijn je extra kost in NLkenneth schreef op vrijdag 7 september 2018 @ 14:05:
Ubiquitous language
Termen als bsn, huurtoeslag, tussenvoegsel, franchise en erfdienstbaarheid vertalen omdat Engels cool is


"The purpose of computing is insight, not numbers." -- Richard Hamming
Mja, "maintenance outsourcen" bij een systeem met een complex domein wordt sowieso lastig. Dan moeten complexe business requirements weer door iemand vertaalt worden, waarbij waarschijnlijk heel wat nuances verloren gaan, de vertaalde terminologie niet strookt met de in de code gehanteerde vertalingen en ga zo maar door.Flapmo schreef op vrijdag 7 september 2018 @ 20:10:
[...]
En toen besloot je 5 jaar verder om de maintenance te outsourcen, of je komt erachter dat software engineers schaars zijn en dat nog een disclaimer dat ze NL moeten zijn je extra kost in NL![]()
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Dat valt wel mee. Daar zijn bedrijven als capgemini, Accenture, etc. volledig voor opgezet. Het is minder dan de ervaring die je in je teams hebt maar je outsourced niet omdat het zo'n kritiek stuk van je systeem is. Maintenance zou sowieso niet veel nieuwe requirements (change requests) moeten hebben maar de focus op bug fixes.Mugwump schreef op vrijdag 7 september 2018 @ 20:14:
[...]
Mja, "maintenance outsourcen" bij een systeem met een complex domein wordt sowieso lastig. Dan moeten complexe business requirements weer door iemand vertaalt worden, waarbij waarschijnlijk heel wat nuances verloren gaan, de vertaalde terminologie niet strookt met de in de code gehanteerde vertalingen en ga zo maar door.
[ Voor 7% gewijzigd door Flapmo op 07-09-2018 20:22 ]
"The purpose of computing is insight, not numbers." -- Richard Hamming
Oh en ik zie dagelijks waar dergelijke outsourcing toe leidt. Heel vrolijk word je er niet van en ik kan me ook niet voorstellen dat het gezien de overhead kosteneffectiever is.Flapmo schreef op vrijdag 7 september 2018 @ 20:16:
[...]
Dat valt wel mee. Daar zijn bedrijven als capgemini, Accenture, etc. volledig voor opgezet. Het is minder dan de ervaring die je in je teams hebt maar je outsourced niet omdat het zo'n kritiek stuk van je systeem is.
Hooguit zul je inderdaad problemen hebben capaciteit in Nederland te vinden.
Maar de vraag is ook of een systeem met wat Domeintermen in het Nederlands het systeem uberhaupt ononderhoudbaar zou maken voor mensen die de taal verder niet spreken. Kan een Indiër wel omgaan met de afkorting SSN, maar niet met de afkorting BSN? Omvat het tweede eigenlijk niet veel meer dan het eerste? Snappen developers in India beter wat easement is dan erfdienstbaarheid?
Goed, ik ben ook meer van de school die vindt dat een paar capabele developers beter in staat zijn om een systeem uit de grond te stampen en te onderhouden dan een dozijn matige developers met overhead voor een vertaalslag.
Overigens ook volkomen offtopic hier, afgezien van het feit dat domeinterminologie in een eigen taal houden in code niet ongebruikelijk of ongewenst is.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Een hele snelle opzoeking op internet geeft:kenneth schreef op vrijdag 7 september 2018 @ 14:05:
Ubiquitous language
Termen als bsn, huurtoeslag, tussenvoegsel, franchise en erfdienstbaarheid vertalen omdat Engels cool is
bsn; citizenServiceNumber or citizenIdentifier
huurtoeslag; rentAllowance
tussenvoegsel; prefix or surnamePrefix
erfdienstbaarheid; easement
franchise, ligt eraan wat je bedoelt, want dat kan gewoon een Engels woord zijn als het om ondernemen gaat. Bij een verzekering spreken ze in het Engels over excess wat ik zo snel op Google kan vinden.
Zelf programmeer ik ook in het Engels. Ik vind Nederlands in code niet netjes. En als ik niet de exacte vertaling weet zoek ik de Nederlandse Wikipedia pagina erbij en ga ik vandaar uit naar de Engelse pagina.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
En dan ziet een steenkolen-Engels-programmeur een tabel met allowance=3*easement-5*deduction en dan moet hij alle woorden weer terugvertalen voordat hij snapt wat hier in hemelsnaam gebeurt, omdat hij van al die woorden nog nooit gehoord heeft, en het lijkt ook in de verste verte niet wat er in de requirements staat.kluyze schreef op vrijdag 7 september 2018 @ 21:52:
bsn; citizenServiceNumber or citizenIdentifier
huurtoeslag; rentAllowance
tussenvoegsel; prefix or surnamePrefix
erfdienstbaarheid; easement
Los van de ubiquitous language is zelfs een goede vertaling zelden 100% accuraat (verschillende talen mappen niet een op een dezelfde begrippen naar elkaar - zeker niet met domeinspecifieke begrippen die slechts in één land gebruikt worden), en ben je dus alleen maar Babylonische spraakverwarring aan het creeëren. Heb je ooit een term door een vertaalmachine gehaald en dan weer terug? Dat verminkt je oorspronkelijke woord vaak. Ik keek laatst op een Franse site met een Engelse vertaling (c.q. door google translate gehaald), daar snapte ik minder van dan van de originele Franse tekst, en ik spreek geen Frans.
Gelukkig is er in mijn 'domein' niemand die het in zijn hoofd haalt om ooit een andere taal dan Engels te gebruiken, dus dat is makkelijk praten.
Heeft geen speciale krachten en is daar erg boos over.
Mijn punt was dat veel dingen net wel vertaald kunnen worden. Om nog even op dit voorbeeld te blijven:kenneth schreef op vrijdag 7 september 2018 @ 22:13:
Natuurlijk kún je het vertalen, dat is het punt niet. Huurtoeslag is een compleet concept met een specifieke betekenis, niet alleen een woordje. Daarom zeg ik: ubiquitous language. Niet zelf dingen gaan verzinnen om het maar in het Engels te kunnen doen. Ja, alles in het Engels ziet er strakker uit maar dat is geen doel op zich.
Huurtoeslag:
Rent Allowance:Huurtoeslag is een bijdrage in de huurkosten van uw woning.
Conceptueel is dat toch zo goed als hetzelfde. En dus ook niet verzonnen. En zo zijn veel vertalingen dus gewoon wel mogelijk en is er dus niet vaak een echte noodzaak om in het Nederlands te zetten. Je moet inderdaad geen letterlijke vertaling gebruiken.money given to individuals by the government that subsidises the cost of renting a property
Dan ben ik nog eerder voorstander om in commentaar een vertaling terug naar bv. het Nederlands er bij te zetten met een stukje uitleg.
Zo krijg je straks een stukje software dat voor verschillende landen met hun eigen taal iets kan berekenen, en elke berekening staat dan in zijn eigen taal.
En dan spreek ik nog niet over de talen waar vaker leestekens gebruikt worden, waarbij wel of geen leesteken een andere betekenis geeft.
Zoals ik al aangaf gebruik ik vaak het trukje om te kijken welke Wikipedia pagina's aan elkaar gelinkt zijn in verschillende talen. Dat geeft vaak een betere vertaling als een vertaalmachine. Al is google translate er de laatste tijd ook hard op verbeterd.bwerg schreef op vrijdag 7 september 2018 @ 22:55:
[...]
Los van de ubiquitous language is zelfs een goede vertaling zelden 100% accuraat (verschillende talen mappen niet een op een dezelfde begrippen naar elkaar - zeker niet met domeinspecifieke begrippen die slechts in één land gebruikt worden), en ben je dus alleen maar Babylonische spraakverwarring aan het creeëren. Heb je ooit een term door een vertaalmachine gehaald en dan weer terug? Dat verminkt je oorspronkelijke woord vaak. Ik keek laatst op een Franse site met een Engelse vertaling (c.q. door google translate gehaald), daar snapte ik minder van dan van de originele Franse tekst, en ik spreek geen Frans.
Achja, dat is gewoon mijn mening, daar moet natuurlijk niet iedereen mee akkoord gaan.
[ Voor 23% gewijzigd door kluyze op 07-09-2018 23:45 ]
Elke berekening is dan toch in het Engels, in plaats van in zijn eigen taal?kluyze schreef op vrijdag 7 september 2018 @ 23:41:
Zo krijg je straks een stukje software dat voor verschillende landen met hun eigen taal iets kan berekenen, en elke berekening staat dan in zijn eigen taal.
Berekeningen of variabelen voor meerdere landen hergebruiken lijkt me behoorlijk optimistisch vanwege de grote verschillen (in ieder geval in het geval van persoonlijke toeslagen en belastingen). Ook daar: elk land heeft zijn eigen concepten en factoren die niet één-op-één overeenkomen, dus je krijgt Engelse namen voor Nederlandse factoren die in Duitsland helemaal niet bestaan, of er half mee overlappen. Als je Nederlandse klant je vraagt om een huurtoeslagberekening toe te voegen, en een Duitse klant vraagt om Mietzuschussberechnung, dan lijkt het me nogal riskant om die in de software gewoon op één hoop te gooien omdat dat toch ongeveer hetzelfde is volgens wikipedia. In ieder geval kan daar beter een financieel expert over oordelen dan een programmeur die de code daardoor mooier vindt.
Maar goed, ik heb ook geen ervaring met administratieve software. Maar ik heb wel jarenlang geklaag aangehoord over de complexiteit van administratieve software aan de keukentafel.
[ Voor 43% gewijzigd door bwerg op 08-09-2018 00:09 ]
Heeft geen speciale krachten en is daar erg boos over.

You don't have to be crazy to do this job, but it helps ....
Tja je kan een oproepkracht ook in het engels een CallGirl noemen. En ja dat is gebeurd in een groot (internationaal) salarispakket. En ja de foutmelding 'CallGirl not supplied' kwam tevoren bij klanten....kenneth schreef op vrijdag 7 september 2018 @ 14:05:
Ubiquitous language
Termen als bsn, huurtoeslag, tussenvoegsel, franchise en erfdienstbaarheid vertalen omdat Engels cool is
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
En wat wil je daar aan doen?Mugwump schreef op zaterdag 8 september 2018 @ 00:26:
Ik heb het idee dat veel Nederlanders in het algemeen en Nederlandse IT'ers in het bijzonder het belang van een specifieke taal en de nuances die in een taal zitten onderschatten.
Carrousel (NL), Carousel (EN-US), Roundabout (EN-GB) of Merry-go-round?
Until (EN-US) of Untill (EN-GB)
Canceled (EN-US) of Cancelled (EN-GB)
etc. krijg je met smartypants straks de discussie dat Engels incorrect is en weer een nieuwe standaards document dat vertelt dat iedereen EN-US moet gebruiken omdat dat meer mensen zijn dan EN-GB bijvoorbeeld

Maak je niet druk, dat doet de compressor maar
Het gaat niet om spellingsverschillen. Het gaat om verschil in betekenis. Zeker als je bijvoorbeeld in een juridisch domein opereert is dat zeer relevant. Concepten uit het Nederlandse recht zijn niet altijd één op één te vertalen naar het Amerikaans of Brits recht om maar eens wat te noemen.DJMaze schreef op zaterdag 8 september 2018 @ 00:43:
[...]
En wat wil je daar aan doen?
Carrousel (NL), Carousel (EN-US), Roundabout (EN-GB) of Merry-go-round?
Until (EN-US) of Untill (EN-GB)
Canceled (EN-US) of Cancelled (EN-GB)
etc. krijg je met smartypants straks de discussie dat Engels incorrect is en weer een nieuwe standaards document dat vertelt dat iedereen EN-US moet gebruiken omdat dat meer mensen zijn dan EN-GB bijvoorbeeld![]()
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
[ Voor 93% gewijzigd door Verwijderd1 op 18-10-2021 19:07 ]
1
2
| string t = Convert.ToString(DateTime.UtcNow); DateTime d2 = DateTime.ParseExact(t, "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture); |

Gewoon compleet geen enkel idee wat je eigenlijk aan het doen bent...
En? Context is alles. Is dit van een developer met jaren ervaring dan mag je erom lachen (of huilen). Is het van iemand die net begonnen is om zichzelf te leren programmeren dan hoef ik daar echt niet om te lachen.sig69 schreef op zaterdag 8 september 2018 @ 02:20:
Ik kom niet veel meer op stackoverflow want het niveau is echt om te huilen, maar soms verveel ik me en ga ik toch kijken of ik iemand kan helpen. Ik weet dat het niet de bedoeling is maar dit is echt een pareltje: iemand wil z'n datum in een bepaald formaat hebben blijkbaar:
code:
1 2 string t = Convert.ToString(DateTime.UtcNow); DateTime d2 = DateTime.ParseExact(t, "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture);
![]()
Gewoon compleet geen enkel idee wat je eigenlijk aan het doen bent...
Niet om jou, maar dit is wel een reden voor veel mensen om geen vragen te plaatsen. Programmeren is best moeilijk en veel mensen hebben geen zin om zich dom te voelen omdat iemand hun vraag belachelijk maakt.sig69 schreef op zaterdag 8 september 2018 @ 02:20:
Ik kom niet veel meer op stackoverflow want het niveau is echt om te huilen, maar soms verveel ik me en ga ik toch kijken of ik iemand kan helpen. Ik weet dat het niet de bedoeling is maar dit is echt een pareltje: iemand wil z'n datum in een bepaald formaat hebben blijkbaar:
code:
1 2 string t = Convert.ToString(DateTime.UtcNow); DateTime d2 = DateTime.ParseExact(t, "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture);
![]()
Gewoon compleet geen enkel idee wat je eigenlijk aan het doen bent...
Less alienation, more cooperation.
Label7 is hier het vraagnummer, elke keer als de timer afliep keek hij naar het vraagnummer en bepaalde zo welke text getoond moest worden. Onderstaande gaat nog zo'n 800 regels verder
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| If Label7.Caption = 1 Then GoTo 10 Else GoTo 20 10 Label1.Caption = Form6.Text1.Text Label2.Caption = Form6.Text21.Text Label3.Caption = Form6.Text61.Text Label6.Caption = Form6.Text41.Text GoTo 9999 20 If Label7.Caption = 2 Then GoTo 30 Else GoTo 40 30 Label1.Caption = Form6.Text2.Text Label2.Caption = Form6.Text22.Text Label3.Caption = Form6.Text62.Text Label6.Caption = Form6.Text42.Text GoTo 9999 40 If Label7.Caption = 3 Then GoTo 50 Else GoTo 60 50 Label1.Caption = Form6.Text3.Text Label2.Caption = Form6.Text23.Text Label3.Caption = Form6.Text63.Text Label6.Caption = Form6.Text43.Text GoTo 9999 60 If Label7.Caption = 4 Then GoTo 70 Else GoTo 80 70 Label1.Caption = Form6.Text4.Text Label2.Caption = Form6.Text24.Text Label3.Caption = Form6.Text64.Text Label6.Caption = Form6.Text44.Text GoTo 9999 80 If Label7.Caption = 5 Then GoTo 90 Else GoTo 100 90 Label1.Caption = Form6.Text5.Text Label2.Caption = Form6.Text25.Text Label3.Caption = Form6.Text65.Text Label6.Caption = Form6.Text45.Text GoTo 9999 100 If Label7.Caption = 6 Then GoTo 110 Else GoTo 120 110 Label1.Caption = Form6.Text6.Text Label2.Caption = Form6.Text26.Text Label3.Caption = Form6.Text66.Text Label6.Caption = Form6.Text46.Text |
Ontwikkelaar van de Drammer whisky app voor Android en iOS / arduino-lessen.nl / blender-lessen.nl
Als ik zie wat er op SO wordt geplaatst aan vragen dan lijkt het er niet op alsof het veel mensen weerhoudt van het stellen van dit soort vragen. Wel mag je in mijn ogen enige moeite verwachten van iemand die een vraag stelt. Er zit nogal eens een vraag tussen van de vorm: "Hoi ik heb een opdracht, maar ik heb geen idee wat ik moet doen. Lever mij kant en klare code aan zodat ik die kan knippen en plakken zodat het werkt". Dat soort topic gaan hier ook niet voor niets dicht.Sandor_Clegane schreef op zaterdag 8 september 2018 @ 10:58:
[...]
Niet om jou, maar dit is wel een reden voor veel mensen om geen vragen te plaatsen. Programmeren is best moeilijk en veel mensen hebben geen zin om zich dom te voelen omdat iemand hun vraag belachelijk maakt.
Wat mij weghoudt van SO zijn vooral de mensen die je antwoorden gaan lopen afzeiken / downvoten op één of ander irrelevant detail of obscuur regeltje. Ik wil met alle liefde wat minder ervaren mensen op weg helpen (of kennis delen op het vlak van wat meer obscure / slecht gedocumenteerde zaken), maar als je een uitgebreid antwoord geeft met een aantal voorbeelden en pros / cons en vervolgens krijg je kritiek / downvotes omdat er ergens in die codevoorbeelden een camelcase variabele een hoofdletter mist, dan denk je vrij snel: "Stik er maar lekker in". Ik begreep dat ze pakweg een half jaar geleden wel hebben gezegd dat ze de boel minder vijandig willen maken. Geen idee of ze dat gelukt is.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Geen idee. Als het een ervaren developer is het om te huilen natuurlijk. In het andere geval: pak eerst eens een boek ofzo.downtime schreef op zaterdag 8 september 2018 @ 10:23:
[...]
En? Context is alles. Is dit van een developer met jaren ervaring dan mag je erom lachen (of huilen). Is het van iemand die net begonnen is om zichzelf te leren programmeren dan hoef ik daar echt niet om te lachen.
Nee hoor op SO voelt niemand zich dom. Alles wordt daar gedumpt. Daarom kom ik er eigenlijk ook nooit meer. En programmeren is best lastig ja als je je er niet in verdiept en gewoon maar wat doet.Sandor_Clegane schreef op zaterdag 8 september 2018 @ 10:58:
[...]
Niet om jou, maar dit is wel een reden voor veel mensen om geen vragen te plaatsen. Programmeren is best moeilijk en veel mensen hebben geen zin om zich dom te voelen omdat iemand hun vraag belachelijk maakt.
[ Voor 36% gewijzigd door sig69 op 08-09-2018 13:40 ]
Hij vond het kennelijk handig om alle parameters in een SQL stored procedure te vervangen voor een custom data type, en dat als table aan te leverenn om vervolgens altijd maar 1 row erin te stoppen...
Zijn argument hiervoor was dat anders de stored procedure teveel argumenten krijgt...
Was dus echt een gevalletje van zelf een probleem maken wat eigenlijk niet bestaat, en vervolgens een workaround implementeren die een flinke overhead heeft.
Dus kwam beetje op het volgende neer;
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
| CREATE PROCEDURE spInsertModel @DATA CUSTOMDATATYPE READONLY BEGIN INSERT INTO [dbo].[SomeTable] ( a, b ) SELECT a , b FROM @Data END |
En het C# gedeelte, in combinatie met Dapper.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| public void Add(SomeModel model) { using (var connection = Connection) { connection.Execute("spInsertModel ", new { Data = CreateConfigTable(model) }, commandType: CommandType.StoredProcedure); } } private IDbConnection Connection { get { return new SqlConnection("connectionstring"); } } public DataTable CreateConfigTable(SomeModel model) { var dataTable = new DataTable(); dataTable.Columns.Add(new DataColumn("A", typeof(string))); dataTable.Columns.Add(new DataColumn("B", typeof(int))); var row = dataTable.NewRow(); row["A"] = model.A; row["B"] = model.B; dataTable.Rows.Add(row); return dataTable; } public class SomeModel { public string A { get; set; } public int B { get; set; } } |
Leuke is dat Dapper van de datatable een temp table maakt in SQL, vervolgens die ene regel erin insert, om vervolgens als argument mee te geven aan de stored procedure. Vervolgen moet de data weer uit die tabel gehaald worden voor de daadwerkelijke insert.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Nee niet eens, developer met +- 5 jaar ervaring.Mugwump schreef op zaterdag 8 september 2018 @ 15:13:
Is dat toevallig een collega uit de BI-hoek? Ik had er namelijk één die exact hetzelfde deed, alleen dan zonder ORM.

Mugwump schreef op vrijdag 7 september 2018 @ 20:33:
[...]
Oh en ik zie dagelijks waar dergelijke outsourcing toe leidt. Heel vrolijk word je er niet van en ik kan me ook niet voorstellen dat het gezien de overhead kosteneffectiever is.
Hooguit zul je inderdaad problemen hebben capaciteit in Nederland te vinden.
Maar de vraag is ook of een systeem met wat Domeintermen in het Nederlands het systeem uberhaupt ononderhoudbaar zou maken voor mensen die de taal verder niet spreken. Kan een Indiër wel omgaan met de afkorting SSN, maar niet met de afkorting BSN? Omvat het tweede eigenlijk niet veel meer dan het eerste? Snappen developers in India beter wat easement is dan erfdienstbaarheid?
Goed, ik ben ook meer van de school die vindt dat een paar capabele developers beter in staat zijn om een systeem uit de grond te stampen en te onderhouden dan een dozijn matige developers met overhead voor een vertaalslag.
Overigens ook volkomen offtopic hier, afgezien van het feit dat domeinterminologie in een eigen taal houden in code niet ongebruikelijk of ongewenst is.
Het is nog steeds kosteneffectief om te outsourcen, hoewel de engineers in meeste westerse landen graag geloven dat dat het niet is. Stukje trots en "not invented here syndrome" wat deels gezond is. Het is echter niet voor niets dat alle multinationals een office in India/China hebben. Ook ik heb er dagelijks mee te maken. Een goede architectuur opzetten voor een project waar veel onduidelijk is is niet iets waar je ze graag voor inzet. Maintenance van een project waar je nog 25 jaar support moet geven maar niet je kostbare FTE'S uit Nederland/US voor wilt inzetten wel. Hoewel we graag geloofden dat ze er een zooitje van zouden maken draaien onze projecten eigenlijk prima op resources van capgemini India en Accenture. Klant blij, resources vrij, resources blij (want niet meer werken aan oude troep).
Wat betreft de taal, hypothetisch: je wordt ingehuurd om te werken aan de software waarover je praat:
- je komt er achter dat die deels geschreven is in het Pools/Spaans/you name it
- je komt er achter dat alles in het Engels is
Welke optie heb je liever? Ik denk dat elke taal nagenoeg dezelfde concepten kent en dat er altijd een prima vertaling te vinden is die de lading dekt, of in ieder geval lijkt aan wat het concept zou moeten betekenen. Een scan van de class en documentatie zou dan alle onduidelijkheid kunnen verhelpen.
Oude code teruglezen is gaafbasvdijk1647 schreef op zaterdag 8 september 2018 @ 12:02:
Een van mijn allereerste programma's in Visual Basic 4. Het programma stelde vragen, van variabelen had ik nog nooit gehoord, laat staan loops, dus gooide ik alles in een form element wat ik verborg. De loop simuleerde ik door gewoon 100en GoTo statements te gebruiken![]()
Label7 is hier het vraagnummer, elke keer als de timer afliep keek hij naar het vraagnummer en bepaalde zo welke text getoond moest worden. Onderstaande gaat nog zo'n 800 regels verder![]()
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 If Label7.Caption = 1 Then GoTo 10 Else GoTo 20 10 Label1.Caption = Form6.Text1.Text Label2.Caption = Form6.Text21.Text Label3.Caption = Form6.Text61.Text Label6.Caption = Form6.Text41.Text GoTo 9999 20 If Label7.Caption = 2 Then GoTo 30 Else GoTo 40 30 Label1.Caption = Form6.Text2.Text Label2.Caption = Form6.Text22.Text Label3.Caption = Form6.Text62.Text Label6.Caption = Form6.Text42.Text GoTo 9999 40 If Label7.Caption = 3 Then GoTo 50 Else GoTo 60 50 Label1.Caption = Form6.Text3.Text Label2.Caption = Form6.Text23.Text Label3.Caption = Form6.Text63.Text Label6.Caption = Form6.Text43.Text GoTo 9999 60 If Label7.Caption = 4 Then GoTo 70 Else GoTo 80 70 Label1.Caption = Form6.Text4.Text Label2.Caption = Form6.Text24.Text Label3.Caption = Form6.Text64.Text Label6.Caption = Form6.Text44.Text GoTo 9999 80 If Label7.Caption = 5 Then GoTo 90 Else GoTo 100 90 Label1.Caption = Form6.Text5.Text Label2.Caption = Form6.Text25.Text Label3.Caption = Form6.Text65.Text Label6.Caption = Form6.Text45.Text GoTo 9999 100 If Label7.Caption = 6 Then GoTo 110 Else GoTo 120 110 Label1.Caption = Form6.Text6.Text Label2.Caption = Form6.Text26.Text Label3.Caption = Form6.Text66.Text Label6.Caption = Form6.Text46.Text

1
2
3
4
5
6
7
| BufferedReader br = new BufferedReader( new FileReader (file)); String line = null; String lines = ""; while( ( line = br.readLine() ) != null ) { lines = lines + line; } |
Op een plek waar files van >>10mb geparsed worden
[ Voor 5% gewijzigd door Flapmo op 09-09-2018 10:52 ]
"The purpose of computing is insight, not numbers." -- Richard Hamming
1
2
3
4
5
6
7
8
9
10
11
12
| struct tm { int tm_sec; // seconds after the minute - [0, 60] including leap second int tm_min; // minutes after the hour - [0, 59] int tm_hour; // hours since midnight - [0, 23] int tm_mday; // day of the month - [1, 31] int tm_mon; // months since January - [0, 11] int tm_year; // years since 1900 int tm_wday; // days since Sunday - [0, 6] int tm_yday; // days since January 1 - [0, 365] int tm_isdst; // daylight savings time flag }; |
Dag van de maand vanaf 1, maar maand van het jaar vanaf 0.
Jaar vanaf 1900, ondanks dat het toch gewoon in een int opgeslagen word en er dus meer dan plek genoeg is om het volledige jaartal voor te stellen. (Tenzij er ooit compilers geweest zijn waar een int slechts 8 bits groot was, maar dan zou tm_yday ook niet gepast hebben)
Omdat maanden geen nummers hebben maar namen; dagen hebben wel nummers en die beginnen niet bij 0.Adion schreef op zondag 9 september 2018 @ 09:55:
Dag van de maand vanaf 1, maar maand van het jaar vanaf 0.
In eerste instantie lijkt het gek (zeker als je patronen wilt hebben en dat willen we allemaal graag), maar als je er over nadenkt is het niet heel onlogisch.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Datum en tijd zijn gewoon irritant
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Het commentaar is gelukkig wel goed. Months since januari. Dus januari is 0. Iedereen gaat de mist in op de API maar het is wel correct volgens eigen APIkenneth schreef op zondag 9 september 2018 @ 10:34:
Je hebt op zich gelijk maar maanden hebben namen én nummers. Waar de nummers nog universeel zijn binnen de gregoriaanse kalender en namen per taal verschillen.
+1. Zeker als je nog met pannenkoeken moet werken die timestamps durven op te slaan in iets anders dan UTC. Leuk man services die in lokale tijdzone opslaan. Eerst een query in welke tijdzone de service nu weer draait. Dan naar UTC en dan correleren..Datum en tijd zijn gewoon irritant
[ Voor 29% gewijzigd door Flapmo op 09-09-2018 11:01 ]
"The purpose of computing is insight, not numbers." -- Richard Hamming
Maar de set van jaartallen is niet de volledig set van integers, om het simpele feit dat het jaar 0 niet bestaat. Dus dan moet je ofwel 1 BCE representeren met het getal 0, wat niet intuïtief is, ofwel met -1, wat weer complicaties geeft met rekenen. Het is dan handiger om gewoon een ijkpunt te definiëren (wat de eerste mogelijkheid ook effectief doet, alleen dan vanaf 1 BCE ipv 1900 CE). Voor weergave zul je sowieso iets speciaals moeten doen, want een jaar als -3 bestaat niet.Adion schreef op zondag 9 september 2018 @ 09:55:
Jaar vanaf 1900, ondanks dat het toch gewoon in een int opgeslagen word en er dus meer dan plek genoeg is om het volledige jaartal voor te stellen. (Tenzij er ooit compilers geweest zijn waar een int slechts 8 bits groot was, maar dan zou tm_yday ook niet gepast hebben)
[ Voor 3% gewijzigd door .oisyn op 09-09-2018 13:07 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.
Kater? Eerst water, de rest komt later
Maanden hebben wel nummers, veel maanden zijn ook immers vernoemt naar hun oorspronkelijke positie/nummer:farlane schreef op zondag 9 september 2018 @ 10:19:
[...]
Omdat maanden geen nummers hebben maar namen; dagen hebben wel nummers en die beginnen niet bij 0.
In eerste instantie lijkt het gek (zeker als je patronen wilt hebben en dat willen we allemaal graag), maar als je er over nadenkt is het niet heel onlogisch.
October was de 8e maand,. September was de 7e maand, November was de 9e maand een December was de 10e maand.
Nooit bij stilgestaan. Niemand hier heeft ook een idee waarom het zo is, ms-sql database van 15 jaar oud.Haan schreef op woensdag 12 september 2018 @ 13:46:
Je kunt het toch specifiek per column zetten (in MSSQL tenminste) https://docs.microsoft.co...tion?view=sql-server-2017
Heel die datumdiscussie doet me wat terugdenken aan de Tom Scott video
'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind.' - Pratchett.
Database aangemaakt op andere server (versie) met andere colation settings en andere tabellen laten aangemaakt? Dat is iig mijn ervaring ermee (anders dan dat mensen een kolom aanmaken met een specifieke collotion die afwijkt).boe2 schreef op woensdag 12 september 2018 @ 14:03:
Nooit bij stilgestaan. Niemand hier heeft ook een idee waarom het zo is, ms-sql database van 15 jaar oud.
Exact expert nodig?
Case in point ....ThomasG schreef op woensdag 12 september 2018 @ 13:55:
[...]
Maanden hebben wel nummers, veel maanden zijn ook immers vernoemt naar hun oorspronkelijke positie/nummer:
October was de 8e maand,. September was de 7e maand, November was de 9e maand een December was de 10e maand.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Nou nee, gewoon een historische anekdote, niets meer. De maand oktober heeft het nummer 10, dat kan elke westerling je vertellen.
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Net zoals woensdag ook een nummer heeft, nl 3. Of nee wacht....kenneth schreef op woensdag 12 september 2018 @ 21:35:
[...]
Nou nee, gewoon een historische anekdote, niets meer. De maand oktober heeft het nummer 10, dat kan elke westerling je vertellen.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Dat maanden dus wel een nummer hebben, en dat vroeger ook zo gebruikt werd. October betekent letterijk namelijk: 8e maand, omdat het vroeger ook de 8e maand was. Dat october nu de 10e maand is, is iets anders.
[ Voor 7% gewijzigd door ThomasG op 12-09-2018 22:01 ]
Wil je nu zeggen dat je nog nooit iets als "29-10-2013" hebt gezien?farlane schreef op woensdag 12 september 2018 @ 21:39:
[...]
Net zoals woensdag ook een nummer heeft, nl 3. Of nee wacht....
Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.
Nee dat wil ik niet zeggen. Wat ik wil zeggen dat aan het toekennen van nummers aan iets wat eigenlijk een enumeratie is implementatie defined is.kenneth schreef op woensdag 12 september 2018 @ 22:54:
[...]
Wil je nu zeggen dat je nog nooit iets als "29-10-2013" hebt gezien?
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
In Javascript niet anders:Adion schreef op zondag 9 september 2018 @ 09:55:
Ik werd een paar dagen geleden weer herinnerd aan deze:
C:
1 2 3 4 5 6 7 8 9 10 11 12 struct tm { int tm_sec; // seconds after the minute - [0, 60] including leap second int tm_min; // minutes after the hour - [0, 59] int tm_hour; // hours since midnight - [0, 23] int tm_mday; // day of the month - [1, 31] int tm_mon; // months since January - [0, 11] int tm_year; // years since 1900 int tm_wday; // days since Sunday - [0, 6] int tm_yday; // days since January 1 - [0, 365] int tm_isdst; // daylight savings time flag };
Dag van de maand vanaf 1, maar maand van het jaar vanaf 0.
Jaar vanaf 1900, ondanks dat het toch gewoon in een int opgeslagen word en er dus meer dan plek genoeg is om het volledige jaartal voor te stellen. (Tenzij er ooit compilers geweest zijn waar een int slechts 8 bits groot was, maar dan zou tm_yday ook niet gepast hebben)
1
2
3
4
| var moonLanding = new Date('July 20, 69 00:20:18'); console.log(moonLanding.getMonth()); // (January gives 0) // expected output: 6 |
Ik denk dat je ernaast zit. Deze zaken zijn gewoon wereldwijd hetzelfde geregeld en daardoor een de-facto standaard. Jij noemt toevallig de uitzondering die de regel bevestigt. Wat je als de eerste dag van de week ziet is inderdaad niet overal hetzelfde. Weeknummers zijn een andere uitzondering.farlane schreef op woensdag 12 september 2018 @ 23:07:
[...]
Nee dat wil ik niet zeggen. Wat ik wil zeggen dat aan het toekennen van nummers aan iets wat eigenlijk een enumeratie is implementatie defined is.
1
2
| bool empty() { ... } bool isEmpty() { return ! empty(); } |
En natuurlijk de vele calls als:
1
2
3
| ... myFunction(new ObjectName); ... |
Uiteraard was niemand verantwoordelijk voor het opruimen van de rommel. Applicatie liep dus binnen afzienbare tijd uit het geheugen. In Java werkt dat, inderdaad...
Als die functie nou isNotEmpty() in plaats van isEmpty() had geheten was het prima geweestParody schreef op donderdag 13 september 2018 @ 07:40:
Nog een mooie, ooit in een VC++ 6.0 project gezien waar ze zonder enige bijscholing Java-programmeurs op gezet hebben:
code:.
1 2 bool empty() { ... } bool isEmpty() { return ! empty(); }
Ik heb er echt 3 keer overheen moeten lezen wat er nou precies fout aan was
Misschien maakt empty wel de lijst leeg, en geeft true terug als de lijst geleegd is, en false als de lijst leeg was. Dan heeft return !empty(); true terug als de lijst al leeg washellfighter87 schreef op donderdag 13 september 2018 @ 08:59:
[...]
Als die functie nou isNotEmpty() in plaats van isEmpty() had geheten was het prima geweest
Ik heb er echt 3 keer overheen moeten lezen wat er nou precies fout aan was
Dat eerste ziet er ook niet uit als iets dat je in Java doet.Parody schreef op donderdag 13 september 2018 @ 07:40:
Nog een mooie, ooit in een VC++ 6.0 project gezien waar ze zonder enige bijscholing Java-programmeurs op gezet hebben:
code:
1 2 bool empty() { ... } bool isEmpty() { return ! empty(); }
En natuurlijk de vele calls als:
code:
1 2 3 ... myFunction(new ObjectName); ...
Uiteraard was niemand verantwoordelijk voor het opruimen van de rommel. Applicatie liep dus binnen afzienbare tijd uit het geheugen. In Java werkt dat, inderdaad...
Voor dat tweede geldt inderdaad wel dat je even op de hoogte moet zijn van het feit dat je nu een object aanmaakt waarvoor je geen memory management kunt doen. Ik mag toch eigenlijk wel hopen dat iedereen met een HBO(+) IT opleiding wel in aanraking is gekomen met C(++) en weet dat je daarin grotendeels je eigen geheugenbeheer moet doen.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
ThomasG schreef op woensdag 12 september 2018 @ 13:55:
[...]
Maanden hebben wel nummers, veel maanden zijn ook immers vernoemt naar hun oorspronkelijke positie/nummer:
October was de 8e maand,. September was de 7e maand, November was de 9e maand een December was de 10e maand.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
...al zijn juli en augustus niet toegevoegd. Die maanden heetten oorspronkelijk quintilis (5) en sextilis (6), respectievelijk.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
while($true == true) {
if($conditions) {
$true = false;
}
$conditions = someFunction($conditions);
}
Tjolk is lekker. overal en altijd.
Inderdaad. Het gebruik van continue en break is eigenlijk smerig (het zijn gewoon veredelde goto statements), en zijn o.a. daarom in software voor een aantal sectoren (bijv: aviation, automotive, medisch, e.d.) niet toegestaan; anders krijg je de software niet gecertificeerd.Tjolk schreef op donderdag 13 september 2018 @ 14:10:
Het slechtste aan bovenstaande is het gebrek aan code tags en indentation.
Tja, is elke control structure uiteindelijk niet gewoon een veredelde GOTO statement?ThomasG schreef op donderdag 13 september 2018 @ 14:45:
[...]
Inderdaad. Het gebruik van continue en break is eigenlijk smerig (het zijn gewoon veredelde goto statements), en zijn o.a. daarom in software voor een aantal sectoren (bijv: aviation, automotive, medisch, e.d.) niet toegestaan; anders krijg je de software niet gecertificeerd.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
returnMugwump schreef op donderdag 13 september 2018 @ 16:13:
Ben ook wel benieuwd hoe je switch statements in bijvoorbeeld Java of C# gaat implementeren zonder break. Of moet je dan 23 elseifs gebruiken?
The best way to write secure and reliable applications. Write nothing; deploy nowhere.
1
2
3
4
5
6
7
| while x: foo() if y: continue doe() je() ding() |
versus
1
2
3
4
5
6
| while x: foo() if not y: doe() je() ding() |
Ik kan er niet wakker om liggen. Natuurlijk moet je de continues en breaks niet als pepernoten rondstrooien, maar dat geldt voor elke taalconstructie: ik heb ook pogingen gezien waarbij men één exit point wilde houden (want dat is toch zo belangrijk voor de leesbaarheid!) en er op bovenstaande manier een vier lagen diepe if-statement werd gebruikt. Één exit point en compleet onleesbaar, dus dan is diegene even vergeten waarom hij die vuistregel ook alweer toepast.
Door dat switch-statement in een losse functie te stoppen, zodat alle lokale variabelen allemaal als argumenten meegegeven moeten worden zonder duidelijke externe betekenis.
Dat is ook alweer zo'n vuistregel die soms verkeerd toegepast wordt: extracten van methodes uit te lange functies, want kleine functies zijn beter leesbaar! En dan 10 argumenten voor elke hulpfunctie omdat alle lokale variabelen nodig zijn (want de oorspronkelijke code was spagetti, of gewoon een heel lange en complexe berekening).
[ Voor 26% gewijzigd door bwerg op 13-09-2018 16:22 ]
Heeft geen speciale krachten en is daar erg boos over.
Niet helemaal, return gaat terug uit je methode, waarmee je dus veronderstelt dat er na je switch niets gebeurt.
Nou is het in mijn ogen ook wel een best practice om je methodes klein te houden in plaats van één grote procedurele brei, maar er zijn vast situaties waar je er niet echt aan ontkomt en helaas deelt 90% van de ontwikkelaars mijn opvatting niet.
Ik snap de gedachte hoor, maar de vraag is of je dan überhaupt niet beter kunt overschakelen naar pure functionele talen of CLP aangezien het vrijwel altijd side-effects zijn die het gedrag van software nondeterministisch maken.ThomasG schreef op donderdag 13 september 2018 @ 16:22:
Het probleem van goto, continue, break en in zekere zin ook meerdere return statements is dat je unconditional branching krijgt. En zeker bij critieke systemen wil je dat voorkomen, omdat het moeilijker wordt aan de branch coverage te voldoen, en een foutje er zo is ingeslopen (veel bugs, maar zeker niet alle, komen vooruit uit unconditional branching die over het hoofd wordt gezien). Daarom hebben ze het in bepaalde industrieën die met critieke systemen werken verbannen.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Dat is toch ook niet logisch? Als de branch coverage lijdt onder het gebruik van bijvoorbeeld een continue, dan is de test coverage sowieso niet op orde. Als ik een continue in een loop plaats, is dat om om te gaan met bepaalde (edge) cases in het datamodel. Er moet sowieso al getest worden met die edge cases, dus beide branches moeten bij het testen worden uitgevoerd.ThomasG schreef op donderdag 13 september 2018 @ 16:22:
Het probleem van goto, continue, break en in zekere zin ook meerdere return statements is dat je unconditional branching krijgt. En zeker bij critieke systemen wil je dat voorkomen, omdat het moeilijker wordt aan de branch coverage te voldoen, en een foutje er zo is ingeslopen (veel bugs, maar zeker niet alle, komen vooruit uit unconditional branching die over het hoofd wordt gezien). Daarom hebben ze het in bepaalde industrieën die met critieke systemen werken verbannen.
Algemener gezegd: code aanpassen om aan coverage-criteria te voldoen is meestal ook dubieus. Als je je coverage niet haalt, moet je je test cases aanpassen, niet je programma.dcm360 schreef op donderdag 13 september 2018 @ 16:35:
Als ik een continue in een loop plaats, is dat om om te gaan met bepaalde (edge) cases in het datamodel. Er moet sowieso al getest worden met die edge cases, dus beide branches moeten bij het testen worden uitgevoerd.
Heeft geen speciale krachten en is daar erg boos over.
Die mening deel ik ook wel, alleen soms heb je inderdaad van die core-functies die dan echt *alles* nodig hebben wat van te voren is bepaald, en dan kom je uit op een functie van 8+ parameters. Wordt je ook niet echt vrolijk van...Mugwump schreef op donderdag 13 september 2018 @ 16:33:
[...]
Niet helemaal, return gaat terug uit je methode, waarmee je dus veronderstelt dat er na je switch niets gebeurt.
Nou is het in mijn ogen ook wel een best practice om je methodes klein te houden in plaats van één grote procedurele brei, maar er zijn vast situaties waar je er niet echt aan ontkomt en helaas deelt 90% van de ontwikkelaars mijn opvatting niet.
Nee, voornamelijk Java, daarnaast C# en wat PHP en JavaScript (en Swift tijdens mijn minor). Overigens na mijn opleiding zelf wel wat gestoeid met C en C++.Mugwump schreef op donderdag 13 september 2018 @ 10:27:
[...]
Dat eerste ziet er ook niet uit als iets dat je in Java doet.
Voor dat tweede geldt inderdaad wel dat je even op de hoogte moet zijn van het feit dat je nu een object aanmaakt waarvoor je geen memory management kunt doen. Ik mag toch eigenlijk wel hopen dat iedereen met een HBO(+) IT opleiding wel in aanraking is gekomen met C(++) en weet dat je daarin grotendeels je eigen geheugenbeheer moet doen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
Hier iemand die een paar maanden terug een functie heeft uitgeplozen met negenentwintig argumenten... waarvan 12 met tweeletterige naam en de anderen waren niet veel duidelijker. Oh ja, en één van hen deed in werkelijkheid dienst als vehikel voor een return value.Stoelpoot schreef op donderdag 13 september 2018 @ 16:45:
[...]
Die mening deel ik ook wel, alleen soms heb je inderdaad van die core-functies die dan echt *alles* nodig hebben wat van te voren is bepaald, en dan kom je uit op een functie van 8+ parameters. Wordt je ook niet echt vrolijk van...
Een 1000 ( overdreven ) regel functie is prima, als hij maar duidelijk is. Ik lees liever sequentieel duizend regels dan dat ik van allerlei methodes over meerdere files moet doorneuzen. To each his own natuurlijk.Mugwump schreef op donderdag 13 september 2018 @ 16:33:
[...]
Niet helemaal, return gaat terug uit je methode, waarmee je dus veronderstelt dat er na je switch niets gebeurt.
Nou is het in mijn ogen ook wel een best practice om je methodes klein te houden in plaats van één grote procedurele brei, maar er zijn vast situaties waar je er niet echt aan ontkomt en helaas deelt 90% van de ontwikkelaars mijn opvatting niet.
Less alienation, more cooperation.
Meestal heb je al die functies niet nodig. Als je een functienaam ziet "GetAllUnsentInvoices" zal het, mits je enigszins bekend bent met het ontwerp van de applicatie, niet nodig zijn om die functie te lezen.Sandor_Clegane schreef op donderdag 13 september 2018 @ 22:34:
[...]
Een 1000 ( overdreven ) regel functie is prima, als hij maar duidelijk is. Ik lees liever sequentieel duizend regels dan dat ik van allerlei methodes over meerdere files moet doorneuzen. To each his own natuurlijk.
Als je een functie hebt die duidelijk meerdere stappen doet, dan maakt het opsplitsen in duidelijk benoemde deelfuncties de boel juist een stuk leesbaarder. Als je een fatsoenlijke IDE gebruikt boeit "over meerdere files" ook niet zo in mijn ogen.Sandor_Clegane schreef op donderdag 13 september 2018 @ 22:34:
[...]
Een 1000 ( overdreven ) regel functie is prima, als hij maar duidelijk is. Ik lees liever sequentieel duizend regels dan dat ik van allerlei methodes over meerdere files moet doorneuzen. To each his own natuurlijk.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Hmm, da's toch een gemis in een opleiding. Een gecompileerde taal heeft toch wat eigenschappen (zowel positief als negatief) die een script-taal of VM-taal mist. Er gaat op die manier een hoop achtergrond over geheugenmanagement, I/O, optimalisaties, etc verloren. Eigenlijk zou naar mijn mening iedere programmeur ook een basiskennis over assembly moeten hebben. Dan begrijp je tegen welke problemen een compiler (en een VM en een scripting-taal) aan loopt. Een stap verder zou zijn dat iedereen een compiler moet schrijven, maar voor het idee is naar mijn mening assembly wel voldoende.P1nGu1n schreef op donderdag 13 september 2018 @ 18:59:
[...]
Nee, voornamelijk Java, daarnaast C# en wat PHP en JavaScript (en Swift tijdens mijn minor). Overigens na mijn opleiding zelf wel wat gestoeid met C en C++.
Zo'n lange functie is per definitie onduidelijk. Waar ik werk wordt zoiets zowel tijdens code review als de code analyzer afgewezen. Je kan het altijd opsplitsen in verschillende classes of methods.Sandor_Clegane schreef op donderdag 13 september 2018 @ 22:34:
[...]
Een 1000 ( overdreven ) regel functie is prima, als hij maar duidelijk is. Ik lees liever sequentieel duizend regels dan dat ik van allerlei methodes over meerdere files moet doorneuzen. To each his own natuurlijk.
Waarom stoppen bij asm? Waarom niet verder gaan en elke ontwikkelaar logic gates aan elkaar laten knopen op een breadboard? Mooie dingen maken als SR latches en timing-gebeuren te begrijpen. Of nog een stapje verder en logic gates maken met transistoren? Of dominostenen? Of...?Parody schreef op vrijdag 14 september 2018 @ 08:03:
Eigenlijk zou naar mijn mening iedere programmeur ook een basiskennis over assembly moeten hebben.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Das het leuke van coder zijn met een werktuigbouwkunde achtergrond. Ik heb nog wel pneumatische schakelingen ontworpen en gebouwd tijdens mijn studieRayNbow schreef op vrijdag 14 september 2018 @ 08:20:
[...]
Waarom stoppen bij asm? Waarom niet verder gaan en elke ontwikkelaar logic gates aan elkaar laten knopen op een breadboard? Mooie dingen maken als SR latches en timing-gebeuren te begrijpen. Of nog een stapje verder en logic gates maken met transistoren? Of dominostenen? Of...?
Hij is onduidelijk omdat hij lang is? Dat is nieuw.rutgerw schreef op vrijdag 14 september 2018 @ 08:04:
[...]
Zo'n lange functie is per definitie onduidelijk. Waar ik werk wordt zoiets zowel tijdens code review als de code analyzer afgewezen. Je kan het altijd opsplitsen in verschillende classes of methods.
Het is een beetje hetzelfde als een verhaal lezen met een boel voetnoten, dat leest voor geen meter. Omdat je constant van je verhaal naar de achterkant van het boek loopt te bladeren om te zien wat iets nu weer betekend. Als je functie een ding doet, maar dat kost een hoop regels zie ik het probleem niet.
En over je IDE, tja dat maakt het misschien iets gemakkelijker maar andere kant ook weer een stuk complexer doordat er een hoop "magic" gebeurt waar je geen weet van hebt. Ik ben ook niet zo'n fan van Aspects in mijn code, is weer een hoop "extra" waar je moeilijk grip op krijgt.
Less alienation, more cooperation.
Waar gaan ze dan nog tijd voor sensitiviteitstraining vinden?RayNbow schreef op vrijdag 14 september 2018 @ 08:20:
[...]
Waarom stoppen bij asm? Waarom niet verder gaan en elke ontwikkelaar logic gates aan elkaar laten knopen op een breadboard? Mooie dingen maken als SR latches en timing-gebeuren te begrijpen. Of nog een stapje verder en logic gates maken met transistoren? Of dominostenen? Of...?
Op zich ben ik het een eind met je eens hoor; als er veel gebeurt heb je soms veel code nodig. Ik hou doorgaans met name DRY aan, maar als iets maar 1x nodig is splits ik het soms alsnog op in meerdere functies. Met name dingen die in loopjes gebeuren en om teveel nesting te voorkomen.Sandor_Clegane schreef op vrijdag 14 september 2018 @ 09:33:
[...]
Hij is onduidelijk omdat hij lang is? Dat is nieuw.
Het is een beetje hetzelfde als een verhaal lezen met een boel voetnoten, dat leest voor geen meter. Omdat je constant van je verhaal naar de achterkant van het boek loopt te bladeren om te zien wat iets nu weer betekend. Als je functie een ding doet, maar dat kost een hoop regels zie ik het probleem niet.
Qua voetnoten ben ik het niet helemaal met je eens; als je de de functie van de goede comments met uitleg over parameters en return values voorziet en logische namen gebruikt dan is er weinig bezwaar om het op te splitsen. Sterker nog; dan kan het dus inderdaad overzichtelijker worden doordat je een handeling van pakweg 50 regels in 1 regel samenvat.
Stel:
1
2
3
4
5
6
7
8
9
| Loop 10 meter Sla linksaf Steek plein over Sla linksaf Loop 100 meter Sla rechtsaf Loop 200 meter Loop schoolplein op Stap school binnen |
Of
1
| loopNaarSchool() |
Tjolk is lekker. overal en altijd.
Ben je een oplossing aan het maken of wil je full control over de code? Het boeit mij persoonlijk echt geen zak wat visual studio allemaal doet op de achtergrond, als ik maar de oplossing kan maken waar om gevraagd is.Sandor_Clegane schreef op vrijdag 14 september 2018 @ 09:33:
En over je IDE, tja dat maakt het misschien iets gemakkelijker maar andere kant ook weer een stuk complexer doordat er een hoop "magic" gebeurt waar je geen weet van hebt. Ik ben ook niet zo'n fan van Aspects in mijn code, is weer een hoop "extra" waar je moeilijk grip op krijgt.
Ik heb daardoor bv ook geen moeite met langere functies als ik ze in de IDE handig kan inklappen. Jammer dat het lastiger leesbaar is in notepad (...) maar I don't care.
Hoewel in het voorbeeld met LoopNaarSchool() dat wel een typisch voorbeeld is die ik (meestal?) ook wel als losse functie maak, ook al wordt ie maar vanaf 1 plek aangeroepen, gewoon omdat ik geen moeite heb met lange functies maar liever een rijtje zie a la
DoeOchtendRitueel();
Aankleden();
LoopNaarSchool();
dan 100 regels die uiteindelijk dat allemaal doen. Dat is voor de Quick scan handiger leesbaar, maar als ik er echt mee bezig ben maakt me dat weer weinig uit.
Exact expert nodig?
Nou ja, je moet natuurlijk ergens een grens trekken, maar een wat meer fundamenteel begrip van wat een computer doet kan zeker geen kwaad. Ik heb een vrij brede opleiding gehad waarin het hele spectrum van hardware description languages tot aan 3/4GL talen voorbij kwam. Niet dat ik in de praktijk ooit nog iets met ASM of met AHDL zou doen, maar het kan geen kwaad om te snappen hoe dat soort zaken werken, juist ook als ze in het dagelijks gebruik zijn weggeabstraheerd.RayNbow schreef op vrijdag 14 september 2018 @ 08:20:
[...]
Waarom stoppen bij asm? Waarom niet verder gaan en elke ontwikkelaar logic gates aan elkaar laten knopen op een breadboard? Mooie dingen maken als SR latches en timing-gebeuren te begrijpen. Of nog een stapje verder en logic gates maken met transistoren? Of dominostenen? Of...?
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
Oh, voor mij is dit ook wel zo'n 14-15 jaar geleden.Mugwump schreef op vrijdag 14 september 2018 @ 11:24:
[...]
Nou ja, je moet natuurlijk ergens een grens trekken, maar een wat meer fundamenteel begrip van wat een computer doet kan zeker geen kwaad. Ik heb een vrij brede opleiding gehad waarin het hele spectrum van hardware description languages tot aan 3/4GL talen voorbij kwam.
Ik kwam er laatst achter dat een voor de programma's waar ik tegenwoordig verantwoordelijk ben gebruikmaakt van inline asm. Dat wordt leuk als we besluiten om een keer het programma te porten naar 64 bits.Niet dat ik in de praktijk ooit nog iets met ASM of met AHDL zou doen, maar het kan geen kwaad om te snappen hoe dat soort zaken werken, juist ook als ze in het dagelijks gebruik zijn weggeabstraheerd.
Ipsa Scientia Potestas Est
NNID: ShinNoNoir
Omdat het spul ook wel eens stuk gaat of zich net niet zo gedraagt zoals jij denkt. Dan is het handig dat je simpel van A tot Z kan zien wat er gedaan wordt, zonder dat er een hoop voor je verborgen wordt.Crazy D schreef op vrijdag 14 september 2018 @ 11:23:
[...]
Ben je een oplossing aan het maken of wil je full control over de code? Het boeit mij persoonlijk echt geen zak wat visual studio allemaal doet op de achtergrond, als ik maar de oplossing kan maken waar om gevraagd is.
Visual Studio verbergt een hoop voor je, had ik laatst een probleem met dependencies kan je alsnog handmatig in de csproj of fsproj lopen miepen. En dan ineens kom je erachter wat voor meuk die "generated" dingen zijn.
Zoals ik al zei, ieder zijn ding.
Less alienation, more cooperation.
Dat is voor mij de grootste ergernis met mijn 'simpele PHP achtergrond'. In Git commits mergen met die van collega's is ook zo leuk met die generated zooi.Sandor_Clegane schreef op vrijdag 14 september 2018 @ 11:29:
[...]
Visual Studio verbergt een hoop voor je, had ik laatst een probleem met dependencies kan je alsnog handmatig in de csproj of fsproj lopen miepen. En dan ineens kom je erachter wat voor meuk die "generated" dingen zijn.
[...]
Hoeder van het Noord-Meierijse dialect
Zelf vind ik die generated dingen vaak wel erg duidelijk. Tenzij het echt generated code uit een designer is, vind ik het mergen van bijvoorbeeld een .csproj erg gemakkelijk. Uiteindelijk is het maar XML.Sandor_Clegane schreef op vrijdag 14 september 2018 @ 11:29:
[...]
Omdat het spul ook wel eens stuk gaat of zich net niet zo gedraagt zoals jij denkt. Dan is het handig dat je simpel van A tot Z kan zien wat er gedaan wordt, zonder dat er een hoop voor je verborgen wordt.
Visual Studio verbergt een hoop voor je, had ik laatst een probleem met dependencies kan je alsnog handmatig in de csproj of fsproj lopen miepen. En dan ineens kom je erachter wat voor meuk die "generated" dingen zijn.
Zoals ik al zei, ieder zijn ding.
Maar weer met zijn eigen schema, filetje kopiëren? Gaat dat in een <ItemGroup>? Of gaat het ergens anders in? ServiceReference leest niet alle strings? Kun je weer in in een XML de buffers gaan vergroten, waar gaat dat in? Hoort dat bij de reference zelf? Of hoort dat bij de globale config en hoe ziet dat er dan weer uit. En zo zijn er nog wel een paar.Stoelpoot schreef op vrijdag 14 september 2018 @ 12:07:
[...]
Zelf vind ik die generated dingen vaak wel erg duidelijk. Tenzij het echt generated code uit een designer is, vind ik het mergen van bijvoorbeeld een .csproj erg gemakkelijk. Uiteindelijk is het maar XML.
Less alienation, more cooperation.
Ik vind juist dat dat, als je er mee bezig bent, veel uit maakt. Je kan je dan namelijk er op focussen dat je DoeOchtendRitueel() aanpast als je je bed hebt verplaatst en aan de andere kant er uit moet stappen, zonder ook Aankleden() en LoopNaarSchool() aan te hoeven passen.Crazy D schreef op vrijdag 14 september 2018 @ 11:23:
[...]
Ben je een oplossing aan het maken of wil je full control over de code? Het boeit mij persoonlijk echt geen zak wat visual studio allemaal doet op de achtergrond, als ik maar de oplossing kan maken waar om gevraagd is.
Ik heb daardoor bv ook geen moeite met langere functies als ik ze in de IDE handig kan inklappen. Jammer dat het lastiger leesbaar is in notepad (...) maar I don't care.
Hoewel in het voorbeeld met LoopNaarSchool() dat wel een typisch voorbeeld is die ik (meestal?) ook wel als losse functie maak, ook al wordt ie maar vanaf 1 plek aangeroepen, gewoon omdat ik geen moeite heb met lange functies maar liever een rijtje zie a la
DoeOchtendRitueel();
Aankleden();
LoopNaarSchool();
dan 100 regels die uiteindelijk dat allemaal doen. Dat is voor de Quick scan handiger leesbaar, maar als ik er echt mee bezig ben maakt me dat weer weinig uit.
Wij houden de vendor map eigenlijk gewoon in .gitignore. Gewoon composer update en gaan met die banaan. Niet voor elk lullig dingetje, maar voor iedere nieuwe tag alvorens het naar acceptatie gaat (en lokaal natuurlijk).Harrie_ schreef op vrijdag 14 september 2018 @ 12:05:
[...]
Dat is voor mij de grootste ergernis met mijn 'simpele PHP achtergrond'. In Git commits mergen met die van collega's is ook zo leuk met die generated zooi.
Tjolk is lekker. overal en altijd.
Inderdaad maar ik heb in Git dan ook geen problemen met PHP-projecten, juist wel met VS/C# projecten waar al die onleesbare generated code inzit van de designer.Tjolk schreef op vrijdag 14 september 2018 @ 13:41:
[...]
Wij houden de vendor map eigenlijk gewoon in .gitignore. Gewoon composer update en gaan met die banaan. Niet voor elk lullig dingetje, maar voor iedere nieuwe tag alvorens het naar acceptatie gaat (en lokaal natuurlijk).
Hoeder van het Noord-Meierijse dialect
Om even te mierenneuken: talen zijn niet inherent gecompileerd of geïnterpret (is dat Nederlands?), en Java-code en C#-code wordt doorgaans gecompileerd.Parody schreef op vrijdag 14 september 2018 @ 08:03:
[...]
Hmm, da's toch een gemis in een opleiding. Een gecompileerde taal heeft toch wat eigenschappen (zowel positief als negatief) die een script-taal of VM-taal mist.
Ik ben het verder wel eens met je verhaal.
[ Voor 16% gewijzigd door bwerg op 14-09-2018 15:03 ]
Heeft geen speciale krachten en is daar erg boos over.
Da's niet zo'n heel goed voorbeeld, maar precies eentje om wél op te splitsenTjolk schreef op vrijdag 14 september 2018 @ 10:01:
[...]
Qua voetnoten ben ik het niet helemaal met je eens; als je de de functie van de goede comments met uitleg over parameters en return values voorziet en logische namen gebruikt dan is er weinig bezwaar om het op te splitsen. Sterker nog; dan kan het dus inderdaad overzichtelijker worden doordat je een handeling van pakweg 50 regels in 1 regel samenvat.
Stel:
code:
1 2 3 4 5 6 7 8 9 Loop 10 meter Sla linksaf Steek plein over Sla linksaf Loop 100 meter Sla rechtsaf Loop 200 meter Loop schoolplein op Stap school binnen
Of
code:
1 loopNaarSchool()
1
2
3
4
5
6
7
8
9
10
11
12
| public void SlaAf(Richting richting) {..} public void Loop(int meters) {.. } public void SteekOver(Object obj) {..} // etc. Loop(10); SlaAf(Richting.Links); SteekOver(plein); SlaAf(Richting.Links); Loop(100) SlaAf(Richting.Rechts); //etc |
Kater? Eerst water, de rest komt later
Dit is geen opsplitsen, het maakt alleen sommige functies generieker (slaAf en steekOver). Jouw functie is precies even lang als de oorspronkelijke functie.Haan schreef op vrijdag 14 september 2018 @ 14:46:
[...]
Da's niet zo'n heel goed voorbeeld, maar precies eentje om wél op te splitsen
Sowieso een beetje moeilijk om precies te maken met pseudocode, natuurlijk.
[ Voor 9% gewijzigd door bwerg op 14-09-2018 14:50 ]
Heeft geen speciale krachten en is daar erg boos over.
Ik vond het ook leuk om te doen inderdaad, maar het is wel best pittig. Gaf me wel heel wat meer respect voor zaken als de JVM.bwerg schreef op vrijdag 14 september 2018 @ 13:55:
[...]
Om even te mierenneuken: talen zijn niet gecompileerd of geïnterpret (is dat Nederlands?), en Java-code en C#-code wordt doorgaans gecompileerd.
Ik ben het verder wel eens met je verhaal.Het bouwen van een compiler is sowieso een erg leuke programmeeropdracht, dus zonde om niet een keer gedaan te hebben.
"The question of whether a computer can think is no more interesting than the question of whether a submarine can swim" - Edsger Dijkstra
[ Voor 6% gewijzigd door Jerrythafast op 14-09-2018 20:53 ]
De enige reden die ik kn bedenken: native code, geen framework nodig. Dat vind ik bij zowel Java als .NET het grootste nadeel.sig69 schreef op vrijdag 14 september 2018 @ 21:26:
Mij interesseert het me geen zak. Ik programmeer in C#. Daar ken ik alle ins en outs van. Waarom zou ik me druk moeten maken om C++, of zelfs assembly?
Assembly kost je teveel tijd, maar wanneer het klein moet....
Uiteraard is het in dit topic niet de bedoeling dat andere users en/of topics aangehaald worden om ze voor gek te zetten. Lachen om je eigen code, of over dingen die je "wel eens tegengekomen bent" is prima, maar hou het onderling netjes.