Ordenação, pilhas, filas, listas encadeadas e árvores binárias

505 views
Skip to first unread message

Fabiano Vasconcelos

unread,
Sep 24, 2010, 10:18:19 AM9/24/10
to ccppb...@googlegroups.com
Ol�, povo da lista!

� s� impress�o minha, ou os assuntos mencionados no t�tulo deste e-mail
s�o beeem dif�ceis de se absorver? Eu achei de uma dificuldade maior que
os outros assuntos. Algu�m teve a mesma impress�o?
� de extrema relev�ncia que se aprenda logo esses assuntos, antes de
pegar projetos?
Algu�m aqui programa profissionalmente e ainda n�o conseguiu absorver
tais assuntos?
Algu�m aqui programa profissionalmente, domina os assuntos, mas teve
problemas com eles no in�cio?

Espero opini�es! ;)

Grande abra�o a todos! :D

Eike Santos

unread,
Sep 24, 2010, 10:25:38 AM9/24/10
to ccppb...@googlegroups.com
Bom, sou da opiniao que esses assuntos sao mais importantes do que a
propria linguagem no qual voce implementara.
Claro q existem essas estruturas de dados disponiveis para utilizar,
sem a necessidade de faze-la do zero, mas o importante e entender como
funciona e onde utilizar. Para quem programa em C ANSI acredito que
seja de uma grande relevancia, pois vira e mexe temos que implementar
algumas estruturas de dados.

Sao assuntos abordados em curso de ciencia da computacao, portanto tem
um certo desafio, mas um bom livro possibilitara facilmente o
entendimento. Depois desse bom livro dá uma olhada no The art of
Programming, para refinar algumas arestas.

Atc,
Marcos Eike

2010/9/24 Fabiano Vasconcelos <fvasco...@gmail.com>:
> Olá, povo da lista!
>
> É só impressão minha, ou os assuntos mencionados no título deste e-mail são
> beeem difíceis de se absorver? Eu achei de uma dificuldade maior que os
> outros assuntos. Alguém teve a mesma impressão?
> É de extrema relevância que se aprenda logo esses assuntos, antes de pegar
> projetos?
> Alguém aqui programa profissionalmente e ainda não conseguiu absorver tais
> assuntos?
> Alguém aqui programa profissionalmente, domina os assuntos, mas teve
> problemas com eles no início?
>
> Espero opiniões! ;)
>
> Grande abraço a todos! :D
>
> --
> Antes de enviar um e-mail para o grupo leia:
> http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
> --~--~---------~--~----~---------------------------------~----------~--~----~
> [&] Colabore com a Pesquisa de Preferência de Conteúdo              para
> Eventos do Grupo C & C++ Brasil:
>                       http://www.surveymonkey.com/s/GBBGTXN
> ------~----~-------~---~---~---~---~----------------~------------~---------~
> [&] C & C++ Brasil - http://www.ccppbrasil.org/
> Para sair dessa lista, envie um e-mail para
> ccppbrasil-...@googlegroups.com
> Para mais opções, visite http://groups.google.com/group/ccppbrasil
> --~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
> Emprego & carreira:  vag...@ccppbrasil.org
> http://groups.google.com/group/dev-guys?hl=en
>

--
Marcos Eike Tinen dos Santos
(Pauca sed matura - uma arvore com poucos frutos maduros! Nao merece
ser admirada)

Helio Perroni Filho

unread,
Sep 24, 2010, 10:35:45 AM9/24/10
to ccppb...@googlegroups.com
2010/9/24 Fabiano Vasconcelos <fvasco...@gmail.com>:

> É só impressão minha, ou os assuntos mencionados no título deste e-mail são
> beeem difíceis de se absorver? Eu achei de uma dificuldade maior que os
> outros assuntos. Alguém teve a mesma impressão?

A implementação e utilização de estruturas de dados é um tópico
"difícil" no sentido de que esse é um dos fundamentos da computação
aplicada, portanto necessariamente é apresentado quando ainda não
estamos familiarizados com seus conceitos. É meio como aprender uma
língua (humana) nova, no começo é mais difícil precisamente porque
ainda não temos o conhecimento básico de vocabulário e gramática.
Porém, passada a confusão inicial, esses conceitos se tornam "segunda
natureza" para qualquer estudante bem-sucedido.

> É de extrema relevância que se aprenda logo esses assuntos, antes de pegar
> projetos?

Sem dúvida! Estruturas de dados e sua manipulação são parte do
vocabulário básico de qualquer profissional de computação, seja na
indústria ou na academia.

Um desenvolvedor que tenha dificuldade em trabalhar com estruturas de
dados é como um jornalista com dificuldade para escrever: pode até ser
que ele consiga se pendurar em algum emprego, mas sua carreira será
medíocre de ponta a ponta.

--
Ja ne,
Helio Perroni Filho
https://www.google.com/profiles/xperroni

Bruno Sanches

unread,
Sep 24, 2010, 10:35:22 AM9/24/10
to ccppb...@googlegroups.com
Eu sou da mesma opinião do Eike e também acho que após aprender esses conceitos é fundamental entender os custos de cada tipo de algoritmo e estrutura de dados quanto a desempenho e uso de memória. 

Bruno Sanches
========================
http://www.pontov.com.br


2010/9/24 Eike Santos <eike...@gmail.com>

Ziviani

unread,
Sep 24, 2010, 10:53:07 AM9/24/10
to ccppb...@googlegroups.com
Para mim, a melhor maneira de fixar conceitos é ver a coisa funcionando na prática. Na época, eu instalei o DDD (front end do GDB debugger - http://www.gnu.org/software/ddd/) no Linux. Ele tem uma janelinha de Display qye mostra graficamente as suas variáveis com seus respectivos conteúdos (se o conteúdo for um endereço ele linka à variável que está sendo apontada). Enfim, dê uma olhada:
 


2010/9/24 Bruno Sanches <bcsa...@gmail.com>

Stephen Eilert

unread,
Sep 24, 2010, 10:58:09 AM9/24/10
to ccppb...@googlegroups.com
2010/9/24 Fabiano Vasconcelos <fvasco...@gmail.com>:
> Olá, povo da lista!
>
> É só impressão minha, ou os assuntos mencionados no título deste e-mail são
> beeem difíceis de se absorver?

De forma alguma. Árvores como B+ até são mais complicadinhas, mas uma
binária sem balanceamento?

Ou você estaria falando de implementar esses algoritmos e estruturas
de dados em C? Nesse caso entram outros conhecimentos que podem
atrapalhar mesmo o aprendizado.


> Eu achei de uma dificuldade maior que os

> outros assuntos. Alguém teve a mesma impressão?

Não dá pra responder sem saber quais seriam os outros assuntos. Acho
que aprender a provar corretude e completude em lógica proposicional é
bem mais difícil, por exemplo.


> É de extrema relevância que se aprenda logo esses assuntos, antes de pegar
> projetos?


> Alguém aqui programa profissionalmente e ainda não conseguiu absorver tais
> assuntos?

Pelo amor de todos os deuses reais e imaginários, eu realmente espero
que não existam muitas pessoas nessa situação.

> Alguém aqui programa profissionalmente, domina os assuntos, mas teve
> problemas com eles no início?

Desligue da lista e pegue um bom livro. Volte daqui a algumas horas :)


--Stephen

Sent from my Emacs

Fabiano Vasconcelos

unread,
Sep 24, 2010, 11:13:37 AM9/24/10
to ccppb...@googlegroups.com
Boa disserta��o a respeito, Eike!
Obrigado pela colabora��o. :D

Em 24-09-2010 11:25, Eike Santos escreveu:
> Bom, sou da opiniao que esses assuntos sao mais importantes do que a
> propria linguagem no qual voce implementara.
> Claro q existem essas estruturas de dados disponiveis para utilizar,
> sem a necessidade de faze-la do zero, mas o importante e entender como
> funciona e onde utilizar. Para quem programa em C ANSI acredito que
> seja de uma grande relevancia, pois vira e mexe temos que implementar
> algumas estruturas de dados.
>
> Sao assuntos abordados em curso de ciencia da computacao, portanto tem
> um certo desafio, mas um bom livro possibilitara facilmente o

> entendimento. Depois desse bom livro d� uma olhada no The art of


> Programming, para refinar algumas arestas.
>
> Atc,
> Marcos Eike
>
> 2010/9/24 Fabiano Vasconcelos<fvasco...@gmail.com>:
>

>> Ol�, povo da lista!
>>
>> � s� impress�o minha, ou os assuntos mencionados no t�tulo deste e-mail s�o

>> beeem dif�ceis de se absorver? Eu achei de uma dificuldade maior que os


>> outros assuntos. Algu�m teve a mesma impress�o?

>> � de extrema relev�ncia que se aprenda logo esses assuntos, antes de pegar
>> projetos?


>> Algu�m aqui programa profissionalmente e ainda n�o conseguiu absorver tais
>> assuntos?

>> Algu�m aqui programa profissionalmente, domina os assuntos, mas teve


>> problemas com eles no in�cio?
>>
>> Espero opini�es! ;)
>>

>> Grande abra�o a todos! :D


>>
>> --
>> Antes de enviar um e-mail para o grupo leia:
>> http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
>> --~--~---------~--~----~---------------------------------~----------~--~----~

>> [&] Colabore com a Pesquisa de Prefer�ncia de Conte�do para
>> Eventos do Grupo C& C++ Brasil:
>> http://www.surveymonkey.com/s/GBBGTXN
>> ------~----~-------~---~---~---~---~----------------~------------~---------~
>> [&] C& C++ Brasil - http://www.ccppbrasil.org/


>> Para sair dessa lista, envie um e-mail para
>> ccppbrasil-...@googlegroups.com

>> Para mais op��es, visite http://groups.google.com/group/ccppbrasil
>> --~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
>> Emprego& carreira: vag...@ccppbrasil.org
>> http://groups.google.com/group/dev-guys?hl=en
>>
>>
>
>
>

Fabiano Vasconcelos

unread,
Sep 24, 2010, 11:16:32 AM9/24/10
to ccppb...@googlegroups.com
Em 24-09-2010 11:35, Helio Perroni Filho escreveu:
> 2010/9/24 Fabiano Vasconcelos<fvasco...@gmail.com>:

>
>
>> � s� impress�o minha, ou os assuntos mencionados no t�tulo deste e-mail s�o
>> beeem dif�ceis de se absorver? Eu achei de uma dificuldade maior que os

>> outros assuntos. Algu�m teve a mesma impress�o?
>>
> A implementa��o e utiliza��o de estruturas de dados � um t�pico
> "dif�cil" no sentido de que esse � um dos fundamentos da computa��o
> aplicada, portanto necessariamente � apresentado quando ainda n�o
> estamos familiarizados com seus conceitos. � meio como aprender uma
> l�ngua (humana) nova, no come�o � mais dif�cil precisamente porque
> ainda n�o temos o conhecimento b�sico de vocabul�rio e gram�tica.
> Por�m, passada a confus�o inicial, esses conceitos se tornam "segunda

> natureza" para qualquer estudante bem-sucedido.
>
>
>> � de extrema relev�ncia que se aprenda logo esses assuntos, antes de pegar
>> projetos?
>>
> Sem d�vida! Estruturas de dados e sua manipula��o s�o parte do
> vocabul�rio b�sico de qualquer profissional de computa��o, seja na
> ind�stria ou na academia.

>
> Um desenvolvedor que tenha dificuldade em trabalhar com estruturas de
> dados � como um jornalista com dificuldade para escrever: pode at� ser
> que ele consiga se pendurar em algum emprego, mas sua carreira ser�
> med�ocre de ponta a ponta.
>
>
N�o que eu esteja querendo realmente NUNCA aprender estes conceitos, mas
eu t� aqui ponderando se eu posso dar uma empurrada com a barriga por
hora, s� pra ir me divertindo um pouco com codifica��o. Eu sei demais
que preciso aprender sim, o que eu t� tentando acertar � QUANDO!

Abs! ;)

Bruno Sanches

unread,
Sep 24, 2010, 11:20:38 AM9/24/10
to ccppb...@googlegroups.com
Digamos que você aprenda a dirigir e ninguém lhe explique para que serve o freio, você vai conseguir ir bem, até chegar no primeiro sinal vermelho...

É difícil pensar em programar qualquer coisa além de um hello word que não precise de alguma estrutura de dados :).

Bruno Sanches
========================
http://www.pontov.com.br


2010/9/24 Fabiano Vasconcelos <fvasco...@gmail.com>
Em 24-09-2010 11:35, Helio Perroni Filho escreveu:
2010/9/24 Fabiano Vasconcelos<fvasco...@gmail.com>:

 
É só impressão minha, ou os assuntos mencionados no título deste e-mail são

beeem difíceis de se absorver? Eu achei de uma dificuldade maior que os
outros assuntos. Alguém teve a mesma impressão?
   
A implementação e utilização de estruturas de dados é um tópico
"difícil" no sentido de que esse é um dos fundamentos da computação
aplicada, portanto necessariamente é apresentado quando ainda não
estamos familiarizados com seus conceitos. É meio como aprender uma
língua (humana) nova, no começo é mais difícil precisamente porque
ainda não temos o conhecimento básico de vocabulário e gramática.
Porém, passada a confusão inicial, esses conceitos se tornam "segunda

natureza" para qualquer estudante bem-sucedido.

 
É de extrema relevância que se aprenda logo esses assuntos, antes de pegar
projetos?
   
Sem dúvida! Estruturas de dados e sua manipulação são parte do

vocabulário básico de qualquer profissional de computação, seja na
indústria ou na academia.


Um desenvolvedor que tenha dificuldade em trabalhar com estruturas de
dados é como um jornalista com dificuldade para escrever: pode até ser
que ele consiga se pendurar em algum emprego, mas sua carreira será
medíocre de ponta a ponta.

 
Não que eu esteja querendo realmente NUNCA aprender estes conceitos, mas eu tô aqui ponderando se eu posso dar uma empurrada com a barriga por hora, só pra ir me divertindo um pouco com codificação. Eu sei demais que preciso aprender sim, o que eu tô tentando acertar é QUANDO!

Abs! ;)


--
Antes de enviar um e-mail para o grupo leia:                     http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] Colabore com a Pesquisa de Preferência de Conteúdo              para Eventos do Grupo C & C++ Brasil:
                      http://www.surveymonkey.com/s/GBBGTXN
------~----~-------~---~---~---~---~----------------~------------~---------~
[&] C & C++ Brasil - http://www.ccppbrasil.org/

Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com

Gianni Rossi

unread,
Sep 24, 2010, 11:24:11 AM9/24/10
to ccppb...@googlegroups.com
On Friday, September 24, 2010 12:20:38 Bruno Sanches wrote:
> É difícil pensar em programar qualquer coisa além de um hello word que não
> precise de alguma estrutura de dados :).

Tem gente que tenta, e daí nasceu, o que para mim é o melhor meme da programação, o termo 'stringly-typed'. Um sistema que só usa strings como type de todas as vars....

Eric Chiesse

unread,
Sep 24, 2010, 11:25:03 AM9/24/10
to ccppb...@googlegroups.com
Além do mais, entender bem estruturas de dados vai te obrigar a aprender o uso de ponteiros e alocação dinâmica.
---
Eric
www.twitter.com/echiesse
br.linkedin.com/in/echiesse

Fabiano Vasconcelos

unread,
Sep 24, 2010, 11:50:10 AM9/24/10
to ccppb...@googlegroups.com
Em 24-09-2010 12:25, Eric Chiesse escreveu:
Além do mais, entender bem estruturas de dados vai te obrigar a aprender o uso de ponteiros e alocação dinâmica.
---
Eric
www.twitter.com/echiesse
br.linkedin.com/in/echiesse


Isso eu notei, heheheh...
Ou você aprende ponteiros ou não vai ver as estruturas.
Bom... A dúvida foi sanada, galera.

Obrigado!

Helio Perroni Filho

unread,
Sep 24, 2010, 12:03:06 PM9/24/10
to ccppb...@googlegroups.com
2010/9/24 Fabiano Vasconcelos <fvasco...@gmail.com>:

>> Sem dúvida! Estruturas de dados e sua manipulação são parte do
>> vocabulário básico de qualquer profissional de computação, seja na
>> indústria ou na academia.
>

> Não que eu esteja querendo realmente NUNCA aprender estes conceitos, mas eu
> tô aqui ponderando se eu posso dar uma empurrada com a barriga por hora, só
> pra ir me divertindo um pouco com codificação.

A resposta é "não, não pode". Pelo menos, não sem comprometer
seriamente o seu aprendizado.

> Eu sei demais que preciso aprender sim, o que eu tô tentando acertar é QUANDO!

Eu colocaria os conceitos nesta ordem:

1. "Hello world"
2. Tipos primitivos
3. Funções
4. Controle de fluxo (if, loops, etc)
5. Arrays
6. Estruturas de dados

Ou seja, se você já foi apresentado a um programa trivial, tipos
primitivos, arrays e estruturas "procedurais" de uma linguagem de
programação, o próximo passo é aprender estruturas de dados. Mesmo em
linguagens que já provém estruturas de dados "básicas" (listas,
árvores, etc) o principal trabalho de um desenvolvedor ainda é
construir hierarquias de "tipos", compondo um modelo do problema que o
aplicativo deve resolver. Portanto, é fundamental começar a se
familiarizar com o conceito tão cedo quanto possível.

Eric Lemes

unread,
Sep 24, 2010, 1:03:33 PM9/24/10
to ccppb...@googlegroups.com
Fabiano,

Pra mim é o tipo de conhecimento que deve ser exercitado sim. Essas estruturas e os algorítmos para manipulá-las vão dar um embasamento de lógica que pode ser útil em qualquer linguagem, plataforma, etc.

Pra mim isso é a pedra fundamental da coisa toda.

São assuntos chatos, dificilmente você vai precisar implementá-los na prática (já estão implementado em praticamente toda framework standard de todas as linguagens), mas entender o funcionamento deles te dá a base para aprender a aplicar a estrutura correta para o problema correto e principalmente a teoria de performance de algoritmos.


Abraço,

Eric


2010/9/24 Fabiano Vasconcelos <fvasco...@gmail.com>
Olá, povo da lista!

É só impressão minha, ou os assuntos mencionados no título deste e-mail são beeem difíceis de se absorver? Eu achei de uma dificuldade maior que os outros assuntos. Alguém teve a mesma impressão?
É de extrema relevância que se aprenda logo esses assuntos, antes de pegar projetos?

Alguém aqui programa profissionalmente e ainda não conseguiu absorver tais assuntos?
Alguém aqui programa profissionalmente, domina os assuntos, mas teve problemas com eles no início?


Espero opiniões! ;)

Grande abraço a todos! :D

Stephen Eilert

unread,
Sep 24, 2010, 1:31:20 PM9/24/10
to ccppb...@googlegroups.com
2010/9/24 Fabiano Vasconcelos <fvasco...@gmail.com>:

> Em 24-09-2010 11:35, Helio Perroni Filho escreveu:
>>
>> 2010/9/24 Fabiano Vasconcelos<fvasco...@gmail.com>:
>>
>>
>>>
>>> É só impressão minha, ou os assuntos mencionados no título deste e-mail
>>> são
>>> beeem difíceis de se absorver? Eu achei de uma dificuldade maior que os
>>> outros assuntos. Alguém teve a mesma impressão?
>>>
>>
>> A implementação e utilização de estruturas de dados é um tópico
>> "difícil" no sentido de que esse é um dos fundamentos da computação
>> aplicada, portanto necessariamente é apresentado quando ainda não
>> estamos familiarizados com seus conceitos. É meio como aprender uma
>> língua (humana) nova, no começo é mais difícil precisamente porque
>> ainda não temos o conhecimento básico de vocabulário e gramática.
>> Porém, passada a confusão inicial, esses conceitos se tornam "segunda

>> natureza" para qualquer estudante bem-sucedido.
>>
>>
>>>
>>> É de extrema relevância que se aprenda logo esses assuntos, antes de
>>> pegar
>>> projetos?
>>>
>>

>> Sem dúvida! Estruturas de dados e sua manipulação são parte do
>> vocabulário básico de qualquer profissional de computação, seja na
>> indústria ou na academia.

>>
>> Um desenvolvedor que tenha dificuldade em trabalhar com estruturas de
>> dados é como um jornalista com dificuldade para escrever: pode até ser
>> que ele consiga se pendurar em algum emprego, mas sua carreira será
>> medíocre de ponta a ponta.
>>
>>
>
> Não que eu esteja querendo realmente NUNCA aprender estes conceitos, mas eu
> tô aqui ponderando se eu posso dar uma empurrada com a barriga por hora, só
> pra ir me divertindo um pouco com codificação. Eu sei demais que preciso

> aprender sim, o que eu tô tentando acertar é QUANDO!
>

AGORA.

Uma coisa é aprender algoritmos e estruturas de dados. Os conceitos
são teóricos e independem da existência das máquinas que chamamos de
computadores. Algoritmo é feito para ser executado, mas não importa se
é um computador ou uma pessoa que está fazendo isso.

Outra coisa é a implementação desses algoritmos e das estruturas de
dados, que é um mero detalhe. Isso vai variar de acordo com a
linguagem que se está trabalhando(basicamente só a linguagem, porque
todo mundo usa máquinas de Von Neumann mesmo). Mas a teoria nunca vai
mudar e é essa que tem que ser bem aprendida.

Por mais que seja legal ver o negócio funcionando numa tela (e pra
você ver, vai ter que implementar algum tipo de visualização), só se
aprende na base do lápis e papel.

Cada um desses assuntos não leva mais do que algumas horas de estudo
sério para aprender. Já parte de ordenação demora um pouco mais, já
que você precisa estudar vários algoritmos diferentes (muitos deles
recursivos) e já entender pelo menos por cima como se calcula a
complexidade de um algoritmo. Se você já souber calcular a
complexidade e a famosa notação O (as outras você pode ignorar por
enquanto), dá pra entender os algoritmos mais usados em questão de
dias.

Numa faculdade séria você passa pelo menos 6 meses estudando esses e
outros assuntos. Mas se você for autodidata e focar só nesses assuntos
dá pra ententer o básico rapidamente. Aonde básico = suficiente para
implementar na linguagem à sua escolha e entender os usos de cada um,
bom com a complexidade de tempo e espaço. Tudo vai depender da base
que você já tem.

Não é como se alguém estivesse pedindo você para desenvolver um
algoritmo com programação dinâmica. Isso é o básico. É como se um
físico quisesse trabalhar sem estudar as quatro operações. É matéria
de primeiro ou no máximo segundo semestre de qualquer curso de
computação.

Andreh Poffo

unread,
Sep 25, 2010, 9:50:52 PM9/25/10
to ccppb...@googlegroups.com
Bom, é simples.
É necessário tu saber, pois quando tu precisares usar uma estrutura tu precisa entender qual é a melhor para cada situação.
Se tu errar na escolha, tu pode ter um problema futuro, com performance ou mesmo com acesso aos registros, e isso num projeto grande se torna um empecilho maior que o projeto.

Então, na minha humilde opinião, entender de estrutura de dados é algo mínimo para um bom programador.


--

DQ

unread,
Sep 26, 2010, 11:26:54 AM9/26/10
to ccppbrasil
Fabiano,

Eu não diria que são "beem difíceis", tem coisa muito pior...

Como já disseram os colegas, estas estruturas, suas implementações e
os algorítimos envolvidos fazem parte da base da programação. Eu
lembro de ter aprendido estas coisas* no primeiro volume de The Art of
Computer Programming, que chama justamente "Fundamental
Algorithms" (não recomendo você a começar por este livro, pois é bem
"pesado" na parte teórica).

Por último, um pequeno "comercial": no meu blog (http://
dqsoft.blogspot.com) eu tenho alguns artigos introdutórios sobre
pilhas, filas, listas ligadas e ordenação. Quem sabe ajuda um pouco.

Daniel

* Ordenação é no terceiro volume. Os algorítmos são muito
interessantes, mas a análise teórica não é simples.


On Sep 24, 11:18 am, Fabiano Vasconcelos <fvasconce...@gmail.com>
wrote:

José Luis Segatto Junior

unread,
Sep 26, 2010, 4:55:53 PM9/26/10
to ccppb...@googlegroups.com
Eu confesso que não li todos os emails desse tópico, então se alguém
já disse alguma coisa parecida peço que me perdoem.

Assim, muitas vezes eu não consigo "engolir" uma solução sem ter um
problema pra ela. Talvez seja esse o seu caso.
Lembro que quando fiz E.D. na faculdade, de 70 pessoas matriculadas
apenas 9 tiraram nota média ou maior. Eu lembro que um dos pontos
falhos do professor (IMHO) era a falta de exemplos.
De repente compensa começar a fazer alguns programinhas por conta e ir
entendendo o quê e onde se aplica melhor. Os conceitos acabam ficando
triviais com isso.

Abraço


2010/9/26 DQ <d.qu...@yahoo.com>:

Gianni

unread,
Sep 26, 2010, 5:03:11 PM9/26/10
to ccppb...@googlegroups.com
Concordo. Essa mentalidade de ter soluções prontas na cabeça que então saem a procura de um problema geralmente leva à soluções muito mais complexas, desnecessariamente.

Como diria Jim Starkey: "Nosso objetivo deve ser gerênciar complexidade, e não criá-la".

Fabiano Vasconcelos

unread,
Sep 26, 2010, 9:17:38 PM9/26/10
to ccppb...@googlegroups.com
"Claro q existem essas estruturas de dados disponiveis para utilizar,
sem a necessidade de faze-la do zero, mas o importante e entender como
funciona e onde utilizar."
Prooooonto! Era só isso que eu desconfiava fortemente e queria ouvir pra ter certeza!
Isso quer dizer que eu posso começar um projeto-estudo (e isso eu já comecei) pra depois, com calma, ver toda essa tralha aí! :)
Do que trata "The art of programming"? Algorítimos puros? Metodologias? C e C++?



Em 24-09-2010 11:25, Eike Santos escreveu:

Fabiano Vasconcelos

unread,
Sep 26, 2010, 9:24:40 PM9/26/10
to ccppb...@googlegroups.com
Em 24-09-2010 11:58, Stephen Eilert escreveu:
> 2010/9/24 Fabiano Vasconcelos<fvasco...@gmail.com>:
>
>> Ol�, povo da lista!
>>
>> � s� impress�o minha, ou os assuntos mencionados no t�tulo deste e-mail s�o
>> beeem dif�ceis de se absorver?
>>
> De forma alguma. �rvores como B+ at� s�o mais complicadinhas, mas uma
> bin�ria sem balanceamento?
>
> Ou voc� estaria falando de implementar esses algoritmos e estruturas

> de dados em C? Nesse caso entram outros conhecimentos que podem
> atrapalhar mesmo o aprendizado.
>
>
>
>> Eu achei de uma dificuldade maior que os
>> outros assuntos. Algu�m teve a mesma impress�o?
>>
> N�o d� pra responder sem saber quais seriam os outros assuntos. Acho
> que aprender a provar corretude e completude em l�gica proposicional �
> bem mais dif�cil, por exemplo.
>
>
Os outros assuntos aos quais me referi, s�o os b�sicos: fun��es,
ponteiros, estruturas, tipos, etc.
Pra que voc� se situe, estou usando o "C Completo e total" do Herbert
Schildt, 3� edi��o, e j� cheguei nos cap�tulos referentes aos assuntos
supra-citados. :)
>
>> � de extrema relev�ncia que se aprenda logo esses assuntos, antes de pegar
>> projetos?
>> Algu�m aqui programa profissionalmente e ainda n�o conseguiu absorver tais
>> assuntos?
>>
> Pelo amor de todos os deuses reais e imagin�rios, eu realmente espero
> que n�o existam muitas pessoas nessa situa��o.
>
>
>> Algu�m aqui programa profissionalmente, domina os assuntos, mas teve
>> problemas com eles no in�cio?

>>
> Desligue da lista e pegue um bom livro. Volte daqui a algumas horas :)
>
Al�m do livro que eu citei, tamb�m tenho o "C++, como programar", dos
Deitel. Al�m disso eu tenho o HTML do "Thinking in C++", do Bruce Eckel.

Fabiano Vasconcelos

unread,
Sep 26, 2010, 9:25:32 PM9/26/10
to ccppb...@googlegroups.com
Em 24-09-2010 12:20, Bruno Sanches escreveu:
Digamos que você aprenda a dirigir e ninguém lhe explique para que serve o freio, você vai conseguir ir bem, até chegar no primeiro sinal vermelho...
Quando chegar na parte que eu preciso eu estudo. :D

Fabiano Vasconcelos

unread,
Sep 26, 2010, 9:31:35 PM9/26/10
to ccppb...@googlegroups.com
Em 24-09-2010 14:03, Eric Lemes escreveu:
> S�o assuntos chatos, dificilmente voc� vai precisar implement�-los na
> pr�tica (j� est�o implementado em praticamente toda framework standard
> de todas as linguagens), mas entender o funcionamento deles te d� a
> base para aprender a aplicar a estrutura correta para o problema
> correto e principalmente a teoria de performance de algoritmos.

Mais um me confirmando o que eu j� pensava. Afinal, postgresql, Oracle,
mysql, firebird e outros BDs j� n�o prov�m tudo o que eu preciso? J� n�o
cobrem todos esses assuntos? Se sim, pra que reinventar a roda?

Fabiano Vasconcelos

unread,
Sep 26, 2010, 9:34:14 PM9/26/10
to ccppb...@googlegroups.com
Em 25-09-2010 22:50, Andreh Poffo escreveu:
Bom, é simples.
É necessário tu saber, pois quando tu precisares usar uma estrutura tu precisa entender qual é a melhor para cada situação.
Se tu errar na escolha, tu pode ter um problema futuro, com performance ou mesmo com acesso aos registros, e isso num projeto grande se torna um empecilho maior que o projeto.
Pelo que eu tô entendendo, o trivial é aprender o algorítimo. O difícil é aplicar a coisa certa pra cada caso.
Envolve cálculos matemáticos?

Felipe Magno de Almeida

unread,
Sep 26, 2010, 9:41:13 PM9/26/10
to ccppb...@googlegroups.com
2010/9/26 Fabiano Vasconcelos <fvasco...@gmail.com>:

> Em 25-09-2010 22:50, Andreh Poffo escreveu:
>
> Bom, é simples.
> É necessário tu saber, pois quando tu precisares usar uma estrutura tu
> precisa entender qual é a melhor para cada situação.
> Se tu errar na escolha, tu pode ter um problema futuro, com performance ou
> mesmo com acesso aos registros, e isso num projeto grande se torna
> um empecilho maior que o projeto.
>
> Pelo que eu tô entendendo, o trivial é aprender o algorítimo. O difícil é
> aplicar a coisa certa pra cada caso.
> Envolve cálculos matemáticos?

http://cpp-next.com/archive/2010/07/algebraic-data-types/


[snip]

--
Felipe Magno de Almeida

Fabiano Vasconcelos

unread,
Sep 26, 2010, 9:50:47 PM9/26/10
to ccppb...@googlegroups.com
Em 26-09-2010 17:55, Jos� Luis Segatto Junior escreveu:
> Eu confesso que n�o li todos os emails desse t�pico, ent�o se algu�m
> j� disse alguma coisa parecida pe�o que me perdoem.
>
> Assim, muitas vezes eu n�o consigo "engolir" uma solu��o sem ter um

> problema pra ela. Talvez seja esse o seu caso.
> Lembro que quando fiz E.D. na faculdade, de 70 pessoas matriculadas
> apenas 9 tiraram nota m�dia ou maior. Eu lembro que um dos pontos

> falhos do professor (IMHO) era a falta de exemplos.
> De repente compensa come�ar a fazer alguns programinhas por conta e ir
> entendendo o qu� e onde se aplica melhor. Os conceitos acabam ficando
> triviais com isso.
>
> Abra�o
>
> z�
>
>
Cara, tava esperando chegar no teu e-mail pra responder.
Pois �, eu resolvi exatamente criar um problema pra mim. Estou
implementando uma agenda de contatos em C, ASCII mesmo, modo console.
Nesta agenda eu pretendo reunir o m�ximo de t�picos de C, ou seja,
testar tudo que eu aprendi - ou penso que aprendi - na leitura do livro.
Afinal, s� exercitando a gente consegue aprender de verdade.
Quando eu postei essa thread, tinha a esperan�a de que a maioria iria me
falar: "Fabiano, tu n�o precisa mais aprender isso n�o! S�o conceitos
ultrapassados e que agora voc� j� pode pegar tudo prontinho com a
postgresql - por exemplo". Mas estranhamente isso n�o aconteceu. Ainda
estou por saber porque apenas 2 pessoas tiveram coragem de mencionar
coisa parecida. O resto disse que eu tinha mais era que meter a cara no
livro e ir aprender.
Algu�m aqui deve estar me achando um pregui�oso, mas, se existe aqui
algum engenheiro, sabe que o princ�pio da engenharia � fazer o trabalho,
no menor espa�o de tempo poss�vel e gastando o m�nimo de energia. Se me
disserem algum argumento que me prove que eu preciso realmente aprender
porque ser� indispensavelmente necess�rio, eu aprenderei com mais afinco
e gosto. Se for s� pra dizer que eu sou um programador "completo" e na
pr�tica isso n�o me servir nunca, at� aprenderei, mas n�o ser�
prioridade. Ser� segundo plano.

Obrigado pela opini�o! :)
> 2010/9/26 DQ<d.qu...@yahoo.com>:
>
>> Fabiano,
>>
>> Eu n�o diria que s�o "beem dif�ceis", tem coisa muito pior...
>>
>> Como j� disseram os colegas, estas estruturas, suas implementa��es e
>> os algor�timos envolvidos fazem parte da base da programa��o. Eu


>> lembro de ter aprendido estas coisas* no primeiro volume de The Art of
>> Computer Programming, que chama justamente "Fundamental

>> Algorithms" (n�o recomendo voc� a come�ar por este livro, pois � bem
>> "pesado" na parte te�rica).
>>
>> Por �ltimo, um pequeno "comercial": no meu blog (http://
>> dqsoft.blogspot.com) eu tenho alguns artigos introdut�rios sobre
>> pilhas, filas, listas ligadas e ordena��o. Quem sabe ajuda um pouco.
>>
>> Daniel
>>
>> * Ordena��o � no terceiro volume. Os algor�tmos s�o muito
>> interessantes, mas a an�lise te�rica n�o � simples.


>>
>>
>> On Sep 24, 11:18 am, Fabiano Vasconcelos<fvasconce...@gmail.com>
>> wrote:
>>
>>> Ol , povo da lista!
>>>
>>> s impress o minha, ou os assuntos mencionados no t tulo deste e-mail
>>> s o beeem dif ceis de se absorver? Eu achei de uma dificuldade maior que
>>> os outros assuntos. Algu m teve a mesma impress o?
>>> de extrema relev ncia que se aprenda logo esses assuntos, antes de
>>> pegar projetos?
>>> Algu m aqui programa profissionalmente e ainda n o conseguiu absorver
>>> tais assuntos?
>>> Algu m aqui programa profissionalmente, domina os assuntos, mas teve
>>> problemas com eles no in cio?
>>>
>>> Espero opini es! ;)
>>>
>>> Grande abra o a todos! :D
>>>
>> --
>> Antes de enviar um e-mail para o grupo leia:
>> http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
>> --~--~---------~--~----~---------------------------------~----------~--~----~

>> [&] Colabore com a Pesquisa de Prefer�ncia de Conte�do

>> para Eventos do Grupo C& C++ Brasil:
>> http://www.surveymonkey.com/s/GBBGTXN
>> ------~----~-------~---~---~---~---~----------------~------------~---------~
>> [&] C& C++ Brasil - http://www.ccppbrasil.org/


>> Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com

Adriano dos Santos Fernandes

unread,
Sep 26, 2010, 10:26:35 PM9/26/10
to ccppb...@googlegroups.com
Se voc� pensa assim, � melhor aprender outra linguagem que te ofere�a
"tudo pronto". Por qu� quer aprender C/C++?


Adriano

Jônata Marcelino

unread,
Sep 26, 2010, 10:49:45 PM9/26/10
to ccppb...@googlegroups.com
Entendo a angustia do Fabiano... E respondendo a pergunta do amigo Adriano, só para complementar: infelizmente algumas das faculdades no ensinam C/C++.

Nesta ocasião já tive muita complicação envolvendo o tema citado da thread, apesar de muita pesquisa, leitura, e prática.

Mas percebi que até os professores colaboram com isso, visto que alguns não conseguem transmitir o assunto. Então para que nos ensinar a inventar a roda para um curso de computação que é sempre atualizado? Já não nos basta a teoria?

--
Abraços,
Jônata Marcelino


Bacharelando em Ciência da Computação @ UERN
Web Developer, Web Designer e Designer Gráfico

http://www.meadiciona.com/jonata_marcelino


Rafael Gottardi

unread,
Sep 27, 2010, 12:33:36 AM9/27/10
to ccppb...@googlegroups.com

Depende mto do nivel de complexidade dos softwares que vc vai desenvolver, estruturas de dados sao o arroz com feijao de desenvolvedores de softwares de alto desempenho, onde normalmente ate um banco de dados parrudo nao consegue ser rapido o suficiente e te obrigando assim a lidar com td em memoria, por exemplo, mas as aplicacoes onde vc precisa conhecer e eventualmente modificar essas estruturas sao coisas comuns... a nao ser q seu objetivo seja fazer software de padaria ou quem sabe d locadora, nesse caso realmente vc estara perdendo tempo, alias, se for esse o caso, seria melhor tentar uma linguagem menos complexa

Boa sorte!

--
Antes de enviar um e-mail para o grupo leia:

http://www.ccppbrasil.org/wiki/Lista:AntesdePergun...

Fabiano Vasconcelos

unread,
Sep 27, 2010, 6:48:17 AM9/27/10
to ccppb...@googlegroups.com
Olá, Rafael!

Pois é, velhinho! :D
Agora com você eu obtive, nesta última tentativa, uma resposta que chegou a um nível alto de objetividade:


"softwares de alto desempenho, onde normalmente ate um banco de dados parrudo nao consegue ser rapido o suficiente e te obrigando assim a lidar com td em memoria, por exemplo, mas as aplicacoes onde vc precisa conhecer e eventualmente modificar essas estruturas sao coisas comuns... a nao ser q seu objetivo seja fazer software de padaria ou quem sabe d locadora, nesse caso realmente vc estara perdendo tempo"

Isso sim era o que eu queria saber.
Eu gosto de C/C++. Eu realmente gosto. O poder de fogo dela me atrai. E por mais incrível que pareça, o meu objetivo é lidar, um dia, com baixo nível. Softwares embarcados, por exemplo. Mas o que muita gente [na lista mesmo] não entende é que existem pessoas que têm o direito de questionar. Saber a relevância de determinado assunto. Parece que já entram aqui armado contra qualquer pessoa que ouse discordar, divergir, questionar ou lamentar algum aspecto da linguagem. Parece até religião. Ponteiros são chatos? São sim e isso é fato! A maioria, até dominá-los por completo, segue detestando-os! E isso não tem ninguém que possa dizer o contrário! Não é porque é C ou C++ que vai ser diferente! E eu estou no meu direito de newbie: abominar, embora que temporariamente, certos apectros da linguagem. Um dia isso vai passar, eu sei. Mas até lá, dá vontade de jogar tudo pro alto, como alguém que tem vontade de arrancar as cordas do violão quando está aprendendo a tocar.
Acontece que muita gente aqui esqueceu que já foi principiante, que não nasceu sabendo e faz comentários do tipo: "Escolhe uma outra linguagem pra programar". Eu sei de outras linguagens. Conheço os propósitos de Java, que até onde eu saiba não usa ponteiros, Object-pascal, D, etc. Mas, uma coisa que eu não vou deixar é de questionar.
Ora, se o livro ensina ordenação, pilhas, filas, listas encadeadas e árvores binárias e eu sei que existem BDs que já fazem isso por mim, é OBVIO, COERENTE, NATURAL e RESPEITOSO (já que esta questão está tão em moda aqui na lista) que eu ou qualquer pessoa que queira, faça esse tipo de pergunta. Mas sempre aparece alguém pra dizer: "Se não gostou, vai aprender outra linguagem". Isso é realmente lamentável.
Vou seguir com C e C++ porque eu adoro o poder de fogo que ela proporciona. Também gosto de desafios, mas isso não significa que eu precise procurar o caminho mais longo e tortuoso pra chegar em determinado destino. Se eu puder atalhar, obtendo os mesmos resultados, a mesma performace, finalmente, as mesmas coisas, sem perda, irei fazê-lo, seguindo os princípios da engenharia, a do menor esforço.
Rafael, muiiiitíssimo obrigado pela resposta OBJETIVA e CERTEIRA! Disse TUDO!

Grande abraço e uma boa semana! ;)

PS: sem querer ser chato, mas já não está na hora de humanizar a lista?

Fabiano Vasconcelos

unread,
Sep 27, 2010, 6:56:14 AM9/27/10
to ccppb...@googlegroups.com
Em 26-09-2010 23:49, Jônata Marcelino escreveu:
Entendo a angustia do Fabiano... E respondendo a pergunta do amigo Adriano, só para complementar: infelizmente algumas das faculdades no ensinam C/C++.

Nesta ocasião já tive muita complicação envolvendo o tema citado da thread, apesar de muita pesquisa, leitura, e prática.

Mas percebi que até os professores colaboram com isso, visto que alguns não conseguem transmitir o assunto. Então para que nos ensinar a inventar a roda para um curso de computação que é sempre atualizado? Já não nos basta a teoria?

--
Abraços,
Jônata Marcelino
Olá, Jônata! :D

Obrigado pela solidariedade!!! Ainda existem seres humanos. :)
O amigo, apesar de respeitoso Bacharel em Ciências da Computação [o que me desperta muita admiração] é humilde em reconhecer que teve SIM problemas com o tema, mesmo depois de tanta pesquisa. Isso é NOBRE.
Mas só salientando: eu tenho oportunidade de aprender a linguagem que eu quiser, mas gosto de C/C++, hehehheheh... É legal! COm ela eu sei que posso fazer um joguinho, um software de padaria, um controlador de dispositivo, um sistema operacional, um software que serve cafezinho e assa pizza, etc. Isso é MUIIITO massa! ;)
O que lasca é que eu sou autodidata. E se você, que teve problemas na facul, com vários professores a disposição, imagina um cara aprender isso sozinho, na tora? Torturante, né? Hehheheheh... Mas não tem problema não! :) A vitória terá um gosto muito mais destilado!

Grande abraço e boa semana, nobre! ;)


Bacharelando em Ciência da Computação @ UERN
Web Developer, Web Designer e Designer Gráfico

http://www.meadiciona.com/jonata_marcelino


Adriano dos Santos Fernandes

unread,
Sep 27, 2010, 7:00:19 AM9/27/10
to ccppb...@googlegroups.com
On 26/09/2010 23:49, J�nata Marcelino wrote:
> Mas percebi que at� os professores colaboram com isso, visto
> que alguns n�o conseguem transmitir o assunto. Ent�o para que nos
> ensinar a inventar a roda para um curso de computa��o que � sempre
> atualizado? J� n�o nos basta a teoria? --
>

Bom, lista encadeada, fila e pilha s�o assuntos t�o b�sicos que n�o tem
como aprend�-los apenas em teoria.

E n�o � reinventar roda, j� que (talvez de t�o b�sico que seja) C n�o
possui nada pronto a respeito.

Ordena��o e �rvores eu n�o acredito que deva ser prioridade a um iniciante.


Adriano

Adriano dos Santos Fernandes

unread,
Sep 27, 2010, 7:03:30 AM9/27/10
to ccppb...@googlegroups.com
On 27/09/2010 07:48, Fabiano Vasconcelos wrote:
> Ol�, Rafael!
>
> Pois �, velhinho! :D
> Agora com voc� eu obtive, nesta �ltima tentativa, uma resposta que
> chegou a um n�vel alto de objetividade:
>
> *"softwares de alto desempenho, onde normalmente ate um banco de dados
> parrudo nao consegue ser rapido o suficiente e te obrigando assim a
> lidar com td em memoria, por exemplo, mas as aplicacoes onde vc
> precisa conhecer e eventualmente modificar essas estruturas sao coisas
> comuns... a nao ser q seu objetivo seja fazer software de padaria ou
> quem sabe d locadora, nesse caso realmente vc estara perdendo tempo"*

>
> Isso sim era o que eu queria saber.
> Eu gosto de C/C++. Eu realmente gosto. O poder de fogo dela me atrai.
> E por mais incr�vel que pare�a, o meu objetivo � lidar, um dia, com
> baixo n�vel. Softwares embarcados, por exemplo. Mas o que muita gente
> [na lista mesmo] n�o entende � que existem pessoas que t�m o direito
> de questionar. Saber a relev�ncia de determinado assunto. Parece que
> j� entram aqui armado contra qualquer pessoa que ouse discordar,
> divergir, questionar ou lamentar algum aspecto da linguagem. Parece
> at� religi�o. Ponteiros s�o chatos? S�o sim e isso � fato! A maioria,
> at� domin�-los por completo, segue detestando-os! E isso n�o tem
> ningu�m que possa dizer o contr�rio! N�o � porque � C ou C++ que vai
> ser diferente! E eu estou no meu direito de newbie: abominar, embora
> que temporariamente, certos apectros da linguagem. Um dia isso vai
> passar, eu sei. Mas at� l�, d� vontade de jogar tudo pro alto, como
> algu�m que tem vontade de arrancar as cordas do viol�o quando est�
> aprendendo a tocar.
> Acontece que muita gente aqui esqueceu que j� foi principiante, que
> n�o nasceu sabendo e faz coment�rios do tipo: "Escolhe uma outra
> linguagem pra programar". Eu sei de outras linguagens. Conhe�o os
> prop�sitos de Java, que at� onde eu saiba n�o usa ponteiros,
> Object-pascal, D, etc. Mas, uma coisa que eu n�o vou deixar � de
> questionar.
> Ora, se o livro ensina ordena��o, pilhas, filas, listas encadeadas e
> �rvores bin�rias e eu sei que existem BDs que j� fazem isso por mim, �
> OBVIO, COERENTE, NATURAL e *RESPEITOSO* (j� que esta quest�o est� t�o
> em moda aqui na lista) que eu ou qualquer pessoa que queira, fa�a esse
> tipo de pergunta. Mas sempre aparece algu�m pra dizer: "Se n�o gostou,
> vai aprender outra linguagem". Isso � realmente lament�vel.

> Vou seguir com C e C++ porque eu adoro o poder de fogo que ela
> proporciona. Tamb�m gosto de desafios, mas isso n�o significa que eu
> precise procurar o caminho mais longo e tortuoso pra chegar em
> determinado destino. Se eu puder atalhar, obtendo os mesmos
> resultados, a mesma performace, finalmente, as mesmas coisas, sem
> perda, irei faz�-lo, seguindo os princ�pios da engenharia, a do menor
> esfor�o.
> Rafael, muiiiit�ssimo obrigado pela resposta OBJETIVA e CERTEIRA!
> Disse _*TUDO*_!
>
> Grande abra�o e uma boa semana! ;)
>
> PS: sem querer ser chato, mas j� n�o est� na hora de _*humanizar*_ a
> lista?
>
Fabiano, na verdade voc� t� falando muito em questionar o que os outros
dizem. Muito bem, voc� est� certo.

Mas estamos aqui tamb�m pra questionar voc� a respeito do que �
perguntado. Voc� t� agindo como se apenas as opini�es que batem com o
que voc� acha ser melhor fossem v�lidas, e as outras seriam apenas pra
te desanimar.


Adriano

Fabiano Vasconcelos

unread,
Sep 27, 2010, 7:10:56 AM9/27/10
to ccppb...@googlegroups.com
Em 26-09-2010 23:26, Adriano dos Santos Fernandes escreveu:
On 26-09-2010 22:31, Fabiano Vasconcelos wrote:
  
Em 24-09-2010 14:03, Eric Lemes escreveu:
    
São assuntos chatos, dificilmente você vai precisar implementá-los na
prática (já estão implementado em praticamente toda framework standard
de todas as linguagens), mas entender o funcionamento deles te dá a
base para aprender a aplicar a estrutura correta para o problema
correto e principalmente a teoria de performance de algoritmos.
      
Mais um me confirmando o que eu já pensava. Afinal, postgresql, Oracle,
mysql, firebird e outros BDs já não provêm tudo o que eu preciso? Já não
cobrem todos esses assuntos? Se sim, pra que reinventar a roda?

    
Se você pensa assim, é melhor aprender outra linguagem que te ofereça
"tudo pronto". Por quê quer aprender C/C++?
  
Olá, Adriano.

Refletindo sobre a tua última sentença, acima, realmente eu não posso julgar se foi formulada com malícia ou como pura curiosidade ou sugestão, haja visto que na internet não se vê entonação de voz, expressão facial, etc. Mas o fato é que existem SIM, pessoas na lista que diriam isso aí, que você falou, de sacanagem, não sei se é o teu caso.
O meu objetivo nem é brigar ou questionar o porque dessa sentença. Não perderia o meu tempo com isso e nem vale a pena, em nenhum sentido. Eu só tenho três objetivos aqui na lista: o primeiro deles é fazer amigos! Amigo é muito melhor do que dinheiro. E eu jamais entraria no mérito da questão de que você fez ou não de leviandade. Prefiro ter todo mundo aqui como aliado.
O segundo é ajudar quando eu puder. Talvez eu ainda não tenha nível pra isso, mas assim que eu puder, quero poder pagar preciosas respostas que eu tenho às minhas perguntas. Você não faz idéia do quanto isso me perturba.
O terceiro e último é aprender. E creia: está em último lugar mesmo! A prova é tanta que eu, em vez de estudar tudo que eu preciso, abri um blog pra passar o pouco que eu consegui captar em C [pra você ver o meu nível de atrevimento, hehehehheheh...]. Eu poderia muito bem continuar estudando sem dar a mínima pra ninguém e não "perder meu tempo", mas eu sei das dificuldades das pessoas e da falta de gente pra ajudar e não sosseguei até dar a minha contribuição ínfima e humilde. Não se preocupe, o blog é revisado pelo meu grande amigo Bruno Sanches! Tá tudo certinho lá. :D
Bem, o que eu queria dizer é que não se ofenda se as mensagens anteriores te atingiram injustamente. Se não se aplica a você, favor não leve em consideração.

Grande abraço e boa semana!

Adriano

  

DQ

unread,
Sep 27, 2010, 7:23:01 AM9/27/10
to ccppbrasil
Fabiano,

Indo por partes, mas não necessariamente em ordem...

Estes não são conceitos ultrapassados.Continuam sendo algumas das
bases da programação.

Dá para usar tudo pronto? Em termos. Como costumam dizer no
http://www.thedailywtf.com/, num sistema embarcado sem sistema de
arquivos... A propósito, você não precisa de um BD para ter estas
coisas, a STL já basta. Entretanto, se você não souber um pouco da
teoria, fica mais difícil escolher a opção certa e usá-la
corretamente.

Também não acredito que se aprenda a programar apenas enfiando a cara
em um livro. E olha que eu aprendi a programar em uma época em que não
costumava se ter computador em casa! Por outro lado, muita gente já
quebrou a cabeça com estas coisas e ler um livro é uma forma de obter
este conhecimento.

Considere filas e pilhas, não é difícil você enxergar exemplos
concretos ao seu redor. Você certamente sabe a diferença entre o
funcionamento de uma pilha e uma fila, mas talvez não consiga montar
uma definição precisa do que elas são. Como simular uma destas filas
reais no computador?

Dando exemplos práticos:

* imagine que um programa seu recebe de alguma forma mensagens e
precisa tratá-las uma a uma, na ordem em que foram recebidas. Como
você armazena estas mensagens? Em uma fila.
* você quer implementar uma função de "undo" em um programa, que
permita ao operador desfazer o que foi feito, do mais recente para o
mais antigo. Como você guarda o que foi feito? Em uma pilha.
* você está tentando percorrer uma árvore de decisões, onde em cada
ponto você tem dois caminhos a seguir. Você vai seguir um caminho e
depois quer retomar o outro caminho. Como você guarda estes pontos
ainda não explorado? Neste caso você pode usar tanto pilha como fila,
e os resultados serão bastante diferentes.

Sobre "The Art of Computer Programming": é uma obra bastante complexa,
que tem a pretensão de esmiuçar os principais algorítimos. Começou a
ser escrito em 1962, como um único volume. Em 1968 saiu o primeiro
volume do que o autor, Donald Knuth, achava que seria uma série de
sete. O segundo volume saiu em 69 e o terceiro em 73. Em 77 Knuth
resolveu investir alguns meses fazendo um programa para facilitar a
formatação dos livros; oito anos depois estava pronto o TeX. Somente
em 2005 começaram a sair os novos volumes, na forma de capítulos. Os
livros são "intensos", com um forte tratamento matemático
(principalmente no que diz respeito à estimativa de tempos de execução
dos algorítimos). Um ponto polêmico é que todos os exemplos estão em
linguagem de máquina de um computador hipotético. Se tiver
curiosidade, você pode encontrar mais detalhes na Wikipedia ou no site
do autor (http://www-cs-faculty.stanford.edu/~knuth/).

Eng. Daniel Quadros

On Sep 26, 10:50 pm, Fabiano Vasconcelos <fvasconce...@gmail.com>
wrote:

Fabiano Vasconcelos

unread,
Sep 27, 2010, 7:43:18 AM9/27/10
to ccppb...@googlegroups.com
S� salientando que enquanto chegava esta sua mensagem eu estava enviando
a minha a voc�. :)
Me parece que voc� n�o perguntou mesmo de leviandade. Mas voc� concorda
comigo que existem pessoas que s�o capazes de perguntar aquilo s� de
sacanagem?
Espero contar com voc� pra responder minhas d�vidas futuras.

Grande abra�o e boa semana! ;)

Fabiano Vasconcelos

unread,
Sep 27, 2010, 7:52:21 AM9/27/10
to ccppb...@googlegroups.com
Ol�, engenheiro! :D
(um dia eu ainda me formo tamb�m, hehehheheh...)

Resposta muito bem elaborada, viu? Serve pra mim e pra posteridade!

Em 27-09-2010 08:23, DQ escreveu:
> Fabiano,
>

> Indo por partes, mas n�o necessariamente em ordem...
>
> Estes n�o s�o conceitos ultrapassados.Continuam sendo algumas das
> bases da programa��o.
>

Disso eu j� me convenci.
> D� para usar tudo pronto? Em termos. Como costumam dizer no


> http://www.thedailywtf.com/, num sistema embarcado sem sistema de

> arquivos... A prop�sito, voc� n�o precisa de um BD para ter estas
> coisas, a STL j� basta.
N�o sabia disso.
> Entretanto, se voc� n�o souber um pouco da
> teoria, fica mais dif�cil escolher a op��o certa e us�-la
> corretamente.
>
Desconfiei fortemente.
> Tamb�m n�o acredito que se aprenda a programar apenas enfiando a cara
> em um livro.
Nem eu.
> E olha que eu aprendi a programar em uma �poca em que n�o
> costumava se ter computador em casa! Por outro lado, muita gente j�
> quebrou a cabe�a com estas coisas e ler um livro � uma forma de obter
> este conhecimento.
>
> Considere filas e pilhas, n�o � dif�cil voc� enxergar exemplos
> concretos ao seu redor. Voc� certamente sabe a diferen�a entre o
> funcionamento de uma pilha e uma fila, mas talvez n�o consiga montar
> uma defini��o precisa do que elas s�o. Como simular uma destas filas
> reais no computador?
>
> Dando exemplos pr�ticos:


>
> * imagine que um programa seu recebe de alguma forma mensagens e

> precisa trat�-las uma a uma, na ordem em que foram recebidas. Como
> voc� armazena estas mensagens? Em uma fila.
> * voc� quer implementar uma fun��o de "undo" em um programa, que


> permita ao operador desfazer o que foi feito, do mais recente para o

> mais antigo. Como voc� guarda o que foi feito? Em uma pilha.
> * voc� est� tentando percorrer uma �rvore de decis�es, onde em cada
> ponto voc� tem dois caminhos a seguir. Voc� vai seguir um caminho e
> depois quer retomar o outro caminho. Como voc� guarda estes pontos
> ainda n�o explorado? Neste caso voc� pode usar tanto pilha como fila,
> e os resultados ser�o bastante diferentes.
>
Cara, o que eu acho meio que chato � o fato de entender algor�timos
macarr�nicos, entende? �s vezes voc� n�o entende onde eles come�am e
onde eles terminam. �s vezes voc� n�o sabe para que serve determinado
trecho e �s vezes voc� se perde no meio do caminho, de t�o grande que �
o bicho. Mas eu vou parar de chorar e p�r a m�o na massa o quanto antes. :D
> Sobre "The Art of Computer Programming": � uma obra bastante complexa,
> que tem a pretens�o de esmiu�ar os principais algor�timos. Come�ou a
> ser escrito em 1962, como um �nico volume. Em 1968 saiu o primeiro
> volume do que o autor, Donald Knuth, achava que seria uma s�rie de


> sete. O segundo volume saiu em 69 e o terceiro em 73. Em 77 Knuth
> resolveu investir alguns meses fazendo um programa para facilitar a

> formata��o dos livros; oito anos depois estava pronto o TeX. Somente
> em 2005 come�aram a sair os novos volumes, na forma de cap�tulos. Os
> livros s�o "intensos", com um forte tratamento matem�tico
> (principalmente no que diz respeito � estimativa de tempos de execu��o
> dos algor�timos). Um ponto pol�mico � que todos os exemplos est�o em
> linguagem de m�quina de um computador hipot�tico. Se tiver
> curiosidade, voc� pode encontrar mais detalhes na Wikipedia ou no site
> do autor (http://www-cs-faculty.stanford.edu/~knuth/).
>
Muito boa a resenha! Ficou bem claro.
> Eng. Daniel Quadros
>
>

Obrigado pela ajuda, engenheiro!

Boa semana e grande abra�o! ;)

Eric Lemes

unread,
Sep 27, 2010, 7:55:42 AM9/27/10
to ccppb...@googlegroups.com


Sobre "The Art of Computer Programming": é uma obra bastante complexa,
que tem a pretensão de esmiuçar os principais algorítimos. Começou a
ser escrito em 1962, como um único volume. Em 1968 saiu o primeiro
volume do que o autor, Donald Knuth, achava que seria uma série de
sete. O segundo volume saiu em 69 e o terceiro em 73. Em 77 Knuth
resolveu investir alguns meses fazendo um programa para facilitar a
formatação dos livros; oito anos depois estava pronto o TeX. Somente
em 2005 começaram a sair os novos volumes, na forma de capítulos. Os
livros são "intensos", com um forte tratamento matemático
(principalmente no que diz respeito à estimativa de tempos de execução
dos algorítimos). Um ponto polêmico é que todos os exemplos estão em
linguagem de máquina de um computador hipotético. Se tiver
curiosidade, você pode encontrar mais detalhes na Wikipedia ou no site
do autor (http://www-cs-faculty.stanford.edu/~knuth/).


Legal,

Eu estou com o Knuth na fila, pra estudar os 4 volumes. Porque eu realmente gosto do assunto. Acho que ele realmente "esgota" o assunto, por isso vale a pena o estudo. 

Pra quem quiser um estudo mais "superficial",  seguem os links, pra ter uma idéia.

O ideal é já ter no mínimo uma idéia de algorítmos O(N) e O(N^2), pra ter uma base de performance.... saber porque um bubblesort (caso médio O(N^2)) é muito mais lento que um quicksort (caso médio O(N log N)), por exemplo, que tem outras especificidades. 

Os links da wikipedia são bem superficiais, mas já dão uma boa idéia sobre o assunto.

http://en.wikipedia.org/wiki/Linked_list (aqui tem lista duplamente ligada).
http://en.wikipedia.org/wiki/Binary_tree (aqui tem links para árvores balanceadas e não balanceadas).
http://en.wikipedia.org/wiki/Heap_(data_structure) (O Heap, fuçando pra dentro dos links que ele referencia, você acha representações de heap com árvore ou com matriz).

Se você entender esses três, pegar os exemplos que tem aí e codificar, principalmente se pegar do pseudocódigo e jogar em C ou C++, dá pra ter uma boa noção sobre o assunto.

O barato pra mim é a lógica que é usada para resolver os problemas com alta performance.

Tem as pegadinhas tbém. Você pensa numa lista ligada e fala. Uau! Que fácil...quando vai brincar de fazer inserções ou exclusões na mão, percebe que tem que tomar cuidado com inserções no começo e no final que tem um tratamento ligeiramente diferenciado.

As árvores já são bem divertidas... tem algoritmos específicos pra fazer parse delas em níveis. Outras aplicações em que cada nível da árvore binária é transformada numa lista ligada. 

Em resumo, a maioria das coisas já tem prontas, mas estudar os algoritmos e as soluções é muito legal pra enriquecer o seu repertório.


Abraço,

Eric







Stephen Eilert

unread,
Sep 27, 2010, 9:44:37 AM9/27/10
to ccppb...@googlegroups.com
2010/9/27 Fabiano Vasconcelos <fvasco...@gmail.com>:

> Olá, Rafael!
>
> Pois é, velhinho! :D
> Agora com você eu obtive, nesta última tentativa, uma resposta que chegou a
> um nível alto de objetividade:
>
> "softwares de alto desempenho, onde normalmente ate um banco de dados
> parrudo nao consegue ser rapido o suficiente e te obrigando assim a lidar
> com td em memoria, por exemplo, mas as aplicacoes onde vc precisa conhecer e
> eventualmente modificar essas estruturas sao coisas comuns... a nao ser q
> seu objetivo seja fazer software de padaria ou quem sabe d locadora, nesse
> caso realmente vc estara perdendo tempo"
>
> Isso sim era o que eu queria saber.
> Eu gosto de C/C++. Eu realmente gosto. O poder de fogo dela me atrai. E por
> mais incrível que pareça, o meu objetivo é lidar, um dia, com baixo nível.
> Softwares embarcados, por exemplo. Mas o que muita gente [na lista mesmo]
> não entende é que existem pessoas que têm o direito de questionar. Saber a
> relevância de determinado assunto.

Como é que você pretende utilizar o "poder de fogo" do C sem aprender
coisas simples como pilhas, listas encadeadas, árvores binários e o
mínimo de algoritmos de ordenação?

Se você precisa do "poder de fogo" do C, então é provável que esteja
trabalhando em algo mais complexo e não com software de locadora. Como
é que você pretende escolher os algoritmos e estruturas de dados
corretos sem o básico?

Todo o poder do C vêm da sua complexidade e do seu baixo nível. Só
quem tem paciência para escovar bits é quem realmente aproveita o
potencial.


> Parece que já entram aqui armado contra
> qualquer pessoa que ouse discordar, divergir, questionar ou lamentar algum
> aspecto da linguagem. Parece até religião. Ponteiros são chatos? São sim e
> isso é fato! A maioria, até dominá-los por completo, segue detestando-os!

Aposto que até o John Carmack deve ter esmurrado a mesa de vez em
quando. Isso não invalida a necessidade de aprender.

> E
> isso não tem ninguém que possa dizer o contrário! Não é porque é C ou C++
> que vai ser diferente! E eu estou no meu direito de newbie: abominar, embora
> que temporariamente, certos apectros da linguagem. Um dia isso vai passar,
> eu sei. Mas até lá, dá vontade de jogar tudo pro alto, como alguém que tem
> vontade de arrancar as cordas do violão quando está aprendendo a tocar.
> Acontece que muita gente aqui esqueceu que já foi principiante, que não
> nasceu sabendo e faz comentários do tipo: "Escolhe uma outra linguagem pra
> programar". Eu sei de outras linguagens. Conheço os propósitos de Java, que
> até onde eu saiba não usa ponteiros, Object-pascal, D, etc.

Mas Java tem ponteiros. Não é porque eu não posso fazer aritmética com
eles ou apontar para posições de memória arbitrárias que eles deixam
de ser ponteiros (que tal NullPointerException?).

Usar outra linguagem para implementar essas estruturas de dados é bem
melhor do que tentar bater a cabeça, jogar tudo pro alto ou coisa do
tipo. Se você está chorando para entender esses conceitos simples,
acha mesmo que é uma boa idéia juntar isso à complexidade do C e do
gerenciamento manual de memória?

E se você acha que uma linguagem só nos dias de hoje é o suficiente,
está muito enganado. Até os mais xiitas programadores C usam outras
linguagens como Lua, nem que seja para arquivos de configuração.

> Mas, uma coisa
> que eu não vou deixar é de questionar.
> Ora, se o livro ensina ordenação, pilhas, filas, listas encadeadas e árvores
> binárias e eu sei que existem BDs que já fazem isso por mim, é OBVIO,
> COERENTE, NATURAL e RESPEITOSO (já que esta questão está tão em moda aqui na
> lista) que eu ou qualquer pessoa que queira, faça esse tipo de pergunta. Mas
> sempre aparece alguém pra dizer: "Se não gostou, vai aprender outra
> linguagem". Isso é realmente lamentável.

Se você perguntou, é porque queria uma resposta. Se a resposta não foi
a que você esperava, paciência.

Lamentável é alguém achar que porque o banco de dados já implementa
algo parecido - utilizando árvores B+ que são muito mais complexas que
uma simples binária - a pessoa não tem a obrigação de aprender.

No tempo que foi gasto aqui nessa lista já seria possível terminar de
estudar pelo menos uma estrutura de dados. Pilha, digamos.

> Vou seguir com C e C++ porque eu adoro o poder de fogo que ela proporciona.

Pra mim, isso é como um iniciante querer utilizar um reator nuclear
sem treinamento, quando um gerador a diesel serviria.

> Também gosto de desafios, mas isso não significa que eu precise procurar o
> caminho mais longo e tortuoso pra chegar em determinado destino.

"Vou seguir com C e C++ porque eu adoro o poder de fogo que ela proporciona"

CQD.

José Luis Segatto Junior

unread,
Sep 27, 2010, 10:14:49 AM9/27/10
to ccppb...@googlegroups.com
Qualquer coisa que eu escrever aqui é praticamente desnecessária
diante do email do Daniel Quadros que, como na palestra do Portal
Embarcados do ano passado, uniu prática e didática com maestria.
Mas, reforçando alguns pontos: sistemas embarcados são "A Aplicação"
para pilhas, filas, listas, arvores... Imagine você ter que encontrar
um registro com identificador de 4 bytes em uma lista com 10000
registros, num processador de 12MHz, em menos de 1 segundo. Imagine
também que há restrições de escrita, afinal os registros ficam em
flash (que tem ciclos de escrita finito) embora vc possa colocar uma
"tabela" de índice em RAM. Embedded BD? Nem pensar, não cabe sistema
atual e não temos tempo e orçamento pra desenvolver um hardware novo
do zero.
Uma agenda? Bem, é legal. Quando comecei, lá no Visual Basic 4 (não,
eu não me orgulho disso), foi a primeira aplicação "mais séria" que
fiz. Infelizmente não vejo uma aplicação necessárias de E.D., que não
possa ser implementada usando alguma biblioteca pronta pra esse
exemplo.

Boa sorte com os estudos, o seu questionamento é bastante corajoso
(muitos tem medo de perguntar "pra quê vou usar isso?") e tem
fundamento

2010/9/26 Fabiano Vasconcelos <fvasco...@gmail.com>:


> Em 26-09-2010 17:55, José Luis Segatto Junior escreveu:
>>
>> Eu confesso que não li todos os emails desse tópico, então se alguém
>> já disse alguma coisa parecida peço que me perdoem.
>>

>> Assim, muitas vezes eu não consigo "engolir" uma solução sem ter um


>> problema pra ela. Talvez seja esse o seu caso.
>> Lembro que quando fiz E.D. na faculdade, de 70 pessoas matriculadas

>> apenas 9 tiraram nota média ou maior. Eu lembro que um dos pontos


>> falhos do professor (IMHO) era a falta de exemplos.

>> De repente compensa começar a fazer alguns programinhas por conta e ir
>> entendendo o quê e onde se aplica melhor. Os conceitos acabam ficando
>> triviais com isso.
>>
>> Abraço
>>
>> zé


>>
>>
>
> Cara, tava esperando chegar no teu e-mail pra responder.

> Pois é, eu resolvi exatamente criar um problema pra mim. Estou implementando


> uma agenda de contatos em C, ASCII mesmo, modo console. Nesta agenda eu

> pretendo reunir o máximo de tópicos de C, ou seja, testar tudo que eu
> aprendi - ou penso que aprendi - na leitura do livro. Afinal, só exercitando


> a gente consegue aprender de verdade.

> Quando eu postei essa thread, tinha a esperança de que a maioria iria me
> falar: "Fabiano, tu não precisa mais aprender isso não! São conceitos
> ultrapassados e que agora você já pode pegar tudo prontinho com a postgresql
> - por exemplo". Mas estranhamente isso não aconteceu. Ainda estou por saber


> porque apenas 2 pessoas tiveram coragem de mencionar coisa parecida. O resto
> disse que eu tinha mais era que meter a cara no livro e ir aprender.

> Alguém aqui deve estar me achando um preguiçoso, mas, se existe aqui algum
> engenheiro, sabe que o princípio da engenharia é fazer o trabalho, no menor
> espaço de tempo possível e gastando o mínimo de energia. Se me disserem
> algum argumento que me prove que eu preciso realmente aprender porque será
> indispensavelmente necessário, eu aprenderei com mais afinco e gosto. Se for
> só pra dizer que eu sou um programador "completo" e na prática isso não me
> servir nunca, até aprenderei, mas não será prioridade. Será segundo plano.
>
> Obrigado pela opinião! :)
>>
>> 2010/9/26 DQ<d.qu...@yahoo.com>:
>>
>>>
>>> Fabiano,
>>>
>>> Eu não diria que são "beem difíceis", tem coisa muito pior...
>>>
>>> Como já disseram os colegas, estas estruturas, suas implementações e
>>> os algorítimos envolvidos fazem parte da base da programação. Eu


>>> lembro de ter aprendido estas coisas* no primeiro volume de The Art of
>>> Computer Programming, que chama justamente "Fundamental

>>> Algorithms" (não recomendo você a começar por este livro, pois é bem
>>> "pesado" na parte teórica).
>>>

>>> Por último, um pequeno "comercial": no meu blog (http://
>>> dqsoft.blogspot.com) eu tenho alguns artigos introdutórios sobre
>>> pilhas, filas, listas ligadas e ordenação. Quem sabe ajuda um pouco.
>>>
>>> Daniel
>>>


>>> * Ordenação é no terceiro volume. Os algorítmos são muito

>>> interessantes, mas a análise teórica não é simples.


>>>
>>>
>>> On Sep 24, 11:18 am, Fabiano Vasconcelos<fvasconce...@gmail.com>
>>> wrote:
>>>
>>>>
>>>> Ol , povo da lista!
>>>>
>>>> s impress o minha, ou os assuntos mencionados no t tulo deste e-mail
>>>> s o beeem dif ceis de se absorver? Eu achei de uma dificuldade maior que
>>>> os outros assuntos. Algu m teve a mesma impress o?
>>>> de extrema relev ncia que se aprenda logo esses assuntos, antes de
>>>> pegar projetos?
>>>> Algu m aqui programa profissionalmente e ainda n o conseguiu absorver
>>>> tais assuntos?
>>>> Algu m aqui programa profissionalmente, domina os assuntos, mas teve
>>>> problemas com eles no in cio?
>>>>
>>>> Espero opini es! ;)
>>>>
>>>> Grande abra o a todos! :D
>>>>
>>>
>>> --
>>> Antes de enviar um e-mail para o grupo leia:
>>>                     http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
>>>
>>> --~--~---------~--~----~---------------------------------~----------~--~----~

>>> [&] Colabore com a Pesquisa de Preferência de Conteúdo


>>>              para Eventos do Grupo C&  C++ Brasil:
>>>                        http://www.surveymonkey.com/s/GBBGTXN
>>>
>>> ------~----~-------~---~---~---~---~----------------~------------~---------~
>>> [&] C&  C++ Brasil - http://www.ccppbrasil.org/
>>> Para sair dessa lista, envie um e-mail para
>>> ccppbrasil-...@googlegroups.com

>>> Para mais opções, visite http://groups.google.com/group/ccppbrasil


>>> --~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
>>> Emprego&  carreira:  vag...@ccppbrasil.org
>>> http://groups.google.com/group/dev-guys?hl=en
>>>
>>>
>>
>>
>

> --
> Antes de enviar um e-mail para o grupo leia:
> http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
> --~--~---------~--~----~---------------------------------~----------~--~----~

> [&] Colabore com a Pesquisa de Preferência de Conteúdo              para

> Eventos do Grupo C & C++ Brasil:
>                       http://www.surveymonkey.com/s/GBBGTXN
> ------~----~-------~---~---~---~---~----------------~------------~---------~
> [&] C & C++ Brasil - http://www.ccppbrasil.org/


> Para sair dessa lista, envie um e-mail para
> ccppbrasil-...@googlegroups.com

Eric Chiesse

unread,
Sep 27, 2010, 11:54:53 AM9/27/10
to ccppb...@googlegroups.com
Fabiano,

Por que você não aceita o conselho que o pessoal está te dando desde o início da thread ? Estude com afinco as estruturas de dados. Estude com afinco como usar ponteiros e estruturas. Entenda bem sobre escopo de variáveis e armazenamento (stack, heap, static).

Cara é natural que você obtenha as respostas que tem obtido porque há muito tempo o pessoal tá dizendo que isso é básico e você quer pular essa etapa agora.
Vou te adiantar: Você vai perder mais tempo se não aprender isso de uma vez.

Na sua vida de desenvolvedor acostume-se com a expressão: "There's no silver bullet". Quer dizer que tudo pra ser bem feito exige disciplina, estudo e empenho.

Minha opinião é: Você não vai muito longe em C/C++ se não encarar esse estudo agora. Ponteiros são chatos no início mas são a essência de C/C++. Não aprender é como comer feijoada sem carne. E no final vc vai descobrir que eles são fáceis de usar, basta acostumar-se com eles.

Em relação aos algoritmos vc pode estudá-los em qualquer linguagem. Mas se você escolheu C/C++ então comece do começo. Aprenda as estruturas e depois sim como operar sobre elas. Pra construir o segundo andar vc precisa do primeiro, e antes de tudo precisa das fundações, preparar a rede de esgoto, de água, etc. Antes de ver um prédio subindo tem muito trabalho chato e invisível, mas tb indispensável. No nosso caso não é diferente.

Se quiser continuar postergando esse estudo, na boa cara, acho que vc não tem o direito de reclamar das respostas que obtiver.

Pra finalizar cuidado com a expressão "reinventar a roda". Muitas vezes quem te diz isso quer te vender uma.

Saudações.

---
Eric
www.twitter.com/echiesse
br.linkedin.com/in/echiesse



--
Antes de enviar um e-mail para o grupo leia:

Fabiano Vasconcelos

unread,
Sep 27, 2010, 12:39:28 PM9/27/10
to ccppb...@googlegroups.com
Em 27-09-2010 11:14, Jos� Luis Segatto Junior escreveu:
> Qualquer coisa que eu escrever aqui � praticamente desnecess�ria

> diante do email do Daniel Quadros que, como na palestra do Portal
> Embarcados do ano passado, uniu pr�tica e did�tica com maestria.
> Mas, refor�ando alguns pontos: sistemas embarcados s�o "A Aplica��o"
> para pilhas, filas, listas, arvores... Imagine voc� ter que encontrar

> um registro com identificador de 4 bytes em uma lista com 10000
> registros, num processador de 12MHz, em menos de 1 segundo. Imagine
> tamb�m que h� restri��es de escrita, afinal os registros ficam em

> flash (que tem ciclos de escrita finito) embora vc possa colocar uma
> "tabela" de �ndice em RAM. Embedded BD? Nem pensar, n�o cabe sistema
> atual e n�o temos tempo e or�amento pra desenvolver um hardware novo
> do zero.
> Uma agenda? Bem, � legal. Quando comecei, l� no Visual Basic 4 (n�o,
> eu n�o me orgulho disso), foi a primeira aplica��o "mais s�ria" que
> fiz. Infelizmente n�o vejo uma aplica��o necess�rias de E.D., que n�o

> possa ser implementada usando alguma biblioteca pronta pra esse
> exemplo.
>
> Boa sorte com os estudos, o seu questionamento � bastante corajoso
> (muitos tem medo de perguntar "pra qu� vou usar isso?") e tem
> fundamento
>
>
Redondo engano seu, Segatto! :)
Muito oportuna a sua ilustra��o. Voc� colocou em termos pr�ticos o que o
professor Daniel Quadros explicou bel�ssimamente na teoria! Foi uma
intromiss�o de muito bom gosto e de alto n�vel. Uma coisa � dizer:
aprenda porque tem que aprender e pronto. Outra coisa � dizer: olha, tem
que aprender por isso, isso, isso e aquilo e o teu exemplo caiu como uma
luva. Depois dessa eu estou convicto da REAL necessidade de aprender
sobre o tema.

Grande abra�o e boa semana. ;)
> z�
>
> 2010/9/26 Fabiano Vasconcelos<fvasco...@gmail.com>:
>

>> Em 26-09-2010 17:55, Jos� Luis Segatto Junior escreveu:
>>
>>> Eu confesso que n�o li todos os emails desse t�pico, ent�o se algu�m
>>> j� disse alguma coisa parecida pe�o que me perdoem.
>>>

>>> Assim, muitas vezes eu n�o consigo "engolir" uma solu��o sem ter um


>>> problema pra ela. Talvez seja esse o seu caso.
>>> Lembro que quando fiz E.D. na faculdade, de 70 pessoas matriculadas

>>> apenas 9 tiraram nota m�dia ou maior. Eu lembro que um dos pontos


>>> falhos do professor (IMHO) era a falta de exemplos.

>>> De repente compensa come�ar a fazer alguns programinhas por conta e ir
>>> entendendo o qu� e onde se aplica melhor. Os conceitos acabam ficando
>>> triviais com isso.
>>>
>>> Abra�o
>>>
>>> z�


>>>
>>>
>>>
>> Cara, tava esperando chegar no teu e-mail pra responder.

>> Pois �, eu resolvi exatamente criar um problema pra mim. Estou implementando


>> uma agenda de contatos em C, ASCII mesmo, modo console. Nesta agenda eu

>> pretendo reunir o m�ximo de t�picos de C, ou seja, testar tudo que eu
>> aprendi - ou penso que aprendi - na leitura do livro. Afinal, s� exercitando


>> a gente consegue aprender de verdade.

>> Quando eu postei essa thread, tinha a esperan�a de que a maioria iria me
>> falar: "Fabiano, tu n�o precisa mais aprender isso n�o! S�o conceitos
>> ultrapassados e que agora voc� j� pode pegar tudo prontinho com a postgresql
>> - por exemplo". Mas estranhamente isso n�o aconteceu. Ainda estou por saber


>> porque apenas 2 pessoas tiveram coragem de mencionar coisa parecida. O resto
>> disse que eu tinha mais era que meter a cara no livro e ir aprender.

>> Algu�m aqui deve estar me achando um pregui�oso, mas, se existe aqui algum
>> engenheiro, sabe que o princ�pio da engenharia � fazer o trabalho, no menor
>> espa�o de tempo poss�vel e gastando o m�nimo de energia. Se me disserem
>> algum argumento que me prove que eu preciso realmente aprender porque ser�
>> indispensavelmente necess�rio, eu aprenderei com mais afinco e gosto. Se for


>> s� pra dizer que eu sou um programador "completo" e na pr�tica isso n�o me
>> servir nunca, at� aprenderei, mas n�o ser� prioridade. Ser� segundo plano.
>>

>> Obrigado pela opini�o! :)
>>
>>> 2010/9/26 DQ<d.qu...@yahoo.com>:
>>>
>>>
>>>> Fabiano,
>>>>


>>>> Eu n�o diria que s�o "beem dif�ceis", tem coisa muito pior...
>>>>
>>>> Como j� disseram os colegas, estas estruturas, suas implementa��es e

>>>> os algor�timos envolvidos fazem parte da base da programa��o. Eu


>>>> lembro de ter aprendido estas coisas* no primeiro volume de The Art of
>>>> Computer Programming, que chama justamente "Fundamental

>>>> Algorithms" (n�o recomendo voc� a come�ar por este livro, pois � bem
>>>> "pesado" na parte te�rica).
>>>>

>>>> Por �ltimo, um pequeno "comercial": no meu blog (http://
>>>> dqsoft.blogspot.com) eu tenho alguns artigos introdut�rios sobre
>>>> pilhas, filas, listas ligadas e ordena��o. Quem sabe ajuda um pouco.
>>>>
>>>> Daniel
>>>>


>>>> * Ordena��o � no terceiro volume. Os algor�tmos s�o muito

>>>> interessantes, mas a an�lise te�rica n�o � simples.

Fabiano Vasconcelos

unread,
Sep 27, 2010, 1:03:01 PM9/27/10
to ccppb...@googlegroups.com
Olá, Eric! :)

Home, eu não ia mais responder sobre esse tema, mas vou encerrar a minha participação aqui nessa thread te respondendo. Depois vou passar pra minha outra thread ativa. :)
Eu, em momento nenhum, disse que não iria aprender sobre ordenação, pilhas, filas, listas encadeadas e árvores binárias. Pelo contrário: assim que você me disse: "Estude pilhas e filas" eu fui correndo ler a respeito. Lembra do conselho?
As únicas coisas que eu queria saber desde o início da thread eram:

* pra que serve, se já existem BDs prontos (me foi respondida a dúvida e bem respondida)
* qual o nível de relevância do assunto, porque eu posso deixar pra aprender isso em outro momento, com a cabeça mais fria, quando chegar a hora de implementá-lo no meu projeto (e essa hora vai chegar, pode esperar dúvidas)

Cada vez que eu paro pra responder coisas desse tipo, eu me atraso nos estudos, entende? A galera filosofa demais. "Aí, porque num sei o que, num sei o que...", na boa, entende? Eu tô falando assim sem stress... Tipo: como eu respondi pro amigo Zé: "tua resposta foi objetiva. A tua e a do Daniel" e a thread poderia ter sido resumida em apenas aqueles dois tópicos, saca? Mas aí vem um monte de gente, fala um monte de coisa, estica a conversa e a produtividade vai pro espaço, velhinho. :(


"Na sua vida de desenvolvedor acostume-se com a expressão: 'There's no silver bullet'. Quer dizer que tudo pra ser bem feito exige disciplina, estudo e empenho."

Concordo e em C/C++ pior ainda! Mas uma coisa que eu não vou deixar de fazer é questionar. Nunca.


"Se quiser continuar postergando esse estudo, na boa cara, acho que vc não tem o direito de reclamar das respostas que obtiver."

Eu mesmo tento parar, mas vem outro e posta algo. Eu não tenho coragem de deixar você sem resposta. Quanto as outras respostas, eu estou convencido que programação é religião. Tem gente que não gosta de que questionem certos dogmas sagrados.
Bem, por mim esta thread está encerrada. Não vou mais postar nela. Espero que tenha me feito entender.

Boa semana! :]

Cristiano Carvalho

unread,
Sep 27, 2010, 1:35:54 PM9/27/10
to ccppb...@googlegroups.com
Concordo com o Echiesse!

--
Cristiano Carvalho
Engenheiro Computacional

Andreh Poffo

unread,
Sep 27, 2010, 9:48:48 PM9/27/10
to ccppb...@googlegroups.com
Permitam-me entrar na conversa.

Há na empresa onde trabalho um programador Delphi.
Como os projetos em Delphi estão sendo descontinuados, ele foi encorajado a aprender C++, que é a principal linguagem da empresa, juntamente com a biblioteca MFC
Porém, ao realizar exercícios básicos da linguagem, deparou-se com a utilização de uma matriz de char ou seja char[ ][ ]...
No exercício, acerca de ponteiros, pede para que ele implemente um array de nomes, e isso tecnicamente traduz um array de char[ ], no caso ele teria que implementar dinâmicamente.
Sabemos que não é tão fácil para iniciantes na linguagem.

Vendo o colega se debater com o problema um outro colega de trabalho o aconselha a aprender a famosa MFC CString e implementar um array de CString.
Sendo que, CString ainda não foi ensinado, creio que nem objetos são usados nestes exercícios básicos. Porém o programador aprendiz sabe o que é.

De fato seria muito mais fácil. Mas eu o aconselhei a continuar tentando a matriz de char, e ainda repassei o e-mail do nosso amigo Eric Chiesse. Que concordei com precisão.

Fica a minha indagação a vocês: O que de fato seria o certo? Esquecer os char** e utilizar CString ou quebrar a cabeça com eles?

Adriano dos Santos Fernandes

unread,
Sep 28, 2010, 8:29:11 AM9/28/10
to ccppb...@googlegroups.com
On 27/09/2010 22:48, Andreh Poffo wrote:
> Permitam-me entrar na conversa.
>
> H� na empresa onde trabalho um programador Delphi.
> Como os projetos em Delphi est�o sendo descontinuados, ele foi
> encorajado a aprender C++, que � a principal linguagem da empresa,
> juntamente com a biblioteca MFC
> Por�m, *ao realizar exerc�cios b�sicos da linguagem, deparou-se com a
> utiliza��o de uma matriz de char ou seja char[ ][ ]...*
> No exerc�cio, acerca de ponteiros, pede para que ele implemente um
> array de nomes, e isso tecnicamente traduz um array de char[ ], no
> caso ele teria que implementar din�micamente.
> Sabemos que n�o � t�o f�cil para iniciantes na linguagem.

>
> Vendo o colega se debater com o problema um outro colega de trabalho o
> aconselha a aprender a famosa MFC CString e implementar um array de
> CString.
> Sendo que, CString ainda n�o foi ensinado, creio que nem objetos s�o
> usados nestes exerc�cios b�sicos. Por�m o programador aprendiz sabe o
> que �.
>
> De fato seria muito mais f�cil. Mas eu o aconselhei a continuar
> tentando a matriz de char, e ainda repassei o e-mail do nosso amigo
> Eric Chiesse. Que concordei com precis�o.
>
> Fica a minha indaga��o a voc�s: O que de fato seria o certo? *Esquecer
> os char** e utilizar CString ou quebrar a cabe�a com eles?*
>
>
Talvez seja melhor falar para o programador Delphi voltar ao Delphi e
aprender primeiro a parte da linguagem que ele n�o sabe, pois ponteiros
e null-terminated strings tamb�m fazem parte do Delphi.


Adriano

Thiago Adams

unread,
Sep 28, 2010, 8:43:12 AM9/28/10
to ccppbrasil

> Fica a minha indagação a vocês: O que de fato seria o certo? *Esquecer os
> char** e utilizar CString ou quebrar a cabeça com eles?*

Correto talvez não seja a melhor palavra. O melhor do ponto de vista
de clareza e segurança é usar uma abstração para o tipo de dado
string. Ou seja, usar uma classe.

Porém no C/C++ é importante entender estes conceitos de memória e
ponteiro, que no geral não são abstrações para resolver problemas, mas
são abstrações para conversar com diferentes hardwares da mesma forma.
Isso basicamente resume o C.


Então quando um iniciante está se quebrando com ponteiros e char* é
válido como aprendizado em programas de aprendizado.
Profissionalmente, mesmo que correto, um código cheio de ponteiros não
passaria na revisão a não ser que ele fosse necessário (alguma
problema de performance por exemplo).

Quando você declara:

char s[80];

Você disse:
Tenho 80 bytes na memória e o início é o endereço de s.
-Você não tem uma string-

Você vai tratar e interpretar aquela memória como uma string, se
colocar caracteres ansi e um terminador zero. Será preciso disciplina
para manter este comportamento verificar limites etc..

Quando você declara

std::string s;

Você abstraiu e removeu o conceito de memória e isso é o que na
maioria dos casos se deseja. É este o domínio do problema por exemplo
para representar uma "ficha" com nome e endereço de uma pessoa.

Pedro d'Aquino

unread,
Sep 28, 2010, 8:53:21 AM9/28/10
to ccppb...@googlegroups.com
> Fica a minha indagação a vocês: O que de fato seria o certo? *Esquecer os
> char** e utilizar CString ou quebrar a cabeça com eles?*

Aprender char** agora e usar std::vector<std::string> em código de produção.

2010/9/28 Thiago Adams <thiago...@gmail.com>

Gianni Rossi

unread,
Sep 28, 2010, 9:04:56 AM9/28/10
to ccppb...@googlegroups.com
FYI: Não quero discordar como ninguém, só complementar: eu estou fazendo um app em Android neste exato momento que fiquei espantado ao ver que ao fazer algo em Java ficava muito mais lento do que eu estou acostumado em C++. Fiquei chocado e horrorizado ao ver isso. Mas tudo bem, tenho o NDK do Android que permite compilar C e C++. Só que, este NDK, não possuí a STL. Tem uns boatos da uSTL e STLPort... logo, eu estou fazendo um código em C++ que vai para produção num app que vai ter centenas de milhares de usuários e vai usar char** para array de strings.

Moral da história: não é preciso ir muito longe para ver que é preciso conhecer *as duas* formas de se trabalhar.

Stephen Eilert

unread,
Sep 28, 2010, 9:34:43 AM9/28/10
to ccppb...@googlegroups.com
2010/9/28 Gianni Rossi <nasus....@gmail.com>:

> FYI: Não quero discordar como ninguém, só complementar: eu estou fazendo um app em Android neste exato momento que fiquei espantado ao ver que ao fazer algo em Java ficava muito mais lento do que eu estou acostumado em C++.

http://www.liquidpoker.net/user_pictures/ce00f.ORLY_Mexican.jpg

Thiago Adams

unread,
Sep 28, 2010, 9:51:00 AM9/28/10
to ccppbrasil
> FYI: Não quero discordar como ninguém, só complementar: eu estou fazendo um app em Android neste exato momento que fiquei espantado ao ver que ao fazer algo em Java ficava muito mais lento do que eu estou acostumado em C++.  Fiquei chocado e horrorizado ao ver isso.  Mas tudo bem, tenho o NDK do Android que permite compilar C e C++.  Só que, este NDK, não possuí a STL.  Tem uns boatos da uSTL e STLPort... logo, eu estou fazendo um código em C++ que vai para produção num app que vai ter centenas de milhares de usuários e vai usar char** para array de strings.
>
> Moral da história: não é preciso ir muito longe para ver que é preciso conhecer *as duas* formas de se trabalhar.

Você não tem STL, mas se tiver C++ , classes , templates, você mesmo
pode criar uma abstração tão eficiente quanto usar um char** sem
necessariamente ler "ponteiro de ponteiro de char" e sim ler "array de
string" se for este o objetivo.
Essa é a beleza do C++, abstração com eficiência.

Gianni Rossi

unread,
Sep 28, 2010, 10:02:42 AM9/28/10
to ccppb...@googlegroups.com

Verdade, mas para criar essa abstração eficiente, eu precisava conhecer ponteiros na sua forma mais crua. Tenho sim já classes string, list, vector e map neste código, e criar-los, precisei saber muito mais de que o que foi mencionado aqui; precisei saber como fazer muito copy-paste! :-)

Mas na verdade devo fazer uma confissão. O motivo original para usar o NDK não foi performance; isso apareceu agora que o app está indo para produção. O motivo original para usar o NDK é, ironicamente, portabilidade. Em termos de mobile, C/C++ é praticamente a única opção se se quer portabilidade. Ele roda em Symbian, iOS, Android e Bada, que são os SOs para os quais tenho demandas. Isso é meio off, mas não muito. Só mostra como é importante conhecer C/C++. Aliás, vale mais para C que C++, pois NENHUMA linguagem é mais portável que C.

Virgilio Fornazin

unread,
Sep 28, 2010, 9:35:42 AM9/28/10
to ccppb...@googlegroups.com
Me lembrou ano 2000, 2001 no Windows CE 1.0, onde vc não tinha condições de usar o
'famoso' CString (chegava a dar diferença de 20x em performance do que usar o char/wchar_t *,
devido ao péssimo compilador C++, além da implementação da MFC da época).


E tinham vários sistemas em produção, e usar C (não C++) e Macros para implementar arvores
RBTree, Linked Lists, Tuplas, e outras estruturas era coisa do dia a dia.

A STL nativa se não me engano só passou a funcionar razoavelmente bem no Windows CE 4.x.
Não adianta querer usar o supra sumo do C++, e só aprender ele, pois o dia em que você tiver restrições
para desenvolver aplicativos do tipo dessa que eu e o Gianni falou, você não vai sair no lugar.
E tenha em mente que isso é muito normal hoje em dia, mais do que você imagina.

Imagino que você tenha que ler também algum livro a respeito de algoritmos e técnicas de desenvolvimento
(encapsulamento, reutilização de código, etc), para complementar o seu aprendizado, assim você não vai
ficar patinando em coisas triviais para a maioria das pessoas aqui. De nada vale aprender C / C++ se não tiver
um bom fundamento.


2010/9/28 Gianni Rossi <nasus....@gmail.com>

Marcio Gil

unread,
Sep 28, 2010, 10:23:45 AM9/28/10
to ccppbrasil
On 26 set, 22:50, Fabiano Vasconcelos <fvasconce...@gmail.com> wrote:
> Algu m aqui deve estar me achando um pregui oso, mas, se existe aqui
> algum engenheiro, sabe que o princ pio da engenharia fazer o trabalho,
> no menor espa o de tempo poss vel e gastando o m nimo de energia. Se me
> disserem algum argumento que me prove que eu preciso realmente aprender
> porque ser indispensavelmente necess rio, eu aprenderei com mais afinco
> e gosto. Se for s pra dizer que eu sou um programador "completo" e na
> pr tica isso n o me servir nunca, at aprenderei, mas n o ser
> prioridade. Ser segundo plano.
>

Imagine só se na época em que fazia o 1º e 2º graus eu tivesse
dispensado a matemática por achar que nada daquilo era útil ou
"prioritário"? Certamente não teria ido muito longe na programação.
Provavelmente eu seria digitador ou então trabalharia em alguma obra
como peão ou ainda teria me mudado para a roça plantar beterraba :-)

Pergunta: seu professor de matemática lhe deu algum argumento
irrefutável de que aquilo tudo seria útil? Se seu professor tivesse
sido Euclides ele teria lhe dado uma moeda e o mandado para casa ;-)

Eric Chiesse

unread,
Sep 28, 2010, 10:48:48 AM9/28/10
to ccppb...@googlegroups.com
É difícil falar em termos de certo e errado.

Mas se a questão é aprender eu recomendaria as estruturas básicas primeiro e depois aprender soluções prontas.

Há casos em que somos obrigados a usar soluções prontas sem entender bem como funcionam (normalmente o pessoal chama isso de GO HORSE).

Eu acho que o melhor é usar aquilo que foi bem entendido pois a STL, BOOST, MFC, etc, dão um ganho significativo de produtividade quando você sabe usar. Mas se não dominar o básico (ponteiros, memória, escopo, estruturas de dados, ...) vc vai travar no primeiro erro de compilação.

Além disso imagina que vc tenha uma penalidade de performance numa dessas estruturas prontas. Vc vai eventualmente ter que fazer a sua. Vai ter que "reinventar a roda". E isso é normal, como mostram vários depoimentos dos colegas aqui.

"Reinventar a roda" não é feio. A gente só tem que ter o conhecimento suficiente para saber quando fazer e quando não fazer e ser pragmático.

---
Eric
www.twitter.com/echiesse
br.linkedin.com/in/echiesse

Stephen Eilert

unread,
Sep 28, 2010, 10:52:38 AM9/28/10
to ccppb...@googlegroups.com
2010/9/28 Eric Chiesse <echi...@gmail.com>:

> É difícil falar em termos de certo e errado.
>
> Mas se a questão é aprender eu recomendaria as estruturas básicas primeiro e
> depois aprender soluções prontas.
>
> Há casos em que somos obrigados a usar soluções prontas sem entender bem
> como funcionam (normalmente o pessoal chama isso de GO HORSE).
>
> Eu acho que o melhor é usar aquilo que foi bem entendido pois a STL, BOOST,
> MFC, etc, dão um ganho significativo de produtividade quando você sabe usar.
> Mas se não dominar o básico (ponteiros, memória, escopo, estruturas de
> dados, ...) vc vai travar no primeiro erro de compilação.
>
> Além disso imagina que vc tenha uma penalidade de performance numa dessas
> estruturas prontas. Vc vai eventualmente ter que fazer a sua. Vai ter que
> "reinventar a roda". E isso é normal, como mostram vários depoimentos dos
> colegas aqui.
>
> "Reinventar a roda" não é feio. A gente só tem que ter o conhecimento
> suficiente para saber quando fazer e quando não fazer e ser pragmático.
>

Não sei como ninguém mencionou isso antes, mas aí vai:
http://www.joelonsoftware.com/articles/LeakyAbstractions.html

Reply all
Reply to author
Forward
0 new messages