CLI 지향 프로그래머의 워크 플로우는 GUI 지향적 인 워크 플로우와 어떻게 다릅니 까?


17

GUI 응용 프로그램에서 프로그래밍 작업을 줄이고 더 많은 명령 줄 도구를 사용하는 것 (특히 작업을보다 효율적으로 수행하는 것과 관련하여)의 이점에 대해 많이 들었습니다. 그러나, 나는 내 워크 플로우가 될 방법을 이해하지 않기 때문에 다른 나를 개인적으로 시간과 노력이 새로운 도구 세트를 배우고 변경을 투자하는 내가 쉽게 보수의 충분 여부 평가 수없는, 내가 명령 줄 도구에 더 의존하는 경우 내 워크 플로우.

지금:

  • Visual Studio, Eclipse 등을 사용하여 C / C ++ / D / C # / Java / Python과 같은 언어로 일부 측면 프로젝트를 코딩하고 빌드 설정을 설정하고 F5를 눌러 빌드 / 실행합니다.

  • 저는 직장에서 웹 프로그램을 개발 중이므로 Django를 사용하여 SciTE 텍스트 편집기 내에서 거의 모든 서버를 설정하고 데이터베이스에 연결하는 등의 작업을 수행합니다.

  • 일반 프로그램을 시작하기 위해 Launchy를 사용합니다 ... 여전히 터미널이 없습니다. :)

  • 파일을 복사하기 위해 그래픽 파일 관리자 (Windows 탐색기, 노틸러스)에서 정기적 인 찾기 / 이동을 사용합니다.

  • 디버깅 : Windows 용 Visual Studio 또는 디버깅 도구를 사용합니다 (Windows 인 경우). 나는 리눅스에서 많은 디버깅을하지 않았지만, 내가 한 일을 위해 Eclipse (Windows의 Java도)를 사용했다.

  • 직장에서 : 빌드 시스템에 연결하고 프로젝트를 설정하기 위해 터미널에 사용할 필요없이 Eclipse에 통합 된 도구를 사용하기 만하면됩니다. 단말기 나 다른 것도 필요하지 않습니다. 실제로 원한다)

CLI에서 이러한 작업을 수행하는 것은 무엇입니까? 어떤 부품이 더 효율적 / 덜 효율적입니까? CLI에서 주로 작업으로 전환하여 최대한의 이점을 얻으려면 워크 플로우의 어떤 측면을 변경해야합니까? 다시 말해 ... 마술처럼 나를 명령 줄 전문가로 바꾸었다면, 새로운 코딩 작업 과정이 현재 GUI 중심의 현재 작업 방식과 어떻게 다릅니 까?


이것은 이전 질문과 중복되지 않습니까? programmers.stackexchange.com/questions/82519/… ?
Charles E. Grant

1
@ 찰스 : 예, 친절합니다. 채팅이 진행되는 위치에 관심이 있다면 채팅을 통해 다른 사람과 채팅 기록을 살펴보십시오.
user541686

1
@Charles이 질문의 새롭고 개선 된 버전입니다. 이전 버전을 수정하면 답변이 무효화되므로 대신 깨끗한 슬레이트에서 시작하기로 선택했습니다.
Adam Lear

둘 중 하나 일 필요는 없습니다. 예를 들어 Visual Studio에 명령 줄에서 솔루션을 작성하도록 지시 할 수 있습니다. 솔루션 및 프로젝트 파일은 GUI를 통해 편집하는 것이 훨씬 편리하지만 명령 행 빌드 프로세스에서 사용할 수는 없습니다.
Steve314

답변:


10

나는 이것이 더 이상 사실이라고 생각하지 않습니다. CLI는 특정 장점을 가지고 있습니다. 원하는 것을 미리 알고 있다면 메뉴에서 탐색하는 것보다 빠르게 입력 할 수 있습니다. 즉, 컨텍스트가 거의없는 프로그램에 명령을 명시 적으로 실행하려는 경우 대부분 더 빠릅니다. 그러나 두 가지 문제가 있습니다.

첫째, GUI 프로그램은 컨텍스트를 유추 할 수 있습니다. 예를 들어 Visual Studio의 정의로 이동 기능과 Intellisense가 있습니다. CLI에서 이러한 기능을 어떻게 복제 할 수 있습니까?

둘째, GUI 프로그램은 훨씬 더 많은 정보를 표시 할 수 있습니다. 예를 들어 Visual Studio Parallel Profiler는 시간이 지남에 따라 여러 코어의 CPU 사용량을 나타내는 그래프입니다. CLI에서 어떻게 표시 할 수 있습니까? 이해가되지 않습니다. 데이터가 텍스트 이외의 것으로 표현되는 즉시 CLI가 손실됩니다. 또 다른 쉬운 예는 중단 점입니다. Visual Studio에서는 줄 바꿈하려는 여백을 클릭합니다. CLI에서 무엇을 하시겠습니까? 파일과 줄 번호를 찾아서 해당 명령을 입력하십시오. 그것은 당신을 상대적으로 10 년간 가져갈 것입니다. 디버거 캔버스와 같은 최신 GUI 혁신도 포함하지 않습니다.

디버그를 계속 반복하여 시간을 보내고 싶다면 GUI가 느려질 수 있지만 사용 사례가 더 복잡해지면 CLI가 유지할 수있는 방법이 없습니다.


4
첫 번째 요점, 인텔리전스 및 "정의로 이동"에 해당하는 내용은 emacs 및 vim에서 모두 사용할 수 있습니다. 디버깅을위한 두 번째는 또한 GUI가 더 실용적이라고 생각합니다. 디버거 캔버스가 무엇을 의미하는지 알 수 없으므로 이야기 할 수 없습니다.
Vitor Py

@Vitor : 관심이 있으시면 msdn.microsoft.com/en-us/devlabs/debuggercanvas 를 참조 하여 디버거 캔버스의 5 분 비디오
Carson63000 2018 년

실제로 +1, 터미널에서 Visual Studio의 모든 기능을 어떻게 사용할지 상상할 수 없습니다.
user541686

18

가장 큰 차이점은 개별 작업이 아니라 두 가지에 있다고 생각합니다.

무엇보다도 자동화. CLI는 본질적으로 스크립팅 가능하며 일반적으로 Windows에서는 더 어렵습니다. PowerShell로 개선 된 것을 들었지만 사용하지 않았습니다.

둘째, "심리 분리"라는 유닉스 철학. 작은 readline 기반 인터페이스를 무언가에 쓸 수 있고 emacs Mx 쉘을 사용하면 emacs GUI 내에서 사용할 수 있습니다. 따라서 다른 도구와 기존 기능을보다 쉽게 ​​활용할 수 있습니다.

디버깅을 위해 gdb는 잘 작동하지만 일반적으로 VS 디버거를 선호합니다. 아마도 Microsoft가 지금까지 해본 최고의 소프트웨어 일 것입니다.

물건을 만들고 운영하기 위해 : 확인하십시오. 또는 배쉬. 대체 어디로.

개발을 위해 : emacs (vi, oh shame! ssh를 통해 작업을 수행하는 경우 Vi.

나는 이클립스에 익숙해 질 수 없다. 나는 그것이 "마음의 형태"문제라고 생각한다. 그것은 나의 것과 맞지 않다.


6

나를 위해 Visual Studio에서 CLI 워크 플로로 전환하면 많은 * nix 명령이 기억되었습니다. SVN 체크인을 망칠 때마다 두통이 발생했습니다.

그러나 워크 플로의 가장 큰 차이점 은 운영 체제의 작동 방식을 더 잘 이해했다는 것 입니다. GUI 작업 과정에서 버튼을 클릭하고 프로그램이 응답하기를 기다렸습니다. 커맨드 라인 세계에서 나는 컴퓨터에게 무언가를하도록 직접 지시하고 있다고 생각합니다.

다시 말해, GUI 워크 플로는 컴퓨터가 다시 사용자와 통신하는 반면 CLI 워크 플로는 컴퓨터와 직접 통신하는 것처럼 보입니다.

하나는 다른 것보다 낫지는 않지만 완전히 GUI 기반 환경에서 터미널로 전환하는 것은 분명히 여행이었습니다.


1
+1 "Unix guy"와 함께 Dilbert를 상기시켜줍니다 . 더 나은 운영 체제를 구입하십시오. :)
luser droog

5

다음은 두 세계 모두에서 살았던 프로그래머의 관찰 결과입니다. 다른 답변에서 이미 작성한 사항은 반복하지 않습니다.

CLI 기반 개발은 각각 1 개의 기능을 수행하는 다양한 프로그램을 사용하는 경향이 있습니다. GUI 기반 개발은 수십 가지 기능을 수행하는 1 개의 큰 프로그램 (IDE)을 사용하는 경향이 있습니다. 이 한 가지 차이점은 몇 가지 결과를 초래합니다.

IDE는 항상 일하는 "집"이되기 때문에 독점적 (이진) 형식을 사용하여 데이터를 보유 할 수 있습니다. 호환성은 같은 프로젝트에서 2 개의 다른 IDE에서 작업 할 것으로 기대하지 않기 때문에 큰 문제가되지 않습니다. 반면에 CLI 도구는 일반적으로 일반 텍스트 파일로만 작동합니다.

CLI 기반 개발을 통해 도구를 점진적으로 전환하거나 새 도구를 워크 플로우에보다 쉽게 ​​통합 할 수 있습니다. IDE를 선택하는 것은 더 또는 전혀 없으며, IDE를 전환하는 것이 더 고통 스럽습니다.

IDE에 내장 된 "빌드"메뉴가 아닌 CLI 빌드 스크립트를 사용하면 몇 년 동안 코드에서 벗어나 다시 돌아와 번거 로움없이 빌드 할 수 있습니다. GUI 기반 개발을 사용하면 그때까지 완전히 다른 IDE를 실행하고있을 가능성이 있습니다. 아마도 코드를 작성할 때 사용했던 코드가 현재 OS에서 실행되지 않을 수도 있습니다.

IDE에서 자체 도구를 빌드한다는 것은 (아마도 큰) 플러그인 API를 배우고 특정 언어를 사용하는 것을 의미합니다. CLI를 사용할 때 사용자 정의 도구를 만드는 데 특별한 것은 없습니다.

반면에 IDE의 장점은 "통합 된"것입니다. 따라서 편집기 창에서을 클릭하여 디버거 중단 점 등을 설정할 수 있습니다.

또 다른 요점 : 선택은 개발 플랫폼, OS 및 사용하는 언어에 따라 다릅니다. 특정 플랫폼에서 IDE 기반 개발은 일반적인 개발 문화에 깊이 뿌리 내리고 있습니다. 다른 경우에는 CLI 기반 개발이 널리 사용됩니다. IDE 기반 개발이 널리 사용되는 플랫폼을 사용하는 경우 CLI 도구가 제대로 개발되지 않고 지원되지 않을 수 있습니다. 대화도 마찬가지입니다.


4

우리가 농장에서 인터넷을 사용하지 않았기 때문에 대부분의 어린 시절은 컴퓨터에 쓰이지 않았습니다. 나는 고등학교 늦게 프로그래밍을 시작했고 기본적으로 항상 GUI에서 일했습니다. 대학에서 나는 CLI에서 자란 사람을 만났고 그 방법으로 모든 것을했습니다. 그래서 나는 교수의 말을 듣지 않고 리눅스 서버를 설치하기로 결정했습니다. 몇 년 후 내 친구는 내가 임베디드 코드를 작성하는 것을 보았고 내가 쓴 방법을 믿을 수 없었습니다.

나는 기본적으로 반 CLI 반 GUI를 사용합니다. GUI 번들 환경이 훨씬 빠르고 효율적으로하는 일이 있습니다. CLI도 마찬가지입니다. 텍스트 편집의 대부분은 VIM / EMACS (여기서는 전쟁을 피하십시오)의 고급 CLI 편집기가 텍스트 조작을 가장 효율적으로 만들기 때문에 VIM에서 수행됩니다. 반면에 GDB를 사용한 임베디드 디버깅과 같은 것은 키보드없이 텍스트를 편집하는 것만 큼 고통 스럽다. 강력하고 확실하게 충분한 시간을 확보하면 원하는 정보를 찾을 수 있지만 다른 메모리 블록과 비교할 때 특히 모든 메모리 블록에 즉시 액세스 할 수있는 멋진 GUI 창을 갖는 것은 매우 중요합니다.

어쨌든 내가 실제로 말하려는 것은 GUI 대 CLI가 아니라 CLI가 더 좋고 GUI가 더 낫다는 것입니다. 결국 IO가 생각 프로세스보다 느리면 문제가 있습니다.


3

"밤새 CLI 전문가로 전환?" 예, 문지름이 있습니다. 잘 디자인 된 GUI는 CLI보다 검색하기 쉬우 며 초보자에게는 더 관대합니다.

최근 타일링 창 관리자 (dwm)에 의해 개선 된 내 워크 플로는 많은 입력으로 구성됩니다. 마우스를 연결하지 않고도 랩톱을 실제로 사용할 수 있습니다 (트랙 패드는 왼쪽에있는 항목에 적합합니다). 많은 앱을 열어두고 alt-tab으로 전환합니다. 나는 창문을 움직이고 크기를 조정하는 데 시간을 낭비하지 않습니다.

대부분의 경우 브라우저, vim 및 많은 터미널을 사용합니다. SSH는 (물리적으로) 일하는 위치에 대해 많은 유연성을 제공합니다. 우리 모두가 그물에 10 기가비트 파이프를 가지고 있으면 원격 데스크톱이 더 나은 경험을 제공 할 수 있지만 숨을 쉬지 않을 것입니다.

복잡한 기능을 충분히 활용할 수있을 정도로 vim을 잘 배웠지 만 그 방향으로 기울고 있습니다. 실패한 vim에서 올바른 줄로 vim으로 점프하고 싶습니다. (기술적으로 vim은 터미널에서 실행 되더라도 비주얼 인터페이스이지만 마우스가 아닌 키보드로 구동합니다.)

실제 문제는 제대로 설계되지 않은 인터페이스입니다. 잘 설계된 인터페이스는 만들기가 어렵 기 때문에 어느 캠프에서도 자주 발생하지 않습니다. 그러나 현재 UX 이외의 마법사가 CLI보다 GUI를 설계하고 있기 때문에 ....

(내 다른 큰 애완 동물이 부풀어 오른 것입니다. 200kB 프로그램과 동일한 작업을 수행하는 데 19MB 프로그램이 필요하면 문제가 있습니다. DOS 용 XTree Gold는 최신 파일 관리자보다 생산성을 향상 시켰습니다. Windows 2.11은 타일 만 사용했습니다. Turbo C는 멋진 IDE였습니다. 왜 Nook이 Mac classic보다 느리게 실행되는 것 같습니까? 커널 자체가 이전에 사용했던 전체 시스템보다 더 많은 디스크 공간을 차지하는 이유는 무엇입니까?)


2

그래픽 사용자 인터페이스를 사용하면 동일한 작업을 반복해서 수행하기 위해 프로그램과 반복적으로 상호 작용해야합니다. 셸을 사용하면 작업을보다 쉽게 ​​자동화 할 수 있으며 파이핑을 통해 프로그램이 함께 작동하도록 할 수 있습니다. 예를 들어 파일이나 네트워크 패킷 세트에서 정규식에 일치하는 항목을 출력하는 데 사용할 수 있습니다. 말했듯이 많은 작업에서 더 빠릅니다.

SSH를 사용하지 않으면 터미널에서 프로그래밍 하는 것이 그래픽 편집기보다 훨씬 나을 수 있습니다.

필자는 개인적으로 일반적인 Windows 명령 줄보다 유닉스 쉘이 훨씬 더 접근하기 쉽고 타일링 창 관리자와 많은 터미널이있는 Linux 시스템에 매우 빠져 있습니다.


2

모든 예제는 거의 한 단계 프로세스입니다. 대부분의 GUI 환경에서 현재 응용 프로그램과 관련이없는 파일을 이동하려면 응용 프로그램을 종료하지 않고 파일 메뉴에서 수행 할 수 있습니다. 명령 프롬프트로 이동하는 것이 의미가 없습니다. 파일을 복사하고 다른 이름을 지정하려면 명령 행에서 한 번에 수행 할 수 있습니다. 이것을 배치 파일에 넣으려면 최소한 이것을 수행하는 방법을 알아야하지만 원하는 경우 GUI에서 배치 파일을 실행할 수 있습니다.

키보드 명령 대 마우스에 대해서도 비슷한 논쟁이있었습니다.


0

내가 일하는 방식은 GUI에 훨씬 유리하다.

일반적인 사용법 :

  • 세 가지 다른 플랫폼을위한 세 가지 IDE. 일부 스크립트의 메모장 ++ 창도 있습니다. 모든 빌드 시스템의 명령을 기억할 수있는 방법은 없습니다. CLI의 문제점은 빌드 작업을하기 위해 많은 세부 사항을 알아야한다는 것입니다. 최신 IDES에는 일반적으로 기본적으로 적절한 옵션이 있습니다. 시간이 오면 항상 더 자세히 볼 수 있습니다.
  • SVN 또는 Git 통합. 프로그래밍에 도움이되는 프로그램에는 너무 많은 옵션이 있으며 대부분 커밋 또는 업데이트 만합니다.
  • 네트워크 관련 사항 : 운 좋게도 사무실에서 모든 네트워크 설정을 수행해야합니다. 대부분의 네트워크 보드는 많은 CLI 명령을 제공하지만 상태에 대한 개요가 필요한 경우 방화벽과 라우팅입니다. 라우팅을 위해서는 명령 줄을 사용하는 것이 가능하지만 방화벽은 복잡해지며 GUI가 좋은 점이 있으면 많은 정보를 표시합니다.
  • 일반적으로 하나의 것에서 다른 것으로 이동하는 것이 많이 있습니다. 시각적 컨텍스트를 사용하면 컨텍스트 전환이 더 쉽습니다.

CLI, 스크립팅의 주요 이점은 거의 사용하지 않습니다. 우리가 반복하는 작업은 c #으로 함께 만들어졌으며 종종 변경되지 않는 cron job 앱입니다. 우리는 리눅스에서 작동하는 방법을 가지고 있지만 주로 포팅 (부스트)되어 파일과 관련된 혼란이 최소화됩니다. 그리고 문제가 생기면 리눅스를위한 좋은 IDE도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.