Sự khác biệt giữa khoa học máy tính và lập trình là gì?


32

Tôi mới về khoa học máy tính và lập trình, và tôi đã tự hỏi, liệu có sự khác biệt giữa khoa học máy tính và lập trình không? và bạn có được chọn chỉ học một trong số họ ở trường đại học, hoặc cả hai không?


42
Thời gian tương tự xấu.
Mike Weller

10
Sự khác biệt giữa kiến ​​trúc và xây dựng là gì?
Oded

6
chúng cách xa nhau như địa chất và đào mương
Steven A. Lowe

27
Khoa học máy tính là những gì bạn phải trả tiền để học. Lập trình là những gì bạn được trả tiền để làm.
jfrankcarr

5
Sự khác biệt là những gì làm cho bạn sử dụng smoothsort thay vì sắp xếp bong bóng.
deadalnix

Câu trả lời:


68

Khoa học máy tính là nghiên cứu về những gì máy tính [có thể] làm; lập trình là thực hành làm cho máy tính làm việc.

Hãy xem các khóa học / giáo trình được cung cấp bởi các trường đại học mà bạn quan tâm để tìm hiểu xem khóa học đó là khóa học CS, khóa học lập trình, một cái gì đó khác (ví dụ Kỹ thuật phần mềm) hoặc thậm chí là sự kết hợp của các điều trên. Nhiều khóa học được quảng cáo là "khoa học máy tính" cung cấp một thành phần lập trình quan trọng, có thể để bạn có thể đưa các phần lý thuyết của khóa học vào thực tế hoặc có thể là vì lợi ích của chúng để bạn có thể học kỹ năng làm chương trình.


1
Câu trả lời rất hay, mặc dù nó không trả lời phần thực tế của câu hỏi;)
back2dos

@ back2dos OK, tôi mở rộng câu trả lời.

Điều quan trọng cần lưu ý là hầu hết các khóa học về Khoa học Máy tính hoàn toàn không liên quan đến CS lý thuyết, TCS ít nhất tách biệt với CS thực tế như CS là từ lập trình.
Ben Brocka

3
Tôi không nghĩ bạn nên buộc CS (mặc dù tên) quá chặt chẽ với máy tính: đầu tiên và quan trọng nhất, đó là nghiên cứu thông tin . Nó chỉ xảy ra rằng thuật ngữ "máy tính" bao gồm hầu hết các công cụ vật lý khác nhau mà chúng ta sử dụng để làm việc với thông tin, vì vậy hầu như mọi nghiên cứu về thông tin sẽ liên quan đến việc lập trình máy tính.
Tikhon Jelvis

Phân loại học có thể phù hợp với sự đơn giản của khoa học thông tin. Nhưng nó không tấn công tôi như một sự phù hợp hoàn hảo theo CS. Hữu ích theo nghĩa đa ngành nhưng CS không thể tách rời một phần về những điều chúng ta có thể làm với máy tính, IMO. Tôi có thể đưa ra định nghĩa của bạn về bất kỳ "máy tính" nào, nói chung hơn, nhưng không phải là định nghĩa về CS.
Erik Reppen

36

Một cảnh báo: 'Khoa học máy tính' đã trở thành một lĩnh vực lầy lội trong thời hiện đại bởi vì (ít nhất là tại Hoa Kỳ) các trường đại học không có bằng cấp về "lập trình". Điều này có nghĩa là những người quan tâm đến lập trình phải đăng ký bằng Khoa học Máy tính và như một phản ứng đối với các chương trình Khoa học Máy tính nhấn mạnh vào lập trình ngày càng nhiều.

Điều đó nói rằng, Khoa học máy tính tự nó là một khoa học toán học mạnh mẽ - Toán học tính toán có thể là một thuật ngữ tốt hơn. Nó liên quan đến việc nghiên cứu lý thuyết đồ thị, độ phức tạp thuật toán, logic hình thức, automata và nói chung bất kỳ cấu trúc logic nào có thể mô tả một phép biến đổi hoặc đáp ứng với các thuật toán đầu vào. Một nhà khoa học máy tính theo nghĩa cổ điển có thể suy luận về các quy tắc chi phối bất kỳ hệ thống máy tính nào (bao gồm cả máy tính hiện đại) mà không nhất thiết phải biết chi tiết thực hiện trên kiến ​​trúc hiện tại. Một nền tảng vững chắc về Khoa học Máy tính cung cấp cho bạn khả năng phát triển (hoặc gọi lại) các thuật toán hiệu quả, có thể mở rộng, dự đoán các mức giảm logic và lý do rõ ràng về những gì có thể điều chỉnh được.

Ngược lại, lập trình là những gì một người làm khi họ sử dụng ngôn ngữ lập trình để biến đổi thuật toán thành thứ mà máy có thể làm. . - và máy có thể đọc được bằng cách viết mã. Một nền tảng vững chắc về lập trình (vì hầu hết các độ CS sẽ cung cấp) cho phép bạn viết mã tốt hơn - trong đó mã 'tốt hơn' dễ hiểu hơn bởi những người khác và thành công hơn trong việc thể hiện thuật toán bạn đang thực hiện.

Tất nhiên, có một lượng lớn nhiễu xuyên âm và mức độ kinh nghiệm cao ở một người sẽ tương ứng mạnh mẽ với kinh nghiệm phát triển ở bên kia - như đã lưu ý, một chuyên viên CS hầu như luôn là một lập trình viên có năng lực, và một lập trình viên dày dạn đã chọn nhiều nguyên tắc của CS. Hãy suy nghĩ Vật lý và Kỹ thuật.

Một cách tốt để ghi nhớ sự khác biệt là: nếu nó yêu cầu máy tính để xem nó có hoạt động hay không - nếu bạn có thể làm điều đó bằng bút chì và giấy, thì đó là Khoa học Máy tính.


4
Aye, câu cuối cùng là chà, phải không? Nó gợi lên hình ảnh của các giáo sư tóc xù với mái tóc rối bù và những ngón tay phấn son vẫy vẫy quanh những tờ giấy da, và đưa ra những câu trích dẫn như "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 về kính viễn vọng". Nếu khoa học cuối cùng không biến nó thành một cỗ máy bằng cách nào đó, thì vấn đề là gì? Nhà thiên văn học trong tâm trí phải của họ không bao giờ nhìn qua kính viễn vọng?
Robert Harvey

Tôi không nghĩ rằng tôi đã từng được yêu cầu "chuyển đổi một thuật toán thành thứ gì đó mà máy có thể làm" trong 30 năm qua. Những gì bạn đang nghĩ về không phải là một lập trình viên, mà là một trình biên dịch.
gnasher729

2
@ gnasher729 Ok, giả sử tôi có thuật toán "Đối với mỗi từ trong danh sách, nếu nó bắt đầu bằng chữ A, hãy di chuyển từ đầu." Trình biên dịch nào bạn muốn giới thiệu?
shanef22

18

Khoa học máy tính liên quan đến nền tảng lý thuyết của thông tin, tính toán và với các kỹ thuật thực tế để thực hiện và ứng dụng. http://en.wikipedia.org/wiki/Computer_science

~

Khoa học máy tính không phải là về máy tính nhiều hơn thiên văn học là về kính viễn vọng. Edsger Dijkstra

Lập trình là nghề tạo ra một chương trình máy tính.


11

Khoa học máy tính, theo quan điểm của tôi, được cho là một môn Khoa học cứng như Vật lý.

Nó liên quan đến việc nghiên cứu các trình biên dịch và trình biên dịch, các khái niệm kiến ​​trúc phần cứng, các dạng khác nhau của hệ thống số, thuật toán và hiệu suất / hiệu suất thuật toán và lý thuyết đằng sau các phép toán số học trên bộ xử lý. Khi tôi làm CS ở trường đại học, chúng tôi đã dành rất nhiều thời gian để tìm hiểu về trình biên dịch chương trình, tìm hiểu về sự khác biệt giữa biên dịch, liên kết và phiên dịch, vân vân.

Rất nhiều điều này đã được thực hiện bằng lập trình - đó là hành động viết mã sau đó được biên dịch hoặc chạy thông qua một trình thông dịch, với mục đích tạo ra kết quả để giải quyết vấn đề. Đó là, Lập trình là hành động giải quyết các vấn đề có thể được mô tả bằng kiến ​​thức từ Khoa học Máy tính. Đó là một dạng toán học thuần túy / Toán học ứng dụng.

Bạn không cần bằng Khoa học Máy tính để trở thành lập trình viên, nhưng lập trình viên có nền tảng CS có thể sẽ hiểu sâu hơn về hành vi của các chương trình máy tính.


1
Tôi không nghĩ sinh viên CS giỏi hơn sinh viên các khóa lập trình khác.
Tjaart

5
Tôi đã không nói tốt hơn , tôi nói có khả năng hiểu sâu hơn.
mcfinnigan

@mcfinnigan Tôi muốn nói, nhiều sai lầm. Các sinh viên CS dựa trên lý thuyết có xu hướng ít hiểu biết hơn vì họ thực sự không có kinh nghiệm để biết máy tính có thể làm gì hoặc làm thế nào để đến đó bằng nhiều ngôn ngữ khác nhau.
Izkata

3
một lần nữa, bạn hiểu lầm tôi Tôi đang nói rằng một lập trình viên đã dành thời gian để có được một số lý thuyết CS thực tế có nhiều khả năng biết tại sao một Tập hợp tốt hơn một Danh sách trong một số tình huống nhất định, hoặc tại sao điểm nổi là khó khăn.
mcfinnigan

2
@TikhonJelvis: kỹ thuật sử dụng toán học, nhưng cách đó hai bước. CS là một nhánh của toán học.
kevin cline

3

Tôi sẽ đặt lại câu hỏi của bạn là "Sự khác biệt giữa Khoa học Máy tính và Kỹ thuật Phần mềm là gì?" Sau khi cả hai liên quan đến lập trình.

Khoa học máy tính là nghiên cứu động vật học về tính toán là gì và không thể. Nó nhìn vào những thứ như Định lý Godels và vấn đề Ngừng.

Công nghệ phần mềm là làm thế nào để viết các chương trình làm những gì chúng được thiết kế để làm và có thể duy trì được.


Không. Tại sao phải đặt lại câu hỏi của anh ấy? Anh hỏi anh hỏi gì. Kỹ thuật phần mềm khác với lập trình và cũng gây tranh cãi vì nó có nghĩa là những thứ khác nhau ở các quốc gia khác nhau (ví dụ: Hoa Kỳ và Canada)
Douglas Held

2

Khoa học máy tính là lý thuyết về lập trình. Lập trình là việc thực hiện.

Khoa học máy tính ... là cách tiếp cận khoa học và thực tiễn đối với tính toán và các ứng dụng của nó. Một nhà khoa học máy tính chuyên về lý thuyết tính toán và thiết kế các hệ thống tính toán.

Các trường con của nó có thể được chia thành nhiều lĩnh vực lý thuyết và thực tiễn. Một số lĩnh vực, chẳng hạn như lý thuyết phức tạp tính toán (khám phá các tính chất cơ bản của các vấn đề tính toán), rất trừu tượng, trong khi các lĩnh vực như đồ họa máy tính nhấn mạnh các ứng dụng trực quan trong thế giới thực. Các lĩnh vực khác vẫn tập trung vào những thách thức trong việc thực hiện tính toán. Ví dụ, lý thuyết ngôn ngữ lập trình xem xét các cách tiếp cận khác nhau để mô tả tính toán, trong khi nghiên cứu về lập trình máy tính tự nghiên cứu các khía cạnh khác nhau của việc sử dụng ngôn ngữ lập trình và các hệ thống phức tạp. Tương tác giữa người và máy tính xem xét các thách thức trong việc làm cho máy tính và tính toán trở nên hữu ích, có thể sử dụng và có thể truy cập toàn cầu đối với con người ...


12
Tôi thành thật tin rằng khoa học máy tính là nhiều hơn lập trình.
Ubermensch

2
@Ubermensch: Tôi thành thật tin rằng lập trình không chỉ là khoa học máy tính.
Michael Borgwardt

1
@MichaelBorgwardt Thật ra, cả hai quan điểm của chúng tôi đều đúng. Nhưng khoa học máy tính vẫn lớn hơn nhiều so với lập trình (Bạn cũng có thể tranh luận theo cách khác). Một câu nói nổi tiếng của Niehls Bohr "Có hai loại sự thật, sự thật nhỏ và sự thật vĩ đại. Bạn có thể nhận ra một sự thật nhỏ vì sự đối lập của nó là một sự giả dối. Sự đối lập của một sự thật vĩ đại là một sự thật khác."
Ubermensch

@Ubermensch Niềm tin của bạn là sự thật. Khoa học máy tính KHÔNG chỉ là lý thuyết về lập trình. Khoa học máy tính đã có mặt trước khi máy tính xuất hiện.
Casey Patton

1

Nếu lập trình là nghề mộc, thì khoa học máy tính là kiến ​​trúc / thiết kế.

Chỉnh sửa

Thông tin thêm: trong nghề mộc, bạn quan tâm đến những thứ như thứ gì để xây dựng mọi thứ trong đó (khung, sau đó là nền phụ, rồi tường nội thất, rồi vách thạch cao, v.v.). Làm thế nào để bạn xây dựng nó để mất ít thời gian hơn để xây dựng, nhưng có thể được sửa đổi sau này.

Trong trường hợp kiến ​​trúc (dù sao cũng giống như CS), bạn có quan tâm đến những thứ như khả năng của vật liệu là gì, bạn cần một chùm lớn như thế nào để hỗ trợ nhịp tường / mái này?

Tương tự CS là về khả năng lý thuyết của máy tính, trong đó lập trình là về ứng dụng thực tế của kiến ​​thức đó.


3
Tương tự xấu. Nếu lập trình là nghề mộc thì thiết kế phần mềm là kiến ​​trúc / thiết kế. Khoa học máy tính giống như dendrology ở khía cạnh đó, hoặc có thể là sinh học nói chung.
back2dos

Ok, có lẽ tôi không rõ ràng, vì vậy hãy để tôi giải thích lý do tại sao tôi nghĩ rằng sự tương tự của bạn không hoạt động. Quan tâm đến khả năng của vật liệu là khoa học vật liệu, với sự ổn định của cấu trúc là thống kê. Không ai trong số họ thực sự là những gì thiết kế về, họ chỉ hạn chế nó. Thiết kế (phần mềm hoặc tòa nhà hoặc bất cứ thứ gì) là về việc thực hiện tất cả các yêu cầu và ràng buộc (kỹ thuật, tài chính, tâm lý, ...) và kiến ​​trúc một giải pháp đáp ứng những yêu cầu đó.
back2dos

1

Khoa học máy tính là lập trình như vật lý là kỹ thuật cơ khí.

Khoa học máy tính là lý thuyết, nó cần một cách tiếp cận khoa học và toán học đối với thông tin và đó là tính toán.

Lập trình máy tính là thực tế, nó là quá trình thiết kế, viết, kiểm tra, gỡ lỗi và duy trì mã nguồn của các chương trình máy tính.

Họ khác nhau, nhưng lĩnh vực liên quan. Cả hai đã được hưởng lợi từ nhau.


0

Một văn bằng về khoa học máy tính có phạm vi rộng hơn rất nhiều và bao quát lý thuyết đằng sau điện toán. Một bằng cấp về lập trình máy tính , mặt khác, tập trung vào phát triển các kỹ năng mã hóa hoặc lập trình của sinh viên bằng cách đào tạo họ bằng các ngôn ngữ lập trình khác nhau. Nếu bạn bối rối, bạn có thể duyệt qua các chi tiết của cả hai chương trình này tại California College San Diego. Điều đó có thể cung cấp cho bạn một số sự rõ ràng về phạm vi của các độ!


0

Khoa học máy tính : Đó là nghiên cứu giải quyết vấn đề bằng máy tính / phương pháp tính toán.

Lập trình máy tính: Đây là một phần của quá trình giải quyết vấn đề này tạo nên lĩnh vực khoa học máy tính. Lập trình máy tính chỉ là một tập hợp nhỏ của khoa học máy tính.


-1

Lập trình là về con người. Mọi người đọc, viết và duy trì mã. Khoa học máy tính là về toán học - họ thực hiện và mô tả các thuật toán.


3
@ SK-logic và DeadMG. Tôi đã xóa tất cả những bình luận này. Nếu bạn muốn có một cuộc thảo luận (hoặc thực sự tranh luận), vui lòng mang nó đi nơi khác.
ChrisF

1
Đó là một chút hẹp. Ít nhất, phòng thí nghiệm "Thuật toán, Máy móc và Con người" tại trường đại học của tôi muốn không đồng ý :). Và phòng thí nghiệm đó chứa một số nhà nghiên cứu CS hàng đầu, giai đoạn. Ngoài ra tất cả những người HCI ở khắp mọi nơi. Tôi là một người ít nói, nhưng CS thực sự rộng hơn cả thuật toán và toán học.
Tikhon Jelvis

-1

Lập trình (phát triển) là kiếm tiền. Khoa học là khám phá những điều mới.


7
Ai đó đã quên nói với cộng đồng nguồn mở.
webbiedave

2
@webbiedave - tốt, có thể có một hoặc hai người vị tha thực sự ngoài kia, nhưng cuối cùng nguồn mở cũng là về việc kiếm tiền. Tôi dám nói rằng hầu hết mọi người tham gia vào các dự án nguồn mở đều làm điều đó để nâng cao các kỹ năng và / hoặc CV: s và tăng tiềm năng thu nhập trong tương lai của họ. Nhiều dự án nguồn mở cũng sinh ra các phiên bản thương mại / doanh nghiệp để tạo doanh thu từ dự án. Vì vậy, cộng đồng nguồn mở rất nhiều trong vòng lặp khi kiếm tiền;)
pap

Và điều tương tự không đúng với khoa học? ;)
webbiedave

@webbiedave - Không, tôi không đồng ý. Mặc dù tiền có thể là một sản phẩm sinh học của khoa học, nhưng nó không (và không nên) là mục tiêu chính. Khoa học là về khám phá vì lợi ích của chính nó. Các công ty làm R & D, nhưng đó không phải là khám phá những điều mới, mà là về việc kiếm tiền từ những thứ đã được khám phá.
pap

Lý do duy nhất mà hầu hết các nhà khoa học muốn có nhiều tiền hơn là để họ có thể thực hiện nhiều nghiên cứu hơn. Tôi nghĩ điều tương tự cũng được tính cho nguồn mở. Làm nguồn mở để nâng cao CV của bạn nghe có vẻ như là một con đường dẫn đến thất bại đối với tôi. Nó nên là về sự tò mò, khám phá và gãi ngứa.
Tjaart
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.