sexta-feira, 26 de agosto de 2016

Grounded Theory - Um método para geração de teoria a partir dos dados

Toda investigação é “fundamentada” em dados, mas poucos estudos produzem uma “teoria fundamentada” a partir destes dados. Dentre as diversas metodologias de pesquisa existentes Grounded Theory surgiu em 1967 - através do trabalho The Discovery of Grounded Theory: Strategies for Qualitative Research (Glaser e Strauss) - com o objetivo de preencher o espaço que existe entre a teoria e a pesquisa empírica, visto que existem vários métodos para testar teorias mas não especificamente para o estudo da teoria.

Definição

Grounded Theory is a method for generating theory from data


Justamente por ser um método para gerar uma teoria a partir dos dados Grounded Theory baseia-se em um conjunto de hipóteses conceituais integradas geradas de maneira sistêmica para produzir uma teoria sobre uma área substancial.
      grounded-theory-forum.png

Visão Geral

Grounded Theory é baseada no modelo conceito-indicador de comparação constante entre indicadores. Para compreendermos o fluxo de trabalho deste processo, precisamos conhecer alguns conceitos simples descritos a seguir:


  • Indicador (ou Incidente): Dados reais, como ações e eventos, capturados através de palavras ou sentenças ditas pelo participante.
  • Conceito: São em geral, comportamentos ou fatores que estão alterando comportamentos, gerados e refinados por meio da comparação entre indicadores e este conceito emergente.
  • Categorias: Representam um nível mais alto de abstração, uma vez que representam um conjunto de conceitos.
  • Memos: Durante todo o processo do Grounded Theory o pesquisador documenta as ideias e relações que embasam os conceitos e categorias que estão sendo criadas.

Processo

Existem semelhanças com metodologias ágeis de desenvolvimento de software, no sentido que o processo é simples conceitualmente, mas rigoroso e disciplinado na prática. O processo pode ser dividido em três fases principais descritas a seguir e também indicadas na figura abaixo.
  1. O pesquisador começa a coleta de dados em um fenômeno de interesse e analisa os dados procurando por padrões de incidentes para indicar conceitos que por sua vez são agregadas em categorias.
  2. As propriedades teóricas da categoria são desenvolvidas através da comparação entre os incidentes nos dados de entrada e os incidentes anteriores na mesma categoria. O processo continua até que as categorias tornem-se "saturadas", isto é, quando a escolha de dados não adiciona qualquer novas propriedades para as categorias existentes.
  3. Após a saturação, a teoria é comparada com teorias descritas na literatura. A pesquisa bibliográfica é adiada para o final da coleta de dados para evitar forçar teorias preconcebidas sobre a teoria substantiva a ser desenvolvida.


grounded.png

Aplicabilidade

Embora muitos classifiquem Grounded Theory como um método qualitativo, este não é. É um processo geral e como tal, pode ser usado tanto com dados qualitativos ou quantitativos.
No entanto, não é inadequado se a pesquisa visa responder: “A programação em pares é mais efetiva do que programação individual?” mas é adequado caso a pergunta seja: “Como os indivíduos gerenciam o processo de programação em pares?”. Responder esta questão auxiliaria a criação de estratégias para a gerenciar a programação em pares.

Conclusão

Grounded Theory é a geração sistemática da teoria a partir da pesquisa sistemática. Um conjunto de procedimentos de pesquisa rigorosos que levam ao surgimento de categorias conceituais. Estes conceitos / categorias estão relacionados uns aos outros como uma explicação teórica da ação que resolve continuamente a principal preocupação dos participantes em uma área substantiva.

Referências



Por,
Hugo Gabriel Bezerra da Silva - Integrante do PET Computação

segunda-feira, 22 de agosto de 2016

Prova OPI




Neste sábado (20/08) ocorreu na sede da FACISA - Facudade de Ciências Sociais e Aplicadas, a prova das categorias Júnior e Sênior da Olimpíada Paraibana de Informática. Com participação recorde de equipes, ao todo 35 times inscritos. Devido ao grande número de equipes e visando o conforto dos competidores, a competição teve que ser realizada em um ambiente maior, sendo assim a FACISA abriu suas portas para que o evento ocorresse de modo satisfatório.
 
Sobre as categorias que competiram neste final de semana,  a categoria Júnior, é voltada aos alunos que não tenham cursado ou que estejam cursando a disciplina de Estrutura de Dados. A categoria Sênior se destina aos alunos que estejam cursando até o primeiro ano do mestrado, sendo o conhecimento sobre estrutura de dados de suma importância. As provas de ambas as categorias são compostas por 10 questões, sendo permitidas as seguintes linguagens de programação: C, C++, Java, Pascal e Python.

A prova foi um sucesso! Momentos descontraídos, de expectativa, de tensão, de muito raciocínio logico e o principal de muita programação. A equipe do PET Computação esteve presente neste evento, através dos Petianos: Antunes Dantas, Dandara Maria, Igor Matheus, Hugo Gabriel e Wesley Santos. O PET Computação forneceuo o suporte necessário para que a prova ocorresse, participando desde a entrega dos (tão conhecidos) balões, como na fiscalização e organização das salas. O trabalho em equipe foi fundamental visto que o Professor e Organizador da Olimpíada, Rohit Gheyi, estava centrado em julgar as submissões dos mais diversos tipos de códigos dos competidores.

A Olimpíada Paraibana de Informática visa despertar nos alunos o interesse em computação, atualmente imprescindível na formação básica, através de uma atividade que envolve desafios motivadores e competição saudável. Permite também que os competidores possam conhecer de forma mais abrangente a carreira na área. Já para os alunos do ensino superior, a OPI visa estimular os alunos a aprimorarem e aprofundarem o conhecimento em Programação e Algoritmos.

A olimpíada almeja preparar e motivar os participantes para as competições nacionais e internacionais de programação, como por exemplo a Olimpíada Brasileira e Internacional de Informática e a ACM/ICPC. Além disso, o objetivo é motivas os participantes a entrar no curso de Ciência da Computação, onde o conhecimento adquirido na preparação será muito valioso para a sua formação. A organização da OPI está a cargo do curso de Ciência da Computação da Universidade Federal de Campina Grande.

Por fim, o que vale mesmo é a competição saudável e o espirito de aprendizado, parabéns a todos os envolvidos em um trabalho tão exemplar!


sábado, 13 de agosto de 2016

Uma visão geral sobre as camadas de redes no modelo de referência OSI

Dentro do contexto de redes de computadores, as camadas de redes possuem responsabilidades específicas, mas se trata de um modelo standart para protocolos de comunicação entre os diversos sistemas a fim de garantir a comunicação end-to-end.
O modelo divide as camadas em sete e estão empilhadas de forma hierárquica: Aplicação, apresentação, sessão, transporte, rede, enlace de dados e física.

Figura 1: Figura esquemática sobre o modelo hierárquico das camadas de rede.
Camada de Aplicação
Atua como janela onde os processos de aplicativos e usuários podem acessar os serviços de rede, separando a existência de comunicação em rede entre processos de diferentes computadores. Toda comunicação de rede que a máquina fizer, deve passar por essa camada.

Camada de Apresentação
Atua como tradutor de dados para a rede, convertendo o formato do dado recebido pela camada de aplicação em um formato comum a ser usado na transmissão deste dado. Também é responsável pela compressão e criptografia dos dados.

Camada de Sessão
Estabelece a sessão entre processos em execução em estações diferentes, permitindo ainda que as camadas superiores possam organizar, sincronizar e gerenciar suas trocas de dados. É atribuída à essa camada ainda a transferência de dados, dos erros e administra os registros das transmissões. O controle entre os diálogos é realizado através de tokens evitando que duas partes do sistema executem a mesma região crítica.

Camada de Transporte
É responsável pela transferência econômica, eficiente e confiável dos dados entre a máquina destino e máquina origem, garantindo que os dados cheguem na ordem correta, independentemente do tipo, tipologia ou configuração da rede. A comunicação entre processos ocorre através da troca de mensagens por sockets, que podem ser lidos como interfaces que intermediam os processos de aplicação e a camada de transporte.

Camada de Rede
A camada de rede controla a operação da sub-rede, decidindo que caminho físico os dados devem seguir com base nas condições da rede, na prioridade do serviço e em outros fatores. Além disso, é responsável pelo roteamento, controle de tráfego da sub-rede, fragmentação de quadros e mapeamentos de endereços lógicos-físicos.

Camada de Vínculo de Dados ou Enlace de Dados
A camada de vínculo de dados proporciona uma transferência de quadros de dados sem erros de um nó para outro através da camada física, permitindo que as camadas acima dela assumam a transmissão praticamente sem erros através do vínculo.

Camada física
A camada física, a camada inferior do modelo OSI, está encarregada da transmissão e recepção do fluxo de bits brutos não estruturados através de um meio físico. Ela descreve as interfaces eléctricas/ópticas, mecânicas e funcionais com o meio físico e transporta os sinais para todas as camadas superiores.

No POSCOMP 2015, a questão 65 abordou esse tema com a seguinte pergunta:

No modelo de referência ISO/OSI, qual camada deve gerenciar tokens, impedindo que duas partes tentem executar, ao mesmo tempo, a mesma operação crítica?
(A) Sessão
(B) Transporte
(C) Apresentação
(D) Sincronização
(E) Aplicação

De acordo com o que foi visto acima, a camada responsável por evitar o acesso de duas partes do sistema à uma mesma região crítica, além de se comunicar através de tokens é a camada de Sessão. Logo, a resposta correta é a letra A.

Boa sorte e bom POSCOMP à todos.

Por: 


quinta-feira, 11 de agosto de 2016

Caderno de questões comentadas - POSCOMP 2015



Exame Nacional para Ingresso na Pós-Graduação em Computação (POSCOMP) é um exame aplicado em todas as regiões do País. O POSCOMP testa conhecimentos na área de Computação e tem como objetivo específico avaliar os conhecimentos de candidatos a Programas de Pós-Graduação em Computação oferecidos no Brasil. A grande maioria dos Programas de Pós-Graduação no País utiliza, de alguma forma, o resultado do POSCOMP em seu processo seletivo.

Foi concebido para permitir que os candidatos que pretendem cursar Programas de Pós-Graduação em Computação possam participar dos processos seletivos em vários Programas no País, sem a necessidade de deslocamento para a sede de cada um dos Programas postulados pelo candidato, cumprindo assim um forte papel de inclusão social.

Desta maneira como forma de inventivo ao estudo e a melhoria do desempenho dos alunos do Curso de Ciência da Computação da UFCG na prova, de forma a colaborar com o fortalecimento dos excelentes resultados obtidos pelos alunos do curso nesse exame, o Grupo PET Computação está disponibilizando respostas comentadas de questões da prova do POSCOMP 2015.

O caderno foi preparado por petianos e professores, que com muito empenho e dedicação buscaram dar o melhor de si nos comentários e nas respostas para facilitar o aprendizado e a compreensão das questões. Para obter Para obter as questões comentadas, basta clicar aqui e acessar a opção "caderno de questões POSCOMP". Desde já, desejamos ótimos  estudos a todos ! Aguardamos o feedback de vocês para melhorar cada vez mais nossas atividade !


Por,

domingo, 7 de agosto de 2016

A Lógica Matemática

    Para nós, estudantes de Ciência da Computação, a vivência com a matemática é algo diário e natural. Utilizamos tanto diretamente nos cálculos como também através de aplicações da lógica formal. Quando dito sobre a lógica formal entramos no assunto do post de hoje: lógica matemática!
    A lógica matemática surgiu em meados do século XIX como uma forma de transmitir informações de forma não ambígua. Aristóteles estudou a estrutura lógica da argumentação para provar que mesmo que os argumentos sejam convincentes eles podem não estar corretos.

""Pinguins são em preto e branco. Alguns shows de TV antigos são em preto e branco. Logo, alguns pinguins são antigos shows de TV""




    Uma forma de analisar logicamente proposições é através de tabelas verdade. Uma tabela verdade é uma tabela com todas as proposições e suas possíveis combinações. (Um caso com n proposições terá 2^n linhas na tabela verdade.)


    Além da tabela verdade há a dedução natural, pela qual a partir de premissas se consegue chegar a uma conclusão. Para isto são definidas regras. Um exemplo de questão feita com a dedução natural é a questão 15 do POSCOMP 2015.


Por,


Dandara Sousa - Integrante do PET Computação

terça-feira, 2 de agosto de 2016

Notações Assintóticas

Você sabe o que significa dizer que a função de complexidade de um algoritmo pertence a classe O(n)? Nesse post você irá compreender o que notações desse tipo significam e qual a importância em determinar a classe da função de complexidade de um algoritmo.

De forma simplista, algoritmo é um procedimento que transforma algum valor, ou conjunto de valores (entrada) e produz algum valor, ou conjunto de valores (saída). Sua função de complexidade geralmente depende majoritariamente do tamanho da entrada que será processada pelo algoritmo, de forma que um algoritmo que demora 10 minutos para realizar algum procedimento sobre uma determinada entrada, é mais eficiente que outro que demora 10 horas para realizar o mesmo procedimento sobre a mesma entrada, considerando-se as mesmas condições.
Para que seja mais fácil classificar algoritmos quanto ao seu tempo de execução quando estes trabalham com uma quantidade de valores muito grande, algoritmos são divididos em classes de complexidade diferentes.
É importante destacar que quando se fala em tempo de execução, não estamos de fato calculando o tempo que um algoritmo demora para produzir uma saída a partir de uma entrada de tamanho n, mas sim a quantidade de instruções que este algoritmo necessita para produzir essa saída.
Notação Big-O (lê-se big o): Dadas duas funções assintoticamente não negativas f e g, dizemos que f está na ordem de g e escrevemos f ∈ O(g) se f(n) ≤ c.g(n) para algum c positivo e um n suficientemente grande. Ou seja, quando afirmamos que um algoritmo é da ordem de O(n²) por exemplo, estamos querendo dizer que a ordem de instruções que o algoritmo precisa realizar para gerar uma saída, a partir de uma entrada de tamanho n, é de no máximo n².
Notação Big-Ω (lê-se big ômega): Dadas duas funções assintoticamente não negativas f e g, dizemos que f está na ordem de g e escrevemos f ∈ Ω(g) se c.g(n) ≤ f(n) para algum c positivo e um n suficientemente grande. Ou seja, quando afirmamos que um algoritmo é da ordem de Ω(n³) por exemplo, estamos querendo dizer que a ordem de instruções que o algoritmo precisa realizar para gerar uma saída, a partir de uma entrada de tamanho n, é de no mínimo n³.   
Para saber um pouco mais sobre notações assintóticas e análise assintótica de algoritmos, você pode clicar aqui.

Por,

Wesley Santos - Integrante do PET Computação