Systeemprogrammeren Desktopsoftware programmeren Web programmeren Bibliotheek(Library)/Platform/Framework/Core programmeren Gedistribueerde toepassingen programmeren Computerwetenschapper worden
Systeemprogrammeurs krijgen te maken met de wetenschap van het programmeren, niet met de specifieke implementatie ervan. Beperk je niet tot een specifiek platform.     Dit kan je als volgt  doen:  Leer hoe besturingssystemen worden geïnstalleerd. Leer hoe je meerdere verschillende besturingssystemen op 1 PC installeert (optioneel, maar aanbevolen). Installeer meer dan één besturingssysteem. Installeer niet alle hulpprogramma's op de systemen; gebruik liever de kale functionaliteit geboden door het besturingssysteem.   Later zal je de assembly leren van andere platforms/systemen.  Besteed vooral veel aandacht aan de Standard Template Library (STL) en misschien de Active Template Library (ATL).     Dit zal gemakkelijker zijn als je een op Unix gebaseerd besturingssysteem kiest. Het begrijpen van het systeem waar je mee werkt zal je later goed van pas komen. Maak eerst wat kleine hulpprogramma's. Meestal is het handig om het volgende te doen:   Proberen om kleine tools te maken die al op je systeem aanwezig zijn. Proberen om utilities die beschikbaar zijn in besturingssystemen om te zetten naar die van jou. Dit is het enige veld waarbij de eerste programmeer taal van belang is. Leer eerst ANSI C  en niet C++, C# of Java en ook niet niet D. Leer daarna pas C++. De beperking tot C is omdat systemen programmeren vereist dat de programmeur vertrouwd is met de volgende concepten:  Daadwerkelijke en volledige compilatie van de broncode. Low-level object uitvoerbestanden. Het koppelen van binaries. Low-level machinetaal/assembly programmeren. De C-taal wordt door sommigen wel beschouwd als een vermomde of makkelijker te leren vorm van assembly. Het ondersteunt ook het invoegen van assemblercode in de C-code wanneer dat maar nodig is en het is alleen maar  procedureel (net zoals assembly). De meeste van deze programmeurs schrijven code voor zakelijke toepassingen, dus is het verstandig om een idee te hebben van de zakelijke omgeving, hun organisatie- en financiële structuur, zodat je veel tijd kunt besparen. Een introductiecursus digitale elektronica en andere computerarchitectuur is handig; maar dit kan wat te veel zijn om mee te beginnen, dus kan het lezen van een aantal inleidende tutorials (zoals  deze en deze) eerst volstaan. Je kunt terugkeren naar deze stap, nadat je een eerste programmeertaal hebt geleerd. Voel je niet te goed om een dergelijke taal te leren omdat je geen kind meer bent. Een voorbeeld van een dergelijke programmeertaal is Scratch. Deze programmeertalen kun de leercurve wat minder stijl maken als je net begint. Maar deze stap blijft optioneel. Je kunt dit ook doen voor de vorige stap.  Ongeacht de taal die je kiest in een later stadium, je zal er op een zeker niveau procedureel programmeren voor nodig hebben. Ook wordt procedureel programmeren beschouwd als het gemakkelijkst om mee te beginnen bij het krijgen leren begrijpen wat programmeren is.  Je kunt gebruik maken van de oefeningen in boeken over programmeren. Gebruik hiervoor een programmeeromgeving geschikt voor de programmeertaal van je keuze. Zorg dat je de onderstaande concepten goed begrijpt en dat je deze met relatief gemak kunt toepassen voor je verder gaat:  Invoer en uitvoer van gegevens van en naar gebruikers van het programma. De logica en de volgorde van bewerkingen van procedurele programma's. Declareren, toewijzen en vergelijken van variabelen. Constructies als If..then..else en Select/switch..case. Lusconstructies zoals While..do, Do..while/until, For..next. De syntax van je programmeertaal voor het maken en aanroepen van procedures en functies. Datatypen en het manipuleren ervan. Door de gebruiker gedefinieerde datatypen (records/structs/units) en hoe ze te gebruiken. Als je taal overloading functies gebruikt, probeer die dan te begrijpen. De manier waarop je programmeertaal het geheugen aanspreekt (pointers, peeking, etc.) Als je taal operators overloading, probeer dat dan te begrijpen. Als je taal delegates/function pointers gebruikt, begrijp hoe het werkt.  Het is aan te bevelen om 1 programmeertaal van elk paradigma te leren, en de meeste gevorderde programmeurs doen dat ook. Maar meestal begin je met één taal, werk je daar een tijd mee om je kennis toe te passen en te oefenen, waarna je een volgende leert. Probeer één van de volgende programmeersoorten:  Logisch programmeren. Functioneel programmeren. Object-georiënteerde paradigma's. Weeg de sterke en zwakke punten tegen elkaar af. Meestal doe je het volgende:  Neem eenvoudige voorbeelden van je eerdere werk in de eerste programmeertaal en herschrijf dit met je tweede programmeertaal. Creëer een nieuw project en probeer deze in beide talen te implementeren. Soms, afhankelijk van het project en de taal, zal het niet mogelijk zijn om een project uit te voeren! Schrijf een cheatsheet of overzichtstabel met vergelijkingen tussen soortgelijke constructies in de twee talen en functies die uniek zijn voor elk van de talen. Proberen manieren te vinden om functies na te bootsen die uniek zijn voor één van de twee talen met behulp van de andere taal. Bijna alle programmeertalen hebben versies/bibliotheken die ondersteuning bieden voor visuele programmering en anderen ondersteunen console of console-achtige programmering. Dit kan worden bereikt door het volgende te doen:   Zorg dat je een introductie krijgt in event-driven programmeren. Het meeste visuele programmeren is op zekere hoogte afhankelijk van events en event handling (met behulp van de gekozen programmeertaal). Probeer zo veel desktopsoftware als je kunt en leer begrijpen wat de software doet. De meeste softwarebedrijven bieden betaversies van hun producten die je kunt gebruiken om de software te testen. Probeer de ontwikkeling van gebruikersinterfaces bij te houden. Lees artikelen of tutorials over grafische gebruikersinterfaces. Probeer je  programmeerervaring uit op problemen waarmee je in het dagelijkse leven te maken krijgt. Bijvoorbeeld het schrijven van programma's die grote aantallen bestandsnamen tegelijkertijd kan wijzigen, tekstbestanden visueel vergelijkt, de namen van bestanden in een directory naar het geheugen of een tekstbestand kopieert, enz. Houd het eerst eenvoudig. Vul dit aan tot het einde, met toepassing van de technieken voor visuele programmering die je tot nu toe hebt geleerd.   Dit zal zeer nuttig zijn voor programmeurs die aantrekkelijke gebruikersinterface-elementen willen schrijven. Games programmeren wordt beschouwd, in de meeste gevallen, als desktop programmeren. Als je van plan bent om een game-programmeur te worden, moet je meer te leren over het programmeren van games na het volgen van deze stappen. Een grafische cursus is een must voor game-programmeurs en de tweede taal van keuze in de vorige stappen moet een logische/functionele programmeertaal zijn (bij voorkeur Prolog of Lisp). Webapplicaties zijn softwareonderdelen die zijn ontworpen om te werken aan de top van de internet-architectuur. Dit betekent dat de toepassingen toegankelijk zijn via browsersoftware zoals Firefox of Internet Explorer. Gebouwd zijn voor de top van de internetarchitectuur betekent niet noodzakelijkerwijs dat een actieve verbinding met het internet vereist. Het betekent dat webapplicaties zijn gebouwd op de top van standaard webtechnologieën zoals:  HTTP FTP POP3 SMTP TCP IIP-protocollen HTML XML Coldfusion ASP JSP] PHP ASP.NET (Klik met de rechtermuisknop en klik vervolgens op View Source of druk op F12.) Zoek naar diversiteit in het type/content van de website, niet het aantal website dat je bekijkt. Over het algemeen zal je tenminste 1 van elk van de volgende type websites moeten bekijken:   Corporate presence sites (commerciële bedrijven, non-profit bedrijven/organisaties, overheidsorganisaties) Web-indexing engines (zoekmachines, meta zoeksites, gespecialiseerde zoekmachines, directories) Datamining sites Persoonlijke sites Informatieve/encyclopedische pagina's (wiki's, informatiebladen, technische specificaties en handleidingen, blogs en dagboeken, nieuws en sites van persbureaus, gouden gids, enz.) Sociale media (sociale portalen, bookmarking sites, sites voor het maken van aantekeningen) Samengestelde websites (hierbij inbegrepen andere categorieën zoals wiki's en blogs) Bijvoorbeeld: brainstormschema's en MS Visio. Hierbij maak je conceptuele webdiagrammen, sitemaps en navigatiestructuren. Probeer in ieder geval één beeldbewerkingsprogramma te leren gebruiken (optioneel, maar sterk aanbevolen) Dit heeft onder andere te maken met een globaal idee van:   Onderliggende Webservices protocollen (HTTP, FTP, SMTP, and POP3 or IMAP4) Webserver software (bij voorkeur voor het platform waarmee je meestal werkt) Webbrowsing software. E-mailserver en clientsoftware Ook is het verstandig om een "What You See Is What You Get (WYSIWYG)" softwarepakket voor het bewerken van HTML te leren gebruiken.   De meeste gebruikers leren JavaScript. Sommige leren VBScript, but dit is niet compatible met de meeste browsers. Probeer je potentieel te bereiken met alleen die taal. Ga alleen dan verder met de volgende stap tot je op z'n minst bekend bent met de client-side scripttaal. Als je jezelf wilt beperken tot 1 vorm van server software, leer dan één van de programmeertalen die door die software worden ondersteund. Zo niet, leer dan tenminste één programmeertaal voor elke server software.   Core programmeurs zijn met name gevorderde programmeurs die de overstap hebben gemaakt van het programmeren van applicaties naar het programmeren van code units die gebruikt kunnen worden door andere programmeurs.  De meeste ontwikkelaars van bibliotheken gebruiken één van deze of beide.  Hoe meer programmeerparadigma's en talen je kent, des te succesvoller zul je zijn als bibliotheek-/library-/pakketprogrammeur.   Probeer waar mogelijk standaardcode te gebruiken. Dit is handig tijdens de beginfase van het worden van een bibliotheek-/pakketprogrammeur. Begin met eenvoudige pakketten zoals eenhedenconversie en niet al te moeilijke wetenschappelijke berekeningen. Als je een student bent, maak dan gebruik van de vakken die niet over programmeren gaan, om vergelijkingen en wetenschappelijke kern in programmabibliotheken te vatten. Download eerst binaries/executables van het pakket. Probeer ze te gebruiken en zoek de sterke en zwakke punten. Ben je daarmee klaar, download dan de broncode en probeer uit te vinden hoe het is gemaakt. Probeer die libraries/bibliotheken na te maken, of delen ervan. Doe dat eerst nadat je de code hebt bestudeerd en later voordat je de code heb gezien. Probeer nog weer later om deze bibliotheken te verbeteren. Gewoonlijk hebben bibliotheek-/pakketprogrammeurs de neiging om recursief en/of iteratief te denken als ze een probleem moeten oplossen. Probeer aan elk probleem te denken als een verzameling van kleinere problemen (een opeenvolging van eenvoudiger taken) of als een herhaald proces van het verkleinen van de omvang van het probleem tot kleinere deelproblemen, waarna de deze deelproblemen op elkaar worden gestapeld. Bibliotheek-/pakketprogrammeurs hebben de neiging om te generaliseren. Dat wil zeggen dat ze, wanneer ze een eenvoudig specifiek probleem voorgeschoteld krijgen, ze meestal gaan denken aan een meer algemeen probleem en proberen dat algemene probleem op te lossen, waardoor automatisch het kleiner probleem ook wordt opgelost. Distributed application programmeren wordt door velen beschouwd als het moeilijkste om te leren en vereist kennis van diverse computer en communicatietechnologieën. De stap is optioneel. Maar het is erg handig als je netwerktopologieën wilt leren begrijpen.  Je hebt een goed begrip nodig van  het Open Systems Interconnection (OSI) model, Ethernet, IP, TCP, UDP en HTTP voor je distributed applications kunt gaan programmeren.  Onder Windows zou dat elk script zijn dat werkt met  de Windows Scripting Host. Onder Linux zijn dat Bash scripts en Perl. JavaScript wordt sterk aanbevolen voor beide systemen, om de volgende redenen:   Het wordt ondersteund door bijna elke scripting host in welk besturingssysteem dan ook  (Windows Scripting Host ondersteund JavaScript standaard, de meeste Linux distributies hebben een pakket voor JavaScript scripting console ondersteuning). Het wordt door veel ontwikkelaars beschouwd als gemakkelijker om te leren. Het heeft een van ALGOL afgeleide syntax waardoor je sneller vertrouwd raakt met andere programmeertalen als je een tweede programmeertaal gaat kiezen (C, C++, C#, Java en J# zijn allemaal afgeleid van de ALGOL syntax). Door het leren van JavaScript raak je bekend met client-side scripting van webpagina's, wat meteen een bonus is! Later kun je meer geavanceerde programmeertechnieken gaan gebruiken en paradigma's afhankelijk van je scripttaal en wat het ondersteund. Alle scripttalen hebben wel een bepaalde aspecten van procedureel programmeren. Leer wat nodig is om dat te doen is. Eenvoudige communicatie volstaat. Bij voorkeur een die een multi-paradigmataal is zoals Python. Volg een eenvoudige inleiding tot die tweede taal. Java wordt gezien door de meeste programmeurs als de taal van keuze om vele redenen. Maar, C# wint op dit gebied snle terrein. Java en C# verdienen de voorkeur om de volgende redenen:  Het zijn objectgeoriënteerde programmeertalen die programmeurs in grote teams afschermen van implementatiedetails omdat beide componenten ondersteunt (blokken code, gecompileerd, die een bepaalde taak uitvoeren en kunnen worden gebruikt in andere programma's). Zij ondersteunen gebeurtenis-gedreven (event-driven) programmering, naast OO en procedurele programmering tot op zekere hoogte. Het framework waarop de taal is gebouwd wordt van gedistribueerd (in het geval van Java). De beschikbaarheid van veel kant en klare pakketten die te maken hebben met netwerken, zowel als open-source code en (framework) ingebouwde pakketten; Dit maakt het gemakkelijker voor programmeurs voort te bouwen op het werk van anderen. Minder aandacht wordt besteed aan de gebruikersinterface-elementen zoals uitvoer, vensterontwerp en technieken, en de gebruikersinterface-elementen. Dit kan gedaan worden met behulp van boeken, online tutorials of academische cursussen. Inzicht in de architectuur van gedistribueerde toepassingen en haar concepten is echter noodzakelijk.  Het wordt aanbevolen dat je ten minste een inleiding volgt in elk van deze. De meeste programmeurs van gedistribueerde toepassingen stoppen niet bij één of twee programmeertalen, maar leren ten minste één programmeertaal voor elk besturingssysteem. Dat is omdat als je wilt dat je toepassingen worden "gedistribueerd", je ten minste een versie moet aanbieden voor elke van de grote besturingssystemen.  Common Object Request Broker Architecture (CORBA) Simple Object Access Protocol (SOAP) Asynchronous JavaScript and XML (AJAX) Distributed Component Object Model (DCOM) .NET Remoting XML Web Services Computerwetenschappers zijn zeer gevorderde programmeurs die, in plaats van te werken aan applicaties, werken aan het ontwerpen van computertechnologieën zoals encryptie, programmeertalen en datamining algoritmes. Dit niveau kun je zelden halen zonder een academische studie en veel toewijding. Dit kun je doen middels:   Het volgen van een universitaire studie (de meest voor de hand liggende stap). Een overzicht verkrijgen van de universitaire studie en de verschillende vakken via zelfstudie doen of middels afzonderlijke cursussen. Dit kan in theorie, maar het eerste pad is aan te bevelen. Hoe specifieker, hoe beter. Dit is afhankelijk van je voorkeuren. Hier volgen een paar van de belangrijkste velden binnen de computerwetenschappen:  Ontwerp van algoritmes (zoeken, sorteren, encryptie, decryptie en foutdetectie in communicatie zijn enkele voorbeelden) Programmeertalen/compiler ontwerp/optimalisatie Kunstmatige intelligentie (patroonherkenning, spraakherkenning, natuurlijke taal verwerking, neurale netwerken) Robotica Wetenschappelijke programmering Werken met supercomputers Computer aided design/modeling (CAD/CAM) Virtual reality Computergraphics (computergraphics wordt meestal ten onrechte verward met grafisch ontwerp of grafische user interfaceontwerp. Computergraphics is het vakgebied waarbij je beeld kunt gebruiken en manipuleren in computersystemen.) Je kunt ook gaan voor een masters of doctoraat. 
Begrijp wat systeemprogrammeren inhoudt. Volg de eerste drie stappen voor desktopprogrammeurs. Volg een introductiecursus in lineaire algebra. Volg een cursus in calculus. Volg een cursus in logica en/of discrete wiskunde. Maak kennis met verschillende kale besturingssystemen. Volg een cursus (of als alternatief, lees boeken) over hardware-architectuur. Ontwikkel een goed begrip van de andere computer hardware platformen. Probeer bekend te raken met de assembleertaal van het platform/besturingssysteem van je keuze. Leer ANSI C en C++, samen met de concepten van procedureel programmeren. Begrijp en oefen met de C/C++ standard libraries op het platform van je keuze. Zoek naar online bronnen, boeken en cursussen om een begrip te krijgen van de C –variant voor jou specifieke platform. Oefen het schrijven van geavanceerde code met C en C++. Leer meer over assembly voor gevorderden. Volg een cursus voor het programmeren van besturingssystemen. Zoek naar documentatie over een specifiek platform naar keuze. Oefen je verkregen kennis. Leer de programmeertalen in de meest nuttige volgorde. Weet wat je jezelf op de hals haalt als je bezig gaat met het programmeren van desktop applicaties. Leer meer over de verschillende hardware-architecturen van computers. Leer een instap-programmeertaal. Volg een introductie in procedureel, object-georiënteerd en functioneel programmeren. Volg een introductiecursus in één van de procedurele programmeertalen. Leer in ieder geval één gevorderde vorm van modelleren, zoals UML of ORM. Begin met het schrijven van een paar kleinen console- of console-achtige applicaties. Volg een cursus voor gevorderden in de gekozen programmeertaal. Pas de geavanceerde technieken toe die je hebt geleerd. Volg een introductiecursus in tenminste 1 of meer programmeertalen in een ander programmeer paradigma. Probeer de volgende twee programmeertalen die je hebt geleerd met elkaar te combineren. Leer visuele programmeerconcepten met behulp van een van de talen die je geleerd hebt. Begin met het toepassen van je kennis door kleine softwareprojecten te ontwerpen. Maak een virtueel "afstudeerproject". Verbreedt je begrip van het visuele framework/bibliotheek/pakket dat je geleerd hebt voordat je verder gaat met meer gevorderde cursussen, en besteed extra aandacht aan details en het leren van  meer tips en trucs voor je framework van online bronnen. Zoek naar andere pakketten/bibliotheken van visuele elementen voor je programmeertalen en leer daarmee omgaan. Volg een cursus in graphics (niet grafisch ontwerp). Worden een games programmeur (optioneel). Wat houdt web programmeren in. Bekijk diverse websites om te leren hoe ze er over het algemeen uitzien. Leer tenminste 1 brainstorming techniek/methode en software gebruikt om die methode te implementeren. Leer hoe je een website opzet. Volg een korte cursus grafisch ontwerp. Leer de basis van de internet infrastructuur. Leer HTML en CSS. Leer XML en XML gerelateerde technologieën, zoals XSL en XPath (optioneel maar aanbevolen). Maak eenvoudige statische website tot je bekend bent en gemakkelijk omgaat met HTML. Leer een client-side scripttaal. Zorg dat je kunt werken met de client-side scripttaal die je hebt geleerd. Leer in ieder geval 1 server-side programmeertaal. Maak een proefproject voor jezelf na het leren van de server-side programmeertaal. Zorg dat je beschikt over een eigen website en begin met online te experimenteren op je eigen pagina. Wat is core programmeren. Leer een programmeertaal waarmee je opnieuw te gebruiken componenten/paketten kunt bouwen, als je dat al niet gedaan hebt. Volg een gevorderde cursus in UML en ORM. Volg een vak in software engineering. Leer tenminste modulaire, component-gebaseerde, object-georiënteerd en event-driven programmeertechnieken en concepten. Leer meer over de verschillende besturingssystemen en frameworks ondersteund door deze besturingssystemen. Focus je inspanningen op platformonafhankelijke frameworks, programmeertalen en technologieën. Als de programmeertalen die je hebt geleerd voldoen aan de  ANSI/ISO/IEEE/ W3C standaard versies, en probeer deze te beheersen. Proberen om eenvoudige, reeds gevestigde bibliotheken na te bootsen, met name open-source. Zoek naar open-source pakketten binnen jou werkveld. Leer de verschillende benaderingen die gebruikt worden voor het distribueren en implementeren van componenten naar en door programmeurs. Begrijp wat het programmeren gedistribueerde toepassingen is. Volg een snelle introductiecursus in telefoniesystemen en aanverwante hardware. Maak jezelf vertrouwd met netwerk-architectuur en apparaten zoals hubs, switches en routers. Volg een cursus in netwerkprotocollen en de essentie ervan. Leer XML  maak jezelf er vertrouwd mee. Begin met het leren van een shell scripttaal. Begin met procedureel programmeren met behulp van de scripttaal van je voorkeur. Gebruik de scripttaal die je geleerd hebt, om scripts te schrijven die communicatie tussen machines uitvoeren. Maak de overstap naar desktopscripts/programmeertalen. Ze concentreren zich meer op de kernfuncties van de taal, met name die ter ondersteuning van netwerken. Volg een cursus over het ontwerp van gedistribueerde toepassingen en platforms. Leer over het bouwen en onderhouden van componenten en diensten met behulp van de  programmeertaal van je keuze. Leer een of meer van de volgende technologieën. Wat doen computerwetenschappers. Doe de wetenschappelijke kennis op die gelijkwaardig is aan een vierjarige universitaire studie computerwetenschappen. Een specialisatie kiezen. Overweeg het behalen van een academische graad. Leer de technologieën en programmeertalen met betrekking tot je vakgebied als programmeur.
https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer https://www.wikihow.com/Become-a-Programmer
System Programming Desktop Application Programming Web Programming Library/Platform/Framework/Core Programming Distributed Applications Programming Programming Science