Bạn đang đọc blog lập trình nguy hiểm nhất thế giới

Bài viết được dịch từ blog Coding Horror

Bạn đã bao giờ nhận thấy rằng các blog chứa đầy rẫy những thông tin sai lạc và dối trá? Đặc biệt, tôi đang đề cập đến chính blog này. Cái blog mà bạn đang ngồi đọc vào lúc này đây. Ví dụ, bài viết ngày hôm qua có nội dung cực tồi, và đó chính là bằng chứng thuyết phục nhất cho thấy tôi đã trở thành một gã cực đoan.

Hãy cẩn thận vì bạn đang đọc blog lập trình nguy hiểm nhất thế giới!Hãy cẩn thận vì bạn đang đọc blog lập trình nguy hiểm nhất thế giới!


Hơn nữa.

Rõ ràng, theo như một thành viên trên mạng xã hội Reddit, các thông tin được trình bày ở đây là hết sức nguy hiểm:

Jeff Atwood đã luôn được xem là người có blog lập trình nguy hiểm nhất, trong đó một số lập trình viên trẻ hoặc tham vọng có thể thực sự lắng nghe một số “lời khuyên” của anh ta, nhưng giờ đây anh ta bằng cách nào đó đã biến nó thành blog lập trình ngớ ngẩn nhất thế giới.

Nói toạc móng heo ra với Jeff là: Những gì mà mày đã viết ra là một trong những điều điên rồ ngu ngốc nhất mà tao đã từng nghe. Không có quan điểm nào trong sự huyên thuyên và trả lời nhảm nhí của mày cả, thậm chí không có bất cứ điều gì trong đó được xem là một suy nghĩ hợp lý. Mọi người đang thảo luận trong topic này bây giờ đều trở thành ngớ ngẩn khi đọc bài viết đó của mày. Tao cho là mày chả có quan điểm mẹ gì cả, và cầu Chúa sẽ cứu rỗi linh hồn mày thằng Jeff Atwood ạ.

Tôi rất thích phần trích dẫn trong bộ phim Billy Madison, nhưng tôi không chắc là blog của mình đã đạt được danh hiệu đặc biệt đó hay chưa. Nếu blog này có nội dung là nguy hiểm nhất mà những lập trình viên trẻ và chưa có kinh nghiệm đã đọc phải rồi, thì vâng, tôi sẽ phải nghiêm túc đặt câu hỏi là: liệu có hay không việc họ đã bao giờ thực sự sử dụng cái mà chúng ta gọi là “world wide web”?

Cho phép tôi được minh họa bằng một ví dụ.

Hôm nay tôi tình cờ lướt qua bài viết này từ blog của Mads Kristensen. Trong đó, Mads giải thích rằng Deflate là nhanh hơn so với Gzip.

Đầu tiên tôi thử nghiệm GZipStream và sau đó là DeflateStream. Tôi mong đợi một sự khác biệt nhỏ bởi vì hai phương pháp nén này là khác nhau, nhưng kết quả đã làm cho tôi bất ngờ. Tôi đo lường thấy DeflateStream nhanh hơn 41% so với GZip. Đó là một sự khác biệt rất lớn. Với kiến thức này, tôi sẽ phải thay đổi các module nén HTTP để chọn Deflate hơn là GZip.

Đây là một kết quả đáng ngạc nhiên đối với tôi, bởi vì hai thuật toán nén đó có liên quan chặt chẽ với nhau. Mặt khác, chúng tôi sử dụng GZip rộng rãi và rất nhiều để cache các chuỗi output HTML trên máy chủ Stack Overflow, như Scott Hanselman giải thích. Nếu Deflate thực sự là nhanh hơn nhiều, thì chúng tôi cần phải chuyển đổi sang nó!

Nhưng giống như bất kỳ người sử dụng internet kỳ cựu nào, tôi chẳng bao giờ chấp nhận ngay những gì mà tôi đã đọc được trên một blog — hoặc bất kỳ trang web nào khác trên internet — như một thực tế. Thay vào đó, nó là mầm mống của một ý tưởng hấp dẫn, một lời kêu gọi hành động. Tôi đã bật IDE của mình lên và tạo ra một bài kiểm tra nhỏ để tự thử nghiệm vấn đề đó: liệu có phải Deflate nhanh hơn GZip?

public static class StopwatchExtensions
{
public static long Time(this Stopwatch sw, Action action, int iterations)
{
sw.Reset();
sw.Start();
for (int i = 0; i < iterations; i++) { action(); } 
sw.Stop(); 
return sw.ElapsedMilliseconds; 
} 
} 

class Program 
{ 
static void Main(string[] args) 
{ 
string s = File.ReadAllText(@"c:test.html"); 
byte[] b; 
var sw = new Stopwatch(); 
b = CompressGzip(s); 
Console.WriteLine("gzip size: " + b.Length); 
Console.WriteLine(sw.Time(() => CompressGzip(s), 1000));
Console.WriteLine(sw.Time(() => DecompressGzip(b), 1000));
b = CompressDeflate(s);
Console.WriteLine("deflate size: " + b.Length);
Console.WriteLine(sw.Time(() => CompressDeflate(s), 1000));
Console.WriteLine(sw.Time(() => DecompressDeflate(b), 1000));
}
}

Kết quả thật đáng ngạc nhiên: theo như tôi ghi nhận thì GZip cũng nhanh tương đương như Deflate. Dù kiểm thử với các chuỗi lớn, chuỗi trung bình và chuỗi nhỏ. Trong mọi thử nghiệm kết hợp mà tôi có thể nghĩ ra, thì không có nơi nào mà Deflate nhanh hơn 40% cả.

gzip size: 3125
242
171
deflate size: 3107
225
149

Đó không phải chính xác là những gì mà bài viết của Mads nói với tôi sẽ xảy ra. Liệu tôi có nghĩ Mads là một thằng ngu khi đã đăng bài viết đó? Ồ không. Tôi không hề nghĩ như vậy.

  • Bài blog ban đầu đã được đăng vào cuối năm 2006; kể từ đó đến nay thì nhiều phiên bản mới của .NET framework đã ra lò và phần cứng cũng đã có tốc độ nhanh hơn. Có lẽ đã có một số thay đổi đáng kể của một trong hai yếu tố trên nên mới dẫn tới cho ra những kết quả khác nhau.
  • Thử nghiệm của tôi có một chút khác so với thử nghiệm của Mads. Tôi sử dụng một file HTML ngẫu nhiên là mục tiêu nén; tôi không thể biết chính xác cái mà anh ta đã nén trong bài kiểm tra tốc độ của mình. Tôi cũng đã thử với những chuỗi nhỏ, trung bình và lớn. Các cuộc thử nghiệm đó là tương tự nhau, nhưng chúng không giống hệt nhau.

Liệu đây có phải là loại thông tin sai lạc nguy hiểm mà các blog đáng bị phỉ báng? Liệu tôi có nên tức giận với Mads vì anh ta đã đăng bài viết đó? Không một chút nào cả. Tôi đã học được thêm một chút về Deflate và GZip. Nó cung cấp một cơ hội cho tôi để cấu trúc lại một số phần code nén của mình. Thậm chí tôi đã học được cách làm thế nào để benchmark bằng cách sử dụng cú pháp lambda. Nếu tôi không đọc được bài viết đó, thì đã không có một sự thúc đẩy tạo ra một ý tưởng để tôi suy nghĩ, tôi sẽ không có mối bận tâm nào cả.

Tôi trở thành một lập trình viên tốt hơn sau khi đọc bài viết đó. Mặc dù, gần như tôi có thể nói rằng, bài viết đó cung cấp một lời khuyên không chính xác.

Cập nhật: Tôi đã có một chút tò mò hơn về điều này, vì vậy tôi đã chạy một số thử nghiệm trên các máy tính khác nhau. Dưới đây là kết quả, đơn vị tính theo milliseconds, cho 1000 lần chạy mỗi cái, sử dụng trang chủ HTML của Google là mục tiêu (nó có dung lượng khoảng 7 Kb):

Kết quả so sánh tốc độ giữa 2 phương pháp nénDeflate nhanh hơn GZip bao nhiêu?

Core 2 Duo
3.5 Ghz
Core 2 Quad
1.86 Ghz
Athlon X2
2.1 Ghz
Nén (Compress) 8% nhanh hơn 8% nhanh hơn 50% nhanh hơn
Giải nén (Decompress) 15% nhanh hơn 17% nhanh hơn 37% nhanh hơn

Đúng là có xuất hiện con số 40% mà Mads đã nói. Đó là kết quả có một chút gây sốc khi bạn biết rằng GZip thì đơn giản chỉ là Deflate cộng thêm một checksum và header/footer! (Bạn có thể tải về mã nguồn của bài kiểm tra này và tự mình trải nghiệm.)

Vì vậy, quan điểm của tôi — và tôi chỉ có một — đó là: khi bạn nói rằng các thông tin được trình bày trên một blog là “nguy hiểm”, tức là bạn đang ám chỉ rằng những độc giả của blog đó là quá ngu ngốc hoặc vớ vẩn khi đọc nó mà không có chút phê bình nào cả.

Tôi luôn luôn có quá nhiều sự tôn trọng dành cho độc giả của mình khi viết bài. Tôi liên tục cảm thấy mình học hỏi được rất nhiều từ những comment và thảo luận chất lượng trong các bài viết mà tôi đã đăng. Trong thực tế, tôi muốn nói rằng điều đáng ngạc nhiên nhất mà tôi đã học được trong hơn 4 năm viết blog của mình, đó là: phần nội dung tốt nhất luôn luôn bắt đầu nơi mà bài viết kết thúc. Độc giả của tôi thì thông minh hơn tôi rất… rất nhiều, và tôi sẽ chẳng bao giờ được như họ.

Nghĩ lại thì có thể những gì tôi quảng bá trên blog này là nguy hiểm: bạn hãy tự suy nghĩ.

Nhưng tôi tin chắc rằng bạn có thể kiểm soát được điều đó.

Các bài viết liên quan:

Về tác giả bài viết:

Jeff_atwood_coding_horrorJeff Atwood là một chuyên gia công nghệ tại Mỹ, hiện đang sinh sống và làm việc tại Berkeley, CA. Anh là một kỹ sư phần mềm chuyên về công nghệ Microsoft .NET, và là một blogger nổi tiếng trong cộng đồng công nghệ với blog Coding Horror, anh là người sáng lập và kiêm Giám đốc điều hành (CEO) của trang web hỏi đáp uy tín Stack Overflow và cũng là đồng sáng lập của Stack ExchangeDiscourse.

2 comments on “Bạn đang đọc blog lập trình nguy hiểm nhất thế giới

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s