A maior diferença é o design da interface do usuário. Uma boa GUI pode criar ou quebrar um aplicativo. Os fãs de Mac chamam a atenção para as GUIs lindamente projetadas do aplicativo Mac OS X comum e eles têm razão, mas isso não é um problema de tecnologia - é um problema de design / ethos / usabilidade.
O usuário pode fazer o que quiser, em qualquer ordem e a qualquer momento, ao contrário do programa do console no qual você está solicitando entrada ou informando a saída. Você não pode assumir que eles seguirão a ordem que você espera, a menos que imponha o fluxo de trabalho no estilo do Assistente.
Como já mencionado, os eventos têm um papel importante nisso, e você pode obter vários eventos enquanto está atendendo o último, portanto, não é possível construir seu estado com base no 'evento atual'. Use encerramentos ou um mecanismo semelhante para manter o contexto entre diferentes eventos. Em um aplicativo de console, seu FSM geralmente é independente em torno do loop 'obter entrada, processar entrada, atualizar saída'. Não existe o mesmo tipo de estrutura na programação da GUI - o 'main' é uma coisa orientada a eventos reentrante, geralmente uma declaração ginormous switch ().
Você precisa considerar diferentes tamanhos / resoluções de tela e permitir que a GUI seja redimensionada de 800x600 até o máximo do monitor dos usuários.
Você precisa considerar diferentes estratégias de entrada - mouse, teclado, toque etc. Algumas tecnologias são gratuitas (rolagem na roda do mouse), outras requerem algum trabalho de integração (Tinta).
Acessibilidade - uma GUI é muito mais adequada para usuários menos capazes, com visão, audição, habilidades motoras ou cognitivas restritas. Um ruído 'ding' é bom e óbvio comparado a uma mensagem de erro enigmática no console.
Internacionalização - suponho que seu aplicativo de console seja apenas US / ANSI, mas quando você entra na GUI, pode ter pacotes de idioma / recursos que podem segmentar outros idiomas e regiões sem alterar a codificação, se você o preparou a partir do começar. Por exemplo, nenhuma linguagem de código embutida no código - tudo como pesquisa de recursos.
Você tem muito mais opções para a tecnologia de implementação - com base na Web, vários kits de GUI, Flash / WPF etc.
Uso de cor e animação. Os programas de console são geralmente monocromáticos e não animam muito. Muitas estruturas modernas de GUI fornecem widgets temáticos e têm efeitos de animação de mover / tamanho / mostrar / ocultar, geralmente de graça.
Gráficos. Às vezes, os aplicativos de console usam arte ASCII para diagramas, mas um aplicativo GUI oferece a capacidade gráfica completa. Arte adorável também pode fazer uma grande diferença.