System Design Cơ Bản – Phần 15 – “Back of the envelope”

Kì này, chúng ta tìm hiểu về một kĩ năng “bá đạo” mang tên Back of the Envelope. Tại sao lại gọi nó là kĩ năng của các developer “thần thánh”?

  • Phỏng vấn tuyển dụng tại cái công ty Google, Facebook, Amazon đều đòi hỏi developer có kĩ năng này.
  • Kĩ năng này không bao giờ lỗi thời, đến tầm Project Manager hay Software Architect vẫn cần. Đại ca Bob Martin – Chú Bob (Tác giả Clean Code) rất trùm sò trong kĩ năng này.
  • Kĩ năng này không chỉ hữu dụng trong lập trình, mà còn rất bổ ích trong cuộc sống.
  • Tuy đơn giản nhưng rất lại có rất ít developer biết, luyện tập và áp dụng nó

Đến đây bạn cũng tò mò kĩ năng này là gì mà sao lại ghê gớm như vậy phải không nào? Đọc hết bài viết để tìm hiểu nhé!

Back of the Envelope là cái chi?

Mặc dù nghe hầm hồ như vậy nhưng thật ra đây chỉ là kĩ năng “tính nhẩm”.

Cái tên Back of the Envelope (BotE) có nghĩa là Mặt sau Phong Bì, tức là tính nhẩm các phép đơn giản, có thể viết và tính trên một tờ giấy nhỏ, ngay trên mặt sau của phong bì.

Một mẩu phong bì là quá đủ để tính 

Ủa, vậy thì nó có gì ghê gớm? Đừng đùa! Hãy xem một câu hỏi phỏng vấn tuyển dụng của Microsoft dưới đây

  • Có bao nhiêu người lên dây đàn piano ở Chicago?

Hoặc một câu hỏi khác trong tuyển dụng của Google

  • Một chiếc xe bus có thể chứa được bao nhiêu quả bóng đánh gôn?

Để giải đáp câu hỏi này, chúng ta phải vận dụng kĩ năngBotE và tính nhẩm:

  • 1 chiếc xe buýt thông thường có chiều dài 6m, rộng 2,5m và cao 1,8m.
  • Kích thước ấy tương đương với thể tích khoảng 26.220l.
  • 1 quả bóng đánh gôn có thể tích khoảng 0,04l.
  • Như vậy chia 26.220 cho 0,04 ta sẽ có khoảng 655.000 quả bóng gôn.
  • Trừ đi chỗ ghế ngồi và các đồ vật khác, ước tính 1 xe buýt sẽ chứa được khoảng 500.000 quả bóng gôn. (Nguồn: genk)

Các bạn thấy đấy, kĩ năng tính nhẩm này không có gì phức tạp, chỉ là ước đoán, cộng trừ nhân chia. Vậy tại sao các công ty nổi tiếng lại đánh giá cao nó đến vậy? Cùng xem phần dưới nhé!

Tại sao developer phải biết kĩ năng này?

Trong ngành lập trình,  chúng ta rất hay phải đưa ra những ước tính, dự đoán (về thời gian hoàn thành công việc, performance của hệ thống,  tần số sử dụng phần cứng).

Trong Programming Pearl có kể một cố sự như sau:

Năm 1983, đại ca Bob Martin nhận được bản design của hệ thống email thiết kế cho Thế Vận Hội 1984 (Thiết kế bởi AT&T, một công ty viễn thông rất lớn).

Sau khi bỏ vài phút tính nhẩm bằng BotE, Martin tính ra rằng để hệ thống hoạt động được, một phút phải có ít nhất 120 giây.

Bản design nhanh chóng bị trả về với chủ nó.

Uncle Bob thần thánh

Thuần thục kĩ năng BotE này, ta có thể tính toán, đưa ra những ước tính chính xác về hệ thống. Giả sử thiết kế một hệ thống, ta ước đoán số lượng người sử dụng là bao nhiêu, dữ liệu cần lưu trữ chiếm dung lượng bao nhiêu, từ đó tính ra lượng phần cứng cần dùng.

Trong các ngành khác như xây dựng, cầu đường, các kĩ sư thường phải dùng kĩ năng tính toán, ước tính khá nhiều (lượng vật liệu cần sử dụng, khả năng chịu tải của nhà hay cầu). Tuy nhiên, đôi khi lập trình viên chúng ta lại hay bỏ sót những điều này, dẫn tới lỗi tràn bộ nhớ, thiếu dung lượng v…v

Áp dụng vào cuộc sống

Không chỉ dùng trong nghề nghiệp, các bạn còn có thể ứng dụng kĩ năng này để tính toán, cải thiện cuộc sống của mình.

Giả sử bạn muốn bỏ bia rượu để tiết kiệm tiền nuôi vợ con, làm sao để biết mỗi năm mình nhậu hết bao nhiêu tiền. Rất đơn giản, thử áp dụng BotE nào:

1 tuần bạn nhậu 3 buổi. 1 năm có khoảng 52 tuần, vậy là bạn nhậu 52 x 3 = 156 buổi.

Mỗi buổi bạn uống khoảng 3 chai bia (Ai tửu lượng cao hơn sửa thành 5 chai nhe). Ngoài tiệm 1 chai bia khoảng 15.000. Vậy mỗi buổi bạn tốn: 3 x 15.000 = 45.000.

Vậy cả năm bạn sẽ tốn khoảng: 156 * 45.000 = 7.020.000, tức bảy triệu đồng tiền bia một năm.

Sau 5 năm không nhậu bạn sẽ tiết kiệm được 35 triệu, đủ mua một con xe máy rồi.

Nhịn uống bia 5 năm mới đủ tiền mua xe. Thôi cứ uống tiếp đi….

Bạn cũng có thể áp dụng kĩ năng này để tính số thời gian mình bỏ ra xem JAV, Facebook là bao nhiêu (để hạn chế); số tiền mình đã chi cho gấu là bao nhiêu (đặng còn đòi quà lúc chia tay). Có ích quá còn gì??

Làm sao luyện?

Như mình đã nói, luyện kĩ năng này không quá khó. Bản chất của nó chỉ là tính toán, cộng trừ nhân chia thôi! Điều quan trọng là bạn phải tập khả năng ước đoán, cái gì không đoán được thì cứ đưa ra một con số rồi từ từ tìm hiểu sau nhé.

Các bạn có thể thử bằng cách giải một số câu đố trong cuốn Programming Pearl sau.:

  1. FedEx có dịch vự gửi dữ liệu bằng cách bỏ vào ổ cứng, gửi ổ cứng qua đường máy bay. Giả sử bạn muốn gửi 1PB (1000 TB) dữ liệu từ Hà Nội sang HCM, bạn sẽ gửi bằng Internet hay bằng FedEx.
  2. Nếu chỉ gõ phím trong Notepad, gõ bao lâu thì bạn sẽ gõ đầy dung lượng 1 ổ cứng.
  3. Giả sử thế giới chậm đi gấp 1 triệu lần. CPU thực thi 1 lệnh mất bao lâu? Ổ cứng quay hết 1 vòng mất bao lâu? Thời gian để bạn gõ tên bạn là bao lâu?

 Những câu khó hơn thì các bạn xem trang 66 trong sách nhé. Nhớ chia lời giải của mình trong phần comment nhé. (Dữ liệu đưa ra trong đề cố ý không nói rõ về dung lượng, loại ổ cứng v…v nên các bạn cứ tự đưa ra dự đoán nha).

Tài liệu đọc thêm:

Nguồn: Techtalk via toidicodedao

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.