Wikisage is op 1 na de grootste internet-encyclopedie in het Nederlands. Iedereen kan de hier verzamelde kennis gratis gebruiken, zonder storende advertenties. De Koninklijke Bibliotheek van Nederland heeft Wikisage in 2018 aangemerkt als digitaal erfgoed.
- Wilt u meehelpen om Wikisage te laten groeien? Maak dan een account aan. U bent van harte welkom. Zie: Portaal:Gebruikers.
- Bent u blij met Wikisage, of wilt u juist meer? Dan stellen we een bescheiden donatie om de kosten te bestrijden zeer op prijs. Zie: Portaal:Donaties.
Programmeur (computer)
Een programmeur oftewel softwareontwikkelaar oftewel computerprogrammeur is een persoon of bedrijf die zich bezighoudt met het programmeren van software. Het beroep wordt in het Engels (software) developer genoemd.
In de begindagen van de computer hield een programmeur zich nog bezig met de hardware en programmeerde zij (zelden hij) de computer door het maken van de nodige verbindingen, bijvoorbeeld door het plaatsen en verwijderen van stekkers en/of verbindingen. Tegenwoordig bestaan er programmeertalen die de programmeur veel hulpmiddelen aanreiken.
Het wetenschappelijk veld dat zich bezighoudt met softwareontwikkeling wordt software engineering genoemd. Dit is een vakgebied binnen de informatica.
Ontwikkelproces
Het ontwikkelen van software is het totale proces van het schrijven van software. Dit bestaat uit een aantal stappen waarvan het eigenlijke programmeren stap twee, drie en vier beslaat. Niet voor ieder te ontwikkelen programma zijn alle stappen gebruikelijk, of zelfs maar relevant (lang niet ieder programma heeft een zo uitgebreide gebruiksinterface dat deze afzonderlijk geëvalueerd zal worden).
- Het probleem vaststellen
- Het probleem opsplitsen in deelproblemen waar nodig/mogelijk.
- Mogelijke oplossingen bedenken voor alle deelproblemen, nagaan welke deelproblemen met reeds eerder ontwikkelde programmatuur kunnen worden opgelost,
- Gebruikersinterface vastleggen.
- Een testversie maken met alleen de gebruikersinterface
- Gebruikersinterface testen op gebruiksvriendelijkheid
- Functionaliteit programmeren (soms met gebruik van verschillende programmeertalen)
- Programmacode documenteren
- De door mensen leesbare code in uitvoerbare code omzetten, door middel van compileren.
- Het deelprogramma testen om te kijken of het in alle toelaatbare omstandigheden werkt. Anders terug naar stap 7.
- Deelprogramma's samenvoegen en weer (uitgebreid) testen om te kijken of het totale programma ook in alle toelaatbare omstandigheden werkt. Anders terug naar stap 7.
- Handleiding schrijven
- Cursus ontwikkelen
Deze stappen worden in grotere projecten doorgaans niet door dezelfde personen genomen. Bovendien worden niet al deze stappen uitgevoerd voor elk stuk software. Voor typische server software geldt over het algemeen dat er geen gebruikersinterface is in de betekenis zoals die hierboven wordt gebruikt.
De ervaring leert dat in dit traject het feitelijk programmeren, ook wel de implementatie genoemd, slechts 30 tot 35% van de tijd in beslag neemt. Een andere ervaring is dat waar 1 programmeur 1 maand voor nodig heeft, doen 2 programmeurs in 2 maanden; de stap naar teamwerk is een heel grote stap die in een niet al te groot project vaak averechts werkt. Een veelgebruikte benaming voor dit verschijnsel is de 'mythical man month'. Een vergelijking die vaak wordt gebruikt is dat 1 zwangerschap niet sneller kan verlopen door 9 vrouwen tegelijkertijd zwanger te laten zijn. Dit verschijnsel is een manifestatie van de onmogelijkheid om een bepaalde taak in kleinere taken onder te verdelen. Op een bepaald moment is de inspanning om te communiceren met de andere leden van een team zo groot dat de productiviteit van het totale team terugloopt als er meer mensen aan het team worden toegevoegd.
Berucht is ook de 80/20-regel: 80% van de applicatie wordt geschreven in 20% van de tijd. 80% van de tijd is nodig om de resterende 20% functionaliteit te ontwikkelen. In de praktijk betekent dit ook zoveel als: software is nooit af.
Ontwikkelmethodes
Een softwareontwikkelmethode wordt gebruikt om het ontwikkelproces systematisch aan te pakken. De hierboven beschreven stappen hebben binnen de verschillende ontwikkelmethodes hun eigen plaats. Ontwikkelmethodes zijn in te delen in categorieën:
- watervalmethodes
- iteratieve methodes
Een watervalmethode bestaat uit een aantal stappen die na elkaar worden doorlopen. Het eindresultaat van een stap is het beginpunt voor de volgende stap. Dit is de klassieke manier om automatiseringsprojecten aan te pakken. Een nadeel van deze methode is de doorlooptijd die nodig is om tot het eindresultaat te komen. Bovendien wordt uitgegaan van de veronderstelling dat bij de start van een project alle eisen en wensen bekend zijn. In de praktijk is dit over het algemeen niet het geval.
Iteratieve methodes lijken op watervalmethodes, maar gebruiken iteraties om delen van de functionaliteit te bouwen. Zo kan bijvoorbeeld eerst de functionaliteit rond de invoer van gegevens worden gemaakt en getest, waarna verder wordt gegaan met een iteratie waarin de uitvoer wordt gebouwd. Door deze onderverdeling in kleinere delen is het gemakkelijker om in te spelen op wijzigende eisen en wensen. Daarbij is de planning beter te controleren.
In de praktijk zijn verschillende methodes te combineren. Niet elke stap uit een bepaalde methode is verplicht. Wel wordt elke stap methodisch uitgevoerd, het mag nooit zoiets zijn als 'we rommelen maar wat aan, en als het werkt zijn we blij', wat bij amateur-programmeurs wel regelmatig voorkomt.
Voorbeelden van softwareontwikkelmethodes zijn eXtreme Programming en Rapid Application Development.
Hulpmiddelen
Programmeren
Voor het maken van de software gebruikt de programmeur verschillende hulpmiddelen:
- een teksteditor om de bron-tekst te schrijven.
- een of meerdere codegenerators om vanuit een eenvoudige brontekst of database bron-tekst automatisch te genereren.
- een compiler om (delen van) het programma naar machinetaal te vertalen, eventueel een assembler, soms een interpreter.
- een archiver en een linker om alle delen samen te voegen zodat een uitvoerbaar programma of een programma bibliotheek ontstaat.
- een verscheidenheid aan test-tools om regressie testen mee uit te voeren, aan profiling te doen en meestal een debugger waarmee de programmeur gericht technische fouten op het spoor kan komen en verhelpen.
- een version control systeem voor het bijhouden van wijzigingen in - en verschillende versies van onderdelen van de software.
- een Defect-database om problemen te managen (zoals Bugzilla).
Soms maakt een programmeur gebruik van een geïntegreerde ontwikkelomgeving (IDE) waarin teksteditor, compiler, debugger en vele andere softwareontwikkelgereedschappen geïntegreerd zijn. Hierdoor is de ontwikkelcyclus 7 tot 11 soms drastisch te versnellen.
Veel IDE's zijn voor slechts 1 technologie, vaak van dezelfde leverancier, geschikt. Enkele IDE leveranciers bieden hiervoor een oplossing, waarmee in 1 IDE met verschillende compilers of debuggers gewerkt kan worden.
Projectmanagement
Om het hele softwareontwikkelproces te beheersen wordt vaak gebruikgemaakt van algemene projectmanagementsoftware, zoals programma's om Gantt-charts te maken, kosten te beheersen en communicatie binnen een groep te faciliteren (Group Support Systems). Om bij te houden welke fouten zijn gevonden en opgelost wordt vaak een issue tracker gebruikt.