Product Program Learning