Czy tworzenie aplikacji CLI jest uważane za „zacofane”? [Zamknięte]


38

Jestem początkującym DBA z dużym doświadczeniem w programowaniu.

Opracowałem kilka CLI, nieinteraktywnych aplikacji, które rozwiązują niektóre codzienne powtarzające się zadania lub eliminują błąd ludzki z bardziej złożonych, choć nie tak codziennych zadań. Te narzędzia są teraz częścią naszego zestawu narzędzi.

Uważam, że aplikacje CLI są świetne, ponieważ można je włączyć do automatycznego przepływu pracy.

Również filozofia uniksowa polegająca na robieniu jednej rzeczy, ale robieniu tego dobrze i pozwalaniu, aby wynik procesu był wkładem innej, jest świetnym sposobem na zbudowanie zestawu narzędzi, które nie skonsolidowałyby się w strategicznej przewadze.

Mój szef niedawno stwierdził, że tworzenie narzędzi CLI jest „wsteczne” lub stanowi „regresję”.

Powiedziałem mu, że się nie zgadzam, ponieważ większość istniejących obecnie narzędzi CLI nie jest starszymi wersjami, ale projektami na żywo z ulepszonymi wersjami wydawanymi przez cały czas.

Czy tego rodzaju rozwój na rynku jest uważany za „zacofany”?

Czy źle wygląda na rèsumè?

Zastanawiałem się również nad wszystkimi rozwiązaniami bez względu na to, czy są to strony internetowe, czy komputery, powinny mieć wiersz poleceń, opcje nieinteraktywne. Niektórzy uważają to za marnotrawstwo zasobów programistycznych.

Czy ten cel jest godny w projekcie oprogramowania?

Myślę również, że w przypadku aplikacji internetowej lub stacjonarnej posiadanie alternatywnego interfejsu CLI to świetny sposób na wykazanie, że logika biznesowa jest całkowicie oddzielona od GUI.


32
Czy twój szef pochodzi z zaplecza technicznego? Wygląda na to, że postępuje zgodnie z filozofią „nie widzę wiele, ergo, nie ma wiele”. Co może być problematyczne. Zapytaj go, czy uważa, że ​​ludzie, którzy rozwijają Wyrocznię, również są zacofani.
Joachim Sauer

13
Podoba mi się sposób, w jaki rzeczy są wykonywane w świecie Linux. Większość „głównych” aplikacji ma zarówno interfejs CLI, jak i GUI - jest to zwolnienie, ponieważ możesz pisać, kiedy potrzebujesz i klikać myszą, gdy nie jest to konieczne. Nie rozumiem, dlaczego koniecznie musisz wybrać jeden kontra drugi. Napisanie interfejsu CLI nie wymaga tak dużo pracy.
MrFox

6
Twój szef oczywiście nigdy nie próbował napisać najbardziej podstawowego skryptu
toasted_flakes

1
@MrFox Zgadzam się z Tobą, aplikacje powinny mieć oba interfejsy.
Tulains Córdova

4
I jak to ale niestety czasami jest to ;)
wim

Odpowiedzi:


21

Umiejętność pracy z interfejsem CLI nie jest tym, co rozważałbym wstecz. Wygląda świetnie na wznowieniu, szczególnie jeśli możesz go zakręcić w CV za pomocą frazy „Używany (Powershell / Bash) do zbudowania zestawu narzędzi automatyzacji do wysyłania wiadomości SMS, gdy Baza danych nie działa”.

Kiedy jestem odpowiedzialny za zatrudnianie ludzi, szukam praktycznej znajomości CLI.


49

Zasadniczo sprowadza się to do „użycia odpowiedniego narzędzia do pracy”.

Jeśli musisz wchodzić w interakcje z użytkownikiem, będziesz potrzebować GUI. Mamy dziesięciolecia badań i doświadczeń pokazujących, że sprawiają, że obliczenia są znacznie bardziej intuicyjne i produktywne. Właśnie dlatego GUI nieuchronnie przejęły świat od 1984 roku: po prostu lepiej działają w kontaktach z ludźmi.

Ale jeśli automatyzujesz program za pomocą skryptów, Twój program nie wchodzi w interakcje z ludźmi; współdziała ze skryptem. A najlepszy do tego interfejs oparty jest na tekście, z powodów, które powinny być intuicyjnie oczywiste.

Rozwój programów CLI dla użytkowników do bezpośredniej pracy jest uważany za zacofany i nie bez powodu. Ale jeśli nie to robisz, jeśli piszesz narzędzia zwiększające wydajność automatyzacji, nie robisz nic złego, dając im CLI.


6
+1 Cóż, niektóre narzędzia dostarczają informacji użytkownikom, na przykład „czy wszystkie kopie zapasowe baz danych są aktualne, jeśli nie, powiedz mi, które są stare?”. Drukują odpowiedź na STDOUT. Ale oczywiście można go umieścić na crontabie, aby wysłać SMS, jeśli odpowiedź brzmi NIE. Myślę, że nawet jeśli aplikacja jest GUI, powinna mieć tryb CLI z parametrami. Sam jestem wielbicielem GUI, w końcu jestem użytkownikiem Maca. Wiele aplikacji o krytycznym znaczeniu dla biznesu, zwłaszcza te opracowane wewnętrznie, nigdy nie rozważa interfejsu CLI.
Tulains Córdova

23
Chociaż w 99% się zgadzam, odkryłem również, że jako użytkownik techniczny czasami wolę interfejs CLI niż GUI. Powodem jest to, że wiele GUI wymaga ode mnie nawigacji, wskazywania, klikania, przechodzenia przez menu, wyszukiwania odpowiedniego pola wyboru itp. Jednak w interfejsie CLI wszystko, co muszę zrobić, to przetłumaczyć angielski w mojej głowie na „Computerish” na wiersz poleceń, a program robi to, co chcę w krótszym czasie. Podczas gdy GUI są znacznie łatwiejsze dla zwykłych użytkowników, zapaleni użytkownicy czasami wolą CLI.
Phil

15
„Rozwój programów CLI dla użytkowników do bezpośredniej pracy jest uważany za zacofany i nie bez powodu” hmm, nie, nie jest to takie proste, dlatego też każda wystarczająco zaawansowana aplikacja GUI osadza jakiś silnik skryptowy z własnym CLI
jk.

11
@MasonWheeler: Myślę, że brakuje ci punktu jk. Gdy interfejs GUI staje się skomplikowany, znawcy techniki często wolą korzystać z silnika skryptowego CLI nawet w przypadku jednorazowego zadania . Co absolutnie oznacza „użytkowników bezpośrednio z [it]”.
ruakh

8
-1 dotyczące „rozwoju programów CLI dla użytkowników do bezpośredniej pracy jest uważane za zacofane i nie bez powodu” zależy to całkowicie od aplikacji. Wiele razy jako użytkownik muszę pracować z programem, który działa na maszynie, która nie ma nawet GUI ani monitora. Na pewno potrzebuję CLI!
wim

35

The Art of Unix Programming Erica Raymonda to kanoniczna praca dla argumentacji, którą wysuwasz. Nie będę próbował zagęszczać jego doskonałej książki w kilka akapitów. Należy jednak pamiętać, że argument ten dotyczy głównie programistów, administratorów automatyzujących zadania za pomocą skryptów lub zaawansowanych użytkowników wysoce technicznego oprogramowania, takiego jak CAD.

Nawet w przypadku użytkowników o wysokich umiejętnościach technicznych musisz zastanowić się, jakie czapki noszą w tym czasie. Na przykład piszę oprogramowanie wbudowane do sprzętu sieciowego dla życia. Wszystkie nasze produkty mają zarówno interfejs CLI, jak i GUI, ale programiści prawie powszechnie preferują interfejs CLI, ze względu na jego elastyczność, możliwość pisania skryptów, dostępność, szybkość itp.

Jednak dokładnie ta sama grupa programistów zdecydowanie preferuje GUI w naszym oprogramowaniu do kontroli wersji, mimo że jego CLI jest potężniejszy, jest obsługiwany i dokumentowany tak samo jak GUI. Różnica polega na tym, że jesteśmy użytkownikami końcowymi oprogramowania do kontroli wersji, a nie administratorami ani programistami.

Dlatego dokładnie zastanów się, jakie role pełnią użytkownicy, gdy korzystają z Twoich narzędzi, i odpowiednio zaplanuj interfejs użytkownika. Jeśli twój szef o tym wspomina, najprawdopodobniej musisz ulepszyć dokumentację i / lub przeszkolić w zakresie CLI. Jeśli ciągle mówisz ludziom, że funkcja jest dostępna w interfejsie CLI tylko wtedy, gdy oczekują tego od GUI, prawdopodobnie musisz przemyśleć swoje priorytety programistyczne, lepiej uwzględniając potrzeby użytkowników.


16

Nie tylko Unix jest obsługiwany przez programy wiersza poleceń. Microsoft również zmierza w tym kierunku.

Microsoft już od jakiegoś czasu naciska na PowerShell. Całe ich obecne oprogramowanie serwerowe (Exchange, SharePoint, Server 2012, System Center itp.) Może być całkowicie kontrolowane za pomocą wiersza polecenia PowerShell. A PowerShell opiera się na małych funkcjach, które dobrze wykonują jedną rzecz i przenoszą dane do następnej (chociaż przesyła obiekty zamiast tekstu).

Większość GUI tych programów jest po prostu nakładką na polecenia programu PowerShell, wiele z nich nawet mówi, jakie polecenia uruchomi, aby ułatwić tworzenie skryptów. Wszystko, co możesz zrobić z GUI, możesz zrobić z PowerShell. Odwrotna sytuacja nie jest prawdą - istnieje wiele funkcji, które są dostępne tylko w PowerShell.

Więc jeśli * nix zawsze to robił, a Microsoft zmierza w tym kierunku ... nie wydaje mi się to zbyt zacofane!


5
Dodajmy do tego: Microsoft odsuwa się od GUI na serwerach w wielkim stylu. Chcą, aby wszyscy korzystali z Server Core - bez GUI, kropka. Jeśli możesz napisać zestaw zadań na jednym komputerze, możesz napisać skrypt w całym przedsiębiorstwie - powodzenia w graficznym interfejsie użytkownika. Jeffrey Snover (główny architekt systemu Windows) udzielił dobrego wywiadu na ten temat.
alroc

4
„Windows” nie zmierza w tym kierunku; Windows Server to. Serwer ma działać jako zautomatyzowany system z minimalną interakcją człowieka, więc ma to sens. Ale nigdy nie zobaczysz, że tak się stanie w części systemu operacyjnego zorientowanej na użytkownika.
Mason Wheeler

3
Ponadto Mac OS X przeszedł z czystego GUI na architekturę * nix z silnym naciskiem na skrypty wiersza poleceń. Dlatego powiedziałbym, że zarówno Microsoft, jak i Apple zmierzają w kierunku większej liczby CLI.
Brandon

1
+1 Musiałem wyjaśnić ludziom na poziomie C, jak „Windows” wraca do tekstu. Ma to sens - każda akcja może być skryptowana, testowana i wdrażana na tysiące serwerów, zamiast logować się w każdym polu i próbować dokładnie odtworzyć 200 kliknięć myszką. OP powinien doskonalić swoje umiejętności jako skryptów / automatyzacji, a nie tylko jako CLI. IIRC Windows oferuje obsługę PowerShell od XP. Wspaniale jest instalować wstępne wymagania za pomocą jednego skryptu zamiast wielu kliknięć.
jqa

Masz rację, ale pamiętaj, że dla mas (głupich) użytkowników komputerów GUI będą jedyną rzeczą, którą znają i widzą ... jest to szczególnie prawdziwe, jeśli weźmie się pod uwagę fakt, że GUI jest starszy niż wiele z nich ...
Radu Murzea

4

Na pewno nie powiedziałbym, że to zła rzecz. Zaletą programów CLI jest to, że podczas ich wdrażania możesz mieć bardzo ograniczony zakres. Na przykład, jeśli chcę napisać catklon lub „program do drukowania zawartości pliku na ekranie”, jest to bardzo możliwe dzięki CLI.

Co jednak, jeśli nie użyjesz CLI, to będziesz miał podstawowy program z graficznym interfejsem użytkownika, który wyświetla tekst. Ale wtedy musiałbyś również związać się z otwarciem okna dialogowego pliku i podłączeniem go ... ale wtedy ktoś też chciałby móc zmodyfikować tekst i zapisać go gdzie indziej ..

Pełzanie zakresu jest śmieszne w aplikacjach GUI. Jest to bardzo łatwe do uniknięcia dzięki aplikacjom CLI. „Chcesz edytować plik, a następnie ponownie go zapisać? cat foo > ed > bar” Dzięki aplikacjom CLI łączenie go z innymi narzędziami jest proste dla użytkowników (nie dla ciebie, programisty).

To powiedziawszy, programy CLI zaczynają być postrzegane jako „wstecz”. Wynika to z faktu, że obecnie wiele aplikacji rozwija się na rynkach, na których użytkownicy łączący twoje narzędzie z innymi narzędziami są prawie niemożliwi. Nie będę się tutaj zajmował, ale napisałem wpis na blogu o tym, jak „rynki egzekwują mentalność mistrza braku”, co jest całkowitym przeciwieństwem dobrze zaprojektowanej aplikacji CLI (zrobić jedną rzecz i zrobić to dobrze )


4

Zarówno GUI, jak i CLI mają swoje miejsce. GUI doskonale nadaje się do szybkiego wykonywania określonych operacji w puszkach. Interfejs CLI służy do wykonywania zadań, których nie pozwala GUI. Interfejs CLI jest zwykle silniejszy i trudniejszy w użyciu.

Dobre narzędzie CLI pozwala użytkownikowi robić rzeczy osoba, która napisała funkcji nigdy nie myślał o. Jednym z przykładów jest polecenie „znajdź” systemu UNIX. To polecenie:

find . -type f -name xyzzy\* -maxdepth 5 -mtime +3 -exec rm {} \;

znajduje pliki w bieżącym katalogu (ale ograniczone do 5 poziomów w dół), które mają nazwę rozpoczynającą się na „xyzzy” i zostały zmodyfikowane ponad 3 dni temu, a następnie je usuwają (uwaga: nieprzetestowany kod). A to umiarkowanie proste użycie. Możesz użyć menedżera plików, aby to zrobić, ale zajmie to więcej czasu i jest podatne na błędy. Oczywiście bycie potężniejszym oznacza, że ​​CLI może być łatwiej nadużywany i stwarzać problemy dla siebie!

Dobry programista może napisać narzędzie CLI w taki sposób, że ma również GUI pozwalające na wykonanie ograniczonego zestawu operacji. Użytkownik może zacząć od GUI i później poznać złożoność CLI.

Dobry (długi i stronniczy (?)) Odczyt na kompromisie CLI / GUI znajduje się w:

http://www.cryptonomicon.com/beginning.html

1
+1, szczególnie w odniesieniu do „Na początku była linia poleceń”
Ben Lee

1

Nie, wcale nie jest wstecz.

„Kierunek” ma wiele wspólnego z naszą perspektywą. Użytkownik zadowolony z bieżącej ścieżki w kierunku prostych interfejsów „można doświadczyć wszystkich urządzeń” na pewno zobaczy CLI jako wycofanie lub regresję. Nie jest to zgodne z ich ogólnymi oczekiwaniami.

Programista, administrator lub zaawansowany użytkownik może postrzegać to jako logiczny postęp narzędzi zgodnie z ich doświadczeniem. Wiele z nich zaczyna się przy użyciu narzędzi GUI. Kiedy chcą lub muszą skalować, szybko odkrywają, dlaczego istnieje CLI i że postęp ten rezonuje z tymi, którzy budują więcej narzędzi CLI.

Jest to autorstwa Paula Ferrisa: http://www.linuxplanet.com/linuxplanet/opinions/1505/1

Dla mnie osobiście idea składni odróżnia te dwa elementy. Kiedy składnia jest nieco obecna w GUI, wynik prawie nigdy nie jest dobry i tak elastyczny, jak dobrze przemyślana składnia CLI. Gdy jest to połączone z potokami i przekierowaniem, GUI upada płasko, ponieważ nie jest bardzo przydatne poza planowanymi przypadkami użycia.

Moje osobiste preferencje w tym zakresie to narzędzia CLI, które oferują opcję --gui lub --verbose wystarczającą, aby umożliwić opakowującemu GUI solidną interakcję, w tym paski stanu i inne podstawowe elementy, których ludzie szukają w GUI.

Oczywiście kosztem tego są zasadniczo dwa programy, z których jeden jest raczej bezużyteczny bez drugiego, ale główną zaletą jest możliwość włączenia jednego lub więcej świetnych narzędzi CLI do niestandardowego GUI bez modyfikacji wspomnianych narzędzi CLI. Najczęściej odbywa się to tylko w celu zaoferowania opcji GUI w konkretnym interfejsie CLI, ale pomysł obsługi wielu narzędzi za pomocą jednego GUI zorientowanego na „proces” lub „przypadek użycia” może dostarczyć wyniki podobne do tworzenia potoków i przekierowań oraz skryptów dla tego przypadku użycia, udostępnianie go osobom, które nie wykonywałyby tych operacji wystarczająco regularnie, aby osiągnąć mistrzostwo, a jednocześnie nie hamowały użytkowników interfejsu CLI.

Takie podejście spotkałem na SGI IRIX i bardzo mi się podobało. Zauważyłem, że używam GUI lub wiersza poleceń w razie potrzeby i miło było wiedzieć dokładnie, co naprawdę robią fantazyjne przyciski.

Tam, gdzie jest wiele różnych środowisk operacyjnych, owijki GUI mogą się znacznie różnić bez wpływu na narzędzie CLI.

Widzę to dzisiaj w Linuksie z narzędziami takimi jak dyskietka / system plików, w których GUI może wnieść wiele wartości nawet do znajomych użytkowników CLI.

W przypadku znanych systemów plików / dysków / urządzeń nokautowanie interfejsu CLI nie jest trudne i można go oczywiście wykonać za pomocą skryptu. Błędy mogą być jednak bolesne.

Tam, gdzie może to być nieznane lub być może wykonywanie operacji nie jest wykonywane wystarczająco regularnie, aby pozostać solidne i wolne od błędów, uruchomienie GUI zapewnia środowisko, które można łatwo zweryfikować, operacje połączone ze sobą, a następnie uruchomić bez obaw, bez skryptów.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.