Kĩ năng “Back of The Envelope” của các developer thần thánh

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:

12 thoughts on “Kĩ năng “Back of The Envelope” của các developer thần thánh”

  1. 1 ngày vào “toidicodedao” = 2 lần , mỗi lần 5 phút(10’/day), 1 năm khoảng 300 ngày(3000’/year) 3000’~50h. 1 year vào xem 2 day 10h+ time comment khoảng 3 day. Bắt đầu xem 20 tuổi sống khoảng 70 thì die(nếu blog vẫn còn) 50 year suy ra đến cuối đời 150 ngày. Hi vọng admin duy trì blog đến lúc đó =D

    Liked by 1 person

  2. Dùng ổ cứng seagate 8tb khoảng 1kg vậy cần 125 ổ để chứa hết 1PB. máy bay bay từ hà nội tương đương 125kg. FedEx chuyển đi HCM 10.000/kg vậy tốn hết 1.250.000 tiền ship. May mắn gửi được 1 ngày hoặc 2 ngày.
    Việt Nam tốc độ internet cao nhất khoảng 25Mb/s vậy gửi 1PB hết 40.000.000s = 462 ngày.
    Thôi chuyển qa FedEx cho lẹ.
    Speed VN internet: https://en.wikipedia.org/wiki/List_of_countries_by_Internet_connection_speeds
    Seagate 8tb: http://www.amazon.in/Seagate-STEB8000100-Expansion-Desktop-External/dp/B01HAPGEIE/ref=sr_1_1?s=computers&ie=UTF8&qid=1492487399&sr=1-1&keywords=hard+disk+8tb

    Liked by 3 people

  3. 1000TB coppy vào ổ cứng chắc chắn vẫn ít thời gian hơn là gửi internet 🙂
    SSD thì còn nhanh hơn, mỗi tội tốn tiền
    tóm lai: Gửi máy bay nhanh hơn, chi phí cao hơn nếu dùng SSD 🙂

    Like

  4. Theo mình sau khi ước đoán và tính toán phải có thêm 3 bước nữa:
    1. Thực hiện và ghi chép lại kết quả.
    2. Đối chiếu kết quả với ước đoán trước đó.
    3. Chỉ ra các điểm chưa chính xác trong ước đoán, nguyên nhân và rút kinh nghiệm trong lần ước đoán tiếp theo.
    Có gì sai mong các bạn chỉ giáo!!!

    Like

  5. Bây giờ quen dùng máy tính rồi nên kĩ năng tính nhẩm không bằng mấy người đi chợ. Đi chợ mua đồ, đến lúc tính tiền tính mãi mới ra. Đọc bài này xong, quyết tâm học tính nhẩm.

    Like

  6. Nói bài toán tính đầu chứ, nếu ko nhớ công thức tính thể tích và thể tích của 1 quá golf chỉ cũng hơi bối rối à. Ko người phỏng vấn có cho mình bít thông tin đó ko nữa.

    Like

  7. 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.
    Giả sử ổ cứng của bạn là 128GB (thực ra là của mình), qui ra byte = 128*1024^2 = 134.217.728 (byte)
    Mỗi kí tự bạn gõ cho tối đa 2byte (unicode). Suy ra để đầy ổ cứng cần 67.108.864 kí tự.
    Với tốc độ thần thánh 10 ngón quay tay (qwerty), không chơi trò 2 ngón (ctrl+C, ctrl+V) tầm 6 kí tự 1 s. Vậy suy ra cần 11.184.811 giây ~ 186.414 phút ~ 3.107 giờ ~ 130 ngày
    Vậy trừ đi các kiểu con đà điểu thời gian ăn chơi ngủ nhà nghỉ tầm 16 giờ/1 ngày (đúng theo hiến pháp và pháp luật qui định). ta có 8 giờ gõ chơi mỗi ngày, trừ đi thêm 2 tiếng giải lao, tám chuyện, lướt fb còn vị chi 6h.
    Con số cuối cùng là 3.107/6 ~ 518 ngày ~ 2 năm.
    Ngồi vừa gõ vừa dùng calculator tính cũng mất gần 5p. Ai nhẩm nhanh 15s nổi kêu thần.

    Like

Leave a comment