Article: Sự tối ưu hoá chính là kẻ thù tệ hại nhất của bạn 1122

thanhleminh.myopenid.com
Updated over 2 years ago

Giới thiệu

Đó là một tiêu đề gây sự chú ý! Nhưng tôi hoàn toàn nghiêm túc về điều này!

Đầu tiên, các bạn nên biết một ít về tôi: nghiên cứu tiến sĩ của tôi là một trong những công trình nghiên cứu về sự tự động của việc tối ưu trình dịch dựa vào các đặc tả hình thức ("Machine-Independent Generation of Optimal Local Code" - Viện khoa học máy tính CMU, 1975). Sau công trình này, tôi đã nghiên cứu 3 năm ở CMU về hệ thống máy tính đa xử lí C.mmp sử dụng hệ điều hành Hydra của chúng tôi, một hệ điều hành bảo mật, năng suất. Sau đó tôi trở lại nghiên cứu trình biên dịch trong dự án PQCC (Production Quality Compiler-Compiler - Hệ thống trình biên dịch năng suất chất lượng ), sau cùng dự án này đã trở thành Phòng thí nghiệm Tartan, một công ty biên dịch, nơi mà tôi đã tham gia vào nhóm xây dựng công cụ. Tôi đã bỏ gần một thập kỷ rưỡi viết và sử dụng các công cụ tính toán năng suất lập trình.

Bài luận này gồm nhiều phần và trình bày chủ yếu kinh nghiệm của riêng tôi. Tất cả những câu chuyện tôi kể đều đúng. Tên tuổi trong bài cũng không bị thay đổi, mặc dù có một vài chi tiết đã được lược bỏ cẩn thận.

Article: Các nguyên lí cơ bản trong thiết kế hướng đối tượng 2750

phananhvu.myopenid.com 125
Over 2 years ago

Trong một thảo luận về kế thừa không hết ở JavaVietnam, người ta bàn về vấn đề thiết kế một pattern làm sao để lớp con kế thừa lớp cha nhưng tự loại bỏ những method mà nó không mong muốn. Điều đó có nghĩa là lớp con không tuân thủ "giao ước" (xin dùng từ của anh cl, ý chỉ contract) định trước, tức là nó không tuân thủ một trong những nguyên tắc cơ bản của thiết kế hướng đối tượng (OOD - Object oriented design) là Liscov substitution principle. Điều đó cho thấy khi thiết kế, tìm giải pháp cho một vấn đề nào đó, việc nắm rõ các nguyên lí cơ bản của OOD là vô cùng quan trọng.

Bài này xin giới thiệu về 5 nguyên tắc cơ bản của OOD là:

  1. Open closed
  2. Liskov substitution
  3. Dependency inversion
  4. Interface segregation
  5. Single responsibility
chauhonglinh.myopenid.com 2
over 2 years ago
Gợi ý một cách chi tiết hơn về OCP thì nó như thế này:

- Thứ nhất, nó có thể đúng vào hoàn cảnh là trong một nhóm làm việc hoặc nhiều nhóm làm việc cùng nhau, có người viết framework, và những người kia mở rộng framework để tạo thành phần mềm, thì việc mở rộng chức năng hoặc thay đổi chức năng bằng cách mở code của class có sẵn ra để sửa lại là không được khuyến khích. Tuy nhiên, trong những trường hợp re-use code của người khác và sử dụng opensource mà nó không thực sự lý tưởng cho mục đích của mình, và việc mở rộng bằng inheritance hay composition lại tạo ra những phức tạp không cần thiết, thậm chí tạo ra thiết kế dở hơi, thì việc refactoring, hoặc mở code của class ra viết lại là rất cần thiết.

- Thứ hai, đối với những dynamic language, ví dụ như Smalltalk hay Ruby, thì ranh giới giữa việc modification và extension là rất mờ nhạt. Ví dụ các chú có thể thấy là người ta không cần phải mở code của class String hay Fixnum ra viết lại, mà vẫn có thể thêm methods và variables vào class String hay Fixnum.

- Nhiều khi do chỉ cần thêm một chức năng, mà tạo ra một subclass là việc rất dở hơi. Tạo ra khoảng 5 unrelated functionalities thì lại cần 5 subclass, thì số lượng code phải viết thêm rất nhiều, khối lượng công việc bảo trì cũng tăng lên, và nhiều khi tạo ra các class hierarchy không tự nhiên.

Nói về Interface segregation, anh gợi ý một cách chi tiết hơn thì nó như thế này: Trong distributed programming, có một design pattern là Facade design pattern. Nói chung là nó vi phạm Interface segregation, nhưng tại sao người ta vẫn dùng? Tiếp nữa, trong dynamic language, ai cần interface? Ai sợ interface thay đổi?


Còn mấy cái còn lại, các chú cố gắng đào sâu thêm về chi tiết nhé.

Article: CLOSING THE GAP 755

thanhleminh.myopenid.com
Updated over 2 years ago

Chúng tôi có giới thiệu về một khái niệm mà tôi gọi là "the gap" vào tháng trước:

           Product <------------------------->Customer.

"Gap" chính là khoảng cách giữa khách hàng và sản phẩm của cty bạn. nó tồn tại, thì khi đó khách hàng sẽ ít mua sản phẩm công ty bạn hơn, và tất nhiên doanh thu của công ty bạn sẽ kém đi.

Trong qui luật kinh doanh để tồn tại, cái "gap" này phải được giải quyết triệt để. Đến khi nó xảy ra, "gap" mô tả tất cả các bản phát hành và những trở ngại ngăn cản khách hàng mua sản phẩm.

Article: So sánh OpenGL và Diect3D 835

phananhvu.myopenid.com 125
Over 2 years ago

Direct3DAPI độc quyền, được thiết kế bởi Microsoft Corporation để tăng tốc xử lí đồ họa 3D trong môi trường Windows. OpenGL là một API theo chuẩn mở, cung cấp các hàm hiển thị hình ảnh 2D, 3D trong hầu hết các hệ điều hành hiện đại. OpenGL và Direct3D đều được implemente ở driver màn hình.

Bài này so sánh hai API kể trên dựa trên các tiêu chí liên quan đến phát triển game.

Article: Coding style 1171

thanhleminh.myopenid.com
Updated over 2 years ago

Điều rất thú vị về Python: sau FORTRAN được viết trên thẻ đục lỗ, nó là ngôn ngữ phổ biến đầu tiên làm cho khoảng trắng có ý nghĩa. Trong Python, khối lệnh không nằm trong ngoặc nhọn { và }, mà chỉ đơn giản là thụt đầu dòng.

Nhiều người thốt lên: "Khoảng trắng không được có ý nghĩa!", nhưng họ không nhớ tại sao. Lí do chính là bạn khó phân biệt được khoảng trắng, bởi vì, um, nó trắng. Do đó, trong makefile của Unix chuẩn, một số dòng phải bắt đầu bằng tab, nếu bạn hoặc editor của bạn tự động thay 1 tab bằng 8 khoảng trắng (tiện quá nhỉ!), thì makefile sẽ tự nhiên không hoạt động nữa mà không báo lỗi. Và chúng ta rút ra bài học: khoảng trắng không được có ý nghĩa!

Ừ, thế đấy.
Hình như ta đi quá xa.
Và đây là cái hay của Python.
Trong những ngôn ngữ giống C (C, C++, Java) mắt người phân biệt khối lệnh bằng thụt đầu dòng, nhưng trình biên dịch phân biệt bằng { và }. Do đó trong trường hợp thụt đầu dòng và ngoặc nhọn không đi đôi với nhau, cái mắt người khó nhìn thấy hơn --ngoặc nhọn-- thắng thế. Nhưng tại sao chúng ta cần 2 cách để xác định khối lệnh, một cho người và một cho trình biên dịch? Tại sao không dùng một cách thôi?

Ken Arnold phát triển ý tưởng này từ Python. Ông đưa ra thứ còn cấp tiến hơn, và nó giống như những tư tưởng lớn, nghe có vẻ điên rồ nhưng lại cực kì hợp lí.

Article: Những sai lầm thường gặp về outsourcing 1423

phananhvu.myopenid.com 125
Updated over 2 years ago

Trong quyển sách Beyond Java, xuất bản vài năm trước có đoạn:

Java has characteristics that many of us take for granted. You can find good Java developers everywhere. No one ever gets fired for choosing Java. It's mature and ready for outsourcing.

Tại sao lại nói Java là "ready for outsourcing"? Ý nghĩa sâu xa của câu này là gì? Chúng ta thử tìm hiểu xem sao.

phananhvu.myopenid.com 125
over 2 years ago

một số ông tác giả -> một số tác giả

cái mà thị trường là mua giá trị gia tăng -> cái mà thị trường là giá trị gia tăng.

Article: Khái quát về design pattern 3719

phananhvu.myopenid.com 125
Over 2 years ago

Trong kỹ thuật phần mềm(software engineering), design pattern là giải pháp tổng quát có thể dùng lại cho các vấn đề phổ biến trong thiết kế phần mềm. Design pattern  không phải là design cuối cùng có thể dùng để chuyển thành code. Nó chỉ là các gợi ý, mẫu mà chỉ ra cách giải quyết vấn đề trong các trường hợp. Các design pattern trong thiết kế hướng đối tượng thường chỉ ra mối quan hệ và tương tác giữa các lớp hay các đối tượng, chứ không chỉ ra các lớp, đối tượng cụ thể nào. Thuật toán không phải design patterns vì chúng chỉ qiải quyết các vấn đề tính toán chứ không giải quyết các vấn đề thiết kế.

Article: Singleton và Singleton trong Ogre 915

phananhvu.myopenid.com 125
Over 2 years ago

Trong Singleton, chỉ có một instance của class tồn tại ở một thời điểm. Instance đó có thể được truy xuất ở bất cứ đâu trong chương trình. Đây là một design pattern rất hữu dụng trong một số trường hợp. Tuy nhiên, khi dùng phải chú vài điều. Hơn nữa, Singleton là design pattern được sử dụng khá nhiều trong các "manager" class của Ogre3D.

Bài này xin giới thiệu về Singleton nói chung và về cách Singleton được sử dụng trong Ogre3D.

Article: The Cathedral and the Bazaar 767

phananhvu.myopenid.com 125
Over 2 years ago

 

 

The Cathedral and the Bazaar (viết tắt là CatB) là một tiểu luận của Eric S. Raymond về chủ đề software engineering, dựa trên quan sát quá trình phát triển Linux kernel và kinh nghiệm quản lý open source project, fetchmail. Được giới thiệu lần đầu tiên tại Linux Kongress ngày May 27, 1997 và được xuất bản trong cuốn sách cùng tên năm 1999, đây được coi là tuyên ngôn của Open Source Initiative.

Bài luận so sánh 2 mô hình phát triển các phần mềm tự do (free software):

  • Mô hình Cathedral: source code được phát hành khi mỗi phiên bản được release nhưng code giữa các lần release chỉ giới hạn trong một nhóm nhỏ các software developers. GNU EmacsGCC là một ví dụ.
  • Mô hình Bazaar: code được phát tán trên Internet cho cộng đồng. Raymond chỉ ra Linus Torvalds, trưởng dự án Linux kernel, là người phát minh ra qui trình này. Raymond cũng kể ra những câu chuyện về việc áp dụng mô hình này trong dự án fetchmail.

Article: Tất cả đều là object 699

id.cntt.tv/giaodn
Updated over 3 years ago
Xin nhái tên phim “Tất cả dòng sông đều chảy” để đặt tên cho chủ đề này.

Ruby có một số triết lí rất hay, ví dụ DRY. Chủ đề này xin đề cập đến triết lí “Tất cả đều là object”, các lập trình viên đến từ những ngôn ngữ như C hoặc Java hầu hết chưa thấu hết ý nghĩa.

myown.myopenid.com 9
over 3 years ago

Hì. tất cả đều là object, câu này hay...

nhưng không phải là mới... và không chỉ có trong ruby