Learning based programming