C ou C++

13. Re: C ou C++

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 27/09/2008 - 11:47h

Pedro Rafael, permita que eu também dê o meu palpite.

Embora tenha programado em vários dialetos de Assembly, Pascal, em vários dialetos de Basic, em Cobol, etc. todavia não sou programador C ou C++.

Dito isto, devo acrescentar que não existe linguagem de programação "melhor" que outra, e sim "mais adequada" para esta ou aquela finalidades.

Quando se vai programar alguma coisa, deve-se ter em mente o repertório de restrições com que temos de lidar. Definido esse repertório, então, de posse do conhecimento necessário das características de cada uma das linguagens disponíveis, então definiremos qual delas iremos utilizar.

Existem versões de Basic (por exemplo) que nos permitem desenvolver até mesmo ótimos aplicativos comerciais. Em outras, somente jogos, em outras ainda, somente joguinhos ou programinhas de entretenimento. Em outras, contempla-se um foco em objeto e/ou eventos.

C++ é inegavelmente uma evolução de C (e até mesmo poderíamos dizer que C seria uma "evolução" do Assembly, de uma certa forma) mas isso não significa rigorosamente que, apenas por ser uma evolução, seja necessariamente melhor.
Windows ME é uma suposta evolução dos anteriores, mas é um tremendo abacaxi (Windows não é uma linguagem, mas é somente para comparação. Isso não precisaria ser dito, mas por via das dúvidas...)

A restrição principal com a qual você tem de lidar é que tem de escolher entre uma linguagem e outra.

Seu professor não está exigindo nenhuma delas em especial, então a resposta está com você mesmo!

Se você pretende tornar-se um programador, e tiver tempo para isso, estude as duas. Se não tem tempo agora, dedique-se a uma delas, e depois quando tiver esse tempo, estude outras linguagens.

Não é bom para um programador ficar limitado a uma linguagem de programação, pois isso distorce a sua ótica das coisas, enxergando tudo sempre sob o mesmo prisma.

Se você já tem alguma orientação em C, e se sente à vontade, nada o impede de usá-la para seus trabalhos de matemática. E você ganhará tempo.
Acho até que nesse caso específico será um pouco melhor que C++, pois algumas de suas características "modernas" serão até mesmo supérfluas e portanto dispensáveis para o seu propósito neste exato momento.

Tomo a liberdade de sugerir a você e a todos os colegas que procurem conhecer (pelo menos medianamente) umas três linguagens de programação diferentes.
Isso aumenta grandemente a produtividade.

Boa sorte!




  


14. Re: C ou C++

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 27/09/2008 - 12:59h

ratificando o que os colegas HPedro e Teixeira disseram sobre C++ ser ou não uma evolução do C, gostaria de acrescentar mais um aspecto, talvez até meio filosófico:
não enxergue a a palvra "evolução" sob o ponto de vista darwiniano, como naquele desenho famoso do macaco que vai virando homo sapiens. pense em evolução como adição de recursos e soluções de problemas específicos (mas não todos).
desse modo, cabe aqui a velha máxima de que "cada caso é um caso". o importante no domínio de uma linguagem não está apenas na semântica, ou o que chamam de "conhecer os comandos", mas sim em saber tirar proveito do que está escondido por trás, independente da construção léxica e sintática (que é o lado humano da coisa), pois para a máquina nada disso importará. nós temos a mais complexa e absoluta das máquinas dentro de nossas cabeças, então cabe a nós usarmos aquela máquina escrava e infinitamente inferior, feita de silício, da maneira que nos aprouver, e não o contrário. tem sido assim desde sempre e, agora sim, pelo pensamento darwiniano, foi através do domínio e do uso racional de ferramentas que o velho macaco se transformou em homem.


15. Re: C ou C++

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 27/09/2008 - 16:50h

Só um detalhe: Wikipedia confiável??? Não se prenda a Internet mocinho... Faz mal. Agora, de onde eu tirei essa informação acredito que seja bem mais confiável que a Wikipedia.(Sebesta). Bom, não conhece Sebesta, é um excelente autor....
Mas em relação a linguagens, faz bem esta discurssão. E também acredito que não exista uma melhor linguagem, e sim uma que se adapta melhor a determinado problema.

Abraços


16. Re: C ou C++

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 27/09/2008 - 17:10h

realmente, confiar cegamente na wikipedia... tsc tsc...
http://www1.folha.uol.com.br/folha/informatica/ult124u21947.shtml

e aqui, um exemplo de como isso afeta o conhecimento de modo geral:
http://papelnovaso.wordpress.com/2007/02/20/por-que-o-wikipedia-dificultou-a-vida-dos-professores


17. Re: C ou C++

Pedro Rafael
Pedro Rafael

(usa Fedora)

Enviado em 27/09/2008 - 19:12h

Bem pessoal o tópico ainda vou deixar aberto porque estou aprendendo muito com vc, ou seja, agradeço pelas dicas....


18. Re: C ou C++

Pedro Rafael
Pedro Rafael

(usa Fedora)

Enviado em 27/09/2008 - 19:36h

Caro mslomp, eu sou estudante do bacharelado em estatística pela Universidade Federal da Paraíba e preciso muito de uma linguagem para manipular banco de dados gigantescos. Até um tempo atrás estava trabalhando em um projeto de estatística onde estava trabalhando com cada município brasileiro que são mais de 5 mil. Em cada municípios desses 5 mil eu tinha que fazer um estudo do dengue, ou seja, eu tinha informações de dengue nesses municípios. Eu estava trabalhando com dados de 6 anos. Ou seja, veja a magnitude de informações que tenho.

Cada município tem X casos de dengue em um mês. Estou com cada mês de 6 anos, veja que o número de informações almente de forma violenta.

Porque estou falando isso??? Reposta.: Estou em busca de uma linguagem que otimize extremamente meu tempo, ou seja, que seja extremamente veloz e alem disso onde eu possa usar para meus calculos matemáticos e estatísticos. Um dia desse vi um colega meu trabalhando em C com uma matriz de 365 mil linhas e 10000 mil colunas onde ele tinha que fazer operações matemáticas pesadas como matriz de covariância com erra matriz n x m. Eu já ouvi falar de linguagens funcionais de alto nível como Haskell mais sei que em comparação com C ela é bem mais lenta apesar de me dar facilidade de trabalhar com os calculos. Sei que C é bem mais portavel, na net há bem mais matrerial pra consulta o que facilita muito minha vida. Meu professor afirma que eu tenho que sair da universidade sabendo C porque é uma lingagem muito boa. Ele afirma que C pra quem estuda matemática e pra quem quer resolver contas, paradigmas matemático é bem mais vantajoso do que C++. Ele fala que não iremos fazer sistemas operacionais, pois como sabemos C++ usa conseitos de classes e objeto o que facilita muito a vida de quem vai administrar codigos fontes enormes ou recupera-los.

Pelo o pouco que sei de C eu vejo na minha pouca experiência que uma linguagem OO pode de serta forma esconder de certa forma o que há por tras das contas (no meu caso) devido a ideia de encapsulamento, posso está falando uma besteira danada. Mais eu vejo que C eu vejo tudo o que está ocorrendo, sei que a cmpilação e leitura do codigo será da forma que escrevi tal código. Bem mais quero opinião de todos vcs ainda.....


C pedeu muito seu mérito apois o C++??? Será que ainda vai ser bastante usada por várias décadas????


abraço pessoa, valeu mesmo


19. Re: C ou C++

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 27/09/2008 - 22:51h

Quanta informação. Não acredito que C++ tenha tirado o brilho do C. Ambas tem seu brilho próprio, logo, cada uma no seu quadrada. (Clichê [*****]). Mas de acordo com seu problema, você pode tentar fazer em C e C++, depois pode ver qual mais se adequa a situação. Por isso afirmo, para que aprenda as duas.

Abraços


20. Re: C ou C++

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 28/09/2008 - 20:31h

Pedro, realmente seu caso requer um tratamento bastante criterioso, onde você precisará balancear várias coisas concorrentes, como velocidade, precisão, organização e legibilidade. entra aqui um outro aspecto importante, que é independente da linguagem: as ferramentas adicionais para o seu propósito. entram aqui as bibliotecas e apis externas. por exemplo, se você utilizar uma biblioteca que lhe forneça as funções necessárias para manipulações matemáticas e esta não estiver bem implementada (em termos de algoritmos bem bolados e otimizados), isso afetará a performance da sua aplicação. suponha que para cada elemento a[i,j] daquela matriz do seu colega, cálculos mirabolantes sejam realizados por uma ou mais funções externas mal figuradas, realizando operações redundantes ou inúteis lá no processador. tempo precioso perdido, e sobre o qual você não terá muito o que fazer. por isso, além do fator linguagem, há ainda esses fatores externos que não devem ser desconsiderados.

concordando com nosso colega f_Candido, eu não vejo que C++ tirou o brilho de C, e nem mesmo surgiu com esse propósito. C++ surgiu de necessidades específicas e veio para somar e fornecer uma nova abordagem para o uso do C, que são as idéias de classe e seus derivados, como polimorfismo, herança, etc. mas é preciso observar que a própria classe nada mais é que uma reimplementação da idéia por trás de struct (tanto que é perfeitamnte possível implementar oop em C utilizando structs). como estou abordando sua questão do ponto de vista interno das linguagens, há que se notar que nem sempre C++ fornece uma solução viável, embora possível, para algum fim em específico. por exemplo, reescrever o kernel do linux em C++ é viável e possível do ponto de vista da programação, sintaxe e etc, porém internamente o vai-e-vem de alocações, instanciações (palavra estranha, nem sei se existe... eheh), tratamentos de memória do tipo garbage collector, etc, requerido, somado ao volume total gerado em um código com milhões de linhas, tornaria o kernel uma carroça, comparando-se com nosso bom e velho kernel escrito em C e ASM. isso decorre de um aspecto crucial, que nem sempre é lembrado (ou sabido) por grande parte dos programadores e que citei em um post anterior, porém com outras palavras: é preciso observar cada linguagem sob 2 aspectos - a linguagem em si e o modo como a linguagem será transformada em linguagem que a máquina irá entender (vide o exemplo que citei em meu 1º post). o resultado será o mesmo, porém obtido de formas distintas. é o equivalente a dizer: "programarei em C" ou "irei programar em C" - a frase teve o mesmo efeito, porém dita de modos diferentes.

me mantenho isento quanto à sua adoção de uma ou outra linguagem, porém talvez seja melhor nesse momento, já que seu tempo é escasso, aproveitar seu prévio conhecimento em C e ir desenvolvendo sua aplicação em C mesmo, tanto pela parte técnica da coisa quanto pelo aprendizado que irá lhe proporcionar. a partir de então tente, nem que seja apenas "for fun", portá-la para C++. programar em C++ de certa forma já implica estar programando em C, porém com algumas features a mais que facilitam a vida. se souber bem C, saberá onde e porque C++ facilita sua vida. se partir direto para C++, saberá que facilita a vida mas não o porquê. mais tarde, sem compromisso e se assim desejar, estude também sobre linguagens montadoras (assembly) - isso com certeza irá lhe proporcionar uma nova visão sobre a relação entre o lado de cá (linguagem humana) e o lado de lá (linguagem da máquina), e de que modo cada uma interfere na outra, em ambos os sentidos.

bem, depois de mais esse discurso, aproveito para deixar uma dica interessante para seu trabalho: pesquise sobre o uso de funções inline para trechos críticos e repetitivos de código.
outra: caso esteja em busca de uma biblioteca para manipulação matemática, tente a GNU Scientific Library (gsl). uma das vantagens é que por ser free software, você poderá compilá-la otimizada para sua máquina, e isso a tornará mais eficiente como ferramenta externa, conforme discutido no início desse post.
você pode obter a gsl em:
http://www.gnu.org/software/gsl


21. Re: C ou C++

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 28/09/2008 - 20:52h

Vejo o caso da seguinte forma:

Quando se precisa manipular uma quantidade de dados gigantesca, tem-se de ter cuidado para que os elementos da linguagem tenham uma chance mínima de interferir na consistência desses dados.

Vemos na prática que as linguagens de alto nivel aumentam bastante a produtividade do programador durante a fase de elaboração, porém introduzem algum retardo na fase de execução. Esse retardo pode ser imperceptível quando a massa de dados tiver ainda um tamanho razoável, porém tende a aumentar de forma diretamente proporcional ao volume dessa mesma massa, passando a ser incômodo, inseguro e até mesmo perigoso.
Qunto mais próximo da linguagem de execução (binária), melhor para o processador.
Em contrapartida, pior para o programador, pois LM ou Assembly são linguagens desgastantes, difíceis, requerem muito mais atenção e não oferecem uma boa produtividade.

C então seria a solução ideal.

Nem tanto ao mar, nem tanto à terra.
C++ possui elementos importantes e bem mais confortáveis em outras circunstâncias, mas não neste caso específico.
O código em C deixa menos "lixo" e isso é importante na velocidade e na segurança de execução.

Veja porém que a solução de todo problema depende muito da conceituação:

Uma coisa é fazer um banco de dados como um trabalho de escola.
Isso pode-se fazer em dBase, Access, Visual Basic, Clipper, etc.

Outra coisa - muito diferente - é fazer um gigantesco banco de dados que registre e processe cada um dos casos de dengue em um grande número de municípios durante o prazo de 6 anos.



22. Re: C ou C++

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 29/09/2008 - 00:51h

com a permissão do colega Teixeira, gostaria de destrinchar duas de suas afirmações:
1 - "o código em C deixa menos "lixo" e isso é importante na velocidade e na segurança de execução"
esse é um dos aspectos positivos de C que está intimamente ligado à simplicidade de sua implementação. C possui uma estrutura sintática sem firulas que, embora tente se aproximar da linguagem humana, não perde sua porção fria e maquinal. sob essa ótica é possível arriscar afirmar que sim, C está próxima do hardware, porém sem se distanciar muito do que chamamos alto nível. à medida que você aumentar a distância do hardware (e conseqüentemente diminuir a distância do alto nível), o aumento das abstrações da linguagem será tal que sua interpretação e tradução para linguagem do hardware tornar-se-á mais complexa e imprecisa. é como traduzir um texto do inglês para o português através de um software. a tradução ficará esquisita, porém inteligível a partir do contexto. contudo, compiladores e interpretadores ainda não atingiram a capacidade de guiarem-se por contexto, o que com certeza poderia eliminar um pouco do "lixo" produzido. muito se fala sobre inteligência atrificial, e ela de fato pode, deve e já está implementada em softwares, incluindo compiladores capazes de decidir os caminhos mais curtos para a execução de uma tarefa. porém, ainda que um dia ela (AI) possa atingir um estado de arte, ainda haverá uma burrice artificial nata em cada uma daquelas pastilhas de silício.

2 - "quanto mais próximo da linguagem de execução (binária), melhor para o processador"
essa afirmação está bastante ligada à idéia anterior, porém abre caminho para demonstrá-la na prática, e aqui entra a importância do nosso amigo compilador, afinal é ele quem irá traduzir nosso código humano em código de máquina. um compilador escrito de forma que não se preocupe com o "lado de lá" da coisa, produzirá códigos às vezes "idiotas" do ponto de vista racional e ótimo. e para piorar, o código gerado é estático. uma vez transformado em executável, será executado daquela forma para sempre, por mais "burro" que seja tal código. o processador apenas executará, não analisará nada e nem aprenderá com os erros. por isso, devemos dar a ele a solução o mais mastigada possível, e quem fará esse papel de "professor" é o compilador.
vou ilustrar utilizando um método de otimização chamado common subexpression elimination (cse), por ser facilmente observável.

tomemos as duas seguintes sentenças:

x = a + b + c;
y = a + c + d;

para nós, humanos, supondo a, b, c, d conhecidos, o resultado saltaria aos olhos, porém vejamos como nosso amigo processador resolveria o problema, desconsiderando qualquer otimização. utilizarei uma sintaxe assembly modo intel e sem rigores de endereçamento a fim de facilitar a visualização. os números nos comentários (após cada ; ) correspondem ao número de ciclos de máquina requeridos por cada operação.

; calcula x
mov eax,a ;1
add eax,b ;3
add eax,c ;3
mov x,eax ;1

; calcula y
mov edx,a ;1
add edx,c ;3
add edx,d ;3
mov y,edx ;1

total: 16 ciclos

ok. observando novamente as expressões, soa-nos lógico que temos uma expressão em comum em ambas (a + c)

x = a + b + c;
y = a + c + d;

podemos então criar uma outra variável temporária que conterá essa expressão comum:

z = a + c;

assim:

x = b + z;
y = z + d;

daremos agora uma colher de chá ao nosso amigo ensinando-lhe o truque através do cse e vejamos como ele resolverá o problema:

; calcula z
mov eax,a ;1
add eax,c ;3

; calcula x (z está em eax)
mov ecx,eax ;1
add ecx,b ;3
mov x,ecx ;1

; calcula y
mov edx,eax ;1
add edx,d ;3
mov y,edx ;1

total: 14 ciclos

maravilha! reduzimos o número de ciclos exigidos para a tarefa e eliminamos um pouco do lixo!
agora aumente o nível de abstração para as expressões, utilizando os métodos pirotécnicos de algumas linguagens modernas e tente eliminar o lixo... se bobear, produzirá ainda mais lixo. elas facilitam o nosso lado, mas podem tornar o lado de lá um inferno.


23. Re: C ou C++

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 29/09/2008 - 11:00h

Exatamente, mslomp!

E eu gostaria de esclarecer que ao falar em "lixo" (entre aspas) não estou me referindo a nada que seja de todo imprestável, mas que de alguma forma se torna supérfluo para a nossa finalidade em especial.

Existirão muitas rotinas que jamais acessaremos, e que ali estarão apenas ocupando espaço.

Também no tocante aos compiladores, eles entregam para o processador o código já traduzido em linguagem de máquina, isto é, apenas zeros e uns.

Sendo que um compilador de uma linguagem orientada a eventos e/ou objetos entregará igualmente aqueles códigos supérfluos.



24. Re: C ou C++

thiago damasceno
thiagobrandam

(usa OpenSuSE)

Enviado em 29/09/2008 - 21:54h

Caro amigo Pedro Rafael, não sei se você consideraria ficar com o velho Fortran, que é uma linguagem perfeita para cálculos matemáticos pesados. Não é à toa que softwares como Chemkin ou Gaussian (cálculos de mecânica quântica) têm a maior parte de seu código em Fortran. Acho que com a quantidade de dados que você quer trabalhar o C não daria conta, mas não tenho certeza...Não acho necessário partir para orientação a objetos, seria prolixo demais. Acho que cada pessoa deve ter o bom senso de saber o limite entre utilizar uma linguagem por ser "hype" ou por ser necessária. Não acho que Java e C++ sejam necessários em 100% dos casos. Existem soluções diferentes para problemas diferentes e é idiotice (mesmo) um programador achar que existe uma linguagem que seja a melhor de todas (e se existisse, essa teria que ser Ruby =D). Abraços.



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts