A importância da simplicidade

Boas práticas existem na execução de qualquer atividade, desde colocar um copo no armário da cozinha, escovar os dentes, ou desenvolver uma rotina em um programa. Muitas dessas boas práticas são ensinadas e frisadas nas abordagens didáticas do planejamento, desenvolvimento, implementação e suporte de sistemas informatizados, algumas inclusive são tão importantes que deveriam ser vistas como “regras de ouro”. No que diz respeito a programação, existem boas práticas associadas ao desenvolvimento do algoritmo independente da linguagem, e outras de aplicação específica relacionadas à ferramenta ou linguagem utilizada.

Ao iniciar este texto, a ideia original era abordar uma lista de boas práticas aplicáveis a qualquer linguagem, então comecei pela que eu considero uma das mais importantes: A Simplicidade. Porém, durante a elaboração do texto, foram necessários mais parágrafos para desenvolver o assunto. A frase de Martin Fowler em um de seus livros sobre refatoração de código aborda de forma simples e direta este assunto: “Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam.”

Escrever um código complexo não necessariamente significa que ele foi escrito por um programador com profundo conhecimento da linguagem ou mesmo que ele sabia o que estava fazendo. Ou o código já nasce complexo, normalmente quando não se usa a melhor abordagem para o algoritmo e insiste-se numa linha de raciocínio que vai tornar possível resolver a questão, mas não é a melhor escolha, ou o código inicial nasce simples mas torna-se complexo ao ganhar mais funcionalidades, normalmente não previstas na análise inicial de sua concepção, ou que exigiriam uma refatoração cujo custo não poderia ser absorvido naquele momento, então mantém-se a lógica inicial e a nova funcionalidade ou comportamento fica parecendo um “remendo” no fonte.

A simplicidade é amiga do próprio programador. Afinal, depois de uma semana, um mês ou um ano, se o próprio desenvolvedor não registrou alguns “por quês” no código, nem ele vai lembrar por que optou por fazer daquela forma, e vai ter que reestudar o próprio código para entrender o que ele faz. Um programador experiente consegue fazê-lo, porém isso torna-se cada vez mais difícil e custoso quanto mais o código cresce desordenadamente, e até virar um mostro marinho de cinco pernas, três braços, tromba e chifres, e ninguém mais quer mexer naquilo, com medo de um dos braços do monstrinho possa lhe enfiar a mão na sua nuca e te arrancar a espinha! E isto terá sérias consequências no plano de carreira desse programador ao assumir novas responsabilidades ou projetos, pois não é possível ele subir um degrau na carreira se não houver alguém capacitado para preencher o degrau que hoje ele ocupa, e que ficará vazio com a sua subida.

Existem casos onde o código têm um nível intrínseco de complexidade, não por estar mal escrito ou remendado, mas onde a natureza do processo é complexa, ou ele foi escrito de uma forma mais complexa para obter ganhos diretos ou agregados, como um diferencial crucial de performance ou escalabilidade para um fim específico, onde este ganho justifica a complexidade da sua implementação e seu custo de manutenção. E mesmo assim, um bom programador neste ponto, usando sabiamente de um ou mais comentários sobre a lógica e os fatores determinantes da escrita da rotina, vai tornar o entendimento do código mais simples.

Procure sempre a simplicidade, grandes problemas da humanidade são resolvidos de forma simples. Utilize o complexo apenas quando realmente necessário, quando realmente existe um ganho tangível, pois a complexidade naturalmente vêm com um custo agregado, que nem sempre é necessário.

Até o próximo post 🙂

Referências

A melhor linguagem de programação

Enfim, vou abordar um tabu, tema de altas rixas e discussões acaloradas entre os defensores de linguagens procedurais, orientadas a objeto e eventos, proprietárias ou de uso livre, interpretadas e compiladas, que normalmente surgem nas rodas de analistas e programadores na hora do café, num fórum, chat, blog, …

Normalmente, um especialista em uma determinada linguagem XYZ usa e sabe usar até o osso dos recursos da linguagem na qual ele se especializou, e este cidadão trabalha no desenvolvimento de soluções para um segmento de mercado ou com uma linha de aplicativos onde esta linguagem é uma boa escolha. Logo, para este especialista, a linguagem XYZ é a melhor linguagem.

Outro especialista, que trabalha em um segmento similar, mas com foco em outros tipos de soluções, e que em um determinado ponto resolveu se especializar em programar na linguagem ABC, que se comparada com XYZ possui alguns pontos de vantagem e outros de desvantagem, para este especialista em ABC, esta para ele é a melhor linguagem, pois ele consegue fazer em ABC tudo o que outro desenvolvedor faria em XYZ.

Já um terceiro especialista, que trabalha em um segmento de programação mais específico para sistemas embarcados em um tipo de hardware, especialista em GHI, este vai justificar a sua escolha de forma similar, pois na prática, a melhor linguagem de programação é aquela na qual você se especializou, em um nível que você consegue utilizá-la para atender às necessidades do desenvolvimento da aplicação ou solução em tecnologia de informação que o seu cliente precisa. Sem maiores rodeios ou delongas.

Faz mais de um ano, meu amigo Pedro Reis Lima, que inclusive devo uma visita, me pediu uma recomendação de uma linguagem de programação, pois ele se interessou pelo tema, frisando o fato dele não ter conhecimentos sobre programação, e pensando na utilidade e aplicabilidade deste conhecimento. Ele me perguntou sobre C++ ou Java, o que eu lhe recomendaria, ou mesmo uma outra linguagem. Durante um ou dois dias, eu lhe respondi o que eu achava pelo Messenger do Facebook, e após uma leve re-editoração, acho que a resposta que eu lhe dei cabe exatamente neste contexto.

Cada linguagem de programação têm um nicho de mercado onde ela é mais utilizada, existem linguagens que oferecem mais atrativos e facilidades para desenvolver tipos de aplicações ou sistemas, … um desenvolvedor em C ou C++ escreve qualquer coisa, usando as funções padrão da linguagem, ou usando outros componentes de alto nível … Se você pretende desenvolver aplicações para Android, existe o Android SDK, para Windows têm o Visual Studio .NET, que permite você desenvolver usando várias linguagens, C#, Objective C, Visual Basic, etc… Se você vai trabalhar com um ERP de mercado, ou desenvolver customizações neste ambiente, você precisa conhecer a linguagem que ele foi escrito … o ERP da Microsiga usa ADVPL, o ERP da Datasul usa ABL, RM Sistemas usa .NET ( Visual Studio ), o SAP usa ABAP … Se você vai desenvolver aplicações para WEB, você pode usar PHP, ASPNET, Python, Ruby … Para armazenamento e recuperação de dados, é fundamental conhecer SQL, o universo de possibilidades é imenso.

Se eu fosse recomeçar a aprender informática hoje, ou recomendar um caminho a seguir, eu lhe diria inicialmente para estudar lógica de programação — apender por exemplo uma meta-linguagem, como o Visualg … é uma linguagem didática, parece um “portugol” — pois isto será algo comum a praticamente todas as linguagens. Num segundo passo, estudaria as diferenças entre uma linguagem procedural, uma estruturada, e uma orientação a objetos, e dedicaria atenção especial a esta última. Se você tem em mente trabalhar com alguma linguagem comercialmente viável, dê uma olhada no que existe de demanda de mercado… Se hoje eu não conhecesse C++ ou Java, eu também ficaria em dúvida, e provavelmente eu escolheria Java.

Mas lembre-se que você não vai se tornar especialista da noite para o dia, isso é um investimento de médio a longo prazo, e de muita dedicação. Justamente por isso, vou lhe adiantar uma coisa: você precisa gostar de mexer com isso, e se entregar a essa atividade com gosto, fazer isso apenas pelo retorno financeiro vai tornar seu trabalho inicialmente cansativo, até tornar-se insuportável.

Ao tornar-se especialista em uma linguagem, você conseguirá desenvolver as soluções para diversas necessidades dos seus clientes, mas não se prenda em aprender apenas uma linguagem. Seja especialista em uma, mas saiba e conheça pelo menos três ou quatro linguagens, pois podem existir problemas ou necessidades dos seus clientes ou restrições e fatores em um projeto onde uma outra linguagem poderá ser mais eficiente ou mais aderente à solução que você precisa projetar.

Com o crescimento da demanda de desenvolvimento de aplicações e soluções, algumas previsões apontam que a quantidade de profissionais disponíveis no mercado em alguns anos não vai atender a demanda… Não posso lhe dizer qual é a melhor… Hoje, e pra mim, C++ e ADVPl resolvem todos os meus problemas, mas volta e  meia eu uso Python e ainda dou manutenção em fontes em Pascal (Delphi).

Aprenda uma, e aprenda bem, depois de você aprender bem a primeira linguagem, aprender uma segunda ou terceira linguagem vai ser bem mais fácil, eu garanto. Separei alguns links de sites e reportagens para dar um pouco mais de luz neste tema, sites, blogs, reportagens, acredito que estes links serão úteis. Pesquise mais sobre este tema, para quem descobre logo no início que têm uma afinidade com este tipo de trabalho, é um prato cheio pra seguir uma carreira.

http://www.devmedia.com.br/e-agora-qual-linguagem-de-programacao-escolher/15444
http://tisimples.wordpress.com/2012/10/30/como-escolher-a-melhor-linguagem-de-programacao-para-seu-projeto/
http://webinsider.com.br/2009/09/16/linguagens-sao-linguagens-mas-qual-devo-escolher/
http://www.ebc.com.br/noticias/economia/2013/07/profissionais-de-tecnologia-da-informacao-tem-maior-chance-de-emprego
http://g1.globo.com/jornal-hoje/noticia/2013/06/setor-da-tecnologia-da-informacao-oferece-276-mil-vagas-em-todo-o-pais.html

Este útimo site em especial, faz parte de uma iniciativa da Softex, em parceria com o governo federal e iniciativa privada para oferecer cursos de informática gratuitos, na modalidade de ensino a distância, são mais de 30 cursos e mais de 1500 horas de capacitação.

http://www.brasilmaisti.com.br/index.php/pt/explore/projeto

Saudações, e até o próximo post 🙂

Desmistificando a programação

Para você, que está iniciando ou se interessa em programação, mas acha que isso é coisa de outro mundo, eu tenho uma notícia muito boa: Pode parecer difícil, mas na verdade não é. A complexidade de um sistema começa a surgir na integração de suas partes, não exatamente em programá-lo. Este tópico é muito interessante para quem está começando agora a interessar-se por programação, e vai lhes dar uma noção do que é um programa de computador, e inclusive vai lhe dar as instruções parar fazer um programinha bem simples, que pode ser executado em qualquer navegador de internet ( Web Browser ) instalado no seu computador.

Cada linguagem de programação é apenas um dialeto de instruções, que possui uma gramática e sintaxe próprias, como se fosse um outro idioma. No final das contas, visto de forma muito simplista, um programa de computador não passa de uma lista de instruções para ler, transformar ( ou processar ) informações, composta de instruções e recursos fornecidos por uma linguagem ou ambiente, para realizar uma tarefa.

Há quase 20 anos atrás, tive a oportunidade de ministrar aulas de Informática, foi um capítulo a parte na minha vida de programador, muito gratificante ao ver como os alunos admiraram a simplicidade da abordagem dos conceitos de programação e a satisfação minha e deles de entender como um programa de computador funciona.

Um ex-professor e amigo meu, Sr. Regginato, foi um dos professores que me introduziu no mundo do IBM-PC e dos conceitos da informática e do processamento de dados, em uma escola que ele montou junto com sua esposa em Botucatu, interior de São Paulo. Acho que foi dele a frase “Programar um computador é como escovar os dentes.”

Parece loucura, mas é exatamente isso. Imagine que você precise escrever uma lista de passos para ensinar uma pessoa a escovar os dentes. como você faria ? Naturalmente, você deverá criar uma espécie de manual com os passos para realizar esta tarefa, com um mínimo de detalhes que tornem o processo intuitivo, e naturalmente escrito em um idioma que a pessoa conheça. Por exemplo:

Para escovar os dentes:

1) Vá até o banheiro, abra o espelho e localize a sua escova de dentes.
2) Verifique se a escova de dentes está no espelho.
3) Caso não esteja, verifique se ficou sobre a pia.
4) Verifique se têm pasta de dentes no banheiro, e se têm água na pia.
5) Caso algum dos itens acima não esteja pronto para uso, não é possível escovar os dentes.
6) Pegue a escova de dentes, abra a torneira e molhe um pouco a cabeça da escova.
7) Pegue a pasta de dentes, abra-a e posicione a saída do tubo na cabeça da escova.
8) Pressione um pouco o final do tubo até que saia pasta suficiente para colocar sobre as cerdas da escova.
9) Feche a pasta de dentes e guarde-a no espelho.
10) Insira a escova na boca, e espalhe a pasta na sua arcada dentária inferior.
11) Esfregue a escova entre a arcada superior e inferior, cerrando os dentes para facilitar a operação.
12) Esfregue lateralmente as arcadas superior esquerda e direita, inferior esquerda e direita e a parte frontal superior e inferior.
13) Repita o passo 12 por duas vezes.
14) Durante o processo, respire pelo nariz para não engolir pasta de dentes ou a espuma deixada pelo processo de escovação.
15) Cuspa o excesso de pasta e espuma na pia.
16) Abra a torneira, pegando a água com uma das mãos, e leve à boca para enxaguar.
17) Bocheche a água para limpar a pasta e cuspa a água com pasta na pia.
18) Volte ao passo 16 e repita-o por duas vezes.
19) Lave a escova de dentes, tirando as sobras de pasta e espuma.
20) Feche a torneira, e guarde a pasta no espelho.
21) Pronto, seus dentes estão escovados.
22) Repita a operação de escovação sempre após as refeições.

Para nós é uma coisa simples, mas descrever a lista de tarefas e passos para escovar os dentes incluem muitos detalhes que nós não prestamos mais a atenção, pois aprendemos isso desde pequenos e sabemos de cor e salteado. A lista de tarefas acima foi escrita em uma linguagem que nós chamamos de “Linguagem Natural”. Programar um computador basicamente é criar uma lista de instruções, a qual chamamos de “programa”, escrito em uma linguagem ou dialeto que a linguagem entende, para que o computador execute a lista de instruções quando você solicitar a ele a “execução” do programa.

Vamos ver agora um exemplo mais simples: Como fazer uma operação de soma de números inteiros em uma folha de papel:

1) Usamos uma folha de um caderno, e escrevemos os dois ou mais números a serem somados alinhados à direita
2) Após escrever os números, passe um traço sob o último número. Abaixo deste traço será escrito o resultado da soma.
3) considere a coluna mais à direita na vertical, e some todos os números dessa coluna.
4) Caso a soma dos números resulte em um número menor ou igual a nove, escreva este número na ultima coluna em baixo do traço.
5) Caso o número seja maior do que nove, escreva na última coluna da direita abaixo do traço o último digito à direita do resultado calculado, e copie o dígito da esquerda do resultado na coluna imediatamente anterior, na linha em branco antes do número.
6) Repita a operação a partir da etapa 03, considerando agora a coluna anterior (à esquerda) da ultima coluna calculada, levando em conta que caso tenha sido escrito um número na linha superior vindo da soma da ultima coluna, este número deve ser considerado na operação.
7) Ao realizar a operação até a primeira coluna, caso algum digito adicional tenha sido colocado na coluna anterior, ele deve ser copiado para baixo, no resultado.

Agora vamos executar este procedimento, usando os números 12444, 312 e 9644.

  12444
+   312
+  9644
 -------

No nosso exemplo, 4 + 2 + 4 = 10, logo copiamos o zero na ultima coluna da linha do resultado, e o numero 1 na coluna anterior, na linha imediatamente superior aos números a serem somados.

    1
 12444
+  312
+ 9644
-------
     0

Agora, voltamos na etapa 3 e somamos 1+4+1+4 ( 10 novamente), copia o zero no resultado e joga o um na coluna da esquerda na linha superior

   11
 12444
+  312
+ 9644
-------
    00

Agora somamos a terceira coluna, 1+4+3+6 ( 14 ), copia o 4 pra baixo e o um na coluna da esquerda na linha superior.

  111
 12444
+  312
+ 9644
-------
   400

Ao somar a quarta coluna, ignoramos os espaços em branco das colunas que não tem número, e somamos 1+2+9 ( 12 ). Copia o dois pra baixo, e o um na coluna da esquerda na linha superior.

 1111
 12444
+  312
+ 9644
-------
  2400

E agora, por ultimo, somamos a coluna anterior ( nossa última coluna com números), 1+1 (2) e copiamos o resultado para baixo.

 1111
 12444
+  312
+ 9644
-------
 22400

E chegamos ao resultado 22400. Pode fazer na calculadora, vai dar o mesmo resultado …rs…

Agora, vamos fazer um programa de computador para somar três números. Vou escolher uma linguagem script, que qualquer Browse de internet possa executar. Usando uma máquina com qualquer versão do Windows, abra o bloco de notas do seu computador, e crie um novo arquivo de texto. Chame-o de “exemplo.html”, e salve-o na sua pasta de documentos.

Agora, cole o conteúdo abaixo dentro deste arquivo:

// <![CDATA[
a = 12444;
b = 312
c = 9644;
d = a+b+c;
alert("Resultado = "+d);
// ]]>

Salve o arquivo, ele tem que ter a extensão HTML, então execute o arquivo clicando duas vezes em cima do nome do arquivo na sua pasta de documentos. O Windows vai verificar qual é o programa usado como padrão para navegação WEB, capaz de abrir e mostrar páginas HTML, e chamá-lo para mostrar o conteúdo do arquivo. Como o arquivo contém um script, o navegador sabe o que o script singifica e vai executá-lo. Seu resultado em tela deve ser uma mensagem parecida com a imagem abaixo:

Featured image

Traduzindo o script acima: utilizamos algumas letras do alfabeto para receber valores. A recebe o valor 12444, B recebe o valor 312 e C recebe 9644, e D recebe o resultado da soma dos conteúdos de A com B com C, e por último chamamos uma função da linguagem JavaScript para mostrar o resultado em uma janela na tela do Browser.

Tão simples quanto isso 🙂

Se você chegou até aqui e fez o exemplo acima, meus parabéns, você fez um pequeno programa de computador! Não foi necessário refazer toda a sequência de operações que teríamos de fazer ao somar um numero no papel, afinal a linguagem utilizada oferece operadores aritméticos prontos com estas funcionalidades. Para executar este programa, internamente o browser chamou um interpretador, que traduziu o programa para chamar instruções específicas do processador da sua máquina, para ler os conteúdos dos números e somá-los.

A partir de um exemplo simples, também conhecido como ‘Hello world’, iniciamos a construção de programas mais complexos, utilizando mais funções da linguagem escolhida, funções que permitem perguntar valores ao usuário da maquina, ou obter valores em um formulário, desenhar uma janela com botões e escrever as ações que cada botão deve executar, ler e gravar informações em um arquivo no disco ou em um Banco de Dados, etc. A maioria das linguagens de desenvolvimento de mercado permitem estes tipos de operação, cada uma do seu jeito particular, a complexidade do programa tende a crescer de acordo com a quantidade de dados e complexidade do processo a ser realizado com estes dados.

Até o próximo post !!