O layout gráfico de uma GUI deve ser considerado "trapaça"?

18

Eu tenho um amigo que tem uma quantidade um pouco maior de experiência em programação como eu. Estávamos conversando sobre todas as diferentes tecnologias de programação que usamos e o Interface Builder surgiu na conversa.

Como não tenho experiência em programação, exceto pelo que aprendi, acredito que o IB e todos os seus recursos ( IBOutlets, IBActions) ajudam os programadores do meu nível de habilidade (e todos os níveis de habilidade) a concluir projetos deles em menos tempo.

Sua visão do IB é um pouco entusiasmada. Ele acredita que os codificadores que utilizam o Interface Builder estão "trapaceando" no fato de que não precisam criar interfaces manualmente.


Questão:

O uso de um construtor de GUI para exibir os elementos da interface deve ser considerado "trapaça" (uma vez que a maioria da programação originalmente exigia a criação manual de interfaces em código)? Por quê?

esqew
fonte
32
Por que latir quando você pode comprar um cachorro para fazer isso por você?
jfrankcarr
29
Usar uma caminhonete está enganando. Homens de verdade fogem e domam cavalos selvagens em um clima de 120 graus. Eles se aproximam deles pelas costas. Obrigatório xkcd.com/378
Trabalho
9
pergunte ao seu amigo por que ele não considerar o uso de um computador em vez de fazer as coisas manualmente como trapaça
DPD
2
Parece que seu amigo nunca teve um prazo agressivo a cumprir.
MattDavey
15
Considerando que trapacear é apenas esnobismo de programador.
Alan B

Respostas:

60

Não é trapaça. Programas como o IB são ferramentas. Use o caminho certo para o trabalho. Não há necessidade de ser dogmático sobre isso.

Se você for mais eficiente usando essa ferramenta, use-a. A única ressalva é que você deve aprender as vantagens e desvantagens ao tomar suas decisões. Fazer layouts manualmente oferece controle preciso às custas da facilidade de arrastar e soltar. As ferramentas de arrastar e soltar permitem fazer muitas coisas de maneira rápida e fácil, mas podem dificultar a manutenção do seu código ao longo do tempo.

Pessoalmente, nunca tive sucesso ou obtive muito prazer ao usar uma ferramenta de design de interface do usuário de arrastar e soltar, mas sou apenas eu. Acho que colocar as GUIs manualmente é o mais eficaz para mim e gera uma base de código que é mais fácil de manter ao longo do tempo. Outros têm a experiência oposta.

Bryan Oakley
fonte
3
Apenas para adicionar, as ferramentas de designer são apenas geradores de código. Gerar código geralmente é uma coisa boa, porque pode gerá-lo e você pode continuar fazendo o que deve fazer; faça a tela realmente fazer algo útil. Minha experiência difere; Eu era muito mais produtivo usando as ferramentas de designer do que não.
217 Andy
Como um adendo à nota de Andy, a ferramenta de designer certa faz toda a diferença no mundo. Eu usei o Delphi / Lazarus para desenvolvimento de GUI e foi ótimo. Também fui mandatado para usar o MS Frontpage, e você obtém html horrível do outro lado.
Spencer Rathbun
FWIW, usando o MFC, uso o editor visual para aproximá-lo e, em seguida, ajuste manualmente para fazer o certo. Esse parece ser o caminho mais rápido para mim.
David Thornley
Não tenho nenhum problema em usar uma ferramenta especializada para realizar o trabalho com mais rapidez, mas para acrescentar: Minha preferência é por ferramentas que definem modelos controlados por dados, ou seja, um UI'a um layout em XML - em vez de geradores de código, que escreva para você "Button btn54 = new Button (x: 543, y: 782);"
Katana314
17

Programar como trabalho não é um esporte nem um jogo. Portanto, o argumento de trapaça é muito fino. Se as ferramentas visuais aumentarem sua produtividade, você seria estúpido em não usá-las. Minha experiência é que isso me leva a gastar mais tempo na resolução de problemas reais, sem fazer as coisas triviais da interface repetidamente.

Cuidado, porém, é fácil que configurações ou dados entrem na interface. Seja radical ao manter a apresentação e a lógica separadas.

Pieter B
fonte
10

É trapaça se você está sacrificando algo para chegar lá. A maioria dos layouts de GUI apenas gera código que você faria de qualquer maneira (e geralmente precisa editar manualmente, já que o layout não é suficiente).

Então basicamente não.

Tudo o resto é igual, qualquer ferramenta que permita fazer a mesma coisa mais rapidamente é boa.

Telastyn
fonte
Estou firmemente no campo 'use as ferramentas de layout disponíveis'. As ferramentas economizam tempo, mesmo que o código gerado geralmente precise de alguns ajustes. O cara 'está enganando' parece alguém que não teve tempo para entender bem o gerado para editá-lo.
Jim In Texas.
4

Trapaça é o nome do jogo. Você deve sempre seguir o caminho mais fácil possível ao tomar qualquer tipo de decisão de desenvolvimento. Chame de trapaça, chame de "ser produtivo"; Não faz diferença. Você deve escolher a ferramenta que ajuda a realizar o trabalho com o mínimo de esforço (é claro, não se esqueça da manutenção e escalabilidade).

Agora, especificamente com o IB, você deve pesar o tempo economizado pelo IB e o custo de manter um código mais desleixado e com o qual você está menos familiarizado. Este é realmente um caso por caso e pessoa por pessoa, tipo de decisão. Em muitos casos, ferramentas e assistentes permitem que você faça muito mais trabalho com um baixo custo de manutenção adicionado ... e às vezes eles introduzem código slop e abstração com maior vazamento do que você sabe. Parece que você tomou a decisão de que o IB vale qualquer custo que isso agregue ao desenvolvimento; no entanto, seu amigo pode facilmente descobrir que a ferramenta o atrapalha mais do que ajuda.

Morgan Herlocker
fonte
3

De jeito nenhum. Fazer isso inteiramente à mão, no entanto, é um caso claro de fazer um trabalho desnecessário para si mesmo.

(Geralmente, eu o descrevia usando um construtor e, se algum ajuste fino fosse necessário, ele tende a - mas nem sempre - ser feito à mão).

Maximus Minimus
fonte
No .Net a partir da versão 2.0, acredito que a GUI e a lógica sejam separadas graças às classes parciais - a mesma classe é definida em dois arquivos diferentes; um é totalmente gerado automaticamente e um é personalizado por você.
Job
Não posso concordar com a afirmação de que é um "caso claro de fazer um trabalho desnecessário". Tudo depende da ferramenta e da habilidade do programador. Por exemplo, tenho certeza de que poderia codificar uma GUI tcl / tk mais rapidamente e com melhor código final manualmente do que você usaria qualquer construtor de GUI de sua escolha. OTOH, não há como pensar em usar outra coisa senão o Visual Studio se criar um aplicativo de área de trabalho .net.
Bryan Oakley
Como o OP está falando claramente do caso geral (veja o texto em negrito na pergunta), não posso aceitar sua discordância em relação ao caso geral, embora eu aceite que casos especiais possam existir e existam. Foi sempre assim.
Maximus Minimus
3

Certamente não é trapaça, embora eu tenha um pouco menos de respeito por um desenvolvedor que não poderia criar uma GUI sem ela. Na IMO, usar um não é diferente de usar um tipo de dados fornecido pelo sistema - por que implementar sua própria lista vinculada ou mapa de hash se você pode usar um fora da biblioteca do sistema?

FWIW Eu tive que implementar uma interface do usuário no Java Swing alguns meses atrás. Eu nunca tinha usado, então escrevi tudo à mão para entender melhor como funcionava. Agora que conheço a API básica, nunca mais escreverei uma à mão se puder ajudá-la!

TMN
fonte
1

Como @Bryan Oakley afirma, é apenas uma ferramenta e não uma "fraude". Tudo depende do que exatamente você está planejando. Se à mão torna um exercício incrivelmente trabalhoso, você deve realmente procurar outras alternativas que o tornem mais produtivo.

Eu costumava estar no campo da mão codificando a interface, mas mais tarde, depois de um período de criação de interfaces, levei uma flecha no joelho e tive uma opinião diferente. Se eu puder e isso me tornar mais produtivo, eu usaria uma ferramenta gráfica para definir a GUI.

Ultimamente, usando o padrão MVVM, com a distinção de View e ViewModel, fica um pouco mais claro quando você usaria ferramentas gráficas. Phil Haack discute isso brevemente no episódio do podcast Herding Code do Github for Windows, quando perguntado sobre a transição da Web para o desenvolvimento de aplicativos. Faz mais sentido executar o ViewModel com a codificação "à mão" e permitir que o designer construa o View graficamente (e conecte os ViewModels de acordo).

Spoike
fonte
1

Uma das grandes vantagens de ferramentas como o Interface Builder é que elas permitem separar o trabalho de design da interface do usuário da implementação do programa. Alguém com habilidades mínimas de codificação pode alterar facilmente o layout da interface do usuário, alterar as legendas do botão e do menu, traduzir a interface do usuário para um idioma diferente etc.

Mark Bessey
fonte