Ich glaube, es ist eher eine Frage davon, ob jemand sorgfältig arbeitet oder nicht. Es ist fraglos möglich, mit Tabs und auch mit Spaces zur Einrückung Code zu schreiben, der von der Form her korrekt ist.
Ich habe beispielsweise kürzlich was mit dem R-Quiz von @Felix Riesterer gebastelt. Ich nehme das als Beispiel, weil Felix auch hier im Thread gepostet hat und weil der Code Tabs nutzt. (Disclaimer: Ich bin überzeugter Spaces-Nutzer.) Ich habe mir vorhin spaßeshalber den Code in Sachen Einrückungen angesehen, und der Code ist bis auf ein oder zwei geschenkte Kleinigkeiten in der Hinsicht absolut einwandfrei.
Das ist nur leider in meinem Job-Alltag nicht der Normalfall, ohne mich als exemplarisch bezeichnen zu wollen. Ich arbeite jedenfalls oft mit bestehendem Code, der oft eine wilde Mischung aus Tabs und Spaces enthält. Das sieht ständig so aus:
(Die Pfeile sind Tabs, die Punkte sind Spaces.)
Das ist natürlich hochgradig falsch, aber es sieht korrekt aus, solange niemand was an der Einstellung ändert, dass die Tab-Weite genau 4 Leerzeichen entspricht.
Ich bin deshalb schon allein (aber nicht ausschließlich) aus pragmatischen Gründen für die reine Nutzung von Spaces. Code, der nur Spaces nutzt, sieht immer falsch aus, wenn er falsch eingerückt ist. Bei der Nutzung von Tabs sieht man die Fehler nicht, wenn man nicht-druckbare Zeichen nicht anzeigen lässt oder keine andere Tab-Weite eingestellt hat. Deshalb entstehen dann so Sachen wie auf dem Screenshot oben. Das ist keine Boshaftigkeit, und ich würde es nicht mal als „Inkompetenz“ bezeichnen. Es passiert bloß einfach.
Ich sage nicht, dass man das mit Tabs nicht auch richtig machen kann. Ich stimme durchaus zu, dass es nicht an Tabs liegt, sondern am Anwender, der keine ausreichende Disziplin aufweist. Aber: In meiner täglichen Arbeit hilft mir diese Erkenntnis nicht. Die Leute, die den Code geschrieben haben, mit dem ich arbeite, sind durchaus Profis, die damit ihr Geld verdienen. Trotzdem entsteht ständig dieser Mischmasch.
Warum Spaces, warum nicht Tabs? Kann man nicht genauso argumentieren, dass das Problem die Nutzung von Spaces zur Einrückung ist, obwohl man nur Tabs nutzen sollte?
Jain. Ein Argument für Spaces und gegen Tabs: Jedes Tab aus nahezu jedem Quellcode kann durch Spaces ersetzt werden, ohne dass sich an der grundsätzlichen Lesbarkeit des Codes etwas ändert. Spaces kann man hingegen nicht gänzlich entfernen, weil sie in jedem Fall innerhalb von Zeilen benötigt werden. Tabs sind aber unter fast allen Umständen völlig optional. Das Zeichen braucht in Quellcode nicht aufzutauchen. Würde man völlig auf Tabs verzichten, gäbe es die gesamte Klasse von Problemen, auf die ich auf dem Screenshot hingewiesen habe, nicht.
(Es gibt Ausnahmen, in denen Tabs aus syntaktischen Gründen zwingend sind.)