ภาษาใดในการเริ่มต้นบน Linux [ปิด]


19

ฉันกำลังจะเริ่มปริญญาด้านความปลอดภัยของข้อมูลเป็นเวลา 4 ปีที่ Purdue การศึกษาระดับปริญญาไม่ได้เรียกร้องให้หลักสูตรการเขียนโปรแกรมใด ๆ ดังนั้นเวลาเดียวที่ฉันจะได้รับหนึ่งเป็นวิชาเลือกเป็นครั้งคราว ดังนั้นการเรียนรู้ส่วนใหญ่ของฉันจะเป็นของฉันเอง ตอนเริ่มมัธยมปลายฉันตัดสินใจเปลี่ยนมาใช้ Linux อย่างสมบูรณ์ จนถึงตอนนี้ฉันได้เรียนรู้เรื่อง Linux และความปลอดภัยแล้ว อย่างไรก็ตามฉันก็เชื่อว่ามันจะเป็นสิ่งสำคัญสำหรับฉันเช่นกันในการเรียนรู้ภาษาการเขียนโปรแกรมบางอย่าง

โดยทั่วไปฉันกำลังวางแผนในการเรียนรู้การเขียนโปรแกรมแบบเคียงข้างกันกับการเรียนรู้วิธีใช้ Vim ดังนั้นจึงน่าจะเป็นกระบวนการที่ช้า ในท้ายที่สุดฉันคิดว่ามันจะคุ้มค่า อย่างที่ฉันบอกว่าฉันกำลังเข้าสู่ระบบความปลอดภัยดังนั้นฉันจะสร้างแอพพลิเคชั่นที่เกี่ยวข้องกับความปลอดภัยเป็นส่วนใหญ่ซึ่งส่วนใหญ่จะเกี่ยวข้องกับเครือข่าย ฉันต้องการเริ่มต้นพัฒนาแอพพลิเคชั่น Android แต่นั่นจะตามมาภายหลัง

ด้วยที่กล่าวว่าฉันมีความคิดไม่กี่ ฉันคิดว่าจะเริ่มต้นด้วย JavaScript เพราะเป็นแพลตฟอร์มข้ามและฉันเคยเห็นมันแนะนำมาก่อน ฉันเคยได้ยินเกี่ยวกับ Ruby มากมายหรืออาจไปตามเส้นทาง Linux ตามธรรมชาติกับ C ฉันควรไปในทิศทางใด

คำตอบ:


53

สิ่งแรกและสำคัญที่สุด: bashพร้อมด้วยอรรถประโยชน์บรรทัดคำสั่งทั่วไป Bashเป็นอินเทอร์เฟซผู้ใช้เริ่มต้นไปยังระบบปฏิบัติการและโปรแกรมจำนวนมากบนระบบ Linux จะถูกห่อหุ้มด้วยเชลล์สคริปต์ในบางระดับ มันอาจมีลักษณะแปลก ๆ มีนิสัยแปลก ๆ บางอย่างและมักจะดูโง่เง่า แต่ก็เป็นสิ่งที่คุณจะต้องรับมือด้วย เครื่องมือมาตรฐานเช่นgrep, diff, head, tail, sort, uniq, และอื่น ๆ ที่จะเป็นประโยชน์มากไม่เพียง แต่มีเปลือกสคริปต์ แต่มีผลผลิตของคุณในบรรทัดคำสั่ง

cเรียนรู้อย่างน้อยบางส่วน นี่คือสิ่งที่ระดับต่ำสุดของระบบเขียนขึ้นและจะทำให้คุณเข้าใจระบบโดยรวมดีขึ้น

เลือกภาษาระดับสูงกว่าที่คุณต้องการ Python, ruby, perl, java, สิ่ง - ตราบใดที่คุณสนุกกับมัน นี่คือที่ที่คุณเริ่มเรียนรู้วิธี "โปรแกรม" จริง ๆ และจากจุดนี้ไปเรื่อย ๆ มันจะง่ายต่อการเลือกภาษามากขึ้นและเรียนรู้ต่อไป


2
ฉันเห็นด้วยกับทุกจุดที่ระบุไว้ที่นี่
Joe

6
หากคุณกำลังจะเรียนรู้ทุบตีแล้วคุณควรรวมการเรียนรู้เกี่ยวกับ awk, sed, หัว, หาง, ตัด, tr, diff, grep, ค้นหา, ps, netstat, tcpdump, เรียงลำดับ, uniq ฯลฯ ฯลฯ
jftuga

2
@jftuga เห็นด้วย ส่วนใหญ่ของชุดเครื่องมือของฉันคือทักษะในการทำ "การดึงข้อมูลและการรวม" เป็นวิธีที่ยอดเยี่ยมในการพูดว่า "การจัดการไฟล์ข้อความที่จัดรูปแบบ" เมื่อคุณเข้าใจขั้นตอนการทำงานและทำความรู้จักกับเครื่องมือทั่วไปแล้วคุณจะถูกแยกออกจากเวิร์กโฟลว์ของซอฟต์แวร์ใด ๆ ฉันยังเป็นแฟนตัวยงของ MS Powershell ซึ่งยืนอยู่บนไหล่ของ Bash ในหลาย ๆ ด้าน
AndyN

@jftuga - บันทึกไว้ แม้ว่าฉันคิดว่าสิ่งเหล่านี้มีความสำคัญ แต่ฉันไม่คิดว่าคนใหม่ที่จะใช้ linux จำเป็นต้องกังวลเกี่ยวกับการเรียนรู้ปืนใหญ่เช่น sed / awk ในเชิงลึก แต่พวกเขาควรมีความเข้าใจเพียงพอที่จะสามารถถอดรหัสรหัสที่มีอยู่ได้ .
JimB

8
เห็นด้วยกับทั้งหมด แต่ฉันขอแนะนำ Python เหนือภาษาอื่นเป็นภาษาระดับสูงโดยเฉพาะเพราะเป็นภาษาระดับสูงที่พบมากที่สุดสำหรับเครื่องมือการจัดการเซิร์ฟเวอร์ คุณจะพบเจอบ่อยกว่าทับทิมหรือจาวา Perl ก็เหมือนกันเพราะมันเก่าดังนั้นฉันจะเลือกอันถัดไป
tylerl

10

คุณจะพบว่าทุกคนจะแนะนำแค่ภาษาที่พวกเขาชื่นชอบ ภาษาที่ฉันชอบคือ Perl ดังนั้นนั่นคือสิ่งที่ฉันแนะนำ :) อย่างไรก็ตามนอกเหนือจากการตั้งค่าส่วนตัวของฉันมีเหตุผลดีๆมากมายที่คุณควรพิจารณาใช้ Perl:

ประการแรก Perl เป็นภาษาที่ใช้งานทั่วไปที่ยอดเยี่ยม มันง่ายที่จะเริ่มต้นใน perl โดยการเขียนสคริปต์ง่าย ๆ เพื่อทำสิ่งต่าง ๆ ที่คุณทำในเชลล์สคริปต์เช่นจัดการไฟล์และทำการตัดสินใจโดยอิงจากข้อมูลผู้ใช้ สิ่งนี้ให้การแนะนำที่ง่ายและค่อยเป็นค่อยไปในแนวคิดทั่วไปของการเขียนโปรแกรม Perl ได้รับรอบในขณะที่มีทรัพยากรมากมาย (หนังสือและเว็บไซต์) สำหรับการเริ่มต้น

ประการที่สอง Perl เป็นภาษาที่ทรงพลังและแสดงออกอย่างไม่น่าเชื่อที่รองรับคุณสมบัติการเขียนโปรแกรมที่ทันสมัยทั้งหมด ฉันใช้มันมาสิบห้าปีแล้วและฉันก็ยังเรียนรู้วิธีการใหม่ ๆ ในการทำสิ่งต่าง ๆ ได้อย่างมีประสิทธิภาพมากขึ้น ตัวอย่างเช่นหากคุณต้องการสำรวจการเขียนโปรแกรมเชิงวัตถุ Perl มีสิ่งนั้น (โดยเฉพาะอย่างยิ่งผ่านMoose )

ประการที่สาม Perl มาพร้อมกับอำนาจอนันต์เกือบและความยืดหยุ่นของมันอย่างเป็นทางการ add-on พื้นที่เก็บข้อมูลCPAN ตัวอย่างเช่นหากต้องการติดตามแนวคิดในการเขียนซอฟต์แวร์ความปลอดภัยสมมติว่าคุณต้องการพัฒนาเครื่องสแกนความปลอดภัยเครือข่ายแบบกำหนดเอง แทนที่จะเขียนทุกอย่างด้วยตัวคุณเองคุณสามารถเริ่มต้นด้วยการใช้NMAP :: Scannerเป็นเอ็นจิ้นการสแกนแล้วเขียน tweaks และการปรับปรุงของคุณเอง

ท้ายที่สุดถ้าคุณต้องการสำรวจการเขียนโปรแกรมเว็บ Perl ก็มีสิ่งนั้นเช่นกัน อีกวิธีหนึ่งที่ทันสมัยในการเขียนซอฟต์แวร์เว็บใน Perl คือCatalystซึ่งเป็นกรอบเว็บ MVC ที่ทันสมัยสำหรับการพัฒนาเว็บแอพประเภทใดก็ได้อย่างรวดเร็ว

การรวมทั้งหมดเข้าด้วยกันข้อดีของ Perl คือช่วยให้คุณเริ่มต้นการเขียนสคริปต์และโปรแกรมบรรทัดคำสั่งขนาดเล็กขนาดเล็กและค่อยๆพัฒนาไปสู่การเขียนแอปพลิเคชั่นที่ทันสมัยเต็มรูปแบบ แน่นอนว่าราคาของความยืดหยุ่นนี้มีความซับซ้อน มันขึ้นอยู่กับคุณที่จะศึกษาและเรียนรู้วิธีการทำสิ่งต่าง ๆ ในแบบที่ถูกต้อง Perl ไม่บังคับใช้แนวปฏิบัติที่ดีในแบบที่ภาษาอื่นทำ ส่วนตัวแล้วฉันชอบอิสระนี้โดยเฉพาะอย่างยิ่งกับทรัพยากรที่ยอดเยี่ยมทั้งหมดบนเว็บสำหรับการเรียนรู้วิธีการใช้ Perl


Perl เป็นภาษาสคริปต์ (เบื้องต้น); และระบบปฏิบัติการส่วนใหญ่ตั้งโปรแกรมใน C.
Chris S

แน่นอน แต่ฉันไม่คิดว่ามันสำคัญมากในบริบทของคำถามนี้ ไม่เหมือนที่ OP ต้องการหรือต้องการเรียนรู้เกี่ยวกับการเขียนโปรแกรมระดับ OS
Phil Hollenback

ฉันขอแนะนำว่า Perl เป็นวิธีที่ดีในการเขียนโค้ดสำหรับแอปรักษาความปลอดภัยที่มีเป้าหมายเป็นสิ่งที่เขียนในภาษาอื่น (มักเป็น C) ที่คุณเข้าใจ ดังนั้นหากความแตกต่างนี้มีเหตุผลฉันจะจำแนก Perl เป็นเครื่องมือที่คุณควรเรียนรู้ที่จะใช้แทนที่จะเป็นภาษาที่คุณควรเรียนรู้ที่จะเข้าใจ (สมบูรณ์)
BMDan

6

สามภาษาจะทำให้คุณมั่นคง ในการลดลำดับความสำคัญ (เช่นอันดับแรกคือสิ่งสำคัญที่สุด):

  1. pseudocode บ่อยครั้งที่การใช้งานที่คุณกำลังทำจะเป็นการรวมกันของภาษาและเครื่องมือครึ่งโหลซึ่งมีเพียงบางส่วนเท่านั้นที่คุณจะรู้ได้โดยตรง หากคุณรู้ว่ามีการนำรูปแบบใดมาใช้คุณสามารถคำนวณได้ว่ามีการป้อนข้อมูลเข้าชิ้นใดและให้ออกผลลัพธ์ใดให้ทดสอบโดยแยกออกและพิจารณาว่าเป็นชิ้นส่วนที่แตกหักหรือไม่
  2. . เพื่อสิ่งที่ดีกว่าหรือแย่กว่านั้นคือสิ่งที่ดำเนินการในจักรวาล (Linux) และให้มุมมองที่ใกล้เคียงกับสิ่งที่คุณสามารถเข้าใจได้ว่าภาษาระดับสูง ๆ กำลังทำอะไรอยู่ (เช่น PHP Pass-by-Reference หรือโมเดลเธรดของ Java)
  3. เพียงเกี่ยวกับอะไรอื่นนอกจากภาษา C ++ ภาษาที่ใช้งานได้เช่น SQL หรือดีกว่า, Haskell, หรือบางอย่างที่ไม่เหมือน C-ey หากทุกอย่างล้มเหลว Java สามารถทำงานได้ แต่ก็ยังเป็นขั้นตอนที่ดี - ได้คะแนนสูงที่นี่ แนวคิดคือการห่อสมองของคุณให้มีบางสิ่งที่แตกต่างอย่างสิ้นเชิงจากสิ่งที่คุณเคยทำมาก่อนซึ่งคุณไม่สามารถช่วยได้ แต่ตระหนักถึงข้อ จำกัด ของสิ่งที่คุณเคยทำมาก่อน ในแง่ของยูทิลิตี้ที่แท้จริงการทุบตีอาจอยู่ในรายการนี้ แต่ถ้าคุณไม่มีพื้นฐานในเรื่องอื่นคุณจะต้องเขียน C ด้วยไวยากรณ์ bash แทนการสำรวจพลังของมัน

1
+1 สำหรับรหัสเทียม ฉันชอบปลอมในความคิดเห็นแล้วรหัสรอบความคิดเห็น
sreimer

2
+1 สำหรับรหัสเทียมและ "สิ่งอื่นยกเว้น C ++" ในโลกของลินุกซ์, คุณควรเรียนรู้อย่างน้อยหนึ่งscript languageเหมือนหรือpython PHP
yegle

2
ฉันไม่รู้ว่า pseudocode เป็นคำแนะนำที่ดีสำหรับมือใหม่หรือไม่ Pseudocode จะสามารถเข้าใจได้หลังจากเรียนรู้ภาษา c-style ส่วนใหญ่แล้วดังนั้นเราควรใช้ความพยายามในการเรียนรู้ pseudocode จริงๆหรือไม่? ไม่ต้องพูดถึงไม่มีไวยากรณ์ pseudocode เดียวซึ่งน่าจะทำให้ผู้เริ่มต้นสับสน
JimB

@JimB: จุดคือการเรียนรู้ที่จะคิดอย่างมีเหตุผลโดยไม่คำนึงถึงภาษา ERD, UML และสิ่งที่คล้ายกันคือเครื่องมือหอคอยงาช้างสำหรับการทำสิ่งนี้ แต่คุณไม่จำเป็นต้องเรียนรู้อะไรเลยอย่างเป็นทางการ ความคิดคือการเรียนรู้ที่จะแผนภูมิความคิดของคุณแล้วเปรียบเทียบกับผลลัพธ์ที่คาดหวัง เมื่อคุณทราบว่าตัวอย่างเช่นฐานข้อมูลไม่มีวิธี (โดยธรรมชาติ) ในการรู้ว่าส่วนหัว HTTP ใดที่ถูกส่งไปเป็นส่วนหนึ่งของคำขอไปยังเว็บเซิร์ฟเวอร์คุณสามารถกำจัดตัวแปรออกจากการพิจารณา ในทำนองเดียวกันเมื่อคุณเขียนรหัสเทียมสำหรับฟังก์ชั่นคุณมักจะสังเกตเห็นขอบและมุมตัวเรือนที่คุณไม่ต้องการเป็นอย่างอื่น
BMDan

ฉันเห็นด้วยอย่างสมบูรณ์ฉันแค่คิดว่าการเริ่มต้นใช้ "pseudocode" จะทำให้เกิดความสับสนเนื่องจากไม่ใช่สิ่งที่เป็นทางการ รหัสลับของคนส่วนใหญ่จะเป็นการรวมกันของภาษาแบบ c ที่พวกเขาสบายที่สุดรวมทั้งไวยากรณ์ ad-hoc บางส่วน
JimB

4

คุณควรเรียนรู้หลายภาษา ฉันขอแนะนำให้เริ่มต้นด้วย Python ขอแนะนำอย่างกว้างขวางว่าเป็นเรื่องง่ายที่จะเรียนรู้และเป็นประโยชน์อย่างมากมีสื่อการเรียนรู้ด้วยตนเองที่ยอดเยี่ยมมากมายให้ใช้ฟรีและฉันรวบรวมโดยผู้เชี่ยวชาญด้านความปลอดภัยด้านไอทีใช้กันอย่างแพร่หลาย เกือบทุกครั้งที่ฉันเห็นผู้เชี่ยวชาญด้านความปลอดภัยโพสต์รหัสสาธิตมันเป็นงู


+1 สำหรับ python และ Python ไม่เพียงได้รับความนิยมในโลก Linux
xiao

4

ฉันกำลังจะเริ่มปริญญาด้านความปลอดภัยข้อมูลปีที่ Purdue การศึกษาระดับปริญญาไม่ได้เรียกร้องให้หลักสูตรการเขียนโปรแกรมใด ๆ

ฉันเป็นคนเดียวที่จะคิด OMG !!!! ณ จุดนี้?

ฉันยังเชื่อว่ามันเป็นสิ่งสำคัญสำหรับฉันที่จะเรียนรู้ภาษาการเขียนโปรแกรมไม่กี่

ฉันจะพูดอย่างนั้น แม้ว่าคุณจะไม่ได้คาดหวังว่าจะเป็นโปรแกรมเมอร์ที่มีความเชี่ยวชาญ แต่คุณอาจต้องการทักษะที่จำเป็นในการจำลอง / สร้างการโจมตีขึ้นใหม่และเข้าใจว่ากระบวนการเขียนโปรแกรมทำงานอย่างไร คุณจะต้องมีทักษะในการวิเคราะห์ข้อมูลและดึงข้อมูลจากแหล่งข้อมูลจำนวนมาก (เช่นบันทึก) JimB ได้กล่าวถึง bash - และในขณะที่คุณไม่ต้องสงสัยเลยว่าใช้สิ่งนี้ - ใช้เวลาเพียงไม่กี่ชั่วโมงในการเรียนรู้บิตที่จำเป็น จริงๆแล้วสถานที่เดียวที่คุณเคยเห็นทุบตีอยู่ในระบบ Linux - แต่เชลล์อื่น ๆ นั้นคล้ายกันมาก

ฉันขอแนะนำให้เรียนรู้ awk และ / หรือ Perl สำหรับการบีบอัดข้อมูล อย่ากังวลเกี่ยวกับข้อกำหนดใด ๆ ในการทำเครื่องหมายในกล่องวัตถุ - แต่ฉันอยากจะแนะนำให้ดูที่ langauges ที่ไม่ใช่ขั้นตอนเช่นกัน

การเรียนรู้ C จะทำให้คุณได้รับข้อมูลจำนวนมากเกี่ยวกับวิธีที่รหัสเปลี่ยนเป็นโปรแกรมปฏิบัติการ (การรวบรวมเป็นเพียงขั้นตอนเดียวในกระบวนการที่ซับซ้อนมาก)

ตัวเลือกที่ชัดเจนสำหรับคนที่สนใจในการพัฒนา Android / มือถือจะเป็นจาวา - แต่จาวาพยายามอย่างหนักเพื่อป้องกันนักพัฒนาที่จะต้องจัดการกับความเป็นจริงของการดำเนินงานและโปรโตคอล - ประสบการณ์ของฉันว่านี่คือที่ที่คุณได้รับปัญหาด้านความปลอดภัย ปพลิเคชัน นั่นอาจช่วยให้คุณบรรลุเป้าหมายสูงสุดและจะดูดีบนประวัติย่อของคุณ แต่ไม่คาดหวังว่าการเรียนรู้ Java เพื่อเสริมความรู้ด้านความปลอดภัยของคุณมากนัก


1
ไม่ใช่แค่คุณคนเดียว. : -o
Keith

2

คำแนะนำของฉัน:

  • 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 และอื่น ๆ อย่างไรก็ตามฉันขอแนะนำให้เริ่มด้วยตัวที่ให้ความสมดุลที่ดีที่สุดระหว่างยูทิลิตี้และความเรียบง่าย


1

ในโลก Linux คุณควรรู้สองสิ่งพื้นฐาน:

  1. Regular Expression. นี่คือต้อง RegExเป็น "ภาษา" สากลเมื่อคุณรู้วิธีใช้การแสดงออกปกติชีวิตของคุณจะง่ายขึ้น :-)
  2. " quick & dirty" เป็นเรื่องธรรมดามากในโลก Linux หากคุณสามารถทำงานให้สำเร็จไม่ว่าโซลูชันของคุณจะน่าเกลียดแค่ไหนคุณก็ทำงานของคุณเสร็จแล้ว

ดังนั้นถ้าคุณต้องการที่จะเรียนรู้ภาษาบน Linux คุณควรเลือกscript languageเช่นpython, หรือแม้กระทั่งPHPbash scripting

PHPและฉันขอแนะนำให้มี มันง่ายและน่าเกลียด มันมีรายละเอียดคู่มือออนไลน์ มันมีRegExการสนับสนุนที่ดี นั่นคือทั้งหมดที่


2
นั่นคือคำอธิบายที่ดีที่สุดของ PHP ที่ฉันเคยได้ยิน ... เมื่อคุณนำความนิยมออกมามันก็ไม่ได้มีอะไรมากมายเหลือเกิน: P
Gordon Gustafson

หัวข้อออกเล็กน้อย แต่ฉันคิดว่าเหตุผลหลักสำหรับความนิยมของ PHP คือฟังก์ชั่นมากมายที่จะกระจายอยู่ทั่ว linker-library / แพ็คเกจในภาษาอื่น ๆ เป็นมาตรฐานใน PHP (บิตเช่นการรวมสิ่งที่คุณต้องการ libc)
Phil Lello

1

คุณสามารถทำงานได้เกือบทุกภาษาในเกือบทุกภาษาดังนั้นทางเลือกที่ถูกต้องจะถูกกำหนดโดยปัญหาที่คุณแก้ไข

มันคุ้มค่าที่จะรู้ภาษาจากหมวดหมู่ต่อไปนี้:

  • ภาษาที่คอมไพล์แล้ว (เช่น C / C ++ / Java) C / C ++ เป็นสถานที่ที่ดีในการสำรวจปัญหาด้านความปลอดภัยเกี่ยวกับบัฟเฟอร์ล้น, ความเสียหายของสแต็ก ฯลฯ
  • ภาษาที่แปล (เช่น PHP) สถานที่ที่ดีในการสำรวจปัญหาเกี่ยวกับตัวแปรที่พิมพ์อย่างอิสระและไม่ตรวจจับฟังก์ชันที่ไม่ได้กำหนดจนกว่าคุณจะเรียกใช้
  • ภาษาสคริปต์ (sh / bash / csh / ksh) มีประโยชน์มากสำหรับการติดตั้งยูทิลิตีเชลล์ที่มีประโยชน์มากมาย (ดู / bin & / usr / bin) ด้วยกัน

ฉันจะใช้ความพยายามในการเรียนรู้ C / C ++ เช่นนี้ช่วยให้สแต็คความเสียหายและการเข้าถึงหน่วยความจำโดยตรง นี่เป็นสิ่งสำคัญหากคุณต้องการทดสอบกับปัญหาด้านความปลอดภัย หลายภาษามีไวยากรณ์เหมือน C (รวมถึง JavaScript) ดังนั้นจึงเป็นกระดานกระโดดน้ำที่ดี

หากคุณทำงานกับเชลล์มากซึ่งฉันคิดว่าคุณกำลังเรียนรู้กลุ่มคุณจะได้เรียนรู้สคริปต์พื้นฐานของเชลล์ในฐานะที่เป็นผลข้างเคียง UNIX Power Tools เป็นหนังสือที่ดีในการเรียนรู้สิ่งต่าง ๆ ที่สูงขึ้น ฉันไม่รู้ว่ายังเผยแพร่อยู่หรือไม่

PHP สามารถเป็นภาษาที่ดีในการเรียนรู้ ข้อได้เปรียบหลักที่นำเสนอโปรแกรมเมอร์ใหม่คือมีฟังก์ชันการทำงานจำนวนมากในตัวแทนที่จะเป็นไลบรารีที่คุณต้องการเชื่อมโยง (ซึ่งไม่ใช่งานที่ซับซ้อน) ด้วยเหตุนี้การเรียกดูเอกสารหลักจะสอนคุณเกี่ยวกับหลายสิ่ง


1

ก่อนอื่นให้คำแนะนำเชิงลบ:

โดยพื้นฐานแล้วสิ่งที่ฉันวางแผนจะทำคือการเรียนรู้ที่จะเขียนโปรแกรมควบคู่กับการเรียนรู้วิธีใช้ Vim

อย่าทำอย่างนั้น. ค้นหาเครื่องมือแก้ไขที่สะดวกสบายจริงๆ การเรียนรู้ทั้งภาษาและตัวแก้ไขนั้นยากกว่าการเรียนรู้ตามลำดับสามเท่า

อย่างที่ฉันบอกว่าฉันกำลังเข้าสู่ความปลอดภัยดังนั้นฉันจะสร้างแอพที่เกี่ยวข้องกับความปลอดภัยเป็นส่วนใหญ่ ซึ่งส่วนใหญ่จะเกี่ยวข้องกับระบบเครือข่าย

แอปความปลอดภัยที่เกี่ยวข้องกับเครือข่ายหรือไม่ C เป็นตัวเลือกที่ไม่มีเกมง่ายๆที่นี่ คุณจะต้องเข้าถึงเครือข่ายที่ระดับระบบ API ซึ่งหมายความว่า C เป็นวิธีที่จะไป แน่นอนว่านี่ไม่ได้หมายความว่าทุกอย่างจะต้องอยู่ใน C - ไลบรารี C + ตัว$favorite-high-level-languageห่อหุ้มอาจช่วยให้คุณเพิ่มความยุ่งยากในส่วนที่ไม่จำเป็นต้องใช้ C

ด้วยที่กล่าวว่าฉันมีความคิดไม่กี่ ฉันคิดว่าจะเริ่มต้นด้วย JavaScript เพราะเป็นแพลตฟอร์มข้ามและฉันเคยเห็นมันแนะนำมาก่อน

ฉันคิดว่ามันเป็นข้อเสนอแนะในบริบทที่แตกต่างจากคุณ จาวาสคริปต์มีจุดแข็ง แต่มันก็ไม่ได้เป็นภาษาที่ใช้งานทั่วไปที่ดียังไม่ได้ JS ไม่มีไลบรารี่มาตรฐานเทียบได้กับ C, Python, Perl, Ruby, Java และ บริษัท

พูดถึง$favorite-high-level-language- คำแนะนำของฉันคือไปกับ Python มันเชื่อมต่อกับ C เป็นอย่างดีมันมาพร้อมกับไลบรารีที่มีประโยชน์มากมายและมีไลบรารีให้เลือกมากมาย


0

ไม่มีอะไรผิดปกติกับการเรียนรู้ Javascript แต่จะทำงานภายใต้เบราว์เซอร์เท่านั้นดังนั้นการเขียนโปรแกรมของคุณจะถูก จำกัด เฉพาะแอปที่เกี่ยวข้องกับเว็บเพจ

อาจมีหลายคำตอบสำหรับ 'สิ่งที่เป็นภาษาโปรแกรมที่ดีที่จะเริ่มต้น' มีภาษา ความน่าเชื่อถือของฉันคือคุณสามารถทำได้แย่กว่าการเริ่มต้นด้วยการเขียนสคริปต์พื้นฐานเพียงแค่เห็นสิ่งที่คุณสามารถทำได้เพื่อทำงานอัตโนมัติโดยไม่ต้องใช้อะไรเลยนอกจากการใช้เชลล์แล้วขยายการใช้ Perl หรือภาษาที่คล้ายกัน งานที่ซับซ้อนเกินกว่าที่เชลล์สามารถทำได้หลังจากนั้นและถ้าคุณสนใจจริงๆมันจะใช้เวลาสองสามสัปดาห์เท่านั้นเริ่มใช้ C หรืออนุพันธ์


3
เฉพาะเบราว์เซอร์เท่านั้น? ไม่ได้อีกต่อไป
EEAA

ขอบคุณฉันยืนแก้ไข แต่ฉันยังคงไม่แนะนำ Javascript เป็นสภาพแวดล้อมการเรียนรู้สำหรับผู้เริ่มต้นรับการสนับสนุนสำหรับรุ่นที่ไม่ใช่เบราว์เซอร์จะเป็นฝันร้าย
blankabout

2
ฉันคิดเสมอว่า ECMAScript เป็นภาษาการเขียนโปรแกรมและ Javascipt อยู่ด้านบนของ ECMAScript เพื่อมอบฟังก์ชันที่มีประโยชน์สำหรับจัดการ DOM Javascript สำหรับเบราว์เซอร์
Jonathan Mayhak

0

คำแนะนำของฉัน? อืมม คุณอาจต้องตัดสินใจเมื่อคุณไป สำหรับช่วงที่ดีและรอบรู้คุณสามารถไปเส้นทางการศึกษาระดับปริญญา CS ปกติอาจไม่อยู่ในลำดับนี้

(1) C / C ++ - คุณสามารถทำให้ Object Oriented ลดลงและอย่างน้อยคุณจะได้ลอง C ++ เป็นมาตรฐาน 'มืออาชีพ' (2) การประกอบ (เพียงเล็กน้อย - มันจะช่วยให้คุณเข้าใจการทำงานจริงของโปรเซสเซอร์หน่วยความจำและอื่น ๆ - คุณไม่ต้องแต่งงาน) (3) Python / Perl / Bash - รับสิ่งเหล่านี้ การเขียนสคริปต์ภาษาลงมันจะมีประโยชน์มากที่สุดสำหรับระดับของ Linux (4) PHP / Ruby, MySQL และ HTML - เพียงแค่เขียนโปรแกรมบนเว็บของคุณ! คุณจะเข้าใจกระบวนการการโต้ตอบกับเซิร์ฟเวอร์ทั้งหมดซึ่งเป็นระดับการคำนวณอีกระดับ

ต้องการแนวคิดที่เป็นประโยชน์หรือไม่ AI, เครือข่ายประสาท สิ่งเหล่านี้ควรจะทำให้คุณ

คุณสามารถเลือกหนึ่งในสิ่งเหล่านี้ที่จะทำหรือสัมผัสกับพวกเขาทั้งหมด ภาษาของฉัน? ทั้งหมดนี้เป็นสิ่งที่จำเป็น แต่ฉันได้เขียนโปรแกรมมาตั้งแต่ปี 1984 และมีระดับ CS เกมเขียนและแอพระบบฝังตัวทุกชนิด มันคือสิ่งที่ฉันทำ คุณต้องค้นหาว่าคุณเป็นใครและคุณทำอะไร แค่ทำให้แน่ใจว่าคุณกำลังสนุก

สนุก!


0

อ๊ะ, ความปลอดภัยของข้อมูลที่ผิดพลาดสำหรับระบบข้อมูล ... โอ้ส่วนใหญ่ยังคงใช้

ชวา

  1. จะต้องมีหลักสูตรการเขียนโปรแกรมระดับเริ่มต้นที่ใช้ภาษาจาวาซึ่งจะนับรวมในระดับของคุณ ดีเสมอที่จะได้รับเครดิตสำหรับสิ่งที่คุณกำลังเรียนรู้
  2. มันจะทำให้คุณมีอาชีพเพิ่มขึ้นถ้าคุณเบื่อที่จะเป็นคนระบบ - อย่างเคร่งครัด ... หรือถ้า บริษัท ที่คุณทำงานในภายหลังตัดสินใจว่าระบบนั้นเป็นเหมือนเครื่องปิ้งขนมปังและเป็นคนที่ทำงานด้วย
  3. วัตถุที่มุ่งเน้น
  4. คุณบอกว่าคุณต้องการพัฒนา Android นั่นหมายถึง Java

สุจริตถ้าคุณทำงานใน Linux และเริ่มหลักสูตรการเขียนโปรแกรมเริ่มต้นใน Java และจากนั้นอาจติดตามหลักสูตรการเขียนโปรแกรมเพิ่มเติมอีกสองสามเครื่องมืออื่น ๆ เช่น Bash sed / awk ฯลฯ ... ควรจัดวางไว้ หากคุณเข้าสู่ระบบจริงๆคุณอาจเลือก C ในภายหลัง แต่ฉันจะไม่พูดว่ามันเป็นที่ต้องการอย่างมากและฉันจะไม่พูดด้วยซ้ำว่ามันเป็นข้อกำหนดของการเป็นคนที่มีระบบ - เว้นแต่คุณจะเข้าสู่การฝึกงาน

YMMV

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.