Всяка задача може да се разделя на части. Аз правя това "раздробяване" повече "виртуално", дори в един файл. Ето го моя номер: работя по глобалната задача, като "предполагам" че малките задачи вече са изпълнени и работят коректно. Като направя логиката на най-голямата задача, веднага се вижда какви са началните условия и какви са нужните резултати за всяка от малките задачи. И така всяка от тях става отделна задача, която вече е добре описана, и аз я решавам самостоятелно. Може да се наложи пак да я разделя на малки - няма значение, за "глобалната" тя си остава "една задача".
Да кажем, че глобалната задача е да занесеш вещите си от дома си до квартирата си до университета. Какво ще сложиш в куфара? Багажа ти включва дрехи, обувки, документи, пари… В куфара слагаш торбички с дрехи, торбички с обувки, чанта с документи и пари - това са ти малките задачи. Чантата с документи съдържа папки с лични документи, лекции, договори, и портмонето с пари - това са подзадачите на задачата "чанта с документи". Парите са "банкноти", "монети" и "карти" - подзадачи на "портмоне". И така сглобявайки последователно "задачите" една в друга, получаваш пълния си комплект "куфар". Представяйте си го като граф с дървовидна структура :-)
За разлика от "куфара", в програмирането често се налага едно и също действие (например "четене от базата" или "сортиране") да се използва в много задачи. Тези неща ги вадя в под-програми, и ги викам отвсякъде където ми трябват. Химикала (под-програма) го използваш за подписване на документи, за писане на писма, за записки по лекции, бележки в книга...
Виж колко е по-лесен живота, нали? :-)