Improving programmability and performance for scientific applications