Tự học C# trong … bao lâu (Teach Yourself C# In … how long)?

Tác giả của bài viết, Eric Lippert, là một kĩ sư thiết kế phần mềm của Microsoft, từng tham gia xây dựng các dự án VBScript,  JScript, JScript .NET, Windows Script Host và Visual Studio Tools for Office and C#. Bài viết này sẽ giúp bạn hiểu thêm về lịch sử của .NET, C# cũng như định hướng được con đường học lập trình của mình.

Bài viết này được đăng tải vào 13/09/2010 trên blog của tác giả: http://blogs.msdn.com/b/ericlippert/. Nội dung  bài viết:

Đầu năm nay, tôi là người biên tập viên kĩ thuật cho cuốn sách “Teach Yourself Visual C# 2010 in 24 Hours”  của Scott Dorman, và tôi vui mừng thông báo rằng cuốn sách này đã xuất hiện tại các cửa hàng. Scott đã viết lại hoàn toàn cuốn sách từ bản trước đó để đảm bảo rằng nó cập nhật đầy đủ về C# 4.0. Nếu bạn đang tìm kiếm một cuốn hướng dẫn dành cho người bắt đầu, thì đây là một lựa chọn tốt. (Tôi không kinh ngạc vì tiêu đề của cuốn sách; tôi luôn đồng ý với Peter Norvig rằng series này thật sự nên được gọi là “Tự Học Lập Trình Trong Mười Nghìn Giờ Bởi Vì Thật Sự Đó Là Khoảng Thời Gian Cần Để Thành Thạo Bất Kì Kĩ Năng Nào” (*), nhưng, sao cũng được.

(*) Nguyên văn: Teach Yourself Programming In Ten Thousand Hours Because Realistically That Is About How Long It Takes To Gain Expertise At Any Skill.

Scott và nhóm sản xuất đã yêu cầu tôi viết lời tựa cho cuốn sách, mà tôi sẽ chép lại dưới đây. Để biết thêm tại sao tôi thích cuốn sách này, hãy đọc:

*****

Hơn một thập niên trước đây, một nhóm nhỏ những nhà thiết kế gặp nhau trong một căn phòng nhỏ trên tầng hai của tòa nhà 41 tại Microsoft để tạo một ngôn ngữ mới, C#. Nguyên lý chủ đạo của ngôn ngữ nhấn mạnh đến tính đơn giản, thân thiện, an toàn và thực tế. Tất nhiên, tất cả các nguyên lý này cần phải cân bằng lẫn nhau; không có điều gì tuyệt đối. Những người thiết kế muốn ngôn ngữ phải đơn giản để hiểu nhưng không được quá đơn giản (simplistic), thân thiện với các lập trình viên C++ và Java nhưng không phải là một bản sao chép từ đó, an toàn nhưng không quá hạn chế, và thực tế nhưng không bao giờ bỏ qua kỉ luật, nhất quán, và hợp lề theo lý thuyết thiết kế.

Sau rất nhiều tháng suy nghĩ, thiết kế, phát triển, kiểm tra và xây dựng tài liệu, C# 1.0 đã được ra mắt công chúng. Đó là một ngôn ngữ hướng đối tượng (object-oriented) đơn thuần. Nhiều khía cạnh của nó được cẩn thận chọn lựa để đảm bảo rằng các đối tượng có thể được tổ chức trong các thành phần độc lập về phiên bản, nhưng những khái niệm nền tảng của ngôn ngữ này đến từ các ý tưởng về hướng đối tượng và các ngôn ngữ thủ tục ở những năm 1970 hoặc sớm hơn.

Nhóm thiết kế tiếp tục gặp nhau ba lần một tuần trong cùng phòng hội nghị tầng hai, để xây dựng thêm dựa trên nền tảng vững chắc đã được thiết lập bởi C# 1.0. Bằng cách làm việc với các đồng nghiệp trong Microsoft Research Cambridge và nhóm CLR ở bên kia đường, hệ thống kiểu đã được mở rộng để hỗ trợ tham số đa hình trong các kiểu generic và phương thức. Họ cũng thêm các “iterator block” (đôi khi được biết đến là “generator” trong các ngôn ngữ khác) để giúp nó dễ dàng hơn cho việc xây dựng các tập hợp có thể duyệt qua, và các phương thức vô danh (anonymouse method). Các generic và generator được bắt nguồn từ các ngôn ngữ sớm hơn như CLU và Ada trong những năm 1970 và 1980; ý tưởng của việc đặt các phương thức vô danh trong một phương thức có sẵn đến từ nền móng của khóa học máy tính hiện đại trong những năm 1950.

C# 2.0 là một bước tiến lớn từ phiên bản trước của nó, nhưng nhóm thiết kế vẫn chưa hài lòng. Họ tiếp tục gặp nhau trong phòng hồi nghị tầng hai đó ba lần một tuần. Lần này, họ nghĩ về những nguyên lý cơ bản. Các ngôn ngữ lập trình “thủ tục” truyền thống thực hiện tốt các công việc tính toán đơn giản, nhưng những vấn đề phải đối mặt của các developer hiện đại nằm ngoài việc thêm một cột số để tìm giá trị trung bình. Họ nhận ra rằng các lập trình viên xử lý dữ liệu bằng cách kết hợp các thao tác đơn giản với nhau theo một cách phức tạp. Các thao tác điển hình như sắp sorting, filtering, grouping, joining và projecting trên tập hợp dữ liệu. Khái niệm của một khuôn mẫu cú pháp cho “query comprehensions” mô tả súc tích các thao tác này đã được phát triển ban đầu trong các ngôn ngữ lập trình hàm như Haskell, nhưng cũng làm việc tốt trong một ngôn ngữ có tính mệnh lệnh hơn như C#. Và do đó LINQ – Language Integrated Query – đã ra đời.

Sau mười năm gặp mặt sáu giờ một tuần trong phòng hội nghị, nhu cầu của việc hội nghị trực tuyến với các thành viên ở nơi khác nên đã chuyển nơi họp lên tầng năm. Nhóm thiết kế nhìn lại mười năm đã qua và nhận thấy các vấn đề thực tế đã không được giải quyết tốt bởi ngôn ngữ, vẫn còn những “ranh giới chưa liền mạch”. Sự tăng cường cần phải tương thích với cả các ngôn ngữ dynamic hiện đại và thừa hưởng các mô hình đối tượng đã thúc đẩy việc thiết kế các tính năng mới của ngôn ngữ như kiểu “dynamic” trong C# 4.0.

Tôi hình dung nó có thể là một ý hay để làm một cái nhìn thoáng về sự phát triển của ngôn ngữ C# ở đây, trong lời tựa, bởi vì đây chắc chắn không phải là điều hướng đến trong cuốn sách này. Và đó là một điều tốt! Các tác giả những cuốn sách cho người mới học thường chọn sắp xếp các nội dung theo thứ tự họ học nó, như thông thường, là thứ tự mà các tính năng được thêm vào ngôn ngữ. Điều tôi thích thú đặc biệt về cuốn sách này là Scott chọn một thứ tự hợp lý để phát triển mỗi khái niệm, chuyển từ những phép tính đơn giản nhất đến những phần khá phức tạp có liên quan. Hơn nữa, các ví dụ của anh ấy thật sự thực tế mà vẫn đủ rõ ràng và đơn giản để mô tả chỉ trong một vài đoạn văn.

Tôi tóm lại ở đây về sự phát triển của ngôn ngữ, nhưng tất nhiên sự phát triển của một ngôn ngữ vẫn còn dài. Ngôn ngữ chỉ là công cụ bạn dùng để truy xuất khả năng của quá trình thực thi và các thư viện nền tảng; những chủ đề của chúng rất lớn và phức tạp. Một điều nữa tôi thích về cuốn sách này là nó không tập trung tỉ mỉ vào ngôn ngữ, nhưng xây dựng trên các khái niệm ngôn ngữ để giải thích cách sử dụng  khả năng mà những thư viện cơ bản thường dùng nhất cung cấp.

Như bản tóm tắt ngắn gọn của lịch sử ngôn ngữ cho thấy, có nhiều thứ để học ở đây, thậm chí nếu chỉ nhìn vào bản thân ngôn ngữ. Tôi từng là một người dùng C# trong mười năm và học các kĩ  thuật lập trình mới mỗi ngày. Hi vọng hai mươi giờ đầu tiên của việc lập trình C# được vạch ra trong cuốn sách này sẽ hướng dẫn một thập niên thực hành lập trình và tiếp tục học của bạn. Như cho nhóm thiết kế, chúng tôi vẫn gặp nhau sáu giờ một tuần, cố gắng để hình dung điều gì sẽ đến tiếp theo; Tôi đang tìm kiếm để khám phá.

Eric Lippert
Seattle, Washington
March 2010

(Theo http://blogs.msdn.com/b/ericlippert/)

https://yinyangit.wordpress.com

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s