Xin chào các thành viên trong diễn đàn congdongcviet !
Mình yêu máy tính, và lập trình từ nhỏ. Thông thường khi “bí” một vấn đề nào, mình lên mạng tìm kiếm. Hầu hết là tìm ra được lời giải nhờ các bạn khắp nơi từng hỏi và từng trả lời. Thiết nghĩ mình cũng nên có một chút đóng góp gì đó ngược lại cho cộng đồng lập trình viên, dù ít dù nhiều. Qua quá trình tự học và tìm tòi, cứ khi nghe tới một ngôn ngữ mới nào là mình tìm sách đọc và thực hành, nay cũng đã trải qua một số ngôn ngữ và IDE sau: đầu tiên là lập trình file .bat(trong MS-Dos), rồi Foxpro, Pascal,C,C++,Visual Basic 3.0, Java, Visual Basic 6, Visual C++6.0 MFC, Visual J++ 6.0, Visual Basic.Net, HMTL,Asp, Javascript, PHP, và gần đây nhất là C# và ASP.net. Mình nhận thấy tất cả ngôn ngữ chỉ là công cụ, và mục đích của chúng là tạo ra sản phẩm. Công cụ nào cũng có điểm mạnh, điểm yếu, nhưng nếu bạn sử dụng không đúng cách thì không thể tạo ra một sản phẩm tốt.
Vậy làm thế nào để sử dụng công cụ một cách đúng cách. Đó chính là tư duy giải thuật lập trình. Tư duy về giải thuật là cách chúng ta trừu tượng bài toán thành từng bước nhỏ, từng bước, và lắp ráp chúng thành một sản phẩm đúng.
Ví dụ để xây dựng một căn nhà, các bạn cần chuẩn bị gạch, cát, xi măng, nước, gỗ, ngói lợp… Khi có đủ nguyên vật liệu, các bạn bắt tay thực hiện từng bước như xây dựng móng nhà, xây dựng các bức tường, lợp ngói…
Trước đây mọi người lập trình theo phương pháp thủ tục, chia một vấn đề lớn thành nhiều phần nhỏ khác nhau và xử lý từng phần một theo đúng trình tự. Đây là một phương pháp tốt và từng được áp dụng trong một thời gian dài. Tuy nhiên khi chương trình ngày một càng lớn, việc duy trì và phát triển hàng trăm ngàn thủ tục là một công việc khó khăn, tốn chi phí và dễ sai sót. Khi đó phương pháp lập trình hướng đối tượng ra đời. Phương pháp này cũng chia một bài toán lớn thành các phần nhỏ, nhưng các phần nhỏ này được đóng gói vào từng đối tượng, các đối tượng này gần gũi với thực tế hơn rất nhiều, nên việc phát triển phần mềm ngày càng dễ tiếp cận với mọi người.
Ví dụ để lắp ráp một cái ti vi, chúng ta có đối tượng màn hình, đối tượng mainboard, đối tượng loa, đối tượng remote… sau đó lắp lại với nhau. Yahooo! Thật dễ dàng đúng không các bạn.
Trong topic này mình không có ý định giới thiệu về lập trình hướng đối tượng, vì sách vở về chủ đề này có quá nhiều, từ tiếng anh qua tiếng việt, và ít nhiều các bạn vào diễn đàn này đều đã nắm qua.
Vậy chủ đề thật sự của topic này là gì?
Có ai trong các bạn từng đặt câu hỏi ”tôi có khả năng xây 1 căn nhà, căn nhà 1 tầng, 2 tầng thậm chí 3 tầng. Nhưng không biết xây căn nhà 100 tầng thì sao?” Đối với căn nhà 3 tầng, khi có sai sót, hay thay đổi ở tầng 2, bạn có thể sửa, hoặc thậm chí đập bỏ và làm lại, nhưng đối với căn nhà 100 tầng, bị sai sót ở tầng thứ 3, chẳng lẽ bạn đập bỏ cả 97 tầng còn lại?
Và đó là nguyên nhân ra đời của một thứ gọi là Design Patterns – Các Mẫu Thiết Kế. Các bạn chắc đã từng nghe ai đó nói tới mẫu thiết kế, đúng vậy, tôi nghĩ bạn đã nghe nói đến nó trong lĩnh vực xây dựng kiến trúc. Và giờ đây, chúng ta sẽ nói tới nó trong lĩnh vực xây dựng phần mềm. Vậy mẫu thiết kế là gì: Nói nôm na nó là những giải pháp để giải quyết những vấn đề thường gặp trong phát triển phần mềm theo hướng đối tượng. Nó là những bản mẫu, ta dựa vào đó xây dựng nên những đối tượng. Vậy lợi ích của nó thế nào? Đó là nó giúp ta có những đối tượng mềm dẻo, dễ thay đổi, dễ bảo trì. Và vì sao mẫu thiết kế lại dính dáng tới lập trình hướng đối tượng. Thật ra thì nó bổ sung cho lập trình hướng đối tượng, nó mở rộng khả năng to lớn cho lập trình hướng đối tượng.
Gần đây khi mình có dịp đọc tới Design Patterns, mình thật sự thấy nó cuốn hút, rất có ích cho dân lập trình. Tuy nhiên tài liệu về design patterns cũng không nhiều(mình biết khoảng hơn chục cuốn), ngôn ngữ chủ yếu là tiếng anh, tài liệu tiếng việt thì ít, chắc chỉ có 1 cuốn (do MKPUB phát hành, mình chưa được đọc, vì mình ở tỉnh, không ở Tp.HCM nên không mua được). Cách tiếp cận vấn đề của mỗi sách cũng rất khác nhau, có khi rất chuyên ngành, và trừu tượng, nhiều khi gây khó khăn cho cả người bản xứ chứ không dám nói tới người Việt mình.
Với tham vọng đóng góp cho cộng đồng, mình sẽ dịch thuật một cuốn sách mình cho là tương đối dễ tiếp cận.
Sau khi đọc qua một số cuốn sách như sau:
- Design Patterns: Elements of Reusable Object-Oriented Software (Do bộ tứ tác giả Erich Gamma, Richard Helm, Ralph Johnson, John M.Vlissides). Cuốn kinh điển và đầy đủ nhất
- C# 3.0 Design Patterns: ByJudith Bishop. ( Nhà xuất bản Oreilly)
- Head First Design Patterns ( Nhà xuất bản Oreilly)
- Design Patterns: by Christopher G. Lasater ( Nhà xuất bản Wordware)
- C# Design Patterns: A Tutorial by James W.Cooper ( Nhà xuất bản Addison-Wesley)
- Design Patterns for Dummies: by Steve Holzner,PhD. ( Nhà xuất bản Wiley)
Mình quyết định chọn cuốn Design Patterns for Dummies, tác giả Steve Holzner,PhD để giới thiệu đến các bạn. Có các nguyên nhân sau:
- Cách dẫn dắt dễ hiểu, ví dụ sinh động, ngôn ngữ thân thiện
- Không sử dụng UML để mô tả biểu đồ, ( sẽ gây khó khăn cho các bạn chưa nắm vững UML)
- Số mẫu tương đối đầy đủ.
- Số trang sách không nhiều lắm. Chỉ khoảng 300trang.
Tuy nhiên các ví dụ trong sách là được viết từ Java. Có thể sẽ gây ra lúng túng một chút cho các bạn sử dụng C#. Nhưng các bạn cũng biết cha đẻ của C# chính là cha đẻ của Borland C, Borland C++, Delphi, Visual J++, nên các bạn sẽ thấy Java và C# không khác biệt lắm.
Đối với các bạn chưa thể tự mình chuyển đổi mã nguồn từ Java ->C# theo các ví dụ trong sách, mình cũng viết lại các ví dụ theo C#. Tuy không thể hiện 100% việc chuyển đổi, nhưng vẫn nổi bật được ý đồ của tác giả.
Vì trình độ anh ngữ của mình chưa tốt (chỉ tự học). Nên không đảm bảo dịch sát 100% ý đồ tác giả. Mặt khác việc dịch thuật, và chạy chương trình cũng tốn nhiều thời gian. Mỗi tuần mình sẽ đăng một chương của cuốn sách. Cuốn sách 12 chương. Tổng thời gian trong 3 tháng, các bạn sẽ được làm quen với hầu hết các mẫu thiết kế. Có thể thời gian trên so với mấy cuốn sách của SAM: “Học trong 24giờ”, sẽ làm các bạn thấy nản. Nhưng lập trình là một nghệ thuật, mà học cách để làm chủ nghệ thuật thì 3 tháng chắc chắn còn chưa đủ. Mong các bạn hãy kiên nhẫn.
Mỗi chương mình sẽ lập một topic để các bạn tiện theo dõi và tranh luận.
Thanks all
Trích nguồn từ: (haihth.wordpress.com)