Eu faço a interface do usuário (desktop, não web) e coragem interna.
A quantidade que eu gosto ou não de um depende de quanto eu posso fazer usando algo como uma linguagem específica de domínio (DSL).
No domínio da interface do usuário, o que estou apresentando aos usuários e a complexidade das informações que estou obtendo deles são de tal ordem que eu ficaria louco se tivesse que usar ferramentas típicas, como designers de formulários, muitos manipuladores de eventos, MVC , todo esse material de "estado da arte". Felizmente, décadas atrás, descobri o que considero uma maneira melhor, que é criar uma DSL para ela e trabalhar nisso. Atualmente, chamo-o de Diálogos Dinâmicos e é baseado em uma estrutura de controle que chamo de Execução Diferencial . A boa notícia é que, para uma determinada funcionalidade, o código fonte é aproximadamente uma ordem de magnitude menor, permitindo que eu coloque muito mais funcionalidade na interface do usuário. A má notícia é que, por mais que tentei ensiná-la, não tive muita sorte em transferir a tecnologia.
No domínio que não é da interface do usuário, tirei uma lição de vários produtos que começaram como DSLs utilizáveis na linha de comando, na qual uma interface do usuário foi posteriormente enxertada. Isso fornece ao usuário especialista algo em que ele pode ignorar a interface do usuário, enquanto fornece ao usuário casual algo que ele pode usar casualmente. (Exemplos: R, SPlus, Matlab, SAS, WinBugs.) Portanto, nosso produto possui uma linguagem de linha de comando para especialistas. Adoro desenvolver essas coisas, com um analisador, gerador de código, pré-compilador e mecanismo de modelagem em tempo de execução. O esforço gasto com isso é pelo menos uma potência de 10 a menos do que o esforço gasto na interface do usuário.
Um dos motivos pelo qual o esforço da interface do usuário é grande é que ainda há muita "cola" que não pode ser feita com uma DSL - gerenciamento de grades de dados, todos os tipos de maneiras de classificar dados, todo o material que cai na "rachadura" bocejante entre UI pura e linguagem subjacente.
Portanto, sua pergunta foi "Por que alguns programadores odeiam a parte da interface do usuário do desenvolvimento?". Eu só odeio por causa dessa "cola" para a qual eu não tenho uma DSL.