การประกอบเป็นภาษาโปรแกรมแรก? [ปิด]


12

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

หมายเหตุ: ฉันไม่ใช่ครูแค่อยากรู้อยากเห็น


5
ฉันคิดว่ามันเหมาะกับคนที่เรียนวิทยาศาสตร์คอมพิวเตอร์มากกว่าไม่ใช่วิศวกรรมซอฟต์แวร์ / การพัฒนา
Imran Omar Bukhsh

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

7
@Imran - ฉันพบว่าน่าแปลกใจเล็กน้อย วิทยาการคอมพิวเตอร์มีความเอนเอียงไปทางคณิตศาสตร์และทฤษฎีมากกว่านี้หรือไม่? สนใจในเซตอัลเบราส์ที่เป็นนามธรรมและสัญกรณ์แบบซีมโทติคมากกว่าในบิตซอและเขียนซ้ำไม่มีที่สิ้นสุดของการย้าย blah-to-blah
Steve314

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

1
โปรแกรมเมอร์ทุกคนควรอ่านอย่างน้อยเกี่ยวกับการทำงานของ IMO มันทำให้ฉันมีความเข้าใจอย่างถ่องแท้และโดยทั่วไปฉันก็ไม่ค่อยใกล้เคียงกับโครเมี่ยมเท่าที่คุณจะได้รับ ขั้นตอนการประกอบภาษาของ Jeff Duntemann เป็นการอ่านที่สนุกสำหรับผู้เริ่มต้น
Erik Reppen

คำตอบ:


14

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

ฉันจำได้ว่าหลักสูตรการเขียนโปรแกรมขั้นต้นของฉันได้รับการสอนใน Scheme และฉันรู้สึกผิดหวังเป็นส่วนใหญ่ว่าฉันไม่สามารถคอมไพล์เป็น. exe และ "รัน" โปรแกรมของฉัน (ฉันคิดว่า MS Visual Basic เป็นจุดสิ้นสุดของการเขียนโปรแกรมทั้งหมด) จนกระทั่งหลายปีต่อมาฉันก็เข้าใจว่าเครื่องมืออันทรงพลังที่ฉันเล่นด้วย ฉันคิดว่าฉันจะได้ชื่นชมมันมากขึ้นและได้รับบทเรียนเหล่านั้นดีขึ้นถ้าฉันมีประสบการณ์ในบางสิ่งบางอย่างในทางปฏิบัติมากขึ้นในตอนแรก


20
ฉันเคยเห็นนักเรียนหลายคนที่รู้สึกประหลาดใจอย่างมากกับการกระพริบ LED และเคลื่อนไหวมอเตอร์
whatsisname

1
@Watsisname +1 ที่จะสร้างการสาธิตที่น่าประทับใจตราบใดที่มันสามารถทำได้โดยไม่ต้องตกอยู่ในอุปกรณ์อิเล็กทรอนิกส์ แน่นอนว่าสามารถทำได้ด้วยภาษาระดับสูงกว่าเช่น Roomba แฮ็คถ้า "ไดรเวอร์" เป็นกล่องดำที่ผู้สอนให้
G__

1
โปรแกรมเมอร์ใหม่จำนวนมากได้รับแรงบันดาลใจจากการประกอบใน VIC20, C = 64 และเครื่องที่คล้ายกัน
ออกุสตุส

2
@Gaius ไม่ใช่ตอนแรก! คุณเปิดเครื่องเหล่านั้นและคุณอยู่ในล่ามพื้นฐาน การชุมนุมเข้ามาหลังจากมีประสบการณ์อย่างพอเหมาะและ จำกัด ขอบเขตของสิ่งที่พื้นฐานสามารถทำได้ ...
G__

1
@whatsisname แต่คุณสามารถใช้สิ่งที่ต้องการที่จะ Arduino ไฟ LED กระพริบตาและมอเตอร์ย้ายโดยไม่ต้องมีการเรียนรู้การชุมนุม
เคนหลิว

12

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

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

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


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

10
@John at CashCommons: การเปรียบเทียบไม่ดี การเริ่มต้นด้วยแอสเซมเบลอร์ก็เหมือนกับการเริ่มค้อนคีย์บอร์ดน้ำหนักและกระโปรง จากนั้นก็ย้ายไปสู่ทฤษฎีดนตรี (วงกลมที่ห้า) เพื่ออธิบายธุรกิจกุญแจสีดำกุญแจขาว จากนั้นก็ย้ายไปยังทฤษฎีดนตรีมากกว่าเดิมก่อนเล่นสเกล
S.Lott

3
@ S.Lott: Ehhhhh ... ไม่ค่อยซื้อเลย ฉันสามารถเขียนโปรแกรมประเภท "สวัสดีโลก" ในการชุมนุมโดยไม่ต้องกังวลเกี่ยวกับทรานซิสเตอร์ เราไม่จำเป็นต้องเป็นนักออกแบบชิปเพื่อเป็นโปรแกรมเมอร์ ความรู้ที่คุณกำลังพูดถึงเป็นพื้นฐานสำหรับการสร้างหรือซ่อมแซมเปียโนซึ่งสัมพันธ์กับการเล่นเพียงอย่างเดียวเท่านั้น
จอห์น

3
@John at CashCommons: "การสร้างหรือซ่อมแซมเปียโน" นั่นคือการเปรียบเทียบกับแอสเซมเบลอร์ "สวัสดีโลก" ในแอสเซมเบลอร์สามารถเขียนได้ แต่เป็นเพียงการเรียกใช้ OS API ซึ่งจะไม่สนใจรายละเอียดทั้งหมดของแอสเซมเบลอร์ สำหรับการเขียนไดรเวอร์ I / O แอสเซมเบลอร์เป็นสิ่งจำเป็น เช่นเดียวกับค้อนและกระโปรงที่เกี่ยวกับการสร้างและการบำรุงรักษาไม่ทำงาน
S.Lott

1
@ S.Lott: อืมมมม ... ฉันคิดว่าชุดคำสั่งเฉพาะนั้นขึ้นอยู่กับชิปใช่มั้ย จุดดี.
จอห์น

7

ฉันไม่คิดว่ามันเป็นความคิดที่น่ากลัว แต่คุณจะให้โปรแกรมเหล่านี้ซับซ้อนเพียงใด การชุมนุมใช้เวลาทำงานมากขึ้น มันอาจจะโอเคที่จะเริ่มต้นด้วยสิ่งพื้นฐานมากแล้วย้ายไปยังสิ่งที่ง่ายต่อการทำงานเมื่อพวกเขาได้รับความชื่นชมในการทำงานในระดับที่ต่ำกว่า บางครั้งนักเรียนครั้งแรกที่ได้รับความคิดในหัวของพวกเขาพวกเขาจะเขียนรหัส Halo ต่อไปหรือ MS Office หรือ AutoCAD หรืออะไรบางอย่างและเมื่อพวกเขาเห็นว่าการทำงานเป็นภาษาแอสเซมบลีง่ายเพียงใดพวกเขาอาจกลัว ว่ามีสิ่งที่ดีกว่าการชุมนุมแล้วย้ายพวกเขาไปที่เมื่อพวกเขาได้เห็นแนวคิด คุณสามารถลองสอน assemlby พร้อมกันกับอย่างอื่นเช่น C.

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

สิ่งนี้สามารถทำงานได้ดีหากทำถูกต้อง แค่ระวัง ...


+1 สำหรับความซับซ้อนของปัญหา การลงคะแนนของฉันจะเป็นการเปรียบเทียบการใช้งานแอสเซมเบลอร์กับการใช้ภาษาระดับสูงกว่า และอาจใช้เช่นแอสเซมเบลอร์ 68,000 ตัวในอีมูเลเตอร์มากกว่า x86 - ฉันไม่รู้ว่าแอสเซมเบลอร์ x86 / amd64 ได้วิวัฒนาการมาอย่างไร นอกจากนี้ยังควรพิจารณาด้วยเช่นกัน - แอสเซมเบลอร์เครื่องเสมือนเช่นคุณสามารถใช้ LLVM ได้ ไม่เหมือนแอสเซมเบลอร์จริง แต่แชร์หลักการที่คล้ายกันจำนวนมากและอาจมีความเกี่ยวข้องมากกว่า
Steve314

การสอน ASM พร้อมกันกับ C ฟังดูเหมือนเป็นความคิดที่ดีทีเดียว
Anto

@ Steve314: ฉันไม่ได้ขึ้นกับแอสเซมเบลอร์ x86 แต่ดูเหมือนว่ามันซับซ้อนกว่า 8086
เดวิด ธ อร์นลีย์

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

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

7

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

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


7

สิ่งหนึ่งที่แน่นอนคือถ้าผู้คนเรียนรู้การประกอบก่อนทำมันพวกเขาจะเป็นโปรแกรมเมอร์ที่น่าทึ่ง

สิ่งนี้ทำให้ฉันนึกถึงเมื่อฉันเรียนรู้วิธีขับรถ แม่ของฉันยืนยัน

เรียนรู้เกี่ยวกับรถยนต์อัตโนมัติจนกว่าคุณจะมั่นใจและจากนั้นคุณสามารถขับรถยนต์ด้วยตนเองของเรา

เหตุผลที่เธอไม่ต้องการให้ฉันต้องฟุ้งซ่านมากกว่าที่ฉันต้องเป็นทั้งหมดในครั้งเดียว

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

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

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


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

1
คุณได้พิจารณาความเป็นไปได้ไหมที่ผู้สอนทำหน้าที่สอนภาษาแอสเซมบลีน้อยกว่าตัวเอก?
John R. Strohm

ฉันคิดว่าเขาทำผลงานได้อย่างน่าอัศจรรย์
CrazyPenguin

3

มันเป็นความคิดที่สมจริงอย่างน้อยสำหรับผู้ที่พร้อมจะใช้ความพยายามพิเศษหรือไม่?

ไม่

แต่จะมีความเข้าใจที่ดีของเครื่อง

ทำไมจึงเป็นข้อได้เปรียบ คุณสามารถให้ตัวอย่างหรือคำใบ้ว่าสิ่งนี้มีคุณค่าได้อย่างไร?

ข้อดีและข้อเสีย?

ข้อดี: ไม่มี

ข้อเสีย:

  • ความยุ่งเหยิงของเรื่องไม่สำคัญแบบสุ่มเกี่ยวกับธงและรัฐและการลงทะเบียนและรูปแบบที่อยู่หน่วยความจำที่ซับซ้อนและอุปกรณ์ I / O และ DMA และการขัดจังหวะและรอบนาฬิกาและสิ่ง ไม่มีสิ่งใดที่ช่วยให้เข้าใจภาษาและการคำนวณบน VM ที่ทันสมัย

  • การตัดการเชื่อมต่อจากการแก้ปัญหาที่เกิดขึ้นจริงกับคอมพิวเตอร์ที่ใช้งานจริง

  • การหย่าร้างจากผู้ใช้ปลายทางและข้อมูลที่เป็นประโยชน์และปัญหาการประมวลผลที่พวกเขาต้องแก้ไข

  • น้ำท่วมที่ไม่จำเป็นของคำอธิบายของเครื่องจักรและเครื่องเสมือนและคอมไพเลอร์และล่ามและเต่าทั้งกองถือโลก

  • รายละเอียดมากมาย "นี่เป็นการใช้งานทางกายภาพของ" วัตถุ "" ในภาษาระดับสูงกว่าในที่สุดพวกเขาก็มาถึง

  • รายละเอียดมากมาย "นี่คือวิธีการส่งมอบฟังก์ชั่นวิธีการ" ในภาษาระดับสูงกว่าในที่สุดพวกเขาก็มาถึง

  • คำอธิบาย "สิ่งนี้ไม่สามารถใช้ได้กับ 80386 แต่ใช้กับ 80586 ชิปเซ็ต" คำอธิบาย

  • การเรียกใช้ OS API ระดับต่ำจำนวนมากเพื่อสร้างโปรแกรม ASM จะทำทุกอย่างที่ดูเหมือนเป็นประโยชน์กับบางคน

จุดของภาษาการเขียนโปรแกรมแรกนั้นไม่ใช่การสร้างชิปเซ็ต

จุดประสงค์ของภาษาโปรแกรมแรกคือ

  1. ทำความเข้าใจวิธีคิดเกี่ยวกับการคำนวณ

  2. ทำความเข้าใจวิธีการประมวลผลข้อมูลที่มีประโยชน์

  3. ทำความเข้าใจวิธีการทำสิ่งต่างๆให้สำเร็จ ออกแบบ - รหัส - ทดสอบ


1
@ S.Lott - แน่นอนว่าไม่ใช่จุดเริ่มต้นของคำถามของฉัน แต่มันอาจเป็นประโยชน์หากมีคำถามเหล่านี้ก่อนที่คุณจะไปที่ภาษาระดับสูงกว่า อย่าเข้าใจฉันผิดคุณสร้างประเด็นให้ถูกต้อง
Anto

3
-1 ข้อเสียมากมายของคุณฉันพิจารณาถึงข้อดี เป็นการดีกว่าที่จะทราบว่าระดับต่ำใช้งานอย่างไรก่อนที่คุณจะใช้จากด้านบน รากฐานมีความสำคัญ
Orbling

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

4
ข้อดีของแอสเซมเบลอร์คือแสดงให้เห็นว่าคอมพิวเตอร์ทำงานอย่างไร คุณรู้. สิ่งที่ทุกอย่างจริงทำงานบน
พอลนาธาน

1
@ S.Lott - ไม่ แต่นั่นหมายความว่าคุณสามารถใช้ความรู้เก่าแก่ส่วนใหญ่ที่คุณรวบรวมและเพิ่มความรู้ใหม่ ๆ ได้ตลอดเวลา ดูภาษาระดับสูงเช่น Python มาพร้อมกับเวอร์ชันใหม่เมื่อเวลาผ่านไป แต่ความรู้เก่ายังคงใช้งานได้ (และที่จริงแล้ว Python ทำลายความเข้ากันได้กับ v3 ไปข้างหลัง)
Anto

3

ถ้าฉันได้รับมอบหมายให้ออกแบบหลักสูตรฉันจะมีสองหลักสูตรที่เปิดในเวลาเดียวกันกับภาคการศึกษาแรก: asm + องค์กร / สถาปัตยกรรมคอมพิวเตอร์พื้นฐานและหลักสูตรที่ใช้ SICP ก่อตั้งขึ้นใน Scheme ภาคเรียนที่สองจะเน้นไปที่โครงสร้างข้อมูลและอัลกอริธึมพื้นฐานใน Scheme

ปีที่สองจะเป็นโครงการตลอดทั้งปีโดยใช้หนึ่งใน Delphi, C ++ หรือ C # มุ่งเน้นไปที่การออกแบบซอฟต์แวร์ที่ทันสมัย ​​(การออกแบบ OO, การออกแบบที่ใช้งานได้บางอย่าง, วิศวกรรมซอฟต์แวร์, การควบคุมเวอร์ชัน ฯลฯ )

ผลที่ได้ควรให้พื้นดินที่เข้มข้นทั้งในเชิงนามธรรมและภาคปฏิบัติซึ่งนำไปสู่หลักสูตรเชิงลึกในปีที่สามและสี่


3

ฉันเคยเรียนวิชาวิทยาศาสตร์คอมพิวเตอร์เบื้องต้นและฉันคิดว่ามันเป็นความคิดที่ไม่ดี

  1. Assembly ใช้ทั้งตรรกะ (ถ้าข้ามไปนี้) และการแปลที่ยากมากระหว่างแนวคิดและตัวเลข นักเรียนที่แนะนำ CS มักจะต่อสู้กับตรรกะเพียงอย่างเดียว (ลูป, ถ้า / อื่น ๆ , การแสดงออกทางบูลีน) และจำเป็นต้องจัดการกับเรื่องนี้จริงๆก่อนที่พวกเขาจะกังวลว่าตัวเลขใดหมายถึงการแสดงออกทางตรรกะ การใช้ภาษาระดับสูงจะสรุปตรรกะนี้สำหรับนักเรียนที่ไม่มีเหตุผลที่จะคิดแบบนั้นมาก่อน
  2. ชั้นเรียน CS เบื้องต้นนั้นไม่จำเป็นต้องเรียนวิชาเอก CS เท่านั้นที่จะเรียนต่อด้วย CS บ่อยครั้งที่พวกเขายังนำโดยสาขาวิชาวิศวกรรมอื่น ๆ และไม่ใช่สาขาวิชาที่เป็นเพียง "การเดินทาง" เรื่องที่น่าสนใจสำหรับวิชาเลือก การประชุมเป็นสิ่งที่ยอดเยี่ยมสำหรับรากฐานสำหรับนักเรียน CS ที่มีความมุ่งมั่นในด้านฮาร์ดคอร์ แต่ไม่ได้ให้ภาพรวมที่ดีของการเขียนโปรแกรมสำหรับนักเรียนที่พิจารณาวิชาเอกหรือผู้ที่ไม่เคยไปเรียนวิชาเอก แต่ต้องการแนะนำสาขา ; และมันไม่มีประโยชน์อย่างมากในตัวมันเองในสาขาส่วนใหญ่
  3. ภาษาระดับสูงขึ้นทำให้แกนของการเขียนโปรแกรมจริงทำงานโปร่งใสมากขึ้น Assembly พบหัวข้อสำคัญบางประการ - แนวคิดหน่วยความจำพื้นฐานแนวคิดประสิทธิภาพพื้นฐาน ฯลฯ - แต่ไม่ได้เป็นการสร้างการออกแบบที่สามารถดูแลรักษาและอ่านได้ซึ่งสำคัญยิ่งกว่าในปัจจุบัน IMO ดูเหมือนว่านักเรียนสมัยก่อนมักจะมีความคิดแบบเก่า ๆ ว่า "โปรแกรมเมอร์จริงเขียนโค้ดที่ไม่มีใครสามารถจัดการได้" ความคิดและการสอนภาษาระดับสูงช่วยสอนว่าการเขียนโค้ดเป็นงานที่ต้องทำงานร่วมกัน

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


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

3

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

ฉันได้เรียนรู้มากมายเกี่ยวกับการทำงานของ Commodore แต่ชิป Motorolla มีชุด opcode ที่ง่ายมาก ไม่ยากเกินไปที่จะแยก opcode น้อยกว่า 255 ตัวออกจากกัน ฉันไม่สามารถใช้ประสบการณ์ของฉันกับชิป Motorolla 6510 ไปจนถึงการเขียนโปรแกรมสำหรับ Intel 8086 ได้ชิปและสถาปัตยกรรมระบบแตกต่างกันมากเกินไป ฉันคิดว่าฉันคงมีปัญหาแบบเดียวกันกับที่ย้ายไปสู่ชิป Motorolla 68000 ของ Amiga เช่นกัน

ในระยะสั้นฉันต้องไม่เห็นด้วยอย่างสุดใจกับทุกคนที่กล่าวว่าสภาควรเป็นภาษาแรกที่ดี นี่คือเหตุผล:

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

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


1

ฉันเข้าร่วมในปีมัธยมปลาย ฉันเข้าเรียนใน Java, Pascal, C และ C ++ มาแล้วและไม่ชำนาญเลยและฉันก็เข้าเรียนที่ Assembly จริงๆ - เป็นคนเดียวที่เข้าชั้นเรียนในโปรแกรมการเรียนทางไกลที่วิทยาลัยชุมชน สองหรือสามเดือนก่อนที่ทุกคนจะสามารถคอมไพเลอร์ทำงานให้ฉันได้

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


0

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


0

ฉันคิดว่าภาษาแอสเซมบลีจะสมเหตุสมผลถ้าคุณมุ่งเน้นไปที่สิ่งต่าง ๆ เช่น:

  • เทคนิคการจัดการหน่วยความจำ
  • HW IO (โดยเฉพาะอย่างยิ่งเวลาและความท้าทายที่เกี่ยวข้องกับประสิทธิภาพ)
  • คุณสมบัติ CPU - โดยเฉพาะคุณสมบัติความปลอดภัย

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

ฉันจะทำให้ใครบางคนสนใจในภาษาระดับสูงกว่า จากนั้นสอน C ++; จากนั้นแอสเซมบลีที่เน้นที่วิธีการคอมไพเลอร์ C ++ สร้างรหัสแอสเซมบลี การทำความเข้าใจกับ v-table และคุณสมบัติภาษาระดับสูงอื่น ๆ จะช่วยให้นักพัฒนาคิดเกี่ยวกับการทำงานของภาษาจริง ๆ มากกว่าแค่การส่งข้อมูลภายใต้ 'เวทมนต์'

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