ainda no tópico em relação a OO, classes abstratas e interfaces, nem sempre tem tanta importancia assim. asseguram uma prática de programação, mas nem sempre são fundamentais. isso tudo é até um pouco secundário, quem sabe. (com certeza no início)
sobre o sistema operacional, podemos usa-lo e muitas vezes o fazemos, sem saber muito bem como funciona, porque de fato, pouca coisa mudaria na maioria dos casos.
sobre redes, se o micro estiver funcionando bem, e a pessoa vai trabalhar com java, tudo aquilo, não terá a menor importancia, ao menos que vá trabalhar com redes, e nem sempre é o caso.
sobre UML, seria bom ao trabalhar em grupo, mas as vezes isto até demora a acontecer. O MVC também pode ficar para o futúro, muito pode ser feito, a início, com uma classe só por exemplo, ou algumas auxiliares, sem tanta divisão, que muitas vezes só serve para organização de fato.
sobre threads é um assunto até razoavelmente avançado. e seu uso nem sempre é necessário. as vezes penso em usar o thread.sleep, mas percebo que nem sempre preciso.
enfim, acho que há coisas mais importantes ao iniciante, antes de saber tudo isto, citado.
poderíamos levantar até uso de exceções, método main, classes, métodos, sobrecarga de métodos (métodos com retorno ou sem retorno) , declaração de atributos, escopo das variavéis, laços de contagem, e por aí vai, que já é coisa a beça. (e já se faz coisa com isto)
mas o começo acho que é sempre pelo velho e bom System.out.print (com ln ou sem ln) .
quem sabe o praxe do ‘hello world’ ou o nome do programador.
enfim não quero justificar aqui nenhuma ignorância, mas apenas priorizar o que de fato é mais importante e mais utilizado realmente. (nem que seja a nível básico, que é o que se fala).
é isto.