Você está na página 1de 7

MÓDULO 1 - INTRODUÇÃO

Prof. Raquel C. de Melo-Minardi, Ph.D.


Departamento de Ciência da Computação / UFMG
10 de agosto de 2020

Página 1 de 7
MÓDULO 1 - INTRODUÇÃO

BIOINFORMÁTICA

Nesse módulo, apresentaremos as principais definições que envolvem a área de bioinformática e, mais
particularmente, a área de Ciência da Computação e a sua participação e importância para o
desenvolvimento da bioinformática.

Várias termos e definições


Segundo Jenny Gu e Philip Bourne [Gu e Bourne, 2009], a definição precisa de bioinformática é ainda uma
questão em debate. Alguns definem a bioinformática de forma muito estrita como o desenvolvimento de
bancos de dados para armazenar e manipular informação genômica. Outros a definem de forma bastante
ampla englobando toda a biologia computacional.

Ainda segundo Gu e Bourne, a bioinformática, segundo a literatura científica contemporânea pode ser
definida como o estudo de dois tipos de fluxos de informação em biologia molecular:

• O primeiro fluxo de informação se baseia no dogma central da biologia molecular de que (1) DNAs são
transcritos em sequências de mRNAs; (2) mRNAs são traduzidos em sequências de proteínas e (3)
sequências de proteínas se enovelam em estruturas tridimensionais de proteínas que por sua vez são
funcionais. Segundo os autores, a primeira classe de aplicações em bioinformática endereça a transferência
de informações entre esses níveis e abrangem a organização e o controle de genes, a identificação de
unidades transcricionais, a predição da estrutura e função de proteínas, entre outras. A definição dos
autores menciona ainda a biologia de sistemas, como uma área de estudo bastante nova que visa alcançar
um entendimento quantitativo de sistemas biológicos amplos e não apenas de suas partes. Eles citam
ainda a metagenômica como uma área da bioinformática. Enquanto a biologia de sistemas estuda como as
entidades moleculares interagem para de combinar fazendo funcionar a célula, a metagenômica estuda
como indivíduos particulares interagem e se combinam criando a ecologia.
• O segundo fluxo de informação está relacionado ao método científico em si: criação de hipóteses sobre a
atividade biológica, desenho de experimentos para testar essas hipóteses, avaliação dos dados para
compatibilização com as hipóteses, extensão e modificação das hipóteses com relação aos dados.
Aplicações que enderecem o fluxo de informação entre esses níveis compõem essa segunda classe dentro
da bioinformática.

Note que essa definição é bastante ampla e pode se tornar até confusa. Fiz questão de discutí-la para que
você perceba como essa área de bioinformática é ampla e pode envolver pesquisas nos mais diversos
campos das ciências biológicas. Em ciência da computação, isso não é diferente. Há diversas áreas da
computação que podem ser aplicadas na solução desses problemas biológicos e, mais que isso, esses
problemas certamente demandaram e demandam o desenvolvimento de novos modelos e algoritmos em
computação.

Página 2 de 7
MÓDULO 1 - INTRODUÇÃO

Contudo, para o estudante novato em bioinformática, creio que seria mais interessante colocar uma definição
mais sintética da área. Vamos definir a seguir a bioinformática e ainda o termo próximo chamado biologia
computacional.

Bioinformática
O NCBI que é o National Center for Biotechnology information, um importante centro de pesquisa norte-
americano que provê acesso a informações genéticas e biomédicas define a bioinformática da seguinte
forma:

Bioinformática é a aplicação de ferramentas computacionais para coletar, armazenar, analisar, manipular,


apresentar e compartilhar dados biológicos.
—National Center for Biotechnology Information

Biologia computacional
O NCBI enfatiza em sua definição que a bioinformática se diferencia da biologia computacional:

Biologia computacional é uma área de pesquisa que tem como foco principal problemas de pesquisa
específicos em biologia.
—National Center for Biotechnology Information

Note que, por essas definições que são bastante difundidas, a bioinformática seria meramente a aplicação de
técnicas computacionais bastante consolidadas para projeto e operação de bancos de dados biológicos,
enquanto a biologia computacional será uma área de pesquisa que visa a aplicação de conhecimentos em
computação e outras áreas na resolução de problemas biológicos em aberto, sendo uma área muito mais
nobre e estratégica.

Contudo, é importante destacar que, pelo menos no Brasil e em grande parte do mundo, esses dois termos
são usados de forma intercambiável e denotando o mesmo significado. Um exemplo disso são os principais
Programas de Pós-Graduação no país que levam o nome de bioinformática mas que certamente
desenvolvem pesquisa de ponta em biologia, computação e suas interseções.

Nesses texto, de agora em diante, nos ateremos ao termo bioinformática, em seu amplo significado e
importância.

Agora que você já foi introduzido a essas definições, suas imprecisões, ambivalências e abrangência
podemos começar a discutir a importância que a computação tem nesse campo de pesquisa.

Página 3 de 7
MÓDULO 1 - INTRODUÇÃO

CIÊNCIA DA COMPUTAÇÃO

A ciência da computação estuda técnicas, instrumentos e metodologias computacionais para automatizar


soluções com o uso do processamento digital. Note que a ciência da computação, ao contrário das ciências
biológicas, é UMA ciência. Claro que ela tem diversas sub áreas de pesquisa e pode ser bastante ampla.

O problema é um termo central em computação visto que seu objetivo é a resolução de problemas
baseados em representações previamente observadas e em possivelmente qualquer área do conhecimento
humano.

Você já observou como a computação tem trazido diversas disrupções ao mundo moderno resolvendo velhos
problemas de novas formas? Veja as mudanças trazidas primariamente pela internet que surgiu de forma
pública na década de 90. Mais recentemente, observe como o fenômeno do surgimento dos algoritmos de
pesquisa do Google mudaram nossa forma de estudar, de consumir informação e mesmo de memorizar
fatos, entre diversas outras atividades cotidianas. Olhe como os aplicativos de mapas e navegação digital
mudaram nossa forma de viajar ou nos locomovermos dentro das cidades. Veja como os sistemas de vídeo
sob demanda como a Netflix revolucionaram e romperam com o sistema tradicional de locação de filmes. Ou
ainda como os aplicativos como o Uber tem provocado mudanças de paradigma nos transportes. Veja como
as redes sociais mudaram nossa forma de nos relacionar com as pessoas ou como o Youtube tem trazido
novos e relevantes componentes para a evolução da nossa forma de nos capacitar.

São incontáveis os exemplos de quebras de paradigma trazidos por formas inovadoras de resolver velhos
problemas e propor algoritmos que sejam capazes de resolver esses problemas.

Na biologia isso não foi diferente. A computação mais uma vez tem aportado grandes contribuições para a
resolução de problemas em aberto na ciência e há ainda muitas demandas por modelos e algoritmos capazes
de alavancar nosso nível de conhecimento acerca dos seres vivos.

Algoritmos
Um conceito central em ciência da computação é o conceito de algoritmo.

Algoritmo é um procedimento computacional bem definido que recebe como entrada um valor, ou um
conjunto de valores, e produz um valor, ou conjunto de valores, como saída. Em outras palavras, um
algoritmo é uma sequência de passos computacionais que transformam uma entrada em uma saída.
—Thomas Cormen

Um algoritmo é, segundo [Cormen, 2009], uma ferramenta para resolução de problemas computacionais. O
algoritmo descreve o procedimento computacional específico para obter um relacionamento entre a entrada e
a saída.

Página 4 de 7
MÓDULO 1 - INTRODUÇÃO

Vamos dar um exemplo de um problema e de como problemas podem ser formalmente definidos. Suponha
que você precisa ordenar uma sequência de números em ordem crescente. Uma definição formal para esse
problema é :

Entrada: Uma seqüência de n números <a1, a2, a3, …, an>


Saída: Uma permutação (reordenação) <a’1, a’2, a’3, …, a’n> da sequência de entrada de forma que a’1 ≤
a’2 ≤ a’3 ≤ … ≤ a’n>

Assim, dada uma entrada exemplo <3, 5, 7, 8, 5, 6, 4, 0>, após o algoritmo de ordenação, a saída seria <0,
3, 4, 5, 5, 6, 7, 8>. A entrada de um algoritmo é denominada instância. Geralmente, uma instância satisfaz
todas as restrições que são impostas pelo problema.

São inúmeros os problemas em bioinformática que são resolvidos por algoritmos. O Projeto Genoma Humano
fez grande progresso em identificar em torno de 100.000 genes, determinar a sequência de 3 bilhões de
pares de bases, armazenar essa informação em bases de dados e desenvolvimento de ferramentas para
análise desses dados. Cada uma dessas etapas requer diversos algoritmos sofisticados. Falar de todos esses
métodos está além do escopo desde curso mas é interessante chamar sua atenção para o fato de que
grande parte dos algoritmos usados em bioinformática provêm de algoritmos clássicos da ciência da
computação. Por isso, começar a aprender sobre desenvolvimento e análise de algoritmos é tão essencial
para sua capacitação como um bioinformata.

Embora o conceito de algoritmo seja central na ciência da computação e na bioinformática, há inúmeros


outros conceitos importantes que precisamos trabalhar antes de começar atividades mais práticas
envolvendo programação de computadores.

Estruturas de Dados
A maioria dos cursos de computação contemplam, em seu ciclo básico, cursos de algoritmos e estruturas de
dados. Mas do que se tratam?

Estrutura de dados é uma forma de armazenar e organizar dados para facilitar seu acesso e
modificações.
—Thomas Cormen

Não há uma única estrutura de dados sequer que seja a melhor para todos os propósitos, de forma que o
segredo está em entender suas vantagens e limitações.

Página 5 de 7
MÓDULO 1 - INTRODUÇÃO

Programa
Computadores são máquinas capazes de manipular informações processando sequências de instruções
[Celes et al., 2004]. Essas informações manipuladas são valores numéricos e / ou textos.

Programa de computador é uma sequência de instruções que descrevem uma tarefa a ser realizada por
um computador.

O termo pode ser uma referência ao código fonte, escrito em alguma linguagem de programação, ou ao
arquivo que contém a forma executável deste código fonte, após compilado.

Uma linguagem de programação é um conjunto de regras sintáticas e semânticas usadas para definir um
programa de computador

O conjunto de palavras (lexemas classificados em tokens), compostos de acordo com essas regras, constitui
o código fonte de um software. Esse código fonte é depois traduzido ou compilado para código de máquina,
que é executado pelo processador.

Compilador é um programa de computador que, dado um código fonte escrito em uma linguagem
(compilada) de programação, gera um programa semanticamente equivalente, porém escrito em outra
linguagem, o código objeto.

Programar um computador significa definir essa sequência de instruções para realizar uma determinada
tarefa, produzindo um determinado resultado. Os programas executados em máquinas são chamados de
software. Os componentes físicos que compõem um computador, por sua vez, são chamados de
hardware. Nesse curso, aprenderemos como desenvolver software, apresentaremos técnicas de
programação para desenvolvimento de programas corretos e eficientes.

Componentes do computador e sua relação com a programação


Está além do escopo no nosso curso, definir profundamente os componentes de hardware de computadores.
Contudo, listaremos alguns dos principais com suas funções resumidas de forma bastante superficial:
• Processador (CPU do inglês Central Processing Unit, Unidade Central de Processamento): representa o
cérebro do computador sendo responsável por controlar todas as operações realizadas por ele.
• Memória principal (RAM do inglês Random Access Memory, Memória de acesso aleatório): é uma
memória não permanente, ou volátil, e que armazena os dados do seu programa enquanto ele está sendo
executado. Dizemos que é uma memória de acesso "randômico", o que significa que o processador pode
acessar diretamente qualquer posição de memória diretamente. Em geral, após o término do programa, os

Página 6 de 7
MÓDULO 1 - INTRODUÇÃO

dados armazenados na memória principal são perdidos e a área correspondente ocupada na memória fica
disponível para ser usada por outros programas.
• Memória secundária (HD - do inglês Hard Disk, Disco Rígido): são memórias permanentes que
permanecem disponíveis mesmo após o término da execução dos programas. Seu custo é bem menor do
que o da memória principal mas seu acesso, por outro lado, é mais lento. Há outros dispositivos que
podem ser considerados como memória secundária como pen drives, por exemplo.
• Dispositivos de entrada e saída: os dispositivos de entrada como mouse e teclado permitem que os
usuários forneçam dados ou criem eventos para um programa. Os dispositivos de saída como monitores e
impressoras, por sua vez, exibem os resultados computados em modo gráfico ou texto.

Complexidade de algoritmos
A preocupação com a complexidade de algoritmos é fundamental para projetar algoritmos eficientes. Pode-se
projetar um algoritmo e posteriormente analisar sua complexidade e verificar sua eficiência. Contudo, o mais
indicado é se preocupar com o projeto de algoritmos eficientes desde a sua concepção.

Utilizamos medidas de eficiência como tempo de execução ou espaço de memória usado. Com relação
ao tempo de execução, pode-se considerar o tempo absoluto em minutos, segundos, etc. Essa não é a
melhor estratégia e, portanto, não é a mais utilizada por depender da máquina e de outros fatores como o
compilador e a arquitetura. O procedimento padrão para a análise de algoritmos consiste em contar o número
de operações consideradas relevantes pelo algoritmo e expressar esse número como uma função de n, que é
o tamanho da entrada. Nesse curso, nos aprofundaremos um pouco mais nesses conceitos e veremos
diversos exemplos práticos.

Sumário
Introduzimos nesse módulo os principais conceitos relacionados à definição da área de bioinformática,
especialmente em sua interação com a ciência da computação. Até o momento, esperamos que você
tenha entendimento sobre a importância da completa compreensão do problema biológico e sua
formulação de forma unívoca, que saiba o que é um algoritmo, que é importante projetar algoritmos
eficientes e que, após o projeto do algoritmo, o mesmo será implementado em uma linguagem de
programação a sua escolha, compilado e executado.

Referências
[Gu e Bourne, 2009] Gu, Jenny, e Philip E. Bourne, eds. Structural bioinformatics. Vol. 44. John Wiley & Sons,
2009.

[Cormen, 2009] Cormen, Thomas H. Introduction to algorithms. MIT press, 2009.

[Celes et al., 2004] Celes, Waldemar, Renato Cerqueira, and José Lucas Rangel. Introdução a Estruturas de
Dados: com técnicas de programação em C. Elsevier, 2004.

Página 7 de 7

Você também pode gostar