เหตุใด Java จึงเป็นภาษากลางที่สถาบันหลายแห่ง [ปิด]


22

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

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

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

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

เป็นเรื่องน่าอายที่บางคนที่มี PHD ใน CS จากสถาบันที่นับถือไม่สามารถเขียนโปรแกรมออกจากถุงกระดาษได้

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

โดยรวมแล้วฉันรู้สึกว่าฉันไม่สามารถเคารพปริญญาใด ๆ ได้อีกต่อไป - เมื่อฉันไม่เห็นคนรอบตัวฉันสามารถเขียนโปรแกรมของพวกเขาให้พ้นจากปัญหา fizzbuzz

ทำไมถึงเป็นเช่นนี้?


9
ไม่ต้องกังวล ให้โอกาสกับออราเคิลครึ่งหนึ่งและพวกเขาจะแก้ไขสถานการณ์ :) คดีฟ้องร้องกับ Android และ Apache เป็นเพียงจุดเริ่มต้นของการผลักดันนักพัฒนาออกไป ฉันสอนที่สถาบันการศึกษาที่ได้กล่าวมาข้างต้นเพื่อเป็นจุดเริ่มต้นในการสอน Python เพื่อคาดการณ์ตลาดในอนาคต
SamGoody

3
คุณหมายถึงการตั้งค่าทางวิชาการใด ฉันไม่รู้เลยว่าที่ไหนที่นักเรียน CSci คาดหวังว่าจะได้เรียนรู้เพียงภาษาเดียว (ล่าสุดฉันอยู่ในโรงเรียนคุณจะได้รับกับ C และ Scheme ฉันคิดว่าถ้าคุณเลือกวิชาเอกและชั้นเรียนอย่างระมัดระวัง แต่คุณต้องใช้ภาษาที่แตกต่างกันอย่างน้อยสองภาษา)
David Thornley

16
คุณสามารถอธิบายวิธีการทำงานของแคช L1 ได้หรือไม่ คุณสามารถออกแบบ ALU ได้ไหม คุณช่วยอธิบายสมการของ Maxwell ได้ไหม? คุณสมบัติทางอุณหพลศาสตร์ของเมนบอร์ดของคุณเป็นอย่างไร? คุณสามารถสร้างไดรฟ์ USB ได้หรือไม่ คุณรู้หรือไม่ว่าคอมพิวเตอร์ของคุณทำงานอย่างไร หรือคุณเลือกระดับของนามธรรมที่เหมาะสมสำหรับความสนใจของคุณและไปจากที่นั่น?
MetricSystem

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

7
นอกจากนี้ถ้าใครมีข้อโต้แย้งคนฟางที่นี่เป็นคุณฉันไม่เคยได้ยินของโปรแกรม CS เดียวซึ่งนำเสนอ Java เป็นภาษาการเขียนโปรแกรมเท่านั้น
MetricSystem

คำตอบ:


30

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

สิ่งสำคัญของคุณเกี่ยวกับการเก็บขยะทำให้ฉันเล็กน้อย เว้นแต่ว่าคุณกำลังทำคอลเลกชันขยะ C หรือ C ++ โดยทั่วไปแล้วจะดีมากและไม่ใช่ปัญหา คุณอยากให้ทุกคนเรียนรู้การชุมนุมไหม ภาษาระดับสูงที่เข้มงวดจะมีประโยชน์มากสำหรับการสอน มันให้ความยืดหยุ่นแก่คุณในการใช้งานห้องสมุดแพคเกจและสิ่งอื่น ๆ เมื่อคุณต้องการโดยไม่ต้องมีภาษา "น้ำตาล" ที่สับสนในภาษาระดับสูงอื่น ๆ (PHP, Ruby, Python, Perl)


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

3
@Billy: ลงต่ำกว่าระดับการเรียนรู้เริ่มต้นของคุณเป็นเรื่องยาก ฉันพบว่าตัวเองกำลังดูรหัส C ++ / C และมีเวลาสนุกห่อหัวของฉันไปรอบ ๆ อย่าคาดหวังปาฏิหาริย์ แต่อย่าคาดหวังว่าเหล่าทูตสวรรค์ด้วย โปรแกรมเมอร์จำเป็นต้องมีไดรฟ์โดยที่พวกเขาจะ"กระเด็นและตาย"อย่างรวดเร็วไม่ว่าปัญหาจะอยู่ในระดับใดก็ตาม
Josh K

5
@ จอช: ยุติธรรมเพียงพอ แต่การสัมผัสอย่างเป็นทางการของ IMHO อย่างน้อยหนึ่งสภาพแวดล้อมการเขียนโปรแกรมอื่น ๆ ควรจะต้องได้รับปริญญา CS ระดับไม่ได้พูดว่า "ฉันเข้าใจ Java" มันบอกว่า "ฉันเข้าใจ CS" ทั้งสองไม่เหมือนกันและคุณไม่สามารถเข้าใจ CS อย่างสมบูรณ์โดยใช้ Java (หรือภาษาใด ๆ ก็ตาม ) เพียงอย่างเดียว (BTW, +1)
Billy ONeal

2
@JoshK: การไม่สามารถแก้ไขข้อบกพร่องในระดับต่ำและความสามารถที่ลดลงอย่างมากในการให้เหตุผลที่เหมาะสมเกี่ยวกับผลกระทบของรหัสที่พวกเขาเขียน
Mason Wheeler

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

12

มหาวิทยาลัยกำลังทำสิ่งนี้จริงๆหรือ หรือนี่เป็นเพียงการรับรู้ของผู้คนที่ได้รับเมื่อพวกเขาสมัครงานสัมภาษณ์ที่ไม่ดี?

ฉันได้รับปริญญา CS เมื่อ 4 ปีที่แล้วและในขณะที่ Java ถูกใช้ในชั้นเรียนอินโทรมันไม่ได้เน้นเป็นพิเศษหลังจากนั้น วิชาหลักที่จำเป็นสำหรับคุณคือการเรียนรู้ Java, C, C ++, SML (ภาษาโปรแกรมการทำงาน), การประกอบ, matlab และ CAST (ภาษาคำอธิบายวงจร) สิ่งนี้ไม่ได้คำนึงถึงหลักสูตรคณิตศาสตร์และทฤษฎี CS ทั้งหมดและแน่นอนหลักสูตร CS ครึ่งวิชาเลือกที่จะทำให้คุณสัมผัสได้ถึงความเป็นกลุ่มมากกว่า จากการพูดคุยกับเพื่อน ๆ ในมหาวิทยาลัยหลายแห่งมันไม่ได้ดูเหมือนว่าสิ่งที่พวกเขากำลังทำนั้นแตกต่างกันมาก

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


2
ตกลง ฉันเพิ่งสำเร็จการศึกษาเมื่อไม่กี่ปีที่ผ่านมาและในขณะที่ชั้นเรียนส่วนใหญ่สอนโดยใช้ Java มันยากที่จะสำเร็จการศึกษาโดยไม่เรียนในชั้นเรียนที่ใช้ C หรือ C ++ และเรายังมีหลักสูตรภาษาโปรแกรมที่เน้นการใช้ Haskell .
mipadi

ในระดับของฉันเราทำ Pascal ก่อนจากนั้น Java เป็นภาษา OO ของเรา ปีที่ผ่านมา 2 แม้ว่า 90% ของ profs ไม่สนใจภาษาที่คุณใช้ พวกเราบางคนใช้ c / c ++ / ruby ​​/ C # / python / แม้จะมีคำสั่ง แต่คนส่วนใหญ่ติดอยู่กับสิ่งที่พวกเขารู้จาวา มีเพียงไม่กี่หลักสูตรที่ต้องใช้แอสเซมบลี / c / c ++ เช่นกราฟิก 3 มิติของเรา (ตัวเลือก) แน่นอนว่าบังคับใช้ c / c ++ สำหรับ opengl และแน่นอนว่าระบบพื้นฐานบังคับใช้การชุมนุม SPARC (เพราะเราตั้งใจทำงานและอยู่ในระดับต่ำ) ฉันได้ยินว่าพวกเขาย้ายไปที่ python / c ++ ในปีที่ 1 ในขณะนี้แม้ว่า ....
Aren

11

ฉันประหลาดใจจริงๆนี่เป็นสถานการณ์ที่โรงเรียนหลายแห่ง เมื่อฉันได้รับปริญญา CS ของฉันฉันมีชุดภาษาต่าง ๆ ที่รวมอยู่ในภาษายอดนิยมของวันนี้ (เกือบ 40 ปีที่แล้ว): แอสเซมเบลอร์ (Univac 1108 และ MIX), FORTRAN IV, SNOBOL4, COBOL, Lisp และอัลกอล 68. ฉันนึกภาพออกไม่ได้ว่ามีแค่ภาษาเดียวที่กำลังสอนอยู่ หรือฉันจะชื่นชมสิ่งที่คอมไพเลอร์ต้องทำโดยไม่ต้องเขียนโปรแกรมแอสเซมเบลอร์บ้าง

เราใช้ Algol และ FORTRAN สำหรับหลักสูตรข้อมูลและอัลกอริธึมส่วนใหญ่ ฉันชอบที่จะใช้เวลากับ Lisp - แทนที่จะเป็นแค่การแนะนำและตอนนี้ฉันกำลังพยายามที่จะเรียนรู้แนวคิดบางอย่างอีกครั้ง เราใช้ SNOBOL4 เพื่อเขียน parsers - และการจับคู่รูปแบบกับ backtracking ได้สร้างรากฐานที่ดีสำหรับการทำงานในภายหลังห้องสมุด regex ที่มาพร้อมกับภาษาสมัยใหม่จำนวนมาก

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


8

เพื่อให้ได้เหตุผลที่แท้จริงคุณจะต้องถามคนที่ดูแลสถาบันเหล่านั้น (และแม้ว่าพวกเขาจะไม่บอกคุณ)

มีหลายเหตุผลที่เป็นไปได้ (และฉันไม่ได้ป้องกันหรือกล่าวหาใครที่นี่แค่เดา):

คุณสามารถทำสิ่งต่าง ๆ ใน Java

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

อาจารย์จำนวนมากเข้าใจ Java

เป็นการยากที่จะสอนภาษาที่คุณไม่เข้าใจ

Java เป็นที่นิยม

ซึ่งหมายความว่ามีทรัพยากร Java มากมาย - หนังสือชุมชนที่ใช้งานอยู่ไลบรารีรหัส ฯลฯ

Java นั้นง่าย

คุณไม่จำเป็นต้องเข้าใจสิ่งต่าง ๆ หรือทฤษฎีระดับต่ำเพื่อทำ Java คุณอาจทำไม่ได้ดีแต่อย่างน้อยคุณก็สามารถทำสิ่งต่าง ๆ ได้

Java แพร่หลาย

คุณสามารถเรียกใช้ได้ทุกอย่าง

มีงานสำหรับโปรแกรมเมอร์ Java

มีงานจำนวนมากที่ต้องการ Java - ครูควรเตรียมนักเรียนให้พร้อมสำหรับโลกแห่งความจริง

มีเวลา จำกัด

ในหลายหลักสูตรไม่มีเวลาที่จะสอนหลายภาษาทฤษฎีแนวความคิดระดับต่ำและอื่น ๆ

มันเป็นสิ่งที่นักเรียนต้องการ

นักเรียนจำนวนมากเคยได้ยิน Java (และใช้อยู่แล้ว) มาแล้ว พวกเขาชอบเพราะคุ้นเคย


6

นั่นคือสิ่งที่อุตสาหกรรมร้องขอ มีการขาดแคลนนักพัฒนา Java ดังนั้นโรงเรียนเริ่มสร้างพวกเขา บริษัท ต่างๆมีนักพัฒนาที่สามารถเริ่มทำงานได้ทันทีที่พวกเขาเดินผ่านประตู

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

GC เป็นหนทางแห่งอนาคต


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

1
CS ไม่ได้เกี่ยวกับการเขียนโปรแกรม
Javier

1
@ จาเวียร์: CS ไม่เกี่ยวกับการเขียนโปรแกรมอย่างไร แน่นอนว่ามีสาขาของ CS "วิทยาศาสตร์คอมพิวเตอร์เชิงทฤษฎี" ซึ่งไม่เกี่ยวกับการเขียนโปรแกรม แต่ส่วนใหญ่เป็นเรื่องเกี่ยวกับการเขียนโปรแกรม
Billy ONeal

1
@Billy ONeal: คำนิยามของวิกิพีเดียมีความยาวเล็กน้อย แต่ส่วนที่ใกล้เคียงกับการเขียนโปรแกรมมากที่สุดคือ "การศึกษาเทคนิคการปฏิบัติเพื่อนำไปใช้งาน" นั่นคือมันไม่ได้เกี่ยวกับการใช้งาน (การเขียนโปรแกรม) แต่การศึกษาเทคนิคการใช้งาน (อัลกอริทึมโครงสร้างภาษา ฯลฯ )
Javier

1
@ จาเวียร์: ฉันคิดว่า "การศึกษาการเขียนโปรแกรม" และ "การกระทำของการเขียนโปรแกรม" เป็นหนึ่งเดียวกัน ท้ายที่สุดแล้วโค้ดจะถูกอ่านบ่อยกว่าที่เขียนไว้ แต่นั่นคือประเด็น - เมื่อคุณได้รับปริญญา CS สิ่งที่คุณจะทำคือการเขียนโปรแกรม
Billy ONeal

4

ความเกียจคร้านและแรงจูงใจในการทำกำไร Java ทำให้คนส่วนใหญ่ 80% ของวิธีที่มี 20% ของความพยายาม อย่างไรก็ตามสิ่งนี้มักจะผลิต "ลิงดูลิงทำ" ตัวเขียนโค้ดวูดูที่ไม่เข้าใจอย่างลึกซึ้งถึงสิ่งที่เกิดขึ้นและไม่สามารถขุดได้ลึกกว่าเครื่องมือระดับสูง

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


2
แต่ถ้า yuo เข้าใจพอยน์เตอร์คุณสามารถเข้าใจการอ้างอิงได้ง่ายขึ้น
Michael K

3

ฉันเห็นด้วยส่วนใหญ่ แต่ในระดับหนึ่ง

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

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


ฉันไม่ได้พูดถึงหลักสูตรเดียว สำหรับหลักสูตรเดียวก็ไม่เป็นไร สำหรับหลักสูตรทั้งหมดนั้นไม่ใช่
Billy ONeal

3

เช่นเคยเป็นคำถามของสิ่งที่คุณต้องการสอนและเวลาที่คุณต้องทำ

การทำสิ่งต่าง ๆ ใน Java หมายความว่าคุณไม่ต้องจัดการกับพอยน์เตอร์จรจัดและฟรี / malloc นั่นหมายถึงข้อผิดพลาดที่หายาก

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


สำหรับหลักสูตรการเขียนโปรแกรมเบื้องต้นหรือหลักสูตรโครงสร้างข้อมูล Java นั้นใช้ได้ ไม่ใช่สำหรับหลักสูตร 4 ปีทั้งหมด
Billy ONeal

@Billy ตกลง ฉันแค่พูดถึงว่าการใช้ Java ซื้อบางสิ่งที่คุณไม่ต้องกังวล คุณควรเรียนรู้พื้นฐานในหลักสูตรอื่นโดยไม่มี Java

2

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


1
มีมีโปรแกรมคอมพิวเตอร์ที่ดีว่าวิทยาศาสตร์ไม่รวมถึงหลักสูตร OS และหลักสูตรองค์กรคอมพิวเตอร์?
mipadi

ฉันหวังว่าจะไม่อย่างแน่นอน!
Michael K

0

ในความซื่อสัตย์ฉันไม่คิดว่าคุณควรเคารพทุกองศาและโดยเฉพาะอย่างยิ่งไม่ใช่ CS เพราะภาษาเดียวที่สอนคือ Java

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


-1

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

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


-1

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


1
Erm, Python ต้องการความรู้ที่ใกล้ชิดของประเภทเช่นเดียวกับภาษาอื่น ๆ ที่คุณพูดถึง
Billy ONeal

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

@BillyONeal คุณเข้าใจผิดฉันบริบทคือการจัดสรรหน่วยความจำในประโยคสุดท้ายของฉัน ฉันยังไม่ต้องกังวลเกี่ยวกับขนาดหรือ # ขององค์ประกอบของ str () หรือ dict () หรือ tuple () หรือ list () หรือ list () หรือ set () ... ฉันแค่ 'ใช้' พวกเขา
Ben DeMott

@ kevincline ขอบคุณ Kevin - นี่คือสิ่งที่ฉันพยายามจะข้าม ตัดสินโดย downvotes ที่ฉันจำเป็นต้องทำงานเกี่ยวกับทักษะการสื่อสารของฉัน;)
เบน DeMott

-2

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

แต่แล้วฉันก็ตระหนักว่าฉันชอบสิ่งของระดับสูงมากกว่าเยอะ ฉันชอบ Python มากกว่า C. ฉันชอบ C # และฉันรักนักสะสมขยะ ฉันชอบคณิตศาสตร์และอัลกอริทึมและโครงสร้างข้อมูล แต่ฉันไม่ใช่แฟนตัวชี้โดยเฉพาะ - ฉันสามารถยุ่งกับมันได้ ฉันไม่ต้องการ

ดังนั้นคุณคิดว่ามหาวิทยาลัยควรสอน C มากขึ้นและมี Java น้อยลง คนอื่นคิดว่าพวกเขาควรสอนทุกอย่างในแบบแผน Spolsky จะใช้เวลาทั้งสอง

ใช่มันเป็นความจริงที่การศึกษาระดับปริญญาของมหาวิทยาลัยเป็นเพียงแค่กระดาษแผ่นหนึ่ง แต่ "อย่าปล่อยให้การศึกษาเข้าสู่การศึกษาของคุณ" มีอยู่เสมอ Wikipedia, Stack Overflow, Coursera.org เป็นต้นดูเหมือนว่ามหาวิทยาลัยดั้งเดิมจะมีความสำคัญน้อยกว่า

ถ้าฉันสามารถเรียนจบปริญญาตรีได้ฉันก็จะไปโรงเรียนอื่นฉันจะไม่เรียนวิชาวิศวกรรมไฟฟ้าเลย แต่จะเป็นวิชาคณิตศาสตร์ CS + เล็กน้อยในสาขาฟิสิกส์และภาษาฝรั่งเศส เกาฝรั่งเศส; ฉันควรเรียนต่างประเทศในสวิตเซอร์แลนด์และเรียนรู้ภาษาธรรมชาติ 5 ภาษาในขณะนั้น ฉันจะกลับไปหาคนที่ทำให้ฉันเชื่อมั่นว่าฉันจะต้องเข้าเรียนวิชาเศรษฐศาสตร์ในวิทยาลัยเพื่อที่จะเอาชีวิตรอดในโลกแห่งความเป็นจริงและตบหัวของเขาด้วยหนังสือสะสม Milton Friedman ของฉัน หนังสือเกี่ยวกับเศรษฐศาสตร์ที่ฉันอ่านซึ่งไม่ได้อ่าน) ฉันจะไม่จ่ายเงินสำหรับหนังสือ Freakonomics 1 หรือหนังสือเกี่ยวกับภาษา Perl

ในความเข้าใจย้อนหลังฉันจะทำหลาย ๆ อย่างแตกต่างกัน ทั้งหมดที่ฉันทำได้ตอนนี้และฉันแนะนำสิ่งนี้ให้คุณคือเลือกการผจญภัยของคุณเอง: http://www.codinghorror.com/blog/2008/03/choosing-your-own-adventure.html

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

รับทราบทันทีว่าคุณจะไม่ได้รับเวลาคืนดังนั้นลองใช้อย่างชาญฉลาด


โปรดลงรายละเอียด
งาน

-2

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


-2

ทำไม Java ถึงใช้

สามเหตุผล:

  1. Java ใช้ไวยากรณ์รูปแบบ C โปรแกรมเมอร์หลายคนคุ้นเคยกับมันดังนั้นจึงลดช่วงการเรียนรู้

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

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


1
ยินดีต้อนรับ ดูเหมือนว่าอาจเป็นโพสต์แรกของคุณใน Stack Exchange โปรแกรมเมอร์ โปรดดูที่หน้าคำถามที่พบบ่อยprogrammers.stackexchange.com/faqสำหรับคำแนะนำเกี่ยวกับชื่อเสียงการถามและตอบคำถาม ประเด็นสำคัญคือคำตอบควรให้ข้อมูลไม่ใช่การยั่วยุ หากคุณยืนยันเช่น Java เป็นยุคหินและ Lisp ทันสมัยให้อธิบายว่าทำไม ผู้อ่านหลายคนอาจรู้ว่า Lisp ถูกระบุในปี 1958 และมีอายุน้อยกว่า FORTRAN เพียงเล็กน้อย หากคุณต้องการพูดว่ามีบางสิ่งเกี่ยวกับ Java ที่ใช้ร่วมกับ FORTRAN หรือ Algol ทำให้เกิดการออกแบบและ จำกัด ไว้ให้อธิบาย
DeveloperDon

-3

คำถามของคุณสนับสนุนการค้นพบของบุคคลอื่นที่เขียนบทความว่า Java นั้นเจ๋ง แต่ไม่หนักพอสำหรับการคำนวณทางวิทยาศาสตร์ ฉันคิดว่าเขาควรใช้ Big Decimal กับความละเอียดที่ดีทั้งหมด NANs ฯลฯ และเข้าสู่มันได้

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

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

Java มีพอยน์เตอร์ - เราเรียกมันว่าการอ้างอิง .. String s1 = "Hello"; String s2 = "Hello"; String s3 = new String ("Hello");

s1 และ s2 จะชี้ไปที่วัตถุ String เดียวกัน - ซึ่งเป็นการอ้างอิง s1 == s2, s1.equals (s3) แต่ s1 == s3 เป็นเท็จเพราะ s3 เป็นวัตถุอ้างอิงใหม่ - นี่คือ java คณิตศาสตร์ของการอ้างอิงและฉัน เข้าใจทั้งหมดนี้ขอโทษฉันไม่ต้องการที่จะติดป้ายว่าเป็นคนที่ไม่เข้าใจความซับซ้อนภายใต้การโกหกของตัวชี้เลขคณิตจาก C หรือ C ++


2
การอ้างอิงไม่ใช่ตัวชี้ คุณไม่สามารถใช้เลขคณิตและไม่สามารถใช้เพื่อตีความหน่วยความจำที่ชี้ไปได้อีกครั้ง และแน่นอนไม่ว่าคุณจะต้องการอาศัยอยู่ในโลกที่เก็บขยะมากแค่ไหนความจริงของเรื่องนี้ก็คือโลกนี้ไม่ใช่โลกเก็บขยะ ฉันไม่ได้บอกว่า Java เป็นภาษาที่ไม่ดีหรือคนทั่วไปไม่ควรใช้จาวา ถ้าคุณชอบให้ใช้มันมีหลายสิ่งที่ยอดเยี่ยมมาก ฉันแค่คิดว่ามันไม่เหมาะสมเป็นภาษาเริ่มต้นเพราะมันซ่อนสิ่งที่จำเป็นสำหรับโปรแกรมเมอร์ใหม่ที่จะเข้าใจ
Billy ONeal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.