Khoa học máy tính có phải là máy tính không? = Kỹ thuật phần mềm có phải là lý do để dạy lập trình kém không?


23

Tất cả chúng ta đã nghe nó; Bất cứ khi nào có một cuộc thảo luận về học sinh lớp CS có kỹ năng phát triển kém, cuối cùng cũng có người nói,

Khoa học máy tính không phải là kỹ thuật phần mềm.

Vấn đề mà tôi thấy là lập trình và phát triển phần mềm được dạy trong các khóa học CS. Họ chỉ thường được dạy kém. Nếu nó được dạy, thì tại sao không dạy nó ngay lần đầu tiên? *

Vì vậy, tôi muốn xem ý kiến ​​về 2 câu hỏi:

  1. Là CS! = SE tranh luận một khoản đồng thanh toán hoặc lý do cho việc không dạy đúng kỹ năng lập trình.

  2. Bất kể câu trả lời của bạn cho câu hỏi 1; nếu bạn ở vị trí toàn năng khi đưa ra quyết định như vậy: bạn có nhấn mạnh vào việc giảng dạy lập trình đúng đắn trong các khóa học CS không?

*. Tôi có một sự nghi ngờ, dựa trên bằng chứng giai thoại tôi có được trong suốt quá trình học, rằng hầu hết các học giả trong lĩnh vực này không phải viết mã để được duy trì và không duy trì mã, và kết quả là không có kiến ​​thức / kỹ năng để dạy nó một cách hiệu quả.


7
Tôi sẽ làm rõ nhận xét của tôi; trong suy nghĩ của tôi, chúng khác nhau (CS! = SE). Vì vậy, nếu tôi thay thế CS và SE bằng 2 trường khác A, B, trong đó A! = B, bạn có thể nhận được một cái gì đó như Bài học Bowling! = Lịch sử Nhật Bản. Sau đó, đối số của bạn trở thành: BL! = JH có phải là lý do để không dạy JH đúng cách không? Đây là một câu hỏi ngớ ngẩn, và nên được bác bỏ. Nếu bạn thấy một sinh viên CS không biết tại sao bạn sử dụng hàm băm trên danh sách được liên kết, anh ta sẽ được dạy kém. Nếu bạn thấy một lớp CS làm mã tái cấu trúc công việc kém, điều đó có thể được miễn.
Jeremiah Nunn

2
@Jeremiag Nunn: Để sử dụng phép loại suy của bạn: Lịch sử Nhật Bản không được dạy song song với bowling. Tôi đang đưa ra lập luận rằng mọi chương trình CS, trên thực tế đều dạy lập trình và họ sử dụng đối số "CS! = SE" để bào chữa cho việc dạy nó tốt.
Steven Evers

2
Một suy nghĩ khác: việc thiếu các kỹ năng SE trong một lớp CS cụ thể là lỗi của trường học hay học sinh? Trong mỗi lớp, bạn có khả năng có một kỹ năng khá rộng trải rộng từ có năng lực đến kinh khủng.
Adam Lear

2
@SnOrfus Kỹ thuật phần mềm là nghề thủ công xây dựng phần mềm. Khoa học máy tính là lý thuyết đằng sau phần mềm. Biết cả hai là lý tưởng, nhưng họ vẫn tách biệt. Một sự tương tự tốt hơn (IMO) so với @ Jeremiah sẽ là một trong những công cụ xây dựng so với việc chơi chúng.
dash-tom-bang

5
Các chú thích về các học giả không phải viết mã có thể duy trì là gần như chính xác điểm. Đó không phải là điều CS quan tâm.
dash-tom-bang

Câu trả lời:


27

Tôi không nghĩ đó là một khoản đồng thanh toán, mà là một sự khẳng định rằng khoa học máy tính không phải là công nghệ phần mềm, nó không phải là lập trình - đó là khoa học về tính toán chính thức. Về bản chất, đó là toán học (trên thực tế, nhiều chương trình CS bắt đầu như các chương trình toán học ứng dụng).

Tôi nghĩ vấn đề nằm ở ngành công nghiệp nhiều hơn là học thuật. Ngành công nghiệp nhìn thấy bằng cấp CS được liệt kê trên sơ yếu lý lịch và nghĩ, "Tuyệt vời, anh chàng này tốt với máy tính" và thuê anh ta làm bất cứ điều gì liên quan đến máy tính: CNTT, lập trình, phát triển phần mềm, bất cứ điều gì. Những điều đó không nhất thiết phải nằm trong lĩnh vực chuyên môn của một sinh viên tốt nghiệp CS. Đổi lại, rất nhiều người thích xây dựng máy tính hoặc chơi trò chơi điện tử tham gia một chương trình CS mong muốn làm điều đó và nhận được một sự ngạc nhiên thô lỗ; tức là, rất nhiều sinh viên tham gia CS không thực sự thuộc về nơi đó, và sẽ tốt hơn trong một chương trình cấp bằng được nhắm mục tiêu hơn.

Thứ hai, có một thời gian rất hạn chế để dạy CS - một môn học rất rộng - trong một chương trình giảng dạy đại học điển hình. Chương trình đào tạo đại học của tôi có 8 khóa CS (đối với BA) hoặc 12 khóa CS (đối với BS), cộng với tất cả các khóa học toán bắt buộc. Đó không phải là nhiều thời gian để dạy CS , toán học lập trình kỹ thuật phần mềm, vì vậy, tại một số điểm, bạn phải quyết định điều gì quan trọng và những gì học sinh có thể tự mình học hỏi.

Điểm cuối cùng đó rất quan trọng: Tôi nghĩ rằng một học sinh giỏi - trong bất kỳ môn học nào - sẽ tự mình khám phá ý tưởng. Tôi có một mức độ CS, nhưng tôi nghĩ rằng tôi đã tốt nghiệp đại học như một nhà phát triển đàng hoàng, bởi vì tôi đã nghiên cứu và viết phần mềm trên của riêng tôi . Đại học không phải là tất cả về các lớp học; đó cũng là về việc cho sinh viên thời gian để phát triển kỹ năng bán tự chủ, trong khi vẫn đưa ra hướng dẫn có giá trị.

Tôi khẳng định rằng việc giảng dạy lý thuyết - CS, toán, vv - cũng quan trọng, nếu không muốn nói nhiều hơn nữa quan trọng hơn là kỹ năng làm việc liên quan đến giảng dạy cụ thể. Nếu bạn dạy một học sinh lý do đằng sau các phương pháp và kỹ thuật, và không chỉ là những gì , bạn sẽ kết thúc với một người dễ thích nghi hơn nhiều khi áp dụng kiến ​​thức của mình. Ví dụ, tôi đã đi đến một "trường Java" sai lầm và do đó được dạy bằng Java, nhưng tôi cũng có các khóa học về lý thuyết ngôn ngữ lập trình, điều này giải thích lý do đằng sau nhiều ngôn ngữ; kết quả là, tôi đã học cách viết phần mềm tốt hơn nhiều so với việc tôi không có nền tảng đó. Chắc chắn, tôi không viết phần mềm bằng Haskell trong công việc hàng ngày của mình, nhưng biết nhiều lý thuyết ngôn ngữ lập trình đã cho phép tôi hiểu rõ hơn về điều đóđã được áp dụng cho công việc của tôi như là một lập trình viên.

Tôi cũng nghĩ rằng ngành công nghiệp đang mong đợi quá nhiều từ sinh viên đại học. Ngành công nghiệp muốn cắt giảm chi phí của chính mình, vì vậy thay vì đào tạo những tân binh cho công việc của họ, họ hy vọng các trường cao đẳng sẽ trở thành trường thương mại / kỹ thuật; thực tế, họ muốn các trường đại học đào tạo họ. Sinh viên tốt nghiệp đại học không thể mong đợi để biết mọi thứ mới ra khỏi trường đại học. Trở thành một nhà phát triển giỏi cũng nhiều về kinh nghiệm cũng như về kiến ​​thức (đặc biệt là trong một lĩnh vực tương đối trẻ như phát triển phần mềm).


Đây chính xác là suy nghĩ của tôi, nhưng giải thích tốt hơn nhiều so với câu trả lời của tôi.
Jeremiah Nunn

+1: Rất nhiều thứ hay ho ở đây, tôi ghét chọn 1 thứ, nhưng xem xét rằng CS có nguồn gốc là toán học ứng dụng, không có nghĩa là tầm quan trọng của ứng dụng của nó - trong trường hợp này là lập trình?
Steven Evers

2
@SnOrfus: Trong phạm vi mà lập trình được áp dụng toán học, vâng. Nhưng cũng giống như khoa học máy tính! = Kỹ thuật phần mềm, lập trình! = Kỹ thuật phần mềm.
mipadi

1
@David Thornley: Đầu tiên, bản thân tôi và tất cả mọi người tôi từng biết, người đã sử dụng vật lý học đã sử dụng dao động khi nghiên cứu sóng. Tuy nhiên, sự tương tự không giữ. Học sinh đã được dạy lập trình như là một phần của bằng CS. Bạn là, tôi là, tất cả chúng ta đã tham dự một sự không kiên định là. Nó thậm chí không phải là một phần của một khóa học. Đây là một phần không thể thiếu của ít nhất 1-2 lớp mỗi học kỳ.
Steven Evers

2
+1 để giải thích rằng trường học (cao đẳng, đại học, bất cứ điều gì) nên dạy bạn cách câu cá và không chỉ cho bạn câu cá
Emiliano

25

Một phần của vấn đề ở đây là thực tế là 4 năm không đủ thời gian để trở thành một kỹ sư phần mềm bóng bẩy. Vì chúng tôi muốn sinh viên đại học tiếp xúc với nhiều thứ hơn là chỉ các môn toán và CS và thực tế là có rất nhiều cơ chế thuần túy để học (thuật toán, cấu trúc dữ liệu, cú pháp ngôn ngữ), chúng tôi không thể mong đợi một chuyên ngành CS xanh một kỹ sư phần mềm.

Tôi đồng ý rằng CS! = SE và tôi không chắc bạn có thể đi học và trở thành SE (ngay cả với một Master)


+! 1: Tôi thấy quan điểm của bạn, nhưng đó không chỉ là 'đánh bóng'. Nhiều người thiếu một số kỹ năng rất cơ bản.
Steven Evers

Tôi đoán nó phụ thuộc vào những gì bạn xem xét các kỹ năng rất cơ bản. Ví dụ, SQL là một kỹ năng cơ bản trong tâm trí của tôi nhưng tôi đã tìm thấy điểm CS của tôi thực sự khá yếu trong đó và tôi nghĩ đó là điều được mong đợi. Nếu bạn đang nói rằng họ yếu về cú pháp ngôn ngữ hoặc mô đun cơ bản hoặc các khái niệm OOP thì đó là một vấn đề lớn và tôi sẽ bắt đầu tìm kiếm học sinh tốt nghiệp từ các trường khác nhau
bigtang

Tôi đã lập trình chuyên nghiệp được 14 năm. Tôi đã xem SQL và thậm chí có thể tạo ra các truy vấn cơ bản, nhưng ngay cả những kỹ năng cơ bản này cũng chỉ xuất hiện trong năm ngoái. SQL không phải là CS. SQL là một triển khai của lý thuyết cơ sở dữ liệu, đó là CS.
dash-tom-bang

@ dash-tom-bang: Bạn có xem các câu lệnh điều khiển trong các ngôn ngữ bắt buộc là cơ bản không? Tôi có thể xác nhận rằng có tồn tại bằng cấp tổng hợp các sinh viên CS mới mà không biết phần lớn trong số họ.
Steven Evers

Tôi sẽ không coi việc thực hiện kiểm soát dòng chảy trong bất kỳ ngôn ngữ cụ thể nào là một trong những "điều cơ bản của Khoa học Máy tính". Tuy nhiên, nếu ai đó không hiểu kiểm soát dòng chảy như một khái niệm thì họ đã không học CS.
dash-tom-bang

10

CS thực tế không phải là SE. Và mọi người dường như luôn luôn thổ lộ hai người, ngay cả khi thừa nhận điều đó. Khoa học máy tính thực sự nên được đổi tên thành một cái gì đó như Computology, hay khoa học máy tính. Trong thực tế, khoa học máy tính có rất ít liên quan đến máy tính. Đó là lý thuyết đồ thị, phân tích thuật toán, cấu trúc dữ liệu, v.v.

Mọi người muốn giả sử một sinh viên CS mới thực sự là một sinh viên tốt nghiệp ITT; họ muốn một người đã được đào tạo trong một ơn gọi. Khoa học máy tính là khoa học, lập trình là một nghệ thuật. Những điều này không giống nhau.

Điều này giống như hỏi tại sao một sinh viên tốt nghiệp Vật lý mới không phải là một kỹ sư xe hơi giỏi. Thật ngớ ngẩn.


2
Lập trình là một nghề thủ công, không phải là một nghệ thuật.
dash-tom-bang

6
Lập trình là thủ công, gắn kết nghệ thuật.
Maciej Piechotka

2
Tôi sẽ không đổi tên nó. Khoa học máy tính, nhưng khoa học máy tính là gì? nói cách khác, nghiên cứu về máy tính, trong đó ngụ ý nghiên cứu tính toán.
Michael K

1
Nên đổi tên vì mọi người nhầm lẫn về nó như bạn. Bạn có biết Edsger W. Dijastra? ông từng nói, "khoa học máy tính không hơn gì máy tính so với thiên văn học là về kính viễn vọng". :)
la ó

1
Nghệ thuật tạo nên cái đẹp; thủ công tạo ra tiện ích. Nghệ thuật được tạo ra cho vẻ đẹp của nó; craft được tạo ra cho tiện ích của nó. Nghệ thuật có thể hữu ích; nghề có thể là đẹp. Kỹ thuật phần mềm tạo ra tiện ích; do đó, Kỹ thuật phần mềm là một nghề thủ công.
systemovich

8
  1. Ít nhất là ở Hoa Kỳ, giáo dục nói chung đã trở thành lợi nhuận. Các trường học đang giảm bớt chương trình giảng dạy trên toàn hội đồng để tăng tuyển sinh. Có nhiều người ở trường đại học không thuộc về nơi đó hơn bao giờ hết. Học các kỹ thuật phù hợp không phải là thứ bạn có thể dạy dễ dàng vì vậy chúng không.
  2. Cá nhân tôi sẽ nhấn mạnh vào SE nhiều hơn bình thường nhưng tôi tin rằng CS là một chương trình ít phù hợp hơn với những người muốn tham gia vào ngành công nghiệp. Tôi nghĩ rằng nhiều tổ chức nên cung cấp một chương trình SE thực tế.

+1 cho # 1. Tôi nhận thấy điều này khi tôi đi học. Đó là một trường học vì lợi nhuận và tôi cảm thấy rằng nhiều sinh viên không đủ điều kiện để ở đó. Ngoài ra, trường chỉ nhận được tiền cho mỗi khóa học và không có sinh viên đồng nghĩa với việc họ không nhận được tiền từ họ nữa, vì vậy, thường thì các giáo viên đã cố gắng vượt qua sinh viên. Chúng tôi đã có ít nhất một người tốt nghiệp với bằng cấp của họ, người mà tôi không nghĩ có thể viết chương trình Hello World bằng ngôn ngữ họ chọn!
Rachel

kể từ khi bạn chạm vào hệ thống Giáo dục Hoa Kỳ và vai trò của lợi nhuận, đây là một hợp xướng Milton Friedman bắt buộc: youtube.com/watch?v=W3Seg0JE1PM
Công việc

7

Là CS! = SE tranh luận một khoản đồng thanh toán hoặc lý do cho việc không dạy đúng kỹ năng lập trình.

Số CS không phải là SE. Đó là một thực tế, không phải là một cái cớ.

Bất kể câu trả lời của bạn cho câu hỏi 1; nếu bạn ở vị trí toàn năng khi đưa ra quyết định như vậy: bạn có nhấn mạnh vào việc giảng dạy lập trình đúng đắn trong các khóa học CS không?

Không. Nó sẽ giống như buộc các nhà thiên văn học tìm hiểu các chi tiết của việc xây dựng kính viễn vọng. Hoặc buộc các lập trình viên phải học các chi tiết xây dựng máy tính. Những thứ liên quan, nhưng một người đàn ông không cần biết tất cả mọi thứ.


6

Vâng, điều này nghe có vẻ như là một cảnh sát đối với tôi và là dấu hiệu của sự non nớt của CS như một môn học.

Một chương trình BS được Hiệp hội Hóa học Hoa Kỳ công nhận đòi hỏi bạn phải vượt qua các khóa học cụ thể để chứng minh trình độ thành thạo cụ thể về cả lý thuyết (lớp giảng bài) và thực hành (lớp học trong phòng thí nghiệm). Hiện tại, CS không có gì như vậy theo như tôi biết.

Một trong những học giả tốt nghiệp của tôi là một nhà lý thuyết tháp rất ngà, văn phòng của anh ta không bao giờ bị sàm sỡ với bất kỳ hóa chất vật lý nào hơn một bể cá với Magic Rocks, nhưng khi tôi là TA cho sinh viên năm nhất, anh ta cũng tỏ ra là một nhà hóa học băng ghế dự bị khá giỏi .

Khi tôi làm việc như một nhà hóa học sơn công nghiệp, họ đã cười phá lên với ý nghĩ rằng tôi có bằng cử nhân và không đủ năng lực trong phòng thí nghiệm. Tất nhiên các chi tiết về những gì tôi đang làm trong phòng thí nghiệm khác với những gì tôi đã có trong các phòng thí nghiệm ở trường, nhưng các nguyên tắc là như nhau - chúng tôi chỉ sử dụng một máy trộn sơn và một cái hộp, thay vì một cốc và máy khuấy từ .

Nếu một người áp dụng cách tiếp cận tương tự với CS, chi tiết về những gì người ta có thể dạy là kỹ năng phát triển phần mềm thực tế cho chương trình giảng dạy CS / SE có thể khác nhau giữa các trường và theo thời gian. Nhưng điều này nghe có vẻ điên rồ với tôi rằng có thể chấp nhận được rằng ai đó có thể có được bằng cấp trong lĩnh vực này và không đủ khả năng viết, gỡ lỗi và duy trì một số loại mã. (Tất nhiên, đó là cách mọi thứ thực sự có trong nhiều chương trình CS, nhưng nó vẫn điên rồ.)


Nó không điên, nó là một dịch bệnh. Khoảng 90% mã mà tôi đã thấy được viết bởi các đồng nghiệp của mình có thể duy trì được như tháp nghiêng Pisa.
Marcel Valdez Orozco

5

Tôi đồng ý rằng 4 năm chỉ đủ thời gian để cung cấp cho họ một nền tảng tốt để phát triển. Tuy nhiên, tôi nghĩ một điều thực sự hữu ích là khi mọi người trong ngành tham gia vào việc phát triển chương trình giảng dạy và thậm chí là giảng dạy trong lớp học. Năm ngoái, tôi là thành viên ngành Công nghiệp trong lớp Phát triển phần mềm tại một trường đại học địa phương. Đó là một kinh nghiệm rất mở mắt đối với tôi. Giáo sư và tôi đã làm việc cùng nhau về nội dung khóa học và chúng tôi đã cung cấp thêm nhiều thông tin về quá trình phát triển, thực tiễn tốt nhất trong ngành và các tình huống "thế giới thực" mà họ đã làm trước đây. Những gì chúng tôi phát hiện ra là, bởi vì hầu hết các giảng viên không phát triển mã được sử dụng và duy trì rộng rãi, mang lại một người nào đó từ ngành công nghiệp đã giúp xác định và dạy các kỹ năng cần thiết để làm điều đó.


Tôi rất thích thử một cái gì đó như thế.
ChaosPandion

Bạn nên liên hệ với trường đại học địa phương của bạn và xem nếu họ có một cái gì đó giống như nó. Bạn đang ở đâu?
Beth Whitezel

3
  1. Vâng, đó là một khoản đồng thanh toán 100%, họ nên dạy các kỹ năng dài hạn sẽ hữu ích trong suốt sự nghiệp của chúng tôi. Cho dù ý định của bạn là đi vào học viện hay ngành công nghiệp, bạn sẽ cần có khả năng lập trình theo cách có thể được duy trì, ngay cả khi chỉ có một mình bạn.

  2. Vâng, mặc dù nó sẽ chỉ được nhấn mạnh trong các khóa học thích hợp. Cá nhân, nếu tôi phải nói chuyện với bạn để hiểu rõ hơn về cách bạn đã cố gắng thực hiện một thuật toán, tôi sẽ đánh dấu điểm của bạn.

Ngay cả khi bạn đi nghiên cứu CS thuần túy, bạn có thể sẽ phải tạo mã để thể hiện ý tưởng của mình. Kỹ năng lập trình phù hợp sẽ hữu ích cho bạn tại một số điểm, vậy tại sao không bắt đầu vào đại học.


Các kỹ năng dài hạn là CS. "Java" không phải là một kỹ năng dài hạn, cũng không phải là .NET, SQL, Pascal hay COBOL. Trừ khi "dài hạn", bạn có nghĩa là "vui mừng vì bạn có một công việc khi họ cần ai đó để duy trì các hệ thống di sản đó".
dash-tom-bang

Mặc dù tôi đồng ý rằng các kỹ năng cơ bản (CS) là cần thiết, tôi có nghĩa là viết mã có thể duy trì và dễ đọc bất kể ngôn ngữ lập trình được viết bằng ngôn ngữ nào.
JustJohn

1
IMHO CS là cần thiết để có thể tiếp cận vấn đề phức tạp hơn, nhiều người ở đây, không cần bằng CS để viết mã, nhưng nếu bạn cần xử lý ma trận 10 x 10 triệu dữ liệu và thao tác với nó, tôi không thể tìm ra cách một SE có thể xử lý nó mà không cần bằng CS.
la ó

3

Tôi nghĩ vấn đề của chúng tôi là chúng tôi giống các bác sĩ hơn là chúng tôi sẵn sàng thừa nhận ... Chúng tôi có ý tưởng rằng bằng cấp bốn năm nên chuẩn bị cho sinh viên viết phần mềm. Nó thậm chí không gần gũi.

Nghề nghiệp của chúng tôi chủ yếu là trong giai đoạn trứng nước so với các ngành khác. Có lẽ câu hỏi nên là: làm thế nào chúng ta có thể cải thiện CS để các sinh viên tốt nghiệp với bằng cấp đó phù hợp hơn để trở thành thành viên hiệu quả của nhóm phát triển phần mềm trong thế giới thực trong khoảng thời gian ngắn hơn nhiều?

Có lẽ chúng ta nên giống như thuốc hơn. Bốn năm làm việc cơ bản (bằng CS) và sau đó là cư trú - thực hành thủ công dưới sự giám sát của một kỹ sư phần mềm giàu kinh nghiệm hơn. Có lẽ đó là những gì chúng ta đã có, nhưng nó ít trang trọng hơn ... Ý tôi là, giống như một cư dân, chúng ta học các kỹ năng quý giá nhất tại nơi làm việc trong những công việc đầu tiên.

Có lẽ như kỷ luật chúng ta chỉ cần chính thức hóa điều này tốt hơn.


Hoặc chương trình Master Craftsman / Apprentice
Austin Salonen

1
Chương trình MD không phải là một chương trình khoa học. Bạn muốn nghiên cứu khoa học, bạn lấy sinh học. Tuy nhiên, nếu bạn có một vấn đề y tế, bạn không nên đưa nó đến một nhà sinh vật học.
David Thornley

Đây là một ý tưởng rất hay: chính thức hóa thực tế rằng Kỹ thuật phần mềm cũng là một vấn đề kinh nghiệm. Điều tương tự cũng áp dụng cho luật sư và bác sĩ
Emiliano

Nhưng chúng ta đang nói gì về David? Có bao nhiêu người trong chúng ta tốt nghiệp với bằng CS và sau đó thực sự dành sự nghiệp của mình để làm "Khoa học máy tính"? Điều mà hầu hết chúng ta thực sự làm là đi ra thế giới và thực hành thủ công Phát triển phần mềm. Nó giống như một MD: họ "thực hành" thuốc. Chúng tôi thực hành xây dựng ứng dụng.
Chris Holmes

@Chris Holmes: Tôi thực sự khó chịu với ý tưởng rằng bằng cấp CSci có nhiệm vụ biến bạn thành một lập trình viên sẵn sàng thuê một công việc bằng ngôn ngữ nóng bỏng mới nhất. Có rất nhiều chỗ cho loại bằng cấp hoặc chứng chỉ đó, có lẽ nhiều hơn CSci thực tế. Tôi nghĩ rằng phát triển phần mềm tương tự như thực hành y khoa ở đây, nhưng bạn không nhận được MD từ khoa sinh học hoặc tâm lý học, bạn có được nó từ trường y. Đó là một mức độ rất được tôn trọng, nhưng nó không phải là bằng tiến sĩ.
David Thornley

3

Tôi có bằng CS, và trong cả năm chương trình của tôi không có lập trình, chỉ có lý thuyết. Chúng tôi đã nói rằng chúng tôi không nhận được bằng lập trình mà về Khoa học Máy tính. Nếu bạn muốn trở thành một lập trình viên hãy học đại học cộng đồng.

Chúng tôi đã học về các thuật toán, các mẫu thiết kế và rất nhiều lý thuyết về việc giải quyết các vấn đề mà không cần một ngôn ngữ không gian. Ngôn ngữ lập trình đến và đi, nhưng lý thuyết gạch chân vẫn giữ nguyên.

Vì vậy, với câu hỏi đầu tiên của bạn, không, tôi không cảm thấy CS! = SE là một khoản đồng thanh toán. Đó là thực tế.

Đối với câu hỏi thứ hai của bạn, không, tôi không nghĩ rằng tôi sẽ làm. Làm thế nào để bạn thích hợp dạy lập trình? Ngoài các vòng lặp, if, phương thức, lớp và OOP, điều gì sẽ là 'lập trình phù hợp' và làm thế nào bạn có thể làm cho nó phù hợp với bất kỳ ngôn ngữ lập trình nào ngoài kia? Bạn cần có kinh nghiệm viết mã, một cái gì đó mà bằng cấp 4 năm không thể chuẩn bị cho bạn.

Một điều tôi sẽ làm là cung cấp một lớp học về Phát triển trong thế giới thực. Kiểm soát nguồn, theo dõi vé / lỗi, theo dõi mã, và tất cả những gì jazz sẽ là một khởi đầu tốt để chuẩn bị tất cả sớm được tốt nghiệp cho những gì họ sẽ phải đối mặt trong công việc mới.

Tôi nghĩ rằng đó là vào chúng tôi khi chúng tôi thuê một sinh viên mới để hiểu rằng họ có thể sẽ không viết mã giành giải thưởng. Họ cần hướng dẫn và định hướng.


++ - điểm xuất sắc. Sẽ thật tuyệt nếu các giáo trình CS đã cung cấp một hoặc hai lớp về thứ "thế giới thực" này, tôi đồng ý. Chúng tôi đã nói về nó tại trường đại học của tôi (năm 1993) nhưng nó không bao giờ đi đâu cả.
dash-tom-bang

Làm thế nào bạn được mong đợi để chứng minh sự thành thạo của bạn trong các lớp học tạo nên năm không có lý thuyết chỉ lập trình? Thi viết đơn thuần?
Carson63000

@ Carson630000 - bài tập viết, đôi khi viết sơ đồ trạng thái, đôi khi viết ra các bài tiểu luận biểu thị cách chúng ta sẽ tiếp cận và giải quyết vấn đề hoặc cách chúng ta áp dụng các khái niệm CS khác nhau. Nó buộc chúng tôi phải hiểu lý thuyết và không phải là một ngôn ngữ lập trình cụ thể.
Tyanna

2

Điều quan trọng là trường đại học phải đạt được sự cân bằng tốt giữa kiến ​​thức lý thuyết và kỹ năng thực tế. Trong khi tham dự các khóa học khác nhau, tôi đã học cả hai. Trong những năm đầu tiên, có rất nhiều toán học và thuật toán / cấu trúc dữ liệu. Điều tiếp theo là một lựa chọn: hoặc bạn có thể tiếp tục học khoa học máy tính (loại con đường nghệ thuật, ví dụ bạn có thể tham dự các khóa học với thuật toán khớp chuỗi tinh vi) hoặc tập trung vào công nghệ phần mềm. Bạn vẫn phải có được một số nền tảng lập trình vững chắc trong thời gian này.

Tôi đã chọn công nghệ phần mềm, bởi vì tôi không bao giờ quan tâm đến các vấn đề trừu tượng. Nhưng ngay cả những người thích khoa học máy tính thuần túy cũng phải:

  • lập trình hệ thống tệp nhỏ trong không gian người dùng, tạo linuxmô-đun hạt nhân và sửa đổi chính hạt nhân, viết một trò chơi hướng đối tượng thuần túy vào SmallTalk,
  • viết giao thức giao tiếp riêng và sau đó thực hiện một giao thức, được giáo viên chọn (thật tuyệt, khi các chương trình của hai học sinh có thể dễ dàng giao tiếp, mặc dù trước đó họ không hợp tác),
  • tạo một dự án lớn hơn Javatrong một nhóm gồm bốn
  • xây dựng một số dự án lập trình chức năng,
  • viết một số chương trình vững chắc Cđể lập trình song song (các ý tưởng là trừu tượng, nhưng các đánh giá khá khắc nghiệt, như mất điểm vì không cung cấp đầu ra thích hợp, khi chương trình thất bại, như một unix tốt programnên làm),
  • tạo một cổng thông tin web bằng cách sử dụng một số khung web (chúng tôi đã chọn django, điều này khiến tôi yêu thích khung này),
  • tạo một chương trình khá lớn bằng cách sử dụng LAMP(tôi vẫn gặp ác mộng php, nhưng được sử dụng postgresqlthay vì MySQLvà tôi rất vui khi biết điều này DBMSngay bây giờ),
  • và nếu ai đó chọn, anh ta có thể viết một chương trình cho luận án thạc sĩ của mình - tôi đã viết pythonchương trình máy tính để bàn 10k bằng cách sử dụng PyQt.

Có thể có những dự án khác, nhưng tôi đơn giản là đã quên chúng ngay bây giờ.

Quan điểm của tôi là: tất cả phụ thuộc vào trường học. Tôi không thích cách tiếp cận kỹ thuật phần mềm thuần túy, Javangôn ngữ chính ở đâu. Tôi đã phải giúp một người bạn một lần, người học trường như vậy và phải viết một số chương trình để lập trình song song. Tôi đã phải viết nó cho anh ta về cơ bản, bởi vì anh ta mặc dù, rằng sizeof(some_string)trong Ccho chiều dài của chuỗi.

Tôi sẽ thành thật: Tôi ghét toán học, tôi đau đớn, khi tôi phải chuẩn bị cho các nhiệm vụ trừu tượng, sẽ được phục vụ trong các bài kiểm tra thuật toán / cấu trúc dữ liệu. Nhưng nó mang lại cho tôi một khía cạnh nhất định: tôi có thể suy nghĩ theo một cách rất trừu tượng. Giống như khi bạn học võ thuật và không giữ gìn sự cảnh giác của mình (ít nhất là ở những nơi mà bạn phải đến). Huấn luyện viên chỉ tiếp tục đến và đánh vào đầu bạn, khi bạn hạ tay xuống, vì bạn quên hoặc vì bạn mệt mỏi để giữ họ lại. Nhưng sau một thời gian, bạn chỉ cần giữ chúng lên. Và nó trở nên thực sự khó khăn để đánh vào mặt bạn. Tương tự với các vấn đề thuật toán trừu tượng. Hiểu nội dung của Giới thiệu về Thuật toán và thực sự sẽ có vài điều bất ngờ trong công việc.


Âm thanh như một chương trình tốt. Một số lý thuyết. Rất nhiều thực hành.
Mike Dunlavey

1

Tôi nghĩ rằng câu trả lời là có (theo một cách nào đó).

Vấn đề là không thể dạy cho trẻ em trong một khoảng thời gian ngắn lập trình. Họ nên nghĩ cho các lập trình viên suy nghĩ logic, cách giải quyết (ở quy mô nhỏ hơn) các vấn đề của lập trình viên.

Tôi chắc chắn các chương trình của trường học nên được sửa đổi, tôi là quốc gia "thế giới thứ ba" rất nhỏ của tôi, may mắn thay, một nỗ lực đang được thực hiện để điều này xảy ra. Chúng tôi là quốc gia đầu tiên triển khai chương trình OLPC; http: // l mỏi.org / vi /


1

Từ kinh nghiệm của bản thân (hiện tại tôi đang là sinh viên), tôi phải nói có, đó là một cái cớ. Mọi người đều nhắc đến CS như một môn khoa học dạy cho chúng ta tất cả những điều cơ bản của máy tính và SE là một nhánh đặc biệt trong CS được dạy lập trình rõ ràng. Imo, tất cả mọi người có BS trong CS, đều phải biết cách viết mã tốt và tối ưu hóa (ngay cả khi lập trình không phải là lĩnh vực chuyên môn của anh ấy / cô ấy). Vì vậy, có, nếu tôi có một vị trí toàn năng khi đưa ra quyết định như vậy, tôi sẽ buộc các sinh viên có được kỹ năng lập trình tốt.


Bằng cấp của tôi có tiêu đề Khoa học máy tính và Kỹ thuật phần mềm, và được thiết kế để cung cấp cho bạn những điều tốt nhất của cả hai thế giới, tức là một lập trình viên có năng lực, và biết đủ lý thuyết để có thể đi học hoặc nghiên cứu. Tôi nghĩ rằng đó là một cách tiếp cận tốt.
Michael K

1

Giả sử mục tiêu là giáo dục các kỹ sư phần mềm (lập trình viên) giỏi vì thế giới cần họ, liệu có ổn không khi trả lời bằng cách nói những gì tôi nghĩ nên được dạy?

Thứ nhất, điều này rất quan trọng vì hiện tại việc chuyển giao kiến ​​thức rất kém hiệu quả. Khi các lập trình viên tương lai ở trong các lớp học, tâm trí của họ được mở và họ tiếp thu những gì họ được dạy. Đồng thời, các giáo sư (tôi là một) tất cả thường rất quan tâm đến việc lấp đầy đường ống của trường sau đại học với những sinh viên có thể làm việc về các chủ đề bí truyền. Khi sự phản đối được nêu ra rằng các sinh viên không được chuẩn bị cho các vấn đề trong thế giới thực, tôi đã thấy các giáo sư cho rằng đó không phải là công việc của họ . Đó là công việc của thế giới thực.

Vậy thì khi sinh viên trở thành lập trình viên trong thế giới thực, họ có háo hức học hỏi từ những đồng nghiệp mới không? Không theo kinh nghiệm của tôi. Thay vào đó, họ mong muốn truyền bá bất cứ tin lành nào họ có được ở trường. Tôi nhớ khi còn là một sinh viên và một học viên trẻ nghĩ rằng sẽ khó khăn thế nào khi thúc đẩy những ý tưởng mới giữa những chú chó lông xù cũ ngoài kia. Bây giờ tôi là một chú chó lông xù già nua, tôi thấy thật khó để mở mắt cho các lập trình viên mới về sự khác biệt giữa lý thuyết và thực hành.

Tôi là một sinh viên kỹ thuật, trong ngành cơ khí và sau này là kỹ sư điện. Một phần cơ bản của điều đó là a) nền tảng toán học và b) giải quyết vấn đề thực tế. Kỹ thuật phần mềm nên như thế, không chỉ lập trình.

Tôi nghĩ rằng kỹ thuật phần mềm (lập trình) nên được dạy với đủ khoa học máy tính để trở thành một kiến thức làm việc - lý thuyết tự động cơ bản và lý thuyết thông tin. Những điều này không cần phải được thực hiện ở độ sâu lớn. Sau khi các kỹ năng lập trình cơ bản được dạy, nên có các dự án hợp tác có quy mô không cần thiết. Một phần thiết yếu trong số này phải là đề xuất và xem xét các giải pháp thay thế cho các vấn đề cụ thể, với phân tích ưu và nhược điểm, không chỉ là tôn giáo mới nhất hay "điều lớn tiếp theo" hay phù hợp với một kích cỡ. Cuối cùng, cần có sự hợp tác và hợp tác giữa ngành công nghiệp và học viện, để các ý tưởng và cải tiến có thể được truyền đạt theo cả hai cách, giúp tăng cường đáng kể việc kiểm soát chất lượng.


0

Những người có thể, làm được; những người không thể, dạy

Tại trường đại học của tôi, nền tảng kiến ​​thức của các giáo viên bị thiếu hụt trầm trọng. Tôi đã thấy các giáo viên đấu tranh để hiểu cách biểu diễn các bảng bán cấu trúc trong XML trong khi giữ PHD trong Thiết kế cơ sở dữ liệu. Tôi đã thấy giáo viên hội của tôi hỏi tôi mã của tôi đang làm gì khi đó là đoạn mã của anh ấy tôi đã sao chép và dán. Tôi đã thấy giáo viên thiết kế phần mềm của mình nói với chúng tôi phương pháp Agile giống như phương pháp thác nước, chỉ nhanh hơn, mô hình quy trình phát triển lặp có và chỉ có thể có 3 lần lặp vì đó là hình ảnh mà cuốn sách sử dụng như ví dụ mô tả. Một trong những giáo viên của tôi thậm chí còn không biết một tuyên bố khác là gì.

Tôi không tin rằng họ đang 'đối phó', hoặc đưa ra lời bào chữa, tôi thực sự tin rằng họ đang làm tốt nhất có thể với kinh nghiệm của họ, thứ mà họ có rất ít.

Tôi đồng ý với những người khác đăng ở đây rằng 4 năm không đủ để trở thành một lập trình viên dày dạn kinh nghiệm, nhưng kinh nghiệm mà các giáo viên của tôi có cũng không đủ để khiến họ dày dạn kinh nghiệm. Nó giống như trong Bóng tối của Ender, nơi Bean nhận thấy các số liệu được sử dụng bởi các giáo viên trong trường chiến đấu bị rút ngắn vì cuộc chiến cuối cùng là quy tắc hướng dẫn, quá ngắn để thực sự hiển thị những gì thực sự cần thiết. Nói cách khác, các giáo viên đã làm tốt nhất có thể, nhưng không có kinh nghiệm để biết điều gì thực sự cần thiết để làm một chỉ huy giỏi (hoặc lập trình viên giỏi trong trường hợp này).


3
Tôi nghĩ rằng nhiều ví dụ của bạn rõ ràng chỉ là những trường hợp mà giáo viên của bạn đang cố gắng đơn giản hóa mọi thứ vì lợi ích của bạn. Those that can, do; those that cannot, teach.Tôi cũng không đồng ý với điều này: sự nghiệp học thuật và công nghiệp dẫn đến lối sống hoàn toàn khác nhau. Phần lớn nghiên cứu của thế giới đến từ các học giả. Và tôi không thấy bất cứ cách nào mà bạn trả lời câu hỏi ban đầu.
Không ai vào

2
XML có liên quan gì đến thiết kế cơ sở dữ liệu, bên cạnh thực tế là người ta có thể nếu một người không quan tâm đến hiệu suất, sử dụng XML làm kho lưu trữ dự phòng cho cơ sở dữ liệu? Không phải nói rằng một số giáo viên có thể bỏ lỡ điểm (tôi nhớ đã tranh luận với một người hướng dẫn về những điểm bị loại bỏ do "bình luận quá mức" khi chương trình giảng dạy đến thời điểm đó đã dạy "bình luận như gió") nhưng nó quá cường điệu. Nếu ai đó muốn học Java, có nhiều cách để làm điều đó rẻ hơn là thông qua chương trình giảng dạy CS.
dash-tom-bang

1
Cũng có một thực tế là một số trường đại học tồi tệ hơn những trường khác và bạn có thể có một bộ phận CS đặc biệt tồi tệ. Theo truyền thống, những người CS có bằng tốt nghiệp có thể kiếm được nhiều tiền hơn trong ngành so với học viện, vì vậy những người trong học viện là những người thực sự muốn ở đó và những người không thể giữ một công việc trong thế giới thực. Tôi đã nhìn thấy cả hai, và nghi ngờ tỷ lệ khác nhau giữa các trường đại học.
David Thornley

@ dash-tom-bang, XML là một ví dụ gần như hoàn hảo về cơ sở dữ liệu bán cấu trúc. vi.wikipedia.org/wiki/Semi-structured_model
Malfist

1
XML được sử dụng như thế này vẫn là một triển khai của lý thuyết cơ sở dữ liệu. Nó không phải là lý thuyết.
dash-tom-bang

0

Các nhà khoa học máy tính và kỹ sư phần mềm là khác nhau. Nhà khoa học là những người thực hiện các thí nghiệm điên rồ và đưa ra các thuật toán mà các Kỹ sư phần mềm của chúng tôi tận dụng để trở nên tốt hơn.

Hãy nghĩ về các nhà hóa học tiến hành thí nghiệm cho một công ty dược phẩm. Họ không quan tâm làm thế nào để sản xuất hàng loạt hóa chất. Họ cũng không quan tâm đến tiếp thị, đóng gói, phân phối hoặc bất cứ điều gì xảy ra với thuốc sau khi họ phát hiện ra nó. Địa ngục họ thậm chí không quan tâm đến quá trình chứng nhận. Tất cả những gì họ quan tâm là tìm ra một hóa chất có tác dụng khi đưa cho đối tượng thử nghiệm. Công ty có trách nhiệm di chuyển nó vượt ra ngoài điều đó.

Các nhà khoa học máy tính giống như những nhà hóa học. Tất cả những gì họ làm là kiểm tra lý thuyết với mã. Họ không quan tâm đến việc duy trì mã như thế nào. Họ chứng minh một lý thuyết và chuyển sang kế tiếp. Một số người khác gói thuật toán lên và làm cho nó hữu ích cho đại chúng và chúng tôi có MP3 hoặc thị giác máy tính với Kinect hoặc phát trực tuyến video trên iPhone của bạn. Vậy CS! = SE là một đối số hợp lệ.

WRT phần thứ hai của câu hỏi của bạn. Nếu tôi cung cấp một mức độ về Lý thuyết âm nhạc, có thể có một khóa học bắt buộc về sáng tác hoặc một cái gì đó, nhưng sẽ không yêu cầu bất cứ ai học một nhạc cụ. Học sinh phải tìm kiếm kiến ​​thức mà họ muốn. Khoa học máy tính không phải là Kỹ thuật phần mềm ... nếu bạn muốn học SE, hãy học gấp đôi.


0

Edsger Wybe Dijkstra là một nhà khoa học máy tính người Hà Lan.

Ông đã nhận được giải thưởng Turing năm 1972 cho những đóng góp cơ bản để phát triển ngôn ngữ lập trình , từng nói:

"KHOA HỌC MÁY TÍNH KHÔNG CÓ THÊM VỀ MÁY TÍNH HƠN ASTROMY LÀ VỀ ĐIỆN THOẠI."

CS THỰC SỰ KHÁC BIỆT TỪ MỘT SE. (CS! = SE).

Một CS là một nhà khoa học đã có được kiến ​​thức về KHOA HỌC MÁY TÍNH.

KHOA HỌC MÁY TÍNH hoặc khoa học máy tính (đôi khi viết tắt CS) là nghiên cứu về nền tảng lý thuyết của thông tin và tính toán và các kỹ thuật thực tế để triển khai và ứng dụng trong các hệ thống máy tính. Nó thường được mô tả như là nghiên cứu có hệ thống về các quy trình thuật toán tạo ra, mô tả, và biến đổi thông tin.

Khoa học máy tính có nhiều lĩnh vực phụ chẳng hạn:

  • Khoa học máy tính lý thuyết
  • Lý thuyết tính toán
  • Thuật toán và cấu trúc dữ liệu
  • Yếu tố và kiến ​​trúc máy tính
  • Đa xử lý
  • Khoa học tính toán
  • Trí tuệ nhân tạo
  • Hệ thống phần mềm

Nhiều người trong chúng ta không cần bất kỳ kỹ năng này trong công việc hàng ngày hoặc ít nhất là một chút về nó.

PHẦN MỀM PHẦN MỀM (SE) là một nghề chuyên thiết kế, triển khai và sửa đổi phần mềm để có chất lượng cao hơn, giá cả phải chăng hơn, có thể bảo trì và xây dựng nhanh hơn. Đó là một "cách tiếp cận có hệ thống để phân tích, thiết kế, đánh giá, thực hiện, kiểm tra, bảo trì và tái thiết kế phần mềm bằng cách áp dụng kỹ thuật vào phần mềm"

Là một kiến ​​thức CS, anh ta cho rằng có kiến ​​thức để quản lý vấn đề thực sự phức tạp mà không biết bất kỳ ngôn ngữ lập trình thực sự tốt nào. IMHO ở đây chúng ta có thể mở một chủ đề khác, trong đó DEGREE đối với tôi CHỈ LÀ MỘT ĐIỂM BẮT ĐẦU và không phải là MỤC TIÊU KẾT THÚC.

Vì kiến ​​thức SE, anh ta cho rằng có kiến ​​thức để quản lý việc sản xuất vấn đề phức tạp thực sự này và quản lý sự phát triển của một nhóm hoặc một dự án về lĩnh vực này.

Cùng nhau thực hiện nghiên cứu về khoa học được thực hiện bởi một CS trong Khoa học ứng dụng với sự giúp đỡ của SE.

Ý tôi không phải là CS tốt hơn SE, ý tôi là CS! = SE.

Loại câu hỏi này là câu hỏi tương tự mà những người không sử dụng máy tính hỏi chính họ khi hỏi bạn tại sao, là lập trình viên, bạn không thể khắc phục bằng điện thoại sự cố của chương trình X, Y, Z trên hệ điều hành J, M, N ;)

Trên thực tế tôi thực sự chán mã hóa sau 10 năm phát triển hệ thống unix trong lĩnh vực bảo mật và sau khi đọc câu hỏi này, tôi nhận được điểm, tôi cần nghiên cứu thêm về khoa học máy tính và ít ngôn ngữ máy tính và hệ thống máy tính hoặc giao thức!

Không ai trong công việc của tôi có thể xử lý sự khác biệt về SE và CS! Đó thực sự là một điều xấu.

Nếu bạn nghĩ rằng một CS có thể là một cái cớ cho kỹ năng lập trình tồi thì bạn thực sự đang bỏ lỡ quan điểm về việc đó là CS và SE là gì.

Tôi cho rằng bạn là SE, bạn có biết ví dụ rằng tất cả ngôn ngữ, tất cả các mô hình và tất cả các thứ liên quan đến ngôn ngữ máy tính đều có thể được biểu diễn bằng toán học trong một tập hợp hàm đệ quy một phần và bất cứ điều gì bạn học một ngôn ngữ mới, BẤT K LAN NGÔN NGỮ MỚI, bạn chỉ học một sự trừu tượng mới về hàm đệ quy CÙNG?

chúc vui vẻ :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.