terça-feira , novembro 21 2017
Últimas Notícias

Dicas para iniciantes – Programação

linguagens-programacao

É muito comum para quem está iniciando ter certas dúvidas sobre programação, principalmente como iniciar nessa área quando não se conhece alguém para tirar essas dúvidas, com isso formulei essa postagem para sanar as dúvidas mais frequentes, comentar sobre erros/mentiras muito comuns, dar um over view sobre o assunto e passar uma lista de materiais para estudo.

O que é linguagem programação?

Os primeiros computadores não eram programáveis, ou seja, eram como uma calculadora onde se era limitado a realizar atividades já pré definidas sem a possibilidade de usar para outros propósitos, então se uma máquina era projetada para ser uma calculadora ela não faria nada além disso, se fosse projetada para realiza contagem e algo, também não faria nada além disso, então surgiram os computadores programáveis o qual se tinha uma flexibilidade maior, que possibilitava realizar tarefas além do que o computador permitia fazer por padrão de fábrica, nesse caso aquele computador que só fazia contas de somar e subtrair poderia programa-lo para também realizar multiplicações e divisões por exemplo ou até expandir ainda mais suas funções.

A linguagem de programação nada mais é do que uma linguagem, similar a linguagem humana que informa o computador um conjunto de instruções bem estruturados e não redundantes em forma de um algoritmo de forma textual. Um algoritmo nada mais é em sua forma genérica do que um conjunto de passos sequenciais a se fazer para realizar uma determinada tarefa, como por exemplo, a tarefa para ir a escola de manhã:

  1. Acorde 7h am quando despertado tocar;
  2. Escove os dentes;
  3. Tome banho;
  4. Se vista com o uniforme da escola;
  5. Arrume a mochila;
  6. Tome café da manhã;
  7. Pegue o ônibus para ir a escola;
  8. Entre na escola.

Na programação se trabalha com algoritmos para dizer ao computador o que ele deverá fazer, veja um código ilustrativo abaixo para ter uma noção:

algoritmo “1+10 até 101”
var
n:inteiro
inicio
// Seção de Comandos
n<-1
enquanto n<101 faca
n<-n+10
escreva(n)
fimenquanto
fimalgoritmo

Neste exemplo acima o programa mostrará na tela uma sequência de números de 1 até 101 de 10 em 10, ou seja: 1, 11, 21, 31, 41, 51, 61, 71, 81, 91, 101.

As linguagens de programação seguem esta ideia, mas cada linguagem tem suas próprias regras de como se escreverá o algoritmo, possuindo seus próprios comandos e características próprias.

 

Por que devemos aprender a programar?

A programação nos permite ter mais flexibilidade e não nos limitar somente ao que já existe em questão de software, por exemplo, imagine que queremos um programa que faça x coisa que nenhum programa atualmente faz, ou simplesmente incrementar uma funcionalidade a um programa como um plugin para o Google Chrome, neste caso se soubermos como programar poderemos ou implementar um programa que faça o que queremos que ainda não existe algo parecido que sane nossa necessidade ou incrementar funcionalidades que desejamos a um software já existente (e ainda faturar uma grana).

 

Todo hacker sabe/precisa programar?

Depende da área que a pessoa atua ou quer atuar, por exemplo se for mexer com a parte de engenharia reversa, analise de malware, exploitation, criação de malwares, code review, deverá saber programar, mas existem os que não precisam saber programar para atuar na área, por exemplo alguém que é responsável por mexer com firewall, IDS, IPS, seguir a rotina básica de um pentest em redes cabeada ou wireless, analisar logs re trafego de rede e dentre outros não tem  necessidade forte de saber programar, somente em alguns casos. Logo o mito de que é obrigatório um hacker deve saber programar não é bem uma verdade, depende da área, seria como dizer que para ser um médico ele deverá ter conhecimento profundo sobre problemas no estomago, mas o médico pode ser um neuro cirurgião e não ter grandes conhecimentos sobre problemas de estomago que seria outra especialidade e nem por isso ele deixaria de ser um médico.

 

Open source x Freeware

Muitas pessoas confundem estes dois, o open source (código aberto) significa que o responsável por aquele software deverá disponibilizar o seu código fonte ao cliente, mas não quer dizer que seja gratuito, um exemplo disto é a distribuição Red Hat do Linux o qual disponibiliza seu código fonte aos seus clientes, mas deverá pagar para utilizar. Open source diz apenas que o código fonte poderá ser disponibilizado, este movimento é interessante, pois permite que softwares possam ser aprimorados por várias pessoas que não fazer parte da equipe de desenvolvimento do projeto, além de podermos adquirir conhecimento sobre como funciona determinado software para obter conhecimento. O termo Freeware é para dizer que o software é disponibilizado gratuitamente que pode ou não ser open source.

 

Nível das linguagens de programação

As linguagens de programação são classificadas por níveis de acordo com o seu grau de abstração, uma linguagem de nível baixo são as linguagens mais próximas da forma que o computador interpreta as instruções ou seja quase uma tradução direta de seus 0’s e 1’s, já as de alto nível são as linguagens que são muito mais próximos da linguagem utilizadas por nós seres humanos, já o médio nível são as linguagens que fica entre o alto nível e o baixo nível.

  • Linguagens de baixo nível – Assembly class
  • Linguagens de nível médio – C, C++, D e etc…
  • Linguagens de alto nível – Java, Python, Ruby e etc…

 

Qual linguagem de programação se deve iniciar?

Isso depende muito, do meu ponto de vista depende da pessoa em si, nos livros já vi 3 opiniões distintas que vamos analisar abaixo:

  • Aprender programação de baixo para cima – Neste quesito primeiro partimos dos conhecimentos da arquitetura do computador, ou seja, como funciona os componentes do PC mais afundo principalmente a memória RAM e processador, em seguida se aprender o Assembly, depois a linguagem C e por fim uma linguagem de alto nível. Seguindo essa trilha se terá uma base bem forte sobre programação, porém a curva de aprendizado é bem grande;
  • Começar a programar com linguagens de alto nível – Neste ponto se aprende a programar diretamente em linguagens de alto nível sem passar por etapas anteriores, por ser um nível bem abstrato a curva de aprendizado é a mais curta, objetiva e mais fácil, porém o programador poderá ter um conhecimento um pouco raso demais, o que as vezes pode lhe geral algumas dúvidas de como as coisas realmente funciona e do por que são assim;
  • Começar a programar com linguagens de nível médio – Nesse método geralmente se tem uma noção bem leve de arquitetura sem entrar em muitos detalhes e se começa a aprender com a linhagem C/C++ e depois que se aprende uma linguagem de alto nível.  Esta linha de aprendizado é bem utiliza, pois fica no meio termo entre os 2 métodos citados acima.

Qual deles é o melhor? Neste caso dependo do que a pessoa quer e área que deseja seguir, mesmo na área de segurança isso dependerá muito, por exemplo, para a área forense, análise de malware, engenharia reversa, exploitation, otimização, recomendo o primeiro método de ensino. Para aqueles que querem trabalhar como programadores, code review, desenvolvimento seguro para web, recomendo usar o 3° método de ensino. Para aqueles que querem apenas saber o que é programar de forma mais objetiva ou que querem trabalhar com qualidade ou SQA recomendo o 2° método.

 

O que é IDE?

É um ambiente de desenvolvimento integrado, ou seja, é uma ferramenta que possui diversos recursos que ajudam o programador em um só local, funcionam de forma geral como como editor de texto, compilador/interpretador, realiza analise léxica e de sintaxe e depurador de erros, podem trabalhar com outros recursos a mais dependendo da IDE e de seus plugins.

 

Delphi, HTML, CSS e SQL não são linguagens de programação!

Um erro muito comum até mesmo entre os programadores é dizer que Delphi é uma linguagem de programação, na verdade Delphi é uma IDE o qual foi projetada para se programar com a linguagem Object Pascal.

SQL é uma linguagem estruturada de consulta, diferente da linguagem de programação que interage diretamente com o computador, o SQL é uma linguagem utilizada apenas para manipulação e consulta de dados em um banco de dados.

HTML e CSS são linguagens utilizadas especificamente para construção de paginas web.

“HTML (HyperText Markup Language, ou Linguagem de Marcação de HiperTexto) é uma linguagem de publicação, utilizada para estruturar conteúdos, sejam textos, imagens, vídeos ou áudios, o CSS (Cascading Style Sheets, ou Folhas de Estilo em Cascata) é uma linguagem mais voltada para a estética, utilizada para formatar os conteúdos já estruturados. O CSS é responsável pela aparência da página, como o posicionamento dos elementos, cores e tudo que torne o site mais visualmente agradável para a navegação.” ambos não são linguagens de programação, eles são interpretados pelo navegador e por isso que cada página pode aparecer de formas diferentes dependendo do navegador e como visto acima, estas linguagens agem de forma muito mais limitada que as linguagens de programação e diferente da linguagem de programação com relação ao objetivo.

 

Assembly x Assembler

Outro ponto que as pessoas acabam confundindo muito é a diferença de Assembly e Assembler. Assembly é uma classe de linguagens de montagem, ou seja, todas as linguagens de baixo nível são consideradas Assembly, não existe apenas uma linguagem em Assembly como a maioria pensa, tem várias que possui sintaxes diferentes, ao mesmo tempo se parecem, mas a instrução pode funcionar na prática de forma um pouco diferente, o que pode fazer muita diferença no fim. O Assembler é o programa que pega a linguagem Assembly e transforma em uma linguagem mais legível para o computador. (para entender mais sobre esse processo recomendo estudar sobre compiladores)

 

Mercado de trabalho

Na área de programação para Desktop o forte é atualmente o Java, algumas empresas ainda usam object pascal e VB que são linguagens que alguns já consideram meio que ultrapassadas. A tendencia atual foca muito em Java e C#.

Na área de programação web depende da empresa, mas na grande maioria o pré-requisito fundamental é HTML5, CSS3, Javascript e Jquerry. As linguagens que as empresas costumar trabalhar também que varia de empresa para empresa é PHP, ASP, node js, ajax, java para web e bootsrap. Tem linguagens que estão começando a ganhar mais este mercado que é o cado do Python com o framework Django e Ruby utilizando o framework Rails.

Na área cientifica se utiliza muito o Python atualmente no Linux.

Na área de otimização, sistemas operacionais e sistemas embarcados se utiliza muito o C e C++.

Na parte de análise de malware, engenharia reversa e exploitation de baixo nível se é frequentemente utilizando Assembly, C/C++ e ShellScript.

 

Lista de materiais básicos

  • Primeiros livros a serem lidos:
    • Fundamentos da programação de computadores – 3a edição [Mais recomendado]
    • Use a Cabeça! Programação
    • Algoritmos – Lógica Para Desenvolvimento de Programação de Computadores
    • Linguagens de programação: Princípios e paradgmas
    • Programming from the Ground Up [Programando de baixo para cima que comentei na postagem]

 

Quaisquer dúvidas ou sugestões informem no comentários.

 

Fontes utilizadas:

http://forum.guiadohacker.com.br/showthread.php?t=41558

HTML e CSS: o que são e quais as diferenças?

Sobre NullS3c

Possuo especialidade na área de computação forense. Mais informações sobre mim poderá ver em: https://www.linkedin.com/in/victor-cunha-8753073b/

Free WordPress Themes - Download High-quality Templates