Protocolos: entendendo a conversa na Rede

Veja o primeiro post na série “Como funciona a Internet?”. (LINKAR)

Diferentes interpretações

Diferentes interpretações para a mesma coisa pode gerar problemas…

Você provavelmente já ouviu falar de vários protocolos da Internet. Por exemplo, o Hypertext Transfer Protocol. Nunca ouviu? Que tal se eu falar HTTP, se lembra agora?
O protocolo HTTP é o que usamos para ver sites através de um navegador – é isso que quer dizer um http:// na frente de cada endereço de site. Se você já usou algum servidor FTP, você sabe que ele serve para transferir arquivos (File Transfer Protocol).

Dois dos protocolos mais importantes são o Protocolo de Controle de Transmissão (TCP) e o Protocolo de Internet (IP). Na maioria dos artigos e fóruns de Internet você irá vê-los citado em conjunto, como TCP/IP.

O que esses protocolos fazem? No nível mais básico, esses protocolos estabelecem regras para como a informação é transmitida através da Internet. Sem essas regras, você precisaria se conectar diretamente a outros computadores para acessar a informação que eles possuem. Você também precisaria que tanto seu computador quanto o computador destino entendesse uma linguagem exótica comum.

Cada computador na Internet possui um endereço IP. É assim que uma máquina encontra outra na Internet. Quando você envia uma mensagem ou captura uma informação de outro computador, os protocolos TCP/IP são responsáveis por fazer a transmissão possível.

Sua requisição viaja pela Internet até chegar a um DNS (Servidores de Nome de Domínio) que encontram o servidor destino. O DNS aponta a requisição na direção correta. Uma vez que o computador destino recebe a requisição, ele pode enviar uma resposta para seu computador. A resposta pode viajar por um caminho totalmente diferente para voltar até você. Essa proposta flexível de transmissão de dados é parte do que faz a Internet uma ferramenta tão poderosa.

Como a Internet funciona – Parte 1 de 2

Muito embora a Internet ainda seja uma tecnologia jovem (ou melhor, saindo da adolescência), é difícil imaginar a vida sem ela. A cada ano engenheiros criam mais dispositivos que se juntam à Internet. Essa Rede de redes atravessa o planeta e até mesmo se estende ao espaço. Mas o que a faz funcionar?

Para entender a Internet, ajudará olhá-la como um sistema com dois componentes principais. O primeiro desses componentes é o hardware, como cabos que transmitem milhões de dados e informações para todos os lados a cada segundo através do globo, até chegar a seu computador. Outros tipos de hardware que acessam a Internet incluem roteadores, servidores, torres de celular, satélites, rádios, smartphones, dentre outros. Todos esses dispositivos juntos criam uma grande Rede. A Internet é um sistema maleável – muda de pequenas formas à medida que novos dispositivos se conectam ou saem de diferentes redes ao redor do mundo. Alguns desses dispositivos podem ser estáticos, ou seja, não sofrem mudanças e, portanto funcionam como a espinha dorsal da Internet (backbones).

Alguns dispositivos funcionam como fim – o computador, smartphone ou outro dispositivo que você possa estar usando para ler este ebook. Chamamos esses “dispositivos-fim” de clientes. Máquinas que armazenam informações que procuramos na Internet são servidores. Outros elementos são chamados de nós que servem como uma forma de passar a solicitação ou informação para frente até chegar a seu destino. E por fim existem linhas de transmissão que podem ser físicas, como no caso dos cabos e fibras óticas e sinais de satélite ou rádio, por exemplo.

cabos

Gráfico que mostra os cabos submarinos usados para transmitir dados através dos continentes

Todos esses componentes não seriam capazes de criar uma rede sem um segundo componente da Internet: os protocolos. Protocolos são regras que as máquinas seguem para completar tarefas e se entenderem. Sem que existissem protocolos fixos e idênticos nos diferentes dispositivos, eles seriam incapazes de se comunicarem. Uma máquina seria incapaz de entender o que a outra está falando, pois estão usando protocolos diferentes.

Veremos do que se tratam no próximo post.

 

O que é Programação Web e Programação Desktop?

O desenvolvimento de software começou com aplicações desktop, ou seja, que podiam ser usadas direto no computador, sem depender de conexão com a Internet. Com o advento da internet, as aplicações web ganharam importância. Exemplos de aplicações desktop são o Word, Excel, Media Player, etc. Exemplos de aplicações web são os comércios eletrônicos, mídias sociais, etc.

Por definição, uma aplicação desktop é qualquer software que pode ser instalado em um computador e usado para executar tarefas específicas. Algumas aplicações desktop também podem ser usadas por vários usuários em um ambiente com rede.
Desenvolvimento de aplicações web, no entanto, logo começou a substituir ou complementar as aplicações desktop, que eram difíceis de serem vendidas, mantidas, compradas, atualizadas.

Aplicações web usam um navegador web como Mozilla Firefox, Internet Explorer, Google Chrome, dentre outros, como interface. Essa é uma das razões para que aplicações web sejam tão populares atualmente, afinal todo computador possui navegadores e internet, sendo possível acessar a mesma aplicação de qualquer sistema operacional (Linux, Windows, Android, MaCOS), o que não ocorre com aplicações Desktop, que normalmente funcionam em apenas um ou outro sistema operacional. Muito embora, com algum tipo de trabalho seja possível fazer o mesmo código funcionar em diferentes sistemas operacionais, mas não iremos nos aprofundar, pois esse curso se trata de programação para iniciantes.

Web

Desktop

Vantagem: Aplicações web são acessadas pelo navegador, não precisando de instalação no computador.

Desvantagem: Precisam ser instaladas no computador

Vantagem: São acessíveis de qualquer lugar com Internet.

Vantagem: Não depende de sistema operacional.

Desvantagem: Ficam restritas ao computador que possui a instalação.

Desvantagem: Fica restrito ao Sistema Operacional.

Vantagem: Os dados do cliente são mais protegidos contra vírus, pois a aplicação fica dentro de um cofre chamado navegador. Vantagem: Os dados são armazenados localmente, portanto o risco de vazar dados por causa de uma falha do servidor externo não existe.
Desvantagem: Na falta de Internet ou de conexão de qualidade, a aplicação web pode ficar inacessível ou inutilizável. Vantagem: Não precisa necessariamente de conexão com a internet e funciona mesmo sem a mesma (claro, há exceções).
Vantagem: Layouts podem ser mais criativos e atualizados com mais frequência, devido a facilidade de divulgar atualizações. Vantagem: Aplicações desktop tendem a ter uma experiência de usuário melhor para tarefas complexas.
Vantagem: Integração com webservices é mais fácil

Vantagem: Versão mobile pode ser criada mais facilmente se for usado HTML e JavaScript

Vantagem: Mais confiabilidade na estabilidade do software, pois o desenvolvedor saberá que tipo de computador irá rodar a aplicação.

Breve história da computação – Parte 2 de 2

Se você ainda não leu, veja a primeira e segunda geração na primeira parte do post.

Terceira geração – Circuitos Integrados: 1963 – 1971

A invenção do circuito integrado em 1958 nos deu uma terceira geração de computadores. Com essa invenção, computadores se tornaram menores, mais poderosos, mais confiáveis e eram capazes de rodar diferentes programas ao mesmo tempo.

O primeiro Circuito Integrado
O primeiro Circuito Integrado

Resumo:

  • Construída a partir de circuitos integrados
  • Os circuitos integrados permitiram redução de custo, redução de tamanho e aumento da velocidade de processamento que alcançou a ordem de microssegundos (10-6)
  • Tem início o uso de Sistemas Operacionais mais avançados

 

Quarta geração – Microprocessadores – de 1971 até hoje

A aparição do microprocessador em 1971 permitiu que a quarta geração surgisse. Ainda vivemos a quarta geração. Microprocessador ou processador é um dispositivo que possui milhares de circuitos integrados que por sua vez possui milhões de transistores, construídos sobre uma camada de silício. Nesta geração os computadores deixaram de ocupar salas para ocupar o espaço de um pequeno chip.

Quatro anos após o surgimento do processador, o Altair 8800 tornou-se o primeiro computador pessoal a ser lançado no mercado. Em 1980 o Microsoft Disk Operation System (MS-DOS) nasceu e em 1981 a IBM apresentou o computador pessoal (PC) para uso doméstico e corporativo. Três anos depois a Apple lançou o computador Macintosh com sua interface guiada por ícones e os anos 90 nos apresentou o sistema operacional Windows. O resto é história. Atualmente as melhorias nos computadores são mais focadas na conectividade e mobilidade.

Se você acha que os computadores surgiram no século 19, você se engana. Os primeiros computadores mecânicos surgiram em 1642.

1642 – Primeira máquina de calcular

  • Blaise Pascal – Cientista Francês – Tinha apenas 19 anos
  • Foi criado para ajudar o pai, que era coletor de impostos do governo Francês
  • Inteiramente Mecânica
  • Engrenagens movidas a manivelas operadas à mão
  • Fazia apenas SOMA e SUBTRAÇÃO
Pascalina
A Pascalina, primeira máquina de calcular

 

Com o passar do tempo surgiram diversos outros motores diferenciais (máquinas de calcular) até o ano de 1834 quando o pai do computador e avô do computador digital moderno, o inglês Charles Babbage, criou um motor analítico inteiramente mecânico e com quatro componentes: memória, unidade de computação, leitor de cartão perfurado e cartão perfurado.

Motor Analítico criado por Charles Babbage
Motor Analítico criado por Charles Babbage

 

Por que é importante saber isso?
Porque se você fosse um cirurgião cardíaco, iria querer saber como o antibiótico surgiu!

 

 

Breve história da computação – Parte 1 de 2

O computador como conhecemos hoje teve seu início com um professor inglês de matemática do século XIX chamado Charles Babbage. Ele projetou o Motor (Máquina) Analítico e é neste projeto que os computadores atuais se baseiam.

De forma geral, computadores podem ser classificados em quatro gerações.

Cada geração durou certo período de tempo e cada uma nos deu um novo e melhor computador ou uma melhoria em um computador que já existia.

Primeira geração – Válvulas: 1937 – 1946

Em 1937, o primeiro computador digital era chamado de Atanasoff-Berry Computer (ABC). Em 1943 um computador eletrônico chamado Colossus foi construído para o exército americano. Outras linhas de desenvolvimento continuaram evoluindo até 1946 quando o primeiro computador de propósitos gerais, o ENIAC (Eletronic Numerical Integrator and Computer) foi construído. O propósito principal do ENIAC era fazer cálculos balísticos que nas mãos de uma equipe sem tecnologia demorava no mínimo três dias para serem feitos. Este computador pesava 30 toneladas e possuía 18.000 válvulas que eram usadas para processamento. Quando este computador foi ligado pela primeira vez, as luzes de algumas regiões da Filadélfia se apagaram. Computadores desta geração podiam executar apenas uma tarefa e não tinham sistema operacional.

ENIAC
ENIAC

 

Colossus
Colossus

Resumo:

  • Estímulo: 2a. Guerra Mundial
  • Usavam válvulas eletrônicas
  • Esquentavam MUITO
  • Vários quilômetros de fios
  • Lentos
  • Ocupavam MUITO espaço (enormes)

 

Segunda geração – Transistores: 1947 – 1962

Essa geração de computadores usou transistores ao invés das válvulas, pois eram mais confiáveis. Em 1951 o primeiro computador comercial foi apresentado ao público: o UNIVAC 1 (Universal Automatic Computer). No ano de 1952 a TV CBS utilizou o UNIVAC para a prévia dos resultados da eleição para presidente dos Estados Unidos. Em 1953 os computadores IBM das séries 650 e 700 entraram no mercado para deixar suas marcas no mundo. Durante essa geração mais de 100 linguagens de programação foram desenvolvidas, dentre elas a FORTRAN, que em 1957 surgiu para simplificar a programação, se tornando a primeira linguagem de alto nível e que ainda hoje é conhecida (26ª linguagem mais utilizada no mundo, segundo o ranking do Tiobe.com). Nesta geração os computadores tinham memória e sistemas operacionais. Mídias de armazenamento como fitas e discos também foram usados, assim como impressoras.

UNIVAC
UNIVAC

Resumo:

  • Substituiu válvulas por transistores
  • Substituiu fios de ligação por circuito impresso
  • Estas substituições permitiram reduzir custos e tamanho e aumentar a velocidade de processamento

Maçãs e laranjas: diferenças entre compilador e interpretator

Depois que o programa é escrito e todos os erros são consertados, ele pode ser executado de duas formas, dependendo da linguagem. Em algumas linguagens, como C ou Pascal, o programa é transformado em uma linguagem de máquina (binário) por um compilador. Em outras linguagens, como LISP, não possuem compiladores, mas possuem interpretadores para ler e interpretar o programa cada linha por vez e traduzir isso em código de máquina. Outras poucas linguagens, como BASIC, possuem tanto compiladores como interpretadores.

Principal diferença entre um compilador e um interpretador

O interpretador pega uma instrução em linguagem de alto nível, a transforma em um tipo de código intermediário (não de máquina, ainda). Somente quando o programa é chamado, o interpretador de sua linguagem traduzirá a instrução do código intermediário em código de máquina, ou seja, o computador precisa traduzir em tempo real para código de máquina.

Já o compilador traduz o programa inteiro em código de máquina de uma só vez e então o executa, criando um arquivo que pode ser rodado (no Windows é chamado de executável). Durante a tradução ele gera um relatório de erros, caso existam, enquanto o interpretador interrompe a tradução para código de máquina somente quando encontra o primeiro erro.

Como o compilador traduz todo o código de uma só vez, ele gasta uma quantidade maior de tempo analisando e processando a linguagem de alto nível em comparação com o interpretador, que gasta menos tempo nesse mesmo processo. Em geral, o tempo para execução de um código é menor em um código compilado que um interpretado, ou seja, código compilado geralmente roda mais rápido, pois já está todo traduzido em linguagem de máquina, enquanto o interpretado é traduzido à medida que for sendo solicitado, instrução por instrução.

Confuso? Tenho certeza que sim, pois se não ficar confuso quer dizer que você só acha que entendeu, mas na verdade não entendeu nada.

Na compilação, o código de alto nível é traduzido para um código de máquina executável inteiramente de uma vez, desta forma o pré-processamento é mais lento, mas o processamento por parte do computador, quando solicitado por um usuário, por exemplo, é mais rápido.

Na interpretação, o código de alto nível é traduzido para uma linguagem intermediária, ou seja, que não é nem de alto nível nem de máquina, e que pode ser interpretada apenas por um interpretador de uma linguagem. O interpretador da linguagem traduz instrução por instrução para linguagem de máquina à medida que for sendo solicitado. Por esse motivo, o pré-processamento é mais rápido, mas o processamento é mais demorado.

Evolução das Linguagens de Alto Nível

Conforme falado neste post, todos os computadores operam por conta de programas que falam a mesma língua do computador, longas sequências de instruções chamadas de código de máquina endereçadas ao hardware e que são escritas em notação binária, ou seja, usam apenas os dígitos 0 e 1.

A primeira geração das linguagens precisava de longas sequências de números binários para representar operações matemáticas como “adicionar”, “subtrair”, “dividir”.

Como o desenvolvimento de programas em código de máquina é impraticável, tedioso e totalmente propenso a erros, surgiram as linguagens de segundo nível, que usavam mnemônicos simples como “A” para indicar “ADD” (somar) ou M para “MULTIPLY” (multiplicar), que então eram traduzidos para linguagem de máquina por um programa chamado Assembler, conforme já falado.

A dificuldade de portar programas através de diferentes computadores levou ao desenvolvimento das linguagens de alto nível que são tão conhecidas hoje em dia, pois permitiram ao programador ignorar detalhes de baixo nível, que não estavam relacionadas diretamente ao seu objetivo final, às regras de negócio.

Posteriormente ficou reconhecida que quanto mais parecida a linguagem de programação fosse com a linguagem natural, menos suscetível a erros seria o programa. Essas linguagens de terceira geração foram desenvolvidas para resolver problemas singulares. Diferentemente das linguagens de máquina e simbólicas (Assembly), elas variavam menos entre diferentes computadores. O código escrito em linguagem de alto nível é traduzido em código de máquina por um programa chamado compilador ou interpretador.

Os primeiros computadores eram usados quase exclusivamente por cientistas, tanto é que a primeira linguagem de alto nível, a FORTRAN, foi desenvolvida para aplicações de engenharia. Uma linguagem que lidava melhor com algoritmos recursivos, chamada LISP, também foi criada em seguida. A primeira linguagem direcionada para aplicações comerciais, o COBOL, ainda é amplamente usada nos dias de hoje em grandes sistemas corporativos.

BASIC foi desenvolvida como uma ferramenta de ensino para alunos de graduação e depois se tornou a principal linguagem de programação responsável pela revolução do computador pessoal. Em 1971 um professor suíço criou a linguagem estruturada a qual ele nomeou Pascal, em homenagem ao primeiro homem a criar com sucesso uma calculadora mecânica.

Em 1972 a linguagem C foi criada, seguida pela criação de sua extensão chamada de C++, que provavelmente se tornou uma das linguagens de programação de propósito geral mais amplamente utilizada, devido a sua capacidade de lidar com a programação orientada a objetos.

Java é uma linguagem orientada a objetos parecida com C++, mas sem algumas funções que tornavam a programação mais suscetível a erros por parte do programador. Java foi desenvolvida especificamente para escrever programas que fossem possíveis de serem transferidos com segurança pela internet e executados sem medo de que vírus fossem instalados no computador.

O que é um programa de computador?

Um programa de computador é formado por um conjunto de instruções que irão fazer o computador executar algo. As instruções básicas de computador são compostas por uma sequência de “sim” e “não” ou “ligado” e “desligado” (on/off) que o computador segue enquanto roda um programa.

Essa sequência de “ligado” e “desligado” é chamado de sistema binário, que é um sistema de numeração formado por apenas dois algarismos (0 off / 1 on). Ou seja, esse sistema admite apenas duas possibilidades, sempre opostas, como: tudo/nada, ligado/desligado, presença/ausência, esquerdo/direito, alto/baixo, verdadeiro/falso, aceso/apagado.

Os “ligado/sim” são codificados (ou seja, escritos em programação) como 1 e os “desligado/não” como 0. Números e letras também são representados todos dessa maneira: 0000 = 0, 0001 = 1, 0010 = 2, 0011 = 3, etc.

 

binarios

A vida não deve ter sido fácil para os programadores de antigamente…

 

No início da programação os códigos pareciam algo como “10100101010101000101010101010101”, até que alguém percebeu que, como o objetivo da programação é tornar a vida mais fácil, seria mais lógico se criassem um programa que receberia um tipo de código que fosse fácil de criar e esse programa, então, traduziria para código de máquina (em 0 e 1, portanto, binário).

 

Assim a linguagem a Assembly foi criada, de forma que o código de computador passou a ficar parecido com “add $5, $7, $8”, o que apesar de não ser totalmente legível ainda assim era melhor que “010101”. O programa que traduzia a linguagem Assembly para linguagem de máquina era chamado de Assembler.

assembly

Programa em Assembly: diversão garantida!

 Então alguém teve a ideia de criar um programa que traduziria palavras em inglês para a linguagem Assembly, para que pudessem escrever em inglês.

Assim as linguagens de alto nível foram criadas. Agora os programadores podiam codificar coisas como “x = 5 + 8” ou String nome = “Ivens Rocha”, o que tornou o código muito mais fácil de ler.

assembly 2

FORTRAN, a primeira linguagem de alto nível. (E hoje poderia ser considerada de baixo nível, devido a grande evolução das linguagens de programação modernas)

Este novo jeito de programar fazia com que o compilador traduzisse o código contendo palavras em inglês para linguagem Assembly, para que ela então traduzisse para linguagem de máquina e em seguida o computador entendesse e executasse aquela série de “sim” e “não” (1 e 0).

Esta nova forma de codificar tornou possível criar códigos mais complexos, mais organizados e mais fáceis de ler, manter e continuar.

Programar, em última instância, significa criar instruções. Dependendo da velocidade do computador, ele consegue executar milhões de instruções por segundo. Por exemplo, um jogo 3D complexo como Call of Duty possui milhões de linhas de código que são executadas por segundo. O trabalho de um programador é ser capaz de não focar apenas em como o produto final aparenta ser, mas em como cada pequena parte roda individualmente e então ser capaz de escrever todas as linhas de código que façam com que o programa como um todo funcione.

Quando você aprender a como programar, você aprenderá a quebrar o objetivo em pequenas partes e trabalhar somente em uma parte por vez. Isso serve para que você foque apenas no que precisa ser feito agora, deixando o futuro para o futuro.

 

A Curiosity, lançada pela NASA e que vaga por Marte desde 2012 usa 2.500.000 linhas de código, na linguagem C.

Por exemplo, quando você estiver programando um jogo, se você estiver focado em desenvolver o comportamento dos tiros de uma arma, você deixará o resto para depois. Quando você quiser programar a forma como um jogador irá se movimentar no mapa, você irá programar apenas isso, deixando todo o resto para depois. Depois disso tudo, você dará um passo pra trás e juntará todos os pedaços. Apesar de parecer difícil, esse é um dos aspectos mais básico que você aprenderá nesse curso e ficará extremamente acostumado com isso. Isso é conhecido como abstração.

O que é hospedagem e por que precisamos dela?

Quando um site e acessado, nada mais é do que estar acessando dados que estão localizados em outro computador. Para colocar um site no ar, então, não existe mistério: é só deixar seu computador ligado na Internet e outras pessoas conseguirão acessá-lo. Isso se chama localhost, ou seja, é uma hospedagem local, feita por você, mantida por você.

Mas, imagine os custos de se manter um computador ligado o tempo todo? E o risco de algum invasor entrar em seus sistemas? Afinal, você não é um expert em segurança da informação. A boa notícia é: você não precisa ser.

Em um mundo onde a terceirização é o único caminho para elevar as margens de lucro, você pode contratar um serviço de alguma empresa que será responsável por manter seu site no ar por 99% do tempo. Além disso, eles possuem especialistas pagos para cuidar da segurança da máquina que seu site está. Isso se chama hospedagem.

Hospedagem é como alugar um escritório. Você pode fazer por conta própria (localhost) no quintal de sua casa ou pode pagar para ter um lugar com encanamento e segurança prontos e aos cuidados de terceiros. Para um escritório significaria alugar um espaço através de uma imobiliária e para aplicações web ou sites isso quer dizer alugar um serviço que proporcionará um espaço seguro para manter sua aplicação web no ar.
Assim como em um escritório, seu site também tem um endereço físico, chamado IP. E assim como um escritório pode ser encontrado numa lista telefônica, o site é encontrado através de servidores espalhados pelo globo chamados de DNS.

Um servidor DNS funciona como um GPS, que encontra a posição e localização exata de um servidor. Você digita um site (www.academiadocodigo.com, por exemplo), o servidor DNS descobre a posição da máquina em que o site está armazenado e pronto, se o site estiver hospedado em um endereço que esteja disponível, você recebe a resposta e visualiza a página ou aplicação web.
Existem vários tipos de hospedagem:

  • Hospedagem Virtual: como computadores com configurações potentes são caros, fica mais barato dividir o mesmo computador com diferentes sites. Os recursos da máquina são compartilhados entre todos os sites hospedados, e os custos também. Existem alguns sites que disponibilizam hospedagem gratuita, com recursos mínimos e em troca colocam propagandas no seu site. Não existe almoço grátis, nem na internet.
  • Revenda: uma empresa de hospedagem maior libera grandes lotes de máquinas para serem revendidos por outras pessoas ou companhias. A maior parte das hospedagens que você encontra na internet no Brasil é desse tipo: uma empresa aluga uma máquina potente em um grande servidor de hospedagem, como o UOL Host, e revende os mesmos serviços, mas com outra embalagem.
  • Co-location: Se você tem uma máquina própria, toda configurada do jeito que você precisa, mas necessita apenas de energia elétrica, uma banda de ótima qualidade para acesso a Internet e local refrigerado e seguro, você pode alugar um espaço e deixar seu servidor aos cuidados de uma empresa especializada. No entanto, manutenção relacionada a segurança do servidor, trocas de peças, etc. são todas de responsabilidade do cliente.

Existem outros inúmeros termos para definir uma hospedagem.
Atualmente uma das palavras mais faladas pelos profissionais da área de TI e questionadas pelos executivos da área de negócio é “computação nas nuvens”. Para que ela exista, é necessária uma hospedagem nas nuvens. Mas isso fica pra um outro post. =)

Particularidades entre desenvolvedores e programadores

Antes de mais nada devo dizer que a opinião aqui descrita é pessoal, pois este é um assunto meramente subjetivo, que nada afeta a produção de código. Você deve apenas levá-la em consideração à medida que for criando sua própria opinião.

Programadores criam programas. Eles precisam ter uma boa base matemática, mas não precisam se tornar matemáticos. Programadores precisam conhecer as melhores soluções para os problemas. Um bom conhecimento de algoritmos e raciocínio lógico é essencial. Programadores têm habilidades que abrangem uma grande área da programação e de áreas correlatas. Habilidade de comunicação e interpessoal são desejáveis, mas não imprescindíveis. As grandes empresas que produzem software na maior parte procuram programadores, pois são eles que leem as especificações e resolvem o problema, mas não projetam as soluções. Em geral são especialistas em algumas tecnologias e acabam se tornando referência por seu conhecimento em determinado assunto. Seu trabalho começa e acaba com o código.

Desenvolvedores também criam programas. Conhecimento matemático profundo é opcional, mas ajuda em momentos que precisam criar soluções para os problemas que estão enfrentando. Habilidade interpessoal e de comunicação são necessárias. São generalistas, portanto não possuem conhecimento especializado em certas áreas, mas conhecimento abrangente em várias áreas. Tem noção dos diferentes métodos e tecnologias existentes e sabe qual aplicar para conseguir o que quer.

Eu tento ser um desenvolvedor. Diferentemente de programadores, o objetivo do desenvolvedor é criar algo completo, portanto você precisa conhecer os diversos componentes e como eles se ligam para criar o resultado esperado. Programadores buscam resolver um problema, criando algoritmo, programando. Desenvolvedores são responsáveis por uma sequência de tarefas, sendo programar apenas uma delas. Ele entende o problema, busca uma solução (e de preferência que já exista pronta) para somente então programar, testar e documentar. É um processo mais amplo, mais alto, que requer menos conhecimento matemático, pois seu objetivo é entender os componentes e fazê-los funcionar juntos, programando-os caso necessário, mas não sendo necessário criar ferramentas e código que exija colocar a mão na massa em um nível que seja necessário um conhecimento matemático mais profundo. Para o desenvolvedor, o processo de programar é uma parte de um todo, pois o que ele busca é criar um produto ou serviço final por completo. Assemelha-se muito mais a um engenheiro civil, enquanto um programador se assemelha a um mestre de obras (mas um engenheiro civil que coloca a mão na massa!).

Todos os desenvolvedores são programadores, mas nem todos os programadores são desenvolvedores.

O único caminho para criar programas é se tornar primeiro um programador, conhecer as ferramentas, a lógica de programação, criar algoritmos e resolver problemas específicos, para somente então, inevitavelmente e de forma natural, se tornar um desenvolvedor que além de programar precisará entender os requisitos e a solução, buscando obter produto ou serviço desenvolvido por completo em todos os ângulos.

Se você for novo na programação, recomendo que entenda o princípio do Programador vs. Desenvolvedor e a partir de hoje busque se tornar um bom desenvolvedor: que saiba programar, mas que saiba mais ainda unir todas as melhores tecnologias e métodos para conseguir o que você quer. Deixe o difícil e trabalhoso para os gênios, nosso objetivo é eliminar complexidades.