Twee prima keuzes voor beginners

Wil je leren programmeren, maar weet je niet goed welke taal te kiezen? Onder Linux zijn Bash en Python twee erg populaire keuzes. Met deze korte vergelijking tussen beide talen maak je een weloverwogen keuze!

Auteur Filip Vervloesem

Uiteraard zijn Bash en Python geen rechtstreekse concurrenten van elkaar. Python is een echte programmeertaal met erg uitgebreide mogelijkheden, maar ook een zekere leercurve. Je moet dus wat tijd uittrekken om ermee te leren werken. Bash ken je natuurlijk als de shell die je gebruikt in de terminal. Meestal gebruik je bash interactief, waarbij je één of meerdere commando’s uitvoert via de opdrachtprompt. Maar Bash kent ook specifieke functies die je helpen om eenvoudige programma’s te schrijven, die we (shell) scripts noemen. Voor heel wat taken voldoen dit soort scripts prima. Maar wat zijn nu in praktijk de verschillen tussen Bash en Python?

Bash

Bash is veruit het makkelijkst om te leren, vooral als je al ervaring hebt met de commandline. In zijn eenvoudigste vorm is een shell script niet meer dan een opeenvolging van opdrachten die je op de commandline zou uitvoeren. Je hoeft dus letterlijk niets extra te leren om je eerste script te schrijven! Het voordeel van zo’n script is natuurlijk erg beperkt: het bespaart je enkel wat tikwerk. Maar het leuke aan shell scripting is juist dat je érg makkelijk kunt beginnen, om daarna gaandeweg -naarmate je beter leert programmeren- je scripts te verbeteren. Voeg bijvoorbeeld variabelen toe om met for- of while-loops dezelfde code meermaals uit te voeren of if-constructies om afhankelijk van bepaalde voorwaarden andere commando’s te starten. Heb je dat onder de knie? Dan lees je argumenten in vanaf de commandline om je script flexibeler te maken of schrijf je functies binnen je script om de code compact en leesbaar te houden.

Externe commando’s

Shell scripting steunt sterk op externe commando’s voor de gewenste functionaliteit. Bash zelf bevat eigenlijk hoofdzakelijk de ‘lijm’ die nodig is om verschillende commando’s aan elkaar te ‘plakken’. Dat heeft zowel voor- als nadelen. Het voordeel is dat je met Bash bijna alles kunt scripten: afbeeldingen bewerk je met ImageMagick, geluidsbestanden met SoX, data ophalen van internet doe je via cURL, zoeken en vervangen in teksten doe je met grep en sed, enzovoorts. Ken je die commando’s al? Dan is jouw script erg snel klaar. Je hoeft je dan enkel te concentreren op logica rond de verschillende commando’s. Bash scripts zijn echter niet altijd even snel. Doordat Bash steeds externe commmando’s moet starten, gaat er veel tijd verloren. Dat merk je vooral als je bijvoorbeeld grote hoeveelheden data inleest van tekstbestanden en daarmee aan de slag gaat. Ook in langere en complexere programma’s loop je vroeg of laat tegen de limieten van Bash aan.


Bash bevat een aantal ingebouwde functies die van pas komen om scripts te schrijven.

Python

Python is van een heel ander kaliber dan Bash. Hoewel het één van de gemakkelijkere programmeertalen is om te leren, ligt de drempel wel degelijk hoger dan bij Bash. Dat komt voor een groot deel omdat jouw kennis van de commandline weinig relevant is voor Python. Natuurlijk kun je in Python nog steeds externe commando’s starten, zoals bijvoorbeeld ImageMagick. Maar dat is eigenlijk geen goede manier van programmeren, omdat je zo veel van Pythons voordelen verliest. Wil je afbeeldingen verwerken in Python? Dan kun je het beste op zoek gaan naar een Python module met die functionaliteit, bijvoorbeeld Pillow. Vervolgens moet je de documentatie ervan lezen om ermee aan de slag te gaan. Dus ook al ben je een expert in ImageMagick, voor jouw Python programma moet je leren werken met Pillow en dat kost natuurlijk tijd. Dat geldt trouwens voor alle mogelijke opdrachten die je al in de shell kunt uitvoeren. Bestanden zoeken, inlezen, hernoemen, verplaatsen, comprimeren, enzovoorts: je moet het allemaal opnieuw leren in Python!

Eindeloze functionaliteit

Het goede nieuws is dat er erg veel Python modules beschikbaar zijn. Wil je een bepaald probleem oplossen in Python? Dan is de kans groot dat er daarvoor al een module bestaat. Je hoeft dus niet meer alles zelf te programmeren, maar je maakt optimaal gebruik van bestaande code. Sommige modules zijn echter behoorlijk uitgebreid. Voor beginners is het dan ook niet altijd even gemakkelijk om zulke modules in hun eigen code te gebruiken. Maar dat is op zich geen nadeel: wellicht vind je ook een minder complex alternatief voor die module. Ook de basisfunctionaliteit van Python is heel wat uitgebreider dan die van Bash. Terwijl je jezelf bij Bash soms afvraagt of iets wel mogelijk is, moet je bij Python jezelf eerder afvragen of jouw kennis wel toereikend is. Je loopt waarschijnlijk sneller tegen je eigen beperkingen aan dan tegen die van Python!

Documentatie

Ook qua documentatie is er een groot verschil tussen Bash en Python. Bash is erg gemakkelijk te leren: de manpage is een 6000-tal regels lang en die bevat letterlijk àlles wat er te leren valt over shell scripting. Het is misschien niet de meest uitnodigende lectuur voor beginners, maar het doet wel prima dienst als naslagwerk. Op internet vind je talloze tutorials om te starten met shell scripting. Nieuwe versies van Bash verschijnen slechts om de paar jaar en ze bevatten meestal minimale aanpassingen. Dat maakt dat je zelfs voorbeeldscripts van 20 jaar geleden meestal klakkeloos kunt overnemen en aanpassen.

Python 3

Bij Python moet je iets beter uitkijken, want scripts voor Python 2 werken niet in Python 3. Beide versies hebben erg lang naast elkaar bestaan: de eerste Python 3-versie verscheen in 2008, maar pas in 2020 viel definitief het doek voor Python 2. Als beginner start je nu uiteraard met Python 3, maar op internet vind je nog erg veel voorbeelden voor Python 2. Het is niet altijd even gemakkelijk om in te schatten of Python voorbeeldcode nu wel of niet zal werken op jouw systeem. Een tweede nadeel is dat er voor de meeste problemen verschillende oplossingen bestaan in Python. Bij een zoektocht op internet stoot je zo geregeld op Python code die jouw petje als beginner helemaal te boven gaat, terwijl er misschien wel een eenvoudiger alternatief bestaat. Soms is het dus even zoeken naar een geschikte oplossing voor jouw probleem. Dat neemt niet weg dat er een schat aan informatie over Python beschikbaar is op internet. Dat is natuurlijk erg handig!


Dankzij talloze modules zijn Pythons mogelijkheden vrijwel eindeloos.

Snel of grondig

Voor eenvoudige automatiseringstaken is een shell script meestal de snelste oplossing. Je hoeft je niet te verdiepen in de syntax van allerlei onbekende modules, maar gebruikt gewoon de tools die je kent van de commandline. Bij grotere scripts kom je echter vroeg of laat in de problemen: de beperkte functies van Bash maken de zaken omslachtiger dan nodig. Je moet nog veel te veel code zelf schrijven of het draait gewoon allemaal niet snel genoeg. In dit soort gevallen biedt Python uitkomst. Het kost misschien wat meer tijd om je in te werken, maar de mogelijkheden zijn echt eindeloos. Reiken je ambities verder dan relatief eenvoudige scripts? Dan kun je niet om Python heen!