In YouthDev, our mindset is that a good engineer does not like a translator who translate the human languages to computer languages, so that why here we have three main levels: coder, programmer and engineer in which coder is the one who understands how to write code base on documentations and requirements and of course can use the development tools fluently; programmer is the one who has to understand data structures and algorithms and basic security knowledge; the last one engineer has to understand the big picture of a product, the cooperation between many parts of a system and has a plan for scaling the system.