ทำไมเราต้องเรียนรู้การเขียนโปรแกรมตามขั้นตอนก่อนที่เราจะเรียนรู้การเขียนโปรแกรมเชิงวัตถุ [ปิด]


10

ตอนนี้ฉันอยู่มหาวิทยาลัยปีที่ 4 และเมื่อฉันพูดคุยกับอาจารย์เกี่ยวกับหัวข้อนี้เขาปฏิเสธความคิดเห็นของฉันและวิจารณ์ฉันอย่างหนักมาก (ในมหาวิทยาลัยของฉันเรากำลังสอน C (ANSI) (ในขั้นตอน ชั้นเรียนการเขียนโปรแกรม - ในปีที่ 1 ที่มหาวิทยาลัย) ก่อน C ++ (ในชั้นเรียน OOP ในปีที่ 2) และอื่น ๆ ...

แต่ตอนอายุ 13 พี่ชายของฉันถูกสอนโดยฉัน Java ก่อนและไม่มีอะไรอื่น ตอนนี้เขาสามารถทำเกือบทุกอย่างที่นักเรียนปกติปีที่ 2 สามารถทำกับ Java

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


8
เนื่องจาก Assembler ไม่มีวัตถุ

9
มันเหมือนกับว่าทำไมเราควรสอนให้คำนวณอย่างถูกต้องก่อนเรียนรู้วิธีใช้เครื่องคิดเลข

22
เพราะการออกแบบเชิงวัตถุนั้นมีข้อบกพร่อง โปรแกรมคือชุดของพฤติกรรมที่ทำงานกับข้อมูล วัตถุมักจะแนะนำความซับซ้อนที่ไม่จำเป็น อ่าน "วิธีการออกแบบโปรแกรม: ความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรมและคอมพิวเตอร์"

8
ดังที่คนอื่นพูดว่า "อย่าหันเหความสนใจของโปรแกรมเมอร์ใหม่ด้วย OOP": prog21.dadgum.com/93.html - โดยพื้นฐานแล้วทั้งหมดที่ OOP ได้รับในการสอนพื้นฐานของโปรแกรมเมอร์ใหม่ คุณกำลังสอนแนวคิดสองข้อที่ยากมากในเวลาเดียวกัน
John Ripley

7
@ juxstapose - การเขียนโปรแกรมเชิงวัตถุนำเสนอความซับซ้อนที่ไม่จำเป็นเช่นการบอกว่าเราควรแกะสลักยานพาหนะจากบล็อกเหล็กแผ่นเดียว แค่ความเห็นของฉัน

คำตอบ:


23

สรุปด่วน:

  1. เพราะในโลกแห่งความจริงไม่ช้าก็เร็วคุณต้องทำงานกับรหัสขั้นตอน

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

  3. เติมเต็มเพื่อตอบ 2 เนื่องจาก OOP ซับซ้อนกว่าการเขียนโปรแกรมตามขั้นตอนดังนั้นจึงเป็นการดีกว่าที่จะเรียนรู้การเขียนโปรแกรมตามขั้นตอนก่อน

  4. เพราะในโลกแห่งความเป็นจริงโปรแกรมเมอร์ทำงานด้วยและรวมหลายวิธีในการแก้ปัญหา AKA "การเขียนโปรแกรมแบบหลายจุด" ไม่ได้เป็นเพียงกระบวนทัศน์เดียว

  5. ภาษาโปรแกรมส่วนใหญ่เป็นแบบหลายจุดในบางระดับแม้ว่านักออกแบบหรือนักพัฒนาทั่วไปจะพูดตรงกันข้าม

  6. [ใหม่] เนื่องจากการเขียนโปรแกรมแบบแยกส่วนที่มักสับสนและสับสนกับขั้นตอนการเขียนโปรแกรมสามารถนำไปใช้กับ OOP ดังนั้นคำถามอาจถูกอ่านว่า "ทำไมเราต้องเรียนรู้การเขียนโปรแกรมแบบแยกส่วนก่อนที่เราจะเรียนรู้การเขียนโปรแกรมเชิงวัตถุ"

คำอธิบายการขยายที่น่าเบื่อ:

จุดที่ 1 ชัดเจนมากไม่ใช่คำอธิบายเพิ่มเติม

จุด 2, คลาส, การสืบทอด, Polymorphysm, การเชื่อมต่อเป็นต้น ...

จุดที่ 3 ฉันเขียน Pascal ขั้นตอนก่อนที่ฉันจะได้เรียนรู้ Object Oriented Pascal เมื่อฉันไปถึงที่นั่นฉันพูดว่า: "ดูคลาสเหมือนโปรแกรมขั้นตอนเล็ก ๆ ... ... และคุณสามารถทำให้พวกเขาพูดคุยกันเย็น !!! "

ฉันได้ยินเหมือนกันจากคนที่ไปจากธรรมดา C ถึง C บวกบวก

จุดที่ 4 โปรแกรมเมอร์ส่วนใหญ่มักจะรวมเทคนิคการเขียนโปรแกรมหรือกระบวนทัศน์ต่าง ๆ เข้าด้วยกันหรือวิธีการแก้ปัญหา ฟังก์ชั่น, ขั้นตอน, OOP, ตรรกะ

แม้แต่ Java "Pure OO" ก็ไม่ได้เป็นโปรแกรมวัตถุธรรมดาอย่างที่มันบอก

+1 ชี้ไปที่ว่า "การเขียนโปรแกรมตามขั้นตอน" แทน "การเขียนโปรแกรมเชิงโครงสร้าง" หรือการเขียนโปรแกรมแบบแยกส่วน สิ่งเหล่านี้มีความสำคัญ

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

วันนี้ฉันอ่านโปรแกรม OO ที่ "บริสุทธิ์" หลายอย่างที่ดูเหมือน "Object Oriented Spaghetti Code" ซึ่งหมายความว่าโปรแกรมเมอร์ใช้ OOP แต่รหัสของมันดูเหมือนเป็นระเบียบ

หลายครั้งที่ฉันสามารถอ่านรหัส OO และบอกว่าโปรแกรมเมอร์เรียนรู้การเขียนโปรแกรมแบบมีโครงสร้างก่อน OOP เพราะรหัสนั้นชัดเจนและจัดเรียง

และสำหรับการเขียนโปรแกรมแบบแยกส่วนฉันได้เห็นแอพหลายตัว ใน C ++ และ PHP ที่ไม่ได้ใช้โมดูล *


18

ฉันคิดว่าการเปรียบเทียบจะคล้ายกับคณิตศาสตร์ คุณต้องเรียนรู้แนวคิดพื้นฐานก่อน (การเพิ่ม / การลบ / ... ) จากนั้นไปยังหัวข้อที่ซับซ้อนมากขึ้น (พีชคณิต / แคลคูลัส) โปรแกรมเชิงปฏิบัติเป็นแบบเชิงเส้นมากและง่ายต่อการเข้าใจการไหลของการควบคุมในขณะที่คุณกำลังเรียนรู้ไวยากรณ์ บางที OOP อาจจะมีความซับซ้อนมากกว่านั้นมันสร้างจากโครงสร้างที่เรียบง่ายซึ่งใช้ในภาษาเชิงโพรซีเดอร์ แต่มีความเป็นนามธรรมและเข้าใจยากกว่า การเริ่มต้นด้วยภาษาเช่น C ช่วยให้คุณใกล้ชิดกับฮาร์ดแวร์มากขึ้นและทำให้คุณจัดการกับปัญหาการจัดสรรหน่วยความจำและพอยน์เตอร์ซึ่งคุณต้องเข้าใจ แต่ไม่ได้ใช้ในภาษาเช่น Java / C # จริงๆ มีคุณค่าที่แท้จริงในการได้รับสิ่งนี้ในโรงเรียนโดยไม่คำนึงว่าจะเกิดขึ้นก่อนหรือหลัง

FWIW มันถูกผูกไว้กับการเปลี่ยนแปลงในที่สุด เมื่อฉันเริ่มโรงเรียนเราเรียนรู้ที่ Pascal และ PL / 1 เราไม่ได้ไปที่ C จนกว่าจะถึงชั้นเรียนภาษาขั้นสูง (นั่นคือวันที่ฉัน) ฉันไม่ได้หยิบ Java มาก่อนจนกว่าจะสำเร็จการศึกษา - มันยังไม่ได้ถูกประดิษฐ์ขึ้นมา!


+1 - ความขัดแย้งที่ตั้งใจจะมี ... "เป็นนามธรรมและเข้าใจยาก" :)

10
@ Spacemoses - ไม่ใช่จริงๆยิ่งมีอะไรที่เป็นนามธรรมมากเท่าไหร่การสนทนาก็ง่ายขึ้น แต่ยิ่งยากที่จะเข้าใจความเป็นจริงของสิ่งที่กำลังพูดถึง

ตกลงฉันเห็นจุดของคุณแล้ว
ses011

12

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


3
แต่ฟังก์ชัน + state = objects
Dan D.

4
การวางแนววัตถุมักทำให้การบำรุงรักษาทำได้ยากมากขึ้นเนื่องจากมันขยายฐานรหัส ระบบที่ใช้ Java เป็นฝันร้ายที่ต้องรักษาเพราะระดับของความบริสุทธิ์ OO และรูปแบบการออกแบบที่พบในชุมชนนั้น
bit-twiddler

1
"รูปแบบการออกแบบที่พบในชุมชนนั้น" - ฟังดูเหมือนเป็นปัญหาส่วนตัวใน "ชุมชน Java" ถ้านั่นคือจุดยืนของคุณ
ses011

1
@Dan D: ปฐมนิเทศวัตถุเป็นมากกว่าการรวมฟังก์ชั่นและรัฐในวัตถุ ...
Marjan Venema

4
@ Spacemoses: ฉันมีปัญหากับชุมชนการพัฒนาใด ๆ ที่ไม่ยอมรับหลักการ KISS ทางออกที่ดีที่สุดสำหรับปัญหามักเป็นวิธีที่ง่ายที่สุด
bit-twiddler

11

คุณทำไม่ได้

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

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

ไม่มีคำตอบเดียวเพราะ:

  • การเริ่มต้นด้วยขั้นตอนบางอย่างเช่น C (หรือแม้แต่การประกอบ) อาจเป็นทางเลือกที่ดีเพราะคุณเรียนรู้ว่าคอมพิวเตอร์ทำงานอย่างไร

  • การเริ่มต้นด้วยบางสิ่งที่ Java เชิงวัตถุอาจเป็นตัวเลือกที่ดีเพราะมันค่อนข้างง่ายต่อการเรียนรู้และนำ OOP ไปใช้กับชีวิตจริงและเพราะมันสอนคุณเกี่ยวกับการขึ้นรูป

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

หากครูของคุณสอนไม่ดีมันก็ไม่สำคัญว่าคุณจะเริ่มด้วยอะไร พวกเขาจะออกมาเหมือนกัน


4
+1 บนและฉันไม่อยากจะเชื่อเลยว่าต้องเลื่อนดูคำตอบที่ไม่ดีมากมายเพื่อค้นหา!
jk

ที่จริงฉันมีปัญหาในการคำนวณฟังก์ชั่นคณิตศาสตร์ชั่วขณะหนึ่งฉันได้เรียนรู้การเขียนโค้ดก่อนและแนวคิดของฟังก์ชั่นที่ 'คือ' แทนที่จะ 'ทำสิ่งต่าง ๆ ' ทำให้ฉันงุนงง : 3
StarWeaver

6

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


3
+1 อย่างแม่นยำ ทุกวิธี OOP เป็นโปรแกรมขั้นตอนสั้น ๆ หากคุณไม่ทราบวิธีการที่จะรวมชิ้นส่วนขนาดเล็ก (ประเภทค่าตัวอักษรตัวแปรผู้ประกอบการ=ที่ได้รับมอบหมายif, forฯลฯ ) เป็นชิ้นขนาดใหญ่ (วิธีการ) วิธีที่คุณสามารถที่เคยหวังว่าเข้าใจ OOP เช่นเดียวกับทักษะส่วนใหญ่การเป็นคนฉลาดมีแรงบันดาลใจและ / หรือมีการเข้าถึงการเรียนการสอนแบบตัวต่อตัวสามารถช่วยให้คุณเรียนรู้หลายหัวข้อที่เกี่ยวข้องพร้อมกัน
David Harkness

3

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

ด้วยวิธีนี้นักเรียนสามารถเรียนรู้วิทยาศาสตร์เล็กน้อย (อัลกอริธึมโครงสร้างข้อมูล) และวิศวกรรมศาสตร์ (แหล่ง -> วัตถุ -> การรวบรวมเครื่องจักรสถาปัตยกรรม von-neuman (น่าจะ)) ในเวลาเดียวกัน

OOP ผ่าน C ++ / obj-C แนะนำรูปแบบการจัดระเบียบโค้ดซึ่งเป็นอีกสิ่งหนึ่งที่ต้องเรียนรู้ นี่อาจทำให้การเรียนรู้แนวคิดด้านบนค่อนข้างยากขึ้น

OOP ผ่าน Java (ท่ามกลางคนอื่น ๆ ) ก้าวไปอีกขั้นด้วยการทำให้ฮาร์ดแวร์และสภาพแวดล้อมเป็นนามธรรม ตอนนี้ผลิตภัณฑ์อ้างอิงไม่ใช่รหัสเครื่อง แต่เป็นสื่อกลางบางชนิดที่ไม่เปิดเผยวิธีการทำงานของฮาร์ดแวร์พื้นฐาน แต่ผลกระทบคือช่วยให้นักเรียนมีสมาธิกับรูปแบบการจัดระเบียบโค้ด

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

ฉันจะเดาว่าโปรแกรมระดับปริญญาตรีที่เริ่มต้นด้วยการเขียนโปรแกรมขั้นตอนระดับต่ำน่าจะสร้างนักวิทยาศาสตร์คอมพิวเตอร์ / วิศวกรคอมพิวเตอร์และโปรแกรมที่เริ่มต้นด้วยแนวคิดระดับสูงกว่าจะผลิตวิศวกรซอฟต์แวร์ / นักพัฒนา / โปรแกรมเมอร์


3

ความกล้าของวัตถุ OOP นั้นประกอบไปด้วยขั้นตอนการโปรแกรม

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

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

OOP ไม่ได้เกี่ยวกับการประกาศไวยากรณ์ในการสร้างคลาสมันเป็นเรื่องของโครงสร้างข้อมูลรูปแบบการออกแบบความหลากหลายรูปแบบการสืบทอดและองค์ประกอบ

ที่จะทำทุกสิ่งที่คุณจำเป็นต้องรู้การเขียนโปรแกรมขั้นตอนสิ่งที่ทำได้อย่างง่ายดายใน C. คุณสามารถดำเนินการมากที่สุดทุกสิ่งที่คุณได้เรียนรู้ด้วย C ไปสู่ Java หรือ C ++ แล้วคุณอาจจะต้องคิดใหม่บางสิ่งบางอย่างที่คุณเอาให้ได้รับใน C แต่ ... คุณต้องรู้ไวยากรณ์ (ที่คุณอยู่ในเบื้องต้น C) เพื่อเขียนประโยค (ต้องเขียนขั้นตอนเพื่อกำหนดส่วนต่อประสาน) จากนั้นย่อหน้า (ต้องรู้โครงสร้างข้อมูล) แล้วรู้รูปแบบการออกแบบบางอย่าง (โศกนาฏกรรมตลกข้อบกพร่อง วิธีการโต้ตอบและเมื่อไม่ใช้) ก่อนที่คุณจะสามารถเขียนนวนิยายที่สมบูรณ์ (ระบบ OOP ที่สมบูรณ์)

ถ้าฉันเป็นคุณฉันต้องการรับบางส่วนของหนังสือต่อไปนี้: ภาษา C Programming , จาวาโปรแกรมภาษา , รูปแบบการออกแบบ , แก๊งสี่และรูปแบบการฟักไข่ ฉันจะรับสำเนาของการเขียนโปรแกรมภาษา C แน่นอนถ้าฉันจริงจังกับ C / C ++

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

คุณควรใช้เวลาในการเรียนรู้ SQL, Oracle MySQL Postgresql และ MSSQL มีเรื่องเกี่ยวกับวากยสัมพันธ์เหมือนกัน แต่ถ้าฉันต้องเลือกการเรียนรู้ด้วยตัวเอง id id เลือก Postgresql เพียงเพราะ BSD มีใบอนุญาตแทน GPL (คุณควรดูการเปรียบเทียบ และความคมชัดในใบอนุญาต GPL / BSD ด้วย)


2

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

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

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


2

มีคนอื่นอีกหลายคนที่ได้ตอบคำถามนี้แล้ว แต่ฉันคิดว่ามันคุ้มค่าที่จะพูดให้ชัดเจนยิ่งขึ้น

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

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


0

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

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

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


2
ฉันมีครูที่ใช้ C จาก '89 แต่สำหรับ microchip ที่คาดว่า c '99 มีครูคนอื่นใช้ 'c ++' แต่ไม่มี STL หรือแม่แบบ อาจได้รับ structs กับตัวชี้ฟังก์ชั่นในพวกเขา
Ape-inago

1
เพื่อความเป็นธรรม STL และแม่แบบโดยทั่วไปไม่ใช่หัวข้อ C ++ เบื้องต้น เป้าหมายขั้นพื้นฐานของหลักสูตรการเขียนโปรแกรมระดับ 101 ใด ๆ คือการสอนวิธีสร้างตรรกะที่มีลำดับขั้นตอนมีเงื่อนไขและวนซ้ำอย่างมีโครงสร้างภายในข้อ จำกัด ของไวยากรณ์ที่กำหนด คุณสมบัติภาษาอื่น ๆ ทั้งหมดเป็นเพียงวากยสัมพันธ์น้ำตาลที่อนุญาตให้กลุ่มโครงสร้างการควบคุมขั้นพื้นฐานรวมทั้งผูกเข้ากับข้อมูล
bit-twiddler

แตะสอง downvotes เห็นว่ามีคนมา = P แปลกสำหรับฉันในขณะที่ความเห็นเดิมมาจากโปรแกรมเมอร์เก่าที่ช่วยให้ฉันหายจากการสอนที่ไม่ดี @Ape: หัวหน้าฝ่าย CS ของเรากำลังพยายามสอน COBOL ให้กับเราในปี 2004 XD (อย่างน้อยความกังวลของฉันจากสไตล์ 'การสอน' ของเขาฉันก็ไม่รังเกียจเพราะฉันสามารถทำงานในบางจุดขายได้ เครื่องจักร lol แต่ geeze ... อย่างจริงจัง?)
Garet Claborn

1
@ bit-twiddler - ใช่ครับแปลกมาก ฉันไม่ได้พึ่งพาประสบการณ์นั้นมากนักในความคิดเห็นนี้ แต่ฉันได้ดูสถานที่อื่น ๆ ฉันชอบการเขียนโปรแกรมทั้งสองแบบจริงๆและดูเหมือนว่าฉันควรสอนพวกเขาด้วยกัน ฉันเพิ่งพบว่าอาจารย์ที่อายุน้อยกว่าไม่มีความกระตือรือร้นในเรื่องนี้เท่ากัน IMO นั่นเป็นสิ่งที่ดี ฉันเข้าใจว่าบางคนคิดว่าขั้นตอนแรกสำคัญมาก
Garet Claborn

1
@ bit-twiddler: ใช่ แต่ไม่ใช่หลักสูตรเบื้องต้น มันเป็นหลักสูตรขั้นสูงปีที่ 4 ในการออกแบบฐานข้อมูลและเราควรจะใช้ c ++ มันรู้สึกผิดหลังจากประสบ c ++ ในระดับสูงเช่นนี้กับหลักสูตรก่อนหน้า
Ape-inago

0

สองเหตุผลสำหรับฉัน: การเขียนโปรแกรม OO หนึ่งรายการมาเพื่อแก้ปัญหาการเขียนโปรแกรมตามขั้นตอน ดังนั้นโดยการเขียนโค้ดโพรซีเดอร์บางขั้นตอนและสิ่งเดียวกันใน OO ทำให้ง่ายต่อการเข้าใจความแตกต่าง

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


1
"การเขียนโปรแกรม OO มาเพื่อแก้ปัญหาการเขียนโปรแกรมตามขั้นตอน" นั่นคือเป้าหมาย แต่ OO สร้างปัญหาให้มากที่สุดเท่าที่จะแก้ไขได้
bit-twiddler

@ bit-twiddler: เรื่องใหญ่มาก มุ่งเน้นไปที่ (หรือ จำกัด ให้แคบลง) ในแง่มุมการสอนทำให้เป็นกรณี: สิ่งที่เรามีสิ่งที่เราทำมันได้ดีกว่า: ที่ (คุณเถียงว่ามันจะดีกว่าหรือไม่)
Dimitrios Mistriotis

0

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


1
-1 การทำให้เข้าใจผิด - ในขณะที่ฉันเห็นเธรด (ผ่านการค้นหาโดย Google) ที่อ้างว่า CMU ลด OOP จากหลักสูตร CS ปีแรกของพวกเขาและแทนที่ด้วยการเขียนโปรแกรมที่ใช้งานได้หลักสูตร CMU อย่างเป็นทางการเริ่มต้นด้วยภาษาการเขียนโปรแกรมอลิซ oriented [ดูenr-apps.as.cmu.edu/assets/SOC/CS_SPRING.htm]
Steven A. Lowe

1
@ davidk01: (1) ยืนยันคำตอบที่ไม่ถูกต้องตามจริง (2) "อลิซเป็นเครื่องมือการสอนที่มีอิสระที่ออกแบบมาเพื่อให้นักเรียนได้สัมผัสกับการเขียนโปรแกรมเชิงวัตถุเป็นครั้งแรก " จาก alice.org
Steven A. Lowe

2
@Steven A. Lowe: ตรงจากปากม้า: "การเขียนโปรแกรมเชิงวัตถุจะถูกลบออกทั้งหมดจากหลักสูตรเบื้องต้นเพราะมันเป็นทั้งการต่อต้านแบบแยกส่วนและแบบขนานโดยธรรมชาติและไม่เหมาะสมกับหลักสูตร CS สมัยใหม่ หลักสูตรใหม่ที่นำเสนอเกี่ยวกับวิธีการออกแบบเชิงวัตถุจะถูกนำเสนอในระดับปีที่สองสำหรับนักเรียนผู้ที่ต้องการศึกษาหัวข้อนี้ " - การสอน FP ให้กับนักศึกษา
davidk01

1
@ davidk01: ลิงค์ยอดเยี่ยมขอบคุณ จากรายงานของคณะกรรมการที่อ้างถึงในบทความว่า "ถึงแม้ว่าการเขียนโปรแกรมเชิงวัตถุ (ในรูปแบบที่มากมาย) ยังคงเป็นรูปแบบที่โดดเด่นในการพัฒนาซอฟต์แวร์อุตสาหกรรมการใช้ภาษาเชิงวัตถุเช่น Java ในระดับเบื้องต้นแนะนำความซับซ้อนและเสียสมาธิมาก จากเป้าหมายหลักในระดับเบื้องต้นดูเหมือนว่าดีกว่าที่จะให้ความคุ้มครองที่ครอบคลุมยิ่งขึ้นเกี่ยวกับการออกแบบ OO และวิธีการใช้งานต่อไปในหลักสูตรเพื่อให้มีสมาธิมากขึ้นบนพื้นฐานในระดับเบื้องต้น " [เหมืองเน้นความสำคัญ] ...
Steven A. Lowe

1
@ davidk01: ฉันยินดีที่จะยอมรับไม่เห็นด้วย โทรหาฉันอย่างบ้าคลั่งถ้าคุณชอบ แต่สำหรับฉันมีความแตกต่างที่สำคัญระหว่างการเปลี่ยนการเน้นระดับเบื้องต้นและ "โยนหลักสูตร OOP ทั้งหมดของพวกเขา" ฉันแทบจะเรียกการลดขอบเขตของชั้นเรียนเบื้องต้นว่า "sweeping change" ;-)
Steven A. Lowe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.