Zo ging het niet helemaal. Er was wel een soort survival of the fittest, maar dat een commando helemaal geoptimaliseerd is voor een bepaalde taak is juist de filosofie van Unix. Het idee was dat je beter een programma kunt habben wat een ding heel goed doet, dan een programma dat veel dingen maar matig kan doen.
Het punt dat ik probeer te maken is dat veel van die tools hun eigen pad hebben gevolgd zonder rekening te houden met wat andere tools doen (of vooral, hoe de interface werkt). Ze zijn individueel geoptimaliseerd voor hun taak. Dat maakt die commando's heel krachtig maar het gaat wel ten koste van de onderlinge consistentie. Alle tools zijn geoptimaliseerd voor hun eigen taak maar ze zijn niet geoptimaliseerd om samen een consistent geheel te vormen.
Zo worden de korte opties door ieder commando anders ingevuld. Voorbeeld:
- ls -c => sort by ctime
- grep -c => count matching lines
- sort -c => check for sorted output
- cut -c => select only these characters
Dit zijn veelgebruikte commando's en ze geven allemaal een andere invullig aan '-c'.
Als je die tools goed kent dan weet je wat die tool met -c bedoelt. De ervaren gebruiker weet of het nu voor "count" staat of voor "characters" of voor "check". Voor de nieuwe gebruiker is het echter totaal onverspelbaar en verwarrend dat die betekenis zoveel kan verschillen. Met de lange opties gaat het beter maar die zijn omslachtigert om in te tikken.
Het kost tijd om al die commando's en hun opties te leren. Als je er veel gebruik van maakt betaalt dat zichzelf terug maar het maakt het wel minder toegankelijk. Wanneer je zo'n hele omgeving nieuw ontwerpt zou je waarschijnlijk kiezen om opties overal hetzelfde te laten werken zodat je iedere optie maar één keer hoeft te leren zonder ambiguiteit, zoals powershell heeft gedaan (of in ieder geval geprobeerd). Het gevolg daarvan is dan wel dat tools minder geoptimaliseerd zijn voor één specifieke taak maar ook een beetje rekening houden met alle andere gereedschappen in de kist.
Op papier is het veel makkelijker om één consistente set commando's te leren die allemaal dezelfde interface volgen dan een hoop commando's die allemaal hun eigen userinterface hebben.
In praktijk zijn veel van die unix-commando's zo'n goede match voor het probleem dat ze oplossen dat het ook makkelijk en logisch is om een paar eenvoudige opties te leren die binnen de context van die tool goed te begrijpen zijn, zoals 'grep -c' en 'count -c'. 'sort -c' en 'ls -c' heb ik moeten opzoeken, ook al ben ik een professional met 25 jaar ervaring met de unix-commandline.