An approach to a self-programming system