ต้องการ Python มากกว่า C สำหรับการเขียนโปรแกรมอัลกอริทึม


16

ฉันกำลังศึกษาอัลกอริธึมเล็กน้อยและดูที่ไซต์อย่าง SPOJ.pl TopCoder เป็นต้นฉันเคยเห็นว่าโปรแกรมเมอร์ชอบ C หรือ C ++ สำหรับการแข่งขันเขียนโปรแกรมอัลกอริทึมส่วนใหญ่

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

ตอนนี้ฉันรู้แล้วและได้ยินจากผู้คนมากมายว่า C เป็นภาษาที่สำคัญมากและเป็นขนมปังและเนยของโปรแกรมเมอร์จำนวนมาก

สิ่งที่ฉันอยากรู้คือวิธีการของฉันนี้มีข้อบกพร่อง / ผลกระทบ / ข้อเสียอื่น ๆ หรือไม่

นี่ไม่ใช่การอภิปราย Python vs C; นี่เป็นคำถามเกี่ยวกับวิธีปฏิบัติที่เจาะจงของการเลือกไพ ธ อนมากกว่า C เนื่องจากความสะดวกในการใช้งานจะส่งผลกระทบต่อฉันหรือโปรแกรมเมอร์ / นักวิทยาศาสตร์คอมพิวเตอร์คนอื่น ๆ ในระยะยาว


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


หัวข้อนี้จะไม่สมบูรณ์หากไม่มีลิงก์ไปยังการสนทนานี้lukeplant.me.uk/blog/posts/…
permeakra

11
@permeakra: นั่นเป็นเพียงเสียงโวยวายโดยพื้นฐานแล้วระบุว่าการเรียนรู้ Haskell และ Python ไม่ได้ทำให้คุณดีขึ้นในภาษาอื่นเพราะภาษาอื่นนั้นดูด
Robert Harvey

มันไม่ได้เป็นเพียงคำโหยหวนเนื่องจากมันมีคำอธิบายว่า Python และ Haskell มีอิทธิพลต่อจิตใจของผู้ใช้อย่างไรและความคิดเห็นมากมายของคนอื่น ๆ ในหัวข้อนั้น มันไม่ได้ใช้ c เป็นภาษาระดับต่ำในการเปรียบเทียบ แต่เป็นภาษา hi-level มากกว่าเล็กน้อย แต่ความคิดเหมือนกัน - หนึ่งเริ่มนำความคิดจากภาษาอื่นมาใช้ในภาษาที่เขาทำงานอยู่ในปัจจุบันทำให้โค้ดไม่เป็นสำนวน . มันอาจจะเป็นสิ่งที่ดี แต่ ...
permeakra

1
นี่คือสิ่งที่ฉันจะทำ: plus.google.com/101996847784434186165/posts/7941QuL69yP
Wayne Werner

มันน่าสนใจที่ได้เห็นการเขียนโปรแกรมที่ไม่ใช่อัลกอริธึม
SK-logic

คำตอบ:


14

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

ในขณะที่ปัญหานี้เห็นได้ชัดมากขึ้นกับ abstractions ระดับต่ำกว่าความล้มเหลวในการรับรู้การมีเพศสัมพันธ์อย่างแน่นหนาและสร้าง abstractions ที่เหมาะสมเป็นปัญหาในทุกระดับ ฝึกฝนทักษะเหล่านี้ใน C จนกว่าคุณจะสามารถสร้างอัลกอริธึมที่ดูสะอาดตาและสามารถอ่านได้จะนำไปใช้กับภาษาที่คุณใช้

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

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

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


1
"พวกเขาคุ้นเคยกับการให้ abstractions เหล่านั้นแก่พวกเขามากเกินไป" สิ่งนี้คิดหรือไม่ว่าฉันเรียนรู้ภาษาไพ ธ อนก่อนหน้า C ดังนั้นจึงไม่สามารถปรับตัวหรืออะไรบางอย่างตามสายเหล่านั้นได้หรือไม่?
ffledgling

10

นักวิจัยที่มีความสนใจหลักไม่ใช่การเขียนโปรแกรมต้องการภาษาระดับสูงกว่าเช่น Python เพราะพวกเขาสามารถเขียนรหัสการแก้ปัญหาได้อย่างง่ายดายในภาษาดังกล่าวมากกว่าพูด C. Python เหมาะอย่างยิ่งกับเรื่องนี้เพราะมันเป็นแบบ "ต้นแบบ" มากกว่า "รวมแบตเตอรี่" และมันทำงานร่วมกับห้องสมุดที่เป็นตัวเลขเช่น NumPy และ SciPy

หากนักวิจัยต้องการประสิทธิภาพที่ดีขึ้นพวกเขามักจะมอบอัลกอริทึมที่พวกเขาสร้างขึ้นใน Python ให้กับวิศวกรซอฟต์แวร์ซึ่งจะหาวิธีเพิ่มประสิทธิภาพ (จนถึงและรวมถึงการเข้ารหัสใน C)


ดังนั้นโดยทั่วไปนักวิจัยและวิศวกรซอฟต์แวร์มีความสัมพันธ์ระหว่างมนุษย์กับนักออกแบบ? แล้วการใช้ประโยชน์จากคนทั้งสองประเภทในอุตสาหกรรมเป็นอย่างไร
ffledgling

9
ฉันคิดว่า Takeaway นั้นคือการเข้ารหัสอัลกอริทึมใน Python แล้วเขียนการใช้งานที่ละเอียดยิ่งขึ้นใน C เป็นสถานการณ์ที่ยอมรับได้อย่างสมบูรณ์แบบ
Robert Harvey

หรือ "recoding in Cython"
endolith

10

จำไว้ว่า SPOJ.pl การแข่งขัน ACM และการแข่งขันที่คล้ายกันทั้งหมดมุ่งเน้นไปที่การสร้างรหัสการทำงานที่รวดเร็วซึ่งจะถูกโยนทิ้งทันทีหลังจากการแข่งขัน TopCoder ทำเช่นนี้ แต่มีขนาดเล็กกว่า (รหัสมีการจัดระเบียบอย่างน้อยในระดับ OO-design)

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

ดังนั้นสำหรับคำถามของคุณมีผลกระทบที่ซับซ้อนในการเลือก Python มากกว่า C สำหรับอัลกอริทึมฉันจะบอกว่าไม่ หากคุณสนใจอัลกอริธึมเพียงอย่างเดียวคุณจะทำสิ่งเดียวกันใน Python และ C การใช้งานในภาษาที่ใช้งานได้อาจทำให้เกิดความแตกต่างบ้าง แต่อัลกอริทึมยังคงเหมือนเดิม

สิ่งเดียวที่คุณได้รับจากการใช้อัลกอริทึมใน C คือการควบคุมการดำเนินการและรับประกันว่าคุณจะใช้ abstractions ระดับต่ำกว่า นี่ไม่ใช่เรื่องเล็กเนื่องจากใน Python ความซับซ้อนส่วนใหญ่ถูกซ่อนอยู่ แต่ถ้าปัญหาไม่สำคัญใน abstractions ระดับที่สูงกว่าคุณอาจสูญเสียความเร็วในการดำเนินการและในกรณีส่วนใหญ่คุณไม่ได้พยายามทำให้โปรแกรมเร็วที่สุดเท่าที่จะทำได้คุณเพียงแค่เรียนรู้ .

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


1
หากมีใครกำลังเขียนแอพพลิเคชั่นคณิตศาสตร์ที่ใช้งานได้จริงตัวหนึ่งก็คงจะเลือก C หรือ C ++ (ไม่มีสิ่งเช่น 'C / C ++') เนื่องจากการเพิ่มขึ้นอย่างมากของภาษาที่ตีความใด ๆ ฉันดูที่ Topcoder เมื่อสองสามปีก่อนและฉันจำได้ว่าได้เห็น C ++ จำนวนมากที่หน่วยความจำรั่วไหลออกมาอย่างไม่น่าเชื่อเนื่องจากการแข่งขันไม่สนใจรายละเอียดเล็กน้อยเช่นการรั่วไหล ฉันไม่ประทับใจ
Jim In Texas

จุดที่แม่นยำของฉัน มันเป็นคำถามของลำดับความสำคัญ: topcoders ไม่สนใจเกี่ยวกับการรั่วไหลของหน่วยความจำเนื่องจากเคอร์เนลจะล้างหลังจากพวกเขาต่อไป; พวกเขาไม่สนใจเกี่ยวกับการปฏิบัติที่ไม่ดีหรือรูปแบบการต่อต้านหากพวกเขาประหยัดเวลา
K.Steff

2
ย่อหน้าสุดท้ายของคุณรวมถึงกฎทอง: "ทำให้มันทำงานแล้วทำให้มันเร็วขึ้น"
Carson63000

9

ในฐานะสมาชิกที่ยาวนานของ TopCoder และผู้ใช้ SPOJ เป็นครั้งคราวฉันสามารถบอกคุณได้ว่าเหตุผลสำคัญสำหรับการเลือก C / C ++ เหนือภาษาอื่น ๆ ในการแข่งขันคือความเร็วที่แท้จริง เมื่อการเรียกใช้โปรแกรมของคุณหมดเวลามีแรงกดดันมหาศาลในการเลือกภาษา "เร็วที่สุด" ที่คุณจะได้รับเพราะจะทำให้คุณมีความหย่อนมากขึ้นในแง่ของการเข้ารหัสอัลกอริทึมของคุณ ความก้าวหน้าของฉันใน TC เพิ่มขึ้นจาก Java เป็น C # เป็น C ++

อย่างไรก็ตามสถานการณ์นี้พบได้ทั่วไปในการแข่งขันมากกว่าในการพัฒนาแบบวันต่อวัน: แม้ว่าการเขียนรหัสที่ดีที่สุดนั้นมีความสำคัญในระดับสากล แต่ความสำคัญของการทำรหัสของคุณให้เสร็จสิ้นโดยเร็วที่สุดเท่าที่จะทำได้ ร้อยรอบของ CPU หากคุณเขียนโค้ดใน Python ได้อย่างสะดวกสบายยิ่งขึ้นมันก็มักจะเป็นทางออกที่ต้องการ

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


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

@ Ayos ฉันไม่สามารถพูด Python ได้เพราะฉันไม่เคยใช้มันในบริบทของ TC หรือ SPOJ แต่ข้อดีของ C ++ เหนือ C # และ Java นั้นมีความสำคัญในบางครั้งเท่านั้น ฉันสามารถจำได้เพียงกรณีเดียวเมื่อพอร์ตตรงไปตรงมาของอัลกอริทึมที่ได้รับการเข้ารหัสใน C ++ ถึง C # ล้มเหลวด้วยการหมดเวลา แต่มันอยู่ในห้องซ้อม ส่วนใหญ่แล้วการค้นพบอัลกอริทึมที่ถูกต้องเป็นสิ่งเดียวที่สร้างความแตกต่างระหว่างการส่งที่สำเร็จและล้มเหลว
dasblinkenlight

1
โปรดทราบว่าภาษาที่ตีความเช่น Python, Ruby และ Perl ทำงานช้ากว่าภาษาระดับสูงที่คอมไพล์เช่น Java และ C # (ซึ่งตัวมันเองช้ากว่าเมื่อเปรียบเทียบกับ C) แม้ว่าในท้ายที่สุดมันจะไม่สำคัญเว้นแต่คุณวางแผนที่จะทำงานกับชุดข้อมูลขนาดใหญ่พิเศษหรือต้องการความเร็วแบบเรียลไทม์
KChaloux

5

ทุกครั้งที่ฉันนั่งลงเพื่อเขียนรหัสใน CI ยอมแพ้หลังจากนั้นประมาณ 15 นาทีเพราะฉันพบว่ามันยุ่งยากเกินไปและมีแนวโน้มที่จะย้ายไปยังงูใหญ่

การเพิ่มผลิตภาพนี้เป็นสาเหตุทั่วไปที่ทำให้งาน C และ C ++ ลดลงอย่างมาก

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

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

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

ในระยะสั้นไม่ต้องกังวลเกี่ยวกับเรื่องนี้ สิ่งที่คุณใช้ในการแสดงอัลกอริทึมนั้นสำคัญน้อยกว่าความสามารถในการแสดงออกเลย


3
"งาน C และ C ++ ลดลงอย่างมาก" ฮะ? ดูเหมือนว่าจะถูกนำออกมาจากสีน้ำเงินเพราะฉันเห็นแนวโน้มตรงกันข้าม -1 จนกว่าคุณจะระบุแหล่งที่มาสำหรับคำสั่งนั้น

3

ข้อดีของการใช้ภาษาระดับสูงกว่าเช่น Python หรือ Ruby คือ (1) ไวยากรณ์ของพวกเขาอยู่ใกล้กับ pseudocode มากและ (2) ไลบรารีมาตรฐานของพวกเขาให้โครงสร้างข้อมูลที่เป็นประโยชน์ออกมาจากกล่อง (แบตเตอรี่รวมแนวคิดที่ @Robert กล่าว) ดังนั้นจึงเป็นเรื่องที่สมบูรณ์แบบที่จะชอบใช้มัน ใช้ทุกอย่างที่ช่วยเพิ่มประสิทธิผลของคุณแทนที่จะเลือกภาษาเพียงเพราะมันสำคัญหรือ "เจ๋ง"


คุณเป็นฮิปสเตอร์หรืออะไรบางอย่าง? นี่คือ PBR ของคุณ ฉัน? ฉันควรจะเจ๋ง
Thomas Eding

2

สิ่งที่คุณจะพลาดเมื่อเขียนโปรแกรมในภาษาระดับสูงกว่า C / C ++ คือการเรียนรู้ว่าคอมพิวเตอร์ทำงานอย่างไร คุณจะไม่สามารถพัฒนาสิ่งต่าง ๆ เช่นระบบฝังตัวระบบปฏิบัติการและไดรเวอร์ฮาร์ดแวร์ การรู้จัก C ยังช่วยเมื่อเรียนรู้แอสเซมเบลอร์

นอกจากนี้ส่วนใหญ่ของระบบที่สำคัญทั้งหมดยังคงได้รับการพัฒนาใน C ดังนั้นคุณอาจไม่สามารถทำงานในหลายสาขาซอฟต์แวร์ซอฟต์แวร์ (การบินและอวกาศ / ยานยนต์ / เทคโนโลยีทางการแพทย์ ฯลฯ ) โดยที่ไม่รู้ตัว


คำถามนี้เกี่ยวกับอัลกอริธึมไม่ใช่เรื่องเกี่ยวกับโลหะ
Konrad Rudolph

@ KonradRudolph โอเค แต่การเขียนโปรแกรมควบคุมฮาร์ดแวร์มักเกี่ยวข้องกับอัลกอริธึม ตัวอย่างเช่นเมื่อเขียนไดรเวอร์สำหรับตัวแปลงแอนะล็อกเป็นดิจิทัลคุณจะต้องพัฒนาตัวกรองดิจิทัลและอาจจะมีคิวหรือระบบลำดับความสำคัญบางอย่าง จากนั้น API จะอยู่ด้านบนไดรเวอร์ของคุณ มันคล้ายกับการเขียน "วัตถุ" หรือ "ชนิดข้อมูลนามธรรม"

@Lundin ขอบคุณที่พูดถึงข้อเสียในสถานการณ์โลกแห่งความเป็นจริง
ffledgling

1

หากคำถามเกิดขึ้นเกี่ยวกับ 'Big O สัญกรณ์' และคุณลองและวัดมันก็ยากที่จะทำใน Python เว้นแต่คุณจะรู้มากขึ้นเกี่ยวกับวิธีที่ Python ใช้สิ่งต่าง ๆ ตัวอย่างเช่นรายการ Python ไม่ใช่รายการที่เชื่อมโยง ; เรียงลำดับ Pythons คือ TimSort; ถังขยะหลามรวบรวมในบางช่วงเวลา ...

ฉันมักจะพบว่าการเชื่อมต่อโปรแกรม C กับสิ่งที่น่าจะเกิดขึ้นบนตัวประมวลผลได้ง่ายขึ้น แต่ถึงแม้ที่นี่จะมีตัวประมวลผลแคชอยู่ การแบ่งเวลาของระบบปฏิบัติการ การเพิ่มประสิทธิภาพของคอมไพเลอร์ ฯลฯ ที่สามารถส่งผลกระทบต่อสัญชาตญาณของฉัน

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

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

ฉันคิดว่ามันจะเป็นการดีที่สุดที่จะใช้พวกเขาทั้งสอง (และภาษาอื่น ๆ ) จนกว่าคุณจะรู้สึกถึงการแลกเปลี่ยนของพวกเขา ฉันเป็น coder ที่ดี แต่ตอนนี้เขียนรหัส C ดั้งเดิมน้อยมากถึงแม้ว่าฉันยังต้องอ่าน (และในบางครั้ง debug) รหัส C ในงานของฉัน แม้ว่าฉันจะชอบ Python ฉันก็รู้และยังคงใช้ Perl และ Awk (และ sed และ grep และ sort และ Tcl และ C และ ... )


ฉันไม่เห็นด้วยกับวรรคแรก Python ให้ความสำคัญอย่างมากกับโครงสร้างข้อมูลและเอกสารที่ชัดเจนว่าโครงสร้างข้อมูลที่กำหนดไว้ล่วงหน้าถูกนำไปใช้อย่างไร แน่นอนว่าการเก็บขยะจะทำให้เวลาในการเบ้ของมันลดลง แต่มันจะไม่ค่อยดีสำหรับออเดอร์ใหญ่ ๆ
Konrad Rudolph

1

ฉันอยากจะแนะนำให้คุณดู Scala หรือ Clojure (แต่ใช้ประเภทคำอธิบายประกอบ) ในบางกรณีพวกเขาสามารถเร็วเท่ากับ C ในกรณีอื่น ๆ พวกเขายังคงเร็วกว่า Ruby / Python มากขึ้นในขณะที่มี consice และสัญกรณ์ที่ชัดเจนต่างจาก C ( IMHO ) ลองเปรียบเทียบกับรหัส C:

for (i <- 1 to 100; j <- 2 until 100;
     k <- 1 to 2; if i != j) {
     //...
}

นอกจากนี้พวกเขามีฟังก์ชั่นการเขียนโปรแกรมคลังแสงคล้ายกับทับทิม / ธmap, filter, reduceฯลฯ ซึ่งเป็นไม่เป็นอย่างที่ iterating หรือหาง recursion โทร แต่มันก็ยังคงได้เร็วขึ้นมากแล้วภาษาสคริปต์แบบไดนามิกอย่างเต็มที่


1

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

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

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

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

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

แต่โดยปกติสิ่งที่นับได้คือการทำให้อัลกอริทึมถูกต้องเพื่อส่งผ่าน ในกรณีเหล่านั้น Python ทำงานได้ดี ตัวอย่างเช่นสำหรับปัญหา Project Euler (ซึ่งไม่ได้กำหนดเวลาให้นับจำนวนโซลูชั่นที่ถูกต้องเท่านั้น) Python เหมาะสมอย่างสมบูรณ์แบบ

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