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


15

อ้างอิงจาก Wikipedia ของบทความ "ภาษาการเขียนโปรแกรมระดับสูง":

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

เช่นเมื่อระดับของภาษาการเขียนโปรแกรมเพิ่มขึ้นโปรแกรมเมอร์ก็จะออกไปจากฮาร์ดแวร์ที่โปรแกรมรันอยู่

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

คำตอบ:


16

สามารถทำได้แต่มีแนวโน้มว่าจะไม่นำไปสู่ปัญหา

มันเป็นแค่เศรษฐศาสตร์ หากคนส่วนใหญ่สูญเสียความสามารถในการเข้าใจสถาปัตยกรรมพื้นฐานและยังคงมีความต้องการอย่างมากที่จะเข้าใจสถาปัตยกรรมพื้นฐานแล้วคนที่ทำงานจะมีงานทำและได้รับค่าจ้างมากขึ้นในขณะที่คนที่ไม่เพียงจะมี งานที่ไม่จำเป็น (และยังอาจได้รับเงินมากขึ้น ... ใครจะรู้?)

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


4
แต่ abstractions ทั้งหมดจะรั่วไหล การรู้สถาปัตยกรรมพื้นฐานเป็นสิ่งจำเป็นหากคุณต้องการเป็นคนที่แต่งตัวประหลาดสำหรับการแก้ไขปัญหานามธรรมที่รั่วไหล
dsimcha

5
@dsimcha เห็นด้วย แต่เป็นคนที่แต่งตัวประหลาดที่คุณต้องการ "คนอื่น" ที่จะมาหาคุณ ;-) หากทุกคนจำเป็นต้องรู้ทุกอย่างสิ่งที่เป็นนามธรรมล้มเหลวอย่างน่าสังเวช
ล่วงหน้า

1
@ Preet และนั่นเป็นเหตุผลว่าทำไม abstractions จำนวนมากจึงล้มเหลวอย่างน่าสังเวช การที่จะมีที่ว่างสำหรับคนที่แต่งตัวประหลาดที่มีอยู่ก็เป็นข้อพิสูจน์ว่าสิ่งที่เป็นนามธรรมนั้นล้มเหลวไปแล้ว
Pacerier

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

3
@Pacerier google มีทรัพยากรที่ไม่สิ้นสุดและทำให้แอปพลิเคชันที่มีขนาดของคำสั่งมีความซับซ้อนมากขึ้นและประกอบด้วยคำสั่งที่มีขนาดของรหัสบรรทัดมากกว่าโค้ดอื่น ๆ อ้างว่าทุกคนควรรู้เรื่องคอมพิวเตอร์ระดับต่ำเพราะนามธรรมทั้งหมดสามารถรั่วไหลได้เหมือนบอกทุกคนควรรู้วิธีการสร้างบ้านจากศูนย์โดยใช้เครื่องมือไม่เพราะพายุอาจมาและฉีกขาดบ้านของพวกเขา มันเป็นไปไม่ได้ (หรือฉลาด) ในการใช้ทรัพยากรเช่นนั้น
sara

9

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

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

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

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


5
ฉันได้ยินมาว่ามันเป็น "คุณจำเป็นต้องรู้สิ่งที่เป็นนามธรรมหนึ่งชั้นจากที่คุณทำงาน" มันค่อนข้างเปราะบาง ความทรงจำของฉันมีข้อบกพร่อง ดังนั้นถ้าคุณกำลังทำงานใน C หรือ Delphi คุณควรรู้ว่าชุดประกอบทำงานอย่างไร หากคุณทำงานใน Smalltalk หรือ Java คุณควรรู้ว่า VM ทำงานอย่างไร (เบบี้คุณควรเสมอรู้ว่าบางสิ่งบางอย่างเกี่ยวกับการชุมนุม!) ถ้าคุณกำลังทำงานกับ TCP ที่คุณควรรู้วิธีการทำงานของ IP และอื่น ๆ
Frank Shearar

1
ฉันหมายความว่าคุณจะเอามันไปให้ไกลกว่านี้: ทำไมมันถึงดีพอที่จะรู้ว่าการชุมนุม? นั่นเป็นเพียงสิ่งที่เป็นนามธรรมในระดับสูงที่ถือครองคำสั่งไบนารี CPU แต่เดี๋ยวก่อน! รหัสเครื่อง? นั่นเป็นเพียงนามธรรม! คุณต้องเรียนรู้วิธีการสร้าง CPU โดยใช้ทรานซิสเตอร์เพื่อสร้างประตูตรรกะ! และรถบัสและทะเบียน แต่เดี๋ยวก่อน! ทรานซิสเตอร์? นั่นเป็นเพียงนามธรรมสำหรับการกำหนดค่าบางอย่างของอะตอม และอะตอมเป็นเพียงนามธรรมเหนือความผันผวนในทุ่งควอนตัม ในท้ายที่สุดสิ่งนี้ทำให้javascript:alert("Hello world")ต้องมีปริญญาเอกในทฤษฎีสตริง
sara

1
@kai คุณกำลังถูกบิตไร้สาระ ฉันมักจะเห็นด้วยกับคุณว่ามันเป็นไม่ได้มักจะเป็นกรณีที่คุณต้องเข้าใจหลายชั้นลงมากที่สุดในการใช้งาน แต่เรากำลังพูดถึงกรณีขอบไม่ใช่สิ่งที่ทุกวัน แน่นอนคุณไม่จำเป็นต้องรู้ว่าระบบประปาทำงานได้อย่างไร แต่ถ้าน้ำสกปรกเริ่มเติมอ่างล้างจานของคุณคุณควรเรียนรู้เล็กน้อยก่อนที่จะลองแก้ไข หรือคุณสามารถทุบเหล็กเส้นลงไปตามทางจนสามารถใช้งานได้อีกครั้งและใครจะไปสนใจน้ำ (ต่อ ... )
DrewJordan

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

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

5

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


2
ในทางทฤษฎีใช่ แต่ผู้ที่มีคู่ของใหญ่สวยไอเอฟเอ
Mason Wheeler

1

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

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

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

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

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