<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PauloMotta.pro &#187; LINGUAGEM</title>
	<atom:link href="http://www.paulomotta.pro.br/tag/linguagem/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.paulomotta.pro.br</link>
	<description>&#34;Qualquer tecnologia suficientemente avançada é indistinguível da mágica&#34; - Arthur C. Clarke</description>
	<lastBuildDate>Thu, 09 Sep 2010 16:39:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>O que deve saber um programador &#8211; nível zero?</title>
		<link>http://www.paulomotta.pro.br/2010/08/18/o-que-deve-saber-um-programador-nivel-zero/</link>
		<comments>http://www.paulomotta.pro.br/2010/08/18/o-que-deve-saber-um-programador-nivel-zero/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 16:00:33 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[ALGORITMOS]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[LINGUAGEM]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=801</guid>
		<description><![CDATA[Semana passada eu comentei do que acho que é necessário que um programador nível básico precisa saber, enquanto escrevia pensei que para chegar ao nível básico o aspirante precisa passar por um caminho inicial até chegar no ponto de começar a aprender o que vai torná-lo enfim um programador nível básico.
Então sem mais delongas vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Semana passada eu comentei do que acho que é necessário que um programador nível básico precisa saber, enquanto escrevia pensei que para chegar ao nível básico o aspirante precisa passar por um caminho inicial até chegar no ponto de começar a aprender o que vai torná-lo enfim um programador nível básico.</p>
<p>Então sem mais delongas vamos listar os passos necessários para percorrer esse caminho:</p>
<ol>
<li>Estude introdução a algoritmos &#8211; nesse tópico não estou falando de algoritmos sofisticados e sim da primeira etapa onde aprendemos a fazer pequenos algoritmos em pseudo-linguagem ou portunhol que geralmente descrevem os passos para fazer um bolo. Entenda como descrever os passos para resolver um problema de forma estruturada e lógica.</li>
<li>Saiba lógica matemática &#8211; sim a boa e velha tabela verdade, é necessário entender como funcionam as relações lógicas. Principalmente AND, OR e NOT.</li>
<li>Estude uma linguagem de programação &#8211; usando o manual da linguagem, aprenda as palavras reservadas, os comandos e blocos de construção de programas. Usando Java como exemplo temos a seguinte lista:
<ol>
<li>Tipos de dados &#8211; int, long, short, byte, char, float, double e boolean</li>
<li>Operadores &#8211; +, -, *, /, %, &lt;, &gt;, &lt;=, &gt;=, !=, == e alguns outros</li>
<li>Estruturas de decisão &#8211; if e switch</li>
<li>Estruturas de repetição &#8211; for, while e do/while</li>
<li>Declaração de métodos (ou funções se fosse em C)</li>
</ol>
</li>
<li>Faça muitos exercícios &#8211; uma coisa que as pessoas demoram a entender (ou aceitar) é que programação precisa de exercício, o programador precisa ser capaz de entender o problema em termos de construções básicas que fazem parte da linguagem com a qual trabalha. Precisa ser capaz de expressar a solução com essas construções e quanto mais programamos mais rapidamente identificamos quais serão os itens que expressarão a resposta. Uma estratégia que estou pensando que pode funcionar (tive essa ideia pensando na forma como estudamos música) é refazer os programas que já foram feitos várias vezes, não estou falando de escrever o programa copiando, e sim de resolver os mesmos problemas várias vezes adicionando um ou dois novos problemas por semana, aos poucos ganha-se mais experiência e mais confiança na resolução de problemas.</li>
<li>Aprenda a escrever claramente &#8211; sim, a interpretação de texto e a capacidade de descrever a solução do problema de forma clara são fundamentais na vida de um programador.</li>
<li>Aprenda a usar a entrada e saída via teclado &#8211; isso é importante para podermos começar a fazer programas com os quais o usuário pode interagir, programas que vão solicitar por exemplo que o usuário informe um número para cálculo, ou um conjunto de números para fazer uma média, e é claro será necessário imprimir pelo menos no console o resultado do processamento.</li>
<li>Entenda o que é um endereço de memória &#8211; em Java não podemos manipular diretamente a memória do computador, mas em C podemos indicar um endereço que queremos acessar, mesmo assim, Java tem variáveis de referência e precisamos entender o que essas variáveis fazem e para que são usadas.</li>
<li>Aprenda a criar e usar <a href="http://www.paulomotta.pro.br/2009/09/01/tipos-abstratos-de-dados/" target="_blank">tipos abstratos de dados</a> &#8211; o programador pode criar seus próprios tipos de dados para organizar melhor seus programas e isso pode ser feito agrupando os tipos básicos da linguagem em novos tipos. Nas linguagens orientadas a objeto, como Java, esses tipos de dados são criados em classes, já nas linguagens estruturadas, como C, usamos structs.</li>
<li>Aprenda a fazer um loop de aplicação &#8211; as aplicações profissionais costumam continuar executando até que o usuário escolha uma opção para encerrar o programa, isso pode ser feito, por exemplo, colocando um laço que só termina quando o usuário digita um valor específico. Enteder como criar esse mecanismo, mesmo em uma aplicação que não tem interface gráfica ajuda a desenvolver muito a habilidade de programação.No nível zero de programação eu costumo trabalhar com programas que tem interface baseada em caracteres, também chamadas CHUI (CHaracter User Interface). Neste modelo, imprimimos um pequeno menu texto e ficamos lendo o que o usuário digita, interpretamos a opção, e se ela for válida executamos a ação correspondente, senão imprimimos uma mensagem para o usuário.</li>
</ol>
<p>Acredito que isso seja o necessário para &#8220;passar de faixa&#8221; saindo assim da faixa branca <img src='http://www.paulomotta.pro.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/08/18/o-que-deve-saber-um-programador-nivel-zero/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O que deve saber um programador &#8211; nível básico?</title>
		<link>http://www.paulomotta.pro.br/2010/08/10/o-que-deve-saber-um-programador-nivel-basico/</link>
		<comments>http://www.paulomotta.pro.br/2010/08/10/o-que-deve-saber-um-programador-nivel-basico/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 13:26:39 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[LINGUAGEM]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=740</guid>
		<description><![CDATA[Eu tinha programado de escrever outra coisa hoje, mas por conta de alguns comentários que fiz ontem em sala de aula resolvi postergar o outro post e escrever hoje sobre programação, coisa que já tem um tempo que não fazia. Eu gosto muito de programação, comecei cedo nisso e sempre tive dificuldade de entender porque [...]]]></description>
			<content:encoded><![CDATA[<p>Eu tinha programado de escrever outra coisa hoje, mas por conta de alguns comentários que fiz ontem em sala de aula resolvi postergar o outro post e escrever hoje sobre programação, coisa que já tem um tempo que não fazia. Eu gosto muito de programação, comecei cedo nisso e sempre tive dificuldade de entender porque as outras pessoas (principalmente alunos de informática) não tinham tanto apreço por essa atividade tão interessante (e as vezes até divertida.) Embora tenha dificuldade já consegui aceitar que nem todas as pessoas são iguais e portanto algumas não vão gostar de programação.</p>
<p>Mas para quem gosta, sei que a estrada para se tornar um bom programador as vezes é muito confusa porque temos tantas opções que fica difícil decidir para onde seguir. E é para você caro leitor desorientado que eu vou colocar uma lista de coisas que são fundamentais para a vida de um programador</p>
<blockquote><p>Vamos fazer uma observação antes, estou chamando de nível básico o programador que já fez o curso de introdução a algoritmos no primeiro período da faculdade, ou seja, ele já conhece os conceitos de uma linguagem ou de uma pseudo-linguagem do tipo: laços, estruturas de controle, estruturas de decisão, declaração de variáveis, tipos de variáveis. Se esse não for o seu caso, não desanime, eu vou colocar em breve o passo zero da programção.</p></blockquote>
<p>Então vamos começar com os conhecimentos de um programador nível básico:</p>
<ol>
<li>Saiba uma linguagem de programação &#8211; ok, essa é tão óbvia que talvez não devesse figurar aqui, mas o que eu digo por saber é *realmente* saber uma (na verdade várias, mas uma de cada vez) linguagem de programação, estudar o manual, saber como os programas daquela linguagem se comportam, quais as características, enfim, conhecer os detalhes.</li>
<li>Saiba usar um ambiente integrado (IDE) &#8211; coloquei um post <a href="http://www.paulomotta.pro.br/2009/09/21/a-importancia-do-uso-de-ides/" target="_blank">aqui</a> que fala da importância dessas ferramentas, elas tornam o programador mais produtivo (se ele souber usar o máximo de ferramentas possível claro.)</li>
<li>Saiba criar funções (ou métodos) &#8211; isso é muito importante para modularizar o seu código, entenda também como acontece a passagem de parâmetros e o retorno de valores na sua linguagem de programação de trabalho. Em Java por exemplo os parâmetros sempre são passados por cópia, em C já podemos passar endereços de memória, essas coisas fazem muita diferença tanto no desempenho quanto no resultado do programa.</li>
<li>Saiba trabalhar com arquivos &#8211; sim, isso é uma coisa que você vai fazer muito, abrir arquivos, ler arquivos, escrever em arquivos, gravar no final de arquivos, gravar no meio do arquivo, copiar de um arquivo para outro, e se possível conhecer alguns formatos de arquivo (conhecer no sentido de como o arquivo é estruturado.)</li>
<li>Saiba formatar datas &#8211; outra tarefa muito comum, e geralmente enjoada nas mais diversas linguagens, é trabalhar com datas. Imprimir a data atual, contar quantos segundos passaram, calcular uma data futura (que dia será daqui a 43 dias?) e calcular uma idade são ótimos candidatos.</li>
<li>Saiba manipular strings &#8211; strings são conjuntos de caracteres tais como nomes, endereços, frases. É muito útil (mentira, é VITAL) saber manipular isso, fazer uma substring, verificar se uma string está contida na outra, dividir uma string em várias baseado em algum caracter separdor tipo vírgula ou espaço. Para tudo isso existem funções prontas.</li>
<li>Conheça a biblioteca padrão da linguagem &#8211; acredite se quiser, quando uma linguagem é criada, junto com ela são oferecidas muitas funções (ou métodos) prontos para fazer muitas das coisas que precisamos, as vezes vejo as pessoas recriando funções que estão prontas só porque não leram o manual. Todas as linguagens tem funções para matemática, manipulação de strings, data, formatação e por aí vai.</li>
<li>Conheça os principais algoritmos &#8211; sim, quando não temos a função pronta para alguma coisa que queremos fazer direto na linguagem, muitas vezes existe o algoritmo para realizar aquela tarefa, mas se você não pegar um livro de algoritmos e pelo menos souber quais existem e para que servem fica mais complicado de resolver problemas! Algoritmos de ordenação, estruturas de dados, buscas são imprescindíveis. Saber os algoritmos de cabeça é muito melhor, mas nem sempre dá para guardar todos, o mínimo então é saber duas coisas:
<ol>
<li>Que o algoritmo existe</li>
<li>Para que ele serve</li>
</ol>
</li>
<li>Aprenda a usar algum framework de interfaces &#8211; sim, pode parecer que não, mas os usuários precisam de algum tipo de tela para mexer no seu programa. Existem vários tipos de bibliotecas para isso, e você precisa conhecer algum, algumas vezes eles vêm embutidos na linguagem, como é o caso do Java que tem o AWT e o Swing, as vezes você precisa usar uma biblioteca externa como é o caso do C++, você pode até mesmo usar uma biblioteca de interface via web, mas isso é um outro tipo de aprendizado.</li>
</ol>
<p>Com esses 9 passos você terá uma vida de programação mais fácil, é claro que ainda existem muitos outros tópicos que eu considero importantes, mas aí já é para o próximo nível de programação (intermediário) que vai ficar para um próximo post.</p>
<p>Não pare de ler, estude outras linguagens, isso ajuda a expandir a forma de pensar nos problemas. Como consideração final fica uma lista de algoritmos e estruturas de dados obrigatórios:</p>
<ul>
<li>Estruturas de dados
<ul>
<li>Array (Vetor)</li>
<li>Matriz</li>
<li>Árvore Binária</li>
<li>Lista encadeada</li>
<li>HashTable (ou HashMap)</li>
</ul>
</li>
<li>Algoritmos
<ul>
<li>BubbleSort (esse é só para conhecer mesmo&#8230;)</li>
<li>Merge Sort</li>
<li>Busca Binária</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/08/10/o-que-deve-saber-um-programador-nivel-basico/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Computador capaz de decifrar línguas antigas</title>
		<link>http://www.paulomotta.pro.br/2010/07/21/computador-capaz-de-decifrar-linguas-antigas/</link>
		<comments>http://www.paulomotta.pro.br/2010/07/21/computador-capaz-de-decifrar-linguas-antigas/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 12:00:51 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Inovação]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[Ci]]></category>
		<category><![CDATA[Ciências]]></category>
		<category><![CDATA[LINGUAGEM]]></category>
		<category><![CDATA[Pesquisa]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=657</guid>
		<description><![CDATA[
Cientistas do MIT e da Universidade do Sul da Califórnia desenvolveram um sistema baseado em inteligência artificial capaz de decifrar uma antiga língua, Ugaritic (ok não vou tentar traduzir isso&#8230;) em apenas algumas horas. Esse era um desafio antigo que as pessoas não achavam que seria possível de ser vencido devido à natureza da tarefa [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="pedra entalhada" src="http://web.mit.edu/newsoffice//images/article_images/20100628141035-0.jpg" alt="" width="368" height="260" /></p>
<p>Cientistas do MIT e da Universidade do Sul da Califórnia desenvolveram um sistema baseado em inteligência artificial capaz de decifrar uma antiga língua, Ugaritic (ok não vou tentar traduzir isso&#8230;) em apenas algumas horas. Esse era um desafio antigo que as pessoas não achavam que seria possível de ser vencido devido à natureza da tarefa que demanda muita intuição e raciocínio lógico. Os pesquisadores acreditam que o sistema poderá ajudar arqueólogos a decifrar algumas línguas antigas que ainda não foram resolvidas além de ajudar em tradutores eletrônicos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/07/21/computador-capaz-de-decifrar-linguas-antigas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Experimentando as extensões de Lua</title>
		<link>http://www.paulomotta.pro.br/2010/06/16/experimentando-as-extensoes-de-lua/</link>
		<comments>http://www.paulomotta.pro.br/2010/06/16/experimentando-as-extensoes-de-lua/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 17:28:14 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Principal]]></category>
		<category><![CDATA[LINGUAGEM]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=574</guid>
		<description><![CDATA[O interessante das linguagens de hoje é como permitem que o próprio usuário crie suas extensões ampliando a aplicabilidade da linguagem. Estou criando uma API feita em Lua para simplificar o acesso a uma biblioteca feita em C, de uma maneira geral C e Lua já se falam bem, mas você pode fornecer mais facilidades [...]]]></description>
			<content:encoded><![CDATA[<p>O interessante das linguagens de hoje é como permitem que o próprio usuário crie suas extensões ampliando a aplicabilidade da linguagem. Estou criando uma API feita em Lua para simplificar o acesso a uma biblioteca feita em C, de uma maneira geral C e Lua já se falam bem, mas você pode fornecer mais facilidades para o seu usuário.</p>
<p>O problema que eu sempre esbarro é ter umas ideias malucas para as quais eu não acho exemplos aí tenho que ficar experimentando até fazer funcionar. Vou colocar aqui depois um exemplo de como usar as metatables de Lua para criar seus próprios objetos. Já existe muito material espalhado na rede, mas estou tentando juntar muita coisa.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/06/16/experimentando-as-extensoes-de-lua/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java é o novo COBOL?</title>
		<link>http://www.paulomotta.pro.br/2010/06/11/java-e-o-novo-cobol/</link>
		<comments>http://www.paulomotta.pro.br/2010/06/11/java-e-o-novo-cobol/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 15:42:34 +0000</pubDate>
		<dc:creator>prmottajr</dc:creator>
				<category><![CDATA[Principal]]></category>
		<category><![CDATA[Tendências]]></category>
		<category><![CDATA[ARQUITETURA]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[LINGUAGEM]]></category>
		<category><![CDATA[PROGRAMAÇÃO]]></category>
		<category><![CDATA[SISTEMA]]></category>

		<guid isPermaLink="false">http://www.paulomotta.pro.br/?p=568</guid>
		<description><![CDATA[Ontem tive um interessante debate com o Pedro, um grade amigo meu (troquei o link para o blog correto), sobre Java é como a linguagem e plataforma têm evoluído. Recentemente ele participou de uma conferência nos EUA, onde mora atualmente, e comentou que os palestrantes mostravam uma percepção de que o Java é o novo [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem tive um interessante debate com o Pedro, um grade <a href="http://thoughtsforbeans.blogspot.com" target="_blank">amigo meu</a> (troquei o link para o blog correto), sobre Java é como a linguagem e plataforma têm evoluído. Recentemente ele participou de uma conferência nos EUA, onde mora atualmente, e comentou que os palestrantes mostravam uma percepção de que o Java é o novo COBOL, acho que isso fica ainda mais forte com a <a href="http://www.infoworld.com/d/developer-world/java-becoming-new-cobol-204" target="_blank">publicação da InfoWorld</a> inclusive é muito interessante.</p>
<p>Conversamos bastante sobre isso, é existem alguns pontos a se considerar, temos uma grande quantidade de código Java escrito para sistemas corporativos, realmente a representatividade do Java atualmente lembra a do COBOL. Eu ainda não sei se concordo totalmente, mas especula-se que o Java como linguagem esteja em seu momento de declínio, por ser mais difícil que as outras linguagens. Não sei se acho tão complicado assim, na verdade existe um grande fantasma que diz que Java é muito difícil (embora eu concorde que é necessário estudar bastante para dominar.)</p>
<p>Por outro lado a plataforma Java apresenta grande sucesso, tanto na parte de componentização atual quanto na questão do uso da máquina virtual Java mesmo para outras linguagens, atualmente existem implementações de outras linguagens para rodar sobre a máquina virtual, e acredito que principalmente porque é muito chato ter que recompilar a sua linguagem para cada uma das plataformas, se você pensar que já tem uma empresa (Oracle/Sun) que cria uma máquina virtual para diversas plataformas físicas e isso garante que o ambiente da sua linguagem vai rodar em outras plataformas, porque ter esse trabalho todo?</p>
<p>Uma coisa importante para se considerar sempre é o <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" target="_blank">índice TIOBE</a> que mantém um ranking das linguagens de programação e Java e C continuam lá no topo, outras linguagens têm subido e descido como sempre. Uma que ganhou muito espaço foi Objective-C, porque? Porque é a forma de criar aplicações para iPhone.</p>
<p>Acredito que outras tecnologias apresentam certas facilidades para desenvolver sistemas de forma rápida, tais como Ruby on Rails e até mesmo PHP, mas quando falamos de implementar a parte que dará suporte às regras de negócio, a parte de lógica ainda acredito em usar o Java, principalmente pela grande quantidade de facilidades que temos disponíveis para ajudar no desenvolvimento.</p>
<p>Vamos continuar acompanhando para saber o rumo dessas mudanças no mundo de desenvolvimento.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.paulomotta.pro.br/2010/06/11/java-e-o-novo-cobol/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
