Trong
khoa học máy tính, một
chương trình con (subprogram) hay
subroutine là một đoạn
chương trình được đóng gói thành một đơn vị trình, nó thực hiện một số tác vụ cụ thể mà
chương trình cần thực hiện nhiều lần từ nhiều nơi trong thời gian chạy của nó. Khi
chương trình cần đến tác vụ cụ thể đó thì bố trí chỉ thị gọi (call) đến chương trình con này và nhận kết quả nếu có sau khi nó thực thi xong
[1].Ngay từ lúc
máy tính ra đời thì kỹ thuật lập trình kiểu cấu trúc modul hóa với các chương trình con đã được thiết lập, và được củng cố trong các phần mềm lập trình
hợp ngữ. Ngày nay trong ngôn ngữ bậc cao chương trình con được diễn đạt tùy theo ngôn ngữ là các
hàm (function),
thủ tục (procedure) và
phương thức (method),... Một số
ngôn ngữ lập trình, chẳng hạn
Pascal và
FORTRAN, phân biệt giữa
hàm (một chương trình con có trả về giá trị) và
thủ tục (không trả về giá trị). Các ngôn ngữ khác, ví dụ
C và
LISP, coi hai thuật ngữ này như nhau. Cái tên
phương thức thường được dùng trong
lập trình hướng đối tượng để gọi các chương trình con là một phần của các
đối tượng.Trong chương trình, một chương trình con được phép gọi chương trình con khác, hoặc có thể gọi chính nó. Tuy nhiên nếu bố trí gọi lẫn nhau, ví dụ subroutine A gọi subroutine B nhưng trong thân của subroutine B lại có gọi subroutine A, sẽ dẫn đến lỗi bất định khi thực hiện. Một số ngôn ngữ có hỗ trợ phát hiện lỗi này trong môi trường soạn thảo trình và khi dịch. Dẫu vậy để tránh lỗi thì khi lập trình phải tuân thủ bố trí gọi theo "mô hình cành và lá", trong đó "cành" là subroutine có gọi subroutine khác, còn "lá" là subroutine không có lệnh gọi.