วิทยาศาสตร์ของวิทยาศาสตร์คอมพิวเตอร์นั้นตายไปแล้วหรือ [ปิด]


18

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

ความเป็นมา: ฉันเพิ่งจบการศึกษาระดับปริญญาตรีสาขาวิทยาศาสตร์คอมพิวเตอร์ ฉันทำงานในตำแหน่งเริ่มต้นที่ บริษัท ขนาดเหมาะสมในแผนกไอที ฉันส่วนใหญ่ทำ. NET และเทคโนโลยีอื่น ๆ ของ Microsoft ที่งานของฉัน แต่ก่อนหน้านี้ฉันได้ทำสิ่ง Java ผ่านการฝึกงานและไม่ชอบ ฉันเป็นโปรแกรมเมอร์ C ++ โดยส่วนตัวสำหรับโครงการเพื่อความสนุกของฉัน

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

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

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

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

นี่คือสิ่งที่ฉันจะรอคอยตลอดชีวิตของฉันหรือไม่? ยังมีตำแหน่งสำหรับคนที่รักวิทยาศาสตร์และศิลปะของ CS มากกว่าเพียงแค่การจ่ายเงินหรือไม่?

และในหมายเหตุเดียวกันต่อไปนี้เป็นการอ่านที่ดีถ้าคุณยังไม่เคยเห็นหน้าโรงเรียนแห่งอันตรายของ Java


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

48
ฉันคิดว่า CS ที่สับสนของคุณกับการเขียนโปรแกรมสิ่งเหล่านี้เกี่ยวข้องกัน แต่มีสองสิ่งที่แตกต่างกัน
Darknight

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

8
คุณกำลังพยายามแก้ไขปัญหาอะไรกับคำถามนี้
Jeremy

15
@Veaviticus จริง ๆ แล้วคุณคาดหวังว่าช่างประปาของคุณจะรู้ถึงพลศาสตร์ของไหล (เพื่อให้พวกเขาสามารถทำงานได้ดีขึ้น?) แอปพลิเคชันส่วนใหญ่ของ Line Of Business (เดสก์ท็อป / เว็บ) ไม่จำเป็นต้องใช้ในการแก้ปัญหาที่ซับซ้อนมาก (น้อยมาก) การมีพื้นหลังใน CS ช่วยใช่หรือไม่! มากที่สุดอย่างแน่นอน. มันถูกต้องสำหรับการลอบ -> ไม่ได้จริงๆ
Darknight

คำตอบ:


25

ใช่และไม่

เป็นคำถามที่ดี แต่สมมติฐานไม่ดี

ดูเหมือนว่าการศึกษาด้านวิทยาศาสตร์ส่วนหนึ่งขาดไป แต่ข้อสันนิษฐานว่าวิทยาศาสตร์อยู่ที่นั่นเพียงเพื่อทำให้โปรแกรมมีประสิทธิภาพ

วิทยาศาสตร์จำเป็นต้องสอนผู้คนให้รู้จักกำหนดและแก้ไขปัญหา

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

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


2
ฉันเข้าเรียนในโรงเรียนที่ไม่ได้เครียด Java มากสิ่งที่ฉันทำใน C ++ แต่พวกเขายังไม่ได้สอนเราถึงวิธีการทำสิ่งใด ๆ ที่คุณพูดถึง พวกเขาครอบคลุมพื้นฐาน, อ่านบางสิ่งบางอย่างและเจาะลึกลงไปในสิ่งที่อาจารย์แต่ละคนสนใจดูเหมือนว่าโรงเรียนทุกวันนี้พยายามที่จะพัฒนานักพัฒนาให้มากที่สุดแทนที่จะเป็นนักวิทยาศาสตร์มากที่สุด
Veaviticus

@Veaviticus: สำหรับนักเรียนที่โชคดี ที่มหาวิทยาลัยของฉันอาจารย์มีระดับจิตเภทที่เป็นนามธรรมและแนวคิดของการสอบคือ "ท่องนิยามอย่างเป็นทางการ"
DeadMG

ภาษาไม่เกี่ยวข้องกับคำสอนในการย่อยสลายปัญหา ปัญหาคือปัญหาโดยไม่คำนึงว่าเป็น C, Java หรือ Ruby
Rig

29

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

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

"ยังมีตำแหน่งสำหรับคนที่รักวิทยาศาสตร์และศิลปะของ CS มากกว่าเพียงแค่การจ่ายเงินหรือไม่"

ใช่แน่นอน แต่อาจไม่ใช่แผนกไอทีของ บริษัท ขนาดกลาง


16

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

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

สมมติว่าลูกค้ามาหาคุณวิศวกรโยธา / โครงสร้างและขอให้คุณสร้างสะพาน สะพานนั้นต้องมีความยาว 20 ฟุตรองรับตัวเองและรับน้ำหนักได้ 1 ตันควรใช้เวลา 10 ปีในการบำรุงรักษาตามปกติและพวกเขาต้องการในเดือนเดียวราคา $ 20,000 นี่คือข้อ จำกัด ของคุณ ตอบสนองขั้นต่ำในขณะที่ไม่เกินจำนวนสูงสุด การทำเช่นนั้นคือ "ดีพอ" และทำให้คุณได้รับเงินเดือน มันจะเป็นวิศวกรรมที่แย่สำหรับคุณที่จะสร้างสะพานโกลเด้นเกทเกินกว่ารายละเอียดการออกแบบและงบประมาณตามคำสั่งหลายขนาด คุณมักจะจบลงด้วยการกินค่าใช้จ่ายที่มากเกินไปและจ่ายค่าปรับสำหรับการใช้เวลามากเกินไป นอกจากนี้ยังเป็นงานวิศวกรรมที่ไม่ดีสำหรับคุณที่จะสร้างสะพานเชือกที่จัดอันดับโดยน้ำหนักของผู้ชายที่ปลูก 5 คนแม้ว่ามันจะมีราคาเพียง $ 1,000 ในเวลาและวัสดุ คุณไม่ได้รับคำวิจารณ์และคำชื่นชมจากลูกค้าที่ดี

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

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

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

ยิ่งไปกว่านั้นมีหลักการง่าย ๆ ที่รหัสของนักพัฒนาซอฟต์แวร์ทุกบรรทัดเป็นอย่างอื่นที่ผิดพลาดได้ นักพัฒนาน้อยเขียนมีโอกาสน้อยที่เป็นสิ่งที่เขาเขียนมีปัญหา นี่ไม่ใช่คำวิจารณ์ของ "อัตราการผิดพลาด" ของทุกคน มันเป็นคำแถลงความจริงง่ายๆ คุณอาจรู้วิธีการเขียน MergeSort ไปข้างหลังและส่งต่อใน 5 ภาษา แต่ถ้าคุณอ้วนเพียงหนึ่งตัวระบุในหนึ่งบรรทัดของรหัสเรียงทั้งหมดไม่ทำงานและถ้าคอมไพเลอร์ไม่ได้จับมันอาจนำคุณ ชั่วโมงในการแก้ปัญหา ตรงกันข้ามกับ List.Sort (); มันมีประสิทธิภาพในกรณีทั่วไปและนี่คือสิ่งที่ดีที่สุดใช้งานได้แล้ว

ดังนั้นคุณสมบัติมากมายของแพลตฟอร์มที่ทันสมัยและหลักการของวิธีการออกแบบที่ทันสมัยจึงถูกสร้างขึ้นโดยคำนึงถึงสิ่งนี้:

  • OOP - สร้างข้อมูลและตรรกะที่เกี่ยวข้องลงในวัตถุและที่ใดก็ตามที่แนวคิดของวัตถุนั้นถูกต้องดังนั้นมันจึงเป็นวัตถุหรือการสืบทอดพิเศษ
  • เทมเพลตที่สร้างไว้ล่วงหน้า - รหัสที่ดี 60% หรือมากกว่านั้นคือ cruft ด้านการสร้างประโยคและพื้นฐานของการทำให้โปรแกรมแสดงบางอย่างบนหน้าจอ ด้วยการสร้างมาตรฐานและการสร้างรหัสนี้โดยอัตโนมัติคุณสามารถลดปริมาณงานของผู้พัฒนาได้ครึ่งหนึ่งจึงช่วยเพิ่มผลผลิต
  • ไลบรารีของอัลกอริธึมและโครงสร้างข้อมูล - ดังที่กล่าวข้างต้นคุณอาจรู้วิธีเขียน Stack, Queue, QuickSort และอื่น ๆ แต่ทำไมคุณต้องทำเมื่อมีไลบรารีของรหัสที่สร้างขึ้นทั้งหมดนี้ คุณจะไม่เขียน IIS หรือ Apache ใหม่เพราะคุณต้องการเว็บไซต์ดังนั้นทำไมจึงใช้อัลกอริทึม QuickSort หรือวัตถุต้นไม้สีแดงสีดำเมื่อมีการใช้งานที่ยอดเยี่ยมหลายอย่าง
  • อินเทอร์เฟซ Fluent - ตามบรรทัดเดียวกันคุณอาจมีอัลกอริทึมที่กรองและเรียงลำดับระเบียน มันเร็ว แต่ก็ไม่สามารถอ่านได้มาก มันต้องใช้นักพัฒนาจูเนียร์ของคุณเพียงวันเดียวเพื่อทำความเข้าใจกับมันทำให้การเปลี่ยนแปลงการผ่าตัดจำเป็นต้องจัดเรียงในฟิลด์เพิ่มเติมในวัตถุบันทึก แต่ไลบรารี่เช่น Linq จะแทนที่โค้ดที่น่าเกลียดมากซึ่งมักจะเปราะบางด้วยการเรียกเมธอดที่กำหนดค่าได้หนึ่งหรือสองบรรทัดเพื่อเปลี่ยนรายการของวัตถุให้กลายเป็นวัตถุที่ถูกกรองเรียงลำดับและถูกฉาย

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

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

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

8

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

ยิ่งไปกว่านั้นรหัสที่สวยงามและสง่างามนั้นอยู่ในสายตาของคนดูแต่สำหรับ บริษัท / ผู้จัดการส่วนใหญ่การมีการออกแบบที่ดีพอตรงเวลานั้นมีความสำคัญมากกว่ารหัสที่สวยงาม แต่ไม่เคยทันเวลา

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


3
"รหัสที่สวยงามและสง่างาม" เทียบกับ "enuogh ที่ดี แต่ตรงเวลา" เป็นขั้วที่ผิดพลาด ทำให้เสร็จได้ตรงเวลาหากการออกแบบของคุณง่ายและการออกแบบที่เรียบง่ายเท่ากับการออกแบบที่สวยงาม เท่านั้นที่เรียบง่ายไม่ได้หมายความว่าง่าย
Pillmuncher

1
@pillmuncher ใช่ฉันเห็นด้วยกับฉันรหัสที่สวยงามนั้นเรียบง่าย (แต่ไม่ง่ายกว่า) แต่น่าเสียดายที่หลักฐานเป็นอัตนัย / ญาติ "การออกแบบที่เรียบง่ายเท่ากับการออกแบบที่สวยงาม" ไม่ใช่การยืนยัน แต่เป็นความคิดเห็น (ความคิดเห็นที่นิยมมากที่ฉันเห็นด้วย 100% แต่ยังคงเป็นความคิดเห็น) สิ่งที่ไม่ได้เป็นความเห็นคือกำหนดการความต้องการและค่าใช้จ่าย ข้อ จำกัด เหล่านั้นมีแนวโน้มที่จะนำไปสู่การออกแบบที่ดีพอสำหรับข้อ จำกัด ที่กำหนด
อาร์มันโด

"[1] มันดูเหมือนว่าคุณกำลังทำไอทีอยู่และไม่ใช่ CS และนั่นไม่ควรหมายความว่า CS นั้นตายแล้ว [2] CS นั้นยังไม่ตายนั่นคืองานส่วนใหญ่อยู่ในการพัฒนาซอฟต์แวร์" คำสั่งแรกของคุณถูกต้อง - OP อยู่ในไอทีและไม่ใช่ CS ฉันมีปัญหากับคำแถลงที่สองของคุณอย่างไรก็ตามมีหลายคนที่เรียกว่า "นักวิทยาศาสตร์คอมพิวเตอร์" ก็ทำซอฟต์แวร์ dev เช่นกัน มันเรียกว่า "การวิจัยและพัฒนา" และตัวอย่างอาจเป็นของนักวิทยาศาสตร์คอมพิวเตอร์ที่กำหนดแก้ไขและพิสูจน์ความถูกต้องของอัลกอริทึมการกำหนดเส้นทางผ่านทอพอโลยีเครือข่ายบางอย่างจากนั้นดำเนินการ "เป็นทางการ" หรือต้นแบบการใช้งาน
Bill VB

8

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

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


มันยังไม่ใช่จากสิ่งที่ฉันอ่านที่นี่ โรงเรียนหลายแห่งไม่สอนวิศวกรรม แต่สอนภาษา นั่นเท่ากับการสอน Autocad ให้กับนักศึกษาวิศวกรรมโยธา
Michael K

@Michael: ยังไม่เห็นมหาวิทยาลัยที่ดีทำเช่นนั้น
vartec

1
ฉันไปที่ RIT มันอยู่ในอันดับสูงและยังค่อนข้างเส็งเคร็ง ไม่มีโรงเรียนสอนการเขียนโปรแกรมที่ถูกต้องเพราะมันไม่สามารถทำได้ในเวลาเพียงสี่หรือห้าปีในบริบทของหลักสูตรอื่น ๆ
Jon Purdy

4

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

วิศวกรรมซอฟต์แวร์ (เช่นวิศวกรรมอื่น ๆ ) เป็นเรื่องเกี่ยวกับการใช้วิทยาศาสตร์เพื่อสร้างผลิตภัณฑ์แก้ปัญหา ฯลฯ วิทยาศาสตร์คอมพิวเตอร์เป็นหลักเกี่ยวกับการวิจัยในอัลกอริทึมและ (แม้ว่าส่วนนี้มักจะค่อนข้างลืม) วิธีการใช้อัลกอริทึมเหล่านั้น - เช่นอาจถือเครื่อง PRAM ทั้งหมดให้เทียบเท่ากัน)

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

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

การวิจัยและพัฒนากว่า 50 ปีได้ให้ผลตอบแทนแล้ว - การพัฒนาทั่วไปส่วนใหญ่ไม่เพียง แต่ใช้อัลกอริธึมที่รู้จักเท่านั้น ปัญหาทั่วไปส่วนใหญ่สามารถแก้ไขได้ค่อนข้างสมเหตุสมผลตามความรู้ที่มีอยู่ (และแม้กระทั่งการใช้งานที่มีอยู่) ของอัลกอริทึม

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


1

การพัฒนาซอฟต์แวร์และวิทยาการคอมพิวเตอร์นั้นไม่เหมือนกันและฉันพบว่าเพื่อนร่วมชั้นเรียนส่วนใหญ่ใน วท.บ. โปรแกรม Comp Sci รู้สึกผิดหวังกับสิ่งนี้

ฉันคิดว่าซอฟต์แวร์เป็นผลิตภัณฑ์ของวิทยาศาสตร์คอมพิวเตอร์ ... เช่นภาพวาดเป็นผลิตภัณฑ์ทางทัศนศิลป์

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

ฉันคิดว่าความแตกต่างเริ่มปรากฏเมื่อมีปัญหาหรือกระบวนทัศน์ใหม่ปรากฏขึ้นหรือเมื่อ "ตบมันเข้าด้วยกัน" ไม่ดีพอ ใครเป็นผู้สร้างเฟรมเวิร์กหรือภาษาใหม่ ใครจะนั่งลงและดูรายละเอียดของเครื่องมือฟิสิกส์ใหม่? ใครบ้างที่ใช้ทฤษฎีกราฟ / การแปลงกราฟเพื่อปัดเศษสองสามรอบต่อการวนซ้ำของประสิทธิภาพจากอัลกอริทึม

ฉันจะจบที่จุดเริ่มต้นโดยยอมรับว่ามีนักวิทยาศาสตร์คอมพิวเตอร์จำนวนมากในบทบาทการพัฒนาซอฟต์แวร์ / วิศวกรรมบางทีอาจไม่ได้มีศักยภาพ


1

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


0

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

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

ดูเหมือนว่าปัญหากับพนักงานและไม่เป็นความจริงสำหรับโปรแกรมเมอร์ทุกคน

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


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

0

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

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


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

@Veaviticus: การใช้เฟรมเวิร์กอาจไม่ใช่ทฤษฎีทางวิชาการที่ล้ำยุค แต่ก็ยังคงเป็น CS อยู่อย่างแน่นอน
DeadMG

0

ดีตายหรือไม่เป็นที่ถกเถียงกัน!

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

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

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

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

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


0

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


0

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

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

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