• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

IceBrain

Importância das estruturas de dados, algoritmos e padrões de desenho

15 mensagens neste tópico

Eu acho que se dá demasiada importância à aprendizagem das estruturas de dados. Ninguém actualmente se vai pôr a programar uma lista ligada ou uma árvore no seu programa, visto que as bibliotecas são mais eficientes e testadas. Quanto a saber qual escolher, basta dar uma vista d'olhos pela tabela das complexidades e ver o que melhor se adequa.

Muito mais importante, na minha opinião, seria aprender bons Patterns: comprei há pouco o Patterns of Enterprise Application Architecture do Martin Fowler e é muito interessante, e adapta-se a qualquer linguagem, incluindo PHP. Seria interessante darmos isto em LEI, mas já acabei o segundo ano e ainda só tocámos ao de leve no MVC, nem sequer demos o Singleton.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, tenho uma opinião bem contrária da tua.

É muito importante saber as diferentes características das estruturas de dados. A escolha certa das estruturas de dados está na base do bom funcionamento de qualquer programa. Agora patterns nem por isso.

Eu nos meus programas, por exemplo, uso algumas patterns. Mas já o fazia mesmo antes de saber o que eram design patterns, ou seja, mais tarde ou mais cedo vais chegar a essas patterns por necessidade, em vez de tentar enfiar patterns em tudo o que não precisa.

É por acaso das patterns, e do seu uso intensivo no mundo "Java", que tens muitas das monstrosidades que se vêm por aí, em termos de APIs. "Over-engineering" no seu melhor. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que se dá demasiada importância à aprendizagem das estruturas de dados. Ninguém actualmente se vai pôr a programar uma lista ligada ou uma árvore no seu programa, visto que as bibliotecas são mais eficientes e testadas. Quanto a saber qual escolher, basta dar uma vista d'olhos pela tabela das complexidades e ver o que melhor se adequa.

Engraçado. Eu acho que se dá pouca importância às estruturas de dados.

Existe tantas estruturas de dados que não são leccionadas que dá pena. Só o facto de não conhecermos uma dada estrutura de dados pode tornar um problema simples num complicado.

Gostas tanto de padrões de desenho e não compreendes estruturas de dados, que são basicamente em si também padrões de desenho.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Seria interessante darmos isto em LEI, mas já acabei o segundo ano e ainda só tocámos ao de leve no MVC, nem sequer demos o Singleton.

Eu estou no segundo ano e já demos design patterns na cadeira de Programação com Objectos. E demos todas as patterns clássicas, as que vêm no livro do GoF (Gang of Four).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei em que Universdade andas IceBrain mas eu também não dou nada disso e acho que nem no 3 ano se deve dar. Eu ando na UMinho e tu? Se por acaso andares cá, onde é que deste MVC? Porque acho que nem isso foi mencionado. Pode estar implicito nalguma coisa, mas falado mesmo, não me lembor.

De qualquer forma, eu acho isso dos padrões uma treta. Confesso que alguns que não são tão triviais e um gajo pode não chegar lá sozinho mas depois de ver num livro e perceber como funciona, se calhar até dava jeito aplica num ou outro sitio.

Mas outros padrões, tu acabas por chegar lá sozinho por necessidade e nem sabes que estas a usar um padrão que por acaso até tem um nome... Não acho esse tipo de coisas interessa aprender-se numa universidade, não é saber padrões e mais padrões que és bom programador ou que vais programar melhor a usar padrões do que o vizinho do lado que programa da melhor forma que sabe.

Quanto às estruturas de dados, acho importante. Talvez não tão importante quanto as universidades demonstram, mas importante porque ajuda bastante a raciocinar. Agora, eles exageram... Ter que saber uma data de algoritmos de cor e perceber todos os pormenores de cada um deles, onde é que um é melhor que o outro e etc. Não vejo grande utilidade nisso porque a verdade é que o mais provável é nunca teres de programar tal coisa e no caso de precisares de o fazer... Bem, na altura estudas melhor o assunto. Para mim a piada na programação está ai, um gajo nunca sabe todo e eu gosto de explorar e conhecer coisas novas, mas ser forçado a aprender uma coisa só porque sim...

Em forma de conclusão, acho que aprender uma ou outra estrutura de dados é importante no sentido que ajuda bastante a raciocinar problemas. E acho que também é importante no sentido de saber as que existem e quais as vantagens e desvantagens de cada uma. Mas conhece-las todas ou grande parte e a fundo só porque sim, não vejo grande interesse e acho que é dada demasiada importância nesse aspecto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nem todos os programadores são como tu ou eu, e vão procurar pela melhor forma e mais eficiente de fazer uma coisa, ou neste caso a melhor estrutura de dados para o problema. Por isso é que na universidade se foca bastante nos algoritmos e nas estruturas de dados, são as bases mais fundamentais da programação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas eu posso pegar numa biblioteca como a JDSL (www.jdsl.org), carrego a API de, p.e., uma NodeBinaryTree (http://www.jdsl.org/doc/jdsl/core/ref/NodeBinaryTree.html) e tenho a complexidade de cada operação, inserts, removes, etc. Para que preciso de saber como é que está implementada? Pode quando muito ser interessante dar uma vista de olhos pela idea base do algoritmo, mas não é indispensável.

Já os padrões fazem parte do código do programa, não são simplesmente blocos de código já implementado que podem ser usados como bibliotecas.

E eu acho muito mais importante que um programador aprenda a compartimentalizar bem o código, utilizando o MVC, Facades, Data Mappers, etc;

Eu estou na FCT da UNL, e até agora todos os programas que fizemos, excepto um, foram para a CLI, mas o que eu vejo é código de apresentação misturado com Domain Logic, com objectos internos a passarem Strings com informações para o Utilizador, etc.

Isso aliado a todos os programas serem de apenas duas ou três centenas de linhas de código vai com certeza levar a programadores que não sabem modularizar e cujo código é impossível de gerir.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esta é a minha opinião, exemplificada em .net:

Se vamos fazer código complexo q é para ser reutilizado mtas vezes, como é o caso de uma infraestrutura, convém usar Padrões de desenho, para o código ficar o mais genérico possivel.

De resto, se vamos fazer umas aplicações desktop ou web e vamos usar o q o .net nos oferece, não devemos estar a usar padrões de desenho, mas sim modelos de organização de código, como separar tudo por camadas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei em que Universdade andas IceBrain mas eu também não dou nada disso e acho que nem no 3 ano se deve dar.

Dás no 3º em DSS e LI4 (bem, em LI4 não é bem dar...é mais usar, porque já deste em DSS).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tu quiseres passar a vida a fazer páginas Web ou algo parecido, então realmente não precisas de algoritmia para nada. Mas se o teu objectivo for fazer algo minimamente diferente, então de certeza que o que vais criar vai ser um algoritmo, e ter boas bases de algoritmia (conhecendo mas acima de tudo PERCEBENDO outros) é fundamental.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De qualquer forma, eu acho isso dos padrões uma treta. Confesso que alguns que não são tão triviais e um gajo pode não chegar lá sozinho mas depois de ver num livro e perceber como funciona, se calhar até dava jeito aplica num ou outro sitio.

Podias elaborar um pouco mais, do porque achares que os padrões são uma treta?

Mas outros padrões, tu acabas por chegar lá sozinho por necessidade e nem sabes que estas a usar um padrão que por acaso até tem um nome... Não acho esse tipo de coisas interessa aprender-se numa universidade, não é saber padrões e mais padrões que és bom programador ou que vais programar melhor a usar padrões do que o vizinho do lado que programa da melhor forma que sabe.

Não é pelos padrões terem um nome, isso é irrelevante e só servem para quando se está a discutir sobre um determinado problema. A principal vantagem dos padrões é que são métodos e é importante conhecer esses métodos. É essencial? Não. Mas ajuda, um pessoa que não conheça pode chegar lá na mesma, ou então pode ir por outra via muito mais complicada.

Os padrões vêm da arquitectura, que até serve como uma boa analogia. Queres fazer uma casa, qualquer pessoa consegue fazer um casa, agora o resultado final pode não ser grande coisa, pode vir uma rajada de vento mais forte e lá vai a casa ao ar. Enquanto que se for uma pessoa com metodologia em construção civil, tem no seu conhecimento variados métodos que estão associados a certas propriedades. E fazendo a casa segundo esses métodos sabe que no fim a casa irá usufruir de determinadas propriedades, e sabe que a casa irá aguentar uma rajada de vento mais forte.

Quanto às estruturas de dados, acho importante. Talvez não tão importante quanto as universidades demonstram, mas importante porque ajuda bastante a raciocinar. Agora, eles exageram... Ter que saber uma data de algoritmos de cor e perceber todos os pormenores de cada um deles, onde é que um é melhor que o outro e etc. Não vejo grande utilidade nisso porque a verdade é que o mais provável é nunca teres de programar tal coisa e no caso de precisares de o fazer... Bem, na altura estudas melhor o assunto. Para mim a piada na programação está ai, um gajo nunca sabe todo e eu gosto de explorar e conhecer coisas novas, mas ser forçado a aprender uma coisa só porque sim...

Em forma de conclusão, acho que aprender uma ou outra estrutura de dados é importante no sentido que ajuda bastante a raciocinar problemas. E acho que também é importante no sentido de saber as que existem e quais as vantagens e desvantagens de cada uma. Mas conhece-las todas ou grande parte e a fundo só porque sim, não vejo grande interesse e acho que é dada demasiada importância nesse aspecto.

Não acho que exageram, até pelo contrário acho bastante limitativo. Só dei as principais estruturas de dados e raramente foram muito aprofundadas. Por exemplo, à uns tempos li este livro. É um livro ligeiro e bastante resumido (um pouco para o introdutório diria, nem se fala de grafos), mas aprendi imensamente mais do que no curso.

Depois, há ainda tanta estrutura de dados fantástica que uma pessoa nem sequer ouve falar na universidade. Por exemplo, o zipper que é fantástico para trabalhar com históricos, que até serviu para elaborar um sistema de ficheiros.

Mas eu posso pegar numa biblioteca como a JDSL (www.jdsl.org), carrego a API de, p.e., uma NodeBinaryTree (http://www.jdsl.org/doc/jdsl/core/ref/NodeBinaryTree.html) e tenho a complexidade de cada operação, inserts, removes, etc. Para que preciso de saber como é que está implementada? Pode quando muito ser interessante dar uma vista de olhos pela idea base do algoritmo, mas não é indispensável.

Mas tens vários problemas.

1 - Uma biblioteca não implementa todas as estruturas de dados, isso é impossível. Portanto a não ser que percas imenso tempo a pesquisar bibliotecas, nunca terás acesso a todas as opções de estruturas.

2 - Segundo, estudares uma estrutura de dados passa por muito mais que olhar para o valor assimptótico das operações. Por exemplo, a maior parte das árvores binárias de pesquisas, tem todas o mesmo valor assimptótico, no entanto funcionam de maneira diferente e serve para situações diferentes.

É claro que não é preciso saber como é que as estruturas estão implementadas. Mas convém saber que elas existem e qual o seu propósito.

E depois, não tão importante, alguém tem que implementar as bibliotecas. Se não houver uma implementação de uma dada estrutura na linguagem que estás a usar o que fazes? Cruzas os braços e ficas a espera que apareça feito?

Ter um bom conhecimento de estruturas é bastante importante, já que todo o teu software vai assentar sobre essas estruturas.

Já os padrões fazem parte do código do programa, não são simplesmente blocos de código já implementado que podem ser usados como bibliotecas.

E eu acho muito mais importante que um programador aprenda a compartimentalizar bem o código, utilizando o MVC, Facades, Data Mappers, etc;

Padrões também podem ser pedaços de código. Posso estar a inventar um pouco, mas diria que a maior parte dos padrões criacionais podem (e devem) ser implementados em classes genéricas, para nunca mais serem feitos.

O MVC é um bom exemplo disto (que nem é um padrão criacional), existe para aí carradas de frameworks que usam internamente MVC, mas o programador para trabalhar nelas nunca tem que fazer o MVC, já está feito, apenas tem de se limitar a fazer a aplicação em si. É o mesmo caso para as estruturas de dados.

Mais importante que tudo, os padrões visam eliminar limitações da linguagem programação que está a ser usada. Por algum motivo os padrões ganharam popularidade com o Java, que é uma linguagem bastante limitativa. Como o Peter Norvig demonstrou num estudo qualquer, a maior parte dos padrões de desenho referidas no GoF não se aplicam a linguagens mais poderosas, tenho a sensação que ele usou Scheme para demonstrar mas não tenho a certeza.

PS: Desculpem pelo post longo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa mas isto já está uma discussão tão grande sobre um assunto que eu realmente não tenho grande interesse em discutir e vou ficar-me por aqui...

Eu tenho uma visão das coisas, tu tens outra, vamos ficar por ai :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa mas isto já está uma discussão tão grande sobre um assunto que eu realmente não tenho grande interesse em discutir e vou ficar-me por aqui...

Eu tenho uma visão das coisas, tu tens outra, vamos ficar por ai :)

Lazy.... só faltas agora ser puro para seres o gajo mais fixe do planeta :)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uh? Não percebi...

Mas a sério, não leves a mal... Só mandei umas postas de pescada porque me apeteceu, é realmente um assunto que não me interessa minimamente para continuar a discutir isto por mais umas páginas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora