Como trabalhar sozinho (Ou como ser um programador solitário) Parte 1

Antes de tudo, isso não é um post de auto-ajuda ou um how-to de como se separar da equipe de desenvolvimento da sua empresa. Esse post fala apenas das dificuldades que tive, tenho e como tento contorna-las no dia a dia.
Dividirei esse post em dois por que o texto acabou ficando bem grande  e além de ser ruim escrever um só texto grande, também é ruim ler.

Desde quando comecei a estudar programação há 4 anos atrás houve sempre uma dificuldade de conseguir material bom, cursos com preço acessível e tirar dúvidas. Sem falar que quando se começa, você nunca sabe qual é o melhor livro ou treinamento, então começamos a “atirar” para todos os lados.

Listas de E-mail

Na minha opinião, tirar dúvidas em listas de e-mail não é tão legal por que quando você começa, você não sabe nada e os outros participantes sempre pedem mais informações pra tirar suas dúvidas. Bom… Se o cara não sabe nada, como ele vai dar informações do que ele não sabe? Eu sempre olho as listas de email, mas apenas isso. Já fiz umas duas perguntas até hoje e ao invés de me ajudar, só complicou. Já tentei tirar algumas dúvidas, mas outros participantes sempre faziam antes de mim, então hoje eu só olho. Uma outra coisa chata com as listas de e-mail é a sua tolerância à spam. Devido ao fato de as mensagens serem enviadas pelo seu próprio e-mail, geralmente as listas não toleram que você manda um e-mail pra todo mundo sobre um assunto qualquer. Eu já fui expulso de uma lista por que um serviço na qual me cadastrei na web pegava todos os meus contatos do Gmail e enviava convites para todos eles. Entendo essa política, mas acidentes acontecem.

Fóruns

Existem muitos fóruns para se tirar dúvidas de programação e mesmo tendo o mesmo propósito das listas de e-mail, me parece que os fóruns tem mais sucesso com isso. Acredito que isso se deva ao fato de os usuários parecerem menos “hostis” como os das listas de e-mail. Se você tem dúvidas sobre Java[bb], Engenharia de Software[bb], Ruby[bb] e Rails[bb], eu recomendo o GUJ. Na verdade é o que eu recorro quando tenho algumas dúvidas. Como sempre, eu só olho. A maioria das minhas dúvidas já está respondida. =)

Livros

Hoje eu compro livros e não encontrei ainda melhor fonte de conhecimento. Claro que alguns livros que comprei não resolveram os meus problemas, na verdade alguns até mesmo me deixaram com vontade de desistir de aprender uma linguagem ou framework, mas acabei comprando outros do mesmo assunto, o que me fez enxergar problemas de um modo diferente. Dos livros que comprei e posso recomendar sem medo de de ser feliz são:

Desenvolvendo Websites com Php[bb] – Juliano Niederauer

Eu aprendi Php[bb] com esse livro e não imagino se outro livro pode ser mais didático. Ele trás uma abordagem muito simples e de quebra você ainda aprende um pouco de banco de dados pra já sair criando seus próprios sistemas. Como o livro é bem didático, não é possível se aprofundar muito nos assuntos, mas pra quem está começando, ele é ótimo. Infelizmente emprestei o meu pra um professor da faculdade que fez questão de não me entregar e ainda sair da faculdade. Bem.. É a vida.

Aprendendo Python[bb] – Mark Lutz

Dizem que esse é o livro definitivo de Python[bb] em português. Ele foi bem traduzido e tem muito, mas muito material. Por causa da falta de tempo, nunca aprendi o bastante pra desenvolver profissionalmente em Python[bb], mas sempre que preciso e posso, faço meus scripts de automação em Python[bb]. É muito gostoso trabalhar com Python.

Use a Cabeça! Rails[bb] – David Griffiths

Esse livro está sendo muito importante na minha aprendizagem em Rails. Após comprar 2 livros que só confundiam, resolvi investir minha última ficha no Rails[bb] e acertei. A série Use a Cabeça![bb] é muito interessante pelo modo que eles passam o conteúdo. Se você tiver algum tempo, pode devorar o livro de 400 páginas em dias.

Expressões Regulares[bb] – Aurélio Marinho Jargas

Eu só descobri a real importância das expressões regulares depois de ler esse livro do Aurélio. De fácil leitura e ilustrando tudo o que for possível, o conteúdo fica fácil de ser entendido. Além de tudo, o Aurélio é muito gente fina e se você tiver alguma dúvida, aposto que ele não vai se importar em tirar ela por e-mail =)
Além desse livro, ele também escreveu um livro de ShellScript[bb] que ainda não tive a oportunidade de ler, mas assim que tiver mais tempo, comprarei.

Google

Aprenda a usar o Google. Ele não é apenas um sistema de busca simples. Refina suas buscas com a busca avançada. Já vi sistemas inteiros de busca de arquivos na internet que só utilizava o poder do Google. Não consegue encontrar o que precisa? Tente a pesquisa avançada, ou quem sabe talvez o Code Search.

Network

É importante você manter uma boa rede de profissionais amigos. Às vezes recorro à alguns pra tirar alguma dúvida ou perguntar como foi feita determinada coisa em determinada situação. Geralmente são ex-colegas de trabalho/faculdade/treinamento ou qualquer outra pessoa que tenha conhecido. Mas cuidado, não saia ligando e pedindo um tutorial por telefone. Eu já liguei algumas vezes pra tirar pequenas dúvidas de 15 segundos, mas nem sempre é legal ficar ligando ou enviando e-mail pra uma só pessoa pra cada dúvida que tiver. Se você tiver uma dúvida urgente, melhor procurar num fórum do que enviar um e-mail. Eu conheço pessoas que tem agendas tão cheias que às vezes não conseguem dar conta do e-mail pessoal, então sua resposta pode demorar dias ou até semanas. Use seu network com sabedoria.

Treinamentos

Já fiz alguns treinamentos, dei outros e posso dizer que você só vai ter informação se estiver preparado e não adianta tentar da um passo maior que a perna. No início do ano eu ministrei alguns treinamentos de uma formação Java[bb] e 60% da turma não tinha conhecimento prévio de programação. Muitos não eram sequer hard-users. Inicialmente eles não tiveram culpa por que o departamento de vendas vendeu os cursos prometendo uma coisa e a formação era outra, mas à partir do momento em que eles não reclamaram os direitos e continuaram a cursar a formação eles tentaram forçar uma barra que era difícil de  ultrapassar. Eles deveriam ter uma noção básica de algoritmos e lógica de programação para não ficarem “boiando” nos treinamentos, mas foi o que aconteceu. Se algum dia for fazer um treinamento que você não saiba direito do que se trata, tente uma opinião de alguém que conheça um pouco do assunto ou trabalhe na área.

Bem… Pararei por aqui e continuarei no próximo post.

T+ galera…

Mini curso de algoritmos com Javascript – Aula 5

Olá pessoal. Essa é a última aula do nosso mini curso de Algoritmos com Javascript. Em adição a isso, estou colocando o pdf de todas as aulas para download para quem tem preguiça de ler direto do site ou, como eu, prefere ter tudo impresso pra ler em qualquer lugar.

O link para download é o seguinte: www.mayckxavier.com/public/Algoritmos_javascript.pdf

Estruturas de Controle

As estruturas de controles servem para, como o nome diz, controlar a execução do programa. Imagine que no sistema de uma loja virtual apenas maiores de 18 anos de idade podem realizar compras. Para isso é necessário checar se a idade do comprador é maior ou igual a 18 anos. Utilizaremos a estrutura de controle IF (Se) que serve para executar determinado código caso uma expressão retorne true.
Exemplo:

image

Nesse exemplo será testado se a idade do usuário é igual ou maior que 18 anos. Se o teste entre parêntesis retornar true, será executado o código entre as chaves. Esse exemplo é bastante limitado levando em consideração que nada acontecerá se o usuário tiver idade menor de 18 anos. Sempre que houver a necessidade de que um bloco de código seja executado se a expressão retornar false, basta adicionar a o bloco do ELSE (SENÃO) após os parêntesis do IF.

image

Se houver a necessidade de fazer mais de um teste, basta utilizar o ELSE IF.

image

Você pode perceber que utilizamos o operador lógico && para dizer ao ELSE IF que o valor do produto deve ser maior que 10 e menor ou igual a 20. Você pode utilizar quantos ELSE IF forem necessários.

Switch

O Switch é utilizado quando você precisa de comparações simples como, por exemplo, comparar se a letra digitada é uma vogal ou consoante.

image

Estruturas de Repetição

As estruturas de Repetição são utilizadas quando você precisa repetir um código várias vezes enquanto uma determinada condição não for satisfeita. Em Javascript existem 3 estruturas de repetição.

While

O while irá executar um bloco de código até que sua condição seja satisfeita. Veja o exemplo:

image

Acima temos um problema. O valor de num nunca será igual ou maior que 20, então o programa entrará no que chamamos de loop infinito. Ele entrará nesse bloco de código e executará infinitamente, geralmente travando a o seu navegador. Para que isso não aconteça, é necessário que você faça com que a variável num receba um valor que não satisfaça a condição do while. Um exemplo simples seria incrementar a variável a cada loop.

image

Pronto. Agora o while executará o código um número limitado de vezes e sairá logo assim que a condição não mais o satisfizer.

For

O for funciona do mesmo modo que o while, mas utilizando ele fica mais fácil não esquecer declarar uma variável ou incrementá-la. O For apresenta uma sintaxe mais definida.

image

Podemos ver que o for recebe 3 parâmetros. O primeiro é a variável com o seu valor inicial. O segundo é a condição que deve ser satisfeita e no terceiro parâmetro você pode incrementar a variável como eu fiz ou atualizar o valor dela.

Do/While

O Do/While é mais parecido com o while, porém ao invés de ele fazer o teste antes da execução do bloco, seu teste é feito apenas depois.

image

A grande diferença entre o While e o Do/While é que no do/while o código no bloco será executado pelo menos uma vez, mesmo se a condição não for satisfeita.

 

É isso aí pessoALL. Algumas pessoas pareceram interessadas quando eu disse que queria colocar algumas dicas de jQuery. Estou pensando também em falar um pouco mais sobre Code Igniter. O que acham?

Abraços

Mini curso de algoritmos com Javascript – Aula 4

Continuando com nosso mini curso de algoritmos com Javascript, veremos hoje Incremento e Decremento, e funcções.

Incremento e Decremento

Para incrementar em 1 uma variável, basta utilizar duas vezes o sinal “+” após a variável. Para decrementar em um, faça o mesmo, porém utilizando o sinal de “-”.
Exemplo:

image

Comentários

Comentários são utilizados quando você precisa descrever parte de um código ou apenas para sinalizar algo importante como um lembrete. Em Javascript existem comentários de linha e de bloco. É importante sempre fazer comentários quando for necessário.

O interpretador do Javascript irá ignorar tudo o que estiver comentado. No comentário de linha, tudo o que estiver após as barras será ignorado. Já no comentário de bloco, tudo o que estiver entre o “/*” e o “*/” será ignorado.

image


Funções

Algumas vezes será necessário que você execute uma mesma rotina várias vezes. Para que você não precise reescrever o mesmo código várias vezes, existem as funções. Uma função permite que você passe parâmetros para ela. A função irá realizar o bloco de código definido dentro das chaves com ou sem os parâmetros passados.
Exemplo:

image

No exemplo anterior nós temos a função “soma” que recebe dois números. Ela soma esses dois números e retorna o resultado da soma.
O comando return utilizado no final da função retorna a soma das duas variáveis que pode ser utilizado do lado de fora da função como mostra o exemplo baixo.

image

É isso aí pessoal. Na próxima aula veremos Estruturas de Controle e Estruturas de Repetição, que são fundamentais para o desenvolvimento de uma aplicação.
Abraços

Mini curso de algoritmos com Javascript – Aula 3

Continuando com o mini curso, hoje veremos como pegar dados dos usuários e operadores relacionais.

Pegando dados externos

Como já falamos anteriormente, para um programa funcionar ele deve ter uma entrada de dados para que eles sejam processados e serem enviados para uma saída. Utilizando o comando “window.prompt” do seguinte modo:

image

Ao executar o código acima, serão exibidas duas janelas no navegador, uma para cada comando “window.prompt” e o que for digitado será inserido na variável correspondente.

image

image

A opção “Impedir que esta página crie caixas de diálogo adicionais” foi adicionada pelo próprio navegador.
Agora que podemos pegar dados dos usuários, podemos utilizar esses dados para que nossos programas comecem a ter vida.

Exercício:
1 – Utilize as caixas de prompt (window.prompt) e faça um pequeno programa que peça alguns dados para o usuário e os imprima em tela, um por linha.

Operadores

Operador de Atribuição

Como já vimos anteriormente, para atribuir um valor a uma variável, é utilizado o sinal de “=”. Você pode atribuir valores numéricos, Strings e booleanos às suas variáveis.

Operadores Aritméticos

Operadores Aritméticos servem para calcular números e valores em variáveis. Em Javascript nós temos os seguintes Operadores Aritméticos:

Operador Simbolo
Adição +
Subtração -
Multiplicação *
Divisão /
Módulo (Resto da Divisão) %

 

Utilizaremos o sinal de % quando precisarmos ter o resto de uma divisão, diferente de / que retorna o resultado de um número dividido pelo outro.

Exemplo:

image

Operadores Relacionais

Os operadores relacionais são utilizados quando você precisa descobrir a relação entre um valor e outro. Os Operadores Relacionais são:

Operador Símbolo
> Maior que…
< Menor que…
>= Maior ou igual a…
<= Menor ou igual a…
== Igual a…
!= Diferente de…

 

Os Operadores Relacionais retornam sempre um valor booleano, ou seja, true (verdadeiro) ou false (false). Podemos testar os operadores do seguinte modo:

image

Operadores Lógicos

Os operadores lógicos servem para se utilizar várias operações relacionais em uma mesma linha.

Operador Símbolo
&& E
|| Ou
! Não

 

Os Operadores Lógicos “&&” e “||” seguem a lógica da tabela verdade, descrita abaixo:

A B A && B
Verdadeiro Verdadeiro Verdadeiro
Verdadeiro Falso Falso
Falso Verdadeiro Falso
Falso Falso Falso

 

A B A || B
Verdadeiro Verdadeiro Verdadeiro
Verdadeiro Falso Verdadeiro
Falso Verdadeiro Verdadeiro
Falso Falso Falso

 

Obrigado pelos comentários pessoal e até a próxima.

Mini curso de algoritmos com Javascript – Aula 2

Nessa nossa segunda aula veremos como iniciar na programação com Javascript.

Programando

A partir de agora, utilizaremos uma linguagem de programação. Assim podemos ver melhor os resultados e realmente programar. Utilizaremos a linguagem Javascript por ser fácil e não ser necessário a instalação de nenhum programa na maioria dos sistemas operacionais atuais no mercado, entretanto é recomendado que você utilize um editor de textos que faça a coloração do seu código para que fique mais fácil o aprendizado. Nos exemplos da apostila será utilizado o GVim (http://www.vim.org/).

Antes de começarmos a escrever é necessário saber o que é o Javascript. Javascript foi inicialmente criada pela Netscape em 1995 para se desenvolver websites dinâmicos tendo em vista que no inicio da internet todos os sites eram estáticos, ou seja, não haviam mudanças em seu comportamento inicial. A linguagem tem total integração com o HTML por meio do DOM (Document Object Model), assim a mesma pode manipular qualquer elemento em uma página. Devido ao seu sucesso, o Javascript hoje é suportado pela maioria dos navegadores que seguem os padrões W3C () e outros no mercado.

O que é necessário para programar em Javascript?

Apenas um navegador, como o Mozilla Firefox, Internet Explorer, Google Chrome e Safari, e um editor de texto, como o Bloco de Notas (Microsoft Windows), GEdit (GNU/Linux com a interface Gnome) ou Vi (Utilizado em grande parte das distribuições GNU/Linux), pode ser utilizado para programar em Javascript. Recomendo que utilize um editor que tenha highlight (utiliza cores para mostrar diferentes elementos no programa), como o Notepad++ (http://notepad-plus.sourceforge.net/), para que a programação seja mais fácil e encontrar erros mais rapidamente. É necessário também salvar o arquivo com a extensão “.htm” ou “.html” para que o navegador execute o que está escrito no arquivo.

Variáveis

Variáveis são espaços em memória onde podemos alocar algum valor temporariamente. Como o nome diz, o valor de uma variável pode ser alterado.

image

Acabamos de inicializar uma variável, mas a mesma ainda não tem valor algum. A seguir, um exemplo de uma variável recebendo valores.

image

O código acima cria a variável “num”, atribui o número 10 como valor para ela e por fim imprime o valor da variável em tela com o comando “document.write”. Sempre que precisar imprimir um texto, um número ou o valor de uma variável utilize-o.

Após esses pequenos exemplos já podemos definir algumas regras para trabalhar com o Javascript com linguagem.

1 – Sempre que for definir criar uma variável, escreva “var” antes do nome da mesma. Isso será bastante útil e seu benefício será mostrado quando falarmos sobre escopo de variável mais à frente;

2 – Toda linha deve terminar com o sinal de “;” (Ponto e vírgula). Assim o interpretador saberá que aquela linha de código acabou.

3 – Um código em Javascript deve ser colocado entre as TAGS “<script>” e” </script>”. Isso é apenas para realizar nossos algoritmos. Caso você trabalhe com Html seguindo os padrões W3C, será necessário mais informações dentro da Tag “<script>”, mas esse não é o nosso foco no momento.


Tipos de Variáreis

O Javascript tem três tipos de variáveis: Numérico, Booleano e Cadeias de Caracteres.
As variáveis numéricas contem números, sejam eles inteiros ou de ponto flutuante e podem ser utilizadas para fazer cálculos de qualquer tipo.
Exemplo:

image

Os dois modos para criação de variáveis e atribuição de valores estão corretos. Podemos declarar uma variável e depois atribuir um valor à ela ou no ato da declaração da variável, definir um valor à ela.

As variáreis booleanas podem conter apenas dois valores: “verdadeiro” ou “falso”.
Exemplo:

image

As variáveis do tipo cadeia de caracteres podem receber qualquer tipo de texto. Para isso é necessário colocar aspas duplas (“) ou simples (‘) no início e no fim da cadeia de caracteres.

Exemplo:

image

Exercícios:

1 – Esse exercício é apenas para fixação de conceitos. Crie variáveis com nomes diferentes e atribua valores a elas. Imprima o valor das variáveis com o comando “document.write”.

Obs.: Para fazer uma impressão por linha, você pode utilizar a tag de HTML “<br>”. Para isso, basta escrever o código como no exemplo abaixo.

image

No exemplo acima, estamos utilizando o sinal “+” para concatenar as cadeias de caracteres, que agora chamaremos de String. Concatenar significa ligar, então utilizaremos a palavra “concatenar” para dizer que estamos ligando duas Strings.

Arrays

Traduzir “array” de um modo fácil seria dizer que ele é uma “variável que tem o valor de várias variáveis”. Dentro de um array é possível colocar vários valores diferentes.

image

Para utilizar um array é necessário que antes de atribuir valores aos seus índices (Um índice é um espaço dentro do array onde podemos armazenar dados), você o declare com o comando “new Array()”. Após isso basta atribuir valores aos seus índices, que podem ser numéricos ou associativos.

Índices Numéricos

São os índices de um array representados por números.

image

Do mesmo modo que você atribui valores aos índices, você pode acessar seus valores utilizando o nome do array e seu índice entre chaves como no exemplo acima. Se você atribuir dois valores a um mesmo índice, o mesmo será substituído.

Índices Associativos

Índices Associativos funcionam como os numéricos, mas ao invés de números, strings são utilizados para sinalizar um índice.

image

 

É isso aí pessoal. Na próxima aula vamos ver como pegar dados digitados pelo usuário.
T+

Mini curso de algoritmos com Javascript – Aula 1

Fala galera. Há algumas semanas que criei um material de Algoritmos para a empresa onde eu estava trabalhando, mas como a linguagem escolhida por mim para o material foi Javascript eles pediram para eu refazer em Português Estruturado. Considero Javascript uma boa linguagem para começar por não precisar de nada instalado (geralmente o sistema operacional terá tudo o que você precisa) e por você já poder trabalhar com ela assim que aprender bem. Caso haja algum erro, por favor avise por comentário ou por e-mail.

Sem mais delongas. Vamos ao curso.

Algoritmos

Um algoritmo é uma seqüência de instruções definidas para serem executadas mecanicamente. Todos os dias realizamos algoritmos e não percebemos. Basicamente todas as manhãs nós nos levantamos da cama, tomamos o café da manhã, nos arrumamos e vamos ao trabalho. Entre cada uma dessas ações descritas, realizamos várias outras ações. Nosso próprio corpo realiza algoritmos o tempo inteiro realizando decisões. Se nos machucamos, sentimos dor. Se o ambiente externo tem temperatura baixa, o corpo treme para tentar aumentar a temperatura novamente.

Todo algoritmo segue uma seqüência lógica. Geralmente um algoritmo é lido de cima pra baixo e da esquerda pra direita. Cada linha de código é lida e, caso não haja nenhum erro, executada e logo depois é lida a próxima linha e assim sucessivamente até terminarem as linhas do algoritmo.

Como exemplo de algoritmo podemos pensar em um ser humano andando. Observe:

1. Levantar a perna direita

2. Inclinar o corpo para frente

3. Baixar a perna direita

4. Apoiar o pé direito no chão

5. Levantar a perna esquerda

6. Baixar a perna esquerda

7. Apoiar o pé esquerdo no chão

8. Levantar a perna direita…

Outro exemplo de algoritmo seria fazer um calculo simples como a soma ou multiplicação de dois números como no exemplo abaixo:

1. Ler primeiro número

2. Ler segundo número

3. Somar os dois números lidos

4. Exibir o resultado

O que é um programa?

Um programa é um ou mais algoritmos escritos numa linguagem de programação. Existem diversas linguagens de programação atualmente. A grosso modo as linguagens mais fáceis são chamadas de “linguagens de alto nível” e as mais difíceis são chamadas de “linguagens de baixo nível”. As Linguagens de Baixo nível são assim chamadas por que você precisa trabalhar mandando comandos e recebendo respostas direto para o hardware. As Linguagens de Alto nível são assim chamadas por que elas “escondem” as tarefas difíceis como trabalhar direto com hardware, o que facilita o desenvolvimento do código e aumenta a velocidade de programação.

Exercícios:

1. Escreva um algoritmo para pentear o cabelo. Tente ser bem especifico e detalhado em cada ação realizada.

Entrada e saída de dados

Muitas vezes não percebemos, mas para haver o processamento de informações, é necessário ter informações para que elas sejam processadas. Um programa precisa que dados sejam inseridos nele para que eles sejam processados e retorne algum resultado daquele processamento. Esses dados podem ser inseridos pelo usuário do programa e algumas vezes o usuário não sabe que está inserindo dados. Digitar texto em um formulário eletrônico ou o simples ato de copiar um arquivo para o seu computador é considerado entrada de dados.

entrada_saida_dados

Exercício: Escreva alguns modos de entrada e saída de dados. Ao lado de cada um, diga se é entrada ou saída.

 

Por enquanto é só pessoal. Aguardem a próxima aula até o fim da semana.