Ich bin ein DBA-Anfänger mit viel Erfahrung in der Programmierung.
Ich habe mehrere nicht interaktive CLI-Apps entwickelt, die einige sich täglich wiederholende Aufgaben lösen oder das menschliche Versagen bei komplexeren, wenn auch nicht so alltäglichen Aufgaben beseitigen. Diese Werkzeuge sind jetzt Teil unserer Werkzeugkiste.
Ich finde, CLI-Apps sind großartig, weil Sie sie in einen automatisierten Workflow einbinden können.
Auch die Unix-Philosophie, etwas zu tun, aber es gut zu machen und die Ausgabe eines Prozesses als Eingabe eines anderen Prozesses zu betrachten, ist eine großartige Möglichkeit, eine Reihe von Tools zu erstellen, die sich zu einem strategischen Vorteil zusammenfügen lassen.
Mein Chef hat kürzlich kommentiert, dass die Entwicklung von CLI-Tools "rückwärts" ist oder eine "Regression" darstellt.
Ich habe ihm gesagt, dass ich nicht damit einverstanden bin, weil die meisten CLI-Tools, die es derzeit gibt, keine Legacy-Projekte sind, sondern Live-Projekte, bei denen ständig verbesserte Versionen veröffentlicht werden.
Wird diese Art von Entwicklung auf dem Markt als "rückwärts" betrachtet?
Sieht es auf einen Lebenslauf schlecht aus?
Ich habe auch überlegt, ob es sich um Web- oder Desktop-Lösungen handelt, die über nicht interaktive Befehlszeilenoptionen verfügen sollen. Einige Leute halten dies für eine Verschwendung von Programmierressourcen.
Ist dieses Ziel in einem Softwareprojekt ein würdiges Ziel?
Ich denke auch, dass für eine Web- oder Desktop-App die Verwendung einer alternativen CLI-Schnittstelle eine hervorragende Möglichkeit ist, um zu demonstrieren, dass die Geschäftslogik vollständig von der GUI entkoppelt ist.
Antworten:
Die Fähigkeit, mit einer CLI zu arbeiten, ist kaum das, was ich rückwärts betrachten würde. In einem Lebenslauf sieht es großartig aus, besonders wenn Sie ihn in Ihrem Lebenslauf mit einem Satz wie "Verwendet (Powershell / Bash), um eine Suite von Automatisierungstools zum Senden von SMS-Nachrichten zu erstellen, wenn die Datenbank inaktiv war" drehen können.
Wenn ich für die Einstellung von Mitarbeitern zuständig bin, suche ich nach Kenntnissen der CLI.
quelle
Im Grunde kommt es darauf an, "das richtige Werkzeug für den Job zu verwenden".
Wenn Sie mit einem Benutzer interagieren müssen, benötigen Sie eine GUI. Wir haben jahrzehntelange Forschung und Erfahrung, die zeigen, dass sie das Computing viel intuitiver und produktiver machen. Deshalb haben GUIs seit 1984 unaufhaltsam die Welt erobert: Sie funktionieren einfach besser für die Interaktion mit Menschen.
Wenn Sie jedoch ein Programm mit Skripten automatisieren, interagiert Ihr Programm nicht mit Personen. Es interagiert mit einem Skript. Und die beste Oberfläche dafür ist eine textbasierte, aus Gründen, die intuitiv offensichtlich sein sollten.
Die Entwicklung von CLI-Programmen, mit denen Benutzer direkt arbeiten können, wird aus gutem Grund als rückständig angesehen. Aber wenn Sie dies nicht tun oder Produktivitätswerkzeuge für die Automatisierung schreiben, können Sie nichts falsch machen, indem Sie ihnen eine CLI zuweisen.
quelle
Eric Raymonds The Art of Unix Programming ist die kanonische Arbeit für das Argument, das Sie vorbringen. Ich werde nicht versuchen, sein ausgezeichnetes Buch in ein paar Absätze zu fassen. Beachten Sie jedoch, dass dieses Argument hauptsächlich für Programmierer, Administratoren, die Aufgaben mithilfe von Skripten automatisieren, oder Power-User von hochtechnischer Software wie CAD gilt.
Auch bei hochtechnischen Anwendern muss man sich überlegen, welche Hüte sie gerade tragen. Zum Beispiel schreibe ich eingebettete Software für Netzwerkgeräte für den Lebensunterhalt. Unsere Produkte haben sowohl eine CLI als auch eine GUI, aber Entwickler bevorzugen die CLI aufgrund ihrer Flexibilität, Skriptfähigkeit, Verfügbarkeit, Geschwindigkeit usw. fast überall.
Genau diese Gruppe von Entwicklern bevorzugt jedoch die GUI unserer Versionskontrollsoftware, obwohl die CLI leistungsfähiger ist und genau so gut wie die GUI unterstützt und dokumentiert wird. Der Unterschied besteht darin, dass wir die Endbenutzer der Versionskontrollsoftware sind, keine Administratoren oder Entwickler.
Überlegen Sie sich daher genau, in welchen Rollen Ihre Benutzer Ihre Dienstprogramme verwenden, und planen Sie die Benutzeroberfläche entsprechend. Wenn Ihr Chef dies erwähnt, müssen Sie wahrscheinlich zumindest die Dokumentation und / oder die Schulung für die CLI verbessern. Wenn Sie anderen Personen ständig mitteilen, dass eine Funktion nur dann in der CLI verfügbar ist, wenn sie dies für die GUI erwartet, müssen Sie wahrscheinlich Ihre Entwicklungsprioritäten überdenken und die Bedürfnisse Ihrer Benutzer besser berücksichtigen.
quelle
Nicht nur Unix wird von Befehlszeilenprogrammen gesteuert. Microsoft steuert ebenfalls in diese Richtung.
Microsoft pusht seit einiger Zeit PowerShell. Die gesamte aktuelle Serversoftware (Exchange, SharePoint, Server 2012, System Center usw.) kann vollständig über die PowerShell-Befehlszeile gesteuert werden. Und PowerShell basiert auf kleinen Funktionen, die eine Sache gut machen und Daten an die nächste weiterleiten (obwohl sie Objekte anstelle von nur Text weiterleiten).
Die meisten GUIs für diese Programme sind lediglich ein Frontend für die PowerShell-Befehle. Viele sagen Ihnen sogar, welche Befehle ausgeführt werden sollen, um die Skripterstellung zu vereinfachen. Alles, was Sie von der GUI aus tun können, können Sie von PowerShell aus tun. Das Gegenteil ist nicht der Fall - es gibt einige Funktionen, die nur in PowerShell verfügbar gemacht werden.
Also, wenn * nix es immer getan hat und Microsoft in diese Richtung geht ... scheint mir nicht sehr rückständig zu sein!
quelle
Ich würde definitiv nicht sagen, dass es eine schlechte Sache ist. Das Schöne an CLI-Programmen ist, dass Sie bei der Implementierung einen sehr eingeschränkten Umfang haben können. Wenn ich zum Beispiel einen
cat
Klon oder ein Programm zum Drucken des Inhalts einer Datei auf dem Bildschirm schreiben möchte , ist dies mit CLI sehr gut möglich.Was wäre, wenn Sie CLI nicht verwenden würden? Dann hätten Sie ein Basisprogramm mit einer GUI, die Text anzeigt. Dann müssten Sie aber auch einen Dateidialog öffnen und diesen anhängen. Dann möchte aber auch jemand den Text ändern und an einer anderen Stelle speichern können.
Scope Creep ist mit GUI-Apps lächerlich. Mit CLI-Apps lässt sich dies jedoch ganz einfach vermeiden. "Sie möchten die Datei bearbeiten und dann erneut speichern?
cat foo > ed > bar
" Bei CLI-Apps ist es für Ihre Benutzer (nicht für Sie, den Entwickler) trivial , sie mit anderen Tools zu kombinieren.Abgesehen davon werden CLI-Programme allmählich als "rückwärts" betrachtet. Dies liegt daran, dass heutzutage viele Anwendungen auf Märkten entwickelt werden, auf denen Benutzer Ihr Tool kaum mit anderen Tools kombinieren können. Ich werde hier nicht darauf eingehen, aber ich habe einen Blogbeitrag darüber geschrieben, wie "Marktplätze die Mentalität eines Meisters ohne Grenzen durchsetzen", was das genaue Gegenteil einer gut gestalteten CLI-App ist (um eine Sache zu tun und es gut zu machen) )
quelle
GUI und CLI haben ihren Platz. Die GUI ist großartig, damit ein Benutzer bestimmte Vorgänge schnell ausführen kann. Mit der CLI können Sie Dinge erledigen, die die GUI nicht zulässt. Die CLI ist normalerweise leistungsfähiger und schwerer zu bedienen.
Ein gutes CLI-Tool ermöglicht es dem Benutzer, Dinge zu tun, an die die Person, die das Tool geschrieben hat, nie gedacht hat. Ein Beispiel ist der UNIX-Befehl 'find'. Dieser Befehl:
findet Dateien im aktuellen Verzeichnis (jedoch auf 5 Ebenen darunter begrenzt), deren Name mit 'xyzzy' beginnt und die vor mehr als 3 Tagen geändert wurden, und löscht sie dann (Hinweis: ungetesteter Code). Und das ist eine mäßig einfache Verwendung. Sie können dazu einen Dateimanager verwenden, der jedoch länger dauert und fehleranfällig ist. Stärker zu sein bedeutet natürlich, dass die CLI leichter missbraucht werden kann und Probleme für Sie selbst schafft!
Ein guter Entwickler kann ein CLI-Tool so schreiben, dass es auch über eine grafische Benutzeroberfläche verfügt, mit der eine begrenzte Anzahl von Vorgängen ausgeführt werden kann. Der Benutzer kann mit der GUI beginnen und später die Komplexität der CLI erlernen.
Eine gute (lange und voreingenommene (?)) Lektüre zum CLI / GUI-Kompromiss lautet:
quelle
Nein, es ist überhaupt nicht rückwärts.
Die "Richtung" hat viel mit unserer Perspektive zu tun. Ein Benutzer, der mit dem aktuellen Weg zu einfachen "One Experience All Devices" -Oberflächen zufrieden ist, wird die CLI mit Sicherheit als Rückschritt oder Regression betrachten. Es entspricht nicht ihren allgemeinen Erwartungen.
Ein Programmierer, Administrator oder Hauptbenutzer kann dies als logischen Fortschritt von Werkzeugen entsprechend ihrer Erfahrung ansehen. Viele von ihnen verwenden zunächst GUI-Tools. Wenn sie skalieren möchten oder müssen, finden sie schnell heraus, warum es die CLI gibt, und diese Entwicklung kommt bei denen zum Tragen, die mehr CLI-Tools erstellen.
Es gibt dies von Paul Ferris: http://www.linuxplanet.com/linuxplanet/opinions/1505/1
Für mich persönlich unterscheidet die Idee der Syntax die beiden. Wenn die Syntax in einer GUI etwas vorhanden ist, ist das Ergebnis fast nie gut und ebenso flexibel wie die durchdachte CLI-Syntax. Wenn dies mit Pipes und Umleitungen gekoppelt ist, fällt die GUI flach aus, da sie außerhalb der geplanten Anwendungsfälle nicht sehr nützlich ist.
Ich persönlich bevorzuge CLI-Tools, die eine Option --gui oder --verbose bieten, die ausreicht, um einem GUI-Wrapper eine robuste Interaktion zu ermöglichen, einschließlich Statusleisten und anderer grundlegender Elemente, nach denen die Benutzer der GUI suchen.
Natürlich sind die Kosten dafür im Wesentlichen zwei Programme, von denen eines ohne das andere ziemlich nutzlos ist. Der Hauptvorteil besteht jedoch darin, dass ein oder mehrere hervorragende CLI-Tools in eine benutzerdefinierte GUI integriert werden können, ohne dass Änderungen an den CLI-Tools vorgenommen werden müssen. Meistens wird dies nur durchgeführt, um eine GUI-Option für eine bestimmte CLI anzubieten. Die Idee, mehrere Tools mit einer "prozessorientierten" oder "anwendungsfallorientierten" GUI zu betreiben, kann jedoch zu Ergebnissen führen, die der Weiterleitung und Umleitung sowie der Skripterstellung für diesen Anwendungsfall ähneln. Bereitstellung für Personen, die diese Vorgänge nicht regelmäßig genug ausführen würden, um die Meisterschaft zu erlangen, ohne die CLI-Benutzer zu behindern.
Ich bin auf diesen Ansatz bei SGI IRIX gestoßen und er hat mir sehr gut gefallen. Ich stellte fest, dass ich entweder die GUI oder die Befehlszeile nach Bedarf verwendete und das Schöne war, genau zu wissen, was die ausgefallenen Tasten tatsächlich taten.
Bei vielen verschiedenen Betriebsumgebungen können sich die GUI-Wrapper erheblich unterscheiden, ohne dass dies auch Auswirkungen auf das CLI-Tool hat.
Ich sehe dies heute in Linux mit Dingen wie Festplatten- / Dateisystem-Tools, bei denen die GUI selbst CLI-vertrauten Benutzern viel Wert hinzufügen kann.
Bei bekannten Dateisystemen / Datenträgern / Geräten ist es nicht schwierig, die CLI auszuschalten, und es kann natürlich ein Skript erstellt werden. Fehler können jedoch schmerzhaft sein.
Wenn diese möglicherweise nicht bekannt sind oder die Ausführung der Vorgänge nicht regelmäßig genug erfolgt, um stabil und fehlerfrei zu bleiben, bietet das Ausführen der GUI eine Umgebung, die einfach überprüft, Vorgänge verkettet und dann zuverlässig ausgeführt werden kann, ohne dass Skripts erforderlich sind.
quelle