My life in English

Aiming to be a Canadian citizen.

Leitura complementar: “Por que C e C++?” Parte I

Posted by fabianovasconcelos on 25 de April de 2009

Salve galerinha do país em que os ladrões não vão pra cadeia!

Aos que costumam beber gás e têm problemas pra enxergar um palmo adiante do nariz, notem que alguns termos são um link para páginas externas. Clique neles, se necessitar de alguma informação complementar a respeito.

Tá mais perdido que cachorro em caminhão de mudança? Pois você veio parar num curso on line de C/C++! Clica aqui pra ver o índice!

O motivo deste post é simples: o que eu tenho colocado até aqui, se aplica a qualquer linguagem de programação. Quem quiser parar por aqui e seguir outro rumo, de outra linguagem que não C/C++, ainda está em tempo, e tudo que você aprendeu até agora servirá para qualquer linguagem que você escolher estudar daqui pra frente. Mas o meu objetivo neste curso é que você aprenda C e C++.
Numa hora dessas vocês devem estar se perguntando: mas por que raios esse cara escolheu C/C++ pra programar e ensinar pra galera? Por que não Pascal, Lua, Java, C#, Assembly ou qualquer outra linguagem?
Bem, como eu não aguento ver vocês nesse sofrimento terrível, com essa indagação na cabeça, vamos então conversar a respeito.
Primeiro de tudo: C e C++ são duas linguagens extremamente parecidas, mas um tanto quanto diferentes. C é orientada a ações, funções, verbos, enquanto C++ é orientada a objetos. Veremos isso logo adiante. Primeiro eu quero que vocês saibam que existem, basicamente, três tipos de linguagem de programação, a saber:

  • Linguagens de alto nível
  • Linguagens de médio nível
  • Linguagens de baixo nível

Linguagens de alto nível

Linguagens de alto nível, são aquelas em que a sintaxe se parece muitíssimo com a sintaxe usada pelo homem, em português claro. Aliás, as linguagens de alto nível nem têm tantas coisas pra aprender. Você estuda pouco e consegue logo, logo, fazer um programa.

Legal né? Poder programar em uma linguagem bem fácil de se entender e que nem precisa estudar tanto? Nem sempre ! As desvantagens das linguagens de alto nível, é que elas são limitadas no tocante ao que elas podem realizar. Na grande maioria esmagadora dos casos, uma linguagem de alto nível não pode, por exemplo, implementar um driver de uma placa, para que aquela placa seja reconhecida em um computador. Outro exemplo é que elas não podem construir um joguinho de video game decente.
Quando você escreve um programa em uma linguagem de alto nível, ela não te dá o controle total de tudo que se pode implementar naquele programa. Não entendeu? Pois eu explico…

Dá pra notar que é uma casa pré-moldada sendo construída? Se não der, procure o seu psiquiatra mais próximo e peça para ele aumentar a dosagem de Haldol. Programar em linguagem de programação de alto nível é como construir uma casa em blocos.

Dá pra notar que é uma casa pré-moldada sendo construída? Se não der, procure o seu psiquiatra e peça para ele aumentar a sua dosagem de Haldol. Programar em linguagem de alto nível é como construir uma casa em blocos.

Imagine uma casa. Agora imagine que ela foi construida da seguinte forma: compradas as paredes, telhados, janelas, pisos, etc., tudo já pré-moldados, prontinhos, e dentro de poucas horas de “arrumação” e encaixe dos componentes em seus devidos lugares ela está montada e pronta para morar. Assim é uma linguagem de alto nível. Você já tem os “componentes” dos programas já prontos, que precisam apenas se encaixar, como no exemplo da casa.
Mas, entenda que nem sempre você estará satisfeito com as casas que construir. Às vezes as paredes com as cores que você gosta não existem no mercado, o telhado não é do material que você prefere, as janelas não são do tamanho que você gostaria que fosse, simplesmente porque não cuidaram de implementar componentes que fossem do seu gosto, e sim de um gosto genérico, baseado na maioria. A linguagem é feita para dar o mínimo de trabalho possível para o programador, implementando o programa no espaço de tempo mais curto possível, mas isso tem o seu preço. Já que existem milhares, milhões. bilhões ou trilhões de possibilidades diferentes de combinar cores, materiais, espessuras, tamanhos, etc, não é viável para quem faz “componentes” de casas (e de programas de alto nível) fazer esses “componentes” para todos os gostos.
Imagine também que os componentes da nossa casa usam material em excesso, o que encarece os custos finais. Uma parede, por exemplo, poderia ser mais fininha, uma vez que você consideraria que ela fosse segura, mesmo sendo menos espessa. Em vez disso ela é bem mais espessa do que deveria, mais do que você precisaria, mas como o que você queria era rapidez e facilidade em construir, e não estava preocupado com preço e personalização, teve que engolir o que viesse.

Comparando a casa pré-moldada com o software que você produz com uma linguagem de alto nível, no caso do programa geralmente o resultado sai mais pesado, mais lento, consome mais memória RAM e mais processamento do que se você tivesse feito com uma linguagem de nível mais baixo. Eles, os carinhas que fazem as linguagens de alto nível, precisam atender a todas as necessidades de todos os programadores que querem rapidez e facilidade sem personalização e leveza. Então eles fazem logo um negócio que seja bem genérico, empurrando recursos dentro da linguagem, muitas vezes desnecessários para a maioria dos programadores, mas como eles não querem correr o risco de deixar a linguagem incompleta, incorrem na prática do “quanto mais, melhor” ou “é melhor pecar pelo excesso do que pela falta”. Então, mesmo que você não precise de uma parede grossa, você vai ter que comprá-la, mesmo sabendo que ela acarreta um alto custo de material de construção.

Mas é isso. Eu não estou aqui para condenar linguagem A ou B ou levantar linguagem C ou D, mas o objetivo é mostrar a realidade.

Eu acho que eu vou receber comentários de gente me jogando pedras, gente que vai dizer “não é bem assim”, ou algo parecido. Se esse curso virasse um livro, certamente a editora excluiria este capítulo do livro pra evitar polêmica. Mas, como eu já mencionei acima, ainda é tempo de mudar de linguagem sem prejuízos. Tudo que foi postado até agora é sobre programação genérica. Só que, do próximo post em diante, focaremos mais em C/C++. Recomendo que leiam pelo menos este post até o fim. Será muito útil pra vocês. Mas sintam-se à vontade.

Exemplos de linguagem de alto nível: Visual Basic, Delphi (object-pascal), Pascal, COBOL, Fortran, BASIC, etc.

Linguagens de médio nível

Voltemos para o exemplo da casa. Agora a casa em questão será construida não mais com pré-moldes (janelas, paredes, telhados, tudo prontinho) e sim com tijolos, brita, areia, cimento, madeira, pregos, tintas, telhas, etc.

Aaaaaahhhh! Isso sim, na minha opinião, é equilíbrio! Agora sim você pode personalizar a sua casa da maneira que você quiser. Determine a altura e espessura das paredes, as cores, como será o formato do telhado, qual o tamanho das janelas, ou seja, uma casa do jeitinho que você sonhar.

Programador em C++ fazendo um programa. Ou se quiserem, um pedreiro, construindo uma casa em médio nível. Ou seja, construção de um programa, tijolo por tijolo. Entenderam? Simples assim!

Programador em C++ fazendo um programa. Ou se quiserem, um pedreiro, construindo uma casa em médio nível. Ou seja, construção de um programa, tijolo por tijolo. Entenderam? Simples assim!

Obviamente dará mais trabalho, levará mais tempo, exigirá mais estudo de engenharia civil e arquitetura, mas no final, você terá uma casa com um custo otimizado, e quase do jeito que você sonhou (quando falarmos em linguagem de baixo nível vocês entenderão esse “quase”, se é que vocês já não desconfiaram).
Se vocês não forem abestados, já devem ter entendido a analogia que eu quis fazer com a linguagem de médio nível, né? 😀 Nem precisaria explicar, mas mesmo assim eu vou fazê-lo.
A linguagem de médio nível te proporciona mais diversividade de “componentes”, por assim dizer, só que componentes bem menores (palavras-chave – veremos isso mais adiante) para que você tenha mais possibilidades, portanto, maior personalização dos seus programas. É só soltar a imaginação e programar! Um joguinho de video game decente, por exemplo, pode, e é, na maioria dos casos, programado em linguagem de médio nível. Além disso os programas de médio nível são mais leves, exigem menos do processador e alocam menos memória RAM. Isso tudo porque vocês, como programadores, têm maior liberdade de determinar o quanto de “material de construção” será usado na “obra”, evitando desperdícios e otimizando os resultados. É aquela história: “quem tem pressa, come cru“. Eu prefiro linguagens de médio nível. Mas é a minha opinião, afinal, eu estou no meu blog. Apesar de dar um pouco mais de trabalho, hoje em dia nem tanto, porque tem muita IDE aí e ferramenta RAD pra ajudar os caras a programar em médio nível de maneira mais fácil e rápida, os resultados são muito mais satisfatórios pra mim.

Exemplos de linguagem de médio nível: C e C++.

Linguagens de baixo nível

A casa de novo!
Imagine que a casa que você quer construir precise de tijolos com um formato diferente, com um material diferente, vindo da África. Use madeira cilindrica em vez de quadrada e com cantos. Tenha janelas triangulares e vidro temperado, com detalhes entalhados na maçaneta da porta, etc., finalmente, tudo bastante personalizado, detalhadíssimo, medido milimetricamente, simplesmente PERFEITA! Aí é que o bicho pega.

Maçaneta da casa de um programador em Assembly. Tem que ser programador de Assembly!

Maçaneta da casa de um programador em Assembly. Tem que ser programador de Assembly!

Obviamente você vai ter que, ao invés de comprar tijolos prontos, fazer os seus próprios tijolos, com a sua própria receita. Pode até mesmo se fazer um tijolo grão por grão, pra garantir que ele saia nas medidas que você realmente quer. A madeira, você mesmo torneará, peça por peça, pra que fique realmente ao seu afinado gosto. As janelas, já sabe, né? Tudo feito por você. Nada de comprar pronto. O vidro temperado será produzido por você, no padrão que você quiser. A maçaneta da porta te dará um trabalho que o cão não teve: estuda aí, bem muito, técnicas de arte no metal, como esculpir e entalhar, daí você faz o seu serviço bem bonitinho.
A casa sairá bem barata, levíssima, linda, magnífica, perfeita, mas, quando ficará pronta? Bem, se você começar com 20 anos de idade, talvez termine com 50 ou 60, colocando por baixo. Mas, valerá a pena? Claro que não!

Linguagens de baixo nível não são pra fazer programas grandes. Elas só servem pra escrever programas pequenos de controlar placas, microchips e coisas do gênero. Na realidade, pouco se usa linguagens de baixo nível, mas os que têm paciência de aprender uma linguagem de baixo nível e dominá-la, podem ter certeza que este será bem remunerado. Mas eu vou avisando: é coisa pra louco. Até a sintaxe é louca. Não se parece nada com o português claro (ou mesmo com o inglês). Eu não estou aqui querendo desencorajar a galera a programar em baixo nível, muito pelo contrário, é o filé da programação. Muita gente ganha os tubos de dinheiro com isso, mas eu tenho que avisar que é pra quem pode e não pra quem quer.

Agora sim você entendeu o que quer dizer aquele quase que eu citei na parte da linguagem de médio nível. Com a linguagem de médio nível é possível alcançar um nível de satisfação bem alto, combinado com a leveza e personalização.

Bem, eu vou dar uma pausa nesse post. Esta foi a primeira parte. Na parte II eu vou colocar exemplos de códigos nos três níveis para que vocês possam comparar um mesmo programa escrito em três linguagens diferentes, uma de baixo nível, outra de médio nível e outra de alto nível, dentre outras coisa importantes que ainda precisam ser ciatadas.

Exemplo de linguagem de baixo nível: Assembly (conhecida também como ASM).

Saiba mais sobre drivers de placas, dispositivos e chips:

Yahoo! Respostas | Traks! | Revista PNP


Estas são instruções impressas em rótulos de alguns produtos no mundo. Todas são reais!

Num secador de cabelos da Sears: “Não use quando estiver dormindo.” | Num saquinho de batatas fritas: “Você pode ser o vencedor! Não é necessário comprar. Detalhes dentro.” | Numa barra de sabonete Dial: “Use como um sabonete normal.” | Numa refeição congelada da Swanson: “Sugestão de servir: descongele.” | Numa touca de banho de hotel: “Ajusta-se a uma cabeça.” | Impresso no fundo, embaixo, de uma sobremesa Tiramisu do Tesco: “Não vire de ponta cabeça.” | Num pudim da Marks & Spencer: O produto estará quente depois de aquecido.” | Na embalagem de um ferro de passar Rowenta: “Não passe roupas no corpo.” | Num remédio infantil da Boot’s Children: “Não opere máquinas ou dirija depois de ingerir.” | Numa fileira de luzes de Natal chinesas: “Somente para uso dentro ou fora de casa.” | Num processador de comidas japonês: “Não é para ser usado para outro uso.” | Num saquinho de amendoins da Sainbury’s: “Aviso: Contém amendoins.” | Num saquinho de amendoins da American Airlines: “Instruções: abra o saquinho, coma os amendoins.” | Numa moto-serra sueca: “Não tente parar a serra com as mãos ou genitais.” | Numa fantasia infantil de super-homem: “O uso destes trajes não o torna apto a voar.” | Embaixo de uma cadeira comum de escritório: “Atenção, usar este produto, uma pessoa por vez.”


Copyright 2009 (C) Fabiano Bezerra de Vasconcelos – Todos os direitos reservados.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: