ประเภทระบบ

ข้อดีข้อเสียของภาษาโปรแกรมเฉพาะคืออะไร? X เป็นภาษาที่ดีสำหรับงานของฉันหรือไม่? Googling สำหรับ “ภาษาโปรแกรมที่ดีที่สุด” จะให้รายการมาตรฐานของ “Python, Java, JavaScript, C#, C++, PHP” พร้อมด้วยรายการข้อดีและข้อเสียที่คลุมเครือ เห็นบทความแบบนี้แล้วรู้สึกปวดใจ คนเขียนคงขี้เกียจ ไม่มีประสบการณ์ ขาดจินตนาการ มาดำดิ่งลงลึกและค้นหาว่าอะไรห่วยจริงๆ และอะไรไม่

ในบทความนี้ ฉันจะพยายามให้ภาพรวมที่เป็นกลางและหวังว่าจะเป็นกลางของภาษาโปรแกรมสมัยใหม่ยอดนิยม (และไม่เป็นที่นิยมนัก) โดยจัดอันดับจากแย่ที่สุดไปจนถึงดีที่สุด

โปรดทราบว่าไม่มีภาษาการเขียนโปรแกรมใดที่เหมาะกับกรณีการใช้งานที่เป็นไปได้ทั้งหมดอย่างสมบูรณ์แบบ บางภาษาเหมาะที่สุดสำหรับการพัฒนาส่วนหน้า ภาษาอื่นๆ ทำงานได้ดีที่สุดสำหรับการพัฒนาแบ็กเอนด์/API และภาษาอื่นๆ เหมาะสำหรับการเขียนโปรแกรมระบบ

ฉันจะพูดถึงสองตระกูลภาษาที่ใช้กันมากที่สุดในโลก ได้แก่ “ภาษาที่สืบเชื้อสายมาจาก C” และ “ภาษาที่สืบเชื้อสายมาจาก ML”

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

ลักษณะภาษาใดที่สำคัญจริงๆ?

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

ฉันจะใช้อีโมจิยกนิ้วโป้ง 👍 (เช่น +1 ) ยกนิ้วโป้งลง 👎 หรืออิโมจิโอเค 👌 (ไม่ดีหรือไม่ดี) เพื่อแสดงถึงคะแนนของลักษณะเฉพาะของภาษานั้นๆ

ทีนี้เราจะวัดกันอย่างไร? กล่าวอีกนัยหนึ่ง อะไรคือสิ่งสำคัญจริงๆ นอกเหนือจากความนิยมทางภาษา?

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

ความพยายามในการเรียนรู้

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

นอกจากนี้ยังเป็นการดีสำหรับระบบประเภทที่รองรับประเภทข้อมูลพีชคณิต (เพิ่มเติมในภายหลัง)

ระบบประเภทที่ทรงพลังที่สุดรองรับประเภท Higher-Kinded ซึ่งเป็นนามธรรมระดับหนึ่งที่อยู่เหนือประเภททั่วไป และช่วยให้เราสามารถเขียนโปรแกรมในระดับที่สูงกว่าของนามธรรมได้

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

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

ค่าว่าง

ภาษาที่ดีควรสามารถเข้าถึงได้โดยผู้เริ่มต้น และไม่ควรใช้เวลาหลายปีกว่าจะเชี่ยวชาญ

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

การจัดการข้อผิดพลาด

- Tony Hoare ผู้ประดิษฐ์ Null References

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

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

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

ในภาษาที่ดี การไม่มีค่าหรือมีค่าควรได้รับการตรวจสอบประเภท ณ เวลาคอมไพล์

ภาษาที่สนับสนุนกลไกอื่นๆ ในการทำงานกับข้อมูลที่ขาดหายไปจะได้รับการจัดอันดับที่สูงกว่า

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

เห็นพ้องต้องกัน

เมื่อใช้ข้อยกเว้นเป็นวิธีหลักในการจัดการข้อผิดพลาด เป็นไปไม่ได้ที่จะทราบว่าฟังก์ชันจะส่งกลับค่าที่คาดหวังหรือระเบิด ฟังก์ชั่นที่ส่งข้อยกเว้นก็ไม่สามารถเขียนได้เช่นกัน

แน่นอนว่าไม่ใช่เรื่องที่โอเคที่แอปพลิเคชันทั้งหมดจะเสียหายเพียงเพราะเราไม่สามารถดึงข้อมูลบางส่วนได้ แต่นี่คือสิ่งที่เกิดขึ้นบ่อยเกินกว่าที่เราอยากจะยอมรับ

ทางเลือกหนึ่งคือการตรวจสอบข้อยกเว้นที่เกิดขึ้นด้วยตนเอง แต่วิธีการนี้เปราะบาง (เราอาจลืมตรวจสอบข้อยกเว้น) และเพิ่มสัญญาณรบกวนมาก:

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

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

ความไม่เปลี่ยนรูป

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

ห้องสมุดที่ช่วยเหลือเรื่องการทำงานพร้อมกันนั้นเป็นเพียงความคิดในภายหลัง พวกเขาเพียงแค่เพิ่ม band-aid ให้กับภาษาที่ไม่ได้ออกแบบมาเพื่อการทำงานพร้อมกันในตอนแรก สิ่งนี้ไม่นับเป็นประสบการณ์ของนักพัฒนาที่ดีจริงๆ ในภาษาสมัยใหม่ ต้องมีการสนับสนุนการทำงานพร้อมกันในตัว (ลองนึกถึง Go/Erlang/Elixir)

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

ระบบนิเวศ/เครื่องมือ

— «Rich Hickey» ผู้สร้าง Clojure

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

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

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

ด้วยสถานะที่ไม่เปลี่ยนรูป จึงไม่มีการแบ่งปันใดๆ ดังนั้นเราจึงไม่ต้องกังวลกับความซับซ้อนของความปลอดภัยของเธรดอีกต่อไป ความไม่เปลี่ยนรูปทำให้โค้ดของเราขนานกันได้ง่าย

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

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

ความเร็ว

เราได้เห็นสิ่งนี้เกิดขึ้นกับภาษาอย่าง JavaScript และ Python

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

อายุ

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

👎 คุณสมบัติภาษา

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

C++

ตระกูลภาษา: C

C++ เป็นภาษาที่แย่มาก... และการจำกัดโปรเจ็กต์ของคุณให้ใช้ภาษา C หมายความว่าผู้คนจะไม่ทำเรื่องไร้สาระกับ “โมเดลวัตถุ” c&@p
— Linus Torvalds ผู้สร้าง Linux
em>

👎 ความเร็ว

C ++ เต็มไปด้วยคุณสมบัติต่างๆ มันพยายามทำทุกอย่างแม้จะไม่เก่งในเรื่องใดเรื่องหนึ่งก็ตาม C++ มี goto, พอยน์เตอร์, การอ้างอิง, OOP, โอเปอเรเตอร์โอเวอร์โหลด และฟีเจอร์ที่ไม่เกิดผลอื่นๆ อีกมากมาย

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

C++ ขึ้นชื่อในเรื่องเวลาในการคอมไพล์ที่ช้า ช้ากว่า Java อย่างเห็นได้ชัด ไม่แย่เท่ากับ Scala

👎 ระบบนิเวศ/เครื่องมือ

ประสิทธิภาพรันไทม์พร้อมกับเวลาเริ่มต้นก็ดี

👎👎 คัดแยกขยะ

ทวีตข้างต้นเป็นข้อความที่ถูกต้อง คอมไพเลอร์ C++

«https://note.com/jussds/n/n0fd581ae9cac»
«https://opidaepd.hatenablog.com/entry/2020/12/09/011426»
«https://www .peeranswer.com/question/5fcfa40d69420cd14d6b1c1c»
«https://slexy.org/view/s2TRI8Tpkf»
«https://paiza.io/projects/GTL27-3M-pG1e8yBON6RjA»
«https://pastelink.net/2ckyi»
«http://lifb.com/agj/Barca-v-Olymp-bb01.html»
«http://lifb.com/ agj/Barca-v-Olymp-bb02.html»
«http://lifb.com/agj/Barca-v-Olymp-bb03.html»
«http://lifb.com/ agj/videos-Hull-Crewe-Alexandra-v-en-gb-1.html»
«http://lifb.com/agj/videos-Hull-Crewe-Alexandra-v-en-gb-2 .html»
«http://lifb.com/agj/videos-Hull-Crewe-Alexandra-v-en-gb-3.html»
«http://lifb.com/agj /Video-athletic-v-sunderland-kdixs-ork-ojc-01.html»
«http://lifb.com/agj/Video-athletic-v-sunderland-kdixs-ork-ojc-02. html»
«http://lifb.com/agj/Video-athletic-v-sunderland-kdixs-ork-ojc-03.html»
«http://lifb.com/agj/ Video-leyton-v-bristol-kdixs-ork-ojc01.html»
«http://lifb.com/agj/Video-leyton-v-bristol-kdixs-ork-ojc02.html»
«http://lifb.com/agj/Video-leyton-v-bristol-kdixs-ork-ojc03.html»
«http://lifb.com/agj/Video-oxford-v-forest -green-kdixs-ork-ojc01.html»
«http://lifb.com/agj/Video-oxford-v-forest-green-kdixs-ork-ojc02.html»
«http ://lifb.com/agj/Video-oxford-v-forest-green-kdixs-ork-ojc03.html»
«http://lifb.com/agj/Video-notts-county-v- boreham-kdixs-ork-ojc-001.html»
«http://lifb.com/agj/Video-notts-county-v-boreham-kdixs-ork-ojc-002.html»
«http://lifb.com/agj/Video-notts-county-v-boreham-kdixs-ork-ojc-003.html»
«http://lifb.com/agj/Video-Coventry -City-vs-Luton-yreckn-erje-1.html»
«http://lifb.com/agj/Video-Coventry-City-vs-Luton-yreckn-erje-2.html»
«http://lifb.com/agj/Video-Coventry-City-vs-Luton-yreckn-erje-3.html»
«http://lifb.com/agj/Video-huddersfield- v-sheffield-kdixs-ork-ojc-01.html»
«http://lifb.com/agj/Video-huddersfield-v-sheffield-kdixs-ork-ojc-02.html»
«http://lifb.com/agj/Video-huddersfield-v-sheffield-kdixs-ork-ojc-03.html»
«http://lifb.com/agj/Video-Millwall-v -QPR-rs001.html»
«http://lifb.com/agj/Video-Millwall-v-QPR-rs002.html»
«http://lifb.com/agj/Video -Millwall-v-QPR-rs003.html»
«http://lifb.com/agj/Video-Stoke-City-v-Cardiff-City-rs201.html»
«http:/ /lifb.com/agj/Video-Stoke-City-v-Cardiff-City-rs202.html»
«http://lifb.com/agj/Video-Stoke-City-v-Cardiff-City- rs203.html»
«http://lifb.com/agj/videos-Swansea-v-Bournemouth-gb-1iaf.html»
«http://lifb.com/agj/videos- Swansea-v-Bournemouth-gb-2iaf.html»
«http://lifb.com/agj/videos-Swansea-v-Bournemouth-gb-3iaf.html»
«http:// lifb.com/agj/Video-Watford-v-Rotherham-en-gb-1x1.html»
«http://lifb.com/agj/Video-Watford-v-Rotherham-en-gb-1x2 .html»
«http://lifb.com/agj/Video-Watford-v-Rotherham-en-gb-1x3.html»
«http://lifb.com/agj/videos -Chelsea-Krasnodar-v-en-gb-1lhn.html»
«http://lifb.com/agj/videos-Chelsea-Krasnodar-v-en-gb-2lhn.html»
«http://lifb.com/agj/videos-Chelsea-Krasnodar-v-en-gb-3lhn.html»
«http://lifb.com/agj/Man-v-Leip-uefa201. html»
«http://lifb.com/agj/Man-v-Leip-uefa202.html»
«http://lifb.com/agj/Man-v-Leip-uefa203. html»
«https://www.finehh.com/gwj1/Barca-v-Olymp-bb01.html»
«https://www.finehh.com/gwj1/Barca-v- Olymp-bb02.html»
«https://www.finehh.com/gwj1/Barca-v-Olymp-bb03.html»
«https://www.finehh.com/gwj1/ videos-Hull-Crewe-Alexandra-v-en-gb-1.html»
«https://www.finehh.com/gwj1/videos-Hull-Crewe-Alexandra-v-en-gb-2 .html»
«https://www.finehh.com/gwj1/videos-Hull-Crewe-Alexandra-v-en-gb-3.html»
«https://www.finehh .com/gwj1/Video-athletic-v-sunderland-kdixs-ork-ojc-01.html»
«https://www.finehh.com/gwj1/Video-athletic-v-sunderland-kdixs- ork-ojc-02.html»
«https://www.finehh.com/gwj1/Video-athletic-v-sunderland-kdixs-ork-ojc-03.html»
«https: //www.finehh.com/gwj1/Video-leyton-v-bristol-kdixs-ork-ojc01.html»
«https://www.finehh.com/gwj1/Video-leyton-v-bristol -kdixs-ork-ojc02.html»
«https://www.finehh.com/gwj1/Video-leyton-v-bristol-kdixs-ork-ojc03.html»
«https:/ /www.finehh.com/gwj1/Video-oxford-v-forest-green-kdixs-ork-ojc01.html»
«https://www.finehh.com/gwj1/Video-oxford-v- Forest-green-kdixs-ork-ojc02.html»
«https://www.finehh.com/gwj1/Video-oxford-v-forest-green-kdixs-ork-ojc03.html»
«https://www.finehh.com/gwj1/Video-notts-county-v-boreham-kdixs-ork-ojc-001.html»
«https://www.finehh.com/gwj1 /Video-notts-county-v-boreham-kdixs-ork-ojc-002.html»
«https://www.finehh.com/gwj1/Video-notts-county-v-boreham-kdixs- ork-ojc-003.html»
«https://www.finehh.com/gwj1/Video-Coventry-City-vs-Luton-yreckn-erje-1.html»
«https: //www.finehh.com/gwj1/Video-Coventry-City-vs-Luton-yreckn-erje-2.html»
«https://www.finehh.com/gwj1/Video-Coventry-City -vs-Luton-yreckn-erje-3.html»
«https://www.finehh.com/gwj1/Video-hud

ฉันเชื่อว่าคนทำงานในเมืองซึ่งสามารถเสริมศักยภาพได้จะมีความสำคัญสำหรับ C++0x แต่ก็ยังมีปัญหาเฉพาะทางเพียงพอ...

- Bjarne Stroustrup ผู้สร้าง C++

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

👎 ความพยายามอย่างถล่มทลายในการเขียนโปรแกรมเชิงวัตถุ

ฉันจินตนาการถึงคำว่า Object-Oriented และฉันสามารถเปิดเผยกับคุณได้ว่าไม่มี C++ เป็นลำดับความสำคัญสูงสุด

- Alan Kay ผู้ออกแบบรายการตั้งโปรแกรม

หลังจากที่ปรากฏตัวในช่วงปลายทศวรรษที่ 60 OOP ถือเป็นนวัตกรรมใหม่ที่ยอดเยี่ยมเมื่องานบน C++ ได้เริ่มต้นขึ้น เป็นเรื่องน่าตกใจอย่างยิ่งที่ C++ ทำข้อผิดพลาดร้ายแรงบางประการในการใช้งาน OOP (ซึ่งต่างจากภาษาถิ่นอย่าง Smalltalk) ซึ่งได้เปลี่ยนความคิดที่ชาญฉลาดอย่างแท้จริงให้กลายเป็นความฝันที่ไม่ดี

ข้อดีอย่างหนึ่งเกี่ยวกับ C++ ตรงกันข้ามกับ Java ก็คือ OOP ใน C++ ไม่ว่าในกรณีใดก็ตามจะขึ้นอยู่กับดุลยพินิจ

👎👎 การเรียนรู้ความพยายาม

รูปภาพสำหรับโพสต์

Mercurial_Rhombus บน Reddit

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

👎 เห็นพ้องต้องกัน

C++ ได้รับการวางแผนในช่วงเวลาของการประมวลผลแบบศูนย์เดียว และมีส่วนประกอบการทำงานพร้อมกันอย่างง่าย ๆ ที่รวมอยู่ในทศวรรษที่ผ่านมา

👎 เกิดข้อผิดพลาดในการจัดการกับ

การได้รับ/การโยนข้อผิดพลาดถือเป็นความผิดพลาดในการจัดการกับเครื่องดนตรี

👎 ความไม่เปลี่ยนรูป

ไม่มีความช่วยเหลือพื้นฐานสำหรับโครงสร้างข้อมูลถาวร

👎 ค่าว่าง

ใน C++ การอ้างอิงทั้งหมดจะเป็นโมฆะ

รูปภาพสำหรับโพสต์

การตัดสินใจ

รูปภาพสำหรับโพสต์

ในตอนแรกคาดว่าจะเป็นเวอร์ชันที่เหนือกว่าของ C, C++ ที่ถูกละเลยในการถ่ายทอดอย่างแท้จริง

การใช้งาน C++ ให้เกิดประโยชน์สูงสุดคือการเขียนโปรแกรมแบบเฟรมเวิร์ก แม้ว่าจะมีตัวเลือกที่ดีกว่าและเป็นปัจจุบันอยู่มาก (Rust and Go) จึงไม่ควรใช้ C++ เพื่อสิ่งนั้น ฉันไม่คิดว่า C++ จะมีอัจฉริยะใดๆ เลย อย่าลังเลที่จะปฏิเสธฉัน

C++ มันเป็นโอกาสของคุณที่จะไป

ชวา

รูปภาพสำหรับโพสต์

รูปภาพสำหรับโพสต์

Java เป็นสิ่งที่น่าหนักใจที่สุดที่เกิดขึ้นตั้งแต่ MS-DOS

- Alan Kay ผู้ริเริ่มการเขียนโปรแกรมที่ตั้งบทความ

หลังจากปรากฏตัวครั้งแรกในปี 1995 Java มีอายุน้อยกว่า C++ ถึง 16 ปี Java เป็นภาษาที่ง่ายกว่ามาก ซึ่งอาจเพิ่มชื่อเสียงให้กับภาษานี้

ตระกูลภาษา: C.

รูปภาพสำหรับโพสต์

👍 คัดแยกขยะ

บางทีข้อได้เปรียบที่ยิ่งใหญ่ที่สุดที่ Java มอบให้เหนือ C++ ก็คือการแบ่งประเภทขยะ ซึ่งหากไม่ได้รับความช่วยเหลือจากใครก็ตาม ก็สามารถกำจัดข้อบกพร่องจำนวนมหาศาลได้

👍 ระบบนิเวศ

Java มีมาระยะหนึ่งแล้ว และมีระบบทางชีววิทยาขนาดมหึมาสำหรับการพัฒนาแบ็กเอนด์ ซึ่งโดยพื้นฐานแล้วจะลดความพยายามในการปรับปรุงลง

👎 ภาษาเชิงวัตถุ

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

โดยพื้นฐานแล้วฉันจะกล่าวถึงบุคคลที่ไม่มีข้อผิดพลาดที่สุดในด้านวิศวกรรมซอฟต์แวร์เพื่อฟังมุมมองของพวกเขาเกี่ยวกับ OOP:

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

- Alan Kay ผู้ออกแบบ OOP

Alan Kay ถูกต้อง ภาษา OOP มาตรฐานเน้นไปที่สิ่งที่ยอมรับไม่ได้บางอย่าง เช่น คลาสและรายการต่างๆ ในขณะที่มองข้ามการให้ข้อมูล โชคดีที่มีภาษาถิ่นในปัจจุบันที่มีความคิดนี้ถูกต้อง (Erlang/Elixir)

ด้วยภาษาถิ่นการเขียนโปรแกรมแบบ OOP การเขียนโปรแกรมบนพีซีจะกลายเป็นเรื่องละเอียดมากขึ้น มีความหมายน้อยลง อธิบายน้อยลง และยากต่อการเปลี่ยนแปลงและตามทัน

— ริชาร์ด แมนส์ฟิลด์

บุคคลใดก็ตามที่ใช้ภาษา OOP (เช่น Java หรือ C#) และหลังจากนั้นมีประสบการณ์การทำงานในภาษาที่ไม่ใช่ OOP ก็น่าจะเกี่ยวข้องกัน

👌 ความเร็ว

เห็นได้ชัดว่า Java ทำงานบน Java Virtual Machine ซึ่งมีชื่อเสียงในด้านเวลาเริ่มต้นปานกลาง ฉันเคยเห็นโปรแกรมที่ทำงานบน JVM ใช้เวลา 30 วินาทีหรือมากกว่านั้นในการเริ่มทำงาน ซึ่งไม่ยอมรับสำหรับโปรเจ็กต์บนคลาวด์ในปัจจุบัน

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

เมื่อพิจารณาถึงศักยภาพที่เพิ่มขึ้น การดำเนินการรันไทม์ของ JVM นั้นยอดเยี่ยมมาก

👎 การเรียนรู้ความพยายาม

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

👎 เห็นพ้องต้องกัน

Java ได้รับการวางแผนในช่วงเวลาของการคำนวณแบบศูนย์กลางเดียว และเช่นเดียวกับ C++ ก็มีการสนับสนุนพร้อมกันที่เรียบง่าย

👎 ค่าว่าง

ใน Java การอ้างอิงทั้งหมดจะเป็นโมฆะ

👎 เกิดข้อผิดพลาดในการดูแล

การหยิบ/โยนความผิดพลาดถือเป็นข้อผิดพลาดที่นิยมดูแลเครื่องดนตรี

👎 ความไม่เปลี่ยนรูป

ไม่มีความช่วยเหลือโดยธรรมชาติสำหรับโครงสร้างข้อมูลที่ไม่เปลี่ยนแปลง

รูปภาพสำหรับโพสต์

การตัดสินใจ

รูปภาพสำหรับโพสต์

Java เป็นภาษาที่ยุติธรรมเมื่อมันปรากฏขึ้น มันแย่มากที่ Java (ตรงกันข้ามกับ Scala) มีศูนย์กลางอยู่ที่ OOP เท่านั้น ภาษามีรายละเอียดมากและมีโค้ดมาตรฐานมากมาย

โอกาสมาถึงแล้วที่จาวาลาออก

รูปภาพสำหรับโพสต์

C#

รูปภาพสำหรับโพสต์

โดยทั่วไปแล้ว ไม่มีความแตกต่างกันระหว่าง C# และ Java (เนื่องจาก C# ในรูปแบบแรกๆ นั้นเป็นการดำเนินการของ Microsoft ของ Java จริงๆ)

C# แบ่งปันข้อเสียส่วนใหญ่กับ Java หลังจากปรากฏตัวครั้งแรกในปี 2000 C# มีอายุน้อยกว่า Java ถึง 5 ปี และได้รับบางสิ่งจากความผิดพลาดของ Java

ตระกูลภาษา: C.

รูปภาพสำหรับโพสต์

👌 ไวยากรณ์

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

👎 ภาษาเชิงวัตถุ

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

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

— โจ อาร์มสตรอง ผู้สร้าง Erlang

ฉันต้องเห็นด้วยกับ Joe Armstrong ว่าการนำโค้ดที่จัดเรียงตามวัตถุกลับมาใช้ใหม่นั้นเป็นเรื่องยากในการตรวจสอบด้วยโค้ดที่เป็นประโยชน์ (หรือแม้แต่เป้าหมาย)

มีการเสนอโครงการที่จัดรายการไว้เป็นทางเลือกเพื่อจัดการกับโครงการ...

— Edsger W. Dijkstra ผู้บุกเบิกด้านวิศวกรรมซอฟต์แวร์

หลังจากที่ทำงานกับทั้งภาษา OOP และภาษาที่ไม่ใช่ OOP ตลอดอาชีพของฉัน ฉันต้องยอมรับว่ารหัส OOP นั้นยากกว่ามากในการทำให้ถูกต้อง ตรงกันข้ามกับรหัสที่ไม่ใช่ OOP

👎 โลกทัศน์ที่หลากหลาย?

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

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

👎 เห็นพ้องต้องกัน

C# ถูกสร้างขึ้นในช่วงเวลาของการประมวลผลแบบศูนย์กลางเดียว และเช่นเดียวกับ Java ที่มีการรองรับพร้อมกันง่ายๆ

👎 ค่าว่าง

ใน C# การอ้างอิงทั้งหมดจะเป็นโมฆะ

👎 เกิดข้อผิดพลาดในการดูแล

การได้รับ/การโยนข้อผิดพลาดถือเป็นข้อผิดพลาดที่ได้รับความนิยมในการจัดการกับส่วนประกอบ

👎 ความไม่เปลี่ยนรูป

ไม่มีความช่วยเหลือโดยนัยสำหรับโครงสร้างข้อมูลที่ไม่เปลี่ยนแปลง

รูปภาพสำหรับโพสต์

การตัดสินใจ

รูปภาพสำหรับโพสต์

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

น่าเสียดายที่ไม่มีอะไรเกี่ยวกับ C# มากนัก

หลาม

รูปภาพสำหรับโพสต์

รูปภาพสำหรับโพสต์

Python ปรากฏตัวครั้งแรกในปี 1991 เป็นภาษาเก่า นอกจาก JavaScript แล้ว Python ยังเป็นหนึ่งในภาษาถิ่นที่เป็นที่รู้จักมากที่สุดในโลก

ตระกูลภาษา: C.

รูปภาพสำหรับโพสต์

👍 ระบบนิเวศ

Python มีไลบรารี่เกือบทุกอย่าง ไม่เหมือนกับ JavaScript ตรงที่ Python ไม่สามารถใช้สำหรับการพัฒนาเว็บ Frontend ได้ อย่างไรก็ตาม Python ประกอบไปด้วยห้องสมุดวิทยาศาสตร์สารสนเทศจำนวนมหาศาลอย่างมีประสิทธิภาพ

👍 การเรียนรู้ความพยายาม

Python เป็นภาษาพื้นฐานที่ยอดเยี่ยมซึ่งสามารถเข้าถึงได้มาเป็นเวลานาน

👎 พิมพ์กรอบงาน

Python ได้รับการประกอบขึ้นเรื่อยๆ ไม่มีอะไรจะกล่าวถึงเพิ่มเติมอีกเล็กน้อยเกี่ยวกับกรอบงานการเรียงลำดับ

👎 ความเร็ว

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

Python ยังค่อนข้างล่าช้าในการเริ่มต้น ตรงกันข้ามกับภาษาถิ่น

👎 เครื่องมือ

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

👎 เห็นพ้องต้องกัน

Python ไม่ได้ถูกสร้างขึ้นมาเพื่อการใช้งานพร้อมกัน แต่เป็นเพียงการสนับสนุนการทำงานพร้อมกันอย่างง่าย ๆ

👎 ค่าว่าง

ใน Python การอ้างอิงทั้งหมดจะเป็นโมฆะ

👎 เกิดข้อผิดพลาดในการจัดการกับ

การได้รับ/การโยนข้อผิดพลาดถือเป็นความผิดพลาดที่ได้รับความนิยมในการดูแลเครื่องดนตรี

👎 ความไม่เปลี่ยนรูป

ไม่มีความช่วยเหลือพื้นฐานสำหรับโครงสร้างข้อมูลที่ไม่เปลี่ยนแปลง

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

ภาษาโปรแกรมสมัยใหม่เหล่านี้จะทำให้คุณต้องทนทุกข์ทรมานจากการรักษา Covid 19