[linux] programmeer prrogramma

Daniel C. von Asmuth asmuth op bakunin.xs4all.nl
Ma Jan 15 16:39:18 CET 2018


Aldus schreef Paul Slootman op Mon, Jan 15, 2018 at 09:10:49AM +0100:
> On Sun 14 Jan 2018, paai wrote:
> > On 14-01-18 17:55, M.A. Perry wrote:
> > > Een kort advies: kies voor Python.
> > > 
> > > C/C++ met hun gebruik van "pointers" (en geheugenbeheer) is
> > > een vuurdoping voor een beginner.
> > 
> > een 'doping' in de zin dat je er veel sneller mee kunt en dat het verslavend
> > werkt...

Je kunt dingen met pointers die in Fortran, BASIC of COBOL niet kunnen. 

> Ik vind C ook veel meer lijken op andere talen zoals pascal, perl, php,
> java dan Python. Ik vind het ook bijzonder dat nog niemand perl of php
> genoemd heeft. Nu is php niet de mooiste taal, maar wel de makkelijkste
> vind ik. En je kunt er snel een web dingetje mee programmeren.

Ik zou PHP niet gebruiken. Veel last van SQL injection en zo. Python is 
inderdaad door een Hollander uitgevonden, net als Clean en Lawine. 

> Python vind ik aardig afwijken van andere talen, met z'n
> indent-gevoeligheid; met COBOL moest je ook rekening houden met leading

Dan heb je meteen het voornaamste verschil met Ruby benoemd. Het gebruik
van indentatie om blokstructuur aan te duiden (zodat je geen BEGIN en
END of { en } meer nodig hebt) vind je ook bij Occam. Verder zijn er
plenty talen die een regeleinde als statement einde gebruiken. Een groot
nadeel van Ruby en Python en Matlab is 'duck typing': variabelen en functie
parameters hebben er geen type/klasse (enkel een naam), waardoor ze
waarden van elk type kunnen aanduiden, zodat je telkens moet controleren
van welk type ze zijn. Als x een variabele is waarvan je de method 
x.sin() wilt aanroepen dan maakt het uit of die tot de klasse Angle of
Christian behoort. 

> whitespace... en wat ik van Python programma's gezien heb is het vooral
> de kunst van bestaande modules aan elkaar knopen ipv. zelf wat maken.
> Maar misschien ben ik wat bevooroordeeld :)

Inderdaad is Whitespace een programmeertaal 
https://en.wikipedia.org/wiki/Whitespace_%28programming_language%29

Het voordeel van een populaire programmeertaal is dat er dankzij het
Open Source principe veel bestaande libraries beschikbaar zijn, waardoor
je veel minder zelf hoeft te programmeren. 

> Ik gebruik dus doorgaans php voor web applicaties, perl als tekst
> verwerkt moet worden, C als het een lean&mean systeemprogramma moet
> zijn. Met een beetje discipline is de C memory management geen enkel
> probleem, en dan schrijf je ook correcte en efficiente code.

Je moet altijd correcte en efficiënte code schrijven, maar de snelheid
verschilt. C en Fortran zijn net zo snel als Assembly Language, terwijl
shell scripts langzaam zijn doordat ze telkens nieuwe processen moeten
starten. 

> Soms kom je met bash ook een heel eind als je iets moet maken.

Jawel, maar meer iets voor gevorderden. 

> Grote voordeel van java zou zijn de automatisch memory management;
> overal waar ik met java applicaties te maken heb gehad is het grootste
> pijnpunt altijd garbage collection geweest omdat zo'n app altijd groeit
> totdat de maximaal toegestane hoeveelheid geheugen verbruikt is en
> vervolgens java zich 90% van de tijd bezig is om geheuegn op te ruimen.
> Je moet eens kijken op hoeveel manieren de garbage collection te tunen
> is...

Een object in Java is zoiets als een pointer naar een 'structure' /
'record' variabele. Java is langzamer en voor real-time applicaties is
het onhandig dat ze garbage collection willen doen op onvoorspelbare
momenten. Als je programmeur wilt worden word je verondersteld behalve
de taal nog een dozijn frameworks te kennen die het maken van websites
vereenvoudigen. Als je Ruby kent dan verwachten ze dat je ook RAILS
beheerst. Leren hoe je een Linux webserver beheert is dan ook nuttig. 

In tegenstelling tot Paai zou ik adviseren om een eenvoudige eerste taal
te kiezen (iets gevorderder dan Scratch) en de keuze van je tweede taal
van de toepassing te laten afhangen.

Voor de beginner is 'Principia Mathematica' van Russell en Whitehead een
goed boek en voor de gevorderde 'The Art of Computer Programming' van
Knuth (je kunt er zomaar tien jaar aan besteden).

De meeste genoemde talen zijn imperatief - in de loop der tijd zou je er
minstens 1 van die soort moeten leren. Functioneel programmeren is niet
altijd een goede oplossing. Het nadeel van imperatieve talen is dat ze
je dwingen om een algoritme te formuleren in termen van grote aantallen
stappen die de computer in een vaste volgorde moet afwerken in plaats
van functies met een bepaalde input (argumenten) en output (resultaten),
die je samenstelt uit (evt. recursieve) aanroepen van andere functies. 
Om je programma te verifiëren moet je de enigszins ingewikkelde
bewijsregels van Hoare en Dijkstra leren, die gebaseerd zijn op
predicatentransformaties. (maar dat weten die arme Syrische
vluchtelingen niet die denken dat ze worden opgeleid tot programmeurs).


Met vriendelijke groet,



Daniel von Asmuth

-- 
	
		Geeks of a feather cruft together
		


Meer informatie over de Linux maillijst