Dużo słyszałem o zaletach wykonywania mniejszej pracy programistycznej w aplikacjach GUI i korzystania z większej liczby narzędzi wiersza poleceń (szczególnie w odniesieniu do wydajniejszego wykonywania zadań). Jednak, ponieważ nie rozumiem, jak mój workflow byłaby inna , gdybym zależało bardziej na narzędzi wiersza polecenia, nie można łatwo ocenić, czy jest wystarczająco dużo z wypłat dla mnie osobiście zainwestować czas i wysiłek w nauce nowego zestawu narzędzi i zmieniającą mój przepływ pracy.
Teraz:
Koduję niektóre projekty poboczne w językach takich jak C / C ++ / D / C # / Java / Python za pomocą Visual Studio, Eclipse itp. I uruchamiam je, konfigurując ustawienia kompilacji i naciskając F5, aby budować / uruchamiać.
Tworzę działający program internetowy, więc wymaga to użycia Django do skonfigurowania serwera, połączenia z bazą danych itp. Prawie wszystko w edytorze tekstu SciTE.
Do uruchamiania zwykłych programów używam Launchy ... wciąż nie ma terminala. :)
Do kopiowania plików i innych rzeczy używam regularnego wyszukiwania / przenoszenia w graficznym menedżerze plików (Eksplorator Windows, Nautilus).
Debugowanie: Używam narzędzi Visual Studio lub Debugowania dla systemu Windows (jeśli korzystam z systemu Windows). Nie robiłem dużo debugowania w Linuksie, ale do tego, co zrobiłem, używałem Eclipse (także dla Javy w systemie Windows).
W pracy: aby połączyć się z systemem kompilacji i skonfigurować projekt, po prostu używam narzędzi, które zostały zintegrowane z Eclipse na mój użytek - nie potrzebuję terminalu ani nic (chociaż z pewnością mogę korzystać z terminala, jeśli rzeczywiście chcę)
Jak to jest robić te rzeczy w CLI? Które części stają się bardziej / mniej wydajne? Które aspekty mojego przepływu pracy należy zmienić, aby uzyskać największą korzyść z przejścia na pracę głównie w CLI? Innymi słowy ... Gdybyś magicznie przekształcił mnie w guru z linii poleceń, jak mój nowy proces pracy z kodowaniem miałby się różnić od mojego obecnego, skoncentrowanego na GUI sposobu robienia rzeczy?
Odpowiedzi:
Nie sądzę, że to już prawda. Interfejs CLI ma konkretną zaletę - jeśli wiesz z góry, czego szukasz, możesz wpisać go szybciej, niż możesz przejść do niego w menu. Oznacza to, że jeśli jawnie chcesz wydawać polecenia programowi, które mają mały kontekst, jest to w większości przypadków szybsze. Istnieją jednak dwa problemy.
Po pierwsze, programy GUI mogą wywnioskować dla ciebie kontekst. Na przykład funkcja Go To Definition programu Visual Studio i Intellisense. Jak można powielić te funkcje w interfejsie CLI?
Po drugie, programy GUI mogą wyświetlać ci znacznie więcej. Na przykład Visual Studio Parallel Profiler, który jest wykresem wykorzystania procesora na wielu rdzeniach w czasie. Jak możesz to wyświetlić w interfejsie CLI? To po prostu nie miałoby sensu. Gdy tylko Twoje dane będą lepiej wyrażone jako coś innego niż tekst, CLI zostanie natychmiast utracony. Innym łatwym przykładem są punkty przerwania. W Visual Studio klikasz na margines linii, na której chcesz rozbić. Co zamierzasz zrobić w CLI, spróbuj znaleźć plik i numer linii i wprowadzić to polecenie? To zajmie ci względną dekadę. To nawet nie uwzględnia niektórych nowszych GUI, takich jak Debugger Canvas.
GUI może działać wolniej, jeśli chcesz poświęcić czas na ciągłe debugowanie, ale gdy tylko przypadki użycia stają się bardziej złożone, nie ma możliwości, aby CLI nadążył.
źródło
Myślę, że największą różnicą nie są poszczególne zadania, ale dwie rzeczy:
Przede wszystkim automatyzacja. Interfejs CLI jest z natury skryptowalny, co zwykle jest trudniejsze w systemie Windows. Słyszałem, że dzięki PowerShell wszystko się poprawiło, ale go nie używałem.
Po drugie, filozofia UNIX dotycząca „rozdzielenia problemów”. Mogę do czegoś napisać mały interfejs oparty na readline i używając emacs Mx shell, użyj go wewnątrz emacs GUI. Ułatwia to wykorzystanie innych narzędzi i istniejących funkcji.
Do debugowania gdb działa dobrze, ale zwykle wolę debugger VS. Jest to prawdopodobnie najlepsze oprogramowanie, jakie Microsoft kiedykolwiek zrobił.
Do budowania i uruchamiania rzeczy: make. Lub bash. Gdziekolwiek.
Do opracowania: emacs (ostatnia konwersja z vi, oh wstyd!). Vi, jeśli wykonujesz pracę przez ssh.
Naprawdę nie mogę się przyzwyczaić do Eclipse. Myślę, że jest to problem „kształtu umysłu”: nie pasuje do mojego.
źródło
Dla mnie przejście do przepływu pracy CLI z Visual Studio wymagało zapamiętania wielu poleceń * nix. Obejmowało to również pewne bóle głowy, ilekroć popsułem meldunek SVN.
Jednak największą różnicą w przepływie pracy było dla mnie lepsze zrozumienie działania systemu operacyjnego . Dzięki przepływowi pracy GUI po prostu klikał przyciski i czekał na odpowiedź programu. W świecie wiersza poleceń mam wrażenie, że mówię bezpośrednio komputerowi, aby coś zrobił.
Innymi słowy, przepływ pracy w interfejsie GUI to komputer komunikujący się z tobą, podczas gdy przepływ pracy w interfejsie CLI wyglądał bardziej jak komunikacja bezpośrednio z komputerem.
Jedno nie jest lepsze od drugiego, ale przejście z całkowicie opartego na GUI środowiska do terminalu było zdecydowanie podróżą.
źródło
Oto więcej spostrzeżeń programisty, który mieszkał w obu światach. Nie będę powtarzał punktów już podanych w innych odpowiedziach:
Programowanie oparte na CLI zwykle korzysta z różnych programów, z których każdy wykonuje 1 funkcję. W programowaniu opartym na GUI wykorzystuje się zwykle 1 duży program (IDE), który wykonuje dziesiątki różnych funkcji. Ta jedna różnica ma kilka konsekwencji:
Ponieważ IDE ma być twoim „domem”, w którym cały czas pracujesz, mogą używać zastrzeżonego (być może binarnego) formatu do przechowywania twoich danych. Zgodność nie jest dużym problemem, ponieważ nie oczekują, że będziesz pracować w 2 różnych IDE w tym samym projekcie. Z drugiej strony narzędzia CLI zazwyczaj działają tylko z plikami tekstowymi.
Dzięki rozwojowi opartemu na CLI możesz stopniowo wymieniać narzędzia lub integrować nowe narzędzia z przepływem pracy, łatwiej. Wybór IDE jest bardziej wszechobecny, a zmiana IDE jest bardziej bolesna.
Użycie skryptu kompilacji CLI zamiast wbudowanego w IDE menu „Kompilacja” zwiększa prawdopodobieństwo, że możesz odejść od kodu na kilka lat, wrócić do niego i zbudować go bez kłopotów. W przypadku programowania opartego na graficznym interfejsie użytkownika prawdopodobnie do tej pory używasz zupełnie innego środowiska IDE. Być może ten, którego używałeś podczas pisania kodu, nie działa nawet w twoim obecnym systemie operacyjnym.
W IDE budowanie własnych narzędzi oznacza naukę (prawdopodobnie dużej) API wtyczki i być może używanie określonego języka. Podczas korzystania z interfejsu CLI nic specjalnego nie jest potrzebne do tworzenia niestandardowych narzędzi.
Z drugiej strony zaletą IDE jest to, że jest „zintegrowane”. Możesz więc kliknąć w oknie edytora, aby ustawić punkty przerwania debuggera i tak dalej.
Kolejna kwestia: twój wybór będzie zależeć również od platformy programistycznej, systemu operacyjnego i używanych języków. Na niektórych platformach programowanie oparte na IDE jest głęboko zakorzenione w dominującej kulturze programistycznej. W innych dominuje rozwój oparty na CLI. Jeśli korzystasz z platformy, na której dominuje programowanie oparte na IDE, prawdopodobnie narzędzia CLI będą słabo rozwinięte i słabo obsługiwane. Odwrotna jest również prawda.
źródło
Większość mojego dzieciństwa nie spędziłem na komputerze, ponieważ mieliśmy nawet internet na farmie. Zacząłem programować późno w szkole średniej i zasadniczo cały czas pracowałem w GUI. Na studiach poznałem faceta, który dorastał na CLI i robił wszystko w ten sposób. Postanowiłem więc skonfigurować serwer linux zamiast słuchać prof. Po kilku latach mój kumpel patrzył, jak piszę jakiś osadzony kod i nie mógł uwierzyć, jak napisałem.
Zasadniczo używam połowa interfejsu GUI, połowa GUI. Istnieje kilka rzeczy, które środowiska pakietowe GUI robią znacznie szybciej i wydajniej. To samo dotyczy CLI. Większość moich edycji tekstu odbywa się w VIM, ponieważ zaawansowane edytory CLI VIM / EMACS (tutaj nie ma wojen) sprawiają, że manipulowanie tekstem jest najbardziej wydajne. Z drugiej strony, takie jak debugowanie za pomocą GDB, jest tak samo bolesne jak edytowanie tekstu bez klawiatury. Upewnij się, że jest potężny i na pewno znajdziesz wystarczająco dużo czasu, aby znaleźć informacje, których szukasz, ale miłe okno GUI z natychmiastowym dostępem do dowolnego bloku pamięci jest nieocenione, zwłaszcza gdy próbujesz porównać go z innym blokiem pamięci.
W każdym razie tak naprawdę próbuję powiedzieć, że nie powinno to być GUI vs CLI, ale raczej to, w czym CLI jest lepszy, a w czym lepszy GUI. Ponieważ ostatecznie, jeśli twoje IO jest wolniejsze niż twój proces myślowy, istnieje problem.
źródło
„zamieniony na guru CLI z dnia na dzień?” Tak, jest pocieranie. Dobrze zaprojektowane GUI wydają się być bardziej wykrywalne niż CLI i bardziej wybaczające dla początkujących.
Mój obieg pracy, ostatnio ulepszony przez menedżera okien kafelkowych (dwm), składa się z wielu pisania. Mój laptop jest teraz właściwie użyteczny bez podłączania myszy (gładzik jest odpowiedni do tego, co pozostało po wskazaniu). Trzymam wiele aplikacji otwartych i przełączam za pomocą Alt-Tab. Nie tracę czasu na przenoszenie i zmianę rozmiaru okien.
Najczęściej używam przeglądarki, vima i kilku terminali. SSH daje mi dużą elastyczność co do miejsca, w którym pracuję (fizycznie). Zdalne komputery stacjonarne mogą oferować lepsze wrażenia, gdy wszyscy mamy rurkę 10Gigabit do sieci, ale nie wstrzymam oddechu.
Nie nauczyłem się vima wystarczająco dobrze, aby móc korzystać z jego złożonych funkcji, ale pochylam się w tym kierunku - chcę, aby vim skoczył do właściwej linii # po nieudanym wykonaniu. (Technicznie vim jest interfejsem wizualnym, mimo że działa w terminalu, ale prowadzę go za pomocą klawiatury, a nie myszy).
Prawdziwym problemem są źle zaprojektowane interfejsy. Dobrze zaprojektowane interfejsy są trudne do stworzenia, więc nie zdarzają się zbyt często w żadnym obozie. Ale ponieważ więcej kreatorów innych niż ux projektuje dziś GUI niż CLI, ....
(Mój drugi wielki wkurzony zwierzak jest wzdęty. Kiedy potrzeba 19 MB programu, aby pomóc mi wykonać to samo zadanie, co program 200 kB, coś jest nie tak. XTree Gold dla DOS zwiększył moją wydajność bardziej niż jakikolwiek nowoczesny menedżer plików. Windows 2.11 używał tylko sąsiadująco Windows. Turbo C. było niesamowitym IDE. Dlaczego mój Nook wydaje się działać wolniej niż klasyczny Mac? Dlaczego samo jądro zajmuje teraz więcej miejsca na dysku niż cały system?)
źródło
Dzięki graficznym interfejsom użytkownika jesteś zmuszony do wielokrotnej interakcji z programem, aby wykonywać tę samą operację w kółko. Za pomocą powłoki można łatwiej automatyzować rzeczy i sprawić, że programy współpracują ze sobą przez potokowanie - które można na przykład wykorzystać do wyprowadzania dopasowań do wyrażeń regularnych w zestawie plików lub pakietów sieciowych. Jak już wspomniano, dla wielu operacji jest szybszy.
Programowanie w terminalu może nie jest o wiele lepsze niż w edytorze graficznym, chyba że używasz SSH.
Osobiście uważałem, że powłoka unix jest znacznie bardziej przystępna niż typowa linia poleceń Windows, i jestem teraz bardzo zanurzona w systemie Linux z menedżerem okien i wieloma terminalami.
źródło
Wszystkie twoje przykłady są procesem jednoetapowym. W większości środowisk GUI, jeśli chcesz przenieść plik, który nie ma nic wspólnego z bieżącą aplikacją, możesz to zrobić z menu plików bez opuszczania aplikacji. Nie ma sensu wchodzić do wiersza poleceń. Jeśli chcesz skopiować plik i nadać mu inną nazwę, możesz to zrobić w wierszu polecenia naraz. Aby umieścić to w pliku wsadowym, musisz przynajmniej wiedzieć, jak to zrobić, ale możesz następnie uruchomić plik wsadowy z GUI, jeśli chcesz.
Podobna debata dotyczyła poleceń klawiaturowych i myszy.
źródło
Sposób, w jaki pracuję, zdecydowanie sprzyja GUI.
Typowe zastosowanie:
Jeśli chodzi o główną zaletę CLI, skryptowanie, prawie nigdy tego nie robię. Powtarzane zadania, które wykonujemy, to po prostu aplikacje do pracy z cronem, które rzuciliśmy razem w C # i nie często zmienialiśmy. Istnieją sposoby, aby uruchomić system w Linuksie, ale głównie jest on przeniesiony (przyspieszenie), więc bałagan w plikach i takie rzeczy są zminimalizowane. A jeśli coś stanie się owłosione, są też dobre IDE dla Linuksa.
źródło