การเขียนโค้ดสำคัญหรือไม่ที่จะต้องมีความสามารถด้านวิทยาศาสตร์คอมพิวเตอร์ เราควรใช้อัลกอริทึมเพื่อให้รู้หรือไม่?
ฉันจำสำนวนหนึ่งของอาจารย์ cs ว่า " ฉันไม่เคยเขียนรหัส"
การเขียนโค้ดสำคัญหรือไม่ที่จะต้องมีความสามารถด้านวิทยาศาสตร์คอมพิวเตอร์ เราควรใช้อัลกอริทึมเพื่อให้รู้หรือไม่?
ฉันจำสำนวนหนึ่งของอาจารย์ cs ว่า " ฉันไม่เคยเขียนรหัส"
คำตอบ:
คุณจะไม่รู้อัลกอริทึมจริงๆจนกว่าคุณจะโค้ดมัน
การเขียนโค้ดไม่สำคัญกับอาจารย์ของคุณ แต่คุณต้องจำไว้ว่าเขาไม่ได้จ่ายเงินให้กับสิ่งต่าง ๆ เขาจ่ายให้กับสิ่งที่พูด (และเขียนสิ่ง)
ฉันเป็นอดีตอาจารย์คณิตศาสตร์ดังนั้นฉันเข้าใจถึงพลังนี้
หากคุณต้องการติดตามเส้นทางของเขาและเป็นนักวิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎีใช่แล้วการเข้ารหัสมีความสำคัญน้อยกว่า แต่ถ้าคุณทำอย่าลืมรักษาความอ่อนน้อมถ่อมตนโดยรู้ว่าเงินเดือนของคุณจ่ายโดยทรัพยากรที่ได้รับจากผู้ที่เลือกทำสิ่งต่าง ๆ
วิทยาศาสตร์คอมพิวเตอร์ไม่ได้เกี่ยวกับคอมพิวเตอร์มากไปกว่าดาราศาสตร์ก็เป็นเรื่องเกี่ยวกับกล้องโทรทรรศน์
- Edsger Dijkstra
ฉันมักจะเห็นด้วย
หากคุณกำลังพูดถึงการเป็นวิทยาการคอมพิวเตอร์บริสุทธิ์ที่มีความเชี่ยวชาญในด้านนามธรรมแนวคิดพื้นฐานด้านวิทยาศาสตร์คอมพิวเตอร์ก็ไม่จำเป็นต้องเป็นเช่นนั้น
การงอการเปรียบเทียบ: นี่เป็นการถามว่านักวิทยาศาสตร์จรวดทุกคนที่นาซ่าควรจะบินในอวกาศเพื่อเป็น "นักวิทยาศาสตร์จรวดที่ดี" หรือไม่ ไม่แน่นอน การเป็นนักบินอวกาศเป็นส่วนหนึ่งของอุตสาหกรรมการบินอวกาศและเป็นส่วนหนึ่งของภาคปฏิบัติ แต่ก็ไม่ได้หมายความว่านักวิทยาศาสตร์ภาคพื้นดินไม่ได้มีความสำคัญในแบบของพวกเขา
ที่กล่าวว่าอาจเป็นความคิดที่ดีที่จะใช้อัลกอริทึมที่สร้างขึ้นหากไม่ได้เขียนด้วยภาษาโปรแกรมจริง ในแง่นี้คุณสามารถคิดว่าการออกแบบอัลกอริทึมเป็นสาขาของคณิตศาสตร์
การเขียนโค้ดไม่สำคัญอย่างยิ่งที่จะเป็นนักวิทยาศาสตร์คอมพิวเตอร์ที่แท้จริง และการคิดในโค้ดสามารถจำกัดความคิดเมื่อพวกเขาพยายามพัฒนาแนวคิดนามธรรมที่เป็นประโยชน์ โคเดกที่ดีที่สุดส่วนใหญ่ไม่มีสับทางปัญญาในการวิเคราะห์อัลกอริธึมที่ซับซ้อนหรือพัฒนาแนวคิดเช่นภาษาการเขียนโปรแกรมการค้นหาขั้นสูงและอัลกอริธึมการเรียงลำดับทฤษฎีออโตมาตา จำกัด ขอบเขตทฤษฎีการคำนวณแบบกระจายทฤษฎีต้นไม้ อัลกอริธึมการประมวลผลสัญญาณ, ทฤษฎีการเข้ารหัส, การวิเคราะห์ประสิทธิภาพและการเพิ่มประสิทธิภาพ, การแคชที่มีประสิทธิภาพ, การลดแผนที่, โปรโตคอลความปลอดภัยที่เชื่อถือได้ ฯลฯ โคเดกที่ดีเยี่ยมและวิศวกรคอมพิวเตอร์สามารถใช้ทฤษฎีเหล่านี้ในระบบที่พวกเขาพยายามสร้าง นั่นคือขอบเขตของวิศวกรระบบคอมพิวเตอร์หรือโปรแกรมเมอร์คอมพิวเตอร์
การเขียนโค้ดมีความสำคัญอย่างยิ่งต่อการเป็นโปรแกรมเมอร์คอมพิวเตอร์ การทำความเข้าใจกับการเข้ารหัสแนวคิดเชิงนามธรรมที่เป็นประโยชน์ที่ผลิตโดยนักวิทยาศาสตร์คอมพิวเตอร์ให้เป็นรหัสการทำงานก็มีประโยชน์เช่นกัน
ปัญหาใหญ่อย่างหนึ่งในวิทยาการคอมพิวเตอร์ก็คือพวกเขามักจะต้องหาทางแก้ปัญหาคณิตศาสตร์ที่มีประโยชน์น้อยในการแก้ปัญหาการเขียนโปรแกรมในปัจจุบัน แม้ว่าพวกเขาจะเขียนรหัสวิธีแก้ปัญหาก็ไม่มีใครสามารถใช้มันได้ คิดถึงทฤษฎีการประมวลผลสัญญาณดิจิตอล มันถูกคิดค้นโดยคนเช่น Fourier, Hilbert และ Shannon แต่การประยุกต์ใช้กับปัญหา DSP ทางคอมพิวเตอร์ไม่สามารถทำได้อย่างกว้างขวางจนกระทั่งประมาณ 20 ปีที่แล้ว
ปัญหาใหญ่ในการศึกษาคอมพิวเตอร์คือคนส่วนใหญ่ที่สอนโดยนักวิทยาศาสตร์คอมพิวเตอร์จะไม่กลายเป็นนักวิทยาศาสตร์คอมพิวเตอร์ แต่นักวิทยาศาสตร์คอมพิวเตอร์จำนวนมากเกินไปไม่เข้าใจสิ่งนี้ การเข้ารหัสอาจไม่สำคัญสำหรับพวกเขา แต่ถ้าคุณอยู่ในชั้นเรียนของพวกเขามันเกือบจะเป็นสิ่งสำคัญสำหรับคุณ
ปัญหาใหญ่อีกประการหนึ่งของการศึกษาคอมพิวเตอร์คือนักวิทยาศาสตร์คอมพิวเตอร์ที่แท้จริงจำนวนมากขาดประสบการณ์ในอุตสาหกรรมที่จะเป็นประโยชน์ในการสอนการพัฒนาซอฟต์แวร์ พวกเขาพยายามสอนบางอย่างที่พวกเขาไม่รู้จริงๆ นั่นทำให้พวกเขาสูญเสียความน่าเชื่อถือ สิ่งที่มีความสำคัญในอุตสาหกรรมมักไม่ได้ลงทะเบียนกับนักวิทยาศาสตร์คอมพิวเตอร์เหล่านี้
ความยาวและระยะสั้นการเข้ารหัสมีความสำคัญสำหรับคนส่วนใหญ่ที่กลายเป็น "นักวิทยาศาสตร์คอมพิวเตอร์" เพราะคนเหล่านี้ส่วนใหญ่จะเป็นโปรแกรมเมอร์คอมพิวเตอร์และวิศวกรระบบคอมพิวเตอร์
ขึ้นอยู่กับสาขาย่อยที่ศาสตราจารย์อยู่
ทุกคนที่มีความสามารถในการวิเคราะห์เชิงตัวเลขน่าจะเป็น Fortran หวือ อาจารย์ AI ทุกคนจะใช้รหัสใน Lisp หรือ Prolog หรืออะไรทำนองนั้น
ในบางพื้นที่ทางคณิตศาสตร์มากขึ้นไม่จำเป็นต้องมีรหัสจริงๆ ฉันยังคงเป็นคนน่าสงสัย
ดูเหมือนว่าเขาเป็นคนประเภทคณิตศาสตร์แบบแยกส่วน ... เข้าสู่วิชาคณิตศาสตร์และทฤษฎีที่อยู่เบื้องหลังวิทยาศาสตร์คอมพิวเตอร์ ใช้สิ่งที่อาจารย์ประเภทนี้พูดด้วยเกลือเม็ดหนึ่ง
คุณสามารถทำความเข้าใจกับทฤษฎีเท่านั้น แต่ฉันมักจะพบว่าฉันเข้าใจอัลกอริธึมและ 1,000x ที่ดีกว่าหลังจากเขียนโค้ดเหล่านั้น (Bubble sort vs. Quicksort ตัวอย่างเช่นมันเป็นเรื่องดีที่รู้ Big-O แต่เห็นมันในทางปฏิบัติด้วยข้อมูลขนาดใหญ่ - ชุดให้คุณชื่นชมโลกแห่งความจริงบางอย่างสำหรับการวัดความซับซ้อนในการคำนวณ)
สิ่งที่น่าสนใจอย่างหนึ่งที่ฉันได้พบคือยิ่งคุณศึกษาวิชาวิทยาศาสตร์คอมพิวเตอร์มากเท่าไหร่ ในบางจุดคุณหยุดคิดถึงสิ่งต่าง ๆ ในภาษาใดภาษาหนึ่งโดยเฉพาะ แต่มองว่ามันเป็นแนวคิดที่กว้างขึ้นของวิทยาศาสตร์คอมพิวเตอร์
นี่เหมือนกับถามว่าอาจารย์ภาษาอังกฤษทุกคนควรมีความสามารถในการเขียนภาพยนตร์ละครทีวีนวนิยายเล่นและบทกวีในใจของฉัน ในทำนองเดียวกันจินตนาการอาจารย์คณิตศาสตร์ที่ไม่เคยใช้ตัวเลขเพื่อความคิดที่ต่างชาติ กล่าวคือมีองค์ประกอบพื้นฐานบางอย่างที่ให้ความสำคัญในการสอนวิทยาศาสตร์คอมพิวเตอร์เบื้องต้น ดังนั้นอาจารย์ควรรู้ไวยากรณ์ภาษาขั้นพื้นฐานและวิธีการเขียนโปรแกรมที่มีความซับซ้อนเช่นเดียวกับหลักสูตรที่อาจารย์สอน หากอาจารย์สอนเกี่ยวกับการออกแบบคอมไพเลอร์และไม่เคยเขียนคอมไพเลอร์มาก่อนนี่จะเป็นปัญหาใหญ่ ลองนึกภาพว่าพ่อครัวกำลังทำเค้กที่ไม่เคยทำอาหารหรือกินเค้กมาก่อน Aye carumba
ในขณะที่ฉันสามารถเห็นข้อดีบางประการในการใช้อัลกอริทึมเพื่อให้รู้ว่าฉันสงสัยว่ามันเป็นข้อกำหนด ท้ายที่สุดแล้วใคร ๆ ก็สงสัยว่าหลุมกระต่ายในการดำเนินการไปไกลแค่ไหนในการทำความเข้าใจวิธีการใช้อัลกอริทึม ยกตัวอย่างเช่นใครบางคนจะต้องใช้อัลกอริทึมใด ๆ และนำไปใช้ภายใต้กระบวนทัศน์ต่าง ๆ เช่นขั้นตอนการเขียนโปรแกรมเชิงวัตถุและฟังก์ชั่นการทำงานเพื่อให้รู้จริงหรือไม่? พวกเขาต้องรู้หรือไม่ว่าคอมไพเลอร์แปลรหัสทั้งหมดและย้ายบิตไปรอบ ๆ ในระดับอิเล็กตรอนโดยอิเล็กตรอนจะค่อนข้างอวดรู้เกี่ยวกับมัน
"ฉันไม่เคยใช้รหัส" มีนัยยะของการเก็บอดีตและกาลปัจจุบันในทางใดทางหนึ่ง นอกจากนี้ยังอาจมีข้อสันนิษฐานโดยนัยของ "การเข้ารหัส" เป็นสิ่งที่ต่ำต้อยที่ต่ำกว่าอาจารย์สำหรับวิธีการอื่นในการดูคำสั่งที่สามารถนำเสียงเชิงลบไปค่อนข้างที่อาจไม่ไปได้ดีในบางวงการ
อาจารย์ของคุณอาจพูดถูกในการเป็นอาจารย์คุณไม่จำเป็นต้องเขียนโค้ด แต่รู้ทฤษฎีมาก แต่นั่นจะไม่ทำงานนอกขอบเขตมหาวิทยาลัย
แม้จะเป็นนักพัฒนาซอฟต์แวร์มืออาชีพ แต่ฉันก็ได้ปริญญาวิศวกรรมเครื่องกล
คุณสามารถเป็นนักออกแบบเครื่องกลที่ดีมีประสบการณ์น้อยมากในการสร้างและการตัดเฉือนชิ้นงาน แต่การรู้วิธีการสร้างและชิ้นส่วนเครื่องจักรจะทำให้คุณเป็นวิศวกรที่ดีขึ้นอย่างมีนัยสำคัญเพราะคุณสามารถทำนายปัญหาที่เกี่ยวข้องกับการผลิตและประกอบสิ่งที่คุณกำลังออกแบบ
เช่นเดียวกันกับซอฟต์แวร์ "coder" เป็นช่างเครื่องหรือช่างเทคนิคในขณะที่วิศวกรซอฟต์แวร์ก็เป็นวิศวกร สำหรับหลาย ๆ ที่คนหนึ่งทำงานทั้งสองอย่าง มันเป็นไปไม่ได้และสำหรับปัญหาเชิงนามธรรมบางอย่างตำแหน่ง "วิศวกรรมเท่านั้น" อาจใช้ได้
แต่สำหรับคนส่วนใหญ่นั้นไม่มีประโยชน์อย่างแน่นอนจากการปฏิเสธรหัส
หากคุณไม่ได้ไตร่ตรองและยุติปัญหาการหยุดชะงักมีการใช้การเข้ารหัสในทุกแง่มุมของวิทยาศาสตร์คอมพิวเตอร์เสมอ
CS คลาสเดียวที่ฉันเรียนด้วยการเขียนโปรแกรมอย่างไม่มีทฤษฎี ฉันคิดว่ามีนักฟิสิกส์มากมายที่พูดว่า "ฉันไม่เคยทดลอง" แต่พวกเขาอาจเป็นคนที่พูดว่า "ฉันไม่เคยค้นพบอะไรเลย" และฉันจะแปลกใจถ้าพวกเขาสนใจ
ในฐานะนักเรียนวิทยาศาสตร์คอมพิวเตอร์ฉันคิดว่าในตอนแรกดีกว่าที่จะเข้าใจแนวคิดที่เกี่ยวข้องกับการพัฒนาซอฟต์แวร์ เมื่อคุณได้เรียนรู้แนวคิดเกี่ยวกับซอฟต์แวร์และวิธีการโต้ตอบกับคอมพิวเตอร์แล้วถึงเวลาที่จะเริ่มเขียนโค้ดและจัดการกับปัญหาการใช้งานเฉพาะ
นี่เป็นเหมือน "ข้อยกเว้นซอฟต์แวร์" ในตอนแรกคุณต้องจัดการกับพวกเขาเพราะคุณทำสิ่งที่ไม่ได้รับอนุญาตให้ทำ จากนั้นเมื่อคุณเรียนรู้พวกเขาเริ่มทำเช่นเดียวกันกับรหัสของคุณเพื่อให้มันละเอียดยิ่งขึ้น
ฉันคิดว่าคนที่ไม่สนใจแนวคิดเช่นโปรแกรมเมอร์ที่ใช้ข้อยกเว้นเป็นเวิร์กโฟลว์ปกติในแอปพลิเคชันของพวกเขา พวกเขารู้ได้อย่างไร แต่ไม่เข้าใจว่าทำไม
ฉันมีสำนวนอื่นสำหรับอาจารย์ของคุณ:
ผู้ที่สามารถทำได้ผู้ที่ไม่สามารถสอนได้
imo พูดคุยราคาถูก ทุกคนสามารถพูดพล่ามเกี่ยวกับ 'ทฤษฎี' และเรียกมันว่า 'วิทยาศาสตร์คอมพิวเตอร์' แต่จนกระทั่งมันถูกนำไปใช้จริงทฤษฎีไม่ได้มีประโยชน์มากเพราะไม่มีทางที่จะตรวจสอบได้ ฉันใช้เวลาความคิดเห็นศาสตราจารย์ของบางสิ่งบางอย่างเกี่ยวกับการอย่างจริงจังมากขึ้นถ้าผมรู้ว่าเขาจริงแก้ปัญหาเฉพาะในรหัสกว่าถ้าเขาเป็นเพียงแค่ก็ดี 'ทฤษฎี' ซึ่งอาจหรือไม่อาจจะมีหลักฐานใด ๆ ที่จะสำรองมุมมองของเขา