Tiago Salgado

.NET / SQL Server / IT / etc...

Ten reasons why every programmer should learn C

É o titulo deste artigo. Tudo bem que dou uma certa razão ao autor, mas também fico naquela. Desconheço o mercado, e não sei se isto continua a ser uma realidade. Ultimamente ouço dizer que o pedem especialistas na plataforma .NET e também em Java. É esta a realidade ? Vale mesmo apena apostar no C para dominar alguns conceitos ?

Comments

Luis Abreu said:

no geral, concordo com o Joao e com o Pedro. De facto, os "truques" para managed sao completamente diferentes do unmanaged. alias, se n pensarmos em truques, basta pensarmos na diferenca da sequencia de construcao entre um obejcto C++ e um objecto C#...

dito isto, acho que nniguem fica a perder se aprender algumas coisas em C. apenas uma nota em relacao as comparacoes entre C e C++: e verdade em C pode nao ser em C++. Basta pensar no overload de operadores para perceber o porque disto :)
# Junho 29, 2009 3:33

Luis Abreu said:

Joao, es um lixado :)

pa, ja agora, eu fiquei foi espantado com o numero de pessoas que ainda continuam a programar em ASP tradicional...digo, chocado com o grande numero de pessoas q so agora esta a transitar para asp.net...
# Junho 29, 2009 3:33

João Cardoso said:

Por acaso ha filtros ISAPI que devem ser feitos em C++... mas em C não sei :)

Cheers
# Junho 29, 2009 3:33

Anonymous said:

Nem tudo é uma questão de mercado (se fosse, as universidades largavam fora 2/3 dos currículos dos seus cursos), e o C é mais uma questão de conhecimento.

Das linguagens que conheço, o C é a mais importante, isto mesmo considerando que hoje em dia já não é a minha primeira escolha para a maioria dos casos (o Python e o Java vêm sempre primeiro, por esta ordem). É uma linguagem de baixo nível, mas elegante, e quem a domina sabe tudo aquilo que as linguagens de mais alto nível tentam esconder, mas que dá jeito saber quanto se está a tentar perceber porque é que o código "tal" não tem a performance que se esperava que tivesse.

Agora, para quem espera mais do que apenas conhecimentos para aplicar noutras linguagens, o C ainda tem cartas a dar. Não só porque a área dos sistemas embebidos respira C (ou o seu descendente disforme, o C++), ou porque a comunidade opensource respira C (com boas razões, dado que os compiladores estão já mais do que estáveis, produzem código bastante eficiente e são bem suportados e previsíveis em dúzias de plataformas) mas também porque o C pode ser a única saída para melhorar a performance em linguagens mais modernas, com o recurso a módulos nativos (dado que a ABI do C permite fazer bindings para outras linguagens com extrema facilidade, e muitas delas têm já ferramentas para facilitar esta tarefa).

Resumindo... uma grande parte dos programadores nunca vai programar em C, mas não saber C é como não ver de um olho.
# Julho 1, 2009 2:23

Anonymous said:

Honestamente não concordo com o artigo, e dou a minha opinião relativamente às 10 razões apresentadas:

1ª: Até é verdade, e concordo que continue a ser apresentado em cadeiras de introdução à programação. O interesse académico do C parece-me muito importante.

2ª: Device Drivers? Há assim proporcionalmente tanta gente a desenvolvê-los? Não se esqueçam que o título do artigo é "Ten reasons why EVERY programmer should learn C".

3ª: Programar microcontroladores? Idém. Inclusivamente, já se encontram microcontroladores com .NET, onde nem é necessário desenvolver em C.

4ª: Performance? Até acredito que sim, mas o acréscimo que se pode tirar relativamente ao C++ deve ser mínimo.

5ª: Todas as linguagens são baseadas no C? Só se for a sintaxe. A metologia de programação por objectos não tem nada a ver com a metodologia utilizada no C (programação imperativa).

6ª: Comunidade grande? Fazemos uma procura no google e procuramos implementações de algoritmos em Java vs C.

7ª: Comunidade open-source? Duvido.

8ª: O C ensina-nos o que são os ponteiros? Absolutamente verdade. No C#, Java os ponteiros estão implícitos, o que me parece fazer muito mais sentido. Aliás, no C# se quiserem podem programar "à antiga". Só precisam de indicar ao compilador para aceitar o chamado "unsafe code", mas alguém tem saudades dos "core dumped"?

9ª: Só pode ser uma piada.

10ª: É verdade, mas parece-me uma repetição do argumento 3.


Para mim parece-me que a ideia da programação é não reinventar a roda. As linguagens são cada vez mais "alto-nível", e creio que esse é o caminho a seguir.

Mas não me interpretem mal, pois acho bem que se ensine C na faculdade, e uma das maneiras de formar um bom engenheiro é ensinar-lhe diferentes metodologias de programação.


Carlos:

"Não saber C é como não ver de um olho". Não concordo, mas gostei da frase.


Mas lá está, é tão somente a minha opinião. É segunda-feira e apeteceu-me mandar uma posta de pescada. Tenham uma boa semana de trabalho :P

Abraços,
Pedro
# Julho 1, 2009 2:23

Anonymous said:

Tiago: Corrige aí no post, "dorminar" para "dominar" :-)
# Julho 1, 2009 2:23

Anonymous said:

Vou fazer 2 suposicoes. Nao trabalhas nem queres trabalhar em:

1- Sistemas Operativos ( ou drivers)
2- Sistemas "embutidos"


Entao o valor do C e' duvidoso. Dizer so porque sabes C vais saber "optimizar" codigo de mais alto nivel nao e' verdades. Truismos que sao verdadeiros em C ( e C++) nao o sao em linguagens "managed" como as do CLR e do JAVA ( O garbage collector muda tudo!). E "truques" de optimizacao de C normalmente sao atravez de pointers, o q nao te vai ajudar muito em linguagens sem pointers.

Dizer que C e' a linguagem mais importante para arranjar um trabalho tambem nao creio que seja verdade, para tal basta dar uma olhadela em sites de trabalho.
E na minha experiencia as empresas se forem pedir alguma coisa com C sera mesmo C++, e C++ e' um bocadito diferente de C.

Mas dizendo isto, aprender uma nova linguagem nao vai ser desperdicio, a nao ser q seja JAVA ( ehehe... tinha que deixar esta :p )
# Julho 1, 2009 2:23

Anonymous said:

Eu, por exemplo, sei C e já trabalhei bastante com C. Hoje em dia, subi de nível, e programo em C# ou VB.NET, consoante a necessidade.

Posso dizer-vos que o meu background de C me ajudou e ajuda a ser um bom programador (não sou excelente, mas sou bom :P) pq me ensinou a abordar os problemas de forma a os ver bem.

E tb me ensinou a escrever código com poucos erros...Detectar erros em C, não é pera doce :P

Quanto ao ser imperativo que um developer saiba C, não concordo muito, até porque acho que sem o C eu teria sido capaz de aprender o suficiente para fazer o que faço hoje na mesma. Mas são só opiniões e esta é a minha!
# Julho 1, 2009 2:23

Anonymous said:

@Pedro:

«Device Drivers? Há assim proporcionalmente tanta gente a desenvolvê-los? Não se esqueçam que o título do artigo é "Ten reasons why EVERY programmer should learn C".

Programar microcontroladores? Idém. Inclusivamente, já se encontram microcontroladores com .NET, onde nem é necessário desenvolver em C.»

Mais gente do que possas imaginar. Em Portugal o grosso da programação está no lado do "business", mas no mundo o grosso da programação está nos aparelhos de automação industrial, electrónica de consumo, indústria aerospacial, indústria automóvel, defesa... E em todas estas áreas o C domina incontestavelmente, com o C++ logo atrás (e em muitos casos o C puro aparece disfarçado sob a denominação C/C++).

Microcontroladores em .NET? É capaz de existir, mas quando tens chips de 8bit com 4Kb de RAM, sem MMU nem nada dessas funcionalidades modernas, esse .NET não tem nada a ver com o .NET que a malta conhece.

«A metologia de programação por objectos não tem nada a ver com a metodologia utilizada no C (programação imperativa).»

A orientação por objectos _é_ um (sub-)modelo da programação imperativa.

Talvez queiras dizer "procedural", mas mesmo assim não é verdade. Qualquer tipo que programe em C à moda antiga, de uma forma completamente "procedural", é um mau programador. Há quem tenha esta mania, mas podem crer que é código de fazer cair o cabelo...

A orientação por objectos não é uma questão de sintaxe, é uma questão de estrutura lógica. É possível pensar em termos de objectos e programar em C, desde a forma mais simples, com os atributos representados como estruturas e os métodos representados por funções que aceitam sempre uma estrutura como primeiro parâmetro, até às formas mais complicadas com estruturas que suportam herança e polimorfismo.

Os métodos simples toda a gente usa com sucesso e, ao contrário do que os programadores que vêm das linguagens de alto nível possam pensar, não resultam em código feio e estranho.

Os métodos mais complexos, esses sim, são feios e bizarros, mas quando se tornam necessários é um sinal claro de que não se devia ter escolhido C. Agora, quando se está a fazer uma biblioteca como o GTK, que deverá suportar bindings para n linguagens (e por isso precisa de uma ABI estável e simples como a do C), estes esquemas lá terão de ser usados...

«Comunidade open-source? Duvido.»

90% de todo o código open-source é C. Pega numa distribuição de Linux qualquer e vais ver.

O pessoal que programa para viver normalmente está completamente a leste do C, e pensa que é uma linguagem obsoleta que já ninguém usa (as mesmas pessoas que dizem que o C está obsoleto, também dizem que o OpenGL está obsoleto e não fazem a minima ideia de que o Objective-C tem uma grande comunidade). O pessoal que vive para programar normalmente programa em C (também, não necessariamente "apenas"), até porque a maioria destas pessoas usa um tipo de unix qualquer.

@Stargazer:
«E tb me ensinou a escrever código com poucos erros...Detectar erros em C, não é pera doce»

Ah pois é...! Nem me tinha ocorrido isto, mas realmente é capaz de ser a maior vantagem de saber C: disciplina.

Eu vejo muita malta por aí a começar nas linguagens de alto nível que não consegue escrever 10 linhas de código sem introduzir um bug. Ou a programar esparguete só porque sabem que a linguagem fornece açúcar sintáctico que facilita a abstração e faz as APIs aparentarem simpatia escondendo o lixo que está por baixo.

O C obriga a uma disciplina rígida onde não se pode simplesmente passar uma excepção para cima, ou esperar que os runtime lance excepções em todos os defeitos off-by-one. É preciso avaliar as consequências de ignorar os return values de cada função, entre outras tarefas mundanas e chatas.

Esta disciplina é coisa que não se perde, e ajuda mesmo em Java (ou Python, como exemplo de uma linguagem completamente diferente do C).

A tendência de programar de qualquer maneira está sempre lá, sempre com a justificação de que é só desta vez. Numa linguagem como o Java dá para safar (a própria linguagem impõe um mínimo regras que têm de ser cumpridas _sempre_), mas em C isso acaba sempre em código de pesadelo, impossível de depurar e de modificar, cheio de bugs escondidos. A disciplina adquirida com o C cria boas práticas que o programador usa porque quer, e não porque a linguagem assim obriga.
# Julho 1, 2009 2:23

Anonymous said:

Carlos,

Nao sei onde vais buscar esta ideia que C domina a opensource. Obviamente que na area de sistemas operativos ate' que domina, mas no geral?

Eis o numero de projectos no sourceforge:
Java:23860
C++:20718
C:18324
Perl:6877
Python:6627
C#:5694

Eis um grafico ja antigo:
http://cld.blog-city.com/popularity_of_programming_languages_on_sourceforge.htm

Confesso que fiquei surpreendido com a quantidade de projectos em C, mas nem e' a linguagem mais usada.
# Julho 1, 2009 2:23

Anonymous said:

Vou buscar essa ideia a 9 anos a usar software opensource, mas não é preciso este tempo todo para concluir que o C é dominante na comunidade...

Quanto às estatísticas obtidas a partir do sourceforge, não são representativas por várias razões:

1) a esmagadora maioria dos projectos estão abandonados ou não fizeram um único release sequer (e muitos são completos fantasmas sem uma única linha de código). O sourceforge, sendo o repositório mais conhecido entre os novatos na comunidade, é o mais propenso a estas situações;

2) qualquer estatística sobre a popularidade de uma linguagem tem de ter em conta a dimensão dos projectos. Um projecto com dois developers em Java não pode contar o mesmo que o kernel do Linux e respectivos projectos satélite, ou o Apache, com milhares de developers (uns mais activos do que outros, claro);

2) o sourceforge, apesar de grande, não tem sequer 50% dos projectos opensource existentes. Uma estatística com intenções de ser mais correcta deverá sempre incluir o savannah.gnu.org (software da gnu), o alioth.debian.org e, mais importante ainda, o conjunto de projectos sob a alçada do projecto Apache e do projecto KDE. Mesmo assim, ficam de fora milhares de projectos que contam com alojamento próprio.

Pegando numa distribuição de Linux (ou qualquer BSD), o grosso do software é desenvolvido em C (claramente), a seguir vem o C++ (basicamente tudo o que é KDE, e pouco mais). Tudo o resto é apenas uma pequena percentagem, provavelmente liderada pelo perl, seguido de python e bash.

Este artigo, já com alguns anos, mostra um panorama mais ou menos coincidente com aquilo que digo (tabela 3.3), mas em linhas de código, http://www.dwheeler.com/sloc/redhat71-v1/redhat71sloc.html

Saindo das distribuições propriamente ditas aparece o Java, com a maioria do software proveniente dos projectos Jakarta do Apache e coisas relacionadas com o Eclipse. Isto já a contar com o software opensource disponível em Windows também.

Refraseando aquilo que disse anteriormente... Acho que a indústria se divide em quatro grandes grupos:

1) O mundo das business applications (em que se pode incluir o desenvolvimento web) - dominado pelo Java, com o .NET a ganhar terreno rapidamente;

2) O mundo dos sistemas embebidos - dominado pelo C, seguido do C++ e tudo o resto a milhas de distância;

3) O mundo do software de infraestrutura e suporte em servidores (bases de dados, servidores web e afins, onde se insere praticamente toda a comunidade opensource) - dominado pelo C, com o C++ mais ou menos perto.

4) O mundo do software desktop genérico - dominado pelo C++.
# Julho 1, 2009 2:23

Anonymous said:

Carlos, e's capaz de ter razao e o C ser mais usado do que eu pensava, ate porque nao estou muito por dentro de OpenSource ( tirando alguns projectos .NET)
Mas mesmo o artigo que apontas ( que por acaso ja conhecia), propoe uma explicacoe para a maior utilizacao de C:

O C ja por aqui anda a muito tempo e muito software foi escrito em C pois qual era a alternativa? Assembler?.
As pessoas nao vao migrar um software consideravel para outra coisa ( C++) sem boas razoes.

Eu creio que a maior parte dos programadores profissionais encontram-se no teu grupo 1 ( Business Applications) e neste grupo saber C nao sao nao e' um requesito, mas tambem nao creio que seja uma vantagem.
Que levante a mao quem implementou uma pagina web em C nos ultimos anos :p
# Julho 1, 2009 2:23

Anonymous said:

"Que levante a mao quem implementou uma pagina web em C nos ultimos anos :p"

Este JPC é tramado...hehe
# Julho 1, 2009 2:23

Anonymous said:

Nem tudo é uma questão de mercado (se fosse, as universidades largavam fora 2/3 dos currículos dos seus cursos), e o C é mais uma questão de conhecimento.

Das linguagens que conheço, o C é a mais importante, isto mesmo considerando que hoje em dia já não é a minha primeira escolha para a maioria dos casos (o Python e o Java vêm sempre primeiro, por esta ordem). É uma linguagem de baixo nível, mas elegante, e quem a domina sabe tudo aquilo que as linguagens de mais alto nível tentam esconder, mas que dá jeito saber quanto se está a tentar perceber porque é que o código "tal" não tem a performance que se esperava que tivesse.

Agora, para quem espera mais do que apenas conhecimentos para aplicar noutras linguagens, o C ainda tem cartas a dar. Não só porque a área dos sistemas embebidos respira C (ou o seu descendente disforme, o C++), ou porque a comunidade opensource respira C (com boas razões, dado que os compiladores estão já mais do que estáveis, produzem código bastante eficiente e são bem suportados e previsíveis em dúzias de plataformas) mas também porque o C pode ser a única saída para melhorar a performance em linguagens mais modernas, com o recurso a módulos nativos (dado que a ABI do C permite fazer bindings para outras linguagens com extrema facilidade, e muitas delas têm já ferramentas para facilitar esta tarefa).

Resumindo... uma grande parte dos programadores nunca vai programar em C, mas não saber C é como não ver de um olho.
# Julho 2, 2009 2:21

Anonymous said:

Honestamente não concordo com o artigo, e dou a minha opinião relativamente às 10 razões apresentadas:

1ª: Até é verdade, e concordo que continue a ser apresentado em cadeiras de introdução à programação. O interesse académico do C parece-me muito importante.

2ª: Device Drivers? Há assim proporcionalmente tanta gente a desenvolvê-los? Não se esqueçam que o título do artigo é "Ten reasons why EVERY programmer should learn C".

3ª: Programar microcontroladores? Idém. Inclusivamente, já se encontram microcontroladores com .NET, onde nem é necessário desenvolver em C.

4ª: Performance? Até acredito que sim, mas o acréscimo que se pode tirar relativamente ao C++ deve ser mínimo.

5ª: Todas as linguagens são baseadas no C? Só se for a sintaxe. A metologia de programação por objectos não tem nada a ver com a metodologia utilizada no C (programação imperativa).

6ª: Comunidade grande? Fazemos uma procura no google e procuramos implementações de algoritmos em Java vs C.

7ª: Comunidade open-source? Duvido.

8ª: O C ensina-nos o que são os ponteiros? Absolutamente verdade. No C#, Java os ponteiros estão implícitos, o que me parece fazer muito mais sentido. Aliás, no C# se quiserem podem programar "à antiga". Só precisam de indicar ao compilador para aceitar o chamado "unsafe code", mas alguém tem saudades dos "core dumped"?

9ª: Só pode ser uma piada.

10ª: É verdade, mas parece-me uma repetição do argumento 3.


Para mim parece-me que a ideia da programação é não reinventar a roda. As linguagens são cada vez mais "alto-nível", e creio que esse é o caminho a seguir.

Mas não me interpretem mal, pois acho bem que se ensine C na faculdade, e uma das maneiras de formar um bom engenheiro é ensinar-lhe diferentes metodologias de programação.


Carlos:

"Não saber C é como não ver de um olho". Não concordo, mas gostei da frase.


Mas lá está, é tão somente a minha opinião. É segunda-feira e apeteceu-me mandar uma posta de pescada. Tenham uma boa semana de trabalho :P

Abraços,
Pedro
# Julho 2, 2009 2:21

Anonymous said:

Tiago: Corrige aí no post, "dorminar" para "dominar" :-)
# Julho 2, 2009 2:21

Anonymous said:

Vou fazer 2 suposicoes. Nao trabalhas nem queres trabalhar em:

1- Sistemas Operativos ( ou drivers)
2- Sistemas "embutidos"


Entao o valor do C e' duvidoso. Dizer so porque sabes C vais saber "optimizar" codigo de mais alto nivel nao e' verdades. Truismos que sao verdadeiros em C ( e C++) nao o sao em linguagens "managed" como as do CLR e do JAVA ( O garbage collector muda tudo!). E "truques" de optimizacao de C normalmente sao atravez de pointers, o q nao te vai ajudar muito em linguagens sem pointers.

Dizer que C e' a linguagem mais importante para arranjar um trabalho tambem nao creio que seja verdade, para tal basta dar uma olhadela em sites de trabalho.
E na minha experiencia as empresas se forem pedir alguma coisa com C sera mesmo C++, e C++ e' um bocadito diferente de C.

Mas dizendo isto, aprender uma nova linguagem nao vai ser desperdicio, a nao ser q seja JAVA ( ehehe... tinha que deixar esta :p )
# Julho 2, 2009 2:21

Anonymous said:

Eu, por exemplo, sei C e já trabalhei bastante com C. Hoje em dia, subi de nível, e programo em C# ou VB.NET, consoante a necessidade.

Posso dizer-vos que o meu background de C me ajudou e ajuda a ser um bom programador (não sou excelente, mas sou bom :P) pq me ensinou a abordar os problemas de forma a os ver bem.

E tb me ensinou a escrever código com poucos erros...Detectar erros em C, não é pera doce :P

Quanto ao ser imperativo que um developer saiba C, não concordo muito, até porque acho que sem o C eu teria sido capaz de aprender o suficiente para fazer o que faço hoje na mesma. Mas são só opiniões e esta é a minha!
# Julho 2, 2009 2:21

Anonymous said:

@Pedro:

«Device Drivers? Há assim proporcionalmente tanta gente a desenvolvê-los? Não se esqueçam que o título do artigo é "Ten reasons why EVERY programmer should learn C".

Programar microcontroladores? Idém. Inclusivamente, já se encontram microcontroladores com .NET, onde nem é necessário desenvolver em C.»

Mais gente do que possas imaginar. Em Portugal o grosso da programação está no lado do "business", mas no mundo o grosso da programação está nos aparelhos de automação industrial, electrónica de consumo, indústria aerospacial, indústria automóvel, defesa... E em todas estas áreas o C domina incontestavelmente, com o C++ logo atrás (e em muitos casos o C puro aparece disfarçado sob a denominação C/C++).

Microcontroladores em .NET? É capaz de existir, mas quando tens chips de 8bit com 4Kb de RAM, sem MMU nem nada dessas funcionalidades modernas, esse .NET não tem nada a ver com o .NET que a malta conhece.

«A metologia de programação por objectos não tem nada a ver com a metodologia utilizada no C (programação imperativa).»

A orientação por objectos _é_ um (sub-)modelo da programação imperativa.

Talvez queiras dizer "procedural", mas mesmo assim não é verdade. Qualquer tipo que programe em C à moda antiga, de uma forma completamente "procedural", é um mau programador. Há quem tenha esta mania, mas podem crer que é código de fazer cair o cabelo...

A orientação por objectos não é uma questão de sintaxe, é uma questão de estrutura lógica. É possível pensar em termos de objectos e programar em C, desde a forma mais simples, com os atributos representados como estruturas e os métodos representados por funções que aceitam sempre uma estrutura como primeiro parâmetro, até às formas mais complicadas com estruturas que suportam herança e polimorfismo.

Os métodos simples toda a gente usa com sucesso e, ao contrário do que os programadores que vêm das linguagens de alto nível possam pensar, não resultam em código feio e estranho.

Os métodos mais complexos, esses sim, são feios e bizarros, mas quando se tornam necessários é um sinal claro de que não se devia ter escolhido C. Agora, quando se está a fazer uma biblioteca como o GTK, que deverá suportar bindings para n linguagens (e por isso precisa de uma ABI estável e simples como a do C), estes esquemas lá terão de ser usados...

«Comunidade open-source? Duvido.»

90% de todo o código open-source é C. Pega numa distribuição de Linux qualquer e vais ver.

O pessoal que programa para viver normalmente está completamente a leste do C, e pensa que é uma linguagem obsoleta que já ninguém usa (as mesmas pessoas que dizem que o C está obsoleto, também dizem que o OpenGL está obsoleto e não fazem a minima ideia de que o Objective-C tem uma grande comunidade). O pessoal que vive para programar normalmente programa em C (também, não necessariamente "apenas"), até porque a maioria destas pessoas usa um tipo de unix qualquer.

@Stargazer:
«E tb me ensinou a escrever código com poucos erros...Detectar erros em C, não é pera doce»

Ah pois é...! Nem me tinha ocorrido isto, mas realmente é capaz de ser a maior vantagem de saber C: disciplina.

Eu vejo muita malta por aí a começar nas linguagens de alto nível que não consegue escrever 10 linhas de código sem introduzir um bug. Ou a programar esparguete só porque sabem que a linguagem fornece açúcar sintáctico que facilita a abstração e faz as APIs aparentarem simpatia escondendo o lixo que está por baixo.

O C obriga a uma disciplina rígida onde não se pode simplesmente passar uma excepção para cima, ou esperar que os runtime lance excepções em todos os defeitos off-by-one. É preciso avaliar as consequências de ignorar os return values de cada função, entre outras tarefas mundanas e chatas.

Esta disciplina é coisa que não se perde, e ajuda mesmo em Java (ou Python, como exemplo de uma linguagem completamente diferente do C).

A tendência de programar de qualquer maneira está sempre lá, sempre com a justificação de que é só desta vez. Numa linguagem como o Java dá para safar (a própria linguagem impõe um mínimo regras que têm de ser cumpridas _sempre_), mas em C isso acaba sempre em código de pesadelo, impossível de depurar e de modificar, cheio de bugs escondidos. A disciplina adquirida com o C cria boas práticas que o programador usa porque quer, e não porque a linguagem assim obriga.
# Julho 2, 2009 2:21

Anonymous said:

Carlos,

Nao sei onde vais buscar esta ideia que C domina a opensource. Obviamente que na area de sistemas operativos ate' que domina, mas no geral?

Eis o numero de projectos no sourceforge:
Java:23860
C++:20718
C:18324
Perl:6877
Python:6627
C#:5694

Eis um grafico ja antigo:
http://cld.blog-city.com/popularity_of_programming_languages_on_sourceforge.htm

Confesso que fiquei surpreendido com a quantidade de projectos em C, mas nem e' a linguagem mais usada.
# Julho 2, 2009 2:21

Anonymous said:

Vou buscar essa ideia a 9 anos a usar software opensource, mas não é preciso este tempo todo para concluir que o C é dominante na comunidade...

Quanto às estatísticas obtidas a partir do sourceforge, não são representativas por várias razões:

1) a esmagadora maioria dos projectos estão abandonados ou não fizeram um único release sequer (e muitos são completos fantasmas sem uma única linha de código). O sourceforge, sendo o repositório mais conhecido entre os novatos na comunidade, é o mais propenso a estas situações;

2) qualquer estatística sobre a popularidade de uma linguagem tem de ter em conta a dimensão dos projectos. Um projecto com dois developers em Java não pode contar o mesmo que o kernel do Linux e respectivos projectos satélite, ou o Apache, com milhares de developers (uns mais activos do que outros, claro);

2) o sourceforge, apesar de grande, não tem sequer 50% dos projectos opensource existentes. Uma estatística com intenções de ser mais correcta deverá sempre incluir o savannah.gnu.org (software da gnu), o alioth.debian.org e, mais importante ainda, o conjunto de projectos sob a alçada do projecto Apache e do projecto KDE. Mesmo assim, ficam de fora milhares de projectos que contam com alojamento próprio.

Pegando numa distribuição de Linux (ou qualquer BSD), o grosso do software é desenvolvido em C (claramente), a seguir vem o C++ (basicamente tudo o que é KDE, e pouco mais). Tudo o resto é apenas uma pequena percentagem, provavelmente liderada pelo perl, seguido de python e bash.

Este artigo, já com alguns anos, mostra um panorama mais ou menos coincidente com aquilo que digo (tabela 3.3), mas em linhas de código, http://www.dwheeler.com/sloc/redhat71-v1/redhat71sloc.html

Saindo das distribuições propriamente ditas aparece o Java, com a maioria do software proveniente dos projectos Jakarta do Apache e coisas relacionadas com o Eclipse. Isto já a contar com o software opensource disponível em Windows também.

Refraseando aquilo que disse anteriormente... Acho que a indústria se divide em quatro grandes grupos:

1) O mundo das business applications (em que se pode incluir o desenvolvimento web) - dominado pelo Java, com o .NET a ganhar terreno rapidamente;

2) O mundo dos sistemas embebidos - dominado pelo C, seguido do C++ e tudo o resto a milhas de distância;

3) O mundo do software de infraestrutura e suporte em servidores (bases de dados, servidores web e afins, onde se insere praticamente toda a comunidade opensource) - dominado pelo C, com o C++ mais ou menos perto.

4) O mundo do software desktop genérico - dominado pelo C++.
# Julho 2, 2009 2:22

Anonymous said:

Carlos, e's capaz de ter razao e o C ser mais usado do que eu pensava, ate porque nao estou muito por dentro de OpenSource ( tirando alguns projectos .NET)
Mas mesmo o artigo que apontas ( que por acaso ja conhecia), propoe uma explicacoe para a maior utilizacao de C:

O C ja por aqui anda a muito tempo e muito software foi escrito em C pois qual era a alternativa? Assembler?.
As pessoas nao vao migrar um software consideravel para outra coisa ( C++) sem boas razoes.

Eu creio que a maior parte dos programadores profissionais encontram-se no teu grupo 1 ( Business Applications) e neste grupo saber C nao sao nao e' um requesito, mas tambem nao creio que seja uma vantagem.
Que levante a mao quem implementou uma pagina web em C nos ultimos anos :p
# Julho 2, 2009 2:22

Anonymous said:

"Que levante a mao quem implementou uma pagina web em C nos ultimos anos :p"

Este JPC é tramado...hehe
# Julho 2, 2009 2:22
Leave a Comment

(requerido) 

(requerido) 

(opcional)

 

(requerido) 

If you can't read this number refresh your screen
Enter the numbers above: