Thứ Hai, tháng 8 28, 2006

Giấc mơ nhỏ bé của một lập trình viên

Một lập trình viên đang đi dọc theo bờ sông Sài Gòn. Vô tình anh ta nhặt được một cái chai, khi mở nắp, một bà tiên xuất hiện. “Ta sẽ ban cho con một điều ước,” bà tiên nói.

-          Con muốn đi du lịch sang Mỹ. Nhưng con rất sợ đi máy bay và không thích đi tàu thủy. Con ước có một chiếc cầu nói liền Việt Nam và Mỹ.

-          Việc ấy khó lắm con à. Ta không có khả năng làm điều đó.

-          Vậy xin bà cho con một điều ước nho nhỏ thôi. Hãy cho con có thể làm ra những phần mềm không có lỗi.

-          Thế con muốn chiếc cầu có mấy làn xe.

                                                                                             (Thời báo Vi Tính Sài Gòn- Số 14-06 (44))

 

Nếu bạn là một lập trình viên, chắc hẳn giờ đây bạn đang gật gù tán thưởng: thật chí lý, chí lý…  Truyện chỉ để giải trí nhưng nó lại đặt ra nhiều câu hỏi:

+ Nếu là một developer:

-          Có phải lỗi là một sự tất yếu đối với việc lập trình?

-          Nguyên do vì sao chúng ta hay mắc lỗi?

-          Làm thế nào để giảm thiểu tối đa lỗi?

 

+ Nếu là một nhà quản lý:

-          Có nên để nhân viên mình mắc lỗi trước khi giúp họ sửa chữa, hay là ngăn chặn trước khi lỗi xảy ra?

-          Ngưỡng lỗi có thể chấp nhận được? (Quota for Errors)

 

Tôi là một developer, nên chắc chỉ cần bận tâm hai câu hỏi đầu.

 

Bạn là một lập trình viên và đã tham gia phát triển nhiều phần mềm:

-          Vậy bạn đã bao giờ dừng lại và “ngắm nhìn” lại thành quả mà bạn đã tạo ra sau không ít thời gian miệt mài gõ bàn phím?

-          Tất nhiên là có rồi…

-          Và chắc hẳn trong tất cả các lần nhìn ngắm ấy, không lần nào bạn không tự nhủ rằng ta sẽ viết tốt hơn nếu có cơ hội được viết lại.

 

Thật vậy, các quy trình phát triển phần mềm hiện nay đều nhận thức rất rõ việc sửa chữa lỗi trong quá trình thiết kế và hiện thực. Một trong những kỹ thuật xây dựng phần mềm hiện nay là phát triển theo các bước lặp (iterative design). Tại sao lại là các bước lặp? Phải chăng vì nó cho ta cơ hội sửa chữa sai lầm gây ra ở các bước trước. Không những thế, các phương pháp luận phát triển phần mềm gần đây như là XP, Test Driven… đều quan tâm đến việc xây dựng các phương pháp nhằm giảm thiểu lỗi. Có thể kể ra một số kỹ thuật sau: refactoring trở thành một trong các yêu cầu cơ bản của việc lập trình; unit test được xem trọng và còn viết trước cả mã lệnh…

[ Nếu các bạn muốn tìm hiểu về Refactoring, xin giới thiệu bạn cuốn sách Refactoring: Improving the Design of Existing Code, còn Test Driven Development thì nên đọc Test Driven Development: By Example. ]

 

Các lý luận trên có thể minh chứng rằng:

Công việc lập trình ngày nay về cơ bản là khó.

Việc luôn tìm ra giải pháp tốt nhất ngay ban đầu là không thể.

Do đó:

 Mắc lỗi trong lập trình là tự nhiên và là sửa lỗi một phần của việc lập trình

 

Nguyên do vì sao chúng ta hay mắc lỗi?

 

Khi đã chấp nhận lỗi là vấn đề không thể tránh khỏi, việc tìm hiểu nguyên nhân là một trong các yếu tố giúp các lập trình viên giảm thiểu việc mắc lỗi. Tất nhiên là có rất nhiều nguyên nhân, đó có thể là thiếu kiến thức, thiếu kinh nghiệm, không hiểu rõ yêu cầu… Ở đây tôi không muốn bàn đến các vấn đề “đại sự” này vì nó chỉ được khắc phục thông qua sự nỗ lực của bản thân cũng như của cả đội ngũ phát triển dự án.

Tôi xin “mạn phép” nói đến một vấn đề rất nhỏ, và chúng ta hoàn toàn có thể khắc phục được, đặc biệt là dành cho các bạn lập trình viên trẻ tuổi. Đó là sự lạc quan của tuổi trẻ.

 

Sự lạc quan của tuổi trẻ:

Những lập trình viên trẻ tuổi thường luôn tự tin theo kiểu thế này “chúng ta có thể hoàn tất chúng cuối tuần này”, mà không hề nhận biết hết mức độ phức tạp của vấn đề. Ngoài ra, họ còn quan niệm người lập trình đích thực không cần … ngủ

 

Tôi đã làm chung trong nhiều dự án và phát hiện chúng tôi thường gặp phải những lỗi khi ép mình vào công việc:

-          Tiêu tốn rất nhiều giờ đồng hồ nhưng vẫn không debug ra lỗi, trong khi đó ngày hôm sau lại phát hiện ra lỗi chỉ trong vài phút.

-          Đi hiện thực lại những cái đã có sẵn, thậm chí là những hàm được built-in trong ngôn ngữ.

-          Không tin rằng chính mình đã viết ra những đoạn mã như vậy

-          Vấn đề được giải quyết nhưng thiết kế lại vô cùng rối rắm.

-         

Nếu bạn cũng gặp các vấn đề như vậy, phương châm dưới đây sẽ giúp bạn giảm thiểu được lỗi mắc phải trong khi lập trình:

 

Đối với công việc lập trình:

Việc nào để được ngày mai thì hãy để ngày mai

(trích từ tư tưởng của một kẻ lười )

 

Tôi định giới thiệu thêm một vài nguyên nhân khác, chẳng hạn như là “nỗi ám ảnh của design”, hay “việc phức tạp hóa vấn đề”, v.v…

 

Thế nhưng, đó là việc của ngày mai…

Thứ Sáu, tháng 8 25, 2006

Passion for Excellence

(bài dịch lấy từ www.nguoitapviet.info, nguyên văn tiếng Anh từ blog http://blog.360.yahoo.com/blog-9k7SE3k9cqj0m.0QxO6qN_Q-?cq=1&p=139 )

 

Có một điều từ từ lâu đã khiến tôi trăn trở rất nhiều - có lẽ cũng hơn 10 năm - và giờ đây tôi nghĩ là có thể đã đến lúc mình có thể chia sẽ với tất cả mọi người.

 

Rất thường xuyên, khi chúng ta chỉ ra những điểm yếu và vấn đề của dân tộc hay hệ thống của mình, tôi thường hay nghe những câu trả lời đại loại như "Chúng ta đã làm tốt hơn nhiều nước khác ở châu Phi" hay "Có rất nhiều nước cũng đang phát triển còn tệ hơn mình nhiều". Hay là, "Chúng ta là một nước nghèo".

 

Đó là cái mà tôi gọi là "Tâm lý kẻ bại trận".

 

Nó giống như trong một câu truyện kể rằng một thầy giáo nói với một học sinh của mình rằng "Em có thể làm bài tốt hơn như thế này - hãy cố gắng hơn" và cậu học sinh đó đã trả lời rằng "Nhưng thưa thầy, nhà em nghèo - và rất nhiều bạn khác cũng nghèo như em còn làm dở hơn em nhiều."

 

Tại sao lại so sánh chúng ta với nhữ kẻ bại trận khác? tại sao chúng ta không thể so sánh mình với những người giỏi nhất? Thay vì so sánh chúng ta với những nước đang phát triển và những nước nghèo khác, tại sao chúng ta không nói "Chúng a muốn một ngày nào đó sẽ vượt qua Pháp, qua mặt Mỹ, về công nghệ và kinh tế"?

 

"Bạn có điên không? Đây là một trong những nước phát triển cao nhất trên thế giới. Bạn đang mơ hoặc bạn là một người không thực tế."

 

"Bạn à, nếu như tôi nhớ không nhầm, thì chúng ta đã từng đánh bại hai quốc gia này trên chiến trường. Vậy có gì khác ngăn cản chúng ta trên lĩnh vực kinh tế và khoa học kỹ thuật?"

 

Thử tưởng tượng chúng ta hôm nay sẽ như thế nào nếu chủ tịch Hồ Chí Minh cách đây gần 70 năm nói với chúng ta rằng "Hỡi đồng bào, nước Pháp là một trong những quốc gia hùng mạnh nhất trênh thế giới. Chúng ta sẽ chẳng thể nào so sánh được với súng và đại bác của họ. Sẽ là điên khùng để đánh với họ, đừng nói gì đến suy nghĩ sẽ đánh bại Pháp". Nếu Bác Hồ nói như vậy - thử tưởng tượng chúng ta giờ đây đang ở đâu?

 

Thật không may là sau khi chúng ta dành chiến thắng trên chiến trường, những thế hệ kế cận đã không tiếp nối được tinh thần đó. Chúng ta đã không có khí thế, tinh thần và mong muốn dành chiến thắng.

 

Cách đây nhiều năm, trong một lần về VN, có khá nhiều người bạn trong Uỷ ban đối ngoại tại thời điẻm đó đã ra đón. Tôi đã rất buồn khi thấy một nhân viên cửa khẩu vòi tiền của Việt kiều và đã có lời với một trong những người bạn có mặt hôm đó: "Anh này, những người này đang đòi tiền người khác một cách không biết ngượng". Người bạn đó đã trả lời rằng "À, cậu thiếu gì tiền. Cậu có thể giúp đỡ những người anh em của mình chứ."

 

Nói thật là tôi đã cực kỳ thất vọng khi nghe câu trả lời này và vì vậy tôi cũng không trả lời lại. Đó là tư thế của kẻ bại trận, tư thế sẵn sàng chấp nhận những thứ kém chất lượng và đi tìm lý do để biện minh cho hành động đó. Người bạn này của tôi sau này trở thành đại sứ ở nhiều nước - tức là anh ta không phải là một người có vai vế thấp trong xã hội. Bạn có thể tưởng tượng sẽ có bao nhiêu người có cái tư tưởng bại trận như vậy trong xã hội [nếu quả thật chỉ những người tài mới được đưa lên vị trí cao - n.d.]

 

Và nếu nhiều người trong chúng ta có tâm lý và tư tưởng đó - liệu VN sẽ đi đến đâu?

 

Chúng ta, thế hệ này hôm nay, có lẽ nên tự xấu hổ với thế hệ cha ông của mình. Ông cha chúng ta đã không nói "Pháp và Mỹ rất mạnh - chúng ta không thể đánh bại họ". Họ chỉ có một suy nghĩ duy nhất trong đầu - sống hoặc chết. Đó chính là khao khát để vươn đến sự xuất sắc, là khao khát chiến thắng, là khao khát quyết không chịu đứng thứ hai (bởi vì như vậy đối với họ có nghĩa là chết).

 

Nếu chúng ta muốn chiến thắng, chúng ta phải suy nghĩ như một người chiến thắng. Và điều đó có nghĩa là, "Chúng ta muốn đánh bại kẻ mạnh nhất. Chúng ta muốn là người vô địch. Và chúng ta sẽ đi theo cách riêng của mình để đạt đến mục tiêu đó." Những tư tưởng như vậy sẽ tự động thúc đẩy chúng ta không chịu chấp nhận sự xoàng xỉnh, không chấp nhận chất lượng kém, không chấp nhận bất kỳ cái gì ngoài những nổ lực cao nhất trong mọi thứ chúng ta làm.

 

Một ai người sẽ nói - "Nhưng đấu tranh cho sự sống còn khác với đấu tranh cho sự giàu có. Trong văn hoá của chúng ta, sự giàu có chưa bao giờ là một cái gì to tác. Trong văn hoá truyền thống của chúng ta, là một giáo viên nghèo vẫn là một vị trí được trân trọng nhất."

 

Câu trả lời của tôi sẽ là:

 

(1) Khi chúng ta chống lại thực dân Pháp và Mỹ, đó không phải là chiến đấu vì sự sống còn. Chúng ta vẫn có thể sống dưới sự cai trị của thực dân Pháp và Mỹ. Nhưng dó không phải là một cuộc sống đáng tự hào. Vì vậy, chúng ta đấu tranh vì danh dự - không phải vì cái chết và sự sống.

 

(2) Ngày hôm nay, đấu tranh chống lại sự nghèo đói để đạt đến sự giàu có cũng là cuộc chiến vì danh dự - bởi vì mọi người xung quanh chúng ta đều luôn có thái độ xem thường những công dân của những nước nghèo.

 

(3) Nền văn hoá truyền thống của sự nghèo đói mà vinh quang thật ra là sai lầm. Nói theo cách nói khác, đó có thể xem là "ảo tưởng" - biện minh ("opium"). Từ góc nhìn của mỗi cá nhân, sự giàu có có lẽ tuỳ thuộc vào mỗi người và có thể sẽ là không quan trọng lắm đối với nhiều người. Tuy nhiên, từ góc nhìn của một dân tộc, nghèo đói là một sự sỉ nhục và giàu có là sức mạnh và sự độc lập. Giả như Việt Nam là một quốc gia giàu có và hùng mạnh cách đây hơn một ngàn năm thì chưa chắc Trung Quốc, Pháp, Mông Cổ, Nhật Bản, hay Mỹ đã có đủ can đảm mà xâm lăng chúng ta. Và nếu vậy thì chúng ta đã không mất quảng chừng đó thời gian để chiến đấu. Là một dân tộc, nghèo đói nghĩa là yếu thế, nghĩa là chúng ta để lộ điểm yếu cho người khác đánh, là để bị xâm lược bởi những quốc gia khác, để bị xem thường bởi những người nước khác. Đi vòng quanh thế giới và bạn sẽ thấy rõ điều này.

 

Nghèo đói là một căn bệnh của dân tộc. Nó cần phải bị xoá bỏ. Bất kể triết lý của bạn về sự giàu có là như thế nào - đối với một quốc gia, giàu có là một mục tiêu chính yếu.

 

Vậy nên, chúng ta cần phải tự bảo lẫn nhau rằng hãy đòi hỏi nhiều hơn từ chính bản thân mình và mọi người xung quanh. Hãy đòi hỏi nhiều hơn từ các cơ quan nhà nước và những người lãnh đạo đất nước. Hãy nhìn những quốc gia hàng đầu thế giới như Nhật, Anh, Úc - xem họ làm như thế nào - để học hỏi vàq quyết tâm vượt qua họ sau này (và chắc rằng họ cũng sẽ lấy làm vui lòng khi biết điều này, bởi một thầy giáo đúng nghĩa sẽ rất vui sướng khi học trò của mình vượt qua mình). Hãy thôi cái lối suy nghĩ "chúng ta nghèo - và vậy là đủ". Không, sẽ không bao giờ là đủ nếu chúng ta chưa đánh bại kẻ mạnh nhất trên thế giới này.

 

Hãy tin tưởng vào bản thân. Nếu chúng ta nghĩ rằng chúng ta sẽ làm được điều đó - chúng ta sẽ làm được.

 

Hãy đừng thoả mãn với sự xoàng xỉnh. Đừng bao giờ chấp nhận đứng thứ hai.

 

Vươn đến những gì tốt nhất.

 

Đòi hỏi những gì tốt nhất từ bản thân và mọi người.

 

Chúng ta có một lịch sử dài cho thấy rằng chúng ta sẽ làm được những điều mà người khác cho là không thể.

 

Chúc bạn một ngày thật tuyệt.

 

Trần Đình Hoành, LLB, JD

Luật sư, Washington DC

Thứ Năm, tháng 8 24, 2006

Download sử dụng eMulePlus

Một vài hướng dẫn giúp anh em download dùng eMulePlus với tốc độ cao:

1.       Cấu hình Port Forwarding cho DSL - ADSL Routers:

Tham khảo link: http://portforward.com/english/routers/

port_forwarding/routerindex.htm

2.       Tìm cho mình một file client.met thật tốt vào, bạn sẽ có độ ưu tiên cao khi phải đợi download.

 

 

Thứ Hai, tháng 8 21, 2006

Một tuần làm việc


Tuần làm việc của bạn có giống thế này chăng?

Thứ Bảy, tháng 8 12, 2006

Ngụy biện và vụ kiện về nửa học phí

Nói về ngụy biện, vụ kiện về nửa học phí thật thú vị:

 

Pro-ta-go-rát, nhà triết học cổ Hi Lạp là nhà ngụy biện nổi tiếng, nhận dạy cho một học sinh học luật là Ơ-ti-les. Thầy trò thỏa thuận học phí trả làm hai đợt, một nửa học phí trả khi Ơ-ti-les tốt nghiệp, còn nửa kia trả khi Ơ-ti-les ra tòa cãi thắng lần thứ nhât. Thế nhưng Ơ-ti-les sau khi tốt nghiệp mãi không chịu ra tòa đi cãi hộ. Pro-ta-go-rát rất suốt ruột bèn kiện ra tòa đòi nửa học phí kia. Ông ta nói với Ơ-ti-les:

“Nếu lần này anh thắng thì theo hợp đồng, anh phải trả cho tôi một nửa học phí còn lại kia. Nếu lần này anh thua thì theo phán quyết của tòa, anh cũng phải trả nửa kia. Anh dù thắng dù bại, cũng phải trả cho tôi nửa còn lại.”

 

Ông thầy những tưởng dù gì đi nữa thì cũng thu được nửa số học phí còn lại. Ai dè thầy hay sinh trò giỏi, thuật ngụy biện mà thầy truyền dạy, học trò đã lấy đó mà đối phó lại với thầy:

“Nếu lần này em thắng, thì theo phán quyết của tòa, em không trả cho thầy nửa số học phí kia. Nếu em thua thì theo hợp đồng, em cũng không trả cho thầy nửa nọ. Vụ kiện này em dù thắng dù bại thì đều không phải trả cho thầy nửa số học phí còn lại”.

 

Nghe nói lúc đó bọn họ đã làm cho quan tòa khó xử, không biết phải phán quyết thế nào. Kì thực, họ đều ngụy biện tất, tiêu chuẩn đã không được giữ đồng nhất trong quá trình suy luận.

Parkinson's law

From Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/Parkinson%27s_law)

 

Parkinson's Law states that "work expands so as to fill the time available for its completion."

 

It was first articulated by C. Northcote Parkinson in the book Parkinson's Law: The Pursuit of Progress, (London, John Murray, 1958) based on extensive experience in the British Civil Service. The scientific observations which contributed to the law's development included noting that as Britain's overseas empire declined in importance, the number of employees at the Colonial Office increased.

 

According to Parkinson, this is motivated by two forces: (1) "An official wants to multiply subordinates, not rivals" and (2) "Officials make work for each other." He also noted that the total of those employed inside a bureaucracy rose by 5-7% per year "irrespective of any variation in the amount of work (if any) to be done".

 

"Parkinson's Law" is also used to refer to a derivative of the original relating to computers: "Data expands to fill the space available for storage"; buying more memory encourages the use of more memory-extensive techniques. It has been observed over the last 10 years that the memory usage of evolving systems tends to double roughly once every 18 months. Fortunately, memory density available for constant dollars also tends to double about once every twelve months (see Moore's Law); unfortunately, the laws of physics guarantee that the latter cannot continue indefinitely.

 

"Parkinson's Law" could be more generalized still as: "The demand upon a resource always expands to match the supply of the resource." Brian Tracy put forth an interpretation of this in his course The 21 Secrets of Self-Made Millionaires, noting that "expenses rise to meet income", as a corollary of the law.

 

It is interesting to note that this generalization has become very similar to the economics law of cost and demand; that the lower the cost of a service or commodity, the greater the demand.

 

Parkinson also proposed a rule about the efficiency of administrative councils. He defines a coefficient of inefficiency with the number of members as the main explaining variable.

 

Thứ Sáu, tháng 8 04, 2006

Bernard Shaw và những câu trả lời hóm hỉnh

Bernard Shaw, nhà văn nổi tiếng hài hước người Anh, sau khi đã thành danh thì một nghệ sĩ múa nổi tiếng đến cầu hôn, cô ta nói:

“Nếu anh đồng ý kết hôn với em, con chúng ta đẻ ra sẽ thông minh như anh và xinh đẹp như em. Như vậy sẽ rất là hay!”

Bernard Shaw với phong cách hài hước vốn có:

“Nếu tôi và cô lấy nhau, con cái sinh ra sẽ xấu như tôi và đầu óc đần đọn như cô. Như vậy thật đáng sợ!’

 

Nhận xét: Đây là phương pháp dẫn từ khả năng, phương pháp biện luận phản bác suy đoán về tình hình có thể trong tương lai của sự vật mà đối phương nêu ra, từ đó mà chọn lựa tình hình có thể đối lập với họ.

 

Có một lần cột sống của Bernard Shaw bị đau và cần phải rút một cái xương chân để chắp cho cột sống. Sau khi mổ xong thầy thuốc có thêm một chút tiền bồi dưỡng, liền nói:

“Ông Bernard Shaw này, đây là ca mổ xưa nay chúng tôi chưa từng thực hiện”

Bernard Shaw cười nói: “Tốt lắm, xin hỏi ông sẽ trả tôi bao nhiêu tiền thực nghiệm đây?”

 

Nhận xét: Đây là phương pháp dẫn từ nhân quả, từ cùng một nguyên nhân mà dẫn tới nhiều kết quả khác nhau, cần lựa chọn kết quả có lợi cho mình trong biện luận.

 

Bernard Shaw tới thăm Trung Quốc, Lỗ Tấn và Sái Nguyên Bồi ra tiếp ông tại nhà bà Tống Khánh Linh ở Trùng Khánh. Sau bữa cơm, mọi người dạo chơi vườn hoa, lúc này thời tiết tạnh ráo sau nhiều này mưa sụt sùi, ánh mặt trời hiền hòa rọi trên mái tóc bạc của Shaw. Sái Nguyên Bồi vui vẻ nói:

“Ông Shaw này, ông thật là hên, ông đã nhìn thấy mặt trời ở Thượng Hải rồi đó”.

Shaw nghe vậy mỉm cười:

“Không, đó là mặt trời gặp may, đã nhìn thấy tôi ở Thượng Hải đấy!”

Bernard Shaw thay đổi trật tự từ làm cho câu nói thật là ngộ, chan chứa ý vị.

A-ri-tốt cũng từng sử dụng thật biện luận này khi trả lời câu hỏt: “Ông và người bình thường có gì khác nhau?”

”Họ sống là để ăn còn tôi ăn để sống ”

 

Tương truyền Hai-phây sau khi biểu diễn lần đàu ở Luân đôn, Bernard Shaw vĩ đại đi ra sau sân khấu nói với chàng trai trẻ kéo vĩ cầm này:

”Trên thế gian này không có cái gì thập toàn thập mĩ cả, nếu không các thần sẽ đố kị. Tôi đề nghị anh: đêm đêm trước khi đi ngủ, ít nhất hãy kéo một nốt sai”

Vốn hết lòng ca ngợi chàng trai chơi vi-ô-lông, nhưng ở đây Bernard Shaw lại dùng thuật phản ngữ với lời nói ngược để biểu đạt, để lại cho ta một dư vị lâu dài.