khái niệm-lịch sử phát triển thế giới và tại Việt Nam
Trang 1 trong tổng số 1 trang
khái niệm-lịch sử phát triển thế giới và tại Việt Nam
Khái niệm phần mềm:
Phần mềm máy tính (tiếng Anh: Computer Software) hay gọi tắt là Phần mềm (Software) là một tập hợp những câu lệnh hoặc chỉ thị (Instruction) được viết bằng một hoặc nhiều ngôn ngữ lập trình theo một trật tự xác định, và các dữ liệu hay tài liệu liên quan nhằm tự động thực hiện một số nhiệm vụ hay chức năng hoặc giải quyết một vấn đề cụ thể nào đó.
Phần mềm thực hiện các chức năng của nó bằng cách gửi các chỉ thị trực tiếp đến phần cứng (hay phần cứng máy tính, Computer Hardware) hoặc bằng cách cung cấp dữ liệu để phục vụ các chương trình hay phần mềm khác.
Phần mềm là một khái niệm trừu tượng, nó khác với phần cứng ở chỗ là "phần mềm không thể sờ hay đụng vào", và nó cần phải có phần cứng mới có thể thực thi được.
Đặc điểm:
Trước đây, để tạo ra chương trình máy tính người ta phải làm việc trực tiếp với các con số 0 hoặc 1 (sử dụng hệ số nhị phân), hay còn gọi là ngôn ngữ máy. Công việc này vô cùng khó khăn, chiếm nhiều thời gian, công sức và đặc biệt dễ gây ra lỗi. Để khắc phục nhược điểm này, người ta đề xuất ra hợp ngữ, một ngôn ngữ cho phép thay thế dãy 0 hoặc 1 này bởi các từ gợi nhớ tiếng Anh. Tuy nhiên, cải tiến này vẫn còn chưa thật thích hợp với đa số người dùng máy tính, những người luôn mong muốn các lệnh chính là ý nghĩa của các thao tác mà nó mô tả. Vì vậy, ngay từ những năm 1950, người ta đã xây dựng những ngôn ngữ lập trình mà câu lệnh của nó gần với ngôn ngữ tự nhiên. Các ngôn ngữ này được gọi là ngôn ngữ lập trình bậc cao.
Chương trình máy tính thường được tạo ra bởi con người, những người này được gọi là lập trình viên, tuy nhiên cũng tồn tại những chương trình được sinh ra bởi các chương trình khác.
Phân loại
heo phương thức hoạt động[sửa | sửa mã nguồn]
Phần mềm hệ thống dùng để vận hành máy tính và các phần cứng máy tính, ví dụ như các hệ điều hành máy tính Windows, Linux, Unix, các thư viện động (còn gọi là thư viện liên kết động; tiếng Anh: dynamic linked library - DLL) của hệ điều hành, các trình điều khiển (driver), phần sụn (firmware) và BIOS. Đây là các loại phần mềm mà hệ điều hành liên lạc với chúng để điều khiển và quản lý các thiết bị phần cứng.
Phần mềm ứng dụng để người sử dụng có thể hoàn thành một hay nhiều công việc nào đó, ví dụ như các phần mềm văn phòng (Microsoft Office, OpenOffice), phần mềm doanh nghiệp, phần mềm quản lý nguồn nhân lực, phần mềm giáo dục, cơ sở dữ liệu, phần mềm trò chơi, chương trình tiện ích, hay các loại phần mềm độc hại.
Các phần mềm chuyển dịch mã bao gồm trình biên dịch và trình thông dịch: các loại chương trình này sẽ đọc các câu lệnh từ mã nguồn được viết bởi các lập trình viên theo một ngôn ngữ lập trình và dịch nó sang dạng ngôn ngữ máy mà máy tính có thể hiểu đưọc, hay dịch nó sang một dạng khác như là tập tin đối tượng (object file) và các tập tin thư viện (library file) mà các phần mềm khác (như hệ điều hành chẳng hạn) có thể hiểu để vận hành máy tính thực thi các lệnh.
Các nền tảng công nghệ như .NET,...
Theo khả năng ứng dụng
Những phần mềm không phụ thuộc, nó có thể được bán cho bất kỳ khách hàng nào trên thị trường tự do. Ví dụ: phần mềm về cơ sở dữ liệu như Oracle, đồ họa như Photoshop, Corel Draw, soạn thảo và xử lý văn bản, bảng tính,... Ưu điểm: Thông thường đây là những phần mềm có khả năng ứng dụng rộng rãi cho nhiều nhóm người sử dụng. Khuyết điểm: Thiếu tính uyển chuyển, tùy biến.
Những phần mềm được viết theo đơn đặt hàng hay hợp đồng của một khách hàng cụ thể nào đó (một công ty, bệnh viện, trường học,...). Ví dụ: phần mềm điều khiển, phần mềm hỗ trợ bán hàng,...
Ưu điểm: Có tính uyển chuyển, tùy biến cao để đáp ứng được nhu cầu của một nhóm người sử dụng nào đó. Khuyết điểm: Thông thường đây là những phần mềm ứng dụng chuyên ngành hẹp.
Lịch sự phát triển phần mềm tại Việt Nam
Ngành phát triển phần mềm của thế giới tính đến nay đã phát triển được trên 50 năm, còn không biết ngành phát triển phần mềm của Việt Nam có tự bao giờ? Nhưng theo như mình thử tìm kiếm thì hóa ra chúng ta cũng được “người ta” viện trợ cho máy tính khá sớm:
“Năm 1968, chiếc máy tính điện tử Minsk-22 do Liên Xô tặng, đã về đến Việt Nam. Nó là loại máy tính lớn (chỉ có thể gọi là Computer) hay còn gọi là các Mainframe. Hệ máy này do Liên Xô thiết kế dựa trên một bản vẽ logic khá sơ sài của hệ máy PDP của hãng DEC Hoa Kỳ được các sĩ quan tình báo Liên Xô là KGB đánh cắp về (kĩ nghệ về CNTT của Hoa Kỳ vẫn đi xa hàng thập kỉ so với Liên Xô vào thời đó). Máy có kích thước chiếm hết 1 gian phòng 100m2, không dùng mạch tích hợp (vì công nghệ mạch tích hợp – IC thời đó còn rất sơ khai), dùng bóng bán dẫn chớ không phải Transistor như các máy tính ngày nay vì tới năm 1957 mới có các thiết bị đơn giản ứng dụng Transistor thay cho các bóng bán dẫn cỡ lớn (mà tiên phong là hãng điện tử lừng danh Sony). Máy không có hệ điều hành, chạy đơn nhiệm, dùng ngôn ngữ lập trình là… ngôn ngữ máy (hoặc khá hơn là hợp ngữ), cùng một vài ngôn ngữ cổ đại thời đó như FORTRAN, COLBOL …
Cùng khoảng thời gian đó, miền nam Việt Nam, người Mỹ đã đưa vào VN từ những năm 1970 các máy mainframe của IBM sản xuất với các tính năng vượt trội khủng khiếp nhằm các mục đích tính toán lớn trong cuộc chiến tranh Việt Nam. Sau năm 1975 toàn bộ các máy mainframe này đều do Miền Bắc tiếp quản, bao gồm cả máy mainframe khá tốt vào thời đó là IBM360/50.”
Có máy tính rồi nhưng từ sau 1975 thì có lẽ chúng ta để đắp chiếu là chính, mãi đến năm 1987 thì mới có Tiến sĩ Quách Tuấn Ngọc viết ra chương trình phần mềm soạn thảo văn bản đầu tiên của Việt Nam là BKED. Có lẽ đó cũng chỉ là một vài “điểm sáng” nhỏ nhoi của ngành phần mềm Việt. Còn lại chúng ta “nổi tiếng” về lĩnh vực gia công phần mềm là chính.
Mình xin trích một đoạn trong cuốn sách “Những người làm chủ số 1 Việt Nam” nói về giai đoạn đầu của quá trình công ty FPT tham gia làm gia công phần mềm như sau:
“PGS.TS Trương Gia Bình vẫn còn nhớ, một đêm tháng 11 năm 1998, anh với anh Nguyễn Thành Nam ngồi ăn mì tại sân bay Bangkok trong lúc chờ chuyến bay về Việt Nam. Cả hai im lặng, tha thẩn nhai. Sau tất cả những gì đã chứng kiến ở Bangalore, Ấn Độ, dường như họ vẫn chưa hết bàng hoàng: Một đất nước còn rất nghèo, nhưng đã hé lộ sẽ là một cường quốc công nghệ thông tin (CNTT) trong thế kỷ 21. Một lúc lâu sau, anh nói với anh Nguyễn Thành Nam: ‘Em lấy một đội và thử đi.’ Anh Nam gật đầu đồng ý.
Cuộc chiến toàn cầu hóa bắt đầu.”
Trong lịch sử 50 năm của ngành phát triển phần mềm thế giới thì Việt Nam đã tham gia được vào phân khúc nào?Trong lịch sử 50 năm của ngành phát triển phần mềm thế giới thì Việt Nam đã tham gia được vào phân khúc nào?
Tấm áp phích quảng cáo về Lịch Sử Các Ngôn Ngữ Lập Trình của nhà xuất bản O’Reilly thì rất hấp dẫn người đọc.
Nếu bạn lần lại lịch sử những ngôn ngữ lập trình về thời khởi thủy của chúng, bạn sẽ biết rằng chúng ta đã làm việc với nghề phát triển phần mềm này một thời gian rất, rất dài.
Fortran (1954)
Cobol (1959)
Lisp (1958)
Basic (1964)
Forth (1970)
Pascal (1970)
SmallTalk (1971)
C (1971)
Ngôn ngữ C thì đại khái là bằng tuổi tôi; FORTRAN có số tuổi nhiều như bố mẹ tôi. Thế còn về những “lính mới” trong danh sách trên thì sao? Ở đây trang web khảo sát về chỉ số TCPI của TIOBE software đã cung cấp cho ta một số dữ liệu về mức độ phổ biến của các ngôn ngữ lập trình kể từ những năm 2001. Bạn hãy để ý chi tiết đến tuổi của những ngôn ngữ lập trình mới nhất và “hot” nhất như sau:
Perl (1987)
Python (1991)
Erlang (1991)
Ruby (1993)
Java (1995)
JavaScript (1995)
PHP (1995)
Ngôn ngữ Ruby thì mới bước vào tuổi teen. Còn JavaScript thì vẫn chưa bước vào tuổi dậy thì nữa.
Và hiển nhiên là có sự liên quan về tuổi tác của những ngôn ngữ lập trình hiện đại này và ngày xuất bản của một số cuốn sách miêu tả về suy nghĩ đương thời về ngành phát triển phần mềm hiện đại:
1994 Object-Oriented Design (Booch)
1995 Design Patterns (GoF)
1997 UML Distilled (Fowler)
1999 Extreme Programming Explained (Beck)
1999 Refactoring (Fowler)
2001 Agile Alliance được hình thành
Ngành phát triển phần mềm hiện đại thực ra mới phát triển gần đây. Thậm chí mặc dù chúng ta đã có trên 50 năm kinh nghiệm trong lĩnh vực này, nhưng ngành phát triển phần mềm thì vẫn đang trong thời kỳ chập chững tập đi.
Bạn hãy để ý đến lĩnh vực source control (quản lý mã nguồn) là một ví dụ. Source control rõ ràng là nền tảng của kỹ nghệ phần mềm. Tôi tin rằng lĩnh vực quản lý mã nguồn đã không trở nên phổ biến rộng rãi cho mãi tận đến năm 1999. Và đây là lý do tại sao:
Mặc dù CVS đã có mặt từ cuối những năm 80 của thế kỷ trước, nhưng nó chỉ được phổ biến rộng rãi thông qua SourceForge, cái này vẫn chưa tồn tại cho mãi tới năm 2000.
Microsoft SourceSafe cũng đã xuất hiện từ giữa những năm 90 của thế kỷ trước, nhưng vẫn không được chấp nhận là một xu thế chủ đạo cho tới khi nó được đóng gói kèm như là một phần của bộ Visual Studio 6.0 Enterprise vào năm 1998.
Một điều khá rõ ràng là, source control đã tồn tại từ trước năm 1999. Nhưng tại sao nó phải mất một khoảng thời gian rất dài để công cụ quan trọng này của kỹ nghệ phần mềm trở nên được sử dụng rộng rãi? Hóa ra câu trả lời lại nằm trong một lý thuyết gọi là mô hình trưởng thành mà hai tác giả Redwine-Riddle đã đề xuất (pdf):
Redwine và Riddle đã nghiên cứu một số công nghệ trong phát triển phần mềm để xem tại sao chúng lại phát triển và phổ biến được. Họ nhận thấy rằng nói chung một công nghệ sẽ mất từ 15 đến 20 năm để phát triển từ mức công thức khái niệm đến điểm mà nó sẵn sàng để phổ biến rộng rãi.
Họ nhận ra chúng sẽ phát triển qua 6 giai đoạn điển hình như sau:
Nghiên cứu cơ bản. Khảo cứu những khái niệm và ý tưởng cơ bản, tạo ra một cấu trúc ban đầu dựa trên vấn đề đã biết, hình thành bộ khung câu hỏi nghiên cứu phản biện.
Công thức hóa khái niệm. Lưu hành nội bộ những ý tưởng, phát triển một cộng đồng nghiên cứu, tập trung vào một số ý tưởng thích hợp, công bố các giải pháp đối với các vấn đề phụ xác định.
Phát triển và mở rộng. Tạo ra sự mở đầu trong việc sử dụng công nghệ đó, làm sáng tỏ những ý tưởng cơ bản, khái quát hóa hướng tiếp cận đó.
Thăm dò và mở rộng nội bộ. Mở rộng hướng tiếp cận đến những lĩnh vực khác, sử dụng công nghệ cho những vấn đề thực tế, làm ổn định công nghệ, phát triển các tài liệu huấn luyện, chỉ ra giá trị trong những kết quả đạt được.
Thăm dò và mở rộng ra bên ngoài. Tương tự như trong nội bộ, nhưng bao gồm một cộng đồng rộng hơn của những người không phải là các nhà phát triển, chỉ ra những chứng cứ quan trọng của giá trị và tính khả dụng.
Phổ biến rộng rãi. Phát triển chất lượng sản phẩm, hỗ trợ các phiên bản của công nghệ đó, thương mại hóa và tiếp thị công nghệ, mở rộng cộng đồng người dùng.
Redwine và Riddle đã trình bày theo dòng thời gian của một số công nghệ phần mềm theo sự phát triển của chúng thông qua những giai đoạn cho tới tận giữa những năm 1980. Còn tôi trình bày một phân tích tương tự cho sự trưởng thành của kiến trúc phần mềm trong những năm 1990.
CVS đã được phát hành vào năm 1986. Nó mất khoảng 15 năm sau đó để cho việc sử dụng CVS trở thành một xu thế chủ đạo, chính xác như lời phỏng đoán của Redwine-Riddle.
Mô hình Redwine-Riddle được đề xuất vào năm 1980 thì rất được thịnh hành vào ngày nay. Mark Dominus, trong Design Patterns of 1972, đã quay trở lại gần 35 năm để minh họa về cái cách mà chúng ta vẫn phải vật lộn để làm tiến hóa các ngôn ngữ lập trình ngày nay:
Phong trào “Design Patterns” đã trở nên phổ biến từ năm 1960, mục tiêu của nó là muốn huấn luyện cho các lập trình viên cách nhận ra những tình huống khi mà các pattern có thể áp dụng được, và thực thi nó thường xuyên khi cần thiết. Trong khi điều này có một mức tiến bộ rất lớn so với việc không áp dụng các pattern, sau đó các pattern đó đã được hệ thống hóa và nhúng vào trong các ngôn ngữ lập trình sau này.
Việc nhận ra các pattern là một điều rất quan trọng của quá trình phát triển của các ngôn ngữ lập trình. Trong lập trình nói chung, ý tưởng sử dụng chung một giải pháp cho vấn đề cứ xuất hiện lặp lại trong những ngữ cảnh khác nhau thì thật tuyệt vời và rất có giá trị. Vấn đề của phong trào “Design Patterns” là việc sử dụng những pattern nào sau đó: các lập trình viên được huấn luyện để nhận ra và áp dụng những pattern đó khi có thể.
Đáng lẽ những pattern đó nên được sử dụng như những biển chỉ dẫn tới những thiếu hụt của ngôn ngữ lập trình. Thì quan điểm của phong trào “Design Patterns” dường như lại là bằng một cách nào đó các lập trình viên sẽ cần thực thi Visitors, Abstract Factories, Decorators, và Faades. Nhưng những thứ này thì không quan trọng bằng sự cần thiết thực thi Subroutine Calls hoặc Object-Oriented Classes trong ngôn ngữ nguồn. Những pattern này nên được xem như là sự thiếu sót hoặc là những đặc trưng thiếu hụt trong các ngôn ngữ như Java và C++. Câu trả lời tốt nhất để nhận ra những pattern này là tìm xem những thiếu sót nào có trong những ngôn ngữ lập trình đó là nguyên nhân của pattern trở nên cần thiết, và làm thế nào để các ngôn ngữ đó có thể cung cấp sự hỗ trợ tốt hơn để giải quyết những dạng vấn đề này.
Tôi nghĩ rằng tốc độ thay đổi trong phát triển phần mềm thì rất nhanh, xin cảm ơn tới sự gia tăng theo hàm số mũ trong truyền thông của 50 năm vừa qua– truyền hình, vệ tinh, điện thoại di động, và dĩ nhiên là cả internet nữa. Là các nhà phát triển phần mềm, chúng ta lớn lên đã quen với việc phần cứng máy tính tăng gấp đôi tốc độ cứ mỗi 18 tháng. Cái mà chúng ta vẫn chưa có khả năng đương đầu tốt đó là mất bao lâu để nhân loại có thể bắt kịp với tốc độ phát triển của phần cứng đó.
Phần mềm máy tính (tiếng Anh: Computer Software) hay gọi tắt là Phần mềm (Software) là một tập hợp những câu lệnh hoặc chỉ thị (Instruction) được viết bằng một hoặc nhiều ngôn ngữ lập trình theo một trật tự xác định, và các dữ liệu hay tài liệu liên quan nhằm tự động thực hiện một số nhiệm vụ hay chức năng hoặc giải quyết một vấn đề cụ thể nào đó.
Phần mềm thực hiện các chức năng của nó bằng cách gửi các chỉ thị trực tiếp đến phần cứng (hay phần cứng máy tính, Computer Hardware) hoặc bằng cách cung cấp dữ liệu để phục vụ các chương trình hay phần mềm khác.
Phần mềm là một khái niệm trừu tượng, nó khác với phần cứng ở chỗ là "phần mềm không thể sờ hay đụng vào", và nó cần phải có phần cứng mới có thể thực thi được.
Đặc điểm:
Trước đây, để tạo ra chương trình máy tính người ta phải làm việc trực tiếp với các con số 0 hoặc 1 (sử dụng hệ số nhị phân), hay còn gọi là ngôn ngữ máy. Công việc này vô cùng khó khăn, chiếm nhiều thời gian, công sức và đặc biệt dễ gây ra lỗi. Để khắc phục nhược điểm này, người ta đề xuất ra hợp ngữ, một ngôn ngữ cho phép thay thế dãy 0 hoặc 1 này bởi các từ gợi nhớ tiếng Anh. Tuy nhiên, cải tiến này vẫn còn chưa thật thích hợp với đa số người dùng máy tính, những người luôn mong muốn các lệnh chính là ý nghĩa của các thao tác mà nó mô tả. Vì vậy, ngay từ những năm 1950, người ta đã xây dựng những ngôn ngữ lập trình mà câu lệnh của nó gần với ngôn ngữ tự nhiên. Các ngôn ngữ này được gọi là ngôn ngữ lập trình bậc cao.
Chương trình máy tính thường được tạo ra bởi con người, những người này được gọi là lập trình viên, tuy nhiên cũng tồn tại những chương trình được sinh ra bởi các chương trình khác.
Phân loại
heo phương thức hoạt động[sửa | sửa mã nguồn]
Phần mềm hệ thống dùng để vận hành máy tính và các phần cứng máy tính, ví dụ như các hệ điều hành máy tính Windows, Linux, Unix, các thư viện động (còn gọi là thư viện liên kết động; tiếng Anh: dynamic linked library - DLL) của hệ điều hành, các trình điều khiển (driver), phần sụn (firmware) và BIOS. Đây là các loại phần mềm mà hệ điều hành liên lạc với chúng để điều khiển và quản lý các thiết bị phần cứng.
Phần mềm ứng dụng để người sử dụng có thể hoàn thành một hay nhiều công việc nào đó, ví dụ như các phần mềm văn phòng (Microsoft Office, OpenOffice), phần mềm doanh nghiệp, phần mềm quản lý nguồn nhân lực, phần mềm giáo dục, cơ sở dữ liệu, phần mềm trò chơi, chương trình tiện ích, hay các loại phần mềm độc hại.
Các phần mềm chuyển dịch mã bao gồm trình biên dịch và trình thông dịch: các loại chương trình này sẽ đọc các câu lệnh từ mã nguồn được viết bởi các lập trình viên theo một ngôn ngữ lập trình và dịch nó sang dạng ngôn ngữ máy mà máy tính có thể hiểu đưọc, hay dịch nó sang một dạng khác như là tập tin đối tượng (object file) và các tập tin thư viện (library file) mà các phần mềm khác (như hệ điều hành chẳng hạn) có thể hiểu để vận hành máy tính thực thi các lệnh.
Các nền tảng công nghệ như .NET,...
Theo khả năng ứng dụng
Những phần mềm không phụ thuộc, nó có thể được bán cho bất kỳ khách hàng nào trên thị trường tự do. Ví dụ: phần mềm về cơ sở dữ liệu như Oracle, đồ họa như Photoshop, Corel Draw, soạn thảo và xử lý văn bản, bảng tính,... Ưu điểm: Thông thường đây là những phần mềm có khả năng ứng dụng rộng rãi cho nhiều nhóm người sử dụng. Khuyết điểm: Thiếu tính uyển chuyển, tùy biến.
Những phần mềm được viết theo đơn đặt hàng hay hợp đồng của một khách hàng cụ thể nào đó (một công ty, bệnh viện, trường học,...). Ví dụ: phần mềm điều khiển, phần mềm hỗ trợ bán hàng,...
Ưu điểm: Có tính uyển chuyển, tùy biến cao để đáp ứng được nhu cầu của một nhóm người sử dụng nào đó. Khuyết điểm: Thông thường đây là những phần mềm ứng dụng chuyên ngành hẹp.
Lịch sự phát triển phần mềm tại Việt Nam
Ngành phát triển phần mềm của thế giới tính đến nay đã phát triển được trên 50 năm, còn không biết ngành phát triển phần mềm của Việt Nam có tự bao giờ? Nhưng theo như mình thử tìm kiếm thì hóa ra chúng ta cũng được “người ta” viện trợ cho máy tính khá sớm:
“Năm 1968, chiếc máy tính điện tử Minsk-22 do Liên Xô tặng, đã về đến Việt Nam. Nó là loại máy tính lớn (chỉ có thể gọi là Computer) hay còn gọi là các Mainframe. Hệ máy này do Liên Xô thiết kế dựa trên một bản vẽ logic khá sơ sài của hệ máy PDP của hãng DEC Hoa Kỳ được các sĩ quan tình báo Liên Xô là KGB đánh cắp về (kĩ nghệ về CNTT của Hoa Kỳ vẫn đi xa hàng thập kỉ so với Liên Xô vào thời đó). Máy có kích thước chiếm hết 1 gian phòng 100m2, không dùng mạch tích hợp (vì công nghệ mạch tích hợp – IC thời đó còn rất sơ khai), dùng bóng bán dẫn chớ không phải Transistor như các máy tính ngày nay vì tới năm 1957 mới có các thiết bị đơn giản ứng dụng Transistor thay cho các bóng bán dẫn cỡ lớn (mà tiên phong là hãng điện tử lừng danh Sony). Máy không có hệ điều hành, chạy đơn nhiệm, dùng ngôn ngữ lập trình là… ngôn ngữ máy (hoặc khá hơn là hợp ngữ), cùng một vài ngôn ngữ cổ đại thời đó như FORTRAN, COLBOL …
Cùng khoảng thời gian đó, miền nam Việt Nam, người Mỹ đã đưa vào VN từ những năm 1970 các máy mainframe của IBM sản xuất với các tính năng vượt trội khủng khiếp nhằm các mục đích tính toán lớn trong cuộc chiến tranh Việt Nam. Sau năm 1975 toàn bộ các máy mainframe này đều do Miền Bắc tiếp quản, bao gồm cả máy mainframe khá tốt vào thời đó là IBM360/50.”
Có máy tính rồi nhưng từ sau 1975 thì có lẽ chúng ta để đắp chiếu là chính, mãi đến năm 1987 thì mới có Tiến sĩ Quách Tuấn Ngọc viết ra chương trình phần mềm soạn thảo văn bản đầu tiên của Việt Nam là BKED. Có lẽ đó cũng chỉ là một vài “điểm sáng” nhỏ nhoi của ngành phần mềm Việt. Còn lại chúng ta “nổi tiếng” về lĩnh vực gia công phần mềm là chính.
Mình xin trích một đoạn trong cuốn sách “Những người làm chủ số 1 Việt Nam” nói về giai đoạn đầu của quá trình công ty FPT tham gia làm gia công phần mềm như sau:
“PGS.TS Trương Gia Bình vẫn còn nhớ, một đêm tháng 11 năm 1998, anh với anh Nguyễn Thành Nam ngồi ăn mì tại sân bay Bangkok trong lúc chờ chuyến bay về Việt Nam. Cả hai im lặng, tha thẩn nhai. Sau tất cả những gì đã chứng kiến ở Bangalore, Ấn Độ, dường như họ vẫn chưa hết bàng hoàng: Một đất nước còn rất nghèo, nhưng đã hé lộ sẽ là một cường quốc công nghệ thông tin (CNTT) trong thế kỷ 21. Một lúc lâu sau, anh nói với anh Nguyễn Thành Nam: ‘Em lấy một đội và thử đi.’ Anh Nam gật đầu đồng ý.
Cuộc chiến toàn cầu hóa bắt đầu.”
Trong lịch sử 50 năm của ngành phát triển phần mềm thế giới thì Việt Nam đã tham gia được vào phân khúc nào?Trong lịch sử 50 năm của ngành phát triển phần mềm thế giới thì Việt Nam đã tham gia được vào phân khúc nào?
Tấm áp phích quảng cáo về Lịch Sử Các Ngôn Ngữ Lập Trình của nhà xuất bản O’Reilly thì rất hấp dẫn người đọc.
Nếu bạn lần lại lịch sử những ngôn ngữ lập trình về thời khởi thủy của chúng, bạn sẽ biết rằng chúng ta đã làm việc với nghề phát triển phần mềm này một thời gian rất, rất dài.
Fortran (1954)
Cobol (1959)
Lisp (1958)
Basic (1964)
Forth (1970)
Pascal (1970)
SmallTalk (1971)
C (1971)
Ngôn ngữ C thì đại khái là bằng tuổi tôi; FORTRAN có số tuổi nhiều như bố mẹ tôi. Thế còn về những “lính mới” trong danh sách trên thì sao? Ở đây trang web khảo sát về chỉ số TCPI của TIOBE software đã cung cấp cho ta một số dữ liệu về mức độ phổ biến của các ngôn ngữ lập trình kể từ những năm 2001. Bạn hãy để ý chi tiết đến tuổi của những ngôn ngữ lập trình mới nhất và “hot” nhất như sau:
Perl (1987)
Python (1991)
Erlang (1991)
Ruby (1993)
Java (1995)
JavaScript (1995)
PHP (1995)
Ngôn ngữ Ruby thì mới bước vào tuổi teen. Còn JavaScript thì vẫn chưa bước vào tuổi dậy thì nữa.
Và hiển nhiên là có sự liên quan về tuổi tác của những ngôn ngữ lập trình hiện đại này và ngày xuất bản của một số cuốn sách miêu tả về suy nghĩ đương thời về ngành phát triển phần mềm hiện đại:
1994 Object-Oriented Design (Booch)
1995 Design Patterns (GoF)
1997 UML Distilled (Fowler)
1999 Extreme Programming Explained (Beck)
1999 Refactoring (Fowler)
2001 Agile Alliance được hình thành
Ngành phát triển phần mềm hiện đại thực ra mới phát triển gần đây. Thậm chí mặc dù chúng ta đã có trên 50 năm kinh nghiệm trong lĩnh vực này, nhưng ngành phát triển phần mềm thì vẫn đang trong thời kỳ chập chững tập đi.
Bạn hãy để ý đến lĩnh vực source control (quản lý mã nguồn) là một ví dụ. Source control rõ ràng là nền tảng của kỹ nghệ phần mềm. Tôi tin rằng lĩnh vực quản lý mã nguồn đã không trở nên phổ biến rộng rãi cho mãi tận đến năm 1999. Và đây là lý do tại sao:
Mặc dù CVS đã có mặt từ cuối những năm 80 của thế kỷ trước, nhưng nó chỉ được phổ biến rộng rãi thông qua SourceForge, cái này vẫn chưa tồn tại cho mãi tới năm 2000.
Microsoft SourceSafe cũng đã xuất hiện từ giữa những năm 90 của thế kỷ trước, nhưng vẫn không được chấp nhận là một xu thế chủ đạo cho tới khi nó được đóng gói kèm như là một phần của bộ Visual Studio 6.0 Enterprise vào năm 1998.
Một điều khá rõ ràng là, source control đã tồn tại từ trước năm 1999. Nhưng tại sao nó phải mất một khoảng thời gian rất dài để công cụ quan trọng này của kỹ nghệ phần mềm trở nên được sử dụng rộng rãi? Hóa ra câu trả lời lại nằm trong một lý thuyết gọi là mô hình trưởng thành mà hai tác giả Redwine-Riddle đã đề xuất (pdf):
Redwine và Riddle đã nghiên cứu một số công nghệ trong phát triển phần mềm để xem tại sao chúng lại phát triển và phổ biến được. Họ nhận thấy rằng nói chung một công nghệ sẽ mất từ 15 đến 20 năm để phát triển từ mức công thức khái niệm đến điểm mà nó sẵn sàng để phổ biến rộng rãi.
Họ nhận ra chúng sẽ phát triển qua 6 giai đoạn điển hình như sau:
Nghiên cứu cơ bản. Khảo cứu những khái niệm và ý tưởng cơ bản, tạo ra một cấu trúc ban đầu dựa trên vấn đề đã biết, hình thành bộ khung câu hỏi nghiên cứu phản biện.
Công thức hóa khái niệm. Lưu hành nội bộ những ý tưởng, phát triển một cộng đồng nghiên cứu, tập trung vào một số ý tưởng thích hợp, công bố các giải pháp đối với các vấn đề phụ xác định.
Phát triển và mở rộng. Tạo ra sự mở đầu trong việc sử dụng công nghệ đó, làm sáng tỏ những ý tưởng cơ bản, khái quát hóa hướng tiếp cận đó.
Thăm dò và mở rộng nội bộ. Mở rộng hướng tiếp cận đến những lĩnh vực khác, sử dụng công nghệ cho những vấn đề thực tế, làm ổn định công nghệ, phát triển các tài liệu huấn luyện, chỉ ra giá trị trong những kết quả đạt được.
Thăm dò và mở rộng ra bên ngoài. Tương tự như trong nội bộ, nhưng bao gồm một cộng đồng rộng hơn của những người không phải là các nhà phát triển, chỉ ra những chứng cứ quan trọng của giá trị và tính khả dụng.
Phổ biến rộng rãi. Phát triển chất lượng sản phẩm, hỗ trợ các phiên bản của công nghệ đó, thương mại hóa và tiếp thị công nghệ, mở rộng cộng đồng người dùng.
Redwine và Riddle đã trình bày theo dòng thời gian của một số công nghệ phần mềm theo sự phát triển của chúng thông qua những giai đoạn cho tới tận giữa những năm 1980. Còn tôi trình bày một phân tích tương tự cho sự trưởng thành của kiến trúc phần mềm trong những năm 1990.
CVS đã được phát hành vào năm 1986. Nó mất khoảng 15 năm sau đó để cho việc sử dụng CVS trở thành một xu thế chủ đạo, chính xác như lời phỏng đoán của Redwine-Riddle.
Mô hình Redwine-Riddle được đề xuất vào năm 1980 thì rất được thịnh hành vào ngày nay. Mark Dominus, trong Design Patterns of 1972, đã quay trở lại gần 35 năm để minh họa về cái cách mà chúng ta vẫn phải vật lộn để làm tiến hóa các ngôn ngữ lập trình ngày nay:
Phong trào “Design Patterns” đã trở nên phổ biến từ năm 1960, mục tiêu của nó là muốn huấn luyện cho các lập trình viên cách nhận ra những tình huống khi mà các pattern có thể áp dụng được, và thực thi nó thường xuyên khi cần thiết. Trong khi điều này có một mức tiến bộ rất lớn so với việc không áp dụng các pattern, sau đó các pattern đó đã được hệ thống hóa và nhúng vào trong các ngôn ngữ lập trình sau này.
Việc nhận ra các pattern là một điều rất quan trọng của quá trình phát triển của các ngôn ngữ lập trình. Trong lập trình nói chung, ý tưởng sử dụng chung một giải pháp cho vấn đề cứ xuất hiện lặp lại trong những ngữ cảnh khác nhau thì thật tuyệt vời và rất có giá trị. Vấn đề của phong trào “Design Patterns” là việc sử dụng những pattern nào sau đó: các lập trình viên được huấn luyện để nhận ra và áp dụng những pattern đó khi có thể.
Đáng lẽ những pattern đó nên được sử dụng như những biển chỉ dẫn tới những thiếu hụt của ngôn ngữ lập trình. Thì quan điểm của phong trào “Design Patterns” dường như lại là bằng một cách nào đó các lập trình viên sẽ cần thực thi Visitors, Abstract Factories, Decorators, và Faades. Nhưng những thứ này thì không quan trọng bằng sự cần thiết thực thi Subroutine Calls hoặc Object-Oriented Classes trong ngôn ngữ nguồn. Những pattern này nên được xem như là sự thiếu sót hoặc là những đặc trưng thiếu hụt trong các ngôn ngữ như Java và C++. Câu trả lời tốt nhất để nhận ra những pattern này là tìm xem những thiếu sót nào có trong những ngôn ngữ lập trình đó là nguyên nhân của pattern trở nên cần thiết, và làm thế nào để các ngôn ngữ đó có thể cung cấp sự hỗ trợ tốt hơn để giải quyết những dạng vấn đề này.
Tôi nghĩ rằng tốc độ thay đổi trong phát triển phần mềm thì rất nhanh, xin cảm ơn tới sự gia tăng theo hàm số mũ trong truyền thông của 50 năm vừa qua– truyền hình, vệ tinh, điện thoại di động, và dĩ nhiên là cả internet nữa. Là các nhà phát triển phần mềm, chúng ta lớn lên đã quen với việc phần cứng máy tính tăng gấp đôi tốc độ cứ mỗi 18 tháng. Cái mà chúng ta vẫn chưa có khả năng đương đầu tốt đó là mất bao lâu để nhân loại có thể bắt kịp với tốc độ phát triển của phần cứng đó.
duongquocbao_k17- Tổng số bài gửi : 3
Join date : 14/09/2016
Similar topics
» khái niệm công nghệ phần mềm và lịch sử phát triển của nó
» Khái niệm Công nghệ phần mềm và Lịch sử phát triển
» Lịch sử phát triển Internet tại Việt Nam
» Thảo luận Bài 2
» Thảo luận Bài 2
» Khái niệm Công nghệ phần mềm và Lịch sử phát triển
» Lịch sử phát triển Internet tại Việt Nam
» Thảo luận Bài 2
» Thảo luận Bài 2
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết