Article: Từ thợ đến thầy - Trùng hợp ngẫu nhiên 720

nguoitapdich.myopenid.com 35
Updated about 1 year ago

Có quan niệm cho rằng chỉ cần thiết kế xong, giai đoạn viết mã sẽ là cơ chế tự động, nghĩa là có thể chuyển bản thiết kế thành mã một cách tự động. Quan niệm này chính là lí do nhiều chương trình xấu xí, không hiệu quả, cấu trúc kém, không thể bảo trì, hoặc đơn giản là chạy sai.

Viết mã không phải là cơ chế tự động. Nếu thế, hẳn công cụ CASE đã thay thế con người từ tận những năm 1980. Từng phút một từng phút một lập trình viên cần dùng cái đầu của mình để ra quyết định để chương trình đang viết hôm nay ngày mai viết tiếp vẫn chạy chính xác.

Lập trình viên nào viết mã mà không chủ động suy nghĩ bằng cái đầu của mình, chính là đang lập trình theo kiểu trùng hợp ngẫu nhiên (programming by coincidence)—có thể chương trình chạy, nhưng anh chàng không hiểu tại sao nó lại chạy được.

Đa số lái xe đều lái theo kiểu tự động—không ra lệnh một cách tường minh là chân phải nhả ga, tay phải quay tay lái—chỉ nghĩ "chậm lại và rẽ phải." Tuy nhiên, lái xe cẩn thận đều thường xuyên nhận định tình huống, kiểm tra xem có khả năng tai nạn không, đặt mình vào tình trạng an toàn nếu chẳng may có tai nạn nảy sinh. Viết mã cũng vậy—có thể ngày nào cũng viết cùng mã giống nhau như lái xe đi ngày nào cũng đi cùng lộ trình, luôn giữ đầu óc sáng suốt thì cũng có thể ngăn tai hoạ ập đến.

Article: 6 thói quen của agilist: (1) Coi trọng feedback 1081

nguoitapdich.myopenid.com 35
Updated about 1 year ago

Từ agilist trong tựa đề của loạt bài viết này chỉ những lập trình viên phát triển phần mềm bằng phương pháp Agile (phương pháp lập trình linh hoạt). Agilist vừa thích ứng với hoàn cảnh, vừa phát triển phần mềm một cách linh hoạt. Loạt bài viết này dựa trên kinh nghiệm của bản thân tôi, là một agilist, cộng với những phát hiện về những agilist xung quanh, xin được giới thiệu về phương pháp Agile thông qua những thói quen của agilist.

Tôi không là lập trình viên vĩ đại. Tôi chỉ là lập trình viên đã tập được cho mình những thói quen vĩ đại. (Kent Beck, quyển Refactoring: Improving The Desing Of Existing Code)

Article: Convention over configuration: Dùng inherited thay cho cấu hình 593

ngocdaothanh.myopenid.com 149
Updated over 2 years ago

Trong Ruby, các class đều có sẵn class method tên là inherited, các module đều có module method tên là included. Hai method này được gọi mỗi khi class được thừa kế hoặc module được include. Tận dụng tính năng này, ta có thể giảm được mã để cấu hình, thường ngắn nhưng lại phiền phức.

Bài viết này minh hoạ cách dùng inherited bằng ví dụ về block (khối HTML như chỗ để chat, danh sách bài viết mới nhất) trong chương trình CMS. Trong chương trình CMS, ta muốn liệt kê tên tất cả những loại block để admin có thể click vào để tạo block mới của loại block đó. Thường phải có đoạn cấu hình để liệt kê tất cả loại block, nhưng nếu dùng inherited thì khỏi.

Article: Starbucks không thực hiện two-phase commit 1105

phananhvu.myopenid.com 125
Updated over 2 years ago

Nhiều năm trước, tôi làm việc cho một ISP khi ISP này đang đưa ra một dịch vụ DSL mới. Tất nhiên, họ không trực tiếp cung cấp dịch vụ này. Họ cần xe tải, kĩ thuật viên, dây nối và các thứ lằng nhằng khác. Họ chỉ đơn thuần bán lại dịch vụ DSL của công ty Covad. Công ty Covad này lại phụ thuộc rất nhiều vào một đối tác đến từ một công ty điện thoại địa phương là một công ty chỉ muốn Covad chết, chết và chết! Tuy nhiên điều ấn tượng nhất với tôi là thủ tục đăng kí của công ty này hết sức phức tạp. Các anh chàng của chúng ta trưng những tấm poster rất lơn, với những biểu đồ vô cùng phức tạp mà dưới cách nhìn nhận của một programmer, tôi thấy có khá nhiều "bug". Những người cung cấp dịch vụ đã thiết kế thủ tục đăng kí như những người thật tử tế, nhưng không phải như lập trình viên. Họ không biết gì về exception handling, asynchronous processing, two-phase commit, multithreading, và ngay cả mệnh đề “if”. Nhan đề của bài này ngay lập tức thu hút được sự chú ý của tôi. Là một programmer, tôi thích diễn tả các tình huống trong cuộc sống bằng các khái niệm trong lập trình hay các phép ẩn dụ trong kiến trúc phần mềm.

Trong thực tế, tôi nghĩ cần chú ý hơn tới sự tương đồng giữa việc thiết kế các công việc kinh doanh (business process design) với kiến trúc phần mềm (software architecture). Tôi nghĩ các công việc kinh doanh hiện đại phức tạp đến mức cần phải có các kĩ năng về kiến trúc phần mềm để có thể xoay xở được. Cụ thể là lí do mà các công ty điện thoại cung cấp dịch vụ khách hàng quá tệ đơn giản là vì người thiết kế các thủ tục này chẳng hiểu gì về khái niệm two-phase commit. Thế là bạn phải chờ 15 phút, sau đó mất thêm 25 phút với một gã đần chả giúp giải quyết được gì để rồi cuối cùng anh ta chuyển bạn tới gặp cấp trên và ... click, chuông reo.

claimid.com/mozo
over 2 years ago

Bài viết rất hay, những khái niệm khô khan giờ đây hoàn toàn dễ hiểu với mọi người. Mình nghĩ khái niệm asynchronous processing sẽ còn gặp nhiều trong tương lai.

Article: Lỗ chân trâu MVC: viết quá nhiều mã trong C 1511

ngocdaothanh.myopenid.com 149
Updated over 2 years ago

What và How thường là 2 câu hỏi quan trọng nhất đối với lập trình viên. Đa số lập trình viên đều biết MVC là gì và dùng nhoay nhoáy hàng ngày. Bài viết này đề cập đến tật xấu thường gặp khi sử dụng MCV: viết quá nhiều mã trong C.

ngocdaothanh.myopenid.com 149
over 2 years ago

Mình tên N.

Theo kinh nghiệm (ví dụ xem screencast akia giới thiệu) thì tổ chức hình tam giác (1 vòng tròn) là thực dụng nhất. Tổ chức thành 2 vòng tròn trông đẹp nhưng sẽ mất công hơn.

Article: SEO, to_param, và tiếng Việt 722

ngocdaothanh.myopenid.com 149
Updated over 2 years ago

Nếu không có những search engine như Google, chắc cả tỉ mạng trên trái đất này chỉ có vợ và con chó biết đến trang web của bạn là cùng. Điều này cho thấy search engine chính là Ête của Internet, và vấn đề là làm thế nào để tăng hạng trong bảng xếp hạng của search engine.

Ta sẽ tránh dùng cách bất đạo như hình dưới.

Article: Em là bạn của A pa chải 1233

phananhvu.myopenid.com 125
Updated over 2 years ago

Ai chưa biết apache là ai thì tra trong wiki nhé. Ở đây chỉ bàn về bạn của apache thôi.

phananhvu.myopenid.com 125
over 2 years ago

hay quá

nào thì MAMP :D

Article: Bạn tiến hoá nhanh cỡ nào? 981

nguoitapdich.myopenid.com 35
Updated over 2 years ago

Từ khi Darwin xuất bản quyển Nguồn gốc các loài, tiến hóa đã trở thành khái niệm có cơ sở vững chắc. Darwin hiểu thấu rằng tiến hóa - thông qua quá trình chọn lọc tự nhiên - đã dẫn đến sự ra đời và phân hóa tất cả các loài. Giáo hội (thời điểm đó đã có cơ sở giáo lí vững chắc, thậm chí ngày nay vẫn còn giáo phái bác bỏ khái niệm tiến hóa) tất nhiên nóng mặt với điều này, phải đối mặt với chứng cứ khoa học quá rõ ràng.

Đầu thế kỉ 20 chứng kiến cuộc nổi dậy của chủ nghĩa Darwin mới. Nó đã làm được việc là cung cấp cơ chế của chọn lọc tự nhiên. Chọn lọc tự nhiên không phải đang xảy ra ở cấp độ loài, mà ở cấp độ gene. Chọn lọc tự nhiên chỉ đơn giản là thể hiện ra bên ngoài của cuộc chơi thống kê lâu dài dựa trên hoán đổi các gene, và điều khó chịu nữa là các loài (gồm cả loài người) là chỗ cư ngụ tuy tinh vi về hình thức nhưng chỉ tạm thời của các gene đó!

Tạo hóa không nương tay với thể xác. Tạo hóa không hề chú ý tới cái vật cụ thể mà người ta mệnh danh là cá nhân. Tạo hóa chỉ chú ý tới chủng loại, tới nòi giống.

Richard Dawkins, nhà khoa học đã được vinh danh và tác giả của quyển "The Selfish Gene", đã tiến một bước xa hơn. Ông cho rằng khả năng thích nghi và tiến hóa của một loài còn có thể thay đổi theo thời gian. Nói cách khác, khả năng tiến hóa là dấu tích có thể tiến hóa, giống như đuôi (giờ chỉ còn xương cụt) hoặc ruột thừa của con người.

nguoitapdich.myopenid.com 35
over 2 years ago

Agile chú trọng communication nên khó dùng với offshore out sourcing (gia công phần mềm). Kinh nghiệm với Ấn Độ của Martin Fowler.

Article: MVC của V: tách V và C ra khỏi trang HTML 1155

ngocdaothanh.myopenid.com 149
Updated over 2 years ago

Khi lập trình web theo cấu trúc MVC, hiển nhiên trang web HTML xuất ra là V. Tuy thế, bản thân cái V này lại còn có thể phân tách tiếp thành MVC. Điểm lợi của cấu trúc MVC thì nói chung ai cũng biết, do đó nếu làm được điều này thì quá lợi.

Bài viết này trình bày cách tách. Để hiểu bạn cần có kinh nghiệm HTML, CSS và Javascript. Tất cả những thứ này đều có thể học ở W3Schools.

alide.myopenid.com 32
over 2 years ago

Bạn chỉ viết thế thì ai biết được bạn muốn hỏi gì!{#emotions_dlg.tongue_out}

Chắc bạn muốn học căn bản về HTML, CSS, JavaScript? Nếu vậy thì nhầm hàng rồi. Bài này thuộc thể loại software engineering, thể loại này đại khái nói về quản lí project, sắp xếp mã chương trình.

Article: Tìm hiểu về SQLite 3089

akia.myopenid.com 6
Updated over 2 years ago

SQLite là gì?

Nói một cách đơn giản SQLite là phần mềm quản lý cơ sở dữ liệu (DBMS) tương tự như Mysql, PostgreSQL... Đặc điểm của SQLite là gọn, nhẹ, đơn giản. Chương trình gồm 1 file duy nhất vỏn vẹn chưa đến 500kB, không cần cài đặt, không cần cấu hình hay khởi động mà có thể sử dụng ngay. Dữ liệu database cũng được lưu ở một file duy nhất. Không có khái niệm user, password hay quyền hạn trong SQLite database.

SQLite không thích hợp với những hệ thống lớn nhưng ở quy mô vừa tầm thì SQLite phát huy uy lực và không hề yếu kém về mặt chức năng hay tốc độ. Với các đặc điểm trên SQLite được sử dụng nhiều trong việc phát triển, thử nghiệm v..v.. và là sự lưa chọn phù hợp cho những người bắt đầu học database.

Trang chủ SQLite: http://www.sqlite.org/

ngocdaothanh.myopenid.com 149
over 2 years ago

Đấy là bug, đã được ghi chú ở trang quản lí bug của OpenKH (sắp được sửa). Nghi ngờ cái gì là bug, xin mọi người báo vào trang đấy.