Now you have two problems

Door CodeCaster op zaterdag 24 december 2011 13:37 - Reacties (15)
Categorie: Tech, Views: 11.864

Aangezien ik een zelfbenoemde internetheld ben, begeef ik mij vrijwel dagelijks met mijn browser op het wereldwijde web. Daar bezoek ik onder andere nieuwssites, forums en Q&A-sites.

Over dat laatste wil ik het hebben, en dan met name de geweldige site Stack Overflow. Het is een site waarop een ieder een vraag kan stellen, die dan door de community beantwoord kan worden. Crowdsourcing pur sang.

De policy van Stack Overflow is dat je de vraag direct moet beantwoorden, als in: indien er niet om advies wordt gevraagd, dan geef je dat niet. Er is echter iets mis met veel vragen.

Een vraag komt vaak direct voort uit een probleem waar iemand tegenaan loopt, bijvoorbeeld een compilatie- of runtimefout die men niet opgelost krijgt. Wat men, voornamelijk beginnende programmeurs, meestal niet ziet is echter dat men eigenlijk een tweede probleem aan het oplossen is.

Er is in zo'n geval een onderliggend probleem waarvoor men een oplossing denkt te hebben bedacht, maar hun oplossing zorgt juist voor de fout die in de vraag wordt beschreven. Met een andere, vaak betere oplossing voor het oorspronkelijke probleem zou men in de eerste plaats al niet tegen de fout oplopen.

Neem nu deze vraag:
when i finish reading i want to read it again and then put it in a string array (not a List) but when i try do that again it says that the file is already in use
Er is al zo veel mis op dit punt, dat er haast geen redden meer aan is. Telt u mee?
  • "When I finish reading, I want to read it again". Wait, what? Je leest een bestand in, en wil het daarna opnieuw inlezen? Waarom dan? Kun je de ingelezen regels niet opslaan, bijvoorbeeld in een List<String>?
  • "and then put it in a string array (not a List)". Hm, eerst een bestand inlezen om er niets mee te doen, en het daarna in een string array stoppen. Waarom doe je dat de eerste keer dan niet? En waarom mag het geen List zijn?
  • "but when i try do that again it says that the file is already in use". Een letterlijke foutmelding zou prettig zijn, maar ik kan al gokken wat er aan de hand is: de garbage collector komt te laat langs, waardoor de StreamReader in de using nog niet helemaal netjes is opgeruimd, dus het bestand is nog in gebruik.
U ziet: vaagheid alom. Gelukkig kun je ook commentaar plaatsen op vragen en antwoorden, wat dan ook gedaan is. Ik was blijkbaar niet de enige met deze vragen, want in het eerste commentaar wordt al gevraagd waarom de vraagsteller het bestand twee keer wil lezen. Het verbluffende antwoord: "because i want to find out how many lines are there then make a string[] lines = new string[counter]".

Double facepalm, know your framework, enzovoorts:

C#:
1
string[] lines = File.ReadAllLines("TestFile.txt");


Of, als je liever je framework negeert en zelf het wiel opnieuw wil uitvinden, of als je een List prettiger vindt dan een array:

C#:
1
2
3
4
5
6
7
8
9
10
var stringList = new List<String>();

using (StreamReader sr = new StreamReader(filename))
{
    string line;
    while ((line = sr.ReadLine()) != null)
    {
        stringList.Add(line);
    }
}


En als je dan toch per se een array wil, roep je gewoon ToArray() aan op de List.

Het antwoord dat als eerste geplaatst is geeft de man een vis, gelukkig leert Jon Skeet hem vissen.

Kortom: als je niet eens in staat bent om je oorspronkelijke probleem duidelijk te omschrijven ("Ik wil graag alle regels uit een bestand in een array)", en ook niet inziet dat jouw oplossing enkel voor een nieuw probleem zorgt, kun je maar beter méér programmeren om dat inzicht te verkrijgen. ;)


http://codecaster.nl/got/rmb/star1.pnghttp://codecaster.nl/got/rmb/star2.pnghttp://codecaster.nl/got/rmb/star3.pnghttp://codecaster.nl/got/rmb/star4.pnghttp://codecaster.nl/got/rmb/star5.pnghttp://codecaster.nl/got/rmb/stats.gif

Volgende: Spatiefouten 01-'12 Spatiefouten
Volgende: First world problems 11-'11 First world problems

Reacties


Door Tweakers user philosophian, zaterdag 24 december 2011 13:47

hmm.. Mischien is het handig om een vertaling te maken met voorbeelden in mensentaal. Voglens mij is de achterliggende gedachte heel interessant maar al die code :o...

Door Tweakers user Kvn, zaterdag 24 december 2011 14:16

AL die code? 8)7 Goed werk!

[Reactie gewijzigd op zaterdag 24 december 2011 14:17]


Door Tweakers user Phoenix1337, zaterdag 24 december 2011 14:33

De titel van je blogpost deed me eerder denken aan een regex dan aan hetgene jij omschrijft. Zal wel komen omdat die vrij vaak voorbij komt.

Door Tweakers user MicGlou, zaterdag 24 december 2011 14:37

Ik zou zeggen dat je daar wat anders mee om moet gaan... als het antwoord een pleister is ipv de daadwerkelijke wond behandelen op de exacte vraag... dan geef je dat toch als antwoord als je niet mag 'uitbreiden' op een gericht antwoord?

Misschien nog een andere tip, zodra jij je werkelijk begint irriteert en ergert aan dit soort dingen... niet meer doen! Ik ken het, heb ook op diverse fora de helpende hand uitgehangen en helpen doe ik graag (niet op dat niveau weliswaar)... maar zodra het frustratie begint op te leveren heb ik inmiddels geleerd de eer gewoon aan mijzelf te houden en te stoppen... Je vecht anders alleen tegen je eigen plezier, niets anders... de persoon aan de andere kant geeft echt geen ene ruk om je, die wil alleen voorgekauwde oplossingen. (ik proef namelijk nogal wat ehhh 'herhalings-frustratie'...

[Reactie gewijzigd op zaterdag 24 december 2011 14:39]


Door Boudewijn, zaterdag 24 december 2011 14:55

Als echte programmeur ga je ook geen vragen stellen op het internet, het internet is leuk voor hobbyisten, meer niet. Het niveau op internet is daarom ook laag op het gebied van applicatie ontwikkeling. Ik kan wel een vraag stellen over een lastig algoritme die ik moet schrijven voor een simulatie maar daar ga ik toch geen antwoord op krijgen op het internet want mensen die op dat niveau ontwikkelen hebben betere bronnen dan op een puberale website vragen stellen als tweakers.net of stack overflow. Dus als die websites onder jou niveau zitten moet je daar gewoon niet meer komen, simpel.

Door Tweakers user armageddon_2k1, zaterdag 24 december 2011 15:48

@Boudewijn: Waar ga je als echte programmeur dan heen als je het even niet ziet en je collega's ook niet? Ga je dan zelf een 'net-niet' oplossing proberen te vinden terwijl er vast andere pro's zijn die het wel al eens gedaan hebben? Vind het nogal een kortzichtige opmerking om het hele internet af te doen als plek voor hobbyisten. Een schijnbaar onuitputtelijke bron van informatie over het hoofd zien lijkt mij juist amateuristisch en zorgt er juist voor dat er te veel op het eigen eilandje gewerkt wordt. Dat jij de juiste plek nog niet gevonden heb met professionele antwoorden en vragen wil niet zeggen dat ze er niet zijn. In tegendeel. Een hele arrogante opstelling. Het mooie aan websites als Stackoverlow en Tweakers is natuurlijk dat jij mee kan doen om het naar een hoger plan te tillen. Als jij daar niet toe bereid bent omdat het te puberaal is (wat ook nogal twijfelachtig is. Er loopt meer kennis rond op Stackoverflow (niet alleen bij programmeertalen) dan jij je waarschijnlijk voor kan stellen), dan is dat voornamelijk je eigen gemis.

[Reactie gewijzigd op zaterdag 24 december 2011 15:50]


Door Tweakers user Sgreehder, zaterdag 24 december 2011 16:15

Ik durf nog wel een stapje verder te gaan dan Armageddon; het negeren van internet als informatiebron (of in dit geval eigenlijk: kennisbron) is buitengewoon onprofessioneel. Neem sourcen met collega's als uitgangspunt, maar dan op zeer grote schaal en het wegnemen van (voor het vraagstuk) onbelangrijke sociale factoren (zoals status). Het is overigens niet echt nodig de voordelen van crowdsourcing hier te herhalen, het is lang en breed vastgesteld dat het te voordelig is (en dus kostbaar) om links te laten liggen.

Door Tweakers user Schrauben, zaterdag 24 december 2011 17:12

@aramageddon, het is maar net met welke perceptie je het bekijkt. Als je net klaar bent met hbo of uni (mbo ga ik niet eens noemen) zal de info hier misschien best indrukwekkend zijn. Ik studeer al ruim 20 jaar en zie hier alleen maar hobbyisme. Wetenschappelijke informatie vind je niet op internet, daar heb je gesloten wereldwijde netwerken voor die alleen voor de wetenschap toegankelijk is (het internet is ook ooit op de manier ontstaan). Er draait bijvoorbeeld nu een satelliet om de aarde waar mijn code op draait en onderzoek doet naar het universum. Dacht je dat ik die code heb ontwikkeld met behulp van het internet? Haha

Door Tweakers user YopY, zaterdag 24 december 2011 17:15

Het niveau van de meeste vragen op SO is dan ook om te huilen vaak... Ik had graag gewild dat ze een policy net zoals T.net daar toevoegen, al was het maar om hun domme compilerfouten niet gelijk op SO te pleuren en om wat eigen inzet te tonen.

Door Tweakers user revertive, zaterdag 24 december 2011 22:52

Schrauben schreef op zaterdag 24 december 2011 @ 17:12:
@aramageddon, het is maar net met welke perceptie je het bekijkt. Als je net klaar bent met hbo of uni (mbo ga ik niet eens noemen) zal de info hier misschien best indrukwekkend zijn. Ik studeer al ruim 20 jaar en zie hier alleen maar hobbyisme. Wetenschappelijke informatie vind je niet op internet, daar heb je gesloten wereldwijde netwerken voor die alleen voor de wetenschap toegankelijk is (het internet is ook ooit op de manier ontstaan). Er draait bijvoorbeeld nu een satelliet om de aarde waar mijn code op draait en onderzoek doet naar het universum. Dacht je dat ik die code heb ontwikkeld met behulp van het internet? Haha
Hm.. Smell's like a god complex.

Door Tweakers user Snake, zondag 25 december 2011 10:28

Euh. Foutje.

[Reactie gewijzigd op zondag 25 december 2011 10:28]


Door Tweakers user armageddon_2k1, zondag 25 december 2011 11:27

Schrauben schreef op zaterdag 24 december 2011 @ 17:12:
@aramageddon, het is maar net met welke perceptie je het bekijkt. Als je net klaar bent met hbo of uni (mbo ga ik niet eens noemen) zal de info hier misschien best indrukwekkend zijn. Ik studeer al ruim 20 jaar en zie hier alleen maar hobbyisme. Wetenschappelijke informatie vind je niet op internet, daar heb je gesloten wereldwijde netwerken voor die alleen voor de wetenschap toegankelijk is (het internet is ook ooit op de manier ontstaan). Er draait bijvoorbeeld nu een satelliet om de aarde waar mijn code op draait en onderzoek doet naar het universum. Dacht je dat ik die code heb ontwikkeld met behulp van het internet? Haha
Lekkere arrogante opstelling heb jij zeg. Er zijn veel MBO'ers die meer kunnen dan jij. Als ik een ding wel geleerd heb de afgelopen jaren dan is het dat ik met al mijn theoretische kennis nou juist niet de dingen kan die nodig zijn om het daadwerkelijk ook te produceren. Nou ben ik ook bezig geweest met 'wetenschappelijke informatie' en onderzoek, dus dat hoef je me niet uit te leggen. Mijn vraag aan jou is: "Waar zoek jij naar publicaties?" Ik denk niet dat jij naar de bibliotheek gaat en in alle journals en indices gaat struinen. Juist, je gebruikt het internet. Alleen is het nu een door betaling afgeschermde database, maar ook dit is gewoon een professionele community.

Wat betreft je satelliet. Zo spannend is dat niet. Ik ken afstudeerders van de TUDelft die hetzelfde gedaan hebben en meegewerkt hebben aan code die draait op satellieten. Er vliegen zo veel van die dingen rond de aarde dat het niet echt meer een niche is. Ik ben wel benieuwd waar jij precies aan gewerkt hebt.

Door Tweakers user alwinuzz, zondag 25 december 2011 20:04

Schrauben weet gewoon alles al. De mensen die alleen al mogen ruiken aan zijn bovenmenselijke gaven, zullen daarna nooit meer iets op het internet hoeven te vragen. Ze gaan zoeken op de "gesloten wereldwijde netwerken" die totaal geen gebruik maken van internet. Gewoon met postduiven, dat is veel meer gesloten (wereldwijd wordt moeilijk, arme duiven...)

Ach, internet is toch alleen voor de hobby.

PS Vrolijk Kerstfeest iedereen :)

[Reactie gewijzigd op zondag 25 december 2011 20:04]


Door Tweakers user mindcrash, maandag 26 december 2011 16:40

Schrauben schreef op zaterdag 24 december 2011 @ 17:12:
Als je net klaar bent met hbo of uni (mbo ga ik niet eens noemen)
Hallo Schrauben, ik heb vanwege diverse problematiek die ik hier niet verder ga verantwoorden "slechts" een MBO diploma, maar heb wel een IQ die dichtbij (of wellicht zelfs over) het 98-percentiel ligt. Vrij vertaald: goed genoeg om eventueel toegelaten te worden tot Mensa. Als ik dat zou willen.

Nu jij weer.

[Reactie gewijzigd op maandag 26 december 2011 16:41]


Door Tweakers user i-chat, dinsdag 27 december 2011 15:15

Schrauben schreef op zaterdag 24 december 2011 @ 17:12:
@aramageddon, het is maar net met welke perceptie je het bekijkt. Als je net klaar bent met hbo of uni (mbo ga ik niet eens noemen) zal de info hier misschien best indrukwekkend zijn. Ik studeer al ruim 20 jaar en zie hier alleen maar hobbyisme. Wetenschappelijke informatie vind je niet op internet, daar heb je gesloten wereldwijde netwerken voor die alleen voor de wetenschap toegankelijk is (het internet is ook ooit op de manier ontstaan). Er draait bijvoorbeeld nu een satelliet om de aarde waar mijn code op draait en onderzoek doet naar het universum. Dacht je dat ik die code heb ontwikkeld met behulp van het internet? Haha
whoho wat ben je goed man, - weet je wanneer je nog beter was? als je je bevindingen vaak grotendeels gesubsidieerd door de overheid (of dat nu de nederlandse of de amerikaanse is maakt geen zak uit), zou delen op een openbaar netwerk, zodat aanstormend talent zich er op kan stormen. of dacht je dat mensen als einstein edison en bell en tal van andere grootheden allemaal accademici waren.

het internet is slecht een informatie drager, als je enig fatsoen had zou je er aan kunnen bijdragen in plaats van het af te kraken hier @ tweakers.

Reageren is niet meer mogelijk