VNIT

Too lazy to think of a slogan

Trang chủ » Diễn Đàn » Lập trình và Phát triển Web » Software Engineering - Công Nghệ Phần Mềm » Craftsman1 - truyện dài nhiều tập :)

Chủ đề đã bị khóa, bạn không thể xóa, sửa hay trả lời trong chủ đề này!

First Page Previous Page  1  Next Page Last Page
Locked Craftsman1 - truyện dài nhiều tập :)
0
article Gởi bởi hnd (21:19 27-02-2003)
Bài: 3,680 / Điểm VCS: 3,324 /

Có một loạt bài rất lý thú của Rober Martin do bác cl cung cấp. hnd "làm siêng" dịch ra cho anh em tham khảo cho vui.

Thân.


The crafsman One.
Robert C. Martin
13 Tháng 2, 2002

Bài viết này lược trích từ chương Principles, Patterns and Practices trong cuốn Agile Software Development của Robert C. Martin, nhà xuất bản Prentice Hall, 2002.

Nhật ký thân mến,
13 tháng 2, 2002.

Hôm nay đúng là một ngày xui xẻo - Tôi làm hỏng cả chuyện. Tôi rất muốn gây ấn tượng với các ngài "cựu học việc" ở đây nhưng rút cuộc chỉ làm rối tung cả lên.

Ðó là ngày đầu tiên tôi được một chân học việc với ông C. Tôi quả là may mắn có được chân học việc này. Ông C là một tay trùm lớp lang trong vấn đề phát triển phần mềm. Ðấu để giành được chân việc này đúng là nẩy lửa. Các tay học việc của ông C thường trở nên các tay "cựu học việc" sáng giá. Ðiều này có nghĩa được làm việc với ông C có giá trị rõ ràng.

Tôi cứ ngỡ là hôm nay tôi sẽ được gặp ông ta nhưng thay vì đó tôi bị một gã "cựu học việc" níu tôi qua một bên. Gã bảo ông C luôn luôn dẫn các tay học việc đi xuyên qua phần định hướng trong những ngày đầu. Gã nói ông C nhất quyết cho rằng phần thực tập định hướng là thiết thực với các tay học việc và nó dẫn đến mức chất lượng mã nguồn mà ông ta ta dự tưởng.

Tôi náo nức kinh khủng. Ðây là một cơ hội cho họ thấy tôi là một tay lập trình "ngon" cỡ nào. Thế là tôi bảo Jerry tôi không chờ được nữa. Gã đáp lại sự náo nức của tôi bằng cách bảo tôi thử viết một chương trình đơn giản cho gã. Gã muốn tôi dùng "Sieve of Eratosthenes" để tính các số nguyên. Gã còn bảo tôi phải chuẩn bị xong chương trình bao gồm trọn bộ các "unit tests" sẵn sàng để "chấm" sau buổi ăn trưa.

Thật là khoái! Tôi có gần 4 tiếng đồng hồ để "xào nấu" một chương trình giống như Sieve. Tôi quyết tâm thực hiện công tác này một cách hết sức có ấn tượng. Mã dẫn 1 đưa ra những gì tôi đã viết. Tôi nắm chắc là chương trình của tôi được chú thích cẩn thận và trình bày gọn gàng.


Mã dẫn 1:
/**
* This class generates prime numbers up to a user-specified maximum.
* The algorithm used is the Sieve of Eratosthenes.
* <p>
* Eratosthenes of Cyrene, b. c. 276 BC, Cyrene, Libya; d. c. 194 BC, Alexandria. He was
* the first man to calculate the circumference of the Earth, and was also
* known for working on calendars with leap years and running the library at
* Alexandria.</p>
*
* The algorithm is quite simple: Given an array of integers starting at 2,
* cross out all multiples of 2. Find the next uncrossed integer, and cross
* out all of its multiples. Repeat until you have passed the square root of
* the maximum value.
*
* @authorAlphonse, @version 13 Feb 2002 atp
*/
import java.util.*;
  
public class GeneratePrimes { 
   /** 
   * @param maxValue is the generation limit.
   */
   public static int[] generatePrimes(int maxValue) {  
     if (maxValue >= 2) { // the only valid case
       // declarations
       int s = maxValue + 1; // size of array
       boolean[] f = new boolean[s];  
       int i;
       // initialize array to true.  
       for (i = 0; i < s; i++)   
         f[i] = true;
     
       // get rid of known non-primes.  
       f[0] = f[1] = false;
       
       // sieve  
       int j;  
       for (i = 2; i < Math.sqrt(s) + 1; i++) {   
         if (f[i]) { // if i is uncrossed, cross its multiples.
           for (j = 2 * i; j < s; j += i)   
             f[j] = false; // multiple is not prime 
       }
     }
      
     // how many primes are there?  
     int count = 0;  
     for (i = 0; i < s; i++) {  
       if (f[i])  
         count++; // bump count.  
     } 
     int[] primes = new int[count];    
     // move the primes into the result.  
     for (i = 0, j = 0; i < s; i++) {   
       if (f[i]) // if prime    
         primes[j++] = i;  
     }    
     return primes; // return the primes. 
   } else // maxValue < 2 
     return new int[0];  // return null array if bad input.
   }
}


Sau đó tôi viết một cái "unit test" cho GeneratePrimes. Xem ở mã dẫn 2. Ðoạn mã này dùng JUnit framework như Jerry đã chỉ dẫn. Nó dùng tính chất hướng thống kê; kiểm tra xem cái "generator" có thể tạo ra các số nguyên tới 0, 2, 3 và 100. Trong trường hợp thứ nhất hẳn không có số nguyên nào cả. Trong trường hợp thứ nhì hẳn phải có một số nguyên và nó phải là số 2. Trường hợp thứ ba phải có hai số nguyên và chúng phải là số 2 và 3. Trường hợp cuối phải là 25 số nguyên và số cuối phải là 97. Nếu các bước kiểm tra đều đúng, tôi giả định là cái "generator" làm việc đúng. Tôi e rằng khó có thể tin cậy tuyệt đối cách ở trên, nhưng tôi không nghĩ ra được một trường hợp nào một "function" có thể bị hỏng mà các bước kiểm tra đều đúng. 

Mã dẫn 2:

import junit.framework.*; 
import java.util.*;
   
public class TestGeneratePrimes extends TestCase { 
   public static void main(String args[]) {  
     Junit.swingui.TestRunner.main( 
       new String[] {"TestGeneratePrimes"}); 
   }
   public TestGeneratePrimes(String name) {
     super(name);
   }
   
   public void testPrimes() {
     int[] nullArray = GeneratePrimes.generatePrimes(0); 
     assertEquals(nullArray.length, 0);
  
     int[] minArray = GeneratePrimes.generatePrimes(2);
     assertEquals(minArray.length, 1);
     assertEquals(minArray[0], 2);
  
     int[] threeArray = GeneratePrimes.generatePrimes(3);
     assertEquals(threeArray.length, 2);
     assertEquals(threeArray[0], 2);
     assertEquals(threeArray[1], 3);  

     int[] centArray = GeneratePrimes.generatePrimes(100);
     assertEquals(centArray.length, 25);
     assertEquals(centArray[24], 97);
   }
}



Tôi mất khoảng một giờ đồng hồ để làm những bước trên chạy được. Jerry không muốn gặp tôi cho đến sau buổi ăn trưa, bởi thế, tôi dành trọn bộ thời gian còn lại đọc cuốn Design Patterns mà Jerry đưa cho tôi.

Sau buổi ăn trưa, tôi ghé văn phòng của Jerry và cho gã biết tôi đã thực hiện xong chương trình. Gã nhìn tôi và với một nụ cười khó tả, hắn nói: "Ðược lắm, hãy xem thử nó thế nào."

Gã dẫn tôi và phòng thí nghiệm và cho tôi ngồi trước một máy. Gã ngồi bên cạnh tôi và yêu cầu tôi đưa chương trình của tôi vào máy này. Thế là tôi chuyển mã nguồn từ máy laptop của tôi lên.

Jerry xem xét hai mã nguồn chừng năm phút rồi gã lắc đầu và bảo: "Mày không thể đưa những cái này cho ông C xem được! Nếu tao để ổng xem mấy cái này, ổng sẽ đuổi cổ cả tao lẫn mày. Ông ấy không phải là người kiên nhẫn đâu."

Tôi đánh thót một phát nhưng cố giữ bình tĩnh và hỏi gã: "Chớ nó sai chỗ nào?"

Jerry thở dài và nói: "Tụi mình nên đi xuyên qua mã nguồn này với nhau." "Tao sẽ chỉ cho mày từng điểm một cách ông C muốn thực hiện nó như thế nào."

"Quá rõ ràng", gã tiếp tục, "cái main function muốn làm ra ba cái functions riêng biệt. Cái thứ nhất khởi tạo tất cả các biến hàm và thiết lập cái "sieve". Cái thứ nhì thực sự thi hành cái "sieve" và cái thứ ba tải kết quả của "sieve" vào một dãy số nguyên."

Tôi nhận ra được ý gã muốn nói gì. Có ba khái niệm chôn trong cái function đó. Tuy vậy, tôi không biết gã muốn tôi phải làm gì với nó.

Gã nhìn tôi một lúc, rõ ràng đang đợi tôi phản ứng sao đó. Nhưng rốt cuộc gã thở dài, lắc đầu và....

<đón đọc bài kế tiếp>

which path to prajna?
Locked Re: Craftsman1 - truyện dài nhiều tập :)
0
answer Gởi bởi truonglapvi (0:07 28-02-2003)
Bài: 276 / Điểm VCS: 258 /

Thanks anh hnd.
Ra tập 2 nhanh nhanh lên anh ơi.

tlv
Sống trên đời này cần có một tấm lòng.
Để làm gì em có biết không?
Để gió cuốn đi...
---
{url=http://www.mozilla.org/products/firefox/
}Give me your tender {/url}
---
truonglapvi@vninformatics.com
Locked Re: Craftsman1 - truyện dài nhiều tập :)
0
agree Gởi bởi admin (22:40 03-03-2003)
Bài: 3,598 / Điểm VCS: 3,605 /

Hi,
Hi hì, loạt bài viết rất hay và bổ ích. Chỉ xin góp ý chút là: "prime" = "số nguyên tố" chứ không phải là số nguyên (interger).
(Và đây là chương tình sản sinh ra các số nguyên tố từ 2 cho đến 1 số nguyên n được chỉ định bởi người sử dụng chương trình.)

Thân,
------------------------------------------
"Share with all, All will share"!
ShareLib tạm thời đóng cửa để nâng cấp. Rất mong các bạn thông cảm!
Locked Re: Craftsman1 - truyện dài nhiều tập :)
0
answer Gởi bởi choihoc (6:08 04-02-2007)
Bài: 3 / Điểm VCS: 3 /

chào bạn. Bài dịch của bạn rất hay! Bạn có thể cho mình xin nguyên bản tiếng Anh được không?
Cám ơn bạn nhiều!
Locked Re: Craftsman1 - truyện dài nhiều tập :)
0
shy Gởi bởi jetli2 (15:32 05-01-2009)
Bài: 32 / Điểm VCS: 32 /

Từ phần 5 trở đi có cả hình ảnh minh hoạ, nhưng có lẽ do post lâu ngày nên ảnh mất đâu hết rồi? Hồi trước có ai đó đã soạn ra cái file PDF về truyện này, nhưng bây giờ không còn download được nữa, ai có thì share lại cho mình xin với? Hoặc anh Admin có thể upload lại mấy cái ảnh minh hoạ trong bài viết được không?
Xin cám ơn rất nhiều.
First Page Previous Page  1  Next Page Last Page

Thống kê

Hiện tại web site có 85,778 thành viên. Xin chào đón thành viên mới nhất chauphong92.

Các thành viên đã tạo 62,758 chủ đề và 241,880 bài viết trong 30 box.

Hiện có 4 thành viên và 1 khách đang trực tuyến.

chauphong92, thungan2203, concua201010, nhadat69

Template by styleshout / Icons by Tango Icon Library and FamFamFam.