Khoa học máy tính
Bách khoa toàn thư mở Wikipedia
Khoa học máy tính (tiếng Anh: Computer science hay computing science) là ngành nghiên cứu các cơ sở lý thuyết về thông tin và tính toán và việc thực hiện và ứng dụng trong các hệ thống máy tính. Khoa học máy tính có nhiều ngành con; một số nhấn mạnh vào việc tính toán các kết quả cụ thể (chẳng hạn đồ họa máy tính), trong khi các ngành khác tập trung vào các thách thức trong việc cài đặt các tính toán. Ví dụ, ngành lý thuyết ngôn ngữ lập trình nghiên cứu các cách tiếp cận việc mô tả các tính toán, trong khi ngành lập trình sử dụng các ngôn ngữ lập trình cụ thể để giải các bài toán tính toán cụ thể.
[sửa] Lịch sử
Lịch sử của khoa học máy tính đã bắt đầu từ nhiều năm trước phát minh ra máy tính hiện đại. Các máy móc dành cho việc tính toán các bài toán số học cố định đã tồn tại từ thời cổ đại, chẳng hạn máy abacus. Wilhelm Schickard đã xây dựng chiếc máy tính cơ học đầu tiên năm 1632.[1] Charles Babbage đã thiết kế một máy tính theo hiệu (difference engine) vào thời Victoria[2], và vào khoảng năm 1900, tập đoàn IBM đã bán những chiếc máy tính dùng thẻ đục lỗ.[3]. Tuy nhiên, tất cả những chiếc máy này đều chỉ thực hiện một nhiệm vụ đơn, hoặc cùng lắm là một tập nhỏ các nhiệm vụ.
Trước năm 1920, công việc tính toán được thực hiện chủ yếu bởi những nhân viên chuyên nghiệp. Những nhà nghiên cứu đầu tiên về ngành mà sau này được gọi là khoa học máy tính, chẳng hạn Kurt Gödel, Alonzo Church và Alan Turing, đã quan tâm đến câu hỏi về khả năng tính toán: những gì có thể được tính toán bởi một người thủ quỹ - người chỉ đơn giản dùng giấy và bút chì để làm một danh sách các bước tính toán, cho đến khi nào xong việc mà không cần đến trí thông minh hay hiểu biết? Một phần của động cơ này là ước muốn phát triển các máy tính có khả năng tự động hóa các công việc tính toán thường là buồn tẻ và dễ sai của một người tính toán. Vấn đề then chốt là xây dựng các hệ thống tính toán phổ dụng có khả năng (về lý thuyết) thực hiện mọi nhiệm vụ tính toán có thể cần đến, và nhờ đó tổng quát hóa tất cả các máy tính chuyên biệt trước kia thành một khái niệm đơn nhất về chiếc máy tính phổ dụng.
Trong những năm 1940, khi các máy tính mới hơn và mạnh hơn được phát triển, người ta thấy rõ ràng hơn rằng máy tính có thể được sử dụng cho nhiều mục đích khác ngoài các tính toán toán học, lĩnh vực khoa học máy tính được mở rộng thành ngành nghiên cứu tính toán nói chung. Từ thập kỷ 1960, khoa học máy tính bắt đầu được thiết lập như là một ngành học riêng biệt, với sự ra đời của các khoa Khoa học máy tính đầu tiên và các chương trình đào tạo đại học chuyên ngành Khoa học máy tính.[4] Từ khi các máy tính được sử dụng trong thực tiễn, nhiều ứng dụng của tính toán đã trở thành các lĩnh vực nghiên cứu riêng biệt một cách xứng đáng.
[sửa] Quan hệ với các lĩnh vực khác
Tiêu bản:Wikiquotepar
Mặc dù có tên là "khoa học máy tính", nhưng ngành này không bao gồm nghiên cứu về chính những chiếc máy tính. Thực tế, người ta thường dẫn lời nhà khoa học máy tính nổi tiếng Edsger Dijkstra rằng, "Khoa học máy tính đối với máy tính không hơn thiên văn học đối với kính thiên văn." (Computer science is no more about computers than astronomy is about telescopes.) Việc thiết kế và triển khai máy tính và các hệ thống máy tính thường được xem là thuộc lĩnh vực của các ngành khác. Ví dụ, nghiên cứu về phần cứng máy tính thường được coi là một phần của ngành kỹ thuật máy tính (computer engineering), trong khi nghiên cứu về các hệ thống máy tính thương mại và việc triển khai chúng thường được thuộc về ngành công nghệ thông tin hoặc ngành các hệ thống thông tin. Khoa học máy tính đôi khi bị chỉ trích là không khoa học lắm, quan điểm này được thể hiện trong phát biểu "Khoa học so với khoa học máy tính cũng giống như ngành khí động học so với việc lắp đường ống" của Stan Kelly-Bootle[5] và một số người khác. Tuy nhiên, đã có nhiều sự phát triển tương giao của các ý tưởng giữa các ngành khác nhau có liên quan đến máy tính. Nghiên cứu khoa học máy tính cũng thường nối sang các ngành khác, chẳng hạn như trí tuệ nhân tạo, khoa học nhận thức, vật lý học (xem tính toán lượng tử), và ngôn ngữ học.
Một số người lại coi khoa học máy tính là ngành có quan hệ gần gũi hơn cả với toán học.[4]. Khoa học máy tính thời kỳ đầu đã chịu ảnh hưởng mạnh mẽ bởi các công trình của các nhà toán học như Kurt Gödel và Alan Turing, và vẫn tiếp tục có những trao đổi tư tưởng hữu ích giữa hai ngành trong các lĩnh vực chẳng hạn như lôgic toán, lý thuyết phạm trù, lý thuyết miền xác định (domain theory), và đại số.
Quan hệ giữa khoa học máy tính và kỹ nghệ phần mềm là một vấn đề gây tranh cãi, vấn đề này bị làm cho rắc rối thêm bởi các cuộc tranh luận về ý nghĩa của từ "kỹ nghệ phần mềm", và khoa học máy tính được định nghĩa như thế nào. Một số người tin rằng kỹ nghệ phần mềm là một tập con của khoa học máy tính. Dựa theo quan hệ giữa các ngành khoa học (science) và kỹ thuật hay kỹ nghệ (engineering) khác, một số khác lại cho rằng trọng tâm chính của khoa học máy tính là nghiên cứu các tính chất của việc tính toán nói chung, trong khi trọng tâm chính của kỹ nghệ phần mềm là việc thiết kế các tính toán cụ thể để đạt được các mục tiêu thực tiễn, nghĩa là đây là hai ngành khác nhau. Một trong những người phổ biến quan niệm này là David Parnas[6].
[sửa] Các lĩnh vực của khoa học máy tính
[sửa] Cơ sở toán học
- Lôgic toán (Mathematical logic)
- Lôgic Bool và các phương pháp khác để mô hình hóa các truy vấn lôgic; sử dụng và hạn chế của các phương pháp chứng minh hình thức
- Lý thuyết số (Number theory)
- Lý thuyết về chứng minh và các heuristic cho việc tìm các chứng minh trong miền xác định đơn giản gồm các số nguyên. Được sử dụng trong mật mã học cũng như là một miền xác định kiểm thử trong trí tuệ nhân tạo.
- Lý thuyết đồ thị
- Các cơ sở cho các cấu trúc dữ liệu và các thuật toán tìm kiếm.
- Lý thuyết kiểu (Type Theory)
- Phân tích hình thức về các kiểu dữ liệu và việc sử dụng các kiểu dữ liệu này, để hiểu các tính chất của chương trình - đặc biệt là tính an toàn của chương trình.
[sửa] Lý thuyết tính toán
- Lý thuyết Ôtômat (Automata theory)
- Các cấu trúc lôgic khác nhau để giải quyết các bài toán.
- Lý thuyết khả năng tính toán (Computability theory)
- Cái gì là tính toán được bằng các mô hình máy tính hiện tại. Các chứng minh của Alan Turing và những người khác đã mang lại hiểu biết về các khả năng rằng cái gì có thể tính được và cái gì không.
- Lý thuyết độ phức tạp tính toán (Computational complexity theory)
- Các giới hạn cơ bản (đặc biệt là thời gian và không gian bộ nhớ) đối với các lớp bài toán tính toán.
- Lý thuyết tính toán lượng tử (Quantum computing)
[sửa] Cấu trúc dữ liệu và giải thuật
- Phân tích thuật toán
- Độ phức tạp về thời gian và không gian của các thuật toán.
- Thuật toán
- Các quá trình lôgic hình thức được sử dụng cho việc tính toán và tính hiệu quả của các quá trình này.
- Cấu trúc dữ liệu
- Tổ chức của dữ liệu và các quy tắc thao táo dữ liệu.
[sửa] Ngôn ngữ lập trình và trình biên dịch
- Trình biên dịch
- Các cách dịch các chương trình máy tính, thường là từ các ngôn ngữ lập trình bậc cao sang các ngôn ngữ lập trình bậc thấp. Có cơ sở chủ yếu trên lôgic toán.
- Ngôn ngữ lập trình
- Các khuôn mẫu ngôn ngữ hình thức để biểu diễn các thuật toán, và các tính chất của các ngôn ngữ này (ví dụ, chúng thích hợp cho việc giải các bài toán thuộc dạng nào).
[sửa] Hệ thống phân tán, song song, tương tranh
- Tương tranh (Concurrency)
- Lý thuyết và thực tiễn của tính toán đồng thời; an toàn dữ liệu trong môi trường đa nhiệm hay đa luồng bất kỳ.
- Tính toán phân tán (Distributed computing)
- Tính toán sử dụng nhiều thiết bị tính toán trên một mạng để thực hiện một nhiệm vụ hoặc một mục tiêu chung.
- Tính toán song song (Parallel computing)
- Tính toán sử dụng nhiều luồng thực thi đồng thời.
[sửa] Kỹ nghệ phần mềm
- Các phương pháp hình thức (Formal methods)
- Các cách tiếp cận toán học cho việc mô tả và lập luận về các thiết kế phần mềm.
- Kỹ nghệ phần mềm
- Các nguyên lý và thực hành về thiết kế, phát triển và kiểm thử các chương trình, cũng như phương pháp thực hành kỹ nghệ đúng đắn...
- Kỹ nghệ đảo ngược (Reverse engineering)
- Ứng dụng của phương pháp khoa học vào hiểu biết về một phần mềm sẵn có tùy ý
- Thiết kế thuật toán
- Sử dụng các tư tưởng của lý thuyết thuật toán để thiết kế một cách sáng tạo các giải pháp cho các nhiệm vụ thực tế
- Lập trình máy tính
- Thực hành sử dụng một ngôn ngữ để cài đặt các thuật toán
[sửa] Kiến trúc máy tính
- Kiến trúc máy tính
- Thiết kế, tổ chức, tối ưu hóa và kiểm định một hệ thống máy tính, chủ yếu về CPU và hệ thống bộ nhớ máy tính (và hệ thống bus nối giữa chúng).
- Hệ điều hành
- Các hệ thống quản lý các chương trình máy tính và cung cấp nền tảng cơ bản của một hệ thống sử dụng được.
[sửa] Truyền thông
- Mạng máy tính
- Các thuật toán và giao thức cho việc truyền thông dữ liệu một cách đáng tin cậy qua các môi trường truyền thông chuyên dụng hoặc chia sẻ khác nhau.
Áp dụng các kết quả của các lý thuyết độ phức tạp tính toán, lý thuyết xác suất, và lý thuyết số để tạo và phá mật mã.
[sửa] Cơ sở dữ liệu
- Cơ sở dữ liệu quan hệ
- Khai phá dữ liệu
- Nghiên cứu các thuật toán tìm kiếm và xử lý thông tin trong các tài liệu và cơ sở dữ liệu; có quan hệ gần gũi với ngành thu thập thông tin (information retrieval).
[sửa] Trí tuệ nhân tạo
- Trí tuệ nhân tạo
- Cài đặt và nghiên cứu các hệ thống thể hiện trí thông minh hoặc hành vi tự động của chính hệ thống đó.
- Lập luận tự động (Automated reasoning)
- Nghiên cứu các động cơ giải quyết bài toán, chẳng hạn như được sử dụng trong Prolog, các động cơ này tạo ra các bước dẫn đến một kết quả nếu cho trước một truy vấn về một sự kiện và một cơ sở dữ liệu gồm các luật (rule database).
- Rôbô học (Robotics)
- Các thuật toán điều khiển hành vi của rôbô.
- Thị giác máy (Computer vision)
- Các thuật toán nhận dạng các đối tượng ba chiều từ một hình ảnh hai chiều.
- Học máy
- Việc tạo tự động một tập các luật và tiên đề dựa theo dữ liệu vào.
[sửa] Tính toán mềm
Một thuật ngữ tổng hợp dành cho các kỹ thuật được sử dụng để giải các bài toán cụ thể, xem bài chính.
[sửa] Đồ họa máy tính
- Đồ họa máy tính
- Các thuật toán để tạo các hình ảnh tổng hợp và để tích hợp hoặc thay đổi các thông tin hình ảnh và không gian thu được từ thế giới thực.
- Xử lý ảnh (Image processing)
- Dùng tính toán để lấy thông tin từ một hình ảnh.
- Tương tác người-máy (Human computer interaction)
- Nghiên cứu và thiết kế giáo diện người dùng.
[sửa] Tính toán khoa học
- Vật lý tính toán (Computational physics)
- Numerical simulations of large non-analytic systems
- Hóa học tính toán (Computational chemistry)
- Tin sinh học
- Sử dụng khoa học máy tính để bảo trì, phân tích, lưu trữ dữ liệu sinh học và để hỗ trợ việc giải các bài toán sinh học chẳng hạn protein folding.
- Thần kinh học tính toán (Computational neuroscience)
- Tạo mô hình tính toán các bộ não thực
- Khoa học nhận thức (Cognitive Science)
- Tạo mô hình tính toán của các trí tuệ có thực
[sửa] Đào tạo về khoa học máy tính
Một số trường đại học đào tạo khoa học máy tính như là một ngành nghiên cứu lý thuyết về tính toán và lập luận thuật toán. Các chương trình đào tạo này thường bao gồm các môn lý thuyết tính toán, phân tích thuật toán, các phương pháp hình thức, lý thuyết tương tranh, cơ sở dữ liệu, đồ họa máy tính và phân tích hệ thống cùng các môn khác. Các chương trình này thường cũng dạy cả lập trình, nhưng coi đây chỉ là một phương tiện để hỗ trợ các lĩnh vực khác của khoa học máy tính chứ không phải là một trọng tâm của nghiên cứu ở mức độ cao.
Tại các đại học và cao đẳng khác, cũng như các trường trung học và dạy nghề, chương trình đào tạo khoa học máy tính lại nhấn mạnh việc thực hành lập trình nâng cao thay vì các lý thuyết về thuật toán và tính toán. Những chương trình kiểu này có xu hướng tập trung vào các kỹ năng quan trọng cho những người đi làm trong ngành công nghiệp phần mềm. Các khía cạnh thực hành của lập trình thường coi là kỹ nghệ phần mềm. Tuy nhiên, có rất nhiều bất đồng xung quanh nghĩa thực sự của từ "kỹ nghệ phần mềm" và về việc nó và lập trình có phải là một hay không.
- Xem Peter J. Denning, Great principles in computing curricula, Technical Symposium on Computer Science Education, 2004.
[sửa] Xem thêm
- Tính toán
- Tin học
- Khoa học thông tin
- Danh sách các chủ đề cơ bản của khoa học máy tính
- Danh sách các hội thảo khoa học máy tính
- Danh sách các bài toán mở trong khoa học máy tính
- Danh sách các ấn bản khoa học máy tính
- Danh sách các nhà tiên phong trong khoa học máy tính
- Danh sách các chủ đề kỹ nghệ phần mềm
[sửa] Tham khảo
- ▲ Nigel Tout (2006). Calculator Timeline. Vintage Calculator Web Museum. Được truy cập ngày 2006-09-18.
- ▲ Science Museum - Introduction to Babbage. Được truy cập ngày 2006-09-24.
- ▲ IBM Punch Cards in the U.S. Army. Được truy cập ngày 2006-09-24.
- ▲ 4,0 4,1 Denning, P.J. (2000). “Computer science:the discipline”. Encyclopedia of Computer Science.
- ▲ Computer Language, Oct 1990
- ▲ Parnas, David L. (1998). “Software Engineering Programmes are not Computer Science Programmes”. Annals of Software Engineering 6: 19–37., p. 19: "Rather than treat software engineering as a subfield of computer science, I treat it as an element of the set, {Civil Engineering, Mechanical Engineering, Chemical Engineering, Electrical Engineering,....}."
- Association for Computing Machinery. 1998 ACM Computing Classification System. 1998.
- IEEE Computer Society and the Association for Computing Machinery. Computing Curricula 2001: Computer Science. December 15, 2001.
- Peter J. Denning. Is computer science science?, Communications of the ACM, April 2005.
[sửa] Liên kết ngoài
Tiêu bản:Wikiversity