programming languages typing practice