Computadores
Programação de computadores
“Código. Que coisa linda. Quando aprendi a minha primeira linguagem de programação, vi que era… pura. Sem ambiguidades. Nada a interpretar, nada a transmitir. Só isso. E faz parte do meu DNA. O mundo que vivemos é incompleto. Frágil. Fora de foco. No mundo binário só existem os números um e zero. Isso é a perfeição. Tudo que você precisa para começar é uma idéia. E então lentamente, com um comando de cada vez, você cria algo novo. Algo puro e verdadeiro, que não existia. Algo que nunca mente e nunca finge ser algo que não é. Um universo do nada. Você pega o mundo caótico e feio em que vivemos e o torna perfeito.
Quando você começa a programar, percebe que não há atalhos. Você tem que ousar sujar as mãos. Um pequeno código nos dedos. O computador é como uma criança que não sabe nada. Eu tenho que ensiná-la. E o que eu digo significa tudo.”
Netflix, Som na Faixa, T1 E4: O programador.
Saber programar faz um grande diferencial no currículo do engenheiro. E é um caminho sem volta! Já depois de conseguir executar algumas tarefas com programação, o aluno já vai querer colocar programação em todas as tuas atividades.
Vários alunos têm me perguntado sobre como seriam os primeiros passos para inserir a programação das suas habilidades como engenheiros, e tenho respondido individualmente a cada um. Motivado pelo crescente aumento destas solicitações, resovi colocar nessa página idéias e informações que eu considero úteis.
O que é necessário para programar computadores?
Posso resumir a resposta dizendo que são necessárias duas coisas:
- conhecimento de uma linguagem (sintaxe) e
- pensamento lógico.
Destes dois itens, o primeiro é o mais fácil e rápido de ser obtido. Até mesmo com poucas horas de estudo de uma linguagem, de sua sintaxe, uma pessoa é capaz de programar alguma coisa.
Já o segundo item, a lógica de programação, não se aprende com cursos ou livros. A única forma que conseguir isto é por experiência. Isso significa que para uma pessoa desenvolver autonomia em programação é necessário que ela treine, pratique, gaste muitas e muitas horas treinando e praticando, resolvendo seus problemas práticos usando programação. Quanto maior a experiência, mais desenvolvido se torna o pensamento lógico.
Qual o primeiro passo para aprender programação?
O primeiro passo não é escolher a linguagem, nem comprar um livro, mas sim escolher um problema prático para resolver. Conhecer bem o problema envolvido é fundamental, e isso tem muita influência na escolha da linguagem. Então, escolha algum exercício de alguma disciplina, algo envolvendo uma sequência de cálculo, que fosse talvez fazer usando planilha eletrônica, e tente resolver com programação.
Existe alguma linguagem de programação mais adequada para o uso em engenharia civil?
A linguagem mais adequada está diretamente relacionada com a tarefa, e não com uma profissão! Tarefas que exigem um alto esforço de processamento são normalmente resolvidas com Fortran. Quando além de pesada, a tarefa exige componentes mais sofisticados, como interface gráfica, é mais adequado usar C, C++. Java é uma linguagem muito versátil, e tem, pelo menos ao meu ver, uma vantagem: ela força que toda a programação seja orientada a objeto. Mais recentemente a linguagem Python está aparecendo em todo canto, mas ela está normalmente mais associada à criação de scripts, plugins, ou programas menores. E tem inúmeras outras, mais adequadas para programação para desktop, ou para programação para web, … Há ainda a possibilidade de misturar várias linguagens em um só programa.
Eu fortemente recomendo que sejam sempre escolhidas linguagens que sejam multiplataforma, ou seja, cujos programas criados possam ser executados em qualquer sistema operacional (Windows, Linux, Mac, …). Pobre usuário, que gostou tanto do programa, mas não pode usar porque não usa Windows… Além disso, nunca se sabe quando nós mesmos vamos um dia nos dar conta que existe um outro sistema operacional, diferente do que usamos hoje, que é muito mais maravilhoso!… E daí vamos querer continuar podendo usar o nosso programa!
Eu programo em diversas linguagens, mas as que mais uso, com frequência até hoje, são Java e Python. Quando eu preciso desenvolver algo mais complexo, com interfaces gráficas, ou que seja para outras pessoas usarem o programa, eu uso Java. Para resolver coisas mais simples, tarefas menores e mais específicas, scripts para programas de SIG, CAD, ou simulação, coisas que são ferramentas somente para eu executar procedimentos isolados, eu uso Python.
Devo fazer alguma matéria isolada de programação?
No meu caso, as matérias que eu cursei de programação foram as obrigatórias na graduação. Na minha época havia só uma: cálculo numérico em computadores. Nem a disciplina de introdução à computação eu tenho no meu currículo. Eu tive que aprender meio que “na marra”, diante de tarefas que surgiram nas minhas atividades acadêmicas e profissionais. Então, é possível aprender sem cursar disciplinas. Mas obviamente cursar disciplinas, ou outros cursos que estejam disponíveis, pode encurtar muito os caminhos. Coisas que eu tive que aprender sozinho, estudando, lendo, errando e fazendo de novo, eu poderia ter resolvido mais rápido se tivesse tido mais formação na área.
Desconheço as disciplinas que são oferecidas na UFSC, por outros departamentos, com o propósito de introdução à programação. Essa pesquisa fica para os interessados!
Dicas diversas
Ao desenvolver algum programa, procure sempre pensar em três itens específicos:
- Dados de entrada. Como organizar a estrutura? Que formato de arquivos? Como fazer o programa carregar os dados de entrada?
- Processamento. Qual a melhor forma de realizar os cálculos necessários?
- Análise de resultados. Qual a melhor forma de estruturar os resultados gerados? Usando que formato de arquivo? Gerar tabelas? Gerar gráficos?
Comece utilizando componentes simples, programas sem interface gráfica, com leitura e gravação de dados em TXT. Depois vá incrementando, incluindo recursos para elaboração de interfaces gráficas, cálculo avançado, geração automática de gráficos, ambientes de visualização em 2D e 3D. Sempre elabore protótipos minimalistas completos primeiro e experimente com eles, para depois ir incrementando e deixando o programa mais complexo. Teste bem cada nova funcionalidade, antes de continuar.
Aprenda e entenda bem os seguintes conceitos, analisando as vantagens e desvantagens de cada um:
- Orientação a objeto ou orientação ao método? Pela minha experiência, programar com orientação a objeto reduz a possibilidade de erros de programação, erros de lógica. Normalmente precisamos de uma maior quantidade de linhas de código para fazer a mesma coisa, quando programamos com orientação a objeto, mas isso pode valer a pena. A linguagem Java faz isso de forma pura, só é possível programar com orientação a objeto com ela. Por outro lado, programar orientado ao método proporciona uma maior produtividade. Leva menos tempo a implementação das funcionalidades.
- Linguagem tipada ou não tipada? Quando nós declaramos explicitamente o tipo de cada variável no código do programa, estamos programando de forma tipada. Isso é muito a favor da segurança, mas aumenta o tamanho do código. Linguagens tipadas são, por exemplo, C, C++ e Java. Python é um exemplo de linguagem não tipada.
Sempre procure na internet por componentes (bibliotecas, módulos) que podem ajudar diretamente na tua tarefa. Isso pode influenciar muito na escolha da linguagem. Por exemplo, se quiseres desenvolver algum desenho automatizado em CAD (geração de arquivos DXF), podes achar interessante o módulo dxfwrite, para Python, que gera elementos mais simples de forma muito fácil! Se quiseres gerar gráficos automaticamente, para uma tarefa simples, que envolva somente um script em Python, podes usar o módulo matplotlib. Já se estiveres trabalhando com o desenvolvimento de algum software para desktop mais sofisticado em Java, podes automatizar a geração de gráficos usando o JFreeChart. Hoje em dia, é pouco provável que imaginemos alguma tarefa para a qual não haja na internet alguma biblioteca ou módulo pronto disponível para uso, independente da linguagem.
Dificilmente temos que fazer alguma implementação computacional, de algum trecho de código, que alguém no mundo já não tenha feito. É impressionante como normalmente encontramos exemplos de implementações de trechos de código na internet, que fazem exatamente o que precisamos, ou que resolvem o nosso problema com poucas adaptações. O segredo é encontrar palavras chave que direcionem a nossa pesquisa para a resposta que precisamos. Isso se treina, se desenvolve com o tempo. As buscas devem ser sempre feitas utilizando termos em inglês.
Para escrever os códigos (ou programar propriamente) o uso de alguma Integrated Development Environment (IDE) é muito vantajoso, principalmente nos casos aonde o tamanho do código fica maior. Para Java as melhores que eu conheço são a IntelliJ, da JetBrains, Eclipse e a Netbeans. Para Python, a PyCharm, da JetBrains, e também é bem interessante a Spyder (que vem instalada no Anaconda ).
Quais são bons livros para aprender a programar?
Há uma infinidade de autores que escreveram ótimos livros sobre qualquer linguagem de programação que existe ou já existiu na face da terra. Mas, particularmente, o livro que mais gostei até hoje foi o “Java, como programar”, dos irmãos Deitel. Apesar de ser específico para Java, ele tem um capítulo introdutório sobre programação em geral, que é muito útil para o entendimento de qualquer linguagem. Além disso, os mesmos autores escreveram livros para diversas outras linguagens, incluindo Python.
Há algum bom curso na internet?
Eu pessoalmente nunca fiz um curso na internet. As minhas pesquisas por trechos de código para solucionar problemas específicos têm sido para mim suficientes.
Contudo, eu conheço estes dois, que são muito elogiados por alunos que já fizeram algo assim:
Para encontrar outros cursos, ou tutoriais, procurem na internet usando expressões como as seguintes, por exemplo, para aprender Python:
- python tutorial;
- python getting started;
- python first steps;
- python beginners guide.
Escolhendo um computador para comprar
Também vários alunos me fazer essa pergunta: “como eu escolho um computador para comprar?”. Basicamente, a resposta é: depende do que se quer fazer com o computador.
Contudo, é possível fazer algumas considerações gerais. Normalmente, esta é a lista de perguntas que eu me faço quando me encontro neste processo.
- Portabilidade é importante? Normalmente, computadores desktop oferecem mais poder de processamento, relativamente ao seu preço, quando comparados a laptops. Por outro lado, desktops não podem ser levados com a gente a qualquer lugar o tempo todo. Talvez um meio termo, ou seja um laptop de tamanho maior? Ou então um laptop realmente pequeno, de no máximo 13 polegadas, para poder ser levado o tempo todo com a gente, em detrimento da performance? No caso de escolher um laptop, dar uma boa verificada na quantidade de horas que ele aguenta na bateria, e nas informações sobre a sua vida útil (quantos anos ela aguenta sem precisar ser trocada, ou então ele acabar virando um mini desktops por ter que ficar o tempo todo ligado na tomada).
- Interface com o usuário. Extremamente importante, a interface entre o computador e o usuário é decisiva sobre o quanto tempo é possível trabalhar até se sentir cansado, o que envolve braços, constas, olhos… Temos que lembrar que esta interface abrange os itens a seguir.
- Teclado. Tem que ser de ótima qualidade, de boa construção. Verificar o layout é importantíssimo. Eu, por exemplo, exijo que o teclado seja 104-key US QWERTY. Acho o layout da ABNT horrível.
- Mouse. Tem que ser de ótima qualidade. O sistema de rastreamento do ponteiro tem que ser extremamente preciso e estável. Desenhos ergonômicos ajudam a ficar horas no computador sem sentir dor no braço, e sem desenvolver tendinite.
- Trackpad Indiscutivelmente, trabalhar com mouse é muitíssimo melhor do que trabalhar com trackpad. Mas, às vezes, estamos com um laptop na rua e precisamos usar sem uma mesa, por exemplo. E aí só tem o trackpad disponível. Então, ele deve ser bom, preciso, grande.
- Monitor. Faz toda a diferença. Nem pensar em comprar algo que não seja pelo menos de LED com IPS. Outra coisa importantíssima: quanto mais área temos de tela, mais produtivos podemos ser. Abrir e visualizar várias janelas ao mesmo tempo ajuda muito na velocidade com que fazemos as coisas no computador. Então, sempre verifique a quantidade e o tipo de monitores que poderão ser ligados, tanto no caso de um desktop quanto no caso de monitores adicionais em laptop.
- Quanto a velocidade do computador.
- Armazenamento. Armazenamento com SSD deve ser um requisito básico. Nem pensar em comprar um computadores com discos rígidos (HD) ou mesmo discos “híbridos”. Hoje em dia os preços dos SSD estão relativamente acessíveis até a capacidade de 250 GB. Acima disso os preços entram em exponencial. Então, caso seja necessário mais capacidade, por exemplo, para gerenciar 1 TB de arquivos, é interessante verificar se algum serviço de armazenamento na nuvem pode atender, de forma que somente uma parte dos arquivos fiquem armazenados normalmente no computador, sendo o restante acessado sob demanda.
- Processador. Aqui depende realmente muito de quais tarefas o computador vai ter que fazer. Na minha experiência, por exemplo, processamento de vídeos é a tarefa que mais consome processador. Por outro lado, se o computador for ser usado para navegar na internet, rodar programas de office e algum software do peso de um CAD, não é necessário colocar o processador como a coisa mais importante a ser levada em conta. Para um perfil de aluno médio, dificilmente seria necessário, por exemplo, um processador superior a um de seis núcleos com, digamos, 2,5 GHz (bem a grosso modo, só numa tentativa de dar algum parâmetro).
- Memória. Aqui, atenção: providenciem um mínimo de 8 GB. Se for precisar rodar máquinas virtuais (por exemplo, usar o VirtualBox para rodar o Windows no Mac), então o mínimo é de 16 GB. Hoje em dia, computadores com 4 GB, nem pensar!!! E procurem verificar se a memória é pelo menos do tipo DDR3 (melhor DDR4).
- Placa de vídeo. Obviamente, caso o computador seja usado para renderização 3D, para processar vídeos ou para rodar jogos, a placa de vídeo é importante. Há tantos modelos diferentes no mercado… eu deixo a pesquisa pra vocês. Mas a idéia básica das placas de vídeo é que elas tem o seu próprio “processador” (GPU) e a sua própria memória, a serem levados em consideração na pesquisa.
Dito tudo isso, digo aida o seguinte. Cada pessoa aprimora a sua capacidade de determinar qual é o melhor computador para ela através da própria experiência de uso de computadores.