Archive for admin

Material do curso de Métodos e Técnicas de Pesquisa

Estou agora disponibilizando nesta página o material gerado e apresentado pelos alunos do mestrado em Ciência da Computação para a disciplina Métodos e Técnicas de Pesquisa, ministrada pelo prof. Dr. Henrique Nou Schneider.

Seguem abaixo as apresentações trabalhadas como aulas expositivas (ou baixe todas as apresentações de uma só vez clicando aqui):


Tema da aulaFormato PPT/PPTXFormato PDF
10 – Pesquisa Quantitativa e QualitativaDownloadDownload
11 – Modalidades de PesquisaDownloadDownload
12 – Tipos de Pesquisa CientíficaDownload
13 – Técnicas de Pesquisa – Documentação e EntrevistaDownload
14 – Técnicas de Pesquisa – História de Vida, Observação e QuestionárioDownload
15 – Aspectos Técnicos da Redação – parte 1DownloadDownload
16 – Aspectos Técnicos da Redação – parte 2 Download

E abaixo, os position papers escritos pelos alunos sobre o livro Filosofia da Ciência e da Tecnologia, de Regis de Morais (ou baixe todas os position papers de uma só vez clicando aqui):


Nome do aluno
Christiano Santos
Janisson Souza
Saulo Galilleo
Fernanda Passos
Felipe Vieira
Luiz Marcus Santos
Rafael Jacaúna
Rafael Jacaúna
Jovan Júnior
Edvan Sousa
Marcos Pereira
Fernando Teles
Leonardo Bezerra
Gabriel Araújo
Roberto Pizzi

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Material do curso de Programação Declarativa


Hoje apresento-lhes o material de suporte que utilizei na disciplina de Programação Declarativa. Ministrei-a no último semestre de aulas na Universidade Federal de Sergipe, mais especificamente em 2011/2.

Nessa disciplina, abordamos tanto o paradigma da programação funcional, quanto o paradigma da programação lógica, e devo dizer que foi um verdadeiro desafio para mim, não somente porque já não estudava Haskell (programação funcional) há mais de cinco anos, como também porque tudo o que eu sabia de Prolog resumia-se a uma ou duas aulas que tive durante a disciplina de Inteligência Artificial, ou seja, um desafio e tanto para elaborar todo o conteúdo enquanto aprendendo, e tudo isso durante um período letivo que já havia começado atrasado!

Durante a mesma, elaborei todo o material em apresentações para Microsoft Powerpoint (formato PPT), bem como escrevi os códigos-fonte dos exemplos em arquivos separados.

Bem, no fim das contas, acredito que o curso foi muito bem aplicado e muitos aprenderam este paradigma tão diferente da programação imperativa, nossa “velha amiga”.

E aqui está a apresentação composta por todos os slides usados em aula (um total de 305 slides :) ) em formato PPT mais os arquivos com códigos-fonte:

Material do curso de Programação Declarativa

Abaixo encontra-se a estrutura das aulas (em outra oportunidade espero publicar aqui artigos com o conteúdo textual de cada uma dessas aulas, mas acho que vai demorar bastante até que eu tenha tempo para fazer isso!):

  • Aula 01 – Paradigmas da programação
    • Programação imperativa
      • Programação estruturada
      • Programação orientada a objetos
      • Programação concorrente
    • Programação declarativa
      • Programação funcional
      • Programação lógica
      • Programação restritiva
    • Linguagens de programação multiparadigma
  • Aula 02 – Introdução à programação funcional
    • O que é uma função?
    • Exemplos de funções
    • Tipos de dados
    • A linguagem Haskell
    • Hugs 98
    • WinHugs
    • Exemplo de programa
    • Exercícios
  • Aula 03 – Tipos básicos e definições
    • Booleanos / lógicos
    • Inteiros
    • Caracteres
    • Fracionários
    • Indentação do código
    • Sobrecarga
    • Identificadores
    • Palavras reservadas
    • Exercícios
  • Aula 04 – Projetando e escrevendo programas
    • Eu sei exatamente o que preciso fazer?
    • Quais tipos de dados são necessários?
    • Que informações já possuo?
    • Posso dividir o problema em partes menores?
    • Posso usar recursão para resolver meu problema?
    • Exercícios
  • Aula 05 – Tuplas, listas e strings
    • Tuplas
    • Listas
    • Strings
    • Declaração de tipos
    • Funções genéricas
    • Exercícios
  • Aula 06 – Definições locais
    • Definições locais
    • Cláusula where
    • Expressão let
    • Escopo
  • Aula 07 – Funções sobre listas
    • Definições por casamento de padrões
    • A construção case
    • Recursão primitiva sobre listas
    • Exercícios
  • Aula 08 – Padrões de computação e funções de alta ordem
    • Padrões de computação sobre listas
    • Mapeamento (mapping)
      • A função map
    • Filtragem (filtering)
      • A função filter
    • Redução (folding)
      • A função foldr1
      • A função foldr
    • Funções de alta ordem
  • Aula 09 – Funções como valores
    • Definição a nível de função
    • Composição de funções
    • Cuidados com as composições
    • Expressões definindo funções
    • Notação Lambda
    • Aplicação parcial
    • Seção de operador
    • Currying e Uncurrying
    • Exercícios
  • Aula 10 – Polimorfismo e classes de tipos
    • Polimorfismo paramétrico e sobrecarga
    • Função de ordenação – caso 1
    • Classe de tipos
    • Função de ordenação – caso 2
    • Definição de uma classe e de uma instância
    • Exercícios
  • Aula 11 – Tipos algébricos
    • Por que tipos algébricos?
    • Introduzindo tipos algébricos
    • Tipos enumerados
    • Tipos produtos
    • Tipos alternativos
    • Definição geral de um tipo algébrico
    • Derivando instâncias de classes
    • Tipos algébricos recursivos
    • Construtores infix
    • Tipos algébricos polimórficos
  • Aula 12 – Tipos abstratos de dados
    • Por que tipos abstratos de dados?
    • Exemplo de um TAD
    • Introduzindo newtype
    • Instanciando classes
    • Exercícios
  • Aula 13 – Avaliação preguiçosa
    • Definição
    • Exemplos
    • Pontos-chave da avaliação preguiçosa
    • Cálculo para casamento de padrões
    • Cálculo para guardas
    • Cálculo para definições locais
  • Aula 14 – Introdução à programação lógica
    • O que é programação lógica?
    • Exemplos de inferência
    • Bases da programação lógica
    • Aplicações
    • Vantagens e desvantagens
    • A linguagem Prolog
    • Instruções em Prolog
    • Exemplo de programa e consulta
    • Variáveis em Prolog
    • Formas de declaração de fatos
    • Observações sobre declaração de fatos
    • Formas de consultas
    • Operadores
    • Conjunção
    • Disjunção
    • SWI-Prolog
    • Comandos trace e notrace
    • Exercícios
  • Aula 15 – Recursividade
    • Introdução
    • Operador cut ( ! )
    • Comando fail
    • Operador not
    • Exercícios
  • Aula 16 – Listas
    • Introdução
    • Manipulando listas
    • Predicado member
    • Predicado append
    • Predicado length
    • Exercícios
  • Aula 17 – Aritmética
    • Série de exercícios envolvendo cálculos aritméticos

Apesar de serem enumeradas aqui como sendo 17 aulas, algumas delas requereram mais de um dia de aula e cada dia de aula na verdade são duas horas-aula, totalizando assim as 60 horas-aula da disciplina de Programação Declarativa.

Se você gostou deste artigo, que tal...

Material do Curso de Programação 1

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Usabilidade

Pela definição da International Organization for Standardization (ISO), usabilidade é a extensão na qual um produto pode ser usado por usuários específicos para alcançar objetivos específicos com efetividade, eficiência e satisfação em um contexto de uso específico.

Segundo Dr. Henrique Nou Schneider, a usabilidade está relacionada aos estudos de ergonomia e da IHC, sendo diretamente ligada ao contato do usuário com a interface. Desta forma, é a capacidade do software permitir que o usuário alcance suas metas de interação com o sistema, oferecendo a ele facilidade de aprendizagem em um nível de utilização eficiente e apresentando poucos erros, limitando a necessidade de memorização da informação pelo usuário, elevando assim seu grau de satisfação.
Para Schneider entre os atributos da usabilidade têm-se:

  • Facilidade de Aprendizado: o sistema deve ser fácil de aprender de tal forma que o usuário consiga rapidamente explorá-lo e realizar suas tarefas com ele;
  • Eficiência de uso: o sistema deve ser eficiente a tal ponto de permitir que o usuário, tendo aprendido a interagir com ele, atinja níveis altos de produtividade na realização de suas tarefas;
  • Facilidade de memorização: após certo período sem utilizá-lo, o usuário não freqüente é capaz de retornar ao sistema e realizar a sua tarefa sem a necessidade de reaprender como interagir com ele;
  • Baixa taxa de erros: em um sistema com baixa taxa de erros, o usuário é capaz de realizar tarefas sem maiores transtornos, devendo o sistema recuperar-se de erros automaticamente, caso ocorram;
  • Satisfação subjetiva: o usuário deve considerar agradável a interação com o sistema e sentir-se subjetivamente satisfeito com ele.

A figura abaixo apresenta como se dá a aceitabilidade de um sistema pelo usuário, dividindo-se os valores necessários para atingir esse nível em aceitabilidade social e aceitabilidade prática. Pode-se verificar assim a importância da usabilidade e de seus cinco atributos na aceitabilidade prática de um sistema.


Estrutura hierárquica da aceitabilidade de um sistema

Ergonomia e Usabilidade em Jogos Casuais

A fim de melhor compreendermos a importância da Ergonomia e da Usabilidade em ICH, podemos estudar a aplicação das mesmas em um ramo que estudo bastante, o desenvolvimento de jogos casuais.

Segundo pesquisadores como Braga et al (2006), com os primeiros jogos, surgiram formas de controle com poucas opções de entrada de dados e interfaces gráficas bem simples, o que garantia o aprendizado dos mesmos por meio do método “tentativa-e-erro” de forma bem intuitiva e simples.

Entretanto, de acordo com a evolução histórica dos jogos eletrônicos, percebe-se que a entrada de comandos (joystick, teclado, mouse, etc.) diversificou-se tanto quanto a sua estrutura quanto a sua forma de uso, a fim de atender às necessidades dos diferentes gêneros dos jogos.

Além disso, as interfaces gráficas dos jogos tornaram-se mais sofisticadas e complexas, como forma de melhor prover novas opções e informações ao usuário.

Percebe-se assim que os jogos vêm se tornando cada vez menos ergonômicos e usáveis (BRAGA et al, 2006).

Desta forma, somente um grupo de pessoas, conhecidas como jogadores hardcore, podem tirar o máximo da interação com os jogos uma vez que estão acostumados aos mais diversos tipos de jogos, uma vez que estes ocupam uma boa parte de sua vida.

Entretanto, há alguns tipos de jogos que, ao serem projetados, visam atingir não somente os indivíduos supra citados, mas também os jogadores casuais: pessoas que gostam de jogar por prazer, mas que não o possuem como atividade de lazer primária.

Neste período de intensa disseminação tecnológica, os jogos para esse tipo de jogadores podem ser divididos em quatro grupos de acordo com o meio em que se desenvolve ou finalidade do mesmo: mobile games, jogos para TV digital, webgames e advergames.

Com a massificação do uso do celular, este se tornou uma forma de oferecer ao seu usuário entretenimento em qualquer lugar a qualquer hora em que ele assim deseje. Os mobile games são, portanto, uma forma de atender à demanda crescente por diversão.

Já o desenvolvimento da TV digital vem incentivando pesquisas para compreender-se todas as potencialidades com o advento da mesma. Uma das novas possibilidades é oferecer novos elementos lúdicos com maior interação entre o usuário e o programa do que aquela oferecida por simples filmes ou novelas.

Os webgames nasceram da disseminação da Internet e da exigência dos internautas por novo conteúdo, uso de mídias muito mais interativas e lúdicas por meio da grande Web.

Com a popularização dos jogos eletrônicos, surge uma nova forma de merchandising: o uso de jogos como forma de divulgação de uma marca e/ou produto. Os advergames buscam, através do entretenimento, apresentar ao usuário algum tipo de publicidade.

Observa-se então que, devido a natureza destes jogos, que um jogo casual precisa ser o mais ergonômico e usável possível, seja devido a limitações existentes na entrada de dados e na interface gráfica (caso dos celulares e da TV digital), seja de forma a atrair a atenção do jogador a fim de divulgar a sua propaganda (advergames) e oferecer o máximo de simplicidade em sua jogabilidade. Motivo este que leva os jogos casuais a buscarem utilizar-se de uma entrada de dados muito mais simplificada, interfaces gráficas com ótima visibilidade e uma estrutura interna do jogo que seja facilmente compreendida pelo usuário.

Outro fator importante é a curva de aprendizado de um jogo: quanto melhor ela for, mais usável ele será ao longo do tempo em que for jogado, sendo assim esta uma outra grande preocupação no desenvolvimento dos jogos casuais (BRAGA et al, 2006).

[Conteúdo pertencente ao Material do curso de Interação Humano-Computador]

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Ergonomia – Parte 2

De acordo com a IEA, os domínios de especialização da ergonomia são:

  • Ergonomia física: está relacionada às características da anatomia humana, antropometria, fisiologia e biomecânica em sua relação à atividade física. Os tópicos relevantes incluem o estudo da postura no trabalho, manuseio de materiais, movimentos repetitivos, distúrbios músculos-esqueléticos relacionados ao trabalho, projeto de posto de trabalho, segurança e saúde;
  • Ergonomia cognitiva: refere-se aos processos mentais, tais como percepção, memória, raciocínio e resposta motora conforme afetem as interações entre seres humanos e outros elementos de um sistema. Os tópicos relevantes incluem o estudo da carga mental de trabalho, tomada de decisão, desempenho especializado, interação homem computador, stress e treinamento conforme esses se relacionem a projetos envolvendo seres humanos e sistemas;
  • Ergonomia organizacional: concerne à otimização dos sistemas sócio-técnicos, incluindo suas estruturas organizacionais, políticas e de processos. Os tópicos relevantes incluem comunicações, gerenciamento de recursos de tripulações (CRM – domínio aeronáutico), projeto de trabalho, organização temporal do trabalho, trabalho em grupo, projeto participativo, novos paradigmas do trabalho, trabalho cooperativo, cultura organizacional, organizações em rede, tele-trabalho e gestão da qualidade.

Porém, projetar objetos que melhor se adeqüem ao formato do corpo humano e a corrigir a postura dos usuários são uma das aplicações mais comuns da Ergonomia. Exemplos comuns incluem cadeiras projetadas para evitar que os usuários sentem em posições que tenham um efeito nocivo na coluna vertebral e a escrivaninha ergonômica que oferece uma gaveta ajustável para o teclado, uma tampa principal com altura ajustável e outros elementos que podem ser modificados pelo usuário.

Ergonomia é assim muito mais ampla do que olhar o lado psicológico e anatômico do ser humano, apesar da psicologia dos seres humanos ser, também, um elemento chave nesta ciência.

Esta porção psicológica da ergonomia é usualmente referida como Fatores Humanos ou Engenharia de Fatores Humanos nos Estados Unidos da América, enquanto Ergonomia cognitiva é o termo usado na Europa. O entendimento do projeto em termos de carga de trabalho mental, erro humano, a maneira como seres humanos percebem o ambiente que os cerca e, muito importante, as tarefas que eles executam, são todos analisados pelos ergonomistas.

Segundo Schneider (s.d.), a ergonomia cognitiva, de interfaces e de concepção possui grande importância no desenvolvimento de softwares para melhor se adequarem às necessidades do usuário. Uma vez que se levam em consideração diversos aspectos sobre a capacidade de adaptação do software e o modelo mental construído pelo usuário, faz-se necessário o emprego de uma equipe transdisciplinar.

Schneider (s.d.) assevera que no estudo da capacidade ergonômica de um software, deve-se observar quatro princípios básicos:

  • Visibilidade: Indica que as ações pretendidas correspondem às realizadas. Ou seja, refere-se à escolha das informações que devem ser visíveis ao usuário e organização da mesma, de forma a facilitar a compreensão. Assim, apenas as coisas necessárias têm que estar visíveis. A falta de visibilidade pode levar um software ao fracasso, pois a falta da mesma torna os softwares difíceis de serem operados, causando desinteresse aos usuários;
  • Affordance: Indica que as ações percebidas são na realidade as propriedades reais dos objetos. Ou seja, refere-se à capacidade de o usuário compreender o funcionamento de um componente do sistema pela forma como o mesmo se apresenta, sem necessidade de explicações. Bom affordance faz com que os softwares tenham uma interface mais enxuta, pois as informações relativas às explicações sobre determinados objetos não são necessários, pois eles já são auto-explicativos;
  • Mapeamento: Indica o relacionamento entre as entidades e seus movimentos e resultados. Logo, um objeto é fácil de ser usado quando existe um conjunto visível de ações possíveis e os controles exploram mapeamentos naturais;
  • Feedback: Fornece ao usuário, no dispositivo de saída, informações sobre o estado das ações por ele executadas. Ou seja, a resposta é retornada pelo sistema ao usuário devido a uma ação executada. Assim, a falta de feedback pode confundir o usuário.

Para Borges (s.d.), algumas regras devem ser seguidas para a boa manutenção da ergonomia de um sistema:

  • Esforço Mínimo do Usuário: visa reduzir o número de ações a serem desempenhadas pelo usuário, sendo delegadas tais atividades ao sistema, evitando falhas;
  • Memória Mínima do Usuário: busca uma curva de aprendizado acelerado, de forma que o uso do software possa ser aprendido facilmente e com o mínimo de informações a serem memorizadas;
  • Frustração Mínima: o sistema deve facilitar a execução das tarefas do usuário, removendo possíveis empecilhos e oferecendo a informação necessária para que toda ação seja bem sucedida;
  • Maximizar o uso de padrões e hábitos: busca facilitar o aprendizado, reduzir a quantidade de informações a serem memorizadas e minimizar o esforço do usuário;
  • Máxima tolerância para diferenças humanas: o sistema deve adequar-se aos diferentes perfis de usuários;
  • Máxima tolerância para mudanças ambientais: o sistema deve suportar mudanças do ambiente de hardware/software com um mínimo de esforço do usuário;
  • Notificação imediata de problemas: capacidade do sistema de notificar o usuário sobre problemas atuais ou futuros de forma clara e coerente;
  • Controle máximo de tarefas pelo usuário: sempre que possível, o usuário deve ter total controle sobre a seqüência de execução das tarefas;
  • Apoio máximo às tarefas: o sistema deve ser auto-suficiente quanto à capacidade de oferecer as informações necessárias para a conclusão de uma tarefa.

[Conteúdo pertencente ao Material do curso de Interação Humano-Computador]

Share and Enjoy

  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Ergonomia – Parte 1

A Ergonomia é a ciência que se preocupa com a relação homem-trabalho e respectivos problemas relativos à saúde e segurança no trabalho. Ao mesmo tempo, a publicidade de produtos “ergonomicamente corretos” tem invadido o mercado. Assim, impõe-se saber distinguir o “joio do trigo” e, sobretudo, quando e onde é necessária uma ação ergonômica e quem a pode levar a efeito. Há, pois, que desmistificar a ergonomia e dá-la a conhecer, sobretudo, àqueles que são responsáveis pela concepção de sistemas (de trabalho ou utilitários) ou pela organização do trabalho.

Em termos gerais, pode-se dizer que a ergonomia visa a adaptação das tarefas ao homem. Quer se trate de um produto para consumo público ou de um posto de trabalho, a ergonomia oferece vantagens econômicas através da melhoria do bem-estar, da redução de custos e da melhoria da qualidade e produtividade. Assim, a concepção de qualquer produto ou sistema deve integrar critérios ergonômicos desde a fase de projeto, de forma a assegurar a sua eficiência.

Os ergonomistas, ao projetarem equipamentos, produtos, estações de trabalho e sistemas, objetivam maximizar o conforto, a satisfação e o bem-estar, garantir a segurança e minimizar os custos humanos do trabalho e a carga física, psíquica e cognitiva do operador.

Resulta, conseqüentemente, um segundo objetivo, que é permitir ao homem utilizar da melhor maneira e por mais tempo possível suas experiências, habilidades e potencialidades.

A ergonomia visa adaptar o trabalho ao homem, com relação ao ambiente físico em que este se desenvolve. Seu foco é, portanto, antropocêntrico. Sua ação pode ter igualmente efeitos econômicos – aumentando a qualidade da produção, o rendimento do trabalho, a produtividade do sistema – mas uma ação que vise apenas objetivos econômicos é uma ação de organização e não uma ação ergonômica.

Assim, cumpre-se fazer esta distinção:

  • Por um lado, porque os conhecimentos e técnicas colocados em prática na empresa não permitem, por si só, distinguir aquilo que pertence à Ergonomia, daquilo que faz parte da organização do trabalho e mesmo da engenharia;
  • Por outro lado, para recordar que a vocação da Ergonomia é de estar, primacialmente, a serviço do homem no trabalho.

Em termo etimológico, a palavra ergonomia deriva do grego ergon (trabalho) e nomos (normas, regras, leis).

E, como definição oficial, pode-se apresentar a da Associação Internacional de Ergonomia (IEA) adotada em agosto de 2000:

“A Ergonomia (ou Fatores Humanos) é uma disciplina científica relacionada ao entendimento das interações entre os seres humanos e outros elementos ou sistemas, e à aplicação de teorias, princípios, dados e métodos a projetos a fim de otimizar o bem estar humano e o desempenho global do sistema.”

A ergonomia é, assim, definida como uma ciência aplicada, na medida em que o seu objetivo – a atividade humana, quer seja profissional ou utilitária – nunca está desligado do contexto em que se insere nem dos objetivos em vista. Estes, prendem-se geralmente com a eficácia das ações, não perdem de vista a segurança e o conforto dos atores, podendo afirmar-se que este triângulo formaliza os objetivos da ação ergonômica, ou seja, a otimização das interações homem-sistema. Para alcançar este objetivo geral, a Ergonomia preconiza dois tipos de abordagem:

  • Uma ação sobre os sistemas, processos ou produtos, no sentido de torná-los adequados às características do homem e ao seu modo de funcionamento, eliminando todos os fatores de constrangimento, risco ou nocividade;
  • Uma ação sobre o homem através da formação, no sentido de torná-lo apto para a realização das tarefas que lhe são atribuídas e de prepará-lo para as transformações do trabalho decorrentes da evolução
    tecnológica (CASTRO, 2002, p. 43).

Trata-se, assim, de estudos referentes ao conforto, utilização, organização e documentação do software objetivando facilitar e aperfeiçoar o trabalho do usuário junto ao computador.

Desta maneira, os ergonomistas contribuem para o planejamento, projeto e a avaliação de tarefas, postos de trabalho, produtos, ambientes e sistemas de modo a torná-los compatíveis com as necessidades, habilidades e limitações das pessoas.

Portanto, a Ergonomia é uma área orientada para uma abordagem sistêmica de todos os aspectos da atividade humana. Para dar conta da amplitude dessa dimensão e poder intervir nas atividades do trabalho, faz necessário que os ergonomistas adotem uma abordagem holística de todo o campo de ação da área, tanto em seus aspectos físicos e cognitivos, como sociais, organizacionais, ambientais etc. Freqüentemente esses profissionais intervêm em setores particulares da economia ou em domínios de aplicação específicos. Esses últimos caracterizam-se por sua constante mutação, com a criação de novos domínios de aplicação ou do aperfeiçoamento de outros mais antigos.

[Conteúdo pertencente ao Material do curso de Interação Humano-Computador]

Share and Enjoy

  • Facebook