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:
- Programando melhor: Exercícios 1 (Parte I)
- Programando melhor: Exercícios 1 (Parte II)
- Curso de Programação – Confirmado!
- Cursos grátis na Internet – MIT
- Top Coder Marathon Matches
- Olimpíadas do Conhecimento
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)
Cursos grátis na Internet – MIT
Olá novamente pessoal!
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
Engenharia da Computação
Olha eu aqui novamente!
Bem pessoal, hoje irei fazer uma abordagem sobre o curso de Engenharia da Computação (o qual eu pretendo fazer), como o perfil do profissional, o CREA e a situação atual do mercado de trabalho.
Porém, para que esses tópicos sejam compreendidos de uma melhor forma será passada uma introdução ao curso, o qual é bastante abrangente na área de informática, pois lida com softwares assim como circuitos digitais e redes de computadores. Outro fator essencil é o estágio supervisionado, no qual o estudante irá ter experiências práticas com o mercado e sua exigência, além da possibilidade de iniciar uma carreira científica em algum projeto de pesquisa.
Perfil do profissional
O engenheiro da computação é um profissional relativamente novo, que passou a ser exigido no mercado devido aos avanços da informática e da ciência da computação. Esse profissional tem um perfil diversificado que abrange inúmeras áreas da informática, compreendendo principalmente setores que apresentam uma forte interação entre software e hardware, como automação industrial, robótica, comunicação de dados e processamento digital de sinais.
Ele produz novas máquinas e equipamentos computacionais para serem utilizados em diversos ramos, de acordo com as necessidades do mercado, além de desenvolver produtos para serviços de telecomunicações, como os que fazem a interligação entre redes de telefonia. O profissional também está habilitado para planejar e administrar a rede de computadores de uma instituição, assim como implementação de cabeamento e roteadores. No entanto, para os adeptos da programação, o engenheiro também pode ter uma boa base nesse aspecto, sendo capaz de desenvolver programas de alta complexidade, como sistemas operacionais, compiladores, entre outros.
Mercado de trabalho
Os formados na área não costumam ter dificuldades para arranjar empregos, já que o campo de ação de um engenheiro da computação é muito amplo, pois além de atuar em companhias do setor de tecnologia, o profissional pode encontrar espaço em diversos segmentos, já que toda empresa de grande porte tem uma área de TI. Geralmente, as portas para um primeiro emprego são abertas por um estágio numa grande empresa e, não raro, o estudante é contratado antes mesmo de terminar a graduação. No Brasil, o mercado cresce cerca de 10 a 15% ao ano, contudo há um mercado potencial também no exterior, já existindo diversas empresas levando brasileiros para os mais variados países do mundo, o que fica fácil devido as linguagens de programação serem universais.
O governo federal vem dando prioridade para financiamentos destinados a formar mestres e doutores em engenharia da computação e assim estimular o desenvolvimento da indústria dessa área, o que abre maiores leques para as pessoas que pretendem dedicarem-se ao ensino e à pesquisa. As regiões Sul e Sudeste, principalmente o estado de São Paulo, são responsáveis pelo maior número de empregos, porém há vagas por todos os estados, inclusive para se trabalhar em casa para uma empresa de um local distante, comunicando-se pela rede mundial de computadores!
CREA
O CREA (Conselho Regional de Engenharia, Arquitetura e Agronomia) é o órgão responsável pela regularização dos profissionais da área, só podendo, teoricamente, exercer o cargo se for cadastrado nesse órgão, no entanto, infelizmente, sabemos que as coisas não acontecem como devem ser e muitos ainda atuam sem serem devidamente reconhecidos.
Rendimento
A renda do engenheiro da computação varia muito de região para região (até mesmo dentro de uma mesma região, já que para um engenheiro existe um verdadeiro leque de profissões a escolher para seguir uma carreira), mas independente desse fato, a remuneração é considerada satisfatória, variando de R$ 1000,00 a R$ 2500,00 o seu salário inicial.
Bem, acredito que consegui passar o que eu pude ver do curso de Engenharia da Computação e gostaria de agradecer aos meus amigos Marcos Vinícius de Araújo Ferreira, Moizaniel da Silva Melo e Thiago Frederico Costa Porciúncula, pois esse texto foi baseado no nosso trabalho acadêmico apresentado à disciplina de Sociologia do CEFET-RN/Unidade Sede, ministrada pela professora Eliana Gomes Quirino. Além de, claro, a minha namorada, Dayane, por ter me aturado durante a pesquisa sobre esse assunto!!! ^^
Links de pesquisa
Até a próxima!!!
Helton de Melo Duarte
“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