Learning software implementation techniques