Qual é a semelhança entre um programador e um jogador de futebol?

por Juliano Niederauer

Em qualquer profissão, encontramos profissionais de todos os níveis de qualificação. Logo, existem programadores bons, médios e ruins, assim como existem jogadores de futebol bons, médios e ruins. Existem ainda os programadores brilhantes, que equivalem ao que no futebol chamamos de “craque”. Mas por que resolvi comparar os programadores com os jogadores de futebol? Ocorre que essas duas profissões apresentam algumas características em comum, sendo a principal delas a capacidade de raciocínio. Afinal, por que alguns profissionais conseguem um lugar de destaque em relação aos demais?

Para que você entenda melhor, vamos descrever brevemente as “categorias” de programadores:

Programadores ruins – são pessoas que, de alguma maneira, entraram na área de desenvolvimento de software, mas não possuem a menor habilidade ou capacidade para isso. Se você entregar a elas um programa para desenvolver, por mais simples que seja, podem passar dias ou até meses tentando implementá-lo, sem sucesso. O que um programador experiente resolveria em questão de horas, acaba se transformando em dor e sofrimento para esse profissional que parece ter caído de paraquedas nessa profissão. Afinal, mesmo percebendo que não possuem nenhuma habilidade para escrever um código, é isto o que fazem (ou melhor, tentam fazer).

Seria como o jogador de futebol ruim. Certamente você já viu atuar em seu time de futebol algum jogador de muito baixa qualidade e escutou algum amigo ou comentarista falando: “A culpa não é dele, mas do técnico que o coloca para jogar!”. Da mesma forma, a culpa pela empresa não conseguir produzir os seus programas não é do programador ruim, mas da própria empresa que o contratou para uma função da qual não é capaz.

Programadores medianos – gostam de codificar, demonstram entusiasmo, mas normalmente esbarram em limitações técnicas que acabam criando uma falta de iniciativa para resolver problemas por conta própria. Na maioria das vezes, o programador mediano tenta procurar soluções prontas, ou seja, para ele “nada se cria, tudo se copia”. No mundo da programação, em algumas situações isso pode funcionar, principalmente no que diz respeito a funções usadas com frequência por todos (como por exemplo validar um número de CPF). No entanto, cada programa tem sua lógica, que deve ser construída pela criatividade do próprio programador, ao invés de tentar copiá-la de colegas ou achar algo “parecido” na Internet.

Seria como o jogador futebol mediano, que alguns chamam de jogador “protocolar”. Ele faz o básico, recebe a bola, passa a bola ao companheiro mais próximo, marca e colabora com a equipe dentro de suas limitações. Se tentar “copiar” as habilidades do companheiro que é mais capaz tecnicamente, vai acabar até prejudicando o seu desempenho.

Programadores bons – apresentam uma apurada lógica de programação, sendo capazes de construir rapidamente uma carreira bem-sucedida como desenvolvedor de software. Suas habilidades são valorizadas e seus colegas de trabalho o respeitam como profissional. Toda empresa na qual ele trabalha é enriquecida de alguma forma pela sua presença. Para todo tipo de problema proposto, é capaz de apresentar uma solução organizada e eficiente.

Seria como um bom jogador de futebol. Todo clube gostaria de tê-lo em seu time, pois além de desempenhar o básico de sua função, ainda apresenta características extras. É como um meia que serve os atacantes e ainda aparece eventualmente na área para fazer gols.

Programadores brilhantes – verdadeiros Senhores da lógica, possuem o dom de formular soluções rápidas, diferenciadas e tão inesperadas que surpreendem até a empresa em que trabalham. Um programador brilhante é comparado ao que no futebol chamamos de “craque”. Observe a figura para entender melhor. Imagine que os jogadores A, B e C são do mesmo time.

O jogador A está com a bola e o jogador B é o craque. O jogador A passa a bola, que vai em direção ao jogador B. Antes da bola chegar aos pés do jogador B, ele já sabe que irá passá-la ao jogador C, pois o craque tem uma visão periférica do ambiente em que está envolvido, ao contrário dos jogadores ruins ou medianos, que receberiam a bola e ainda precisariam de um tempo para pensar o que fazer, sendo provavelmente desarmados antes de executar qualquer ação.

Mas não é apenas isso. O craque sabe não apenas a qual jogador irá repassar a bola, mas já prevê qual a ação irá realizar depois disso. Na figura, essa ação é representada pela seta pontilhada. Após receber e passar a bola imediatamente ao jogador C, o craque irá correr na direção D, já esperando receber a bola de volta e dar prosseguimento à jogada. Essa é a diferença entre o craque e o bom jogador. O primeiro é capaz de prever um maior número de etapas com antecedência.

Da mesma forma, um programador brilhante, quando recebe um trabalho a executar, em pouquíssimo tempo (muitas vezes em poucos segundos) já consegue definir em sua mente um mapa lógico, ou seja, um abrangente planejamento de como o programa será implementado. Ele consegue definir em instantes uma série de etapas que os programadores menos qualificados levariam dias para planejar.

Alguns podem perguntar: “É possível um programador ruim ou mediano se tornar bom ou brilhante um dia?”. Como em toda profissão, o estudo e a dedicação podem fazer o profissional evoluir. No entanto, existe algo maior que é chamado de dom, aptidão, talento. Por que muitas vezes Romário sequer aparecia para treinar, mas nos jogos fazia gols espetaculares? Ele tinha o dom de fazer gols. Já o Rei Pelé foi um atleta exímio, cuja dedicação era reconhecida por todos, com horas e horas extras de treinamento diário. Porém, será que essa dedicação adiantaria alguma coisa se ele não tivesse o dom de jogar futebol? Nesse caso, certamente ele seria apenas um bom jogador, comum.

Quem almeja fazer sucesso em alguma profissão deve demonstrar suas aptidões e criatividade desde cedo. Muitos programadores iniciantes me perguntam:“Quais os frameworks que você recomenda para programar?”. Ora, se você quer aprender a programar, já quer começar usando frameworks? No meu tempo, abríamos o Bloco de Notas do Windows e já começávamos a programar. Está certo que hoje a quantidade de recursos e ferramentas é maior, porém elas podem acabar prejudicando o real aprendizado e desenvolvimento de sua lógica de programação. Além disso, o uso de um framework pode impactar diretamente na performance de sua aplicação, pois você vai acabar incluindo em seu código uma série de funções que não irá utilizar. Lembre-se que quem utiliza coisas prontas é o programador mediano. Se você quer ser bom ou brilhante, escolha um editor Web (como o Dreamweaver, por exemplo) e vire uma “máquina” de programar, evitando usar funções de terceiros, a não ser que sejam indispensáveis. Com o tempo, monte sua própria biblioteca de funções para reaproveitá-las, pois você saberá como funciona cada uma delas, não será uma “caixa preta” que vai impactar na sua aplicação.

Atualmente, as empresas encontram cada vez mais dificuldades em conseguir bons profissionais para a área de desenvolvimento. Muitas vezes, já precisei de estagiários e funcionários desta área. Quando envio as ofertas para universidades, por exemplo, praticamente ninguém as responde. Já estão todos empregados ou estagiando. Outros não respondem porque não são qualificados o suficiente. Logo, não faltam vagas de estágio ou emprego. Pelo contrário, faltam pessoas qualificadas para preenchê-las. Portanto, se você acha que tem aptidão para essa área, não pense duas vezes e invista em sua formação e capacitação, pois oportunidades certamente não irão faltar para atingir o sucesso profissional.

Anúncios

Python[aula 2]: Tipos de dados e Operações Básicas

Olá Pessoal! Essa é a segunda aula de Introdução ao Python. Nesta aula, veremos os tipos de dados e variáveis possíveis na linguagem e como ela trata cada um deles.

22262546893_3a7acd9cbf_z

Tipos básicos

Em Python, possuímos alguns tipos básicos. Ex:

● Tipos numéricos:
– Inteiro (int);
– Inteiro preciso (long);
– Ponto flutuante (float);
– Número complexo (complex);
Tipo String (str);
Tipo booleano (bool).

Para descobrir explicitamente qual o tipo da variável criada, podemos pedir em linha de comando da seguinte maneira:

type (variável)

No caso dentro do parenteses, você colocar o nome da variável que quer saber o tipo.  Como exemplo, vamos definir 6 variáveis distintas e dar valores diferentes para cada uma (arquivo exAula2.1):

a = 1
b = 1.5
c = 3+2j
d = True
e = “DanielBrandao.com.br”

Agora, vamos descobrir qual o tipo de cada uma dessas variáveis, utilizando a seguinte sintaxe:

print (type(a))
print (type(b)) # E assim por diante…

Operações Básicas

Em Python, é possível se utilizar 3 tipos de operações básicas: Aritmética, Lógica e Relacional.

As operações aritméticas são as básicas matemáticas, como:

– Adição (+)
– Subtração (-)
– Multiplicação (*)
– Divisão(/)
– Divisão inteira (//)
– Potenciação (**)
– Resto (%)

Exemplo: Calculando o resto de uma divisão (arquivo exAula2.2):

resto = (2*5)%2
print (resto)

As  Operações lógicas, temos que lembrar da famosa ‘tabela verdade’. As operações possíveis são:
– E (and);
– Ou (or);
– Não (not).

Exemplo: Tabela da Verdade AND e OR:
●True and True
●True and False
●False or True
●False or False

Já as  Operações relacionais (ou comparativas), muito utilizadas em funções (o que veremos mais adiante) são:
– Igual (==);
– Diferente (!= ou <>);
– Maior que (>);
– Menor que (<);
– Maior ou igual (>=);
– Menor ou igual (<=).

Na próxima lição, veremos como mudar o tipo de uma variável e como podemos receber um valor digitado pelo usuário para uma variável. Até a próxima.

OBS: Todos os arquivos dos exemplos utilizados em cada lição estão disponíveis em meu repositório no Github.

Python [aula 1] – Primeiros Passos (Programando em Python)

Olá, irei começar uma séria de postagens sobre programação na linguagem Python. A princípio será uma introdução, dando os primeiros passos na linguagem. Caso tenham dúvidas ou assuntos específicos a serem tratados, entre em contato ou comente nos posts para irmos aprimorando a ideia do “curso rápido”.

Introdução à programação

No mundo real, temos problemas a serem solucionados diariamente. Alguns deles podem ser auxiliados com a ajuda de um sistema de computação. Para resolvermos o problema, criamos um algoritmo que solucione a situação e para que a gente armazene e execute esse algoritmo na memória de um computador, é necessário que o mesmo seja programado (codificado). Precisamos ‘traduzir’ nossos algoritmos para uma linguagem de programação. Temos linguagens variadas, onde cada uma tem suas regras e modos de se criar, executar e armazenar dados. Linguagens como C, Java, C#, Python, etc possuem cada uma sua sintaxe e modo de se trabalhar para realizar cada tarefa.

Atualmente existem mais de 700 linguagens de programação diferentes, apesar dessa variedade tão grande existe um grupo muito pequeno dessas que são realmente utilizadas.

A linguagem Python

Python é uma Linguagem de programação de altíssimo nível lançada por Guido Van Rossum em 1991. Gerenciado pela Python Software Foundation – Modelo de desenvolvimento comunitário e aberto. O nome foi baseado no programa de TV Monty Python’s Flying Circus.

Um dos principais conceitos que foram levados em conta no projeto da Python é tornar o código dela legível. Para isso o núcleo do projeto era minimalista, com o objetivo de criar um base simples e dar um grande suporte através de bibliotecas.

Características da Linguagem

  • Identação

A identação obrigatória, faz com que você tenha que obedecer ao alinhamento padrão para que seu código funcione e seja corretamente interpretado. O que é apenas uma boa prática de programação para as demais linguagens em Python torna-se obrigatória. Palavras-chave da linguagem com sentido e um núcleo simples é o que seu criador tinha em mente.

  • Interpretada

Ser uma linguagem interpretada reflete diretamente no desempenho da linguagem. O código gerado pelo desenvolvedor é interpretado para linguagem de máquina somente no momento em que ele é atingido em tempo de execução.

  • Legibilidade

Ponto tido como fundamental no desenvolvimento da linguagem era ter uma linguagem legível. Isso facilita muito o aprendizado e o desenvolvimento dos programas, pois tenta aproximar a codificação da linguagem natural.

  • Multiparadigma

Dar liberdade ao desenvolvedor escolher o paradigma que quisesse é uma realidade da programação em Python. Existe o suporte a Programação Orientada a Objetos (POO), imperativa e funcional.

Começando com Python

Para começo de conversa, você pode baixar a implementação oficial do Python por seu site oficial. Tudo isso de forma gratuita. Acesse www.python.org e baixe a versão acima de 3.0 (será a versão que utilizaremos nos exemplos). Feito isso, instale como um software convencional, sem maiores dificuldades. Usaremos o Idle, ferramenta que une o console (interpretador) e a IDE de desenvolvimento da linguagem.

O comando mais básico que você pode fazer em Python é ‘imprimir‘ algo na tela. Para isso basta usar o comando Print seguido da instrução que você quer imprimir. Exemplo:

O resultado você pode ver no IDLE apertando enter após escrever essa linha de código. Parabéns, você acabou de escrever sua primeira linha de código em Python.

Nos próximos posts sobre Python iremos continuar entendendo o uso da linguagem e suas particularidades. Até lá!

Quer programar? Eu digo Bora!

Hoje nós não temos tantas limitações em se tratando de desenvolvimento. Linguagens tidas como para programação desktop já tem suas opções de vinculo com a web, e vice-versa. Partindo desse pressuposto, as dicas que trago aqui valem para quem quer aprender linguagens atuais para desenvolvimento de softwares e apps.

Trouxe aqui então dicas de livros e materiais úteis para quem quer começar a programar “sozinho”, mas com uma leve instrução de quem entende um pouco mais. As dicas são válidas para quem quer desenvolver para a web. Vale sempre lembrar que programar não é bicho de 7 cabeças, mas requer o mínimo de dedicação e vontade, além de organização de prefêrencia. Mas vamos ao que interessa.

JavaScript

Para a linguagem, livros atuais são bem mastigados e com vários exemplos, o que ajuda bastante. Indico os livros da editora Casa do código. Com uma variedade grande de escritores, seus livros são extremamente bem elaborados e com um material gráfico bacana. Destaque para os livros DOMINANDO JAVASCRIT COM JQUERY e COLETÂNEA FRONT-END. Outro livro bacana que encontrei grátis online é o JAVASCRIPT FURTIVO do Eric Douglas (até o lançamento desse post, o livro ainda estava em desenvolvimento contínuo).

HTML5 e CSS3

Assim como para JS, o livro COLETÂNEA FRONT-END trás uma gama de artigos e tutoriais compilados em um único livro, com dicas e ótimas formas de se trabalhar com estas linguagens básicas para o desenvolvimento web. O livro é um apanhado de textos de feras no assunto Front-end.

PHP Continuar lendo

À caminho do Java, me deparei com Python

É sempre bom buscar novos objetivos. Afinal, a vida é feita deles. E em 2013 não foi diferente. Refiz minha lista de metas a serem alcançadas e dentre elas uma pauta antiga voltou: programar em JAVA.

É, já faziam anos que esta meta entrou na minha lista de “prioridades” que, assim como muitas outras, nunca chegaram a se concretizar. Mas desta vez foi diferente. Por ter começado o ano com novos desafios, tanto profissionais como pessoais, decidi sair de uma vez por todas desta fila de atrasos.

Em fevereiro de 2013 comecei (ou retomei no caso) a estudar Java. E pela primeira vez consegui compreender o âmago da coisa. Até então me confundia nos principios da OO (Orientação a Objetos) e a aplicação ao Java, por ter estudado até então em diversas fontes diferentes. Tentando focar em dominar as bases da linguagem, consegui compreender as raízes da linguagem e da lógica da programação OO.

E, em meio aos estudos de Java, fui buscando fontes de inspiração. Nisso incluo tutoriais, livros, apostilas e cursos online. Virei devorador de artigos sobre e com toda esta busca me deparei com esse tal PYTHON. Uma linguagem que de nome conheço há anos, mas sempre a achei apenas uma rival do PHP. Continuar lendo