Blog de Helton Duarte

O seu portal de informações sobre TI

Programando melhor: Aula 1 – Começando

Finalmente pessoal!

Hoje irá iniciar o curso de programação focado em competições existentes em todo o mundo. O curso terá como título “Programando melhor” e será composto de aulas iniciantes até programação pesada! Vamos embarcar comigo nessa empreitada!

Aula 1 – Começando

Conteúdo: introdução a competições de programação, assim como dicas iniciais e cuidados a serem tomados na criação de soluções para os problemas apresentados.

Existem por aí alguns sites que podem nos ajudar a exercitar nossos conhecimentos, pois disponibilizam juízes online para testar a eficiência do seu programa. Os principais sites para esse tipo de exercício são o da Universidad de Valladolid, o da Olimpíada Brasileira de Informática e o do livro Programming Challenges (base para o desenvolvimento desse curso). Cadastre-se neles (com excessão do site da OBI, que não precisa de cadastro) e comece a testar soluções para os mais diversos programas encontrados, inclusive para os exercícios que serão propostos aqui.

Como primeiro passo rumo a sua vitória em diversas dessas competições, você precisará primeiramente escolher em qual linguagem desenvolverá seus programas. Eu recomendo o C, pois é de fácil entendimento (sem a orientação a objeto presente no C++/Java) e é aceito em praticamente todas as competições. Pascal é uma boa recomendação apenas para quem está no ensino médio e deseja participar da OBI (pois é uma das únicas que ainda permite essa linguagem); Java é desagradável pela sua POO (programação orientada a objeto), algo bastante desagradável quando não se vai trabalhar com programas grandes os quais precisariam de reaproveitamento de algumas partes; C++ é aconselhável a programadores mais experientes, desejosos de participar do TopCoder (não aceita o C).

É preciso também tomar cuidados com algumas práticas do nosso dia-a-dia na programação que não devem ser praticadas por um competidor. Primeiramente, as entradas e saídas do seu programa devem ser exclusivamente as padrões, ou seja, não é permitida a abertura de arquivos ou funções desse estilo durante a programação. Já para programadores Java funções de internet e threads não são permitidas, além de nada poder ser público, até mesmo o Main, contudo pacotes como math, util e similares são possíveis.

Dicas de programador para programador:

  • Comece seu programa e cada uma das funções criadas comentando cada passo a ser realizado, pois isso facilitará seu entendimento do problema (se você não conseguir fazer isso, então não está entendendo o que é preciso fazer no programa). Esse esforço extra irá ajudar muito no futuro…
  • Faça o mesmo para cada variável, explicando qual será sua “função” no programa (não é preciso colocar nomes gigantes, como ModuloDoQuadradoDoVetorResultante, apenas comente bem (não é Elomar e Bryan? hehehehehe).
  • Crie, sempre que possível, constantes para representar números bastante utilizados no programa, como PI, TAMVETOR, etc., isso irá prevenir erros futuros e deixará BEM mais legível seu código (ajudando a encontrar bugs que possam aparecer).
  • Eficácia. Essa é a base para competições de progração (e para sua vida de programador). Evite ao máximo códigos redundantes, como
    • if (x == ‘A’) Código
    • else if (x == ‘B’) Código quase igual;
  • Além do mais (nunca pensei que iria falar isso na minha vida xD ): evite GAMBIARRAS! Você pode achar o máximo quando você faz uma daquelas bem grotescas, todavia isso pode lhe causar um belo de um “Time Limit Exceeded”, ou seja, seu programa pode ficar lento e não ser executado no tempo máximo permitido (é, existe um tempo máximo!). ^^
  • Por fim, é de extrema importância o conhecimento na arte de “DEBUGGAR”, ou seja, conheça o sistema de Debug do seu compilador ou faça isso manualmente (mandando imprimir o valor de certa variável em um determinado local – CUIDADO com doideras no código ao fazer isso). Esse item é muito bom caso receba alguma mensagem de erro do sistema de correção.

Um bom caminho a seguir é o de evitar tipos de dados não elementares, como POO, e até a utilização excessiva de ponteiros em C, o que pode gerar erros inesperados, sendo sempre bom recorrer aos bons e velhos Vetores. Tome também cuidados com Records/Structs/Registros, pois eles podem gerar uma grande dor de cabeça na hora de precisar alterar o seu código.

Bem, gostaria de finalizar esse post com um alerta para aqueles os quais desejam participar da OBI, pois durante a competição você não tem o acesso ao juiz dizendo se o seu programa passou nos testes ou não, isso só é disponibilizado na seção Pratique do site, portanto é necessária a sabedoria para você mesmo criar testes que poderiam dar erro em um programa, ok?

Os exercícios seguem no próximo post e eles estão todos disponibilizados no UVa Online Judge, para serem testados. Eles correspondem aos problemas do Capítulo 1 do livro Programming Challenges, de autoria de Miguel Revilla e Steven Skiena.

Posts interessantes:

E você, o que achou dessas dicas? Está pronto para começar essa jornada e se tornar um competidor dos mais fortes? Deixe seu comentário e tire as suas dúvidas!

Helton de Melo Duarte

“Porém o SENHOR disse a Samuel: Não atentes para a sua aparência, nem para a altura da sua estatura, porque o tenho rejeitado; porque o SENHOR não vê como vê o homem. Pois o homem vê o que está diante dos olhos, porém o SENHOR olha para o coração.” (1 Samuel 16.7)

Fevereiro 10, 2009 Publicado por Helton de Melo Duarte | Competições, Cursos, Programando Melhor | , , , , , | 12 Comentários

Curso de Programação – Confirmado!

Olá pessoal!!! =D

Eu venho aqui não para falar do novo Google Earth, como vocês poderiam imaginar, já que ele saiu hoje (apesar de ser uma boa falar dele)…mas para comunicá-los sobre uma novidade que eu já havia prometido para vocês leitores a algumas semanas, porém só foi confirmada hoje, após contatar Miguel Revilla e Steven Skiena (a nata da programação).

O curso de programação preparatório para competições desse assunto está confirmado no meu blog! Após resolver algumas pendências que poderiam vir, como direitos autorais e coisas do tipo, confirmei agora a pouco com os autores do livro Programming Challenges a elaboração desse meu projeto!

Livro para competições de programação

Livro para competições de programação

O curso consistirá basicamente de um abordagem sobre os assuntos desse livro citado (considerado a bíblia das competições de programação), para facilitar o acesso a esse tipo de assunto. O livro é completamente em inglês e, por isso, irei fazer esse resumo em português para vocês, além de abordar os exemplos em C e Pascal (pois no livro é apenas em C). Outro ponto importante que gostaria muito da colaboração de todos é a disponibilização de soluções para os problemas da seção Pratique, no site da OBI, as quais serão feitas por mim e por qualquer um que deseje colaborar conosco (mande as soluções para meu e-mail, em hm_duarte@hotmail.com , para que passe pela devida avaliação e, então seja postada também no blog, com seus devidos direitos ao autor). OBS: pode ser em C, C++ ou Pascal.

Peço a todos os leitores desse post para divulgarem esse assunto de toda a forma possível, pois espero que esse curso possa ajudar muitos a crescer como programadores, assim como lutar por sonhos que possam parecer distantes, como vencer esse tipo de competição.

PS: O direcionamento principal desse curso é para a participação na OBI (Olimpíada Brasileira de Informática), porém irá formar um programador completo, auxiliando, portanto, a OAH (Olimpíada de Algoritmo Hostnet), a ACM (ou online-judge, da Universidad de Valladolid) e TopCoder.

PS2: O objetivo do curso não é ensinar a linguagem C ou Pascal e sim métodos que possam auxiliar a resolver diversos problemas comuns em competições de programação e presentes no dia-a-dia, portanto tem-se como pré-requisitos desse curso o conhecimento em algoritmos e nas linguagens C ou Pascal.

Helton de Melo Duarte

“Um Vencedor respeita aqueles que são superiores a ele e tenta aprender alguma coisa com eles. Um Perdedor ressente-se daqueles que são superiores a ele e faz racionalizações a respeito de suas conquistas.

Um Vencedor explica; um Perdedor justifica.

Um Vencedor diz: ‘Vamos descobrir uma saída’; um Perdedor diz: ‘não há nenhuma saída’.

Um Vencedor enfrenta o problema; um Perdedor tenta contorná-lo.

Um Vencedor diz: ‘Deve haver um jeito melhor de fazer isso’; um Perdedor diz: ‘Isso sempre foi feito assim’.

Um Vencedor mostra que lamenta o fato de ter de compensar por algo; um Perdedor diz: ‘Eu lamento’, mas ele continua a fazer a mesma coisa.

Um Vencedor sabe pelo que lutar e com o que se comprometer; um Perdedor compromete-se com o que não deveria e luta por aquilo que não vale a pena lutar.

Um Vencedor trabalha mais duro que o Perdedor, e tem mais tempo; um Perdedor está sempre ‘muito ocupado’ para fazer o que é necessário.

Um Vencedor não tem medo da derrota; um Perdedor secretamente teme a vitória.

Um Vencedor compromete-se; um Perdedor faz promessas.”

GEORGE, Jim. Um Jovem segundo o coração de Deus, p. 159-160. CPAD, 2008.

Fevereiro 3, 2009 Publicado por Helton de Melo Duarte | Competições, Programando Melhor | , , , | 3 Comentários

Cursos grátis na Internet – MIT

Olá novamente pessoal!MIT

Venho aqui para comunicar-lhes uma “novidade” muito grande que descobri essa semana ao ler a INFO Exame do mês passado (é, estou atrasado nas leituras da INFO, xD) e provavelmente será BEM INTERESSANTE para muitos estudantes e profissionais não só da área de TI, como de qualquer área de estudo praticamente. Bem, venho avisar da existência de MUITOS cursos online de institutos extremamente renomados no mundo inteiro (senão os melhores do mundo), como o exemplo do MIT e as universidades de Stanford e Berkeley.

Os sites desses institutos disponibilizam diversas de suas disciplinas totalmente na internet, com direito a listas de exercícios e até as provas feitas pelos seus alunos, com suas respectivas soluções. Andei dando uma olhada em alguns cursos apenas por cima e vi que, primeiramente, o nível dele é do “básico” ao SUPER AVANÇADO, ou seja, no curso de Introdução a Algoritmos, por exemplo, você pode começá-lo tendo apenas boas noções de lógica matemática e terminá-lo pronto para participar de competições como a OBI ou OAH e, até mesmo, o TopCoder.

Existem pontos que precisam ser ressaltados ao mostrar esses cursos para vocês, pois eles não são dados por brincadeira por essas universidades, eles são auxiliados através de doações de qualquer pessoa (pelo menos o do MIT é assim, os outros não tenho muita certeza). Além disso, são todos cursos em inglês, entretanto há um site brasileiro que já está disponibilizando alguns deles traduzidos (Universia Brasil) e não é emitido certificado de conclusão, ou seja, são feitos apenas por desejo de aprendizagem, o que ainda está em falta entre os profissionais de TI, os quais somente buscam certificados e mais certificados… Por fim, o material é indicado para pessoas com experiência em alguma faculdade, com exceção dos Highlights for HighSchool do MIT, cursos que acredito poderem ser acompanhados por indivíduos com menor experiência.

Bem, então fica a disposição e vontade de vocês esses MARAVILHOSOS cursos das melhores universidades do mundo! Só mais uma dica: vale realmente a pena fazer esses cursos, portanto, não perca essa oportunidade.

Links:

Até mais!!!

PS: eu sei que estamos falando de cursos proporcionados por universidades famosas em todo o mundo, no entanto venho recomendar outro curso online muito bom para vocês: o Introdução ao Desenvolvimento Web com XHTML, CSS e Javascript, do MaisWeb (fora do ar atualmente, porém acredito que por pouco tempo…).

Helton de Melo Duarte

“A sabedoria é a coisa principal: adquire, pois, a sabedoria; sim, com tudo o que possuis adquire o entendimento. Estima-a e ela te exaltará; se a abraçares, ela te honrará. Ela dará à tua cabeça uma grinalda de graça; e uma coroa de glória te entregará.” Provérbios 4.7-9

Janeiro 19, 2009 Publicado por Helton de Melo Duarte | Cursos, Tecnologia | , , , , , , | 9 Comentários

OAH 2008

[Post de helton-duarte.spaces.live.com no dia 17-11-2008]

Olá pessoal!

Estou inaugurando essa página do blog com esse post e uma notícia muito agradável para todo o Nordeste, para desmentir aqueles que pensam ser essa região do país muitas vezes atrasada, só possuir misérias e não ser possível se desenvolver, contudo guardarei a informação para o final…

Nos dias 30/10, 31/10 e 01/11, houve a realização da 2ª fase da Olimpíada de Algoritmo Hostnet 2008 (II OAH) www.oah.com.br, na qual participaram inicialmente 74 escolas de ensino técnico de todo o Brasil, porém classificaram-se apenas 15 dessas para a fase final. Tive a oportunidade de participar dessa competição, juntamente com meus colegas Bryan Souza e Elomar França, representando o CEFET – RN e apoiados pelo professor Leonardo Minora.

Essa fase da competição foi realizada em Foz do Iguaçu – PR e todos os competidores estiveram lá, juntamente com o acontecimento do maior evento de software livre da América Latina, o Latinoware 2008. Nós tivemos a oportunidade de conhecer a gigantesca usina binacional de Itaipu (Brasil/Paraguai) e as belíssimas Cataratas do Iguaçu, além das equipes que chegaram no dia 30/10 poderem ter presenciado a Iluminação Monumental da usina, a qual nós do CEFET – RN não pudemos ver, pois chegamos de viagem apenas na madrugada do dia 31.

Mas vamos à parte acadêmica: a prova foi composta de 4 questões de lógica, as quais eram para ser desenvolvidas em Portugol e no papel (isso mesmo, no papel, sem nenhum compilador, o que foi um dos grandes desafios). Nelas era preciso o competidor ter um bom conhecimento de manipulação de strings, além do fato de em alguns casos ser necessário que fossem desenvolvidas funções normalmente já disponibilizadas nas linguagens estruturadas, algo bem interessante, porque podíamos entender o que o compilador realiza por trás do código.

No final de tudo, a parte a qual eu citei ser boa para o Nordeste é porque tivemos 3 equipes participantes – CEFET/RN, CEFET/BA e SENAI/PE – e, graças a Deus, nossa equipe potiguar foi agraciada com o 1° lugar nacional na OAH! Além disso os bahianos ficaram muito perto de um troféu, chegando ao 4° e os pernambucanos em 10°. Nós ainda tivemos a incrível oportunidade de conhecer Gustavo Guanabara (www.guanabara.info) e Luli Radfahrer (www.luli.com.br), grandes pessoas que fizeram palestras para os participantes (tenho que ressaltar: foram MUITO BOAS as palestras!).

É imprescindível agradecer ao Kauê Linden, diretor de marketing da Hostnet, ao Ramiro, ao Eudes, à Lisane, enfim, a todos os que participaram de forma direta ou indireta nessa competição. Espero que a III OAH possa acontecer próximo ano para dar a oportunidade a mais jovens alunos de algoritmos de todo o país. Aproveitando o espaço também gostaria de divulgar a realização da OBI (Olimpíada Brasileira de Informática), outra competição de programação realizada pela Sociedade Brasileira de Computação, Fundação Carlos Chagas e Unicamp-SP (olimpiada.ic.unicamp.br).

Bem, encontro vocês no próximo post!

Helton de Melo Duarte
Medalha de Bronze OBMEP 2007
Campeão nacional da OAH 2008
4° lugar OBM-RN 2008
(Em busca de uma medalha na OBI 2009!)

“A Vida de um indivíduo só faz sentido se ajuda a tornar as vidas das demais criaturas mais nobres e
mais belas.”
Albert Einstein

foto3

Novembro 24, 2008 Publicado por Helton de Melo Duarte | Competições | , , , | 2 Comentários