1 - Quando aprendemos lógica de programação é notavél que ela é ensinada de uma forma a mudar sua ótica de mundo, quando vemos um um desing de projeto, avaliamos formas de fazer o uso da lógica de forma "fragmentada", toda vez que vou começar um assunto novo é como se ele estivesse levemente desconectado da realidade, tal como estamos sendo letrados, onde parece que por já sabermos falar aquele conhecimento é inútil, foi neste sentido.
2 - Em compreender em quais casos é valido utilizar aquele conhecimento e não só usado para dizer "Olha, eu sei usar este recurso".
3 - Conceitos de privacidade em um código por exemplo é algo que me deixa meio confuso, pois se é tão simples editar um código como essa segurança se estábelece em um sistema, entendo parcialmente o que a máquina faz por trás, mas ainda sim me parece ser algo que conflita com a facilidade de editar um código o que tornaria ele inseguro apesar das premisas de segurança adotada.
4 - Usando um exemplo comum com iniciantes, quando temos um numero rasuavelmente grande de comparações normalmente utilizamos if de forma desenfreada, quando muitas vez um swite case pode ser mais eficas, sempre que vou estudar ou fazer algum programa e vejo algum trexo que funciona, mas me parece ter ficado exagerado na quantidade de código procuro por comandos que possam fazer o mesmo com menos escrita, para facilitar a leitura do código.
Não sei se consegui ser muito claro