Khoa học máy tính nghiên cứu và điều tra những cơ sở kim chỉ nan của thông tin và thống kê giám sát, cùng với những kỹ thuật thực tiễn để thực thi và vận dụng những cơ sở này .
Khoa học máy tính gồm nhiều ngành hẹp ; 1 số ít ngành tập trung chuyên sâu vào những ứng dụng thực tiễn đơn cử ví dụ điển hình như đồ họa máy tính, trong khi 1 số ít ngành khác lại tập trung chuyên sâu nghiên cứu và điều tra đến đặc thù cơ bản của những bài toán thống kê giám sát như triết lý độ phức tạp thống kê giám sát ). Ngoài ra còn có những ngành khác điều tra và nghiên cứu những yếu tố trong việc thực thi những chiêu thức thống kê giám sát. Ví dụ, ngành kim chỉ nan ngôn từ lập trình điều tra và nghiên cứu những phương pháp diễn đạt cách đo lường và thống kê khác nhau, trong khi ngành lập trình điều tra và nghiên cứu cách sử dụng những ngôn từ lập trình và những mạng lưới hệ thống phức tạp, và ngành tương tác người-máy tập trung chuyên sâu vào những thử thách trong việc làm cho máy tính và việc làm thống kê giám sát hữu dụng, và dễ sử dụng so với mọi người dùng .
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 đã tồn tại từ thời cổ đại, chẳng hạn như bàn tính. Hơn nữa, các thuật toán để thực hiện tính toán đã có kể từ thời cổ đại, ngay cả trước khi phát triển các thiết bị tính toán phức tạp.
Wilhelm Schickard đã phong cách thiết kế và hoàn thành xong chiếc máy tính cơ học tiên phong năm 1623. [ 2 ] Năm 1673, Gottfried Leibniz trình diễn một máy tính cơ học số, được gọi là Stepped Reckoner. [ 3 ] Ông hoàn toàn có thể được coi là nhà khoa học máy tính tiên phong và nhà triết lý thông tin mà đã ghi lại mạng lưới hệ thống số nhị phân .
Blaise Pascal thiết kế và xây dựng máy tính cơ học hoạt động được mang tên Pascaline, năm 1642. Charles Babbage đã thiết kế một máy tính theo hiệu (difference engine) vào thời Victoria,[4] và Ada Lovelace đã viết bản hướng dẫn sử dụng máy. Nhờ công trình này, ngày nay, bà được coi là lập trình viên đầu tiên trên thế giới. 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ỗ.[5] 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.[6] 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.
Những thành tựu đáng kể[sửa|sửa mã nguồn]
Quân đội Đức Quốc xã sử dụng máy Enigma trong Chiến tranh thế giới thứ hai để mã hóa tin tức bí mật. Máy giải mã tầm cỡ tại Công Viên Bletchley, được xây dựng để giải mã của máy Enigma, đã đóng góp một vai trò quan trọng trong chiến thắng của quân đồng minh trong cuộc chiến tranh thế giới lần thứ Hai. .[7]
Tuy được trở thành một bộ môn giáo dục chính thức với một quãng thời hạn lịch sử vẻ vang ngắn ngủi, khoa học máy tính đã có 1 số ít góp sức quan trọng so với khoa học và xã hội. Những góp sức này gồm có :
- Ứng dụng trong ngành khoa học máy tính
- Ứng dụng bên ngoài
Các nghành của khoa học máy tính[sửa|sửa mã nguồn]
Cơ sở toán học[sửa|sửa mã nguồn]
Lý thuyết thống kê giám sát[sửa|sửa mã nguồn]
- Lý thuyết Ôtômat (Automata theory)
- Các cấu trúc lôgic khác nhau có thể sử dụng để giải quyết các bài toán.
- Lý thuyết khả năng tính toán (Computability theory)
- Những gì có thể 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 bày tỏ cho chúng ta biết được khả năng những gì có thể tính toán được và những gì không thể.
- Lý thuyết độ phức tạp tính toán (Computational complexity theory)
- Các giới hạn căn bản (cụ thể là thời gian và dung lượng bộ nhớ đòi hỏi) đối với các hạng loại bài toán khác nhau.
- Lý thuyết tính toán lượng tử (Quantum computing)
- Phương thức biểu hiện và chuyển hóa dữ liệu sử dụng những đặc tính của vật chất cùng cơ chế lượng tử.
Cấu trúc tài liệu và giải thuật[sửa|sửa mã nguồn]
- Phân tích thuật toán (Analysis of algorithms)
- Độ phức tạp về thời gian và không gian của các thuật toán.
- Thuật toán (Algorithms)
- Các quá trình lôgic trên nguyên tắ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 (Data structures)
- Tổ chức của dữ liệu và các quy tắc thao tác dữ liệu.
Ngôn ngữ lập trình và trình biên dịch[sửa|sửa mã nguồn]
Hệ thống phân tán, song song, tương tranh[sửa|sửa mã nguồn]
- 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.
Kỹ nghệ ứng dụng[sửa|sửa mã nguồn]
- Thiết kế thuật toán (Algorithm design)
- Lấy ý tưởng từ lý thuyết thuật toán để năng động kiến tạo các giải pháp đối với những nhiệm vụ trên thực tế.
- Lập trình máy tính (Computer programming)
- Dùng ngôn ngữ lập trình để thực thi các thuật toán.
- Các phương pháp hình thức (Formal methods)
- Sử dụng toán học để miêu tả và lập luận đối với các thiết kế phần mềm.
- Kỹ nghệ đảo ngược (Reverse engineering)
- Ứng dụng phương pháp khoa học vào việc phân tích và lý giải một phần mềm tùy thích vốn có.
- Kỹ nghệ phần mềm (Software development)
- Những nguyên lý và thực hành trong việc thiết kế, phát triển và kiểm thử các chương trình, cùng những phương pháp thực hành kỹ nghệ đúng đắn.
Kiến trúc máy tính[sửa|sửa mã nguồn]
Truyền thông – Viễn thông[sửa|sửa mã nguồn]
Cơ sở tài liệu[sửa|sửa mã nguồn]
- Khai phá dữ liệu (Data mining)
- Nghiên cứu các phương pháp sàng lọc, rút ra những thông tin cần thiết từ các nguồn dữ liệu khác nhau.
- Cơ sở dữ liệu quan hệ (Relational databases)
- 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).
Trí tuệ tự tạo[sửa|sửa mã nguồn]
Tính toán mềm[sửa|sửa mã nguồn]
Một thuật ngữ tổng hợp dành cho những kỹ thuật được sử dụng để giải những bài toán đơn cử, xem bài chính .
Đồ họa máy tính[sửa|sửa mã nguồn]
- Đồ họa máy tính (Computer graphics)
- Những thuật toán sử dụng trong cả hai trường hợp, kiến tạo hình ảnh một cách nhân tạo mà người thường có thể xem được bằng mắt, đồng thời kết hợp và thay đổi các dữ liệu về không gian và thị giác thu được từ môi trường sống bên ngoài.
- 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 phương pháp làm cho máy tính và sự tính toán của chúng trở nên hữu dụng, có thể tiếp cận và sử dụng bởi bất cứ ai trên thế giới là người dùng, bao gồm cả việc nghiên cứu và thiết kế giao diện người dùng.
Tính toán khoa học[sửa|sửa mã nguồn]
Đào tạo về khoa học máy tính[sửa|sửa mã nguồn]
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.
Các trường cao đẳng và đại học khác, cũng như các trường trung học và những chương trình dạy nghề có giảng dạy về khoa học máy tính, lại nhấn mạnh thực hành lập trình cao cấp thay vì lý thuyết đối với các thuật toán và tính toán trong chương trình giáo dục của họ. Những chương trình này thường có xu hướng tập trung vào những 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. Phương diện thực hành của việc lập trình thường được gọi là kỹ nghệ phần mềm. Tuy nhiên, có rất nhiều bất đồng xung quanh ý nghĩa thật của từ “kỹ nghệ phần mềm” (software engineering) và về việc nó với lập trình (programming) có phải là một hay không.
Liên kết ngoài[sửa|sửa mã nguồn]