self thought programming