มีความสัมพันธ์ระหว่างขนาดของโครงการและความเข้มงวดของภาษาหรือไม่


72

การอธิบายถึงความแตกต่างระหว่างความเข้มงวดของภาษาและกระบวนทัศน์ต่อเพื่อนร่วมงานของฉันฉันจึงยืนยันว่า:

  • ภาษาที่ทนทานเช่นภาษาที่มีการเปลี่ยนแปลงและถูกตีความใช้ดีที่สุดสำหรับต้นแบบและโครงการขนาดเล็กหรือเว็บแอปพลิเคชันขนาดกลาง เมื่อเลือกภาษาไดนามิกที่หรูหราเช่น Python หรือ JavaScript ที่มี Node.js ประโยชน์คือ:

    1. การพัฒนาที่รวดเร็ว

    2. ลดรหัสสำเร็จรูป

    3. ความสามารถในการดึงดูดโปรแกรมเมอร์หนุ่มสาวผู้สร้างสรรค์ที่หนี“ ภาษาองค์กร”   เช่น Java

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

    1. กระบวนทัศน์และรูปแบบที่รู้จักกันดีพัฒนามานานหลายทศวรรษ

    2. ความง่ายในการตรวจสอบแบบคงที่

    3. ความสามารถในการค้นหานักพัฒนามืออาชีพจำนวนมากที่มีประสบการณ์มานานหลายทศวรรษ

  • ภาษาที่เข้มงวดเช่น Haskell, Ada หรือเทคนิคต่าง ๆ เช่นสัญญา Code ใน C # นั้นดีกว่าสำหรับระบบที่ให้ความปลอดภัยมากกว่าความยืดหยุ่น (แม้ว่า Haskell จะมีความยืดหยุ่นสูงมาก) เช่นระบบที่มีความสำคัญต่อชีวิตและระบบซึ่งคาดว่าจะเสถียรมาก ประโยชน์คือ:

    1. ความสามารถในการจับข้อบกพร่องให้ได้มากที่สุดในเวลารวบรวม

    2. ความง่ายในการตรวจสอบแบบคงที่

    3. ความง่ายในการพิสูจน์อย่างเป็นทางการ

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

ยังมีความสัมพันธ์ระหว่างขนาดของโครงการและความเข้มงวดของภาษา / กระบวนทัศน์ที่ควรใช้หรือไม่?

มีปัจจัยที่สามที่ฉันลืมที่จะคำนึงถึง?

ฉันผิดตรงไหน


12
การตรวจสอบอย่างเข้มงวดและการตรวจสอบประเภทคงที่ไม่ใช่สิ่งเดียวกัน Python ถูกพิมพ์แบบไดนามิก แต่เข้มงวดกว่า C. ข้อดีของการตรวจสอบชนิดสแตติกไม่ใช่ความเข้มงวดต่อ se แต่ชนิดนั้นถูกตรวจสอบ ณ เวลาบิลด์ไม่ใช่เวลารัน ฉันจัดการกับปัญหา C / C ++ มากมายในอาชีพการงานของฉันเนื่องจากการคัดเลือกโดยปริยาย
Steven Burnap

5
อาจมีบางสิ่งที่จะกล่าวเกี่ยวกับวงจรชีวิต: ซอฟต์แวร์ที่เริ่มต้นในหมวดหมู่แรกของคุณสามารถพัฒนาเป็นภาษาอื่นได้โดย "ลาก" ภาษาด้วย
Mat

11
สิ่งเดียวที่ยอดเยี่ยมเกี่ยวกับจาวาสคริปต์คือมันทำงานในเบราว์เซอร์ส่วนใหญ่
JeffO

1
@StevenBurnap: ฉันไม่สามารถตกลงเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างคงที่และเข้มงวด Java เป็นอีกจุดหนึ่งของสเปกตรัมที่คงที่และเข้มงวดเกินไป นักพัฒนามักใช้การพิมพ์แบบคงที่โดยใช้ Java เป็นตัวอย่าง แต่การวิพากษ์วิจารณ์ส่วนใหญ่ควรถูกนำไปที่คอมไพเลอร์ที่เข้มงวดเกินไปของ Java ไม่ใช่การพิมพ์ทั่วไป เพียงแค่ดู Scala ใน JVM เดียวกันซึ่งพิมพ์แบบคงที่ แต่มีรหัส verbose น้อยกว่ามากเนื่องจากความสามารถในการอนุมานประเภทคอมไพเลอร์ที่ยอดเยี่ยมของ
Cornel Masson

2
"Python ถูกใช้อย่างประสบความสำเร็จสำหรับระบบขนาดใหญ่" - คำจำกัดความของ "ความสำเร็จ" ที่นี่คืออะไร? ส่วนใหญ่มันจะทำงานและสร้างผลลัพธ์บางอย่าง? ต้องมีการทดสอบและจำนวนพนักงานหรือไม่ สิ่งที่เกี่ยวกับการบำรุงรักษา?
Den

คำตอบ:


39

กรณีศึกษาที่น่าสนใจในเรื่องของโครงงานขนาดที่ใช้ภาษาไดนามิกและการตีความสามารถพบได้ในBeginning Scalaโดย David Pollak

ฉันเริ่มค้นหาวิธีในการแสดงรหัสในสมองของฉันในวิธีที่ง่ายกว่าและตรงกว่ามากขึ้น ฉันพบ Ruby และ Rails ฉันรู้สึกเป็นอิสระ Ruby อนุญาตให้ฉันแสดงแนวคิดในบรรทัดของโค้ดที่น้อยลง Rails นั้นใช้งานได้ง่ายกว่า Spring MVC, Hibernate และเฟรมเวิร์กเว็บ Java“ คล่องตัว” อื่น ๆ ด้วย Ruby และ Rails ฉันต้องแสดงให้เห็นถึงสิ่งที่อยู่ในหัวของฉันในเวลาอันสั้น มันคล้ายกับการปลดปล่อยที่ฉันรู้สึกเมื่อฉันย้ายจาก C ++ เป็น Java ...

เมื่อโครงการ Ruby และ Rails ของฉันเติบโตเกินกว่าสองสามพันบรรทัดของรหัสและเมื่อฉันเพิ่มสมาชิกในทีมของฉันโครงการความท้าทายของภาษาแบบไดนามิกก็ชัดเจน

เรามีค่าใช้จ่ายมากกว่าครึ่งหนึ่งของการเขียนโปรแกรมการทดสอบการเขียนเวลาของเราและมากของกำไรจากการผลิตที่เราเห็นได้หายไปในการเขียนการทดสอบ การทดสอบส่วนใหญ่นั้นไม่จำเป็นใน Java เพราะส่วนใหญ่จะทำการทดสอบเพื่อให้แน่ใจว่าเราได้อัพเดตผู้โทรเมื่อเรา refactored code โดยการเปลี่ยนชื่อเมธอดหรือจำนวนพารามิเตอร์ นอกจากนี้ผมพบว่าการทำงานกับทีมที่มีความคิดผสมผสานระหว่าง 2-4 สมาชิกในทีมเป็นสิ่งที่เป็นไปด้วยดีในรูบี แต่ในขณะที่เราพยายามที่จะนำสมาชิกใหม่เข้าสู่ทีมในการเชื่อมต่อจิตยากที่จะส่งไปยังสมาชิกในทีมใหม่

ฉันไปหาภาษาใหม่และสภาพแวดล้อมการพัฒนา ฉันกำลังมองหาภาษาที่มีความหมายเหมือน Ruby แต่ปลอดภัยและมีประสิทธิภาพสูงเท่ากับ Java ...

อย่างที่คุณเห็นความท้าทายที่สำคัญในการปรับขนาดโครงการสำหรับผู้เขียนกลายเป็นการทดสอบการพัฒนาและการถ่ายโอนความรู้

โดยเฉพาะอย่างยิ่งผู้เขียนเข้าไปในรายละเอียดเพิ่มเติมในการอธิบายความแตกต่างในการเขียนการทดสอบระหว่างภาษาที่พิมพ์แบบไดนามิกและแบบคงที่ในบทที่ 7 ในส่วน "Bunnies ฆ่า Poignantly: Stairs Dwemthy '" กล่าวถึง Scala พอร์ตของตัวอย่างทับทิมเฉพาะ:

ทำไม Lucky Stiff ... แนะนำแนวคิดของ Metaprogrammingของ Ruby ในArray ของ Dwemthyที่กระต่ายต่อสู้กับสิ่งมีชีวิตหลายชนิด N8han14 อัปเดตตัวอย่างเพื่อทำงานใน Scala ...

เมื่อเทียบกับรหัสทับทิมส่วนห้องสมุดของรหัสสกาล่ามีความซับซ้อนมากกว่า เราต้องทำงานมากมายเพื่อให้แน่ใจว่าประเภทของเราถูกต้อง เราต้องเขียนคุณสมบัติของ Creature ด้วยตนเองในคลาส DupMonster และ CreatureCons method_missingนี่คือการทำงานมากกว่า นอกจากนี้เรายังต้องทำงานในปริมาณที่พอเหมาะเพื่อสนับสนุนสิ่งมีชีวิตและอาวุธของเรา

ในทางกลับกันผลลัพธ์นั้นมีประสิทธิภาพมากกว่ารุ่น Ruby หากเราต้องเขียนการทดสอบสำหรับรหัส Ruby ของเราเพื่อทดสอบสิ่งที่คอมไพเลอร์ Scala มั่นใจกับเราเราจะต้องมีโค้ดอีกหลายบรรทัด ตัวอย่างเช่นเราสามารถมั่นใจได้ว่ากระต่ายของเราไม่สามารถขวานได้ ในการรับการรับรองนี้ใน Ruby เราจะต้องเขียนการทดสอบเพื่อให้แน่ใจว่าการเรียกใช้|^Rabbit นั้นล้มเหลว Scala เวอร์ชันของเราช่วยให้มั่นใจได้ว่ามีเพียงอาวุธที่กำหนดไว้สำหรับสิ่งมีชีวิตที่กำหนดเท่านั้นที่สามารถใช้งานได้โดยสิ่งมีชีวิตนั้นสิ่งที่จะต้องใช้จำนวนมากของการสะท้อนภาพ runtime ใน Ruby ...


การอ่านด้านบนสามารถทำให้คิดได้ว่าเมื่อโครงการขยายใหญ่ขึ้นการเขียนทดสอบอาจกลายเป็นเรื่องยุ่งยาก การใช้เหตุผลนี้จะผิดเนื่องจากเป็นตัวอย่างของโครงการขนาดใหญ่ที่ประสบความสำเร็จซึ่งกล่าวถึงในคำถามนี้ ("Python ใช้สำหรับ ... YouTube" สำเร็จแล้ว)

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

Youtube ห้องทดสอบหรือชุด Java ความเข้ากันได้แน่ใจว่าอาศัยอยู่ที่แตกต่างกันชีวิตกว่าการทดสอบในโครงการกวดวิชาเล็ก ๆ เช่นอาร์เรย์ Dwemthy ของ



24

การยืนยันของคุณไม่ผิด คุณต้องขุดให้ลึกลงไปอีกหน่อย

พูดง่ายๆระบบใหญ่ใช้หลายภาษาไม่ใช่แค่ภาษาเดียว อาจมีบางส่วนที่สร้างขึ้นโดยใช้ภาษา "เข้มงวด" และอาจมีบางส่วนที่สร้างขึ้นโดยใช้ภาษาแบบไดนามิก

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

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

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


"คุณไม่สามารถคว้าบัณฑิตวิทยาลัยเพียงไม่กี่คน" ... "และคาดว่าพวกเขาจะเขียนซอฟต์แวร์ที่มีผู้ใช้หลายล้านคน" อาจจะมีเพียงพอ
สีย้อม

น่าสังเกตว่าที่นี่เช่นเดียวกับ Google และ Python การใช้งาน PHP ของ Facebook นั้นส่วนใหญ่เป็นกาว ... ความเข้าใจของฉันคือว่าสำหรับฟังก์ชั่นส่วนใหญ่ PHP นั้นส่วนใหญ่จะใช้เป็นไคลเอนต์ที่ค่อนข้างเรียบง่ายบนระบบเซิร์ฟเวอร์ที่ซับซ้อนกว่า ในภาษา "หนา" แบบดั้งเดิมเช่น Java, C ++, Haskell, OCaML เป็นต้น
Jules

"มีเพียง Google เท่านั้นที่รู้ว่าระบบเหล่านั้นถูกสร้างขึ้นมาด้วยอะไร" .. ฉันยังมีข้อสงสัยบางอย่างเกี่ยวกับเรื่องนั้น :) จากประสบการณ์ของฉันไม่มีบุคคลใด (คนหรืออย่างอื่น) สามารถแสดงรายการทุกส่วนของระบบที่มีขนาดใหญ่มาก ในหลายกรณีการฝังไว้ในชามของเซิร์ฟเวอร์บางตัวนั้นเป็นสคริปต์ Perl, Fortran หรือ KSH ที่ถูกลืมไปนานซึ่งแสดง 'Magic'
mattnz

3

มีข้อผิดพลาดสองประเภทในการตรวจสอบ: ข้อผิดพลาดประเภท (เรียงต่อกันจำนวนเต็ม + รายการของการลอย) และข้อผิดพลาดทางตรรกะทางธุรกิจ (โอนเงินไปยังบัญชีธนาคารตรวจสอบว่าบัญชีต้นทางมีเงินหรือไม่)

ส่วน "ไดนามิก" ของภาษาการเขียนโปรแกรมแบบไดนามิกเป็นเพียงสถานที่ที่จะทำการตรวจสอบประเภท ในภาษาการเขียนโปรแกรมแบบ "พิมพ์แบบไดนามิก" การตรวจสอบชนิดจะทำในขณะที่ดำเนินการคำสั่งแต่ละคำสั่งในขณะที่การตรวจสอบประเภท "ภาษาที่พิมพ์แบบคงที่" จะทำในเวลารวบรวม และคุณสามารถเขียนล่ามสำหรับภาษาการเขียนโปรแกรมแบบคงที่ (เช่นemscriptemทำ) และคุณยังสามารถเขียนคอมไพเลอร์แบบคงที่สำหรับภาษาการเขียนโปรแกรมแบบไดนามิก (เช่นgcc-pythonหรือshed-skin )

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

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

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

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

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


3

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

ต้องบอกว่าภาษาใด ๆ ที่ช่วยให้คุณเขียนรหัสได้อย่างมีนัยสำคัญน้อยกว่านั้นต้องคุ้มที่จะดู (เช่น Python vs Java) บางทีอนาคตอาจเป็นภาษาที่ฉลาดและพิมพ์ได้แบบคงที่พร้อมการอนุมานประเภทขั้นสูง (เช่นในรูปแบบสกาล่า) หรือไฮบริดเช่น C # กำลังพยายามมีตัวระบุdynamic...

และอย่าลืมประโยชน์การพิมพ์แบบคงที่ "อื่น ๆ ": การเติมโค้ด IDE ที่สมบูรณ์ / intellisense ที่เหมาะสมซึ่งในมุมมองของฉันเป็นคุณลักษณะที่สำคัญไม่ใช่การปรับแต่งที่ดี


1
"code-complete / intellisense" - การรีแฟคเตอร์อัตโนมัติก็มีความสำคัญเช่นกัน
Den

@Den แน่นอน เป็นไปได้ไหมว่าภาษาแบบไดนามิกช่วยให้คุณสามารถเขียนเวอร์ชันเริ่มต้นได้อย่างรวดเร็ว (ง่ายกว่า, โค้ดน้อยกว่าในการเขียน) แต่จมดิ่งลงในภายหลังเนื่องจากยากที่จะประเมินผลกระทบของการเปลี่ยนแปลงหรือการปรับโครงสร้างใหม่
Cornel Masson

0

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

ฉันได้รับการบอกว่า "เราไม่สามารถใช้ Ruby on Rails ได้เพราะเป็นโอเพ่นซอร์สและบางคนสามารถแฮ็กข้อมูลที่สำคัญหรือมีการป้องกันไว้ได้" ฉันขอโทษ แต่เมื่อมีคนคิดว่าโอเพนซอร์ซ == ชั่วร้ายมันแทบจะเป็นไปไม่ได้เลยที่จะเปลี่ยนแปลง แนวความคิดนั้นเป็นโรคขององค์กร

C # และ Java เป็นที่เชื่อถือได้ภาษาที่มีความน่าเชื่อถือแพลตฟอร์ม Ruby และ Python ไม่ใช่ภาษาที่เชื่อถือได้


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

1
ภาษาไดนามิกไม่ดีต่อความปลอดภัย แต่ "โอเพ่นซอร์ส" ไม่ใช่เหตุผลที่ดี บางทีพวกเขาหมายถึง "มันเป็นเรื่องง่ายที่จะมีอิทธิพลต่อส่วนหนึ่งของรหัสจากส่วนต่าง ๆ ของรหัส" ดูprogrammers.stackexchange.com/questions/206558/…
Euphoric

1
โปรดทราบว่าแท้จริงแล้ว "open sourceness" เป็นหนึ่งในแง่มุมของการเลือกภาษา นั่นเป็นตัวอย่างหนึ่งในสามเหตุผลที่ Jeff Atwood มอบให้เพื่ออธิบายว่าทำไม Discourse จึงใช้ Ruby
Arseni Mourzenko

C # เป็นโอเพ่นซอร์สอย่างสมบูรณ์ในขณะนี้ แต่ก็ยังคงเป็น curated วางแผนและพัฒนาโดย devs มืออาชีพที่ดีฉันเดา หวังว่าสิ่งที่ "Python 3 กับ 2" จะไม่เกิดขึ้นที่นี่
Den

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