นักเรียนวิทยาศาสตร์คอมพิวเตอร์ทุกคนควรสอนภาษาการเขียนโปรแกรมอะไร


13

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

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


13
รหัส psuedo ควรเพียงพอสำหรับ CS
Jé Queue

12
@Xepoch - ไม่เห็นด้วย มันไม่ใช่เรื่องธรรมดาที่จะแสดงความหมายของการประเมินความขี้เกียจความขี้เกียจ / ความแปรปรวนร่วมในลายเซ็นประเภททฤษฎีหมวดหมู่และอื่น ๆ โดยใช้รหัสหลอก โค้ดหลอกเหมาะสำหรับการอธิบายอัลกอริทึมและโครงสร้างข้อมูล แต่มี CS มากกว่านั้นมาก
Aidan Cully

6
นอกจากนี้นักศึกษา CS ส่วนใหญ่หวังว่าจะได้งานที่ไม่ใช่วิชาการหลังจากสำเร็จการศึกษา รหัสหลอกจะไม่คุ้มค่ามากนักในตลาดงานที่มีการแข่งขันสูง ฉันไม่คิดว่าการศึกษาระดับปริญญา CS ควรเริ่มจากการฝึกอบรมงานเป็นหลัก แต่มันจะต้องมีที่พักในทิศทางนั้น
Adam Crossland

2
พวกเขาทั้งหมด หากเวลามี จำกัด ให้เริ่มจากตัวอักษรของตัวอักษร A +, B, C, C #, D, E, F #, J, K, Q, R, T ... นั่นไม่ใช่รายการที่ไม่ดีจริงๆ
Jesse Millikan

6
ขอแสดงความยินดีกับการค้นพบ "รุ่นภาษาใด" อีกรุ่นหนึ่ง คำถาม. ฉันไม่สามารถรออ่านความคิดเห็นทั้งหมดได้ อย่าลืมอ้างอิงถึง SICP โอ้เดี๋ยวก่อนนั่นไง
คอร์บิน

คำตอบ:


21

ฉันจะให้รายการ:

  • สหประชาชาติ (ภาษาที่ค่อนข้างง่าย): มันเป็นสิ่งสำคัญที่จะเข้าใจอย่างน้อยเล็ก ๆ น้อย ๆของปัจจัยพื้นฐาน
  • C: ภาษาขั้นตอนที่ใช้ในหลายสถานที่ ไม่เป็นภาระให้นักเรียนใหม่ที่มีแนวคิดใหม่ทั้งหมดเช่น OOD ทั้งหมดในครั้งเดียว
  • Java / C # / Eiffel / C ++: สิ่งที่เน้นวัตถุดีสิ่งใดสิ่งหนึ่งเหล่านี้จะบรรลุเป้าหมายในการสอนนักเรียน OOD และเมื่อพวกเขาเข้าใจภาษาใดภาษาหนึ่งพวกเขาควรจะสามารถเรียนรู้คนอื่น ๆ .. มีมากมาย ภาษาที่ดีฉันแสดงรายการ Eiffel เพราะยังมีการออกแบบตามสัญญา
  • LISP และ Prolog: สอนวิธีคิดใหม่แก่นักเรียนซึ่งสำคัญที่สุดแม้ว่าพวกเขาจะไม่เคยใช้สิ่งเหล่านี้ "ในโลกแห่งความจริง"
  • SQL และ XML: แนะนำวิธีการใหม่ในการคิดเกี่ยวกับข้อมูลและวิธีการดึงข้อมูลและจัดการมัน

นักเรียนควรได้สัมผัสกับทุกเหล่านี้กระบวนทัศน์ที่อย่างน้อยที่สุด ไม่ใช่แค่หนึ่งหรือสอง

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


ฉันหวังว่าโรงเรียนของฉันจะมีรายละเอียดมากขึ้นเกี่ยวกับ XML และ SQL เรามีชั้นเรียนหนึ่งที่เข้าไปในทั้งสองและมันก็ยอดเยี่ยม

ฉันจะเพิ่มภาษาแบบไดนามิกที่ทันสมัยเช่น Lua, Python, Javascript และอื่น ๆ
Javier

4
อายังมีฟังก์ชั่นที่ไม่ยอมใครง่ายๆเช่น haskell และ erlang มีความรู้ดีมาก
Javier

1
+1 สำหรับรายการ SQL อย่างน้อยคุณก็นึกถึงพีชคณิตเชิงสัมพันธ์
Jé Queue

1
ฉันจะแยกการจัดการจาก OO ที่ไม่มีการจัดการด้วยเช่นกัน C ++ และ Java ในขณะที่ฉันไม่เคยใช้ C ++ ตั้งแต่ uni โดยไม่ได้เรียนรู้เกี่ยวกับ malloc, heap และ stack คุณจะไม่เข้าใจ OO ดี
markmnl

45

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


2
+1 คลาสภาษาการเขียนโปรแกรมของฉันเป็นคลาสที่มีค่าที่สุดที่ฉันเข้าเรียน
HappyCodeMonkey

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

1
ค่อนข้างเกี่ยวข้อง: youtube.com/watch?v=Ps8jOj7diA0 Stanford มีการเขียนโปรแกรม Paradigms 2008 ที่สมบูรณ์บรรยายบน YouTube
Inaimathi

4
เพิ่มรายการไปยังรายการ (Prolog) บางภาษาก็ขนานกันอย่างชัดเจน (Occam) สอนนักเรียนว่าการทำงานแบบขนานจะดีอย่างไร (ไม่มีใครเข้าใจถูกต้อง)
Martin York

1
@Martin York: Prolog เป็นภาษาการเขียนโปรแกรมเชิงตรรกะซึ่งเป็นภาษาที่มีการเปิดเผย (ฉันพูดถึงสิ่งนี้ว่าภาษาโปรแกรมการทำงานนั้นมีการประกาศโดยทั่วไปแล้วยังพูดได้)
mipadi

33

ฉันคิดว่านักเรียน CS ที่มีความสมดุลควรได้รับการสอนภาษาในภาษาโปรแกรมทั้ง 4 ประเภท:

ฟังก์ชั่น - Lisp / Haskell / PostScript ฉันไม่ได้มีประสบการณ์กับ Haskell มากนัก แต่ฉันเคยได้ยินโปรแกรมเมอร์คนอื่น ๆ ที่คลั่งไคล้มัน การทำความเข้าใจโครงสร้างของการเขียนโปรแกรมเชิงหน้าที่และสาเหตุที่มีประโยชน์ในหลาย ๆ สถานการณ์จะช่วยให้โปรแกรมเมอร์จัดระเบียบอัลกอริทึมในภาษาอื่น ๆ ได้ดีขึ้น

เน้นวัตถุ - เลือกของคุณ C # / Java / Python / Ruby / yadda yadda yadda ประเภทนี้จำเป็นต้องได้รับการสอนเพียงเพราะเป็นสิ่งที่ธุรกิจสมัยใหม่ต้องการ

ความจำเป็น - C / Fortran / Pascal เหล่านี้เป็นเรื่องธรรมดาน้อยวันนี้ แต่พวกเขาควรจะเรียนรู้จากมุมมองการปฏิบัติ / ประวัติศาสตร์ วิธีการที่พวกเขาจ้างยังคงมีการปฏิบัติจริงเพราะในทุกภาษามันทั้งหมด boils ลงเพื่อสอน และภาษาที่จำเป็นนั้นดีมากในการทำรายการและทำตามคำแนะนำ

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


6
คุณอาจต้องการเพิ่มต้นแบบในรายการนั้น - ตัวอย่างเช่น JavaScript
stusmith

@stusmith - ต้นแบบมีมูลค่าการกล่าวถึง แต่จริงๆเป็นส่วนย่อยของภาษาเชิงวัตถุและจาวาสคริปต์เป็นตัวอย่างที่ดีที่สุด ฉันอาจพิจารณาว่าเป็นการบ้านในหลักสูตรภาษาโปรแกรม แต่ไม่ใช่จุดสนใจ
Joel Etherton

1
+1 สำหรับ Prolog ฉันได้เห็นการใช้งานจริงและฉันมักจะใช้อัลกอริทึมต้นแบบ
Fred Foo

@larsmans - ฉันสนใจที่จะได้ยินเกี่ยวกับการใช้งานของคุณ ฉันไม่ได้สัมผัสมันมาหลายปีแล้วดังนั้นฉันจึงใช้งานได้ดีมาก คุณมีลิงค์ไปยังเอกสารหรือบทความที่คล้ายกันหรือไม่?
Joel Etherton

ลองดู ECLiPSe ( eclipseclp.org ) ภาษา Prolog โอเพนซอร์สที่ใช้ในอุตสาหกรรมโดย บริษัท ยุโรปขนาดใหญ่หลายแห่ง (ao บริษัท รถไฟฝรั่งเศส SNCF ถ้าฉันจำได้ถูกต้องฉันจะลองและหาข้อมูลอ้างอิง)
Fred Foo

6

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

ในขณะนี้ฉันจะบอกว่าภาษาอังกฤษเป็นภาษาที่ 1 ที่ CS สำคัญทุกคนควรรู้ (แน่นอนว่ามันแตกต่างกันไปตามภูมิภาค)


งานที่ยอดเยี่ยมคือผลข้างเคียงของการศึกษาระดับปริญญา CS การศึกษาระดับปริญญา CS สำหรับเพียงแค่นั้นความรู้ของทฤษฎีการคำนวณ ฉันสามารถหางานทำในโรงเรียนอาชีวศึกษาที่ดีกว่าแทนที่จะเรียนคณิตศาสตร์และ CS เป็นเวลาหลายปี
Jé Queue

2
+1 สำหรับภาษาอังกฤษ ภาษาคอมพิวเตอร์มีรายละเอียดการใช้งาน
ไวแอตต์บาร์เน็ตต์

+1 หากใครบางคนสามารถเรียนรู้ภาษาอังกฤษได้ดีเขาสามารถเรียนรู้คู่มือได้ดี ฉันรู้ภาษาอังกฤษดี ฉันไม่มีปัญหาในการเรียนรู้ภาษาใด ๆ
Shiplu Mokaddim

4

ฉันคิดว่ามันเปลี่ยนไปตามกาลเวลา แต่นึกคิด - 3 ภาษาจาก 3 มุมมองที่แตกต่างกันมาก ในวันของฉันมันเป็นกระบวนการ OO และการทำงาน - Pascal, C ++ และ LISP ฉันไม่ค่อยขายโดยเฉพาะทั้งสามคน แต่เมื่อฉันสัมภาษณ์ฉันมองหา:

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

ในฐานะการค้าอื่น - ฉันคิดว่าโปรแกรม CS จำเป็นต้องฝึกอบรมนักเรียนด้วยภาษาที่โดดเด่นในตลาด ในเวลาใดก็ตามฉันคิดว่า 2-3 ภาษามีความโดดเด่นอย่างมากสำหรับงานส่วนใหญ่ ฉันคิดว่าโรงเรียนเป็นหนี้ให้กับนักเรียนเพื่อให้โอกาสในการเรียนรู้ 2 ใน 3 ของภาษาเหล่านั้นด้วยการฝึกฝนเชิงลึกที่มีอย่างน้อยหนึ่งแห่ง


4

สำหรับนักเรียน CS ให้มองหาภาษาการเขียนโปรแกรมที่แมปอย่างใกล้ชิดกับแนวคิด CS ที่ถูกกล่าวถึง ฉันขอแนะนำ:

  • โครงการเพื่อให้เข้าใจแคลคูลัสแลมบ์ดาได้ดีขึ้น
  • Erlang เพื่อทำความเข้าใจกับนางแบบนักแสดง
  • อารัมภบท, สำหรับลอจิกและระบบพิสูจน์หลักฐาน
  • Haskell สำหรับทฤษฎีประเภท / หมวดหมู่และเนื่องจากการประเมินผลที่ขี้เกียจนั้นแสดงออกอย่างเต็มที่ในภาษา
  • ภาษาแอสเซมบลีอย่างน้อยหนึ่งภาษา - หากคุณต้องการนับมันภายใต้แบนเนอร์นี้ฉันจะใส่ภาษาโค้ดไบต์เช่น Java หรือ CLR ไบต์รหัสและ LLVM IR
  • อาจเป็นภาษาที่นิยามของฮาร์ดแวร์เช่น Verilog หรือ VHDL
  • วัวกระทิงสำหรับคลาสคอมไพเลอร์ - ก่อสร้าง
  • บางสิ่งบางอย่างที่มีระบบการพิมพ์แบบไดนามิก (Ruby มาในใจ) ...

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


3

yacc

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


2

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


1
ในขณะที่ฉันเห็นด้วยกับทั้งสองอย่างคุณอาจต้องการหาเหตุผลบางอย่าง (ฉันจะทราบด้วยว่าจะไม่มีประโยชน์อย่างยิ่งหากจะรู้ว่าสิ่งเหล่านี้เป็นภาษาเดียวของคุณ)
Inaimathi

2

ฉันคิดว่าภาษาไม่สำคัญเท่ากับที่ผู้คนเชื่อ

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

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

ฉันเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโปรแกรมและการพัฒนาซอฟต์แวร์หลังจากออกจากมหาวิทยาลัยและเริ่มทำงาน!


2

มันสำคัญจริงๆหรือ

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

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

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

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

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

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

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


ใช่มันเป็นเรื่องสำคัญ ภาษาแรกที่คุณเรียนรู้จะสร้างสมองของคุณเกี่ยวกับวิธีการมองภาษาในอนาคต

1

ฉันเชื่อว่าคุณตอบคำถามของคุณเองบางส่วน

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

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

เป็นรูปธรรม:

OOP:. NET หรือ Java

อย่างน้อย 1 กระบวนทัศน์การเขียนโปรแกรมเพิ่มเติมเพื่อให้นักเรียนตระหนักถึงวิธีการอื่น ๆ

ฟังก์ชั่น: เสียงกระเพื่อม?


ฟังก์ชั่น, ไม่, โปรด, ไม่ LISP ค่อนข้าง: Haskell
mariotomo

1

ภาษาแอสเซมบลีและไมโครโค้ด นักเรียน CS ควรเข้าใจชั้นรากฐานทั้งหมดของสิ่งที่เป็นนามธรรมระหว่างเครื่องบูลีนสเตทและ OOP / etc ระดับสูงล่าสุด กระบวนทัศน์ภาษาโปรแกรม

พื้นฐานหรือโลโก้หรือสารภาพ (et.al. ) หากพวกเขาต้องการที่จะสามารถเข้าใจวิธีการสอนเด็กเล็กให้รู้จักการใช้คอมพิวเตอร์

Fortran, Cobol และ Lisp หากพวกเขาต้องการที่จะเข้าใจประวัติศาสตร์ของภาษาโปรแกรมและสิ่งที่เป็นปัญหาจริงคือการปฏิบัติที่ทันสมัยแก้ไข


และ C เพื่อให้คุณเข้าใจ 90% ของรหัสโอเพนซอร์สทั้งหมดที่คุณสามารถศึกษาได้
rightfold

1

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


1

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

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


0

Haskell หรือ Lisp จะเป็นตัวเลือกแรกของฉัน แต่อาจจะเป็น Erlang ภาษาที่ใช้งานได้จริงจะสอนวิธีสร้างบทคัดย่อในวิธีที่ทรงพลังมาก


แต่นักเรียนควร จำกัด เพียงหนึ่งกระบวนทัศน์หรือไม่ แล้วภาษา OOP ที่ใช้งานได้เช่น Scala ล่ะ
Anto

1
ไม่แน่นอนฉันคิดว่าคนอื่นจะเข้าไปร่วมด้วย!
Zachary K

0

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

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


0

pseudocode

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

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

แก้ไข: คำตอบนี้เป็นแรงบันดาลใจบางส่วนโดยความไม่แน่นอนของโปรแกรมเมอร์บางคนในการเขียน pseudocode

"เพียงแค่เขียนอัลกอริทึมใน pseudocode"

"นั่นอะไร?"

ประโยชน์ของ pseudocode คือผู้ที่ไม่มีส่วนร่วมในการเขียนโปรแกรมสามารถเข้าใจได้ ฉันไม่แนะนำให้คุณต้องการ BA และผู้ใช้พิสูจน์อักษรรหัสของคุณ แต่มันสามารถช่วยได้เมื่อผู้ที่ไม่ใช่โปรแกรมเมอร์มีความเข้าใจในอัลกอริทึมที่ต้องการ Psuedocode ขจัดความต้องการที่จะอธิบายfor (int i = 0; i < j; i++)และสิ่งที่เป็นศัพท์แสงสำเร็จรูปหลัก


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

@kevin cline - ฉันพอใจกับองค์ประกอบทางไวยากรณ์ที่ฉันรู้ - เป็นสิ่งที่ฉันไม่ทราบว่าฉันอาจคัดค้าน แน่นอนฉันสามารถถอดรหัสพวกเขาได้ แต่ประเด็นก็คือ pseudocode ไม่ควรมีปัญหาเหล่านั้น (ฉันยังไม่เห็นภาษาการเขียนโปรแกรมที่ดูเหมือน pseudocode จริง ๆ )
Kirk Broadhurst

0

ค.

  • ประการแรกมันยังคงใช้ (ใช้กันอย่างแพร่หลาย!) และไม่เพียง แต่สำหรับเมล็ด ปัจจุบันฉันยังคงใช้งานแอปพลิเคชันทางธุรกิจที่เข้ารหัสใน C ดังนั้นแม้จะเป็น C บริสุทธิ์และเรียบง่ายคุณก็ยังสามารถหางานได้ ใน บริษัท ใหญ่ ๆ ในอุตสาหกรรมเกือบทุกแห่ง (แต่ในเว็บ dev)
  • หากคุณกำลังจะไปทำงานในสภาพแวดล้อม Unix / Linux การไม่รู้ว่า C อย่างน้อยสักนิดก็เหมือนกับการช็อปปิ้งและไม่สามารถอ่านราคาบนแท็กได้
  • พอยน์เตอร์! ทุกคนควรเข้าใจตัวชี้ (เปรียบเทียบJoel Spolsky ) นอกจากนี้เมื่อคุณเข้าใจแนวคิดของ malloc แล้วคุณจะรู้ว่าเกิดอะไรขึ้นเมื่อคุณพิมพ์ "ใหม่" ใน OOP langage
  • ส่วนใหญ่ "ไวยากรณ์ยอดนิยม" มาจาก C.
  • ใช่มันไม่ชัดเจนเสมอไป ใช่มันยากที่จะเรียนรู้ ใช่สตริงค่อนข้างฝันร้ายสำหรับผู้เริ่มต้น แต่การเขียนโปรแกรมไม่ชัดเจนและยากที่จะเรียนรู้และคุณจะเข้าใจจริงๆว่าอะไรดีเกี่ยวกับ OOP เมื่อหลังจากเรียน C คุณลอง C ++ และค้นพบ std :: string

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


0

ภาษาการเขียนโปรแกรมบางส่วนที่นำมาใช้เพื่อรับทักษะการแก้ปัญหาทั่วไปและแนวคิดการเขียนโปรแกรมเป็นโลโก้และ Karel พวกเขาควรจะสอนก่อน C / C ++ / Java / Lisp / PERL / Assembly / สิ่งที่กระบวนทัศน์การเขียนโปรแกรม

นักเรียนจะได้แนะนำการเขียนโปรแกรมในทางปฏิบัติ


-1

อะไรก็ได้กับวัตถุ เพียงให้แน่ใจว่าพวกเขาเรียนรู้ได้ดี

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

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