Saranku:
bash
(dan sejenisnya) bukan bahasa pemrograman tujuan umum. Meskipun dimungkinkan untuk menyelesaikan beberapa skrip canggih di bash
dalamnya bukan cara terbaik untuk belajar pemrograman secara umum. Ini adalah cara paling alami untuk menyelesaikan tugas-tugas administrasi sistem yang terutama berputar di sekitar menjalankan program lain, menangani file data dan direktori mereka dan mengatur input dan output ke dan dari mereka. Jika bash
palu, sisihkan untuk masalah yang benar-benar terlihat seperti paku. Belajar melakukan apa saja yang non-sepele bash
akan jauh lebih mudah jika Anda mempelajari beberapa himpunan bagian yang sangat kecil sed
dan awk
(karena manipulasi string bash
sebagian besar diilhami oleh sintaks operasi yang sama dalam bahasa "kecil" ini).
- Untuk pemrograman tujuan umum di Linux Anda akan mendengar banyak argumen yang berapi-api. Dua pesaing terbaik adalah Perl dan Python . Ini adalah kedua bahasa scripting tingkat sangat tinggi yang bertujuan umum, yang memperlihatkan fungsionalitas tingkat rendah yang cukup untuk melakukan hampir semua operasi yang dapat diakses oleh setiap proses ruang pengguna di sistem Anda, dan dengan koleksi besar modul pra-tertulis dan perpustakaan yang tersedia.
Saya sarankan Anda membaca teks pengantar pada C dan menghabiskan beberapa waktu menjalankan strace
dan ltrace
perintah pada beberapa perintah utilitas sederhana seperti ls
dan mkdir
dan /bin/echo
lain - lain (Sebenarnya hari ini saya akan menyarankan ltrace -S
sebagai pengganti strace
tetapi terjun ke dalam output dari kedua perintah dan ke yang ltrace
output sebagai ditambah dengan -S
opsi akan sangat pendidikan).
C adalah bahasa pemrograman utama di mana kernel Linux dan libc GNU ditulis. (Bagian kecil dalam perakitan). Hampir semua program pada sistem Linux (atau UNIX-like lainnya) dihubungkan dengan C library (libc). Interpreter Perl dan Python primer (dan sebagian besar bahasa scripting lainnya) juga ditulis dalam C. Program-program ini (kernel, pustaka sistem umum dan berbagai penerjemah bahasa scripting) semuanya ditulis oleh programmer C karena desain dan fitur-fiturnya sangat dipengaruhi. oleh implementasi yang mendasarinya. Jadi, pemahaman yang lebih mendalam tentang semua ini pada akhirnya memerlukan pemahaman C. Anda tidak perlu tahu apa-apa tentang C ++ atau Java untuk memahami pemrograman pada tingkat ini. (Masing-masing mungkin menarik dan perlu tergantung pada karier Anda,
Jadi, jika Anda setuju dengan premis saya sejauh ini, kami telah merebusnya menjadi pilihan antara Perl dan Python.
Di sinilah perang api yang sebenarnya dimulai.
Saran saya adalah untuk fokus pada Python (2.x) terlebih dahulu. Python memiliki sintaks yang relatif sederhana dan konsisten. Anda dapat mempelajari dasar-dasar sintaksis Python dalam beberapa jam dan itulah sebagian besar sintaksis yang pernah Anda temui. Hanya ada beberapa fitur (daftar pemahaman, ekspresi generator, dekorator) yang merupakan kerutan pada sintaksis dasar. Jadi sebagian besar usaha Anda dalam mempelajari Python akan dikhususkan untuk mempelajari pustaka standar yang luas dan mencoba menemukan cara "terbaik" untuk menggunakannya (dan mencari tahu yang merupakan set pengecualian khusus yang layak ditangani untuk membuat program Anda kuat) dan, yang paling penting, dalam mempelajari konsep-konsep yang mendasarinya.
Saya pikir bahwa perpustakaan Python yang luas dan sintaksis yang relatif sederhana memang memiliki dua kelemahan berbeda.
Pertama, ketika Anda belajar bagaimana melakukan sesuatu dalam level yang sangat tinggi dengan Python, Anda mungkin merasa harus bekerja di level yang lebih rendah untuk menjadi membosankan. Tempat saya bekerja Perl adalah standarnya. Saya membuat prototipe pekerjaan saya di Python, di mana saya tahu saya bisa membuatnya bekerja lebih cepat dan andal di Perl; maka saya takut harus melalui dan port ke Perl untuk rekan-rekan saya. (Saya cukup baik di Perl tahun sebelum saya pernah menggunakan Python --- jadi itu bukan masalah keakraban sederhana).
Kerugian lainnya adalah kadang-kadang sulit untuk menemukan cara tingkat tertinggi untuk menyelesaikan tugas yang diberikan dengan Python. Misalnya untuk mengambil halaman web Anda mungkin awalnya mencoba melakukannya dengan soket tingkat rendah ... yang akan berfungsi. Namun, Anda akan menduplikasi sedikit kode yang sudah dapat Anda temukan termasuk di dalam urllib
dan / atau urllib2
modul. Fakta bahwa pustaka standar, seperti 2.7.1, termasuk keduanya membuat poin saya. Jika memungkinkan, pengelola Python telah memperluas modul dan API yang lebih lama secara transparan; Namun ada banyak kasus di mana Python mempertahankan dua atau tiga modul di mana ekstensi transparan tidak dimungkinkan karena alasan tertentu. (Misalnya lain Anda bisa melihat pilihan untuk parsing opsi baris perintah: argparse
, optparse
, dangetopt
. Tidak ada salahnya menulis program Anda menggunakan getopt
(yang tertua). Untuk utilitas yang sangat sederhana dengan sedikit opsi dan konvensi pemanggilan yang kaku (hanya digunakan oleh sekelompok kecil orang, misalnya) maka tidak ada yang salah dengan berjalan sys.argv
sendiri. Namun, biasanya perlu membaca dokumen dengan hati-hati dan mengikuti tautan di bagian bawah modul tingkat yang lebih tua atau lebih rendah yang menggambarkan fitur tingkat yang lebih baru atau lebih tinggi yang tersedia.
Saran saya didasarkan pada pendapat saya bahwa Anda ingin fokus pada konsep-konsep yang lebih dalam dan tidak perlu menghabiskan banyak waktu dan upaya Anda untuk masalah khusus sintaksis dan bahasa. Memahami kapan harus menggunakan subproses, versus utas, atau fitur multi-pemrosesan yang disertakan dengan Python relatif tidak ada hubungannya dengan bahasa dan segala sesuatu yang berkaitan dengan kemahiran pemrograman terlepas dari bahasa. (Pada titik di mana Anda dapat memahami argumen tentang model yang didorong peristiwa Twisted dengan membandingkannya dengan threading dan multi-pemrosesan maka Anda mungkin telah menguasai Python dan siap untuk memprogram dalam bahasa apa pun).
Argumen balasan, bagi Perl, sederhana dan praktis. Ada beberapa pekerjaan lagi di luar sana yang akan memanggil, khususnya, untuk keterampilan dengan Perl. Perl adalah bahasa yang kuat dan memiliki perpustakaan yang sangat luas. (Inti dari Perl yang didistribusikan dengan sebagian besar sistem Linux mencakup cakupan fungsionalitas yang lebih kecil daripada pustaka Python standar; diasumsikan bahwa Anda akan menginstal sejumlah besar paket tambahan dari distribusi Anda atau melalui CPAN --- Comprehensive Perl Archive Jaringan). (Sebaliknya ada lebih sedikit modul dan paket Python yang harus saya ambil secara terpisah ... yang tersedia dari PyPI --- Indeks Paket Python).
Jadi, jika Anda mempelajari Perl Anda akan memiliki kaki untuk mencari pekerjaan, terutama pekerjaan sysadmin, dalam jangka pendek. Namun, sintaksis Perl adalah ... yah ... dalam kata-kata beberapa penggemar sendiri ... "patologis eklektik!" Perl bisa sangat singkat dan kodenya diisi dengan sedikit tanda baca. Mereka yang menyukainya akan berdebat tanpa henti bahwa itu "mudah" dan masuk akal --- dan akan memiliki kesempatan tanpa akhir untuk melakukannya di forum yang dipenuhi dengan kebingungan tentang bagaimana tepatnya potongan kode yang diberikan ditafsirkan. Sintaks dan bahasa yang digunakan dalam dokumentasi dan oleh mereka yang mendukungnya di forum publik diberi nuansa sampai pada titik di mana Anda dapat menghabiskan banyak upaya untuk mempelajarinya.
Sekarang, tolong sadarilah bahwa komentar sebelumnya ini adalah subyektif dan bias. Mungkin Anda akan mencoba Perl dan menganggapnya sintaks untuk menjadi intuitif dan menyenangkan. Jika demikian, lebih banyak kekuatan untuk Anda. Namun, saya pribadi menemukan bahwa pemahaman saya tentang keistimewaan Perl meluruh dengan sangat cepat. Dasar-dasar yang saya pertahankan tetapi saya merasa itu adalah perjuangan setiap kali saya harus kembali ke sana untuk lebih dari beberapa baris kode.
Ada banyak bahasa lain yang akan Anda pelajari, Java, Lisp and Scheme, TCL, Scala, dan sebagainya. Namun, saya sarankan mulai dengan yang menawarkan keseimbangan terbaik antara utilitas dan kesederhanaan.