คำแนะนำของฉัน:
bash
(และ ILK ของมัน) ไม่ใช่ภาษาโปรแกรมทั่วไป แม้ว่ามันจะเป็นไปได้ที่จะทำสคริปต์ขั้นสูงให้สำเร็จbash
แต่ก็ไม่ใช่วิธีที่ดีที่สุดในการเรียนรู้การเขียนโปรแกรมโดยทั่วไป มันเป็นวิธีที่เป็นธรรมชาติที่สุดในการบรรลุภารกิจการบริหารระบบซึ่งส่วนใหญ่หมุนรอบการดำเนินการโปรแกรมอื่น ๆ การจัดการไฟล์ข้อมูลและไดเรกทอรีของพวกเขาและ marshaling อินพุตและเอาต์พุตเข้าและออกจากพวกเขา หากbash
เป็นค้อนให้สำรองไว้สำหรับปัญหาที่ดูเหมือนเล็บจริง ๆ การเรียนรู้ที่จะทำอะไรที่ไม่สำคัญbash
จะง่ายกว่ามากถ้าคุณเรียนรู้ชุดย่อยเล็ก ๆ ของsed
และawk
(เนื่องจากการจัดการสตริงในbash
ส่วนใหญ่ได้รับแรงบันดาลใจจากไวยากรณ์ของการดำเนินงานที่คล้ายกันในภาษา "น้อย" เหล่านี้)
- สำหรับการเขียนโปรแกรมเพื่อวัตถุประสงค์ทั่วไปภายใต้ Linux คุณจะได้ยินข้อโต้แย้งที่ไม่สามารถระบุได้ ทั้งสอง contenders ที่ดีที่สุดคือPerlและงูหลาม ทั้งสองนี้เป็นภาษาสคริปต์ระดับสูงซึ่งมีวัตถุประสงค์ทั่วไปซึ่งมีฟังก์ชั่นการทำงานระดับต่ำมากพอที่จะทำการดำเนินการใด ๆ ที่สามารถเข้าถึงกระบวนการพื้นที่ผู้ใช้ใด ๆ ในระบบของคุณและมีคอลเลกชันขนาดใหญ่ของโมดูลและไลบรารีที่เขียนไว้ล่วงหน้า
ฉันขอแนะนำให้คุณอ่านข้อความเกริ่นนำใน C และใช้เวลาในการรันคำสั่งstrace
และltrace
คำสั่งของคำสั่งยูทิลิตี้ง่ายๆเช่นls
และmkdir
และ/bin/echo
อื่น ๆ (ที่จริงแล้ววันนี้ฉันขอแนะนำltrace -S
แทนการstrace
จู่โจมเข้าไปltrace
ออกเป็นเติมโดย-S
ตัวเลือกที่จะได้รับการศึกษามาก)
C เป็นภาษาโปรแกรมหลักซึ่งเคอร์เนล Linux และ GNU libc ถูกเขียน (ชิ้นส่วนขนาดเล็กอยู่ในการประกอบ) เกือบทุกโปรแกรมบนระบบ Linux (หรือระบบคล้าย UNIX อื่น ๆ ) จะเชื่อมโยงกับไลบรารี C (libc) ตัวแปลภาษา Perl และ Python หลัก (และภาษาสคริปต์อื่น ๆ ส่วนใหญ่) เขียนด้วยภาษาซีโปรแกรมเหล่านี้ (เคอร์เนล, ไลบรารี่ของระบบทั่วไปและล่ามภาษาสคริปต์ต่าง ๆ ) ล้วน แต่เขียนโดยโปรแกรมเมอร์ซี โดยการใช้งานพื้นฐานของพวกเขา ดังนั้นความเข้าใจที่ลึกซึ้งยิ่งขึ้นของสิ่งเหล่านี้ในที่สุดก็สร้างความเข้าใจ C. คุณไม่จำเป็นต้องรู้อะไรเกี่ยวกับ C ++ หรือ Java เพื่อทำความเข้าใจการเขียนโปรแกรมในระดับนี้ (สิ่งเหล่านั้นแต่ละคนน่าสนใจและจำเป็นในสิทธิของตนเองขึ้นอยู่กับอาชีพของคุณ
ดังนั้นถ้าคุณเห็นด้วยกับสถานที่ของฉันจนถึงตอนนี้เราได้ต้มลงไปเป็นตัวเลือกระหว่าง Perl และ Python
นี่คือจุดเริ่มต้นของสงครามเปลวไฟที่แท้จริง
คำแนะนำของฉันคือมุ่งเน้นไปที่ Python (2.x) ก่อน Python มีรูปแบบที่ค่อนข้างเรียบง่ายและสอดคล้องกัน คุณสามารถเรียนรู้พื้นฐานของไวยากรณ์ Python ในเวลาไม่กี่ชั่วโมงและนั่นคือไวยากรณ์ส่วนใหญ่ที่คุณเคยพบ มีเพียงไม่กี่คุณสมบัติ (ความเข้าใจของรายการนิพจน์ตัวสร้างตัวตกแต่ง) ซึ่งเป็นรอยย่นของไวยากรณ์พื้นฐาน ดังนั้นความพยายามส่วนใหญ่ของคุณในการเรียนรู้ Python จะทุ่มเทให้กับการเรียนรู้ห้องสมุดมาตรฐานที่กว้างขวางและพยายามหาวิธีที่ "ดีที่สุด" ในการใช้ (และการหาว่าเป็นข้อยกเว้นเฉพาะชุดใดที่คุ้มค่าในการจัดการเพื่อทำให้โปรแกรมของคุณแข็งแกร่ง) และที่สำคัญที่สุดคือในการเรียนรู้แนวคิดพื้นฐาน
ฉันคิดว่าห้องสมุดที่กว้างขวางของไพ ธ อนและไวยากรณ์ค่อนข้างง่ายมีข้อเสียสองประการ
ก่อนอื่นเมื่อคุณเรียนรู้วิธีการทำสิ่งต่าง ๆ ในระดับที่สูงมากใน Python คุณอาจคิดว่าต้องทำงานในระดับที่ต่ำกว่าเพื่อน่าเบื่อ ที่ฉันทำงาน Perl เป็นมาตรฐาน ฉันเป็นต้นแบบงานของฉันใน Python ที่ฉันรู้ว่าฉันสามารถทำให้มันทำงานได้เร็วขึ้นและเชื่อถือได้ใน Perl; จากนั้นฉันก็กลัวที่จะต้องผ่านและส่งไปยัง Perl สำหรับเพื่อนร่วมงานของฉัน (ฉันเป็นคนดีพอสมควรที่ Perl หลายปีก่อนที่ฉันจะเคยใช้ Python --- ดังนั้นจึงไม่ใช่เรื่องง่ายที่จะเข้าใจ)
ข้อเสียอื่น ๆ คือบางครั้งก็ยากที่จะหาวิธีระดับสูงสุดเพื่อให้งานที่กำหนดใน Python ตัวอย่างเช่นในการดึงเว็บเพจคุณอาจลองใช้ซ็อกเก็ตระดับต่ำในขั้นต้นซึ่งจะใช้งานได้ อย่างไรก็ตามคุณจะทำซ้ำรหัสที่คุณสามารถหาได้รวมอยู่ในurllib
และ / หรือurllib2
โมดูล ความจริงที่ว่าไลบรารีมาตรฐาน ณ 2.7.1 นั้นรวมทั้งสองสิ่งนี้ทำให้ฉันเข้าใจ ผู้ดูแลระบบของ Python สามารถขยายโมดูลและ API ที่เก่ากว่าได้อย่างโปร่งใส อย่างไรก็ตามมีหลายกรณีที่ Python เก็บโมดูลสองหรือสามตัวที่ส่วนขยายโปร่งใสไม่สามารถทำได้ด้วยเหตุผลบางประการ (สำหรับอีกตัวอย่างหนึ่งที่คุณสามารถมองไปที่ตัวเลือกสำหรับการแยกตัวเลือกบรรทัดคำสั่งargparse
, optparse
และgetopt
. มีอันตรายเล็กน้อยในการเขียนโปรแกรมของคุณโดยใช้getopt
(ที่เก่าแก่ที่สุดของเหล่านี้) สำหรับสาธารณูปโภคที่ง่ายมากที่มีตัวเลือกน้อยและรูปแบบการประชุมที่เข้มงวด (ใช้โดยกลุ่มคนเล็ก ๆ เท่านั้น) ดังนั้นไม่มีอะไรผิดปกติที่จะเดินข้ามsys.argv
ตัวคุณเอง อย่างไรก็ตามมันมักจะคุ้มค่าที่จะอ่านเอกสารอย่างละเอียดและติดตามลิงก์ที่ด้านล่างของโมดูลระดับเก่าหรือระดับล่างซึ่งอธิบายคุณลักษณะที่ใหม่กว่าหรือสูงกว่าที่มีอยู่
คำแนะนำของฉันอยู่บนพื้นฐานความคิดเห็นของฉันว่าคุณต้องการมุ่งเน้นไปที่แนวคิดที่ลึกล้ำและไม่ต้องใช้เวลาและความพยายามอย่างมากในการแก้ปัญหาเฉพาะด้านวากยสัมพันธ์และภาษา การทำความเข้าใจเวลาที่จะใช้กระบวนการย่อยเมื่อเทียบกับเธรดหรือคุณลักษณะการประมวลผลหลายอย่างที่มาพร้อมกับ Python นั้นมีความเกี่ยวข้องกับภาษาค่อนข้างน้อยและทุกสิ่งที่เกี่ยวข้องกับความสามารถในการเขียนโปรแกรมโดยไม่คำนึงถึงภาษา (ณ จุดที่คุณสามารถเข้าใจข้อโต้แย้งเกี่ยวกับรูปแบบการขับเคลื่อนเหตุการณ์ของ Twisted โดยการเปรียบเทียบกับเธรดและการประมวลผลแบบมัลติโพรเซสแล้วคุณอาจจะเข้าใจ Python และพร้อมที่จะโปรแกรมในภาษาใด ๆ )
อาร์กิวเมนต์ตัวนับสำหรับ Perl นั้นง่ายและใช้งานได้จริง มีงานอีกไม่กี่อย่างที่จะเรียกโดยเฉพาะสำหรับทักษะกับ Perl Perl เป็นภาษาที่ทรงพลังและมีห้องสมุดที่กว้างขวางมาก (แกนกลางของ Perl ที่กระจายอยู่กับระบบลีนุกซ์ส่วนใหญ่นั้นครอบคลุมฟังก์ชั่นการใช้งานที่หลากหลายกว่า Python ไลบรารี่มาตรฐานซึ่งสันนิษฐานว่าคุณจะติดตั้งแพ็กเกจเพิ่มเติมจำนวนมากจากการแจกจ่ายของคุณหรือผ่านทาง CPAN เครือข่าย) (ในทางกลับกันโมดูลและแพ็กเกจ Python ที่ฉันต้องดึงแยกต่างหากมีน้อยลง ... โมดูลเหล่านั้นมีให้จาก PyPI --- ดัชนี Python Package)
ดังนั้นหากคุณเรียนรู้ Perl คุณจะมีโอกาสหางานโดยเฉพาะงานดูแลระบบในระยะสั้น อย่างไรก็ตามไวยากรณ์ของ Perl คือ ... เอ่อ ... ในคำพูดของผู้ที่ชื่นชอบบางคน ... "การเลือกสรรทางพยาธิวิทยา!" Perl สามารถกระชับมากและรหัสของมันเต็มไปด้วยเครื่องหมายวรรคตอนที่ค่อนข้างน้อย คนที่ชอบมันจะเถียงกันไม่รู้จบว่ามัน "ง่าย" และเข้าท่าสมบูรณ์แบบ --- และจะมีโอกาสไม่รู้จบในฟอรัมที่เต็มไปด้วยความสับสนเกี่ยวกับการตีความโค้ดที่กำหนด ไวยากรณ์และภาษาที่ใช้ในเอกสารประกอบและโดยผู้ที่สนับสนุนในฟอรัมสาธารณะจะได้รับการพัฒนาจนถึงจุดที่คุณสามารถใช้ความพยายามอย่างมากในการเรียนรู้
ตอนนี้โปรดตระหนักว่าคำอธิบายก่อนหน้านี้เป็นเรื่องส่วนตัวและลำเอียง เป็นไปได้ว่าคุณจะลอง Perl และพบว่ามันเป็นไวยากรณ์ที่ใช้งานง่ายและน่ารื่นรมย์ ถ้าเป็นเช่นนั้นพลังที่มากขึ้นสำหรับคุณ อย่างไรก็ตามโดยส่วนตัวแล้วฉันพบว่าการเข้าใจถึงความงี่เง่าของ Perl นั้นสลายไปอย่างรวดเร็วมาก พื้นฐานที่ฉันเก็บไว้ แต่ฉันพบว่าเป็นการดิ้นรนทุกครั้งที่ฉันต้องเปลี่ยนกลับไปใช้รหัสมากกว่าสองสามบรรทัด
มีภาษาอื่นอีกมากมายที่คุณจะเรียน Java, Lisp และ Scheme, TCL, Scala และอื่น ๆ อย่างไรก็ตามฉันขอแนะนำให้เริ่มด้วยตัวที่ให้ความสมดุลที่ดีที่สุดระหว่างยูทิลิตี้และความเรียบง่าย