Sự thụt lề cho bạn biết bạn đang ở đâu, trong cả hai kiểu cú pháp. Nếu bạn viết chương trình VB hoặc chương trình C # trên một dòng, bạn sẽ sớm không thể biết được bạn đang ở đâu trong cú pháp lồng nhau. Máy phân tích các cụm từ kết thúc khối hoặc dấu ngoặc nhọn, nhưng con người cần thụt lề.
Các cụm từ kết thúc xuất phát từ một kỷ nguyên của thẻ đục lỗ và băng giấy, khi lập trình ít tương tác và trực quan hơn nhiều. Hoặc, thực sự, không tương tác chút nào. Rất khó để vào các chương trình, và vì vậy các lập trình viên cần trình biên dịch phải rất thông minh về phân tích cú pháp và phục hồi lỗi.
Trong thời đại đã qua, chu trình biên dịch-biên dịch có thể liên quan đến việc chuẩn bị thẻ đục lỗ bằng máy bấm thẻ, sau đó xếp hàng vào cửa sổ nộp công việc trong đó một nhân viên lấy thẻ đục lỗ và gửi chúng vào máy. Sau đó, lập trình viên sẽ thu thập đầu ra (in trên giấy) từ một cửa sổ khác. Nếu chương trình có lỗi, đầu ra sẽ chỉ bao gồm chẩn đoán trình biên dịch. Khi thời gian quay vòng dài, chi phí gõ end if
thay vì chỉ )
là hợp lý nếu nó giúp cải thiện chất lượng chẩn đoán, bởi vì lập trình viên cần sửa càng nhiều lỗi càng tốt trong một lần lặp để giảm số lần lãng phí thời gian lặp đi lặp lại qua cửa sổ trình công việc.
Khi thiếu một nẹp xoăn đóng, thật khó để biết niềng răng mở nào là không được đóng. (Trình biên dịch có thể phải phân tích thụt lề để đưa ra phỏng đoán có giáo dục.) Nếu bạn xóa một dấu ngoặc đóng bên trong một hàm, thì có vẻ như toàn bộ phần còn lại của tệp là một phần của hàm đó, dẫn đến một loạt các thông báo lỗi không hữu ích. Trong khi nếu bạn có một end function
cú pháp, trình biên dịch có thể suy ra nơi hàm bị lỗi kết thúc, phục hồi và phân tích các hàm tiếp theo đúng cách, cung cấp cho bạn chẩn đoán bổ sung, nếu có, có ý nghĩa.
Khi bạn đang làm việc trong trình soạn thảo văn bản nhận biết mã tự động thụt lề và tô màu mã của bạn, trên màn hình độ phân giải cao nơi bạn có thể thấy sáu mươi dòng trở lên, các đối số cho các loại ngôn ngữ vụng về đó không còn được áp dụng. Bạn có thể dần dần chỉnh sửa và xây dựng lại các chương trình nhanh đến mức bạn chỉ có thể xử lý một lỗi tại một thời điểm. Hơn nữa, bằng cách xem các phần lớn của chương trình đồng thời trên màn hình và duy trì thụt lề thích hợp, bạn có thể giảm sự xuất hiện của các loại lỗi lồng nhau đó ngay từ đầu. Và trình soạn thảo văn bản lập trình tốt thậm chí sẽ gắn cờ một số loại lỗi cú pháp khi bạn nhập. Hơn nữa, có các trình soạn thảo gấp sẽ thu gọn các khối của chương trình dựa trên cú pháp của nó, đưa ra một khung nhìn "giống như phác thảo" về cấu trúc của nó.
Lisp đã sử dụng dấu ngoặc đơn ngay từ đầu và có lẽ, không phải ngẫu nhiên, tin tặc Lisp đã tiên phong lập trình như một trải nghiệm tương tác bằng cách xây dựng các hệ thống chấp nhận các chương trình trong các đoạn nhỏ (biểu thức).
Thực tế, bạn hoàn toàn không cần biểu tượng kết thúc, như ngôn ngữ Python minh họa. Việc xác định chỉ có thể là cấu trúc. Con người đã sử dụng thụt lề để mò mẫm cấu trúc mã ngay cả trong các ngôn ngữ mà máy phụ thuộc vào các ký hiệu hoặc cụm từ kết thúc.