Um bom design é?

O ciclo de vida do software com o passar do desenvolvimento aumenta cada vez mais a sua robustez e tamanho (não sendo mutuamente proporcionais), mas está linha segue quase que como premissa. Um bom design influência muito em se ter um software elegante, e inteligível.

Scott Bellware disse:

A sugestão de Bellware também é 100% válida.

e você o que pensa ?

Eu concordo que um bom design deixa qualquer desenvolvedor feliz.
Pra comprovar isso, pegue um sistema mal projetado e tente estender para uma nova funcionalidade. Se você não pensar primeiro na refatoração, o que você consegue? Uma bela treta.

Se for delicado os programadores nerds gostam mas,
Se for mulher mais feliz o programador H, se for mulher e linda… mais feliz ainda…hehe

Eu concordo. Nao tem nada pior do que comecar um trampo novo, ai quando vc ve o projeto que vai trabalhar da vontade de se descabelar, tomar veneno, entrar no banheiro depois daquele gerente financeiro gordo, ou ate mesmo pedir demissao.

//Daniel

Só pra acrescentar, de nada adianta ter um sistema bem projetado e o código ser um lixo (Corrigindo, um código de difícil leitura)*.

*Código de difícil leitura:

[code]#define O000000O " }"
#define OO0000O0 “”
#define O00OOO0O “---------”
#define OO0O00OO “—H-O-H-B-OPHOB–”
#define O0O000OO “-AAA–”
#define OOOO000O “…”
#define OOOOO0OO “AICHMORHABDOPHOBIA”
#define OO00O0OO “ALTITONANT”
#define O000OO0O “B–B--”
#define O00O00OO “BAAACC”
#define O0O0OO0O “BARBED”
#define O0O0O0OO “BRACHIATION”
#define OO00OO0O “BRINGS”
#define OOO0OO0O “BUBBLE”
#define OOO000OO “CAAABB”
#define OOO0O0OO “CERCOPITHECAN”
#define OOO00OOO “CHARGOGGAGOGGMANCHAUGGAGOGGCHAUBUNAGUNGAMAUGG”
#define O0O0O00O “FAILED”
#define O0O00O0O “FLIPS”
#define O0OOOO0O “FORCE”
#define O00O0O0O “FRISBEE”
#define O00000OO “GAINING”
#define OOOO00OO “GYROVAGUE”
#define O0O00OOO “HIPPOPOTOMONSTROSESQUIPEDALIAN”
#define OOOOOO0O “IS”
#define OO0OOO0O “MONKEY”
#define O0OOO00O “N-N-A”
#define O0000O0O “NINJA”
#define OO000O0O “NINJAS”
#define OOO00O0O “OUT”
#define O000O00O “PASSED”
#define OO0OO0OO “RESISTENTIALISM”
#define O0OO00OO “ROSACEA”
#define O00OO0OO “SCOLECOPHAGOUS”
#define O000O0OO “SHACONIAN”
#define O0OOO0OO “SLUBBERDEGULLION”
#define O0000OOO “SPECTOCLOACAPHOBIA”
#define OO0000OO “STRENGTH”
#define O0OO000O “Test Case #”
#define OO000OOO “ULTRACREPIDARIANISM”
#define OOOOOOO0 “”,"
#define OOO0O00O "\tExpected: “”
#define O00OO00O "\tReceived: “”
#define OO00OOO0 "{ “
#define OO00OO00 ‘-’
#define O0OOOOO0 '”’
#define OO000O00 0
#define O00000O0 1
#define OOO0O0O0 2
#define OO0OO000 26
#define OO0OO0O0 3
#define OOOOO0O0 4
#define OOOO0O00 65
#define OO0OO00O Arg0
#define OO0O0O0O Arg1
#define OOOO0O0O Arg2
#define OOOOO00O Arr1
#define OOO000O0 BEGIN
#define O00O00O0 CUT
#define O000O0O0 Case
#define O00O0OOO END
#define OOO0000O Expected
#define OO0O00O0 HERE
#define O00O0000 Hangman
#define O00O000O Received
#define O00O0OO0 T
#define O0OO0OO0 V
#define O0O0O000 a
#define OOO0O000 b
#define O00OOOO0 begin
#define O0OO0000 bool
#define OO0O000O cerr
#define OOO00000 class
#define O000O000 const
#define O0O0OOO0 const_iterator
#define O0O000O0 else
#define OO0OOOO0 end
#define OO00O00O endl
#define O0O00O00 false
#define O00OOO00 feedback
#define O0OOO000 for
#define OOO0OO00 guessWord
#define O0000O00 i
#define OOO00O00 if
#define OOOOO000 int
#define O0O0OO00 isupper
#define OOO0OOO0 iter
#define O00OO000 l
#define OO0O0OOO main
#define OOOO0000 match
#define O0OO0O00 n
#define OO000000 namespace
#define O000OOO0 os
#define OOOO0OO0 ostringstream
#define OO0O0OO0 print_array
#define OO000OO0 private
#define OO0O0000 public
#define OOOOOO00 r
#define OO0O0O00 return
#define OOOO00O0 run_test
#define O00O0O00 size
#define O0OO0O0O sizeof
#define O0O00000 std
#define OO00000O str
#define OO00O000 string
#define O0O00OO0 template
#define O0OO0OOO test
#define OO00O0O0 test_case_0
#define O0O0O0O0 test_case_1
#define O00OO0O0 test_case_2
#define O0OOO0O0 test_case_3
#define O0000OO0 test_case_4
#define O000OO00 true
#define OOO00OO0 typename
#define O0000000 using
#define OO0OOO00 vector
#define O0O0000O verify_case
#define O0OO00O0 void
#define O0OOOO00 words

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#define VAR(i,e) __typeof(e) i = (e)
#define FOREACH(i,C) for (VAR(i, ©.begin()); i != ©.end(); ++i)
#define FOR(i,n) for (int i = 0; i < (int)(n); ++i)

#define ALL© ©.begin(), ©.end()
#define MIN© *min_element(ALL©)
#define MAX© *max_element(ALL©)
#define SUM© accumulate(ALL©, 0)

#define INF numeric_limits::max()
#define MINF numeric_limits::min()

O0000000 OO000000 O0O00000;

OOO00000 O00O0000{
OO0O0000:

O0OO0000 OOOO0000(O000O000 OO00O000 &O0O0O000, O000O000 OO00O000 &OOO0O000){
O0OO0000 O00OO000[OO0OO000];
O0OOO000(OOOOO000 O0000O00 =OO000O00;O0000O00<OO0OO000;++O0000O00)O00OO000[O0000O00]=O0O00O00;
OOO00O00(O0O0O000.O00O0O00()!=OOO0O000.O00O0O00())OO0O0O00 O0O00O00;
OOOOO000 O0OO0O00 = O0O0O000.O00O0O00();
O0OOO000(OOOOO000 O0000O00 =OO000O00;O0000O00<O0OO0O00;++O0000O00)O00OO000[O0O0O000[O0000O00]-OOOO0O00]=O000OO00;
O0OOO000(OOOOO000 O0000O00 =OO000O00;O0000O00<O0OO0O00;++O0000O00){
OOO00O00(O00OO000[OOO0O000[O0000O00]-OOOO0O00] && O0O0O000[O0000O00] == OO00OO00)OO0O0O00 O0O00O00;
OOO00O00(O0O0OO00(OOO0O000[O0000O00]) && O0O0OO00(O0O0O000[O0000O00]) && O0O0O000[O0000O00] != OOO0O000[O0000O00])OO0O0O00 O0O00O00;
}
OO0O0O00 O000OO00;
}

OO00O000 OOO0OO00(OO00O000 O00OOO00, OO0OOO00 O0OOOO00){
OOOOO000 O0OO0O00 = O0OOOO00.O00O0O00();
OOOOO000 OOOOOO00 = -O00000O0;
O0OOO000(OOOOO000 O0000O00 = OO000O00; O0000O00 < O0OO0O00;++O0000O00){
OOO00O00(OOOO0000(O00OOO00, O0OOOO00[O0000O00])){
OOO00O00(OOOOOO00 >= OO000O00)OO0O0O00 OO0000O0;
OOOOOO00 = O0000O00;
}
}
OOO00O00(OOOOOO00>=OO000O00)OO0O0O00 O0OOOO00[OOOOOO00];
O0O000O0 OO0O0O00 OO0000O0;
}

};
[/code]
E o mais interessante de tudo: o código funciona e resolveu um SRM no TopCoder.

[quote=Andre Brito]…
E o mais interessante de tudo: o código funciona e resolveu um SRM no TopCoder.[/quote]

Isso daí não é lixo. Isso daí é obfuscated C++.
Acredite, isso é mais uma obra de arte do que um lixo. Fazer códigos assim e que funcionem requer conhecimento muito profundo da linguagem e bastante dedicação.

Uma vez eu participei do IOCCC, mas não fui classificado. O meu programa era o seguinte:

[code]#ifdef
Because
By John Lennon and Paul McCartney

Aaaaaahhhhh.
Because the world is round it turns me on.
Because the world is round - Aaaaaahhhhh.

Because the wind is high it blows my mind.
Because the wind is high - Aaaaaahhhhh.

Love is old, love is new.
Love is all, love is you.

Because the sky is blue it makes me cry.
Because the sky is blue - Aaaaaahhhhh.

Aaaaaahhhhh.
Aaaaaahhhhh.
Aaaaaahhhhh.

             obfuscated c

#else

#define I Love you
#define all // is // obfuscated //
#define hello world

#define Because obfuscated =
#define is , o/* Ringo Starr /
#define a “dddJ=dR7,6dP”/
Beatles /
#/fine beautiful /define Aaaaaahhhhh o; o&1969; o0
#define song international obfuscated?c:code; contest
#define By /
George Harrison / char C = 9 , ioccc []={
#define Paul a")6676d%6(dT%90dQ+K%:86)=\x92\x92"Yoko"\x92"};char
#define McCartney __=0,OO; struct o0{ char**o0,obfuscated,o; } o0; Y(){ int
#define and ,"-8d
07?;d1=d1-6(v\x92" , “-8d1%3);d1)d+:=v\x92” ,“J)+%9;)\x92”
#define John “P7>)d-;d70(pd07>)d-;d6)?p\x92P7>)d-;d%00pd07>)d-;d=79v\x92\x92”
#define Lennon ,"?7:0(d-;d"":796(d", “?-6(d-;d,-/,d” ,";3=d""-;d
"
“09)d”,“J)+%9;)d8,)d”,"-8d89:6" “;d1)d76v\x92”
#define wind } O0(O /* Paul McCartney John Lennon */
#define blows o=-o; oo(o,0),oo(o+ OO,o^o),oo((o,
#define my o,o-o-o-o-o-o )/-o,o-o), oo(
#define mind o,O^O),oo(10, o&~o blue; if
/efine and /( o <love ) return 2 ; {o0
#define blue round /
1969 } Liverpool /
#define sky } main(_ /
; The Beatles /
#define makes >-(OO=4)?(o0 .o0=ioccc,__?
/*efine my */0:X(
=-(__= 1),oo(OO
2,0))
#define heart oo(OO,0),> - OO?O0(-,):_
#define sadly ,==-2?oo(0,0 ):OO,main(–)
#define cry heart sadly): for;{return o0
#define for X(X(X(|))); /
{ 1969 } /
#define me ,/
Beatles ; { Yoko Ono */

define Ono “E%%%%%,v”

#define Love obfuscated ; char**u=ioccc
/efine our /; * ioccc= O0(C,OO); love
#define round ) /
} Album: Abbey Road /
#define world /puts (Hello World)/} oo(O
#define you =puts(“Hello” " World!") ,o0
#define are -
i++; ; ; ioccc . o0[b] ++ ;
#define on oo(O, ++o):0; if(__!=love)return; { o0
#define it { int h = __, love = 0x99 ; ; ; ; ; ; ;

define Yoko , Ono “\x92”,"qd"Ono “\x92”

#define turns o0.o0[O|O][o] ? putchar( love - (o0.o0
/efine 1969 /[O| O ] [o] ^( 0+ 29 high) round
#define old =__;} X(x){oo(C, 0);return; int _
#define c/
Beatles
/; C; }
#define the/*; { } { } / 69;
#define high ) /
ioccc */
#define new =love; o0

#include FILE
#endif[/code]
Sim, isso compila e roda.

[quote]Because is a beautiful song By Paul McCartney and John Lennon
wind blows my mind and blue sky makes my heart sadly cry for me
Love our round world you are on it
turns 1969 old[/quote]

EDIT: O word-wrapping bagunça todo o layout :frowning:
Vou anexar como arquivo.

Que legal, Victor. Realmente não sabia disso.

Agora, imagine fazer isso no first problem do contest (i.e., o problema mais fácil), sendo que o contestant tem 1 hora e 15 minutos pra resolver 3 problemas (em ordem não decrescente de complexidade). Esses poloneses…

Abraço.

Editado:
Eu achei o seu uma verdade obra prima. Agora… O código que eu postei nem fazer um desenhinho bonito ele fez :slight_smile: E nem era relacionado a uma música!

Abraço!

[quote=Andre Brito]Que legal, Victor. Realmente não sabia disso.

Agora, imagine fazer isso no first problem do contest (i.e., o problema mais fácil), sendo que o contestant tem 1 hora e 15 minutos pra resolver 3 problemas (em ordem não decrescente de complexidade). Esses poloneses…

Abraço.

Editado:
Eu achei o seu uma verdade obra prima. Agora… O código que eu postei nem fazer um desenhinho bonito ele fez :slight_smile: E nem era relacionado a uma música!

Abraço![/quote]

Hehe.
Teve dois outros códigos bem mais complexos que este, que escrevi e acabei deixando pela metade. Ficaram tão malucos que eu já não conseguia mais entender porra nenhuma do que tinha escrito. E tinham bugs e crashes que eu não fazia a menor idéia de qual era a origem e fazer o debug era um verdadeiro inferno.

Eai pessoal…

Pra mim um bom design é conseguir ler os requisitos no código fonte com facilidade.
É prazeroso trabalhar em sistemas bem projetados, até mesmo para evolui-lo e dar manutenção, que são atividades que normalmente os desenvolvedores “temem”.

[]s

[quote=Ferryman]Eai pessoal…

Pra mim um bom design é conseguir ler os requisitos no código fonte com facilidade.
É prazeroso trabalhar em sistemas bem projetados, até mesmo para evolui-lo e dar manutenção, que são atividades que normalmente os desenvolvedores “temem”.

[]s[/quote]

Concordo, você tem gosto de trabalhar quando vê que o negócio foi bem desenvolvido. Isso também diminui bastante a probabilidade de tropeçar em bugs já existentes e/ou ocultos, ou de quebrar alguma coisa, ou ser forçado a mexer em um monte de outras funcionalidades para poder fazer o que te pediram. E mesmo se isso ocorrer, em poucos minutos você resolve o problema, enquanto que em um sistema mal-projetado você perde vários dias por conta disso.

Do nível que tá o IOCCC hoje, vc precisa fazer um sistema operacional pra começar a se classificar. Ou um bi-interpretador de um dialeto de brainfuck e whitespace que leia o próprio código que gere código em Shakespeare.

Para alguns desenvolvedores o design pode não ser o mais importante, mas é o que vai agradar o cliente (claro que estou falando de usuários finais).

Não adianta o sistema ter integração com SAP, utilizar mil tecnologias e ter a “cara” do Windows 3.1!

=P

Um bom design é aquele que resolve requisitos da maneira mais simples possível…

[quote=apgomes88]Para alguns desenvolvedores o design pode não ser o mais importante, mas é o que vai agradar o cliente (claro que estou falando de usuários finais).

Não adianta o sistema ter integração com SAP, utilizar mil tecnologias e ter a “cara” do Windows 3.1!

=P[/quote]

Mas design que estão se referindo na thread não seria relacionado a Arquitetura de Software?

Um bom design… é aquele que não deixa o programador que vai fazer a manutenção do sistema puto da vida.

A métrica para dizer de o design é bom ou não, é a quantidade de palavrões proferidos por minuto.