คำถามติดแท็ก programming-languages

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

12
เหตุใดภาษาการเขียนโปรแกรมหลายภาษาจึงถูกนำมาใช้ในการพัฒนาผลิตภัณฑ์หรือซอฟต์แวร์หนึ่งชิ้น
ฉันเป็นนักเรียนที่จบการศึกษาเมื่อเร็ว ๆ นี้มีวัตถุประสงค์เพื่อเริ่มต้นปริญญาโทของฉันในสาขาวิทยาศาสตร์คอมพิวเตอร์ ฉันเจอโครงการโอเพ่นซอร์สหลายโครงการที่น่าสนใจและสนับสนุนให้ฉันสนับสนุนพวกเขา (CloudStack, OpenStack, moby และ Kubernetes เพื่อบอกชื่อไม่กี่) สิ่งหนึ่งที่ฉันพบว่าส่วนใหญ่มีเหมือนกันคือการใช้ภาษาโปรแกรมหลายภาษา (เช่น Java + Python + Go หรือ Python + C ++ + Ruby) ฉันได้ดูคำถามอื่น ๆ นี้แล้วซึ่งเกี่ยวข้องกับวิธีการใช้ภาษาโปรแกรมหลายภาษาในการสื่อสารซึ่งกันและกัน: จะมีสองโปรแกรมที่แตกต่างกันด้วยสองภาษาที่ต่างกันได้อย่างไร? ฉันต้องการเข้าใจข้อกำหนดที่แจ้งให้องค์กรใช้ภาษาการเขียนโปรแกรมหลายภาษา ข้อกำหนดหรือประเภทของข้อกำหนดใดที่ทำให้สถาปนิกซอฟต์แวร์หรือหัวหน้าโครงการพูดว่า "ฉันเสนอให้เราใช้ภาษา X สำหรับงาน 1 และภาษา Y สำหรับงาน 2" ฉันดูเหมือนจะไม่เข้าใจเหตุผลที่ใช้ภาษาการเขียนโปรแกรมหลายภาษาในผลิตภัณฑ์หรือซอฟต์แวร์เดียวกัน

4
ระบบปฏิบัติการใดที่ใช้ในเครื่องบินและภาษาการเขียนโปรแกรมอะไรที่พัฒนาขึ้นมา [ปิด]
ฉันสงสัยว่าถ้าใครรู้ว่าระบบปฏิบัติการที่ใช้ในเครื่องบินพาณิชย์ (เช่นโบอิ้งหรือแอร์บัส) นอกจากนี้ภาษาโปรแกรมแบบเรียลไทม์ (ที่ต้องการ) คืออะไร ฉันได้ยินมาว่า Ada ถูกใช้ใน Boeing ดังนั้นคำถามของฉันคือ - ทำไม Ada Boeing-guys มีเกณฑ์อะไรบ้างในการเลือกภาษานี้ (ฉันเดาว่า Java จะไม่เป็นทางเลือกที่ดีถ้าเปิดออกอย่างรวดเร็วตัวเก็บรวบรวมขยะ)

14
อะไรทำให้เกิดความนิยมของฟังก์ชั่นแลมบ์ดาในภาษาโปรแกรมกระแสหลักที่ทันสมัย?
ในไม่กี่ปีที่ผ่านมาฟังก์ชั่นนิรนาม (ฟังก์ชั่น AKA แลมบ์ดา) ได้กลายเป็นภาษาที่ได้รับความนิยมอย่างมากและเกือบทุกภาษาหลัก / การเขียนโปรแกรมหลักได้แนะนำพวกเขาหรือมีการวางแผนที่จะแนะนำพวกเขาในการแก้ไขมาตรฐาน แต่ฟังก์ชั่นนิรนามเป็นแนวคิดที่เก่าแก่และเป็นที่รู้จักมากในด้านคณิตศาสตร์และวิทยาการคอมพิวเตอร์ (คิดค้นโดยนักคณิตศาสตร์ Alonzo Church รอบปี 1936 และใช้โดยภาษาการเขียนโปรแกรม Lisp มาตั้งแต่ปี 1958 ดูที่นี่ ) เหตุใดจึงไม่มีภาษาโปรแกรมหลักในปัจจุบัน (หลายภาษาซึ่งมีต้นกำเนิดเมื่อ 15 ถึง 20 ปีก่อน) รองรับฟังก์ชั่นแลมบ์ดาตั้งแต่เริ่มแรกและนำมาใช้ภายหลังเท่านั้น และสิ่งที่กระตุ้นให้เกิดการยอมรับฟังก์ชั่นที่ไม่ระบุชื่อขนาดใหญ่ในไม่กี่ปีที่ผ่านมา? มีเหตุการณ์เฉพาะความต้องการใหม่หรือเทคนิคการเขียนโปรแกรมที่เริ่มปรากฏการณ์นี้หรือไม่? โน๊ตสำคัญ จุดเน้นของคำถามนี้คือการแนะนำฟังก์ชั่นที่ไม่ระบุชื่อในภาษาสมัยใหม่กระแสหลัก (และอาจมีข้อยกเว้นเล็กน้อยภาษาที่ไม่สามารถใช้งานได้) นอกจากนี้โปรดทราบว่าฟังก์ชั่นที่ไม่ระบุชื่อ (บล็อก) มีอยู่ใน Smalltalk ซึ่งไม่ใช่ภาษาที่ใช้งานได้และฟังก์ชั่นที่มีชื่อปกตินั้นมีอยู่ในภาษาขั้นตอนเช่น C และ Pascal เป็นเวลานาน โปรดอย่าทำให้คำตอบของคุณมากเกินไปโดยการพูดถึง "การยอมรับกระบวนทัศน์การทำงานและประโยชน์ของมัน" เพราะนี่ไม่ใช่หัวข้อของคำถาม

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

13
หลายเธรดสามารถทำสิ่งใดที่เธรดเดี่ยวไม่สามารถทำได้? [ปิด]
แม้ว่าเธรดสามารถเพิ่มความเร็วในการเรียกใช้โค้ดได้จริงหรือไม่ ทุกชิ้นส่วนของรหัสสามารถทำได้โดยใช้หัวข้อเดียวหรือมีบางสิ่งที่มีอยู่ที่สามารถทำได้โดยใช้หลายกระทู้?

5
เหตุใดจึงมีการเพิ่มวิธีเริ่มต้นและแบบคงที่ลงในอินเตอร์เฟสใน Java 8 เมื่อเรามีคลาสแบบนามธรรมแล้ว?
ใน Java 8 อินเทอร์เฟซสามารถมีวิธีการใช้งานวิธีการแบบคงที่และวิธีการที่เรียกว่า "เริ่มต้น" (ซึ่งชั้นเรียนการดำเนินการไม่จำเป็นต้องแทนที่) ในมุมมองของฉัน (อาจไร้เดียงสา) ไม่จำเป็นต้องละเมิดส่วนต่อประสานเช่นนี้ การเชื่อมต่อเป็นสัญญาที่คุณต้องปฏิบัติตามเสมอและนี่คือแนวคิดที่เรียบง่ายและบริสุทธิ์ ตอนนี้มันเป็นการผสมผสานของหลายสิ่งหลายอย่าง ในความเห็นของฉัน: วิธีการคงที่ไม่ได้เป็นของอินเตอร์เฟซ พวกมันอยู่ในคลาสยูทิลิตี้ ไม่ควรอนุญาตวิธีการ "เริ่มต้น" ในอินเทอร์เฟซเลย คุณสามารถใช้คลาสนามธรรมสำหรับวัตถุประสงค์นี้ได้เสมอ ในระยะสั้น: ก่อน Java 8: คุณสามารถใช้คลาสนามธรรมและคลาสปกติเพื่อจัดเตรียมเมธอด static และ default บทบาทของอินเตอร์เฟสชัดเจน วิธีการทั้งหมดในอินเทอร์เฟซควรจะ overriden โดยการใช้คลาส คุณไม่สามารถเพิ่มวิธีการใหม่ในอินเทอร์เฟซโดยไม่ต้องปรับเปลี่ยนการใช้งานทั้งหมด แต่นี่เป็นสิ่งที่ดีจริงๆ หลังจาก Java 8: ไม่มีความแตกต่างระหว่างอินเทอร์เฟซและคลาสนามธรรม (นอกเหนือจากมรดกหลายรายการ) ในความเป็นจริงคุณสามารถเลียนแบบคลาสปกติด้วยอินเทอร์เฟซ เมื่อตั้งโปรแกรมการใช้งานโปรแกรมเมอร์อาจลืมแทนที่วิธีการเริ่มต้น มีข้อผิดพลาดในการคอมไพล์ถ้าคลาสพยายามใช้อินเตอร์เฟสสองอินเตอร์เฟสขึ้นไปที่มีเมธอดดีฟอลต์ที่มีลายเซ็นเดียวกัน โดยการเพิ่มวิธีการเริ่มต้นให้กับส่วนติดต่อทุกชั้นใช้งานโดยอัตโนมัติสืบทอดพฤติกรรมนี้ คลาสเหล่านี้บางคลาสอาจไม่ได้รับการออกแบบโดยคำนึงถึงฟังก์ชันการทำงานใหม่และอาจทำให้เกิดปัญหาได้ ตัวอย่างเช่นถ้ามีคนเพิ่มวิธีการเริ่มต้นใหม่default void foo()ให้กับอินเทอร์เฟซIxจากนั้นชั้นเรียนCxดำเนินการIxและมีfooวิธีการส่วนตัวที่มีลายเซ็นเดียวกันจะไม่รวบรวม อะไรคือสาเหตุหลักที่ทำให้เกิดการเปลี่ยนแปลงครั้งใหญ่และพวกเขาจะได้ประโยชน์อะไรบ้าง (ถ้ามี)


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

17
(ทำไม) ฉันควรเรียนรู้ภาษาการเขียนโปรแกรมใหม่หรือไม่ [ปิด]
ฉันค่อนข้างมีความเชี่ยวชาญเกี่ยวกับ Java, C / C ++, JavaScript / jQuery และเหมาะสมกับ Objective-C ฉันค่อนข้างมีประสิทธิภาพด้วยภาษาและกรอบงานที่เกี่ยวข้องเช่นกันและผลิตระบบระดับองค์กร (และขนาดเล็ก) ด้วยความสะดวกสบายที่เพียงพอในขณะที่รักษารหัส 'สะอาด' และบำรุงรักษาได้ (ใช่ฉันสามารถอ่านรหัสของตัวเองหลังจากหก เดือน :) เว้นแต่ได้รับคำสั่งจากแพลตฟอร์ม (iPhone, iPad, ฯลฯ ) หรือโดยองค์กรลูกค้า / การดำเนินการเพียงแค่ "ทำไม" ฉันควรเรียนรู้ภาษาการเขียนโปรแกรมใหม่หรือไม่ แค่เล่น ๆ"? และทำอะไรด้วยความสนุกถ้าฉันจะไม่ทำอะไรที่คุ้มค่ากับมัน? เพื่อนของฉันหลายคนพร้อมที่จะดำน้ำเพื่อเรียนรู้ "สิ่งใหม่ / ภาษาใหม่" และโดยทั่วไปแล้วก็คือ Python, Ruby หรือ PHP (เพียงตั้งชื่อชื่อที่นิยมไม่กี่คน) ตอนนี้เพียงแค่รู้ภาษาด้วยตัวเอง IMHO ไร้ประโยชน์ คุณต้องรู้กรอบการเรียนรู้การใช้งาน / API รวมถึง 'แนวทางปฏิบัติที่ดี' …

3
เหตุใดภาษาการเขียนโปรแกรมโดยเฉพาะ C ใช้วงเล็บปีกกาและไม่ใช่รูปสี่เหลี่ยมจัตุรัส
คำจำกัดความของ "ภาษา C-Style" สามารถทำให้ง่ายลงได้ถึง "ใช้วงเล็บปีกกา ( {})" ทำไมเราถึงใช้ตัวละครนั้น (และทำไมบางอย่างไม่สมเหตุสมผลมากกว่าอย่างเช่น[]ซึ่งไม่ต้องการปุ่ม Shift อย่างน้อยในคีย์บอร์ดของสหรัฐอเมริกา) มีประโยชน์จริงใด ๆ ต่อผลผลิตของโปรแกรมเมอร์ที่มาจากเครื่องหมายปีกกาหรือนักออกแบบภาษาใหม่ควรมองหาทางเลือกอื่น (เช่นคนที่อยู่เบื้องหลัง Python) Wikipediaบอกเราว่า C ใช้เครื่องหมายปีกกาดังกล่าว แต่ไม่ใช่เพราะอะไร คำแถลงในบทความ Wikipedia ในรายการภาษาโปรแกรม C-basedแสดงให้เห็นว่าองค์ประกอบไวยากรณ์นี้ค่อนข้างพิเศษ: ในวงกว้างการพูดภาษาตระกูล C เป็นภาษาที่ใช้ไวยากรณ์บล็อกแบบคล้าย C (รวมถึงเครื่องหมายปีกกาเพื่อเริ่มและจบบล็อก) ...

14
ภาษาการเขียนโปรแกรม C ยังคงใช้อยู่หรือไม่?
ฉันเป็นโปรแกรมเมอร์ C # และการพัฒนาส่วนใหญ่ของฉันสำหรับเว็บไซต์พร้อมกับแอปพลิเคชัน Windows บางตัว เท่าที่ C ไปฉันไม่ได้ใช้มันในเวลานานเนื่องจากไม่จำเป็นต้องทำ มันทำให้ฉันประหลาดใจเมื่อเพื่อนของฉันคนหนึ่งบอกว่าเธอต้องการเรียนรู้ C เพื่อทดสอบงานในขณะที่ฉันกำลังช่วยเธอเรียนรู้ C # ฉันคิดว่าใครบางคนจะเรียนรู้เฉพาะ C เพื่อทดสอบว่ามีการพัฒนาใน C หรือไม่จากความรู้ของฉันการพัฒนาทั้งหมดที่เกี่ยวข้องกับ COM และการออกแบบฮาร์ดแวร์ก็ทำใน C ++ เช่นกัน ดังนั้นการเรียนรู้ C จึงไม่สมเหตุสมผลถ้าคุณจำเป็นต้องใช้ C ++ ฉันไม่เชื่อในความสำคัญทางประวัติศาสตร์ด้วยเหตุใดจึงต้องเสียเวลาและเงินในการเรียนรู้ C C ยังคงใช้ในการพัฒนาซอฟต์แวร์ใหม่หรือสิ่งอื่นใดอีกหรือไม่?

16
เหตุใดผู้ประกอบการที่ผู้ใช้กำหนดเองจึงไม่ได้พบเห็นได้บ่อยนัก
ฟีเจอร์หนึ่งที่ฉันพลาดจากภาษาที่ใช้งานได้คือความคิดที่ว่าโอเปอเรเตอร์เป็นแค่ฟังก์ชั่นดังนั้นการเพิ่มโอเปอเรเตอร์ที่กำหนดเองมักจะง่ายเหมือนการเพิ่มฟังก์ชั่น ภาษาเชิงโพรซีเดอร์จำนวนมากอนุญาตให้โอเปอเรเตอร์โอเวอร์โหลดดังนั้นในบางโอเปอเรเตอร์จะยังคงใช้งานได้ (นี่เป็นความจริงในDที่โอเปอเรเตอร์ถูกส่งเป็นสตริงในพารามิเตอร์เทมเพลต) ดูเหมือนว่าที่อนุญาตให้ผู้ประกอบการมากเกินไปก็มักจะเล็กน้อยเพื่อเพิ่มผู้ประกอบการที่กำหนดเองเพิ่มเติม ฉันพบโพสต์บล็อกนี้ซึ่งระบุว่าตัวดำเนินการที่กำหนดเองไม่ได้ทำงานได้ดีกับสัญกรณ์ของ infix เนื่องจากกฎที่มีมาก่อน แต่ผู้เขียนให้วิธีการแก้ไขปัญหาหลายประการ ฉันมองไปรอบ ๆ และไม่พบภาษาที่ใช้ในการดำเนินการใด ๆ ที่รองรับตัวดำเนินการที่กำหนดเองในภาษานั้น มีแฮ็ก (เช่นมาโครใน C ++) แต่แทบจะไม่เหมือนกับภาษาที่รองรับ เนื่องจากคุณสมบัตินี้ค่อนข้างง่ายต่อการนำไปใช้ทำไมจึงไม่เป็นเรื่องปกติ ฉันเข้าใจว่ามันอาจนำไปสู่โค้ดที่น่าเกลียด แต่ที่ไม่ได้หยุดนักออกแบบภาษาในอดีตจากการเพิ่มคุณสมบัติที่มีประโยชน์ที่สามารถถูกทำร้ายได้ง่าย (มาโครผู้ประกอบการที่ประกอบไปด้วยตัวชี้ที่ไม่ปลอดภัย) กรณีการใช้งานจริง: ใช้โอเปอเรเตอร์ที่หายไป (เช่น Lua ไม่มีโอเปอเรเตอร์ bitwise) Mimic D's ~(การต่อข้อมูลอาร์เรย์) DSLs ใช้|เป็นไวยากรณ์น้ำตาลแบบ Unix pipe (ใช้ coroutines / generators) ฉันมีความสนใจในภาษาที่ทำให้ผู้ประกอบการที่กำหนดเอง แต่ฉันสนใจมากขึ้นในเหตุผลที่จะได้รับการยกเว้น ฉันคิดถึงการใช้ภาษาสคริปต์เพื่อเพิ่มโอเปอเรเตอร์ที่ผู้ใช้กำหนด แต่หยุดตัวเองเมื่อฉันรู้ว่าฉันไม่เห็นมันเลยดังนั้นอาจมีเหตุผลที่ดีที่นักออกแบบภาษาฉลาดกว่าที่ฉันไม่อนุญาต

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

15
อะไรทำให้ C เป็นที่นิยมในยุคของ OOP [ปิด]
ฉันเขียนโค้ดจำนวนมากทั้งใน C และ C ++ แต่ไม่ได้คาดหวังว่า C จะเป็นภาษาที่ได้รับความนิยมอันดับสองรองจาก Java เล็กน้อย ดัชนีชุมชนการเขียนโปรแกรม TIOBE ฉันอยากรู้ว่าทำไมในยุค OOP นี้ C ยังคงเป็นที่นิยม? โปรดทราบว่าภาษาการเขียนโปรแกรมยอดนิยม 4 จาก 5 อันดับแรกคือภาษา "ทันสมัย" ซึ่งเป็นภาษาเชิงวัตถุ ตอนนี้ฉันยอมรับว่าคุณสามารถใช้ OOP ใน C ได้บ้าง แต่มันค่อนข้างเจ็บปวดและไม่เหมาะสม (อย่างน้อยก็เมื่อเทียบกับ C ++ ฉันเดา) ดังนั้นอะไรที่ทำให้ C เป็นที่นิยม มันมีประสิทธิภาพหรือไม่ เป็นระดับต่ำ ห้องสมุดส่วนใหญ่ที่มีอยู่แล้วหรืออย่างอื่น?

8
วิธีแก้ไขผลลัพธ์ของโปรแกรมที่คุณไม่มีซอร์สโค้ด
ใน บริษัท ของเราเรามีโปรแกรมขนาดเล็ก (.exe ขนาด 500Kb) ที่ใช้ในการคำนวณทางคณิตศาสตร์และในที่สุดมันจะแยกผลลัพธ์ออกเป็นสเปรดชีต Excel ที่เราใช้เพื่อดำเนินงานต่อไป ฉันต้องการแก้ไขคอลัมน์รูปแบบระยะห่างและเพิ่มตรรกะ VBA เป็นต้นในสเปรดชีต Excel แต่เนื่องจากพารามิเตอร์นี้ไม่สามารถกำหนดค่าได้ในโปรแกรมนั้นฉันคิดว่าวิธีเดียวที่จะแก้ไขได้คือการแยก / ย้อนกลับวิศวกร. exe ไม่มีใครรู้ในภาษาที่ตั้งโปรแกรมสิ่งเดียวที่เรารู้คือ: พัฒนามานานกว่า 20 ปีแล้ว นักพัฒนาเกษียณเมื่อ 10 ปีที่แล้ว แอปพลิเคชัน GUI รันแบบสแตนด์อโลน ขนาด 500Kb คำแนะนำใด ๆ ที่ตัวเลือกฉันต้องจัดการกับปัญหาดังกล่าว? วิศวกรรมย้อนกลับเป็นทางเลือกเดียวหรือมีแนวทางที่ดีกว่า

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