Mulheres levantem a mão!

Você não precisa ler relatórios estatísticos ou visitar a lista de programadores notáveis da Wikipedia para perceber que nós não temos muitas mulheres trabalhando com computação. Para quem trabalha na área este fato é tão natural que nós nem mesmo falamos sobre o assunto (a não ser quando alguém faz uma piada).

Eu sempre pensei que o número pequeno de mulheres não é um problema apenas da computação, porque é fácil observar que as ciências tendem a ter um número maior de homens. Mas chamou a minha atenção que a disparidade da ciência da computação é estática ou está piorando de acordo com este artigo publicado no New York Times:

“For decades, undergraduate women have been moving in ever greater numbers into science and engineering departments at American universities. Yet even as they approach or exceed enrollment parity in mathematics, biology and other fields, there is one area in which their presence relative to men is static or even shrinking: computer science.”

De acordo com os especialistas, o fator social é determinante para explicar porque as mulheres não escolhem ciência da computação. Um artigo na ScienceDaily, afirma que as mulheres evitam as ciências e as engenharias porque elas pensam que é uma atividade solitária. Em complemento, no artigo citado do New York Times, o cientista Dr. Jan Cuny, afirma que o estereótipo nerd é um grande problema.

A discriminação também é apontada como um fator de distância, mas eu acredito que é igual ao das outras áreas profissionais. O que acontece é que o pequeno número de mulheres trabalhando com computação talvez faça crescer o sentimento de discriminação.

A discussão entre Steven Pinker e Elizabeth Spelke de Harvard causou polêmica. Eles debateram a idéia de que existe diferença de habilidades entre os homens e as mulheres, e que este fato poderia definir a escolha das carreiras.

São muitas as suposições, mas a resposta não é simples. Ações como o projeto Artemis são louváveis para incentivar o ingresso de mulheres nas carreiras de ciência e tecnologia. Sem dúvida a organização e a sensibilidade das mulheres faria muito bem a computação.

Entendendo o leitor de notícias

No artigo anterior foi apresentado um programa que lê as últimas noticias do site www.g1.com.br. Você conseguiu inferir o que cada linha do programa faz?

require 'rss'

O método require serve para carregar bibliotecas ou arquivos Ruby. Uma biblioteca é um conjunto de rotinas prontas que você pode utilizar para agilizar o desenvolvimento de programas. No exemplo, nós carregamos a biblioteca rss que oferece métodos para ler feeds. Para entender melhor como esta biblioteca facilita o trabalho, crie um novo arquivo no editor de textos e cole o código abaixo:

require 'open-uri'
feed  = open("http://g1.globo.com/Rss2/0,,AS0-5597,00.xml").read
puts(feed)

Executando este código no terminal (mesmo procedimento do artigo anterior), você vai ver na tela o conteúdo que o G1 envia para você. A biblioteca rss lê este conteúdo e o disponibiliza de uma maneira fácil de manipular dentro do Ruby. Na código abaixo estamos usando a biblioteca:

# RSS do portal de notícias www.g1.com.br
feed = RSS::Parser.parse("http://g1.globo.com/Rss2/0,,AS0-5597,00.xml")

Sem ela você teria fazer todo o trabalho. Quando você instala o Ruby, ele vem com diversas bibliotecas para facilitar a sua vida. Você também pode instalar e criar bibliotecas, nós vamos falar sobre isso mais à frente. No código acima, o “#” serve para fazer um comentário (é um trecho que não é executado).

puts "Você deseja ver notícias sobre:"
puts "(a) Cinema"
puts "(b) Economia"
puts "(c) Mundo"

O método puts imprime uma linha de texto na tela. Note que em Ruby declara-se pedaços de texto dentro de aspas.

opcao=gets.chomp

Como em linguagem matemática, neste trecho estamos atribuindo à variável opcao o valor que o método gets retorna. No exemplo, o método gets está lendo uma linha no console. Quando você executa o programa, digita a opção e pressiona enter, a variável recebe o valor que você digitou. Se você não está familiarizado com o conceito de variável, pense nela como uma gaveta onde você guarda algo par usar depois. Quando você lê uma linha no console, o conteúdo que o método gets retorna vem com o código do enter no final. Para remove-lo nós utilizamos o método chomp.

if opcao=="a"
  quer_ver="G1 - Cinema"
elsif opcao=="b"
  quer_ver="G1 - Economia"
elsif opcao=="c"
  quer_ver="G1 - Mundo"
else
  puts "Opção inválida."
  abort
end

As notícias do site G1 são divididas em categorias. Para mostrar as notícias da categoria que o usuário selecionou, nós precisamos converter a letra que ele digitou na categoria correspondente. Para fazer isso utilizamos a estrutura condicional if. Este comando serve para impor condições à execução do código. No exemplo estamos atribuindo a variável quer_ver o nome da categoria do G1 de acordo com a letra que o usuário digitou. Note que apenas o código que tem a condição verdadeira é executado. Em português fica fácil de entender:

Se opcao =  a
   quer_ver = “Cinema”
Senão, se opcao = b
   quer_ver = “Economia”
Senão, se opcao = c
   quer_ver = “Mundo”
Senão
   Opção inválida.

Observe que em Ruby para fazer uma comparação de igualdade, utilizamos dois sinais de igual e não apenas um. Funciona desta maneira para diferenciar uma comparação de uma atribuição. O método abort serve para encerrar a execução do programa.

puts "Notícias sobre " + quer_ver + ":"

Para juntar pedaços de texto, nós utilizamos o símbolo “+”.

feed.items.each do |noticia|
   if noticia.category.content==quer_ver
        puts "* " + noticia.title
   end
end

No trecho acima nós temos um loop e uma estrutura condicional. feed.items contém todas as notícias que foram lidas pela biblioteca rss. Imagine como se fosse uma tabela, cada linha tem uma notícia e cada coluna tem as propriedades (category, title, etc.). O método each passa por todas as linhas da tabela e, no exemplo, carrega na variável noticia o conteúdo da linha que ele está lendo. Com o if testamos se a categoria da notícia que está sendo lida pelo each é igual a que o usuário selecionou. Se ela for igual, então utilizamos o puts para imprimir na tela o título da notícia.

Para quem esta confortável com a linguagem eu proponho um desafio. Se não existirem notícias com o assunto que o usuário selecionou, mostre a mensagem: “Nenhuma notícia com o assunto selecionado.” Se você está achando difícil, não se preocupe. A cada artigo vai se sentir mais confiante.

Em áudio (download):

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Multiplique bons programadores

É recorrente a discussão sobre a falta de programadores qualificados e como é difícil fazer a seleção de talentos. Nas duas últimas semanas me deparei com um post sarcástico do Carlos Brando, com um texto do Jeff Atwood falando que a maioria dos candidatos não sabe programar e ontem, no jornal da Globo, Sardenberg comentou que a falta de qualificação é principal fator para as vagas sobrando no mercado.

Acho ingênuo tratar deste assunto como se na área de tecnologia o problema fosse naturalmente pior. Quando foi a última vez que você foi bem atendido em uma rede de fast-food? Empreiteiras, empresas de telemarketing, lojas de roupas etc, todos os setores sofrem com este problema. Mesmo exigindo diferentes graus de qualificação, sempre existem candidatos aquém do que é necessário. E estes, muitas vezes, são contratados por falta de opção ou para reduzir custos.

A situação nas empresas de desenvolvimento de software é agravada pela forma como usualmente trabalhamos. Se fizermos uma comparação com a construção civil, na obra de um prédio, você encontra ajudantes de pedreiro, pedreiros, mestres de obras, engenheiros civis etc. Para desenvolver um sistema você também pode ter diferentes perfis de profissionais. Só que isso acaba não acontecendo.

Nos projetos de software os requisitos mudam com maior freqüência, a especificação geralmente é superficial e quem acabada matando no peito é o programador. Desta maneira, a formação exigida dos programadores é alta. E como não é uma cirurgia coronária, se o programador não dá conta, o sistema atrasa ou sai funcionando a moda Frankenstein.

Se os programadores bons codificarem menos e acompanharem mais o trabalho de seus pares com nível técnico inferior, é possível multiplicar os resultados com qualidade. Existem ferramentas que facilitam bastante este trabalho, podemos citar sistemas de controle de versão, behavior driven development, code review etc.

Esta abordagem é mais vantajosa do que tentar manter um time de estrelas. Porque não é fácil encontrar bons programdores procurando emprego, profissionais medianos custam menos e privilegiar a padronização de processos permite ganhar escala mais rápido.

Chega de reclamar da falta de mão de obra qualificada, é necessário encontrar maneiras de resolver o problema com o contingente disponível. Para mim a solução está em multiplicar bons programadores colocando-os no papel de inspirar e acompanhar o trabalho da equipe.

Começando a programar com Ruby

Assim como você não sabe como a sua calculadora funciona internamente, para programar em uma linguagem como o Ruby, você não precisa conhecer muito além da própria linguagem.

No primeiro artigo foram apresentados alguns conceitos, agora vamos instalar o Ruby para começar a programar de verdade.

No Windows:

  1. Visite o site http://www.ruby-lang.org/pt/downloads/.
  2. Na seção “Ruby em Windows” faça o download do Ruby 1.8.6 One-Click Installer.
  3. Execute o instalador e prossiga a instalação. Quando chegar na tela “Choose Components”, certifique-se de que “Enable RubyGems” está marcado e continue.
  4. Para verificar se o Ruby foi instalado corretamente, clique no menu Iniciar > Acessórios > Prompt de Comando. Quando a janela abrir, digite “ruby -v“. Este comando deve retornar algo como “ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]”.
  5. Para editar os programas nós vamos usar o editor de textos Notepad, que você encontra em menu Iniciar > Acessórios > Notepad.

No Mac OS X:

Se você utiliza o OS X 10.2 (Jaguar) ou superior, o Ruby já está instalado para você. Para usar basta abrir o terminal em Applications > Utilities > Terminal. Para editar programas nós vamos utilizar o editor TextEdit que você encontra em Applications > TextEdit. Depois de abrir o editor, clique em Format > Make Plain Text, antes de começar a editar o código.

No Linux:

Se você utiliza o Ubuntu, basta abrir o terminal e digitar “sudo apt-get install ruby irb rdoc” para instalar o Ruby. Nós vamos utilizar o editor gedit para editar o código do programas.

Outros sistemas operacionais e versões:

Você pode obter mais informações sobre a instalação do Ruby em: http//www.ruby-lang.org/pt/downloads/.

Com o Ruby instalado, vamos editar o primeiro programa. Clique com o botão direito (crtl+clique no Mac) no seu desktop e crie uma pasta com o nome “codigo”. Vamos guardar os programas nesta pasta. Abra o editor de textos do seu sistema e bora se divertir:

require 'rss'
 
# RSS do portal de notícias www.g1.com.br
feed  = RSS::Parser.parse("http://g1.globo.com/Rss2/0,,AS0-5597,00.xml")
 
puts "Você deseja ver notícias sobre:"
puts "(a) Cinema"
puts "(b) Economia"
puts "(c) Mundo"
opcao=gets.chomp
 
if opcao=="a"
  quer_ver="G1 - Cinema"
elsif opcao=="b"
  quer_ver="G1 - Economia"
elsif opcao=="c"
  quer_ver="G1 - Mundo"
else
  puts "Opção inválida."
  abort
end
 
puts "Notícias sobre " + quer_ver + ":"
 
feed.items.each do |noticia|
   if noticia.category.content==quer_ver
        puts "* " + noticia.title
   end
end

Quer ver o programa funcionando? Depois de colar o código no editor de texto, salve no diretório Desktop\codigo com o nome “noticias.rb”. Para executar o programa abra o prompt de comando ou terminal e digite:

cd Desktop
cd codigo
ruby noticias.rb

Gostou? O programa acima lê as últimas notícias do site www.g1.com.br e exibe os títulos de acordo com o assunto escolhidos pelo usuário.

Antes de explicar os detalhes deste programa, eu peço que você tente ler o código e entender o que ele está fazendo. É importante exercitar a sua capacidade de leitura e interpretação do código.

Achou fácil? Proponho um desafio a você, tente fazer o programa exibir mais uma opção de assunto. Mostre as notícias sobre o “Rio de Janeiro” se o usuário pressionar “d”. Achou difícil? Não se preocupe! No próximo artigo eu vou explicar o programa linha a linha para passarmos juntos todos os conceitos.

Em áudio (download):

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Resposta do desafio.

Programação para não programadores

Existem vários motivos para aprender a criar programas de computador. A demanda do mercado por programadores é grande e os salários são atrativos. Você pode evitar trabalho tedioso automatizando tarefas. Pode se gabar para os seus amigos. E, melhor do que isso, é muito gratificante conceber algo, codificar e ver funcionando.

Porém, muitas vezes, a forma como é ensinada a programação aos iniciantes não é atraente. Assim como acontece em outras disciplinas, a distância entre a teoria e a prática, o excesso de jargão técnico e o aprofundamento desnecessário tornam a área desinteressante.

Existem vários títulos que tentam ensinar programação de um jeito menos traumático e iniciativas como o tutorial Learn to Program ou os livros How to Think Like a Computer Scientist. Mesmo assim, eu resolvi escrever esta série de artigos para introduzir a programação porque acredito que é possível ensinar o assunto com uma abordagem diferente.

Minha forma de aprender sempre foi caótica, prefiro me expor ao todo e entender os conceitos à medida que vou vivenciando na prática. Assim como um bebê que se depara com um mundo inteiro para explorar e aprende um pouco a cada dia. Desta forma acredito que a aprendizagem flui de maneira mais gratificante, motivada pelo desafio e pela curiosidade.

Para começar, você sabe o que é programação? De forma simplificada, programação é dizer ao computador o que ele deve fazer. Um programa é uma lista de instruções que diz quais informações a máquina vai receber e o que ela deve fazer com elas. Todos os softwares, por mais complexos que sejam, seguem este processo de entradas e saídas. Para exemplificar, as entradas podem vir do teclado, mouse, webcam, rede, de um arquivo etc. e saídas podem ocorrer na tela, em um arquivo, na impressora, nas caixas de som etc.

Que tal começar com um exemplo prático?

Eu quero que o computador receba um número maior que zero e exiba na tela o número digitado multiplicado por 2. Se ele pudesse entender português, eu explicaria da seguinte maneira:

O usuário vai digitar um número.
 
Se o usuário digitou um número e este número é maior que zero, então imprima na
tela o número multiplicado por 2.
 
Senão, imprima na tela “Por favor, digite um número maior que zero”.

Como você pode observar, é necessário determinar todos os passos. Não é divertido?

A computador não entende a nossa linguagem natural, precisamos escrever os programas em uma língua que ele consiga entender. A máquina se comunica através de instruções em formato binário (10101001), mas seria muito chato ter que falar diretamente com ela porque gastaríamos mais tempo gerenciando os recursos do computador como a memória e os periféricos do que efetivamente desenvolvendo um programa útil.

Então vamos deixar este nível de complexidade para os cientistas da computação e utilizar as facilidades dos sistemas operacionais e das linguagens de programação de alto nível para desenvolver os nossos programas. Existem várias linguagens que permitem criar programas de maneira rápida e intuitiva. Para esta série de artigos eu escolhi o Ruby.

As instruções que dei acima, agora em Ruby:

numero = gets.to_i
 
if numero > 0
   puts numero*2
else
   puts "Por favor, digite um número maior que zero."
end

Parece um inglês modificado, não? A grande maioria das linguagens de programação tem as palavras chave em inglês, então conhecimentos básicos do idioma facilitam bastante o aprendizado. Além disso, existe uma quantidade infinitamente maior de informações sobre o assunto neste idioma. Você não precisa se preocupar em compreender agora todo o código apresentado, tente apenas ter uma idéia geral do que o programa está fazendo.

No próximo artigo vamos instalar as ferramentas necessárias para criar programas em Ruby e você poderá sujar as mãos no código do seu primeiro script. Se ficou com dúvida ou tem alguma sugestão, deixe um comentário ou me envie um e-mail. O feedback dos leitores é fundamental para o sucesso desta empreitada.

Em áudio (download):

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.