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.
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło
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!
źródło
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ć
cat
klon 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 )
źródło
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:
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:
źródło
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.
źródło