Khoa học máy tính
Khoa học máy tính là ngành nghiên cứu về máy tính và tính toán, bao gồm nền tảng lý thuyết và thuật toán, phần cứng và phần mềm, và việc sử dụng chúng để xử lý thông tin. Ngành khoa học máy tính bao gồm nghiên cứu về thuật toán, cấu trúc dữ liệu và trí tuệ nhân tạo.
Giới thiệu
Khoa học máy tính (Computer science) là ngành nghiên cứu về máy tính (computers) và tính toán (computing) cũng như các ứng dụng lý thuyết và thực tiễn của chúng. Khoa học máy tính áp dụng các nguyên tắc của toán học (mathematics), kỹ thuật (engineering) và logic vào vô số chức năng, bao gồm xây dựng thuật toán (algorithm), phát triển phần mềm (software) và phần cứng (hardware), và trí tuệ nhân tạo (artificial intelligence).
Các nhà khoa học máy tính có ảnh hưởng nhất bao gồm Alan Turing, người giải mã trong Thế chiến II thường được coi là "cha đẻ của tính toán hiện đại"; Tim Berners-Lee, nhà phát minh World Wide Web; John McCarthy, nhà phát minh ngôn ngữ lập trình LISP và tiên phong trong trí tuệ nhân tạo; và Grace Hopper, sĩ quan Hải quân Hoa Kỳ và nhân vật quan trọng trong việc phát triển các máy tính đầu tiên như UNIVAC I cũng như phát triển trình biên dịch (compiler) ngôn ngữ máy tính.
Khoa học máy tính là ngành nghiên cứu về máy tính và tính toán, bao gồm nền tảng lý thuyết và thuật toán, phần cứng và phần mềm, và việc sử dụng chúng để xử lý thông tin. Ngành khoa học máy tính bao gồm nghiên cứu về thuật toán (algorithms) và cấu trúc dữ liệu (data structures), thiết kế máy tính và mạng (network), mô hình hóa dữ liệu và quy trình thông tin, và trí tuệ nhân tạo. Khoa học máy tính rút ra một số nền tảng từ toán học và kỹ thuật, do đó kết hợp các kỹ thuật từ các lĩnh vực như lý thuyết hàng đợi (queueing theory), xác suất và thống kê (probability and statistics), và thiết kế mạch điện tử (electronic circuit design). Khoa học máy tính cũng sử dụng nhiều kiểm tra giả thuyết (hypothesis testing) và thực nghiệm trong quá trình khái niệm hóa, thiết kế, đo lường và tinh chỉnh các thuật toán, cấu trúc thông tin và kiến trúc máy tính mới.
Khoa học máy tính được coi là một phần của gia đình gồm năm ngành riêng biệt nhưng có liên quan với nhau: kỹ thuật máy tính (computer engineering), khoa học máy tính, hệ thống thông tin (information systems), công nghệ thông tin (information technology), và kỹ thuật phần mềm (software engineering). Gia đình này được gọi chung là ngành tính toán (computing). Năm ngành này có liên quan với nhau theo nghĩa là tính toán là đối tượng nghiên cứu của chúng, nhưng chúng tách biệt vì mỗi ngành có quan điểm nghiên cứu và trọng tâm chương trình giảng dạy riêng.
Các lĩnh vực con chính của khoa học máy tính bao gồm nghiên cứu truyền thống về kiến trúc máy tính (computer architecture), ngôn ngữ lập trình (programming languages), và phát triển phần mềm. Tuy nhiên, chúng cũng bao gồm khoa học tính toán (computational science - việc sử dụng các kỹ thuật thuật toán để mô hình hóa dữ liệu khoa học), đồ họa và trực quan hóa (graphics and visualization), tương tác người-máy (human-computer interaction), cơ sở dữ liệu (databases) và hệ thống thông tin, mạng (networks), và các vấn đề xã hội và chuyên môn đặc thù trong thực hành khoa học máy tính.
Sự phát triển của Khoa học máy tính
Khoa học máy tính xuất hiện như một ngành độc lập vào đầu những năm 1960, mặc dù máy tính số điện tử (electronic digital computer) - đối tượng nghiên cứu của nó - đã được phát minh khoảng hai thập kỷ trước đó. Nguồn gốc của khoa học máy tính chủ yếu nằm trong các lĩnh vực liên quan là toán học, kỹ thuật điện (electrical engineering), vật lý và hệ thống thông tin quản lý (management information systems).
Toán học là nguồn gốc của hai khái niệm chính trong sự phát triển của máy tính - ý tưởng rằng tất cả thông tin có thể được biểu diễn dưới dạng chuỗi số không và một, và khái niệm trừu tượng về "chương trình lưu trữ" (stored program). Trong hệ thống số nhị phân (binary number system), các số được biểu diễn bởi một chuỗi các chữ số nhị phân 0 và 1 theo cách tương tự như các số trong hệ thập phân quen thuộc được biểu diễn bằng các chữ số 0 đến 9. Sự dễ dàng tương đối để thực hiện hai trạng thái (ví dụ: điện áp cao và thấp) trong các thiết bị điện và điện tử đã tự nhiên dẫn đến chữ số nhị phân, hay bit, trở thành đơn vị cơ bản của lưu trữ và truyền dữ liệu trong một hệ thống máy tính.
Kỹ thuật điện cung cấp các nguyên tắc cơ bản của thiết kế mạch - cụ thể là ý tưởng rằng các xung điện đầu vào của một mạch có thể được kết hợp bằng đại số Boolean (Boolean algebra) để tạo ra các đầu ra tùy ý. Việc phát minh transistor và thu nhỏ mạch, cùng với việc phát minh các phương tiện điện tử, từ tính và quang học để lưu trữ và truyền thông tin, là kết quả của những tiến bộ trong kỹ thuật điện và vật lý.
Hệ thống thông tin quản lý, ban đầu được gọi là hệ thống xử lý dữ liệu (data processing systems), đã cung cấp các ý tưởng ban đầu mà từ đó các khái niệm khoa học máy tính khác nhau như sắp xếp (sorting), tìm kiếm (searching), cơ sở dữ liệu (databases), truy xuất thông tin (information retrieval), và giao diện người dùng đồ họa (graphical user interfaces) đã phát triển. Các tập đoàn lớn lưu trữ máy tính chứa thông tin trung tâm cho các hoạt động kinh doanh - bảng lương, kế toán, quản lý hàng tồn kho, kiểm soát sản xuất, vận chuyển và nhận hàng.
Công trình lý thuyết về khả năng tính toán (computability), bắt đầu từ những năm 1930, đã cung cấp sự mở rộng cần thiết của những tiến bộ này cho việc thiết kế toàn bộ máy; một cột mốc là đặc tả máy Turing năm 1936 (một mô hình tính toán lý thuyết thực hiện các hướng dẫn được biểu diễn dưới dạng một chuỗi số không và một) bởi nhà toán học người Anh Alan Turing và chứng minh của ông về năng lực tính toán của mô hình. Một bước đột phá khác là khái niệm máy tính chương trình lưu trữ (stored-program computer), thường được ghi nhận cho nhà toán học người Mỹ gốc Hungary John von Neumann. Đây là nguồn gốc của lĩnh vực khoa học máy tính sau này được gọi là kiến trúc và tổ chức (architecture and organization).
Trong những năm 1950, hầu hết người dùng máy tính làm việc trong các phòng thí nghiệm nghiên cứu khoa học hoặc trong các tập đoàn lớn. Cả hai nhóm nhanh chóng học được rằng việc viết chương trình bằng ngôn ngữ máy (machine language) của các số không và một không thực tế hoặc đáng tin cậy. Khám phá này dẫn đến sự phát triển của hợp ngữ (assembly language) vào đầu những năm 1950, cho phép lập trình viên sử dụng các ký hiệu cho các hướng dẫn (ví dụ: ADD cho phép cộng) và các biến. Một chương trình khác, được gọi là trình hợp dịch (assembler), dịch các chương trình ký hiệu này thành một chương trình nhị phân tương đương mà các bước máy tính có thể thực hiện, hoặc "thực thi" (execute).
Các yếu tố phần mềm hệ thống khác được gọi là bộ nạp liên kết (linking loaders) đã được phát triển để kết hợp các phần mã đã hợp dịch và nạp chúng vào bộ nhớ máy tính, nơi chúng có thể được thực thi. Khái niệm liên kết các phần mã riêng biệt rất quan trọng, vì nó cho phép "thư viện" (libraries) các chương trình để thực hiện các tác vụ phổ biến được tái sử dụng. Đây là bước đầu tiên trong sự phát triển của lĩnh vực khoa học máy tính gọi là kỹ thuật phần mềm (software engineering).
Cuối những năm 1950, hợp ngữ được thấy là quá cồng kềnh nên việc phát triển các ngôn ngữ bậc cao (high-level languages - gần với ngôn ngữ tự nhiên hơn) bắt đầu để hỗ trợ lập trình dễ dàng hơn, nhanh hơn. FORTRAN xuất hiện như ngôn ngữ bậc cao chính cho lập trình khoa học, trong khi COBOL trở thành ngôn ngữ chính cho lập trình kinh doanh. Các ngôn ngữ này mang theo nhu cầu về phần mềm khác nhau, được gọi là trình biên dịch (compilers), dịch các chương trình ngôn ngữ bậc cao thành mã máy (machine code). Thiết kế và triển khai các ngôn ngữ bậc cao là trọng tâm của lĩnh vực khoa học máy tính gọi là ngôn ngữ lập trình (programming languages).
Việc sử dụng máy tính ngày càng tăng vào đầu những năm 1960 đã cung cấp động lực cho sự phát triển của các hệ điều hành (operating systems) đầu tiên, bao gồm phần mềm thường trú hệ thống tự động xử lý đầu vào và đầu ra và thực thi các chương trình được gọi là "công việc" (jobs). Nhu cầu về các kỹ thuật tính toán tốt hơn đã dẫn đến sự quan tâm trở lại đối với các phương pháp số (numerical methods) và phân tích của chúng, một hoạt động mở rộng rộng rãi đến mức được gọi là khoa học tính toán (computational science).
Những năm 1970 và 80 chứng kiến sự xuất hiện của các thiết bị đồ họa máy tính (computer graphics) mạnh mẽ, cho cả mô hình hóa khoa học và các hoạt động trực quan khác. Công nghệ bitmap, cùng với màn hình hiển thị độ phân giải cao và sự phát triển của các tiêu chuẩn đồ họa làm cho phần mềm ít phụ thuộc vào máy hơn, đã dẫn đến sự phát triển bùng nổ của lĩnh vực này. Hỗ trợ cho tất cả các hoạt động này đã phát triển thành lĩnh vực khoa học máy tính được gọi là đồ họa và tính toán trực quan (graphics and visual computing).
Có liên quan chặt chẽ với lĩnh vực này là thiết kế và phân tích các hệ thống tương tác trực tiếp với người dùng đang thực hiện các tác vụ tính toán khác nhau. Các hệ thống này được sử dụng rộng rãi trong những năm 1980 và 90, khi các tương tác chỉnh sửa dòng với người dùng được thay thế bằng giao diện người dùng đồ họa (graphical user interfaces - GUIs). Thiết kế GUI, được tiên phong bởi Xerox và sau đó được Apple (Macintosh) và cuối cùng là Microsoft (Windows) tiếp nhận, quan trọng vì nó cấu thành những gì người dùng nhìn thấy và làm khi họ tương tác với một thiết bị tính toán. Thiết kế giao diện người dùng phù hợp cho tất cả các loại người dùng đã phát triển thành lĩnh vực khoa học máy tính được gọi là tương tác người-máy (human-computer interaction - HCI).
Lĩnh vực kiến trúc và tổ chức máy tính cũng đã phát triển đáng kể kể từ khi các máy tính chương trình lưu trữ đầu tiên được phát triển trong những năm 1950. Hệ thống chia sẻ thời gian (time-sharing systems) xuất hiện vào những năm 1960 để cho phép nhiều người dùng chạy các chương trình cùng lúc từ các thiết bị đầu cuối khác nhau. Những năm 1970 chứng kiến sự phát triển của các mạng máy tính diện rộng (wide-area computer networks - WANs) đầu tiên và các giao thức (protocols) để truyền thông tin với tốc độ cao giữa các máy tính cách xa nhau. Khi các hoạt động này phát triển, chúng hợp nhất thành lĩnh vực khoa học máy tính gọi là mạng và truyền thông (networking and communications). Một thành tựu lớn của lĩnh vực này là sự phát triển của Internet.
Ý tưởng rằng các hướng dẫn, cũng như dữ liệu, có thể được lưu trữ trong bộ nhớ máy tính là rất quan trọng cho các khám phá cơ bản về hành vi lý thuyết của các thuật toán. Những khám phá này là nguồn gốc của lĩnh vực khoa học máy tính được gọi là thuật toán và độ phức tạp (algorithms and complexity). Một phần quan trọng của lĩnh vực này là nghiên cứu và ứng dụng các cấu trúc dữ liệu (data structures) phù hợp cho các ứng dụng khác nhau. Cấu trúc dữ liệu, cùng với sự phát triển của các thuật toán tối ưu để chèn, xóa và định vị dữ liệu trong các cấu trúc như vậy, là mối quan tâm lớn của các nhà khoa học máy tính vì chúng được sử dụng rất nhiều trong phần mềm máy tính, đặc biệt nhất là trong trình biên dịch, hệ điều hành, hệ thống tệp (file systems) và công cụ tìm kiếm (search engines).
Trong những năm 1960, việc phát minh lưu trữ đĩa từ (magnetic disk storage) đã cung cấp truy cập nhanh đến dữ liệu nằm ở một vị trí tùy ý trên đĩa. Phát minh này không chỉ dẫn đến các hệ thống tệp được thiết kế thông minh hơn mà còn dẫn đến sự phát triển của hệ thống cơ sở dữ liệu (database) và truy xuất thông tin, sau này trở nên thiết yếu để lưu trữ, truy xuất và truyền số lượng lớn và nhiều loại dữ liệu qua Internet. Lĩnh vực khoa học máy tính này được gọi là quản lý thông tin (information management).
Một mục tiêu dài hạn khác của nghiên cứu khoa học máy tính là tạo ra các máy tính toán và thiết bị robot có thể thực hiện các tác vụ thường được cho là đòi hỏi trí thông minh của con người. Các tác vụ như vậy bao gồm di chuyển, nhìn, nghe, nói, hiểu ngôn ngữ tự nhiên (natural language), suy nghĩ, và thậm chí thể hiện cảm xúc của con người. Lĩnh vực khoa học máy tính về hệ thống thông minh (intelligent systems), ban đầu được gọi là trí tuệ nhân tạo (artificial intelligence - AI), thực sự có trước các máy tính điện tử đầu tiên trong những năm 1940, mặc dù thuật ngữ trí tuệ nhân tạo không được đặt ra cho đến năm 1956.
Ba phát triển trong tính toán vào đầu thế kỷ 21 - tính toán di động (mobile computing), tính toán máy khách-máy chủ (client-server computing), và hack máy tính - đã góp phần vào sự xuất hiện của ba lĩnh vực mới trong khoa học máy tính: phát triển dựa trên nền tảng (platform-based development), tính toán song song và phân tán (parallel and distributed computing), và bảo mật và đảm bảo thông tin (security and information assurance). Phát triển dựa trên nền tảng là nghiên cứu về các nhu cầu đặc biệt của thiết bị di động, hệ điều hành của chúng và các ứng dụng của chúng. Tính toán song song và phân tán liên quan đến sự phát triển của các kiến trúc và ngôn ngữ lập trình hỗ trợ phát triển các thuật toán có các thành phần có thể chạy đồng thời và không đồng bộ. Bảo mật và đảm bảo thông tin liên quan đến thiết kế các hệ thống tính toán và phần mềm bảo vệ tính toàn vẹn (integrity) và bảo mật của dữ liệu, cũng như quyền riêng tư của cá nhân.
15 lĩnh vực của Khoa học máy tính
Ngành khoa học máy tính đã phát triển thành 15 lĩnh vực riêng biệt sau: Thuật toán và độ phức tạp (Algorithms and complexity), Kiến trúc và tổ chức (Architecture and organization), Khoa học tính toán (Computational science), Đồ họa và tính toán trực quan (Graphics and visual computing), Tương tác người-máy (Human-computer interaction), Quản lý thông tin (Information management), Hệ thống thông minh (Intelligent systems), Mạng và truyền thông (Networking and communication), Hệ điều hành (Operating systems), Tính toán song song và phân tán (Parallel and distributed computing), Phát triển dựa trên nền tảng (Platform-based development), Ngôn ngữ lập trình (Programming languages), Bảo mật và đảm bảo thông tin (Security and information assurance), Kỹ thuật phần mềm (Software engineering), Các vấn đề xã hội và chuyên môn (Social and professional issues).
Khoa học máy tính tiếp tục có nguồn gốc toán học và kỹ thuật mạnh mẽ. Các chương trình cử nhân, thạc sĩ và tiến sĩ khoa học máy tính thường xuyên được cung cấp bởi các tổ chức học thuật sau trung học, và các chương trình này yêu cầu sinh viên hoàn thành các khóa học toán học và kỹ thuật phù hợp, tùy thuộc vào lĩnh vực tập trung của họ. Ví dụ, tất cả sinh viên đại học chuyên ngành khoa học máy tính phải học toán rời rạc (discrete mathematics - logic, tổ hợp (combinatorics), và lý thuyết đồ thị (graph theory) cơ bản). Nhiều chương trình cũng yêu cầu sinh viên hoàn thành các khóa học về giải tích (calculus), thống kê (statistics), phân tích số (numerical analysis), vật lý và nguyên tắc kỹ thuật trong giai đoạn đầu của họ.
📖 Nguồn tham khảo: https://www.britannica.com/technology/computer-science