วิศวกรซอฟต์แวร์จำเป็นต้องรู้ในสิ่งที่ต่ำอีกต่อไปหรือไม่? [ปิด]


23

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

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


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

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


1
"ประสิทธิภาพระหว่าง C / C ++ และ Java จะไม่สำคัญ" หากสิ่งนี้เกิดขึ้นเร็ว ๆ นี้โปรดส่ง PM เพื่อแก้ไขทักษะ Java ของฉัน ฉันหยุดใช้ Java เมื่อหลายปีก่อนด้วยเหตุผลเหล่านั้น
sakisk

3
รหัส C / C ++ ส่วนใหญ่ไม่สามารถเข้าถึงฮาร์ดแวร์ได้ มันทำให้ง่าย แต่มักจะถูกซ่อนไว้โดยไดรเวอร์อุปกรณ์ ฉันยังอยากจะบอกว่ารหัส 95% + ของ C หรือ C ++ ไม่เคยมีปฏิสัมพันธ์กับฮาร์ดแวร์โดยตรง
Pemdas

1
ฉันขอแนะนำให้เปลี่ยนชื่อเป็นภาษาระดับต่ำ มีสิ่งต่าง ๆ ในระดับต่ำ (เธรดทำงานอย่างไร .. ระบบปฏิบัติการของคุณทำงานอย่างไร .. เป็นต้นไป) ซึ่งยังคงมีค่าแม้ว่าการรู้ว่า C ++ หรือแอสเซมบลีอาจไม่ได้
ShaneC

2
@faif สำหรับแอปพลิเคชันที่รันเป็นเวลานานแอพ Java สามารถก้าวต่อไปด้วยแอป C / C ++ หลังจาก Java ได้ทำการอุ่นเครื่องแล้ว นั่นเป็นเพราะเทคโนโลยีฮอตสปอตทำการคอมไพล์โค้ด Java เป็นโค้ดเนทีฟเมื่อเวลาผ่านไป อย่างไรก็ตามสำหรับแอปพลิเคชั่นที่ทำงานสั้น ๆ เวลาเริ่มต้นของ Java ยังคงน่ากลัว ในบางจุดโดยเฉพาะอย่างยิ่งสำหรับแอปเซิร์ฟเวอร์การสื่อสารเป็นปัญหาคอขวดของคุณมากกว่าการประมวลผลจริง
Berin Loritsch

1
@BerinLoritsch Java ค่อนข้างเร็วใช่ แต่โอเวอร์เฮดหน่วยความจำโอเวอร์เฮดไลบรารีรันไทม์การเข้าถึงฮาร์ดแวร์ระดับต่ำและการกำหนดค่าล่วงหน้าของ VM ก่อนเรียกใช้ (เพื่อให้บรรลุข้อ จำกัด ฮีปที่แตกต่างกัน) เป็นสิ่งที่แย่มากเมื่อเทียบกับ เพียงโปรแกรมระดับต่ำที่ทำงานบนระบบปฏิบัติการ มันไม่ได้เกี่ยวกับการใช้คำสั่งในลำดับความสำคัญเท่ากัน

คำตอบ:


18

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

ประเด็นสำคัญในการเตรียมการตอบคำถาม:

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

  • ชุดประกอบ C และ C ++ อยู่ไกลจาก "ระดับต่ำ" เท่า ๆ กัน ฉันคิดว่าคุณถูกต้องในการเชื่อมโยงภาษาแอสเซมบลีและภาษา C กับนักพัฒนาฮาร์ดแวร์ / เฟิร์มแวร์ / ไดรเวอร์ แต่โดยทั่วไปแล้ว C + + จะใช้ในระดับที่สูงกว่าและยังใช้งานหนัก - แม้ว่า C # / Java จะชัดเจน ดัชนี.

  • ในระดับ C ++ ฉันจะเพิ่ม Objective-C เนื่องจากคล้ายกับ C ++ มากกว่า C # / Java ในที่สุดฉันก็ทราบว่าด้วยการเพิ่ม shared_ptr <> และคุณสมบัติการจัดการทรัพยากรอัตโนมัติอื่น ๆ ภาษาเหล่านี้มีการสนับสนุนสิ่งที่ใกล้กับการรวบรวมขยะ

ตกลงกับคำถามหลักของคุณ: วิศวกรซอฟต์แวร์จำเป็นต้องรู้สิ่งระดับต่ำอีกต่อไปหรือไม่?

คำตอบของฉัน: ใช่

เหตุผล:

  • แม้ว่าจะใช้ C # / Java คุณก็จะพบกับเอนทิตีของเฟรมเวิร์กที่ต้องการการจัดการทรัพยากรอย่างชัดเจนและ / หรือพบปัญหาในกราฟหน่วยความจำ "ปักหมุด" บนแอปพลิเคชันที่ไม่สำคัญ คุณต้องเข้าใจว่าระบบเหล่านี้ทำงานอย่างไรเพื่อหลีกเลี่ยงและแก้ไขปัญหาเหล่านี้อย่างมีประสิทธิภาพ
  • แพลตฟอร์มมือถือมีทรัพยากรที่ จำกัด มากขึ้นและถึงแม้ว่าจะมีการรองรับ Java และ. NET ในบางรุ่นแต่ทว่าการปกครองในปัจจุบันของ iOS และ Objective-C เป็นการแนะนำให้มีการต่ออายุแบบสดๆ
  • ประสิทธิภาพการทำงาน: ทุกครั้งที่คุณพุ่งชนกำแพงคุณอาจต้องวางโค้ดที่คอมไพล์แล้วเพื่อรับรอบ
  • การสนับสนุนแบบดั้งเดิม: ทุกครั้งที่คุณต้องทำงานร่วมกันเพื่อเข้าถึงคุณลักษณะที่ยังไม่ได้เปิดใช้งาน (ใน) รหัสที่ได้รับการจัดการคุณจะต้องทำเช่นเดียวกัน

คำถามที่ดี - แต่ฉันไม่เห็นภาษาที่ไม่มีการจัดการกำลังจะหายไปในระยะเวลาอันใกล้


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

1
การมีความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับสิ่งที่เกิดขึ้นในระดับที่ต่ำกว่าจะช่วยแจ้งการตัดสินใจของคุณ
dietbuddha

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

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

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

ที่ถูกกล่าวว่าเราต้องการนักพัฒนา C # / Java / Ruby มากกว่าที่เราทำนักพัฒนา Assemby / C สำหรับเรานักพัฒนา "ระดับสูง" การทำความเข้าใจเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้น "ภายใต้ประทุน" เป็นประโยชน์และจะทำให้เราพัฒนาได้ดีขึ้น แต่ก็มีอีกหลายอย่าง ในฐานะนักพัฒนา. NET สำหรับ exmaple มีอะไรมากมายที่ฉันสามารถเรียนรู้ที่จะทำให้ฉันมีประสิทธิผลมากขึ้นเรียนภาษาระดับกลางของเรา(C ++ / C / Assmebly น้อยกว่า) แต่มีประโยชน์มากมักจะต้องใช้เบาะหลัง


7

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

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


3

ฉันไม่คิดอย่างนั้นผู้พัฒนาเคอร์เนลจะต้องการสิ่งระดับต่ำเสมอ นอกจากนี้ยังไม่เจ็บที่จะเข้าใจว่าทุกอย่างทำงานอย่างไรถ้าคุณเข้าใจพื้นฐานว่าโค้ดที่คุณกำลังเขียนคืออะไรคุณจะได้เรียนรู้การเขียนโค้ดที่ดีขึ้น ฉันคิดว่าการลบสิ่งที่มีระดับต่ำเป็นความคิดที่น่ากลัวเพราะการคิดเชิงนามธรรมนี้มีประโยชน์ในบางครั้ง แต่จริงๆแล้วอาจเป็นอุปสรรคหากคุณต้องการให้ปัญหาแก้ไขในวิธีที่ดีที่สุด ตัวอย่างเช่นการเข้าใจว่าเมื่อคุณเชื่อมสตริงเข้าด้วยกันคุณกำลังสร้างสตริงใหม่นั้นมีความสำคัญ แต่ถ้าคุณไม่เข้าใจว่ามีการใช้สตริงอย่างไรคุณอาจเชื่อมต่อสตริงและรอ 5 นาทีโปรแกรมของคุณจะทำงาน นี่คือบทความที่ยอดเยี่ยมเกี่ยวกับสิ่งต่าง ๆ เช่น: http://www.joelonsoftware.com/articles/fog0000000319.html


3

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

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

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


2

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

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

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

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


@ Adam Tuliper "ระบบปฏิบัติการที่เขียนทั้งหมดในชุดประกอบ" น่าสนใจ คุณให้ชื่อระบบปฏิบัติการกับฉันได้ไหม คุณได้จุดที่ดีเกี่ยวกับการแก้ไขปัญหา
Amumu

@ อดัม: "OS" แบบแอสเซมบลีเท่านั้นอาจไม่มีระฆังและนกหวีดมากมาย (เช่น GUI ภาพเคลื่อนไหวแฟนซีและโปรแกรมระบายสี) แต่มันอาจจะสามารถรันกระบวนการโหมดผู้ใช้หนึ่งหรือสอง ...
Macke

@Macke: คุณล้อเล่นใช่มั้ย มีการเขียนระบบปฏิบัติการมัลติทาสกิ้งเพิ่มเติมในภาษาแอสเซมบลีมากกว่าที่เขียนในซีระบบปฏิบัติการที่โคลน NT (เคอร์เนล Windows) ถูกเขียนในภาษาแอสเซมบลีแมโคร -32 เป็นหลัก
bit-twiddler

1
@ bit-twiddler: คุณแน่ใจเหรอ? ส่วนใหญ่ของแหล่งที่มาที่ผมเห็นอยู่ใน BLISS ...
TMN

@TMN: BLISS ใช้สำหรับระบบปฏิบัติการระดับสูงเท่านั้น เคอร์เนล VMS ทั้งหมดถูกเขียนใน Macro-32 ฉันเก็บรายชื่อของรหัสการประมวลผลระดับส้อมเป็นเวลาหลายปีเพราะฉันคิดว่ามันเป็นความคิดที่ยอดเยี่ยม การประมวลผลแยกระดับเป็นกลไกที่ตัวจัดการขัดจังหวะสามารถกำหนดเวลาส่วนที่ไม่สำคัญของรหัสให้ทำงานในระดับความสำคัญขัดจังหวะที่ต่ำกว่า การประมวลผลแยกระดับถูกเปลี่ยนชื่อเป็น Deferred Procedure Calls ในเคอร์เนล NT
bit-twiddler

2

ฉันคิดว่าการรู้บางสิ่งในระดับต่ำมีประโยชน์มากสำหรับการดีบักตัวอย่างเช่นกับการเขียนโปรแกรมแบบฝังตัวส่วนใหญ่ทำด้วย C อย่างไรก็ตามเมื่อการดีบั๊กการรู้แอสเซมบลีสำหรับคอนโทรลเลอร์ไมโครคอนโทรลเลอร์นั้นนั้นมีประโยชน์อย่างมาก


ตกลง. ฉันทำโปรแกรมสมองกลฝังตัวเป็นเวลา 30 ปีและในขณะที่ฉันไม่คิดว่าจะต้องเขียนรหัสแอสเซมบลีอีกต่อไป (ทุกอย่างอยู่ใน C) ฉันมักจะผ่านโปรแกรมการสอนตามคำแนะนำ
tcrosley

Heck ฉันมักจะดีบักรหัส C และ C ++ ในโหมด CPU บน Windows ความรู้เกี่ยวกับสถาปัตยกรรมและชุดคำสั่งสำหรับตัวประมวลผลรวมถึงการจัดระเบียบรันไทม์ของคอมไพเลอร์ที่ใช้งานเป็นชุดทักษะที่ทรงพลังที่มีอยู่ในกระเป๋า โปรดดูคำถามต่อไปนี้ programmers.stackexchange.com ที่ฉันให้รายละเอียดรหัสที่สร้าง GCC: programmers.stackexchange.com/questions/59880/…
bit-twiddler

2

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

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

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


0

อืมฉันสนุกกับการเรียนรู้สิ่งต่าง ๆ ในระดับต่ำจริง ๆ

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

อาจไม่ได้มีประโยชน์มาก (ฉันจะไม่สามารถซ่อมรถยนต์ด้วยการรู้ทั้งหมดนี้) ไม่แน่นอนในทางปฏิบัติอย่างมืออาชีพ แต่ก็สนุกดี L'art pour l'art: la connaissance เทลา connaissance


0

ฉันคิดว่ากฎง่าย ๆ ที่มีประโยชน์คือยิ่งต้องเร็วเท่าไหร่คุณก็ต้องได้ระดับที่ต่ำกว่า

ดังนั้นนักแม่นปืนคนแรกของคุณที่มีกราฟิคเข้มข้นหรือระบบซื้อขาย FX แบบอัลกอริธึมของพวกเขาพวกมันยังค่อนข้างต่ำ (C ++ ฯลฯ ) เพราะความเร็วเป็นกุญแจสำคัญ แต่แอปพลิเคชันเว็บที่กระจายรายงานการขายตรงเวลา นรกคุณสามารถเขียนมันใน Sinclair BASIC และมันก็ยังคงเป็นที่ยอมรับ


1
-1: ฉันคิดว่ากฎง่าย ๆ ที่มีประโยชน์คือยิ่งเร็วเท่าไรคุณก็ต้องได้ระดับที่ต่ำกว่า - แค่อยากรู้อยากเห็นคุณอายุเท่าไหร่? อัลกอริธึมที่ดีกว่าสถาปัตยกรรมที่ดีขึ้นและฮาร์ดแวร์ที่ดีขึ้นจะช่วยเร่งแอปพลิเคชันซอฟต์แวร์ที่ทันสมัยที่สุด เกมคอมพิวเตอร์และระบบฝังตัวเป็นข้อยกเว้นสำหรับกฎนี้
Jim G.

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

0

ไม่ทุกงานวิศวกรรมซอฟต์แวร์จะเหมือนกัน คนที่ทำงานเกี่ยวกับระบบปฏิบัติการคอมไพเลอร์เฟรมเวิร์กไดรเวอร์อุปกรณ์ระบบฝังตัวและการคำนวณทางวิทยาศาสตร์ที่มีประสิทธิภาพสูงจำเป็นต้องรู้ว่า 'สิ่งระดับต่ำ' ผู้เขียนแบบฟอร์ม Access CRUD หรือตะกร้าสินค้า PHP สำหรับร้านค้า Mom และ Pop อาจจะไม่มากนัก คุณต้องการทำวิศวกรรมซอฟต์แวร์ประเภทใดและคุณต้องการใช้เวลาที่เหลือในชีวิตของคุณหรือไม่

ความคิดเห็นของฉันคือคุณต้องเรียนรู้สิ่งที่เป็นนามธรรมอย่างน้อยหนึ่งระดับต่ำกว่าระดับที่คุณมักจะทำงานถ้าคุณทำงานใน C / C ++ คุณควรเลือกสถาปัตยกรรมของเครื่องและชุดประกอบ ถ้าคุณทำงานใน PHP คุณควรเข้าใจ HTTP และ C / C ++ หรือ Perl เล็กน้อย ถ้า Access เป็นขนมปังและเนยของคุณคุณควรจะรู้ทฤษฎี RDB บ้างและอาจจะเกี่ยวกับ COM หรือ. NET เล็กน้อย บางครั้งในอาชีพการงานของคุณคุณจะต้องหยุดชะงักในการติดตามโดยมีปัญหาในระดับที่ต่ำกว่าของนามธรรมและคุณจะต้องสามารถสื่อสารอย่างน้อยกับคนที่เป็นผู้เชี่ยวชาญในพื้นที่นั้น คุณสามารถ 'ได้รับ' โดยไม่มีสิ่งนี้? แน่นอนว่าการวางแผนที่จะ 'ได้รับ' ในตลาดงานที่มีการแข่งขันนั้นเป็นสิ่งที่อันตราย


-1

ตัวฉันเองทำงานอย่างกว้างขวางใน C # .NET และมักจะนำออกจาก C, C ++ เมื่อไม่นานมานี้เริ่มมองหางานและรู้สึกประหลาดใจที่เห็นว่ามีงานว่างจำนวนเท่าใดและต้องการประสบการณ์สำหรับ C, C ++ ฉันเริ่มแรกแม้ว่า C, C ++ จะล้าสมัย แต่การดูงานที่มีอยู่มันดูไม่เหมือนอย่างนั้น


-1

ภาษาที่มีการจัดการทั้งหมดที่คุณอยู่ในรายการมีล่ามหรือเครื่องเสมือนที่เขียนด้วยภาษา C / C ++ ภาษาที่มีการจัดการหรือตีความส่วนใหญ่จะไม่มีอยู่จริง ฉันจะบอกว่าคุณประเมินค่าต่ำเกินไป


-1

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

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


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

@ แอนนาเลียร์ปัญหาคือไม่มีใครสามารถใช้ทักษะ "ภาคปฏิบัติ" ที่สามารถนำไปใช้ได้โดยตรงโดยไม่ต้องมีการ "ครอบคลุม" เพียงเพราะความรู้ทั้งหมดในโลกนี้มีการเชื่อมโยงอย่างแน่นหนา ไม่มีความรู้ที่สามารถ "เสียเวลา" ไม่ว่ามันจะเป็นไปได้จากการฝึกฝนใด ๆ
SK-logic

1
-1: ทุกสิ่งที่คุณเรียนรู้นั้นมีประโยชน์อย่างเท่าเทียมกัน - ว้าว. บางทีฉันควรจำคำตอบสำหรับการ์ดคำถาม 'Trivial Pursuit' ทั้งหมดของฉัน! ;)
Jim G.

@ จิมจี, ใช่คุณควรตราบเท่าที่คุณมีเวลาว่างพอและมันจะไม่เสียค่าใช้จ่ายหากไม่ได้เรียนรู้บางสิ่งที่จะทำให้คุณก้าวหน้ากว่านี้ การจดจำสิ่งที่ "ไร้ประโยชน์" ในความเป็นจริงเป็นวิธีที่แข็งแกร่งมากในการปรับปรุงหน่วยความจำของคุณ
SK-logic

-1

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


-1

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

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

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

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

อันที่จริงแล้ววิศวกรซอฟต์แวร์จำเป็นต้องเรียนรู้และมีประสบการณ์ในระดับต่ำ ... :)

ในขณะที่ผู้พัฒนามันขึ้นอยู่กับความสนใจของเขา :)


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