segunda-feira, 20 de agosto de 2012

Algoritmos, introdução à lógica I

A construção de algoritmos exige um bom entendimento de lógica. Pode parecer que um conjunto de instruções sequenciais bem definidas não exija tal conhecimento, porém quando você tem um condicional no meio dessas instruções você acaba na verdade é fazendo um teste lógico, verificando se uma condição é atendida (verdadeira), ou não (falsa). Veja esse simples exemplo:

SE você está apertado, vá ao banheiro, SE NÃO, continue fazer o que estava fazendo.

A condição testada aqui é "você está apertado?" E ela só pode assumir dois valores: "sim eu estou apertado",ou "não eu ainda não estou apertado". (Para fins didáticos, ignorem o "mais ou menos apertado" por enquanto).

Variáveis booleanas:

Uma variável booleana é aquela que só pode assumir um valor de dois: ou ela é zero, ou ela é um, ou ela é sim, ou ela é não... no fundo ou ela é verdadeira, ou então é falsa.

Uma condição a ser testada vai ser sempre booleana, mesmo que contenha uma variável real, inteira ou etc. Veja o exemplo:

x é um número inteiro qualquer;
SE x > 10, ENTÃO você multiplica x por 1,2 ; SE NÃO, você multiplica x por 5.

(Ou seja, se tivermos x = 30, ao fim desse processo x será igual à 36, no entanto se tivéssemos x=5 ao final teríamos x=25 )

Apesar de x ser um número inteiro e 10 também ser a condição "x>10" é booleana. Ou x é verdadeiramente maior que 10, ou então não é.

Átomos:

Não, não estamos falando de física ou química. Em lógica existem átomos, que são as proposições mais simples, sobre as quais você só precisa fazer um teste e que não possuem conectores. "x>10" é um átomo, você só precisa saber se x é maior que 10, não precisa testar outra coisa. "Você está apertado" também é um átomo, afinal, a unica coisa testada e se o sujeito está, ou não, apertado.

Moléculas:

A ideia aqui é a mesma da natureza: átomos se ligam e formam moléculas. Existem situações em que uma unica proposição atômica não descreve uma situação e mesmo que duas ou mais condições sejam testadas separadamente, em sequencia, o resultado obtido não será satisfatório. Veja o exemplo do segurança de uma festa:

"Por causa da legislação local, o segurança da portaria de uma festa recebe a seguinte ordem: Se a pessoa tiver 18 ou mais anos ela pode entrar, se não, se for maior de 16, poderá entrar com autorização dos pais, o resto não entra."

Se usássemos só os átomos:

1.É maior de 18? Então entra, caso o contrário não entra.
2.É maior de 16? Então entra, caso o contrário não entra.
3.Tem autorização? Entrão entra, caso o contrário não entra.

*Maior de, leia como "maior ou igual a".

Parece ok?

Alice é tem 21 anos e não tem autorização dos pais (pois não precisa).
Bianca tem 17 anos e não tem autorização dos pais.
Carolina tem 16 anos e tem autorização dos pais.
Débora tem 15 anos e não tem autorização dos pais.
Eveline tem 14 anos e tem autorização dos pais.

Pela legislação, teoricamente Alice, que é maior de 18 e Carolina, que é maior de 16 e tem a autorização deveriam poder entrar na festa.

MAS:

Alice tem 21 anos, é admitida na primeira etapa e entra, as demais são barradas, inclusive Carolina, que é menor de 18 e portanto é barrada na instrução 1.

E se fizéssemos  2-1-3?

Ai Alice, Carolina e Bianca entram, afinam a condição "2" diz para admitir maiores de 16.

E 3-2-1?

Carolina e Eveline entram, as demais são barradas, afinal ele vai admitir as que tem autorização e recusar as demais.

Ok, é bobo mas é só para exemplificar. Um espertinho poderia argumentar que é possível chegar na resposta certa dizendo:


1.É maior de 18? Então entra, caso o contrário testa 2.
2.É maior de 16? Então testa 3, caso o contrário não entra.
3.Tem autorização? Entrão entra, caso o contrário não entra.

Realmente nesse caso Alice é admitida no teste 1, Débora e Eveline são barradas no teste 2, Caroline é admitida no teste 3 enquanto Bianca é barrada no mesmo teste. Tudo isso usando apenas átomos certo?

Errado! Os testes dentro de testes dá a impressão de estarmos lidando apenas com átomos, mas o que vai definir se uma das garotas vai ser admitida na balada ou não é o conjunto das variáveis booleanas, ou seja do resultado dos testes e não o valor de um átomo.

Na verdade temos apenas um teste para definir se uma guria vai entrar ou não:

1. OU É maior de 18, OU é maior de 16 E nesse caso tem autorização? Se sim entra, se não é recusada.

Nesse caso Alice (maior de 18) e Carolina (maior de 16 e tem autorização) poderão entrar, enquanto as outras que são "menores de 18 E menores de 16, OU na exceção a esse caso sem autorização" não entram.

Conectores:

Não deixei o "E" e o "OU" destacados sem propósito. Quando unimos duas proposições atômicas para formar uma proposição molecular, precisamos usar os conectores para estabelecer uma "regra" de como a molécula será analisada.

Existem dois conectores básicos, o "E" e o "OU":

Conector "E":

O conector "E" funciona como uma intercessão de conjuntos, ou seja, só o que for verdade na interseção entre duas proposições, será verdade numa proposição molecular formada por esse conector. Vamos a um exemplo, será mais fácil compreender assim:

SE é homem E completou 18 anos, você deve procurar a junta de serviço militar mais próxima e se alistar!

A proposição a ser testada, "é homem E completou 18 anos" é uma molécula formada pelos átomos "é homem" e "completou 18 anos". A molécula, nesse caso, só será verdadeira se ambos os átomos forem verdadeiros! Veja:

Alberto é homem e completou 18 anos, como ambos os átomos são verdadeiros a molécula é verdadeira e ele deve se alistar.

Bruno é homem, mas ainda não completou 18, assim apenas o primeiro átomo é verdadeiro, a molécula no entanto é falsa e ele não deve se alistar.

Camila é mulher e completou  18, apenas o segundo átomo é verdadeiro, a molécula é falsa e ela não deve se alistar.

Denise é mulher e ainda não completou 18, ambos os átomos são falsos, a moléculas é falsa e ela não deve se alistar.

Conector "OU":

O conector "OU" funciona como uma união de conjuntos, ou seja, nas condições em que qualquer um dos átomos for verdade a molécula será verdadeira. Observem o exemplo:

SE for maior de 14 OU estiver acompanhada dos pais, a pessoa pode entrar.

Flávia tem 16 anos e veio com os pais, ambos os átomos estão corretos e ela pode entrar.
Gina tem 15 anos e veio sem os pais, o primeiro átomo é verdadeiro e isso basta para ela poder entrar.
Helena tem 12 anos e veio com os pais, o segundo átomo é verdadeiro e isso basta para ela poder entrar.
Iara no entanto tem 11 anos e veio sem os pais, pobrezinha, nenhum dos átomos é verdadeiro, a molécula é falsa e por isso ela não pode entrar.

Conector "NÃO":

O conector "NÃO", não serve para unir átomos e sim para inverter o sentido das proposições. Assim se temos uma proposição "a", NÃO "a" será verdadeira quando "a" for falsa e falsa quando "a" for verdadeira. Exemplo:

SE Abel NÃO estiver lá em cima, procure ele na padaria.

Se Abel estiver "lá em cima", a proposição atômica "Abel está lá em cima" vai ser verdadeira e portanto a molécula "Abel Não está lá em cima" vai ser falsa e o sujeito não deverá ir procurar Abel na padaria.

Ao contrário, se Abel não estiver lá em cima, o átomo vai ser falso a molécula verdadeira e o sujeito vai ter que ir procurar na padaria.

Usando conectores com moléculas:

Da mesma forma que usamos os conectores para unirmos átomos, podemos usa-los para unir átomos à moléculas ou até mesmo unirmos duas moléculas. A ideia do uso dos conectores continua a mesma, no entanto deve se estar atento à ordem das operações lógicas. Os testes devem ser feitos de "dentro" para "fora", começando pelos átomos e terminando nas moléculas mais complexas. Vamos voltar ao exemplo do segurança:

"OU é maior de 18, OU é maior de 16 E nesse caso tem autorização? SE sim entra, SE NÃO é recusada."

Temos aqui uma molécula complexa: "OU É maior de 18, OU é maior de 16 E nesse caso tem autorização ", formada pelo átomo "É maior de 18" e pela molécula "é maior de 16 E tem autorização". Essa última é formada pelos átomos "É maior de 16" e "Tem autorização".

Assim devemos primeiro resolver os átomos mais internos, ou seja:

a = "É maior de 16"
b= "Tem autorização"

SE "a" e "b" forem verdadeiros a molécula c = "é maior de 16 E tem autorização" é verdadeira, nos demais casos ela é falsa. Depois disso temos

c = "é maior de 16 E tem autorização"
d = "É maior de 18"

SE ou "c", ou "d" forem verdadeiros a molécula e = "É maior de 18" e pela molécula "é maior de 16 E tem autorização" será verdadeira.

Negação de moléculas:

O conector "NÃO" preserva sua lógica sobre moléculas, ou seja, ele vai passar o valor oposto ao resultado da mesma. Devemos atentar aqui é que os conectores também se invertem. Veja:

Para ser aceito ele deve ser "forte E inteligente".

Todos os que se enquadram, ou seja, todos que conseguem fazer a molécula "forte E inteligente" são aceitos, os que não conseguem, ou seja, os que fazem a negativa de "forte E inteligente" ser verdadeira são rejeitados.

Mas qual é a negativa de "forte E inteligente"? É "não forte, OU não inteligente". Percebam:

Ariel é forte e é inteligente.
Bernardo é forte, mas não é inteligente.
Carlos não é forte, mas é inteligente.
Douglas não é forte e não é inteligente.

Em Ariel o átomo "é forte" verdadeiro, por isso seu "não é forte" é falso, o mesmo vale para seu "não é inteligente". Como ambos os átomos são falsos a molécula "não é forte, ou não é inteligente" é falsa.

Bernardo tem o átomo "não é forte" falso, mas o "não é inteligente" é verdadeiro e isso é o suficiente para validar a proposição molecular "não forte, OU não inteligente". Com Carlos funciona de forma parecida.

Douglas tem verdadeiro em todas as suas negativas atômicas e por isso a molécula "não forte, OU não inteligente" é verdadeira.

Resumindo, quando for negar uma molécula, negue todos os seus componente e troque os conectores: onde for "E" vira "OU" e onde for "OU" vira "E".

Se houver uma negação dentro da molécula ela deverá ser excluída quando a molécula for negada. Veja o exemplo:

"Isso NÃO é verdadeiro", ou seja, "Isso é falso". A negação dessa molécula é "Isso NÃO NÃO é verdadeiro", que significa "Isso NÃO é falso", que no fim das contas é "Isso é verdadeiro".

Conector OU exclusivo:

Não falei desse conector, porque na verdade ele é uma junção de um conector "OU", um "E" e um "NÃO". Enquanto para o conector "OU" basta que uma das proposições seja verdadeira para que a proposição maior também o seja, já no "OU exclusive" apenas um dos componentes deve ser verdadeiro. Se não for nenhum, ou se forem ambos a proposição é falsa.

Veja o exemplo:

"OU o gato é macho, OU o gato é fêmea". O gato não pode ser macho e fêmea, nem pode ser nem macho nem fêmea.

O OU exclusivo é formado entre duas proposições "a" e "b", usando "(a OU b) E (não a OU não b)"

Veja:
a = verdadeiro ; b = verdadeiro
nesse caso "(a OU b)" = verdadeiro, (não a OU não b) = falso e "(a OU b) E (não a OU não b)" é falso.

a = verdadeiro ; b = falso
(a OU b) = verdadeiro ; (não a OU não b) = verdadeiro
"(a OU b) E (não a OU não b)" = verdadeiro. (o mesmo vale para a = falso ; b = verdadeiro)

a = falso ; b = falso
(a OU b) = falso
(não a OU não B) = verdadeiro
"(a OU b) E (não a OU não b)" = falso.

A negativa do "OU exclusivo" é portanto: "(não a E não B) OU (a E b)", ou seja, quando as duas forem falsas, ou duas forem verdadeiras.

Parece confuso: 

Pode parecer confuso, mas não é. Na próxima postagem (pretendida para 04/09 desse ano) falaremos sobre os sinais lógicos e sobre a tabela verdade, que ajudarão muito a simplificar e resolver problemas lógicos.

Antes de fecharmos eu gostaria também de fazer duas observações:

1º Para fins didáticos eu fiz parecer que é impossível testar só proposições atômicas e que os conectores eram cruciais para casos mais elaborados. Na verdade os conectores não passam de "testes" seguidos.

"a E b"

"a OU b"

2º Os termos aqui foram adaptados para o aprendizado de algoritmos. Existem outros conectores como o conector condicional "SE, ENTÃO" e o bicondicional "SE  E SOMENTE SE", porém não achei interessante tratar deles aqui e dessa forma. O "SE ENTÃO" estamos usando como "teste condicional" e será mais agradável trata-lo não trata-lo diretamente aqui e agora.





quarta-feira, 15 de agosto de 2012

Algoritmos, uma introdução.

O que é um algoritmo? Como é construído? Para que servem? Desde eventos mais elaborados no RPG Maker, até na criação de programas de computador, passando pela programação de microcontroladores, criação de planos de defesa de aquartelamentos e métodos matemáticos tudo o que precisa de informações claras e ordenadas usa algoritmos. Por isso, nesse blog, vou começar uma série de postagens-aula sobre o assunto, para ajudar futuros "game designer", programadores, ou apenas hobbistas a darem seus primeiros passos na programação.


Definição:

Algoritmo é um sequencia de passos bem definidos que seguidos ordenadamente descrevem uma tarefa, ou operação. É importante salientar que um algoritmo não é necessariamente um programa de computador, apesar destes serem feitos por algoritmos. Muitas pessoas lidam pela primeira vez com essa palavra quando estão estudando algo que envolve programação, mas é um erro achar que algoritmos só existem no mundo computacional... na verdade é bem capaz da sua mãe ter lhe passado alguns algoritmos e você nem ter notado...

"Guri! Arrume seu quarto! Depois se tiver tarefa de casa, faça-a, se não, estude!"

Passos ordenados e definidos, um algoritmo. A forma de resolver uma equação de segundo grau também é um algoritmo:

1º Se a equação não estiver igualada à 0, faça com que fique.
2º Extraia os coeficientes a, b e c.
3º Resolva o delta.
4º Use Bhaskara.

Instruções de montagem de produtos, manuais de máquinas, existem muitos outros exemplos de algoritmos que não se destinam à programas de computadores. É importante frisar isso porque parece que existe uma "barreira psicológica" em muitas pessoas, que ao associar algoritmos à programas de computador, acham que o mesmo tem que ser escrito em uma linguagem "x", que tem que ser complicado e por isso ficam apavoradas e não conseguem aprender o mesmo... Notei isso tanto com meus irmão de arma, em 2007, na academia, quanto com meus colegas de turma na disciplina de algoritmos no curso de engenharia do instituto. Inclusive, nessa última, consegui ajudar um colega meu a passar na prova final justamente obrigando ele fazer algoritmos "não computacionais". Por isso tirem da cabeça qualquer preconceito ou medo com relação ao tema dessa postagem, acreditem, vocês seguem e fazem mais algoritmos do que imaginam.

Um algoritmo simples:

Provavelmente você já viu esse "algoritmo" na porta de muitas instalações de segurança:

Pare;
Desligue os faróis;
Ligue a luz interna;
Identifique-se;

Não há outro caminho a seguir, o individuo que estiver entrando de carro num quartel tem que seguir essas quatro etapas e tem que seguir na ordem dada! Se ele passar correndo na guarita, berrando sua identificação provavelmente terá problemas.

Testes Lógicos:

O que torna os algoritmos interessantes, no entanto, são os testes lógicos. Eles ajudam a definir os procedimentos a serem tomados em diferentes situações. Veja esse exemplo:

Retirado da Wikipédia
Há dois testes lógicos ali: SE a lâmpada está enroscada e SE a lâmpada está fundida. A resposta dada à eles definirá que passos deverão ser tomados.

Um teste lógico simples envolve um questionamento que só pode dar dois resultados: verdadeiro ou falso. Em seguida ao teste temos as operações executadas SE o resultado foi verdadeiro e as executadas SE o teste foi falso.

Podemos no entanto ter testes complexos, com vários resultados. Um "atendimento telefônico automático" é um bom exemplo disso: Você tem um problema, liga para uma central de atendimento e ouve o conhecido "tecle 1 para isso, tecle 2 para aquilo... tecle 0 se não for nenhuma das alternativas", você identifica qual dos números atende seu problema e então segue essa opção (e morre com a espera...).

Esse tipo de teste de "vários casos" é chamado aqui de "complexo" porque ele pode ser transformado em vários testes simples "SE você tem isso tecle 1 SE NÃO, SE você tem aquilo tecle 2 ... SE NÃO tecle 0".

Ciclos:

Ciclos ocorrem quando queremos (teoricamente) que algumas instruções sejam repetidas até que uma condição seja atingida.

Nas diversas linguagens de programação, nós podemos encontrar dois tipos de ciclos, um que é interrompido quando uma condição é atingida e outro que é interrompido depois de um número de vezes, mas no fundo são a mesma coisa e um pode ser conseguido pelo outro. O que interessa no entanto é onde o teste de quebra do ciclo vai ficar, se for no início, as instruções dentro dele vão ser todas repetidas até que a condição de quebra seja satisfeita. Depois disso, quando voltar ao topo do ciclo este não será mais executado. Se o teste estiver no final, assim que a condição de quebra for alcançada, depois de executar todas as instruções ele vai sair do ciclo.

Um exemplo é um sujeito no supermercado com a (estranha) instrução de encher o carrinho com um saco de açúcar, arroz, feijão e café até que o carrinho fique cheio. Ele ir colocando os sacos nessa ordem e se a condição estiver no início ele vai parar para olhar o nível do carrinho ANTES de colocar novos sacos, Se estiver no final, ele vai olhar o nível DEPOIS de colocar os sacos. Não parece fazer muita diferença, mas se ele começar com um carrinho cheio, no primeiro caso ele não vai tentar colocar nenhum saco, já no segundo ele vai colocar os 4 antes de notar que foi perda de tempo.

Variáveis:

São os fatores de valor incerto que podem decidir o rumo a ser levado pelo algoritmo. Apesar do conceito lembrar as variáveis de equações matemáticas , não são exatamente a mesma coisa. Por exemplo: no algoritmo para resolver uma equação de segundo grau "ax²+bx+c = 0" os coeficientes a,b e c é que são as variáveis e não o "x"! Sim, pois é o "a,b e c" variam de equação para equação e é com eles que você trabalha para achar o "x".

No caso do algoritmo do candeeiro quebrado as variáveis são "lâmpada enroscada", "lâmpada fundida", que podem assumir os valores verdadeiro ou falso. No estranho sujeito com sua estranha lista no supermercado,  uma variável que vemos de cara é o "nível do carrinho".

É visível que existem diversos tipos de variáveis e cada qual tem sua função num algoritmo.

Entrada e Saída:

Uma entrada é uma operação na qual um valor (não necessariamente numérico) é fornecido à uma variável do algoritmo. Por exemplo no caso do candeeiro, o sujeito olha o candeeiro e de cara já vê se tem uma lâmpada enroscada e se ela está boa, podendo atribuir um verdadeiro/falso para as variáveis em questão.

Já uma saída é quando um algoritmo "devolve" um resultado. Ainda no caso do candeeiro, quando o sujeito tem um falso na "lâmpada enroscada" e após o primeiro teste percebe que tem que enroscar uma. O Ato de enroscar é uma saída.

Lógica:

É visível que o bom entendimento de algoritmos está intimamente ligado ao bom entendimento de lógica, na próxima postagem desse "curso", darei uma aprofundada em conceitos de lógica clássica.

Até mais ver!








sábado, 11 de agosto de 2012

Ubuntu

No final do ano passado eu instalei o Ubuntu (11 alguma coisa) no meu velho "laptop do cadete", sob sugestão do meu professor de algoritmos. Lógico que tive e tenho algumas dificuldades com esse outro sistema operacional, mas ele me causou uma boa impressão e por isso vou compartilhar minha experiência com ele aqui,

Instalação: 

Não sei como se faz para instalar versões anteriores do ubuntu. Quando instalei na minha máquina, instalei a mais recente até aquela data. Formatei o computador e tive que reinstalar o 11 de novo, depois, quando surgiu a 12.04 LTS eu pude atualizar minha versão para essa (não sem alguma perdas) pelo próprio sistema operacional. Diferente do windows, o ubuntu tem uma nova versão quase todo ano e por isso seus programas perdem suporte para versões antigas muito rápido, sendo assim, acaba não valendo a pena ter uma versão antiga.

Eu baixei o sistema nesse site: http://www.ubuntu.com/ na primeira vez e nesse na segunda: http://www.ubuntu-br.org/. é uma imagem ISO de uns 700~800mb não me lembro bem. De onde baixar a imagem não faz muita diferença, já como você vai passar a imagem para uma mídia, ai sim, pelo menos no meu caso, foi o que deu trabalho.

Na primeira vez que eu instalei o ubuntu eu usei a opção de passar a imagem ISO para um pen-drive, como é visto nesse tutorial aqui: http://www.ubuntu.com/download/help/create-a-usb-stick-on-windows. Eu nem precisei usar um pen-drive de 2gb, consegui fazer tudo com um de 1gb. Já na segunda vez, eu tentei "queimar a imagem" num CD, de acordo com um tutorial no mesmo site. Não deu certo. A instalação ia bem até que em determinado ponto parava, tentei outros queimar em outros CDs e tive o mesmo resultado. Depois disso tentei usar um pen-drive, mas usei outro programa ao invés do "usb installer" e tive o mesmo resultado negativo. Só quando baixei e usei o "usb installer" é que tive êxito.

Depois fiz o crucial, selecionei a entrada USB como boot primário na BIOS (aquele aperte "del, F8, ou etc que aparece quando você liga o computador", abriu a tela de instalação e escolhi "Install Ubuntu on Hard Disk". De início tive que escolher como (onde) instalar o sistema. Na época da primeira instalação eu já tinha o windows instalado e portanto só tive que ir na opção avançada e criar uma partição para o linux. Aqui vale uma nota: se você for instalar o linux e windows, instale o sistema operacional da microsoft primeiro e depois o linux. Outra coisa a se notar é que você pode fazer uma terceira partição para "memory-swap", eu não sabia o que era isso, depois descobri que era uma parte do disco rígido que o ubuntu usaria como "memória ram". No fundo o swap não é muito útil, a máquina por padrão, parece que dá preferência à ele do que a ram de verdade e isso torna as operações mais lentas. Ultima nota importante sobre isso é que, na hora de fazer a partição para colocar o ubuntu, escolher o sistema de arquivos como ext3 e o diretório raiz é "/home".

Após isso vio uma porrada de opções rolhas, criar conta de usuário (isso sim é importante, a senha de usuário é essencial para executar as operações chave, como instalações de programas e configurações no ubuntu). Depois uma reinicialização e pronto.

(pretendo fazer um tutorial decente sobre a instalação mais tarde).

Inicialização:

Com windows e ubuntu instalados, o computador, ao iniciar, me deu quatro opções de linux e uma de windows. Por padrão uma das opções linux é selecionada e se o usuário não fizer nada, após um tempo ela é ativada e o ubuntu é inicializado. Demorei para acostumar com isso e muitas vezes deixei o computador ligando, com intenção de usar o win e dei de cara com a tela inicial do ubuntu.

A tela inicial do ubuntu é simples, tem um lugar com o seu nome de usuário, pedindo sua senha. É possível também entrar como visitante. Pois bem, rolhice falar dessa tela, eu não tive nenhum problema com ela (apesar de só descobrir o modo visitante por acidente, muito tempo depos). Também duvido que alguém vá ter alguma encrenca, exceto a do tipo "esqueci minha senha".

Depois de logado eu fiquei feliz em notar que não precisava instalar nenhum driver. O som funcionava muito bem, o vídeo e até o wireless. O ubuntu instala drivers genéricos e ao meu ver isso é um ponto positivo. Dizem por ai que é possível instalar os drivers específicos de sua máquina, mas eu ainda não tentei isso.

Ele também já vem com um navegador instalado, o firefox e uma suite de programas de escritório, o Open Office. Outra coisa legal dele é a central de programas do ubuntu, um aplicativo onde há diversos programas para baixar, a maioria de graça! O primeiro que eu procurei lá foi o google chrome... não encontrei.

Meu primeiro desafio:

Eu nunca gostei do firefox, por isso fui caçar um jeito de instalar o Chrome. Fui no site da google e baixei o programa para o ubuntu (das versões que aparecem, as que não são "debian"). Como não veio um executável, eu fui procurar ajuda na internet e só vi tutorial confuso. Depois resolvi clicar no arquivo baixado. Ele abriu uma página na central de programas do ubuntu  com o Chrome para baixar e instalar. Cliquei, digitei minha senha e não precisei fazer mais nada, ele baixou e instalou o programa automaticamente.

Perfeito? Quase. Eu como usuário inciante, vi que ele tinha instalado a porcaria, mas não sabia onde ela estava! Mais uma vez fui na internet e vi que tinha que acessar o "terminal". O problema é que ninguém, mas ninguém mesmo falava onde estava o terminal. Parece que nas versões anteriores ele estava numa "barra de tarefas", mas desta vez ele estava bem escondido.

Entrei na minha pasta pessoal e por ela comecei a navegar pelo meu computador. Acabei achando o terminal em "sistema de arquivos, usr, share, applications". Lá também achei o Chrome e a maioria dos outros programas instalados.

Usando o terminal:

Logo no início eu notei que o terminal é importante para usar bem o linux. Ele parece com o prompt de comando do windows, o "cmd", só que um pouco mais fácil de usar. Por exemplo, para chamar um programa, você não precisa digitar o endereço dele todo: você só precisa digitar o nome dele! Tá certo que no windows dá para configurar isso, mas não é simples e isso não é feito automaticamente na instalação do programa.

Do terminal também dá para instalar e desinstalar qualquer programa da central de arquivos. Acaba sendo mais rápido, quando você sabe o programa que quer instalar. O comando para instalar é "sudo apt-get install nome-do-programa", ele vai, baixa o programa e instala direitinho.

A propósito "sudo" é um comando próprio, que diz que você está entrando como "usuário root", algo como administrador total, tendo direito de alterar qualquer coisa na sua máquina. Sempre que você der esse comando ele vai pedir a sua senha. Ele é obrigatório para instalar, desinstalar e usar alguns programas mais avançados, ou para editar arquivos do sistema.

Outra coisa legal do terminal é que se você apertar duas vezes a tecla "tab" ele auto-completa o comando que você está digitando, ou apresenta opções de desambiguação. Acreditem, isso é muito útil.

Vantagens:

Não precisar instalar nenhum driver e já ter a máquina rodando num desempenho razoável, com acesso à internet e etc já foi uma grande vantagem. Depois de aprender a usar o "apt-get install", a forma de instalação da maioria dos programas, simples (baixe e não se preocupe com o resto), também é formidável. Os programas nele em geral tem menor tamanho que os do windows, porque eles compartilham arquivos e bibliotecas comuns. Para um sistema operacional recente, ele tem um bom desempenho (consegui rodar ele no meu pobre laptop). Além de tudo ele se mostrou bem seguro (para alterar qualquer coisa importante, um programa precisa pedir autorização diretamente para você, pedir sua senha.)

Desvantagens:

Apesar de ter rodado na mina máquina, ele se mostrou um pouquinho pesado, ficando lento com o tempo. Além disso eu não consigo ouvir uma música e navegar no chrome. Tá certo, isso é por que meu hardware, mas no windows XP, por exemplo, eu sei alterar as configurações do sistema para um melhor desempenho, já no ubuntu isso é bem mais complicado e não dá tanto resultado. Complicado aliás, pode ser um bom atributo para ele! Não, não é mera falta de experiência, nota-se que o sistema não é todo acessibilidade, como o popular windows. Você começa a perceber isso quando precisa instalar qualquer programa que não é possível fazer pelo "apt-get". Tem que descompactar, dar um /configure aqui, um /makeinstall ali, mas nem todos os pacotes são assim, ai tu tem que ler as instruções... (eu devia ter vergonha de reclamar disso) e as instruções em geral são complicadas e confusas... O pior, no meu caso, é que quase todos os programas que trabalham com microcontroladores devem ser instalados dessa forma! Desinstalar esses programas também não é tarefa simples.

Outra desvantagem é que as versões se tornam obsoletas muito rápido, muitos programas para ubuntu não rodam mais em versões do mesmo anteriores à 10.algumacoisa. Com isso você sempre tem que estar com a mais recente, acontece que nem sempre você vai conseguir acompanhar isso com o hardware. Falando em programas a reclamação básica sobre o linux se mantém, não há muito suporte para esses S.O. a maioria dos programas são para windows, pelo menos é o que eu notei com relação à relacionados à microcontroladores, motores de jogos e jogos em sí.

E então:

E então que eu continuo tento o linux no meu computador. Uma vantagem não citada foi a de a maioria dos programas dele ser de código aberto, o que facilita muito meu trabalho de pesquisa. Além disso pelo menos o LaTeX é mais fácil de instalar e usar por lá. Eu antes tinha um preconceito contra esse sistema, achava que era muito mais "elitismo de pseudo-intelectual" do que qualquer outra coisa. Vi um sistema até bom de usar, que precisa de muitas melhorias e mais suporte. Me senti até motivado com ele e pretendo trabalhar para o seu engrandecimento