Hola Ximation, que mas.
Mira con el tema de lenguaje para no programadores no me refiero a usar apis, eso es lo más fácil de cualquier lenguage, para eso son. Yo me refiero al hecho de conocer el impacto a nivel de máquina que causa tu codigo, por ejemplo ¿Como harías que java asigne la memoria al stack y no al heap?(Normalmente el stack es mas rapido), ¿Como accesarías a una posición de memoria solo con su dirección? ¿Como lees una posición de memoría con el formato que deseas, o leer la misma posición de memoria de dos formas diferentes? (Esto útlimo ayuda a ahorrar espacio, teniendo varias cosas en la misma posición de memoria).
Depronto confundes el termino codificador a programador. El codificador sabe un lenguage y lo domina, y sabe utilizar sus fortalezas de alto nivel, apis, etc. Con esto realiza las tareas deseadas, sin importar como funcione la máquina, mientras de el resultado correcto. El programador tiene que saber esto mismo, pero ademas estructura el codigo (ya sea utilizando algo de OOP, patrones de dieño, algo de ing. de software, etc.), y también sabe el impacto a nivel de máquina del código y genera optimizaciones sobre este para generar codigo mas eficiente.
Un ejemplo simple. En C++(creo ke tambien java) para un codificador usar ++i ó i++, es exactamente igual, ps obtiene el valor de i aumentado en uno, pero sabías que i++ guarda el valor de i en memoría y llama a la función ++i?, entonces para un programador si no se necesita ese valor de i temporal de la memoria es mucho mejor ++i, ya que te ahorras las intrucciones de asembler para guardar i en la memoria, y las intrucciones para el llamado a ++i. Si tienes una aplicación que llame a estas funciones millones de veces por segundo, te aseguro que puedes alcanzar a notar una diferencia. Es un ejemplo sencillo pero ilustra mi punto, y te aseguro que casi nadie sabe eso. Yo creo ke yo solo se porgramar en C++(y eso que poco), en los demas lenguages no tengo idea que esta pasando cuando hago las cosas, por lo que no se si es mejor realizar una función de X ó Y forma. Programar de verdad es realmente dificil, codificar es relativamente facil.
Acepto que le estaba dando muy duro a java con una información algo desactualizada, yo me basaba en mis experiencias con versiones anteriores. Al parecer las versiones mas nuevas de java son mas flexibles y potentes, ademas que la JIT que usa java (Just in Time compilation) es bastante buena, y el java bytecode se auto-optimiza en tiempo de ejecución haciendo que el programa mientras corra se vuelva mas rapido, algo bastante interesante (C# tambien usa esto pero solo si corre sobre .NET). Tengo que volver a mirar java nuevamente sobretodo para hacer aplicaciones multihilo distribuidas y portables ya que parece ser la mejor opción (python y ruby son la otra, pero java si es mas rapido que ellos).
No se si le gane a C# pero por lo menos java esta madurando rapido.
Por cierto, mira lenguages funcionales, ellos si te ponen a pensar, pero el codigo es demasiado elegante