What makes programming so challenging