Als er iets is dat we kunnen leren van Open Source applicaties is dat er niet zoiets bestaat als 'one size fits all', iets wat Apple en Microsoft ons wel willen doen geloven. (logisch, anders verkopen ze een stuk minder)
Het gaat er hier eerder om dat er helemaal NIETS is van de kant van linux, dat op MSDN lijkt. Microsoft levert tenminste nog 1 systeem ervoor. Dat je dan geen keuze hebt voor een ander systeem, soit... Maar bij linux heb je helemaal geen keuze, want er is niks.
Dan vraag je het... klinkt misschien vreemd, maar als je gewoon netjes uitlegt wat het probleem is en hoe je er niet uit komt dan krijg je normaal gesproken een goede uitleg over waar je de oplossing kan vinden, hoe je het in de tussentijd kan oplossen en wie je eventueel verder kan helpen.
OpenSource is een community-efford, dat betekend dat je best eens mag vertrouwen op die community.
Wat dus niet acceptabel is voor professionele ontwikkelaars. Vragen stellen op IRC of forums is veel te vrijblijvend. Ten eerste weet je nooit of je met een geautoriseerde bron te maken hebt (veel mensen denken dat ze weten hoe iets werkt, maar eigenlijk snappen ze er weinig van, en kletsen ze uit hun nek), en ten tweede weet je nooit of en wanneer je antwoord krijgt.
Als je documentatie hebt waar je effectief in kunt zoeken, zoals bij de MSDN, dan kun je veel sneller vinden wat je zoekt. In het ergste geval kun je je vraag direct aan Microsoft richten, waar een team van specialisten gegarandeerd je probleem zal behandelen. Dat gaat wellicht tegen een kleine vergoeding (afhankelijk van de aard van het probleem), maar wachten totdat iemand op een of ander vaag forum het juiste antwoord geeft, kan ook lang duren, en tijd is ook geld.
Vreemd genoeg wordt wel ongeveer alles gedocumenteerd en is overal de sourcecode van beschikbaar, op zich best handig (en in de juiste handen, documentatie opzich).
Ik kan me zo gruwelijk ergeren aan die "broncode == documentatie"... Dat is helemaal niet zo. Iedere *echte* programmeur kan je dat vertellen.
Als je software ontwikkelt, dan ga je eerst het probleem analyseren, en verschillende oplossingen proberen te formuleren, om uiteindelijk de beste oplossing te kiezen, welke je gaat implementeren.
Dit hele proces kun je NIET in je sourcecode terugvinden. Je weet dus nooit *waarom* iets op een bepaalde manier geimplementeerd is. Een heel stuk informatie ontbreekt gewoon. Als er in dat ontbrekende stuk fouten zijn gemaakt, zijn die ook niet te achterhalen.
Een mooi voorbeeld is bv de DCT bij MPEG. Daar wordt een standaard-tabel voor gebruikt. Maar als je alleen de sourcecode ziet, zie je niet meer dan een handvol getallen. Wat betekenen die getallen? Kun je niet aan de broncode afleiden. Het algoritme is veel complexer dan de implementatie ervan. Als 1 zo'n getalletje verkeerd is, krijg je dus een bug ergens in je filmpjes. Hoe kom je daar ooit achter als je geen documentatie hebt die uitlegt wat die DCT-tabel betekent, en wat de juiste waarden zijn, en hoe men daar aan is gekomen? Je *moet* er documentatie bij hebben.
MarchingCubes is een ander mooi voorbeeld... De implementatie is niet veel meer dan wat gehannes met wat bytes in een tabelletje. Als je die code ziet, is het praktisch onmogelijk te achterhalen wat er nou precies gebeurt, en waarom. Het algoritme is wederom veel complexer dan de implementatie.
In beide gevallen is een deel van het algoritme dus al van te voren uitgewerkt en in een tabel gecodeerd. Dat deel van de informatie is dus verloren gegaan in de sourcecode. Er zijn genoeg andere voorbeelden te bedenken van implementaties die niet het hele verhaal vertellen van wat er nou precies gebeurt, en waarom.
Dit is ook een klassiek voorbeeld, de snelle 1/sqrt(x) in Quake:
http://www.codemaestro.com/reviews/review00000105.html
Het staat leuk in de sourcecode, en het werkt... Maar zoals je aan dat artikel ziet, *niemand* weet eigenlijk precies hoe en waarom. Carmack weet het ook niet, want hij heeft het zelf niet geschreven... Wie het precies heeft geschreven, is niet bekend.
Moet je maar kijken wat een enorme wiskundige analyse van Lomont er komt kijken bij dit handjevol regels sourcecode.
I rest my case.
Geeft ook wel weer aan wat jij al eerder zei: Als je al weet hoe het werkt, kun je er iets mee... Maar als je het niet weet, kom je er ook niet achter.
je roemt de MSDN wel, maar je moet je wel bedenken dat hetgene dat niet in de MSDN staat ook nergens te vinden is. En dan bedoel ik ECHT NERGENS. De MSDN is een mooie bibliotheek, maar het is geenszins de bijbel. Het is het toonbeeld van MS's vendor-lockin.
Dat is niet waar. Er zijn ook genoeg boeken te koop, zoals bv "Inside Windows 2000", waar dingen worden besproken die voor zover ik weet niet in de MSDN staan.
En zelfs al zou de documentatie van Microsoft onvolledig zijn... Dan nog is het vollediger dan vrijwel alle andere software.
Eenieder die denkt dat het beter kan, gaat dat ook doen.
Dat is de arrogantie van de opensource-wereld. Iedereen denkt dat ie het beter kan, maar als puntje bij paaltje komt, valt dat tegen, en krijg je de zoveelste half-afgemaakte waardeloze meuk.
Die desktop-environments zijn een geweldig voorbeeld. KDE en Gnome staan op eenzame hoogte. Al die anderen zijn eigenlijk overbodig.
Maar het is zeker niet zo bar slecht als jij beweert. Dan had ik nl. nooit met OSS ontwikkeling kunnen beginnen. Dan had ik nl. nooit met OSS ontwikkeling kunnen beginnen.
Je zult het waarschijnlijk niet toegeven, maar ik weet 100% zeker dat jij niet hebt leren programmeren met ALLEEN een OSS-systeem. Je zult ofwel eerst in Windows hebben leren programmeren, misschien zelfs via de MSDN... of je hebt gebruik gemaakt van externe bronnen zoals boeken die je de beginselen van het programmeren bijbrengen.
Zo ben ik ook ooit begonnen. Een ZX81 met daarbij de BASIC-manual. Dat waren andere tijden natuurlijk.
Een hoop 'moderne' dingen zoals DirectX, C#, het maken van services etc heb ik mezelf compleet aangeleerd met niets anders dan de MSDN.
Omdat ik als zeer ervaren programmeur aan *nix begon, was het voor mij wel te doen.
Als je eenmaal op weg bent, kun je er wel uitkomen, maar een complete beginner kan niet de informatie vinden die hij nodig heeft op zijn linux-systeempje.
Je moet eerst C/C++ begrijpen voordat je uberhaupt weet waar je naar zou kunnen zoeken om bij de juiste man-pages te komen, en deze ook te begrijpen. Er mist gewoon een hoop informatie om je op gang te helpen, en dus moet je goed zoeken op internet, vragen stellen op forums, boeken halen uit de bibliotheek etc. Dat is gewoon tijdrovender en frustrerender dan alles kant-en-klaar in de MSDN te hebben.
Als ik wil weten hoe ik ook alweer een bepaalde template in C++ moest maken, dan hoef ik geen vraag op een forum te stellen, of naar de boekenkast te lopen om een boek te zoeken, en door te bladeren... Ik zoek het even in MSDN.
[Reactie gewijzigd door ddbruijn op 6 juli 2007 12:34]