Rose Brasil Forum
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[Guia] Programação: por onde começar?

Ir para baixo

[Guia] Programação: por onde começar? Empty [Guia] Programação: por onde começar?

Mensagem  Amaterasu Sáb Nov 17, 2012 9:52 pm

Programação: por onde começar?


Como têm surgido muitos tópicos a respeito de "como começar", decidi criar este pequeno guia. Sinta-se à vontade para sugerir alterações, criticar certos pontos ou tirar dúvidas. Deixo claro que o guia não está completo. Ainda preciso adicionar links de bons tutoriais para cada seção e exemplos de exercícios e suas soluções, além de citar, para cada linguagem, quando se deve partir para a próxima. Mas farei isso aos poucos dependendo da aceitação do guia pelo pessoal. Como são muitos assuntos e pouco tempo para escrever, o guia está muito superficial. Pretendo também melhorar isso com o tempo.


Introdução - linguagens de programação vs pseudocódigo
Programas funcionam através de instruções, que o computador deve seguir rigorosamente. Para informar essas instruções ao computador, usamos linguagens de programação. É muito comum professores, nos cursos de computação, começarem por pseudocódigo ("falso código"). O pseudocódigo não passa de um código muito parecido com a linguagem humana, mas que o computador não entende (é um intermediário entre uma linguagem de programação e a linguagem humana). Ou seja, você não pode criar um programa com ele, mas serve como base para o código final. Quanto mais aprende programação, mais faz uso desse tipo de código, pois como ele dispensa as regras de uma linguagem de programação, é muito fácil de se escrever; você é livre para escrevê-lo como quiser, desde que qualquer programador o consiga entender. Um exemplo de pseudo-código para exibir 10 vezes a mensagem "Olá mundo" na tela poderia ser:
Código:
repetir 10 vezes:
exibir_na_tela "Olá mundo"
Da mesma forma, você poderia escrever:
Código:
exibir_na_tela "Olá mundo" 10 vezes
Ou poderia escrever qualquer outro "falso código", desde que as pessoas consigam entender o que ele faz.

Eu sou totalmente contra a ideia de começar por pseudocódigo. Como é bastante fácil, e quase totalmente sem regras, você acaba fugindo muito da ideia de uma linguagem de programação; por ser um intermediário entre as linguagens de programação e as linguagens humanas, escrever pseudocódigo sem conhecer programação resulta em códigos muito mais próximos à linguagem humana, totalmente afastados daquilo que o computador entende. O ideal é ter códigos de fácil entendimento, mas que também sejam facilmente "traduzidos", posteriormente, para uma linguagem de programação, o que não pode ser conquistado quando não se sabe nada sobre programação. Além disso, é bastante chato ficar escrevendo códigos que você não poderá ver "rodando" Sad.

Linguagens de programação podem ser facilmente comparadas às linguagens humanas. Nós usamos vírgulas, pontos, ponto-e-vírgula, dentre vários outros sinais de pontuação para dar coesão e coerência ao nosso texto; às vezes a falta de uma vírgula pode alterar totalmente o sentido do texto, outras vezes pode torná-lo incompreensível. Numa linguagem de programação, a falta de um sinal também pode alterar o resultado de um código, ou simplesmente torná-lo incompreensível ao computador, fazendo com que o código nem "rode". A vantagem das linguagens entre humanos é a nossa capacidade de entender pequenas a grandes variações. Quero dizer: nós temos a capacidade de não só perceber que um texto não faz sentido, mas também de pensar em modificações que o fariam ter sentido dentro do contexto e, assim, dar-lhe o correto significado. Um computador não faz nada disso. Se o seu código tiver uma falha mínima, o computador só será capaz de perceber que o código não faz sentido, não será capaz de "pensar" em um jeito de lhe dar sentido. Então, simplesmente te dirá que não entendeu e te pedirá para corrigir.


Portugol e derivados
Pensando em tornar a programação fácil a novatos em programação que tenham como idioma nativo a Língua Portuguesa, foi criado o Portugol. Afinal, programação é, quase sempre, em inglês. Ou seja, além de você estar programando numa linguagem (de programação) com regras totalmente estranhas às que você está acostumado, ainda tem que fazer isso em inglês! Para quem não conhece o idioma, é uma grande complicação!

Portugol é uma linguagem de programação (portanto seus códigos podem ser executados por um computador) cujos comandos estão em português. É muito simples, e de uso meramente acadêmico; não serve para uso profissional e para desenvolver grandes projetos (não quer dizer que não seja possível, só não é adequada para isso).

Mas devo lhe adiantar: se quer aprender a programar, deve antes aprender inglês! Quase todos os bons materiais na internet são encontrados em inglês (às vezes em russo ou em chinês, mas nesses casos o jeito é procurar outro material =P... em inglês!). Muitos bons livros não têm tradução para o português, e todas as linguagens hoje usadas profissionalmente têm seus comandos em inglês. Então, para se tornar um programador, você terá que saber inglês e ponto-final.


Linguagens de programação vs linguagem de máquina
Eu disse que a linguagem de programação é a linguagem que o computador entende. Isso é mentira! O computador entende uma única linguagem, e existem várias linguagens de programação. A linguagem que o computador entende, em resumo, é aquela famosa "linguagem" dos 0's e 1's (é chamada de linguagem de máquina). Existem várias sequências de 0's e 1's, cada uma realizando uma instrução (comando) distinta. Porém, como essa linguagem é bastante complicada para os humanos (imagina ter que decorar um monte de sequências de 0's e 1's e o que faz cada sequência), foram criadas as linguagens de programação. O que acontece é que, para cada linguagem de programação, existe um programa que converte o código para a linguagem de máquina. Esse programa é genericamente conhecido como compilador. O funcionamento de um programa desses pode ser explicado de maneira simples: na sua linguagem, existem palavras (em inglês, geralmente). Cada palavra representa um comando. O compilador lê a palavra, e no seu lugar põe o equivalente em 0's e 1's (gerando os .exe). Obviamente não é tão simples assim, mas não sei como eu poderia me aprofundar neste assunto tendo como público-alvo os novatos em programação. Então, pararemos por aqui, apenas saiba que a ideia é realmente esta, e é assim que funciona, de maneira muito simplificada.


Linguagens compiladas vs linguagens interpretadas
Acima, eu expliquei, de maneira muito superficial, sobre o funcionamento dos compiladores. De fato, existem inúmeras linguagens que são traduzidas para a linguagem de máquina por um compilador. Mas nem todas são assim. Existe uma segunda categoria de linguagens, as linguagens interpretadas (como as linguagens de script). Elas não são transformadas em ".exe". Existe um programa que, à medida que a vai traduzindo, já a vai executando, não sendo necessário produzir um .exe para depois a executar.

Um bom exemplo para o pessoal do fórum é a linguagem de scripts (npcs) do Cronus. Você escreve um script, mas não há nada que o transforme em um .exe. O Cronus simplesmente vai interpretando e executando o código, comando a comando, sempre que o NPC é executado. As linguagens de script são uma subcategoria das linguagens interpretadas.

Alguns exemplos de linguagens compiladas são C, C++, Pascal e Delphi. Quanto às linguagens interpretadas, temos Python, PHP, Java, Lua e Ruby. Existem, obviamente, dezenas de outras linguagens em cada categoria. Além disso, entenda que uma linguagem compilada também pode ser interpretada e vice-versa. Quero dizer: você pode fazer, para a mesma linguagem, um programa que a transforme em .exe, e outro programa que simplesmente a execute comando a comando. Em geral, as linguagens compiladas têm desempenho muito superior às linguagens interpretadas, pois são formadas pelos 0's e 1's, então não exigem um programa intermediário traduzindo comandos complexos a cada execução, elas já estão traduzidas, basta mandar o computador executar de uma vez, sem intermédios!


Por onde começar?
Depois de algumas dezenas de linhas, finalmente vou começar a responder à principal dúvida: "por onde começar?". Existem muitas linguagens, e novas linguagens estão sempre surgindo. Além disso, a resposta para esta pergunta varia de acordo com as suas necessidades. Se você só quer aprender o suficiente para desenvolver sites, poderá pular muitos passos; se não curte Web, e só quer aprender a mexer no código-fonte do Cronus, também poderá pular outros passos. Também depende de que tipos de softwares você deseja desenvolver, e em que áreas deseja atuar. Mas aqui eu considerarei que você está disposto a passar por todos os passos, e disposto a se tornar um programador que conhece "um pouco de tudo", além de, é claro, muito de sua área de preferência.

O que muda de uma linguagem para outra é, basicamente, a sintaxe. Uma delas pode por cada comando em uma linha, outra pode separar os comandos por ponto-e-vírgula; uma pode determinar que comando é toda palavra que contenha apenas letras e números, outra pode definir que são apenas as palavras formadas por letras; e assim vai. Há muitas diferenças que não vou citar, pois você ainda não está preparado para entender. O importante é saber que a sintaxe é o conjunto de regras que define a linguagem. O mais interessante é que cada linguagem mantém regras similares a várias outras linguagens. Então, há medida que você vai aprendendo as linguagens, vai ficando muito mais fácil aprender novas linguagens, pois muitas regras você já conhece.

Além da sintaxe, uma linguagem se diferencia de outra pelos recursos... por exemplo, uma pode trazer ótimos comandos para trabalhar com cálculos matemáticos, mas poucos para trabalhar com textos; outra pode trazer ótimos comandos para textos, mas quase nada para cálculos. Isso faz com que nenhuma linguagem seja superior a outra, tudo depende do que você está querendo desenvolver.

Quanto ao aprendizado, não há como dizer que é sempre mais fácil começar por tal linguagem. Existem várias linguagens ótimas para começar, várias linguagens ótimas como "segunda linguagem", e assim vai. Então, vou dar apenas uma sugestão dentre as inúmeras possíveis. Sinta-se à vontade para inverter a ordem de aprendizado, para ignorar uma linguagem, ou para aprender outras entre elas.

Linguagem de scripts Cronus
Se você faz parte da comunidade Cronus e curte ou já curtiu Ragnarok, está com sorte! A linguagem de script do Cronus é uma das mais fáceis que já conheci e te dá uma ótima base para começar. A estrutura de um npc é muito fácil de entender, e há vários tutoriais no fórum ensinando a utilizá-la. Recomendo começar por ela. Leia os tutoriais e pratique! Sem prática, não se aprende a programar. Seu primeiro script provavelmente será quase uma cópia, pois é difícil decorar a sintaxe logo na primeira leitura. Quando você tenta escrever um script baseado apenas no que leu, fica bastante perdido "aqui deveria ter um ponto-e-vírgula? depois desta parte, vinha o quê mesmo?" e fica variando entre a aba do seu código e a do tutorial, praticamente copiando cada detalhe do tutorial. É totalmente comum isso, então eu recomendo começar bem devagar. A cada detalhe mínimo que você aprender, já passe para o código. Faça algo simples usando isso. E quando aprender algo novo, não reaproveite o primeiro código só para inserir o que aprendeu! Re-escreva todo o código! Se você apenas ler, demorará semanas para conseguir programar sem precisar um tutorial ou npc do lado pra relembrar cada passo. Mas se você praticar enquanto ler, em menos de uma semana já estará programando "fluentemente". E, por favor, não poste qualquer [s]merda de[/s] script que você desenvolver na área de releases (lançamentos) de scripts. Tenha paciência, se você levar o aprendizado a sério, em pouco tempo você já estará sabendo o suficiente para fazer algo mais interessante e útil.

Python
Nesta parte eu sempre costumo recomendar Visual Basic. Espero não me arrepender de ter mudado para Python. Python é uma linguagem de script muito fácil, porém a sintaxe é muito diferente da linguagem de scripts do Cronus, então você terá dificuldades no início, mas aprenderá muitas novas regras que outras linguagens podem exigir! No entanto, a sintaxe é tão fácil de compreender que os códigos em Python às vezes parecem pseudocódigos (claro, em inglês)! É a linguagem mais completa que eu já conheci; praticamente qualquer função (genérica) que você precisar terá em Python!

Como Python é uma linguagem de script, requer um interpretador, que pode ser obtido no [url="http://www.python.org/download/"]site oficial[/url]. Há diferenças entre o Python 2.x e o Python 3.x. Recomendo começar pelo Python 2.7. Se gostar da linguagem, pode depois aprender Python 3 (é a mesma linguagem, só tem algumas diferenças simples, então não será nem um pouco difícil migrar do 2 para o 3). Enquanto não acho um tutorial em português e mais fácil para novatos, pode tentar o [url="http://docs.python.org/tutorial/index.html"]tutorial oficial[/url]. O Google também é um ótimo amigo Smile.

Visual Basic(.NET)
Uma das coisas que os iniciantes mais sentem falta é da parte visual de um programa. A maioria começa por C, Java, Pascal, Python... e acaba achando, erroneamente, que é muito complicado fazer um programa com interface gráfica: menus, botões, caixas de texto etc. Java é uma das melhores linguagens para se trabalhar com a interface gráfica, mas não foi desenvolvido voltado para isso; Python, embora não seja tão fácil, também tem bibliotecas que tornam esse trabalho não tão difícil.

Mas, independente da linguagem que você escolha, provavelmente não será tão fácil quanto Visual Basic (VB)! Como a primeira palavra do nome já diz, "Visual" Basic é uma linguagem voltada para a criação de programas com interface gráfica. E é bem fácil, depois que se entende como funciona.

Ao baixar o compilador do Visual Basic, favor não confundir Visual Basic.NET com Visual Basic. A partir da versão 7 da linguagem, ela sofreu uma grande reestruturação para se adequar ao pacote .NET. Então, hoje existem dois principais versões do "Visual Basic", o 6 e o .NET (a partir do 7).

Visual Basic faz parte do pacote Visual Studio, que inclui outras linguagens. Para programar em VB, você pode baixar o Visual Studio completo ou baixar só o Visual Basic. Apesar de já terem sido lançados o Visual Basic 2010 e o 2012, não houve nenhuma mudança capaz de afetar usuários novatos, então o [url="http://www.baixaki.com.br/download/visual-basic-2008-express-edition.htm"]Visual Basic 2008[/url] é suficiente.

Um ótimo site com códigos prontos para Visual Basic é o pscode.com. Só um detalhe: na busca, ponha .Net, e não Visual Basic (a diferença eu já expliquei). Cuidado que .Net engloba várias linguagens, então veja se o código não é para VC++.NET ou VC#.NET, em vez de VB.NET, antes de baixar.

Web - HTML, CSS, Javascript
Para mim, o desenvolvimento Web é extremamente chato. Isso porque temos que trabalhar com linguagens que não são linguagens de programação =X. HTML é uma linguagem de marcação, enquanto CSS é uma linguagem de estilos. Nunca gostei desses tipos de linguagens, mas acho importante aprender sobre elas. Comece estudando HTML, faça páginas simples. Assim como fez com a linguagem de scripts do Cronus, a cada novo detalhe que aprender já passe para o "código". Também evite reaproveitar seus códigos antigos, pois a repetição te ajudará a memorizar.

Dependendo da sua disposição e desempenho, em um ou dois dias já terá feito algumas páginas simples. Então, recomendo avançar para Javascript, que é a principal linguagem de programação usada na Web. Com ela, você poderá dar "vida" ao site. Poderá sair daquela "estaticidade" do HTML e fazer páginas que interajam com o usuário. Finalmente, é bom aprender CSS/CSS3, para deixar sua página mais limpa e bonita.

Caso curta o desenvolvimento para Web, após aprender PHP pode se aprofundar em cada uma das linguagens citadas e estudar HTML5 e jQuery. No [url="http://www.w3schools.com/"]w3schools[/url] há tutoriais para cada linguagem citada (vide menu lateral).

Web - PHP e MySQL
PHP não é uma linguagem usada exclusivamente para Web, mas esta é com certeza a área em que é mais usada. É bastante parecida com a linguagem de scripts do Cronus, então não será difícil de aprender.

Quando se fala de Web, é importante entender a diferença entre o lado do cliente (client side) e o do servidor (server side). O site fica hospedado no servidor e, para ser acessado, é necessário um navegador, que fica no cliente; fica fácil perceber que o código do site é executado apenas pelo navegador, ou seja, pelo cliente. O servidor, que está mantendo o site online, não se importa em interpretar esse código, somente em mandar a página para o navegador quando este requisita. Assim, Javascript permite interação entre site e usuário, mas apenas dentro do seu navegador. Quando você quer que haja dinamicidade dentro do servidor, é necessário uma linguagem atuando dentro dele. O bom do servidor é que é possível ter absolutamente qualquer linguagem. Porém, existem aquelas mais utilizadas: PHP, ASP(.NET) e Python. Eu não sei ASP, mas dentre as duas restantes, acho PHP mais fácil.

MySQL é uma linguagem de consulta estruturada (SQL). Basicamente, é uma linguagem que nos permite interagir com bancos de dados. Obviamente não foi feita exclusivamente (e, muito provavelmente, nem principalmente) para Web, mas é a mais conhecida nesta área. Fica do lado do servidor, assim como PHP. É também a linguagem usada pelo Cronus.

C/C++
Finalmente, minha linguagem preferida: C. É a linguagem usada para o código-fonte (source) do emulador Cronus. O que acho interessante em C é o fato de que tudo é possível de ser feito, por mais difícil que possa ser às vezes. Linguagens como Python e PHP foram criadas em C! C++ é uma "extensão" do C; em resumo, é a linguagem C com orientação a objetos e templates.

Não recomendo apostilas para aprender C. Acho que é só a partir daqui que você começa a entender a programação, por isso recomendo apenas livros. Eu aprendi pelo livro "Programando em C/C++: a Bíblia", do Jamsa. Embora o livro seja muito antigo e esteja bem desatualizado, é ainda um ótimo livro. Existe também o "Como programar em C", do Deitel, mas particularmente não achei tão bom. Provavelmente uma questão de opiniões, considerando que é um dos mais indicados, portanto também o recomendo.


Algoritmos e estruturas de dados
Se você conseguiu chegar até aqui, parabéns Very Happy, percorreu quase 10% do caminho (brincadeira, não chega nem perto de 10%).

Agora você sabe criar programas em console, com interface gráfica, sabe criar sites e interagir com bancos de dados... mas, você acha que conseguiria, sem copiar códigos de terceiros, criar aquela ferramenta simples do paint que preenche uma região com uma cor? Se você consegue, meus parabéns! Mas tem certeza de que seu código é eficiente o suficiente para não travar o programa? Acha que consegue criar uma ferramenta de highlight (como a do notepad++)? Claro, sempre levando "eficiência" em conta, ninguém quer um programa que trave a cada caractere digitado. Considere que a empresa para a qual você trabalha te peça para desenvolver um software que ordene uma lista com até um milhão de nomes, em uma determinada linguagem. Você conseguiria fazer isso de maneira eficiente, independente da linguagem, sem pegar códigos prontos? Considere ainda que você está desenvolvendo um mmorpg, e quando o jogador clica em um quadrado (para o personagem andar), seu código tem de determinar que percurso o personagem dele deverá percorrer pra chegar naquele quadrado (afinal, ele não pode atravessar paredes, então um caminho reto nem sempre é a solução). Você conseguiria fazer esse código, sem que trave o servidor quando houver muitos personagens se deslocando? Ou, ainda nesse seu mmorpg, se você precisasse criar uma linguagem de scripts, será que conseguiria?

O estudo de algoritmos te permitirá resolver esses e muitos outros problemas de maneira eficiente. Espero que você já tenha percebido isso, mas caso não tenha: algoritmo não é uma linguagem de programação >.<. Um algoritmo é uma sequência de cálculos/instruções que tem por objetivo produzir certo resultado. Por exemplo, o algoritmo para achar o caminho no seu mmorpg deve realizar uma série de comandos a fim de te informar qual o melhor caminho a ser percorrido pelo personagem (resultado).

Certos algoritmos mais complexos exigem algumas estruturas de dados mais "avançadas" e vice-versa, então o estudo dos dois está relacionado.

Espero que logo eu possa melhorar esta seção de algoritmos.


The end
Pois é, acaba por aqui. Quanto aos créditos, they are all mine muahuahua. Se for copiar, copie direito (as cores atuais estão bem bonitinhas =D).

Rafael Perrella - Cronus Emulator
Amaterasu
Amaterasu
Admin

Mensagens : 96
Data de inscrição : 14/11/2010

http://www.arumicro.net.tc

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos