Moja rada:
bash
(i podobne) nie są językami programowania ogólnego przeznaczenia. Chociaż możliwe jest wykonanie skomplikowanych skryptów bash
, nie jest to najlepszy sposób na naukę programowania w ogóle. Jest to najbardziej naturalny sposób na wykonywanie zadań związanych z administrowaniem systemami, które dotyczą głównie wykonywania innych programów, obsługi plików danych i katalogów oraz zbierania danych wejściowych i wyjściowych do nich. Jeśli bash
jest to młotek, zarezerwuj go na problemy, które naprawdę wyglądają jak gwoździe. Nauka robienia czegokolwiek, co nie jest trywialne, bash
będzie znacznie łatwiejsza, jeśli nauczysz się bardzo małych podzbiorów sed
i awk
(ponieważ manipulowanie ciągami bash
jest w dużej mierze inspirowane składnią podobnych operacji w tych „małych” językach).
- Do programowania ogólnego zastosowania pod Linuksem usłyszysz wiele żarliwych argumentów. Dwaj najlepsi pretendenci to Perl i Python . Są to zarówno języki skryptowe wysokiego poziomu, które są ogólnego zastosowania, które ujawniają wystarczającą funkcjonalność niskiego poziomu, aby wykonać prawie każdą operację, która jest dostępna dla dowolnego procesu przestrzeni użytkownika w systemie, oraz z ogromną kolekcją wstępnie napisanych modułów i bibliotek.
Polecam lekturę tekstu wprowadzającego w sprawie C i spędzić trochę czasu uruchamiając strace
i ltrace
poleceń na kilka prostych poleceń użytkowych jak ls
i mkdir
i /bin/echo
itd. (W rzeczywistości te dni Sugeruję ltrace -S
zamiast strace
ale wypadów do wyjścia z obu komend i do ltrace
wyjścia jak zwiększona przez -S
opcją będzie niezwykle edukacyjnych).
C jest podstawowym językiem programowania, w którym napisane jest jądro Linuksa i GNU libc. (Małe części są w zespole). Prawie wszystkie programy w systemie Linux (lub innym systemie podobnym do UNIX) są połączone z bibliotekami C (libc). Główne interpretery Perla i Pythona (i większość innych języków skryptowych) są również napisane w C. Programy te (jądro, wspólne biblioteki systemowe i różne interpretery języków skryptowych) są napisane przez programistów C, na ich projekt i cechy mają duży wpływ przez ich podstawowe wdrożenia. Zatem głębsze zrozumienie któregokolwiek z nich ostatecznie wiąże się ze zrozumieniem C. Nie musisz nic wiedzieć o C ++ ani Javie, aby zrozumieć programowanie na tym poziomie. (Każda z nich może być interesująca i niezbędna sama w sobie w zależności od twojej kariery zawodowej,
Jeśli więc zgadzasz się z moimi przesłankami, sprowadziliśmy to do wyboru między Perlem a Pythonem.
Tutaj zaczynają się prawdziwe wojny płomieniowe.
Radzę najpierw skupić się na Pythonie (2.x). Python ma stosunkowo prostą i spójną składnię. Możesz nauczyć się podstaw składni Pythona w ciągu kilku godzin i to jest ogromna większość składni, jaką kiedykolwiek spotkasz. Istnieje tylko kilka funkcji (wyrazy ze spisu, wyrażenia generatora, dekoratory), które są pomarszczeniem podstawowej składni. Tak więc większość twojego wysiłku w nauce Python zostanie poświęcona nauce obszernych bibliotek standardowych i próbowaniu znalezienia „najlepszego” sposobu ich używania (i ustaleniu, jakie są szczególne zestawy wyjątków, które warto obsługiwać, aby Twoje programy były niezawodne) i, co najważniejsze, w nauce podstawowych pojęć.
Myślę, że rozbudowane biblioteki Pythona i stosunkowo prosta składnia mają dwie wyraźne wady.
Po pierwsze, kiedy uczysz się, jak robić rzeczy na bardzo wysokim poziomie w Pythonie, możesz pomyśleć, że musisz pracować na niższym poziomie, aby być nudnym. Tam, gdzie pracuję, Perl jest standardem. Prototypuję swoją pracę w Pythonie, gdzie wiem, że mogę sprawić, by działała o wiele szybciej i niezawodnie niż w Perlu; potem boję się, że muszę przejść i przenieść go do Perla dla moich kolegów. (Byłem dość dobry w Perlu przez wiele lat, zanim użyłem Pythona --- więc nie jest to kwestia zwykłej znajomości).
Inną wadą jest to, że czasami trudno jest znaleźć najwyższy poziom sposobu wykonania danego zadania w Pythonie. Na przykład, aby pobrać stronę internetową, możesz początkowo spróbować zrobić to z gniazdami niskiego poziomu ... które będą działać. Powieliłbyś jednak sporo kodu, który już możesz znaleźć, w tym w modułach urllib
i / lub urllib2
. Sam fakt, że standardowe biblioteki, począwszy od wersji 2.7.1, zawierają obie te cechy, jest moim zdaniem. Tam, gdzie to możliwe, opiekunowie Pythona w przejrzysty sposób rozszerzają starsze moduły i interfejsy API; jednak istnieją dziesiątki przypadków, w których Python zachowuje dwa lub trzy moduły, w których przezroczyste rozszerzenie z jakiegoś powodu nie było możliwe. (Inny przykład można spojrzeć na opcje do analizowania opcje wiersza poleceń: argparse
, optparse
, igetopt
. Pisanie programów przy użyciu getopt
(najstarszego z nich) jest niewielkie . W przypadku bardzo prostych narzędzi z kilkoma opcjami i sztywną konwencją wywoływania (używanych na przykład przez niewielką grupę osób), nie ma nic złego w chodzeniu nad sys.argv
sobą. Jednak zwykle warto uważnie przeczytać dokumentację i podążać za linkami u dołu starszych lub niższych modułów, które opisują dostępne funkcje nowszych lub wyższych poziomów.
Moja rada opiera się na mojej opinii, że chcesz skupić się na głębszych pojęciach i nie musisz poświęcać dużo czasu i wysiłku na problemy składniowe i specyficzne dla języka. Zrozumienie, kiedy należy użyć podprocesu, w porównaniu do wątku lub funkcji wieloprocesorowych zawartych w Pythonie, ma stosunkowo niewiele wspólnego z językiem i wszystko, co dotyczy biegłości programistycznej niezależnie od języka. (W punkcie, w którym można zrozumieć argumenty dotyczące modelu sterowanego zdarzeniami Twisted przez porównanie z wątkami i wieloprocesowością, prawdopodobnie opanujesz Python i będziesz gotowy do programowania w dowolnym języku).
Argument kontrpracy dla Perla jest prosty i praktyczny. Istnieje jeszcze kilka innych miejsc pracy, które będą wymagać od Perla umiejętności. Perl jest potężnym językiem i ma niezwykle rozbudowane biblioteki. (Rdzeń Perla dystrybuowany z większością systemów Linux obejmuje mniejszy zakres funkcjonalności niż standardowe biblioteki Pythona; zakłada się, że zainstalujesz znaczną liczbę dodatkowych pakietów z twojej dystrybucji lub poprzez CPAN --- Comprehensive Perl Archive Sieć). (Dla kontrastu jest mniej modułów i pakietów Python, które muszę pobrać osobno ... są one dostępne z PyPI --- Indeks pakietów Python).
Jeśli więc nauczysz się Perla, będziesz miał dużą szansę na znalezienie pracy, szczególnie pracy sysadmin, w krótkim okresie. Jednak składnia Perla jest… cóż… słowami niektórych własnych entuzjastów… „patologicznie eklektyczna!” Perl może być bardzo zwięzły, a jego kod jest wypełniony sporą interpunkcją. Ci, którzy go uwielbiają, będą bez końca argumentować, że jest to „łatwe” i ma doskonały sens --- i będą mieli nieograniczone możliwości robienia tego na forach wypełnionych nieporozumieniami na temat dokładnej interpretacji danego fragmentu kodu. Składnia i język używany w dokumentacji oraz przez osoby, które wspierają ją na forach publicznych, są dopracowane do tego stopnia, że można włożyć znaczny wysiłek, aby się ich nauczyć.
Pamiętajcie, że powyższy komentarz jest subiektywny i stronniczy. Możliwe, że wypróbujesz Perla i zauważysz, że jego składnia jest intuicyjna i przyjemna. Jeśli tak, to więcej mocy dla ciebie. Jednak osobiście uważam, że moje pojmowanie osobliwości Perla rozpada się bardzo szybko. Podstawy, które zachowuję, ale uważam, że jest to trudność, ilekroć muszę przełączyć się z powrotem na więcej niż kilka wierszy kodu.
Istnieje wiele innych języków do nauki, Java, Lisp i Scheme, TCL, Scala i tak dalej. Proponuję jednak zacząć od takiego, który oferuje najlepszą równowagę między użytecznością a prostotą.