มันเป็นการฉลาดสำหรับนักพัฒนาระดับสูงที่จะใช้เวลาศึกษาประกอบหรือไม่? [ปิด]


33

เป็นที่ชัดเจนว่าความรู้เกี่ยวกับสิ่งต่าง ๆ ในระดับต่ำมีความสำคัญมากในการทำงานของเรา

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

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


มีคำถามมากมายในหนึ่งโพสต์ :)
Shamim Hafiz

ฉันชอบภาษาแอสเซมบลีทีละขั้นตอน ตอนแรกการเขียนโปรแกรมสิ่งที่ noobie-ish จำนวนมาก แต่ผู้เขียนมีความบันเทิงมาก ฉันคิดว่าการมีความคิดทั่วไปนั้นมีประโยชน์และฉันเขียน JavaScript เป็นหลัก
Erik Reppen

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

คำตอบ:


43

ไม่อยากเชื่อเลยว่าไม่มีใครพูดถึงการดีบัก ...

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

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

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


10
+1 และฉันจะลงคะแนนมากกว่านี้ถ้าทำได้ นักพัฒนาที่จริงจังทุกคนต้องสามารถอ่าน ASM ได้หากไม่มีเหตุผลอื่น
Mason Wheeler

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

3
+1 แอสเซมบลีเป็นหนึ่งในภาษาเดียวที่บังคับให้คุณเข้าใจวิธีการทำงานของโปรเซสเซอร์ มันช่วยคุณในการพัฒนาด้วยภาษาระดับสูง ต้องอ่าน: blogs.msdn.com/b/ericlippert/archive/2010/09/30/…

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

1
@ ช่างก่ออิฐ: ฉันไม่รู้ว่า "นักพัฒนาที่จริงจังทุกคน" จำเป็นต้องอ่าน ASM หรือไม่ หากคุณกำลังเขียน JavaScript หรือใช้ภาษาการเขียนโปรแกรมที่สร้างขึ้นบนเฟรมเวิร์กที่หนา (เช่น. NET หรือ Java) ฉันไม่คิดว่าจะสามารถอ่าน ASM ว่าจำเป็นต่อการเป็นนักพัฒนาที่จริงจัง ดังที่กล่าวมาแล้วการมีความเข้าใจว่าคอมพิวเตอร์ดำเนินการคำสั่งในระดับต่ำมากจะมีประโยชน์มากแม้ในภาษาโปรแกรมและสภาพแวดล้อมในการเขียนโปรแกรมที่สูงขึ้น
Scott Mitchell

15

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

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


1
ฉันที่สอง คุณสามารถรับโปรแกรมการใช้ชีวิตที่ดีและไม่ต้องอ่าน / เขียน ASM มีบางตำแหน่งที่จำเป็นต้องใช้ การอ่านการถ่ายโอนข้อมูลหลังจากสภาวะการแข่งขันในรหัสของคุณทำให้กระบวนการทำงานล้มเหลว หรือถ้าคุณเขียนโปรแกรมที่เน้นความสมบูรณ์แบบมาก (เช่นการขนานของ GPU / OpenCL) เปอร์เซ็นต์ของงาน dev ที่คุณจะต้องปฏิบัติงานเหล่านี้มีขนาดเล็กมาก
yzorg

11

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

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


8

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

ลองจัดระเบียบและออกแบบคอมพิวเตอร์


1

ใช่ - การเรียนรู้ตลอดชีวิตอย่างต่อเนื่องเป็นองค์ประกอบสำคัญของอาชีพในการพัฒนาซอฟต์แวร์ หากคุณสนใจที่จะเรียนรู้เกี่ยวกับการเขียนโปรแกรมอย่างต่อเนื่องและวิธีการปรับปรุงงานฝีมือของคุณใช่แล้วในบางจุดคุณควรเรียนรู้การประกอบเนื่องจากมันจะทำให้คุณมีภาษาใหม่และวิธีการเขียนโค้ดที่สมบูรณ์ ด้วยเหตุผลเดียวกันฉันขอแนะนำให้ทำการทดสอบกับหลายภาษา / รูปแบบการเขียนโปรแกรมรวมถึง Ruby / Python (ภาษาไดนามิก), Haskell / F # (ภาษาที่ใช้งานได้จริง), Lisp / Scheme (ภาษาที่ใช้งานได้) ฯลฯ ...

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


1

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


1

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

ตอบ:

  1. หากคุณไม่ได้วางแผนที่จะเปลี่ยนทิศทางของคุณไปยังโปรแกรมระบบฝังตัวไม่มีเหตุผลที่จะเรียนรู้การเรียนรู้ แม้คิดว่าการประกอบเป็น CPU ขึ้นอยู่กับคุณอาจเรียนรู้พื้นฐานบางอย่าง แต่ความรู้ของคุณจะขึ้นอยู่กับสถาปัตยกรรมของ CPU และชุดคำสั่งสำหรับ CPU นั้น
  2. สมมติว่าคุณใช้รหัสสำหรับ Windows หากต้องการเรียนรู้ระดับต่ำกว่าภาษาระดับสูงที่อาจเป็นประโยชน์กับคุณในทิศทางปัจจุบันฉันขอแนะนำให้คุณเรียนรู้ Windows I, Windows API ลึก, การจัดการหน่วยความจำของ Windows ฯลฯ เพียงแค่เรียนรู้ OS / แพลตฟอร์มที่คุณกำลังเขียนรหัส
  3. พัฒนาทักษะของคุณในภาษาระดับสูงในปัจจุบันของคุณเช่นการจัดการหน่วยความจำการรวบรวมขยะ ฯลฯ หากคุณต้องการระดับต่ำ

0

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


0

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


0

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

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

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

Maths -> Physics                ->
      -> Chemistry -> Materials -> Hardware Design -> Microcode      -> Assembler
                                                   -> Bus Interfaces -> Peripherals

... Assembler    -> Low Level      -> High Level   ->
... OS / Drivers -> API Level      -> Applications -> User

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

ดังนั้น: คุณจำเป็นต้องรู้แอสเซมเบลอร์เป็น coder ระดับสูงหรือไม่?  มันจะช่วย.


0

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

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

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