나의 충고:
bash
(그리고 그 의미는) 범용 프로그래밍 언어가 아닙니다. 정교한 스크립팅을 수행하는 것이 가능하지만 bash
일반적으로 프로그래밍을 배우는 가장 좋은 방법은 아닙니다. 다른 프로그램을 실행하고 데이터 파일과 디렉토리를 처리하며 입출력을 마샬링하는 시스템 관리 작업을 수행하는 가장 자연스러운 방법입니다. 경우 bash
망치는 정말 손톱 모양을 문제를 보유하고 있습니다. 아무것도 아닌 사소한에서 할 배우는 것은 bash
당신의 아주 작은 부분 집합을 배우면 훨씬 쉬울 것입니다 sed
및 awk
(이후의 문자열 조작 bash
대부분이 "작은"언어와 유사한 작업의 구문에서 영감).
- Linux에서 범용 프로그래밍을하려면 많은 열정적 인 주장을들을 수 있습니다. 가장 좋은 두 가지 경쟁자는 Perl 과 Python 입니다. 이들은 매우 높은 수준의 스크립팅 언어로, 시스템의 모든 사용자 공간 프로세스에 액세스 할 수있는 거의 모든 작업을 수행 할 수있는 충분한 저수준 기능을 제공하며 사전 작성된 모듈 및 라이브러리의 방대한 모음을 제공합니다.
난 당신이 C에 입문 텍스트를 읽고 실행 시간을 보낼 것이 좋습니다 않는 strace
과 ltrace
같은 몇 가지 간단한 유틸리티 명령에 명령을 ls
하고 mkdir
그리고 /bin/echo
내가 좋을 것 등 (사실 요즘 ltrace -S
대신에 strace
두 명령에서와에 출력으로 만 진출 ltrace
에 의해 증강으로 출력 -S
옵션은) 매우 교육이 될 것입니다.
C는 Linux 커널과 GNU libc가 작성되는 기본 프로그래밍 언어입니다. (작은 부품이 조립되어 있습니다). Linux (또는 다른 UNIX 계열) 시스템의 거의 모든 프로그램은 C 라이브러리 (libc)에 연결됩니다. 주요 Perl 및 Python 인터프리터 (및 대부분의 다른 스크립팅 언어)도 C로 작성됩니다.이 프로그램 (커널, 공통 시스템 라이브러리 및 다양한 스크립팅 언어 인터프리터)은 모두 C 프로그래머가 작성합니다. 설계 및 기능은 크게 영향을받습니다. 기본 구현으로. 따라서이 중 하나에 대한 깊은 이해는 결국 C에 대한 이해를 수반합니다.이 레벨에서 프로그래밍을 이해하기 위해 C ++ 또는 Java에 대해 아무것도 알 필요가 없습니다. (직업 패치에 따라 각자 흥미롭고 필요할 수 있습니다.
따라서 지금까지 내 건물에 동의하면 펄과 파이썬 중 하나를 선택했습니다.
실제 화염 전쟁이 시작되는 곳입니다.
내 조언은 먼저 Python (2.x)에 초점을 맞추는 것입니다. 파이썬은 비교적 간단하고 일관된 구문을 가지고 있습니다. 몇 시간 만 에 파이썬 구문 의 기본 사항을 배울 수 있으며 이는 대부분의 구문입니다. 기본 구문에 주름이있는 몇 가지 기능 (목록 이해, 생성기 표현, 데코레이터) 만 있습니다. 따라서 파이썬을 배우려는 대부분의 노력은 광범위한 표준 라이브러리를 배우고이를 사용하는 "최상의"방법을 찾는 데 전념 할 것입니다 (그리고 프로그램을 강력하게 만들기 위해 처리 할 가치가있는 특정 예외 집합을 알아내는 것) 가장 중요한 것은 기본 개념을 배우는 것입니다.
파이썬의 광범위한 라이브러리와 비교적 간단한 구문에는 두 가지 뚜렷한 단점이 있다고 생각합니다.
첫째, 파이썬에서 매우 높은 수준의 일을하는 방법을 배우면 지루하기 위해 낮은 수준에서 일해야한다는 생각을 찾을 수 있습니다. 내가 일하는 곳 Perl이 표준입니다. 저는 펄에서보다 훨씬 빠르고 안정적으로 작업 할 수있는 파이썬으로 작업을 프로토 타이핑합니다. 그리고 나는 동료들을 위해 그것을 펄로 포팅하는 것을 두려워합니다. (Python을 사용하기 전에 Perl에서 상당히 훌륭했습니다. 따라서 간단한 친숙 함은 문제가되지 않습니다).
다른 단점은 파이썬에서 주어진 작업을 수행하는 최고 수준의 방법을 찾기가 어렵다는 것입니다. 예를 들어 웹 페이지를 가져 오려면 처음에는 낮은 수준의 소켓으로 시도해보십시오. 그러나 이미 urllib
및 / 또는 urllib2
모듈에 포함되어있는 상당히 많은 코드를 복제하고 있습니다 . 2.7.1 현재 표준 라이브러리에이 두 가지가 모두 포함되어 있다는 사실이 저의 지적입니다. 가능한 경우 파이썬 관리자는 오래된 모듈과 API를 투명하게 확장했습니다. 그러나 파이썬이 어떤 이유로 투명 확장이 불가능한 2 개 또는 3 개의 모듈을 보유하고있는 수십 가지 경우가 있습니다. (다른 예에서는 명령 줄 옵션을 구문 분석하는 옵션 argparse
인 optparse
, 및getopt
. getopt
(가장 오래된 것)을 사용하여 프로그램을 작성하는 데는 거의 해가 없습니다 . 옵션이 적고 엄격한 호출 규칙 (예 : 소수의 사람들 만 사용)을 가진 매우 간단한 유틸리티의 경우 본질적으로 sys.argv
자신 을 걷는 데 아무런 문제가 없습니다 . 그러나 일반적으로 문서를주의 깊게 읽고 사용 가능한 최신 또는 고급 기능을 설명하는 이전 또는 하위 모듈 하단에있는 링크를 따라가는 것이 좋습니다.
저의 조언은 당신이 더 깊은 개념에 초점을 맞추고 구문 및 언어 특정 문제에 많은 시간과 노력을 들일 필요가 없다는 의견에 근거합니다. 파이썬에 포함 된 서브 프로세스, 쓰레드 또는 멀티 프로세싱 기능을 언제 사용해야하는지 이해하는 것은 언어와 관계가 없으며 언어에 관계없이 프로그래밍 능력과 관련이 있습니다. (스레딩 및 멀티 프로세싱과 비교하여 Twisted의 이벤트 중심 모델에 대한 논쟁을 이해할 수있는 시점에서 아마도 파이썬을 마스터하고 모든 언어로 프로그래밍 할 준비가 된 것입니다).
Perl에 대한 반론은 간단하고 실용적입니다. 특히 Perl의 기술을 요구하는 작업이 상당히 많습니다. Perl은 강력한 언어이며 매우 광범위한 라이브러리를 가지고 있습니다. (대부분의 Linux 시스템과 함께 배포되는 Perl의 핵심은 표준 Python 라이브러리보다 작은 기능 범위를 포괄합니다. 배포판 또는 CPAN을 통해 상당수의 추가 패키지를 설치한다고 가정합니다.-포괄적 인 Perl Archive 회로망). (반면에 따로 따로 가져와야하는 Python 모듈과 패키지가 적습니다 .PyPI에서 사용할 수있는-Python 패키지 색인).
따라서 Perl을 배우면 단기적으로 작업, 특히 sysadmin 작업을 찾을 수 있습니다. 그러나 Perl의 구문은 ... 음 .. 일부 자체 애호가들에게는 "병리학 적으로 절충 적입니다!" Perl은 매우 간결 할 수 있으며 코드는 약간의 구두점으로 채워져 있습니다. 그것을 좋아하는 사람들은 그것이 "쉽고"완벽하다는 말을 끝없이 주장 할 것이며, 주어진 코드 조각이 어떻게 해석되었는지에 대한 혼란으로 가득 찬 포럼에서 끝없는 기회를 가질 것입니다. 문서와 공개 포럼에서이를 지원하는 사람들이 사용하는 구문과 언어는 학습을 위해 상당한 노력을 기울일 수있는 정도로 미묘한 차이가 있습니다.
이제,이 선행 논평은 주관적이고 편향되어 있습니다. Perl을 사용 해보고 직관적이고 유쾌한 구문을 찾을 수 있습니다. 그렇다면 더 많은 힘을 얻으십시오. 그러나 저는 개인적으로 Perl의 특질에 대한 이해가 매우 빠르게 붕괴되는 것을 발견했습니다. 기본 사항은 유지하지만 몇 줄 이상의 코드로 다시 전환해야 할 때마다 어려움을 겪습니다.
Java, Lisp 및 Scheme, TCL, Scala 등 공부할 다른 언어가 많이 있습니다. 그러나 유틸리티와 단순성 사이에서 최상의 균형을 제공하는 것으로 시작하는 것이 좋습니다.