Benim tavsiyem:
bash
(ve ilk) genel amaçlı programlama dilleri değildir. Bazı karmaşık komut dosyalarını gerçekleştirmek mümkün olsa da, bash
genel olarak programlamayı öğrenmenin en iyi yolu değildir. Öncelikle diğer programları yürütmek, veri dosyalarını ve dizinlerini işlemek ve bunlara giriş ve çıkışları birleştirmek gibi sistem yönetim görevlerini yerine getirmenin en doğal yoludur. Eğer bash
bir çekiç, gerçekten çivi gibi göz yapmak problem olup olmadığı saklıdır. Şey önemsiz olmayan in yapmak Öğrenme bash
sen bazıları çok küçük alt kümelerini öğrendikleri takdirde oldukça kolay olacaktır sed
ve awk
(çünkü dize manipülasyon bash
ölçüde bu "küçük" dilde benzer operasyonların sözdizimi esinlenerek).
- Linux altında genel amaçlı programlama için birçok ateşli argüman duyacaksınız. En iyi iki yarışmacı Perl ve Python . Bunlar, sisteminizdeki herhangi bir kullanıcı alanı işlemine erişilebilen hemen hemen her işlemi gerçekleştirmek için yeterli düşük düzey işlevselliği ortaya çıkaran ve çok sayıda önceden yazılmış modül ve kitaplık koleksiyonuyla genel amaçlı olan çok yüksek düzeyli komut dosyası dilleri.
Sana C bir giriş metni okumak ve koşma biraz zaman harcamak tavsiye ediyoruz strace
ve ltrace
benzeri bazı basit yarar komutlar komutları ls
ve mkdir
ve /bin/echo
ben öneririm vb (Aslında bu günlerde ltrace -S
yerine strace
hem komutlar gelen ve içine çıkışı içine ancak baskınlarınızda ltrace
güçlendirilecek şekilde çıkış -S
seçeneği) son derece eğitici olacaktır.
C, Linux çekirdeğinin ve GNU libc'nin yazıldığı birincil programlama dilidir. (Küçük parçalar montajda). Bir Linux (veya UNIX benzeri) sistemdeki hemen hemen tüm programlar C kütüphanelerine (libc) bağlıdır. Birincil Perl ve Python tercümanları (ve diğer birçok kodlama dili) de C dilinde yazılmıştır. Bu programlar (çekirdek, ortak sistem kütüphaneleri ve çeşitli kodlama dili tercümanları) hepsi C programcıları tarafından yazılmıştır ve tasarımları güçlü bir şekilde etkilenir. temel uygulamalarıyla Bu nedenle, bunlardan herhangi birini daha iyi anlamak, C'yi anlamayı gerektirir. Bu düzeyde programlamayı anlamak için C ++ veya Java hakkında hiçbir şey bilmenize gerek yoktur. (Kariyer yamalarınıza bağlı olarak her biri kendi başına ilginç ve gerekli olabilir,
Yani, şimdiye kadar olan binalarıma katılıyorsanız, onu Perl ve Python arasında bir seçim haline getirdik.
İşte gerçek alev savaşlarının başladığı yer.
Benim tavsiyem önce Python'a (2.x) odaklanmak. Python nispeten basit ve tutarlı bir sözdizimine sahiptir. Birkaç saat içinde Python sözdiziminin temellerini öğrenebilirsiniz ve bu, karşılaşacağınız sözdiziminin büyük çoğunluğudur. Temel sözdiziminin kırışıkları olan sadece birkaç özellik (liste kavrayışları, jeneratör ifadeleri, dekoratörler) vardır. Bu nedenle, Python'u öğrenme çabanızın çoğu kapsamlı standart kütüphaneleri öğrenmeye ve bunları kullanmanın "en iyi" yolunu bulmaya çalışacaktır (ve programlarınızı sağlamlaştırmak için ele almaya değer özel istisna kümeleri hangileri olduğunu bulmaya) ve en önemlisi, temel kavramları öğrenmede.
Python'un geniş kütüphanelerinin ve nispeten basit sözdiziminin iki farklı dezavantajı olduğunu düşünüyorum.
İlk olarak, Python'da çok yüksek bir seviyede nasıl yapıldığını öğrendiğinizde, sıkıcı olmak için daha düşük bir seviyede çalışmak zorunda kalma fikrini bulabilirsiniz. Çalıştığım yer Perl standart. Çalışmamı Perl'de çok daha hızlı ve güvenilir bir şekilde çalıştırabileceğimi bildiğim Python'da prototiplendiriyorum; sonra da meslektaşlarım için geçip Perl'e taşımak zorunda kaldım. (Python kullanmadan önce Perl yıllarında oldukça iyiydim --- bu yüzden basit bir aşinalık meselesi değil).
Diğer dezavantaj, Python'da belirli bir görevi yerine getirmenin en üst düzey yolunu bulmak zor olabilir. Örneğin, bir web sayfasını getirmek için başlangıçta düşük seviyeli soketlerle çalışmayı deneyebilirsiniz ... Bununla birlikte, urllib
ve / veya urllib2
modüller dahil olmak üzere bulabileceğiniz kodun çoğunu çoğaltabilirsiniz . 2.7.1'den itibaren standart kütüphanelerin bunların her ikisini de içermesi benim açımdan. Mümkün olan yerlerde Python sahipleri eski modülleri ve API'leri şeffaf bir şekilde genişletmişlerdir; bununla birlikte Python'un şeffaf bir şekilde genişletmenin mümkün olmayan iki veya üç modülünü elinde tuttuğu düzinelerce vaka vardır. (Başka Örneğin komut satırı seçenekleri ayrıştırma için seçenekler bakabilir: argparse
, optparse
, vegetopt
. getopt
(Bunların en eskisini) kullanarak programlarınızı yazmanın çok az zararı vardır . Birkaç seçenek ve katı bir çağrı kuralı olan çok basit araçlar için (örneğin sadece küçük bir grup insan tarafından kullanılır), o zaman sys.argv
kendinizin üzerinde yürümenin doğasında yanlış bir şey yoktur . Bununla birlikte, genellikle belgeleri dikkatli bir şekilde okumaya ve mevcut daha yeni veya daha yüksek seviye özelliklerini tanımlayan eski veya daha düşük seviye modüllerin altındaki bağlantıları izlemeye değer.
Benim tavsiyem, daha derin kavramlara odaklanmak istediğiniz ve zaman ve çabalarınızın çoğunu sözdizimsel ve dile özgü konular üzerinde harcamak zorunda olmadığınız fikrime dayanıyor. Ne zaman bir alt işlemin, bir iş parçacığının veya Python'un içerdiği çoklu işlem özelliklerinin ne zaman kullanılacağını anlamak, dil ile ve dilden bağımsız olarak programlama yeterliliği ile ilgili her şeyle nispeten az ilgilidir. (Twisted'ın olay güdümlü modeli hakkında argümanları iş parçacığı ve çoklu işleme ile karşılaştırarak anlayabileceğiniz noktada muhtemelen Python'da ustalaşacak ve herhangi bir dilde programlamaya hazır olacaksınız).
Perl için karşı argüman basit ve pratiktir. Dışarıda, özellikle Perl ile beceriler çağıracak birkaç iş daha var. Perl güçlü bir dildir ve çok geniş kütüphanelere sahiptir. (Çoğu Linux sistemiyle dağıtılan Perl'in çekirdeği, standart Python kitaplıklarından daha küçük bir işlevsellik kapsamını kapsar; dağıtımınızdan veya CPAN'dan önemli sayıda ek paket yükleyeceğiniz varsayılır --- Kapsamlı Perl Arşivi Ağ). (Aksine, ayrı ayrı getirmem gereken daha az Python modülü ve paketi var ... bunlar PyPI --- Python Paket Dizini'nden edinilebilir).
Yani, Perl öğrenirseniz, kısa vadede, özellikle sysadmin işlerini bulmak için bir bacağınız olacaktır. Ancak Perl'in sözdizimi ... iyi ... bazı meraklılarının sözleriyle ... "patolojik olarak eklektik!" Perl son derece kısa olabilir ve kodu biraz noktalama işareti ile doldurulur. Bunu sevenler sonsuza dek bunun "kolay" olduğunu ve mükemmel mantıklı olduğunu savunacaklar - ve belirli bir kod snippet'inin tam olarak nasıl yorumlandığı konusunda kafa karışıklığı olan forumlarda bunu yapmak için sonsuz fırsatlara sahip olacaklar. Belgelerde ve onu herkese açık forumlarda destekleyenler tarafından kullanılan sözdizimi ve dil, bunları öğrenmek için büyük çaba gösterebileceğiniz noktaya göre inceliklidir.
Şimdi, bu önceki yorumun öznel ve taraflı olduğunu lütfen unutmayın. Perl'i denemeniz ve sözdiziminin sezgisel ve hoş olduğunu bulmanız mümkündür. Eğer öyleyse, size daha fazla güç. Ancak şahsen Perl'in kendine özgü ifadelerini kavramanın çok hızlı bir şekilde azaldığını görüyorum. Elde ettiğim temeller, ancak birkaç satırdan daha uzun bir süre boyunca ona geri dönmek zorunda kaldığımda bir mücadele olduğunu düşünüyorum.
Çalışacağınız birçok dil var, Java, Lisp ve Scheme, TCL, Scala, vb. Ancak, fayda ve basitlik arasında en iyi dengeyi sunan biriyle başlamanızı öneririm.