ภาษาสคริปต์มีผลอย่างไรต่อโปรแกรมเมอร์จูเนียร์ [ปิด]


18

ฉันได้พูดคุยกับอาจารย์คนหนึ่งของฉันเมื่อวันก่อน

เราได้อภิปรายถึงผลกระทบที่ภาษาสคริปต์ที่ง่ายกว่า(เช่น Python หรือ Ruby) ที่มีต่อโปรแกรมเมอร์ผู้น้อย

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

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

ชั้นเรียนจบลงก่อนที่ทั้งสองฝ่ายจะได้รับการสำรวจอย่างเต็มที่


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

ดังนั้นภาษาสคริปต์มีผลกระทบอะไรกับโปรแกรมเมอร์รุ่นเยาว์


8
ฉันไม่ได้ตั้งใจจะเป็นคน แต่grammar.quickanddirtytips.com/affect-versus-effect.aspx
Singletoned

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

2
@ Singletoned: จริง ยังไงก็เถอะฉันต้องคิดถึงxkcd.com/326แม้ว่า ...

2
ทำให้ฉันคิดถึงเรื่องนี้joelonsoftware.com/articles/ThePerilsofJavaSchools.html
P.Brian.Mackey

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

คำตอบ:


26

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

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

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


1
+1 แต่ฉันไม่คิดว่า C จะเรียนรู้ได้ง่ายกว่า Python ในทุกแง่มุม อาจมีแนวคิดน้อยลงในการเรียนรู้โดยรวม แต่คุณจะได้เรียนรู้เพิ่มเติมในระยะเวลาเดียวกันกับ Python และแน่นอนถ้า C ง่ายเกินไปมี C ++ เสมอสอนความซับซ้อนของภาษาทั้งระดับสูงและระดับต่ำ ;)
Martin

+1 นี่คือความคิดของฉัน! ฉันหวังว่าฉันจะได้อ่านเรื่องนี้มาก่อนชั้นเรียน :)
joe_coolish

22

ไม่สำคัญว่าคุณจะเริ่มจากตรงไหน มันสำคัญว่าคุณจะไปที่ไหนหลังจากที่คุณเริ่ม

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

ฉันเริ่มต้นด้วย BASIC ฉันไม่ได้อยู่ที่นั่น


+1 สำหรับคำตอบที่สมบูรณ์ - แสดงให้เห็นอย่างชัดเจนว่าคำถามเดิมหายไปอย่างไร! (ตามความบังเอิญที่สุดฉันเริ่มต้นด้วย BASIC ด้วย ;-)
PéterTörök

5
มันทำให้ฉันประหลาดใจว่ามีกี่คนที่อยู่ที่นั่น .. : o /
Gary Willoughby

1
คำตอบที่ยอดเยี่ยม สั้น ๆ ถูกต้องและตรงประเด็น ฉันเริ่มต้นด้วย BASIC เช่นกัน
Michael Riley - AKA Gunny

11

ครูของคุณถูกต้องยกเว้นว่าเขาคิดว่าผลที่ตามมาของเขาเป็นสิ่งเลวร้าย

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


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

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

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

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

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

5

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

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

Assembler เป็นระดับต่ำพิมพ์แบบไดนามิก (ถ้าพูดถึงประเภททำให้รู้สึกใด ๆ ), C เป็นระดับต่ำแบบคงที่พิมพ์, Ruby เป็นระดับสูงแบบไดนามิกพิมพ์ Haskell เป็นระดับสูงแบบคงที่พิมพ์ Java ไม่ได้เป็นแบบคงที่ระดับสูงหรือระดับต่ำ C ++ เป็นทั้งแบบคงที่และระดับต่ำแบบคงที่ และอื่น ๆ

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

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

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

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

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

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


3

ไม่มีอะไรง่าย ๆ เกี่ยวกับ Python ดู Unicode และการเขียนโปรแกรมเมตา


ฉันยอมรับว่า Python นั้นซับซ้อนและมีประสิทธิภาพมาก แต่พื้นฐาน (การจัดการสตริงการจัดการอาร์เรย์ ฯลฯ ) นั้นง่ายกว่าใน Python มากกว่าใน C
joe_coolish

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

1
ถ้าอย่างนั้นทำไมถ้า searchstring.lower () ใน filecontent.lower (): ไม่ทำงาน? เนื่องจาก bom ในไฟล์ sql UTF-16LE ใน tfs บน windows ด้วย Python2.7 ไม่สนุก ได้รับมันทำงาน ใช้เวลาสองสามชั่วโมง string.find () ไม่ทำงาน ... Argghhh!
Christopher Mahan

1
Unicode ง่ายกว่าในการจัดการใน C อย่างไร
dan04

3

ฉันเห็นอีกปัญหาที่ลึกกว่า

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

หรือสามเณร Wannabe โปรแกรมเมอร์คิดว่าเขาจะต้องมี tupe ของรายการแทนที่จะเป็นรายการของ tuples แต่จะไม่มีความคิดที่น้อยที่สุด "วิธีการทำสิ่งนี้" และเขาจะถามคำถามเกี่ยวกับ stackoverflow ที่แสดงว่าไม่มีประโยชน์แน่นอน


6
แต่ Python และ Ruby นั้นพิมพ์ออกมาอย่างแรง นี่คือมุมฉากที่จะพิมพ์แบบไดนามิก สตริงและตัวเลขไม่ได้แปลงกันโดยปริยาย
dsimcha

3
@dsimcha: ใช่ - แล้วจะปฏิเสธสิ่งที่ @Ingo พูดอย่างไร
Jim G.

1
เพราะคำถามนี้ส่วนใหญ่เกี่ยวกับ Ruby และ Python ฉันคิดว่าเขาหมายถึงว่าเขาคิดว่า Ruby และ Python เป็นคนที่อ่อนแอซึ่งเป็นความเข้าใจผิดที่พบบ่อย
dsimcha

1
@ davidk01 - นั่นคือจุดของฉัน: ค่ามีประเภทไม่ว่าเราต้องการหรือไม่ แต่ในการพิมพ์แบบไดนามิก (ถ้าคำนั้นทำให้คุณพอใจมากกว่า) ภาษาตัวแปรไม่ได้ แต่จะทำการตรวจสอบชนิดที่รันไทม์เพื่อแยกความแตกต่างระหว่าง Unitype ที่หลากหลาย
Ingo

2
@Ingo: อย่างน้อยฉันก็เคยพบผู้ใช้ Common LISP ที่คิดว่าการขาดการพิมพ์แบบสแตติกนั้นเป็นประโยชน์ (อันที่จริงแล้วการพิมพ์แบบสแตติกตัวเลือกใช้งานได้ทั้งในการตรวจสอบข้อผิดพลาด ข้อผิดพลาดการพิมพ์คงที่จะหลีกเลี่ยงไม่ได้กลายเป็นเรื่องยากที่จะหาและแก้ไขในทางปฏิบัติ ฉันไม่ได้เห็นอะไรมากไปกว่าความคิดเห็นไม่ทางใดก็ทางหนึ่ง
David Thornley

2

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

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

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


2

เราเห็นวิธีอื่น ๆ ในวิทยาลัยและฉันคิดว่ามันมีประโยชน์ * เราเริ่มต้นในระดับต่ำ พอยน์เตอร์, การจัดการหน่วยความจำ, อาร์เรย์อักขระ ... ใช่แล้วเราเริ่มต้นด้วย C. เช่นเดียวกับอัลกอริทึม: อันดับแรกใช้รายการที่เชื่อมโยง hashtable ต้นไม้ต้นไม้ ... และจากนั้นใช้ไลบรารีมาตรฐานเท่านั้น

หลังจากนั้นเราเพิ่มภาษาที่มีประสิทธิภาพมากขึ้นเช่น Java, C # หรือ perl แต่ด้วยความได้เปรียบในการรู้ว่าเกิดอะไรขึ้นภายใต้เข็มขัด

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


1

ภาษาสคริปต์ไม่ทำให้โปรแกรมเมอร์เลอะเทอะ การขาดความชัดเจนในการทำความเข้าใจโดเมนปัญหา (เช่นธุรกิจที่ทำหน้าที่โปรแกรม) เป็นสิ่งที่ทำให้เกิดความสะเพร่า

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


1
ลองใช้ก่อนที่จะสงสัย แตกต่างที่สำคัญคือการที่คุณไม่ให้แช่งเกี่ยวกับการที่มันได้FooหรือBarหรือสิ่งที่แตกต่างอย่างสิ้นเชิงตราบเท่าที่คุณสามารถ.frobnicate()มันทางใดทางหนึ่ง ไม่มีอินเทอร์เฟซที่ชัดเจน

ฉันค่อนข้างคุ้นเคยกับภาษาแบบไดนามิกเนื่องจากงานประจำวันของฉันอยู่กับ Ruby on Rails และใช่นั่นคือการประชุมที่สำคัญภายในชุมชนภาษาแบบไดนามิก โดยทั่วไปสิ่งนี้เรียกว่า 'การพิมพ์เป็ด' ในวรรณคดีการวิจัยพวกเขาเรียกว่าประเภทโครงสร้างและมีอนุสัญญาไวยากรณ์บางอย่างที่สามารถแสดงให้คุณเห็นว่า 'ประเภทที่โต้แย้งได้' มีลักษณะอย่างไร ไม่เพียงแค่นั้นยังมีระบบการพิมพ์ที่สามารถจดจำได้และตรวจสอบว่าโปรแกรมของคุณกำลังดูแลเป็ดอย่างมีน้ำใจ
Farley Knight

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

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

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

1

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

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

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

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

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

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


0

ฉันอยู่กับคุณครู แต่กับ @Singletoned เมื่อเขาบอกว่าคุณครูของคุณกำลังสมมติว่าผลที่ตามมา (เช่นไม่มีความรู้เรื่องประสิทธิภาพ) ไม่ดี

ฉันคิดว่าการเริ่มต้นด้วย C นั้นดีกว่าการเริ่มต้นด้วยภาษาสคริปต์ ในฐานะครูฉันจะให้ความสนใจกับสิ่งสถาปัตยกรรม von Neumann ทั้งหมด (ALU, รีจิสเตอร์, หน่วยความจำ, พอร์ต i / o, ... ), ย้ายตรงไปยังตัวชี้ (ฉันขอโทษจริง ๆ แล้วมันเป็นแนวคิดหลัก [ไม่ปล่อยออกมา การอ้างอิง (เช่นพอยน์เตอร์) ในภาษา VM เป็นแหล่งสำคัญของการรั่วไหลของหน่วยความจำ]), ตีโครงสร้างข้อมูลบางอย่าง (ต้นไม้, รายการที่เชื่อมโยง, hashtable 1 ), และจากนั้น ...ยกระดับความเป็นนามธรรมให้เป็นอย่างอื่น (OO, การเขียนโปรแกรมที่ใช้งานได้บางอย่าง - กฎการพิมพ์สแตติกที่แข็งแกร่งyo \ m / ดังนั้นจึงไม่มี "ภาษาสคริปต์"> :()

1อืมฉันอาจเห็นด้วยกับครูของคุณเกี่ยวกับการพิจารณาเรื่องประสิทธิภาพ


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

นั่นเป็นความจริง แต่ ... (a) การไม่เข้าใจพื้นฐานทำให้รหัสที่ไม่ดี (ผ่านการแฮ็ค - มัน - ถูก - หรือการเขียนโปรแกรมเลอะเทอะ) และ (b) ฉันพยายามกระตุ้นให้ทำไมตัวชี้ยังเกี่ยวข้องไม่ ยืนยันว่า C ดีกว่าภาษาที่รวบรวมขยะในแง่ของหน่วยความจำรั่ว วัตถุประสงค์ในการเข้าสู่พอยน์เตอร์โดยเร็วคือเพื่อให้เราสามารถเอา heck ออกจาก C.
JohnL4

0

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


0

คุณทั้งคู่พูดถูก

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

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

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


0

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

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

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

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