sexta-feira, 14 de janeiro de 2011

A Melhor Linguagem de Programação

Volta e meia, em diversos fóruns, vejo a pergunta: Qual a melhor linguagem de programação? Ou ainda: Devo apreender C# ou Java? (eu achei Delphi legal mas me disseram que está morrendo). Há tem ainda ruby, que ta todo mundo usando!


A verdade sobre qual a melhor linguagem de programação é que não existe melhor linguagem de programação!!! Infâmia, blasfêmia, dirão os religiosos Java, principalmente, embora programadores xiitas existam em qualquer linguagem (tem gente que acha Clipper excelente e usa até hoje), mas isso é assunto para outro post. A verdade é que não existe melhor linguagem de programação e sim a melhor linguagem para resolver determinado problema no menor tempo e com o menor custo! 

Em principio você pode escolher qualquer linguagem para resolver qualquer problema e os programadores tendem a querer fazer isso na linguagem que dominam, criando assim bizarrices. Sempre haverá alguém que dirá que VB é horrível, que Assembly, (sim é Assembly e não Assembler) não se usa mais. Esses programadores tendem a reinventar a roda, pois seu conhecimento é limitado a uma linguagem e, pelo senso comum, tendem a criticar outras linguagens. Sim existem pessoas que tiveram problemas com outras linguagens e as criticam, eu mesmo não sou fã de VB, porém se o problema que eu quero resolver é simples o suficiente para ser feito por uma macro no Excel e eu posso fazer isso em alguns minutos em vez de levar algumas semanas criando um aplicativo eu vou utilizar VBA para criar essa macro e resolver rapidamente o problema. O mesmo se aplica a domínios específicos, como microcontroladores, onde normalmente é usado C e quando existem problemas de memória e velocidade se usa Assembly. Agora eu não vou usar Assembly para desenvolver um editor de texto!

A casos em que domínio de uma aplicação é tão amplo e complexo que são utilizadas diversas linguagem a fim de representa-lo e resolver os problemas impostos por ele.

Se você chegou até aqui, deve estar pensando “Putz, ou que eu faço então!”. Simples, concentre seu aprendizado em apreender algum paradigma de programação e após isso pesquise e encontre uma linguagem que resolva da melhor maneira os problemas que você encontra. 

Também não existe melhor paradigma de programação, assim como as linguagens. Cada paradigma é melhor para problemas específicos. A base moderna dos paradigmas é a programação estruturada, das quais derivam a programação procedural e a programação orientada a objetos. A programação procedural funciona bem para domínios muito simples já programação a programação orientada a objetos se aplica melhor a domínios mais complexos. Embora existam outros paradigmas, estes são os mais utilizados.

O problema é que a maioria dos programadores não conhecem os paradigmas e “cozinham” software espaguete. Programadores que utilizam uma linguagem OO produzem código procedural, e os procedurais produzem coisas inomináveis. Regras simples como “uma função uma responsabilidade” não são respeitadas o que gera funções monstruosas, com centenas de linhas, totalmente impossível de se entender e quem dirá manter ou expandir.

Todo o programador deve conhecer o paradigma de programação estruturada, a escolha de um paradigma procedural ou OO vai depender do domínio do problema. Martin Fowler no seu livro Padrões de Arquitetura de aplicações Corporativa diz: 
"Embora possamos identificar as três camadas usuais, apresentação,domínio e fonte de dados, em cada aplicação corporativa, a maneira simples para extrair dados de um único banco de dados e exibi-lo na Web pode, todo ele, consistir de um único procedimento. Eu ainda me esforçaria para separar as três camadas, mas, neste caso, poderia fazê-lo simplesmente colocando o comportamento de cada camada em sub-rotinas separadas. Se o sistema se tornasse mais complexo, quebraria as três camadas em classes separadas. Se a complexidade aumenta-se ainda mais, dividira as classes em pacotes separados"
O programador deve desenvolver o “feeling”, para notar quando deve refatorar seu código para outro paradigma. Ele deve estar atento a evolução da complexidade do seu código e tomar as medidas necessárias para que isso não saia de controle.

Quando um programador verifica que um paradigma ou uma linguagem não é a mais adequada ao domínio do seu problema e muda seu sistema utilizando um outro paradigma ou outra linguagem ele deixa de ser um programador para se tornar um desenvolvedor de software.

Como dica, posso dizer que entenda o paradigma estrutural, e estude com afinco OO e só então estude o paradigma procedural, pois é muito mais fácil entender o procedural após OO do que o contrário, por isso que muitos programadores Java acham que criam programas OO, mas estão desenvolvendo software de maneira procedural. Utilizar classes não qualifica um programa como OO.

Outra dica são os livros da a série como programar dos Deitel, que é extremamente didática e inclui muitas boas práticas de programação além de explicar os paradigmas.

Ah, e a propósito, todo desenvolvedor deveria conhecer C, pelo menos a título de curiosidade. Um excelente livro sobre essa linguagem é o C Completo e Total do Herbert Schildt.

quarta-feira, 12 de janeiro de 2011

Conversa de Bar

Alguns anos atrás, pela época do lançamento do ProUni, estava em um bar conversando com um amigo sobre a educação superior no Brasil e ele argumentou que o sistema de cotas e o ProUni acarretariam em uma grande evasão no ensino superior porque os alunos beneficiados com essas políticas não teriam capacidade conseguir acompanhar os outros alunos devido a falta de qualidade do ensino básico e médio a que tiveram acesso.
No momento argumentei que achava difícil isso acontecer, até por que trabalhava com uma pessoa que fora beneficiada pelo ProUni e ela era um aluno e profissional excepcional, mas na época não possuía outros argumentos para rebater sua opinião.
Hoje lendo um site de noticias, tenho a grata satisfação de ver que uma aluna contemplada com o ProUni foi laureada no Curso de Direito da PUC-RS.
Isso demonstra que esse meu amigo estava errado? Talvez não! Não tenho dados estatísticos ainda para provar isto, mas usando outros dados acredito que sim.
No Brasil, conforme estudo do Conselho de Desenvolvimento Econômico e Social (CDES), órgão vinculado à Presidência da República, em 2004 somente 53,5% dos brasileiros que haviam entrado no ensino básico o concluíram neste ano. Já, conforme o IBGE, em 2009 apenas 37% dos jovens de 18 a 24 anos que entravam no mercado haviam concluído o ensino médio! Isso quer dizer que de cada 100 brasileiros que iniciam seus estudos apenas 20(19,8) concluem o ensino médio e podem fazer um curso superior!
Considerando o fato que provavelmente a imensa maioria dessas 20 pessoas pertencem a classes mais abastadas da população que teve a chance de estudar a vida toda em escola particular tendo melhores condições de fazer um curso superior, diria que o restante são lutadores por natureza que apesar de todos os obstáculos enfrentados conseguiram concluir seus estudos estando prontos para entrar em um curso superior sim. Mesmo tendo tido uma educação deficiente, como batalhadores que são, irão superar mais esse desafio e obter seu diploma universitário.
Isso me faz acreditar que essas políticas governamentais de acesso ao ensino superior no Brasil são corretas. Não estou dizendo que concordo com o partido A ou B, somente que as políticas de acessos que permitem aos menos favorecidos terem acesso a uma faculdade são corretas.

About

Bom, como primeiro post, para quem não me conhece, vou me apresentar.
Meu nome é Alexandre sou desenvolvedor de software e ex-estudante de Engenharia Mecatrônica, ex-estudante de Engenharia de Produção atualmente cursando Análise e Desenvolvimento de Sistemas.
Meus interesses giram em torno da engenharia e desenvolvimento de software, engenharia de produção, automação industrial e tecnologia.