Introdução

Objetivo

Estudar quais as preferências dos alunos de ciência da computação (UFCG) acerca do uso de linguagem de programação e seus demais contextos.

Obtenção dos dados

Foi criado um gform (https://forms.gle/BNiREzFTsuHckLk49) e enviado para todos os alunos de ciência da computação (UFCG) por meio de email eletrônio entre os dias 12/08/2021 - 21/08/2021, com o total de 40 respostas sobre as seguintes perguntas:

  1. Gênero?
  2. Em que período você ingressou no curso?
  3. Qual a sua preferência de área de atuação?
  4. Qual o seu editor de texto favorito? (o mais utilizado no dia a dia)
  5. Qual o sistema operacional mais utilizado no seu dia a dia para fins de projeto/estágio/laboratórios/exercícios acadêmicos/profissional?
  6. Qual a sua preferência de linguagem de programação, em geral?
  7. Qual nota você atribui à linguagem de programação selecionada acima em relação a documentação, suporte, clareza, …?
  8. Qual(is) da(s) linguagem(ns) de programação abaixo você conhece? (sabe fazer um “hello world”)
  9. Qual a sua preferência de linguagem de programação para back-end?
  10. Qual nota você atribui a linguagem de programação selecionada acima? (em relação a documentação, suporte, clareza…)
  11. Geralmente, você costuma utilizar banco de dados relacional ou não relacional?
  12. Qual a sua preferência de linguagem de programação para front-end?
  13. Qual nota você atribui a linguagem de programação selecionada acima? (em relação a documentação, suporte, clareza…)

Hipóteses

Buscamos verificar a partir das respostas as seguintes hipóteses:

  • A preferência de área de atuação é Engenharia de Software
  • A linguagem de programação mais utilizada entre os novatos é Python
  • A linguagem de programação mais utilizada entre os veteranos/concluientes é Java
  • A melhor linguagem de programação para back-end é Go
  • A melhor linguagem de programação para front-end é Javascript
  • É melhor utilizar banco de dados não relacional

Grupos

Para cada pergunta iremos verificar as hipóteses ocorrem nos seguintes grupos:

  • por gênero (masculino / feminino / outra)
  • periodo (entre 2019.1 e 2020.2 / entre 2017.2 e 2018.2 / entre 2016.1 e 2017.1 / anterior ou igual ao 2015.2)
  • área de atuação (ES / Análise de Dados / Segurança / Infraestrutura / Acadêmica / Sistemas Distribuídos / Jogos / Outra)
  • editor de texto (Eclipse / IntelliJ / NetBeans / pyCharm / Sublime / Visual Studio / Visual Studio Code / Outro)
  • sistema operacional (Windows / Linux / MacOS / Android / Outro)

Observações sobre os grupos

Aqui estão algumas observações sobre os grupos

Por gênero

Das 40 respostas, 30 são “masculino”, 9 são “feminino” e somente 1 “outro”, por esse motivo, nesse estudo iremos ignorar o dado único pois não há amostras suficientes do grupo para verificarmos alguma hipótese. O grupo “feminino” reflete bem a realidade dos cursos de Ciência da Computação, no qual o percentual de homens é maior do que o das mulheres.

Por período

Das 40 respostas, houve representatividade nos 4 subgrupos de intervalos de périodos, portantos todos serão considerados no estudo.

Por área de atuação

Das 40 respostas, não houve respondentes que preferem as áres de infraestrutura e acadêmica, por esse motivo, nesse estudo iremos ignorar esses subgrupos.

Por editor de texto

Das 40 respostas, a grande maioria, 28 respondentes, possuem o Visual Studio Code como favorito, e 5 para IntelliJ, os outros grupos possuem somente 2, portanto iremos ignora-los.

Por sistema operacional

Das 40 respostas, não houve respondentes que utilizam com maior frequência para o Android, e não houve amostra signficativa para o MacOS, portanto iremos ignorar esses subgrupos.

Estudo com R

Carregamento dos dados de resposta

Carregando o arquivo csv de resposta do gform temos uma amostra que representa parte dos alunos (população), em nossos dados temos as seguintes colunas que representam:

  • genero significa gênero ao qual o respondente se declara
  • periodo significa qual intervalo de periodo o respondente ingressou no curso
  • area_de_atuacao significa qual a preferência de area de atuação do respondente
  • editor_de_texto significa qual o editor de texto favorito do respondente
  • sistema_operacional significa qual o sistema operacional que o respondente mais utiliza
  • ling_prog_ctx_ger significa qual a preferência linguagem de programação em contexto geral do respondente
  • nota_ling_prog_ctx_ger representa a nota que o respondente atribui a linguagem de programação em contexto geral
  • ling_prog_conhece representa as linguagens de programação que o respondente conhece
  • ling_prog_ctx_backend significa qual a preferência linguagem de programação para back-end do respondente
  • nota_ling_prog_ctx_backend representa a nota que o respondente atribui a linguagem de programação para back-end
  • tipo_bd represente a utilização de banco de dados relacional ou não relacional pelo respondente
  • ling_prog_ctx_frontend significa qual a preferência linguagem de programação para front-end do respondente
  • nota_ling_prog_ctx_frontend representa a nota que o respondente atribui a linguagem de programação para front-end
responses = read_csv(
  here::here(params$arquivo_dados),
    col_types = cols(
      genero = col_character(),
      periodo = col_character(),
      area_de_atuacao = col_character(),
      editor_de_texto = col_character(),
      sistema_operacional = col_character(),
      ling_prog_ctx_ger = col_character(),
      nota_ling_prog_ctx_ger = col_double(),
      ling_prog_conhece = col_character(),
      ling_prog_ctx_backend = col_character(),
      nota_ling_prog_ctx_backend = col_double(),
      tipo_bd = col_character(),
      ling_prog_ctx_frontend = col_character(),
      nota_ling_prog_ctx_frontend = col_double()
    )
  )

grupo_por_periodo = responses
grupo_por_area_de_atuacao = responses %>%
  filter(area_de_atuacao != "Infraestrutura", area_de_atuacao != "Acadêmica")
grupo_por_sistema_operacional = responses %>%
  filter(sistema_operacional != "Android", sistema_operacional != "MacOS")
grupo_por_editor_texto = responses %>%
  filter(editor_de_texto %in% c("Visual Studio Code", "IntelliJ"))

glimpse(responses)
## Rows: 40
## Columns: 13
## $ genero                      <chr> "Masculino", "Masculino", "Masculino", "Fe…
## $ periodo                     <chr> "Entre 2019.1 e 2020.2", "Entre 2019.1 e 2…
## $ area_de_atuacao             <chr> "Engenharia de Software", "Engenharia de S…
## $ editor_de_texto             <chr> "Visual Studio Code", "Visual Studio Code"…
## $ sistema_operacional         <chr> "Linux", "Linux", "Linux", "Windows", "Lin…
## $ ling_prog_ctx_ger           <chr> "TypeScript", "TypeScript", "Python", "Jav…
## $ nota_ling_prog_ctx_ger      <dbl> 4, 5, 4, 4, 4, 4, 5, 4, 5, 4, 5, 5, 5, 4, …
## $ ling_prog_conhece           <chr> "C/C++, Go, Java, JavaScript, Python, Type…
## $ ling_prog_ctx_backend       <chr> "Outra", "JavaScript", "JavaScript", "Java…
## $ nota_ling_prog_ctx_backend  <dbl> 4, 5, 4, 4, 5, 4, 5, 5, 4, 5, 5, 5, 3, 4, …
## $ tipo_bd                     <chr> "Relacional", "Não relacional", "Relaciona…
## $ ling_prog_ctx_frontend      <chr> "JavaScript", "TypeScript", "JavaScript", …
## $ nota_ling_prog_ctx_frontend <dbl> 4, 5, 4, 5, 3, 4, 5, 5, 4, 5, 5, 5, 5, 5, …

Preferência de área de atuação

Analisemos em relação a preferência de área de atuação para verificarmos a hipótese A preferência de área de atuação é Engenharia de Software sobre alguns grupos (definidos no tópico de Grupos), como período, sistema operacional e editor de texto.

Geral

Observamos claramente que a área de atuação de preferência dos respondentes é Engenharia de Software, seguido de Análise de Dados. Na amostra tivemos que nossa hipótese foi validada no contexto geral.

grupo_por_periodo %>%
  group_by(area_de_atuacao) %>%
  count() %>%
  ggplot(aes(x = n, y = reorder(area_de_atuacao, n))) +
  geom_bar(stat='identity') +
  labs(
    title = "Preferência dos respondentes em relação a área de atuação",
    x = "Quantidade de respondentes",
    y = ""
  ) +
  scale_x_continuous(breaks = seq(from = 0, to = 22, by = 2))

Périodo

Observamos claramente que em todos os grupos de périodo, a área de atuação de preferência dos respondentes continua sendo Engenharia de Software, uma exceção a isso é durante o período de 2017.2 e 2018.2 em que houve um pico para a área de Análise de Dados.

grupo_por_periodo %>%
  group_by(periodo, area_de_atuacao) %>%
  count() %>%
  ggplot(aes(y = area_de_atuacao, x = n)) +
  facet_wrap(~ periodo) +
  geom_bar(stat='identity') +
  labs(
    title = "Preferência dos respondentes em relação a área\nde atuação versus período de ingresso no curso",
    x = "Quantidade de respondentes",
    y = ""
  )

Sistema operacional

Continuamos observando o mesmo comportamento visto anteriormente da dominância da área de Engenharia de software, seguido da área de Análise de dados.

grupo_por_sistema_operacional %>%
  group_by(sistema_operacional, area_de_atuacao) %>%
  count() %>%
  ggplot(aes(y = reorder(area_de_atuacao, n), x = n)) +
  facet_wrap(~ sistema_operacional, ncol = 1) +
  geom_bar(stat='identity') +
  labs(
    title = "Preferência dos respondentes em relação a área\nde atuação versus sistema operacional",
    x = "Quantidade de respondentes",
    y = ""
  ) +
  scale_x_continuous(breaks = seq(from = 0, to = 14, by = 2))

Editor de texto

Continuamos observando o mesmo comportamento visto anteriormente da dominância da área de Engenharia de software, seguido da área de Análise de dados. Interessante que o Visual Studio Code é bem usado independente da área de atuação. Já o IntelliJ possui um foco maior em Engenharia de software.

grupo_por_editor_texto %>%
  group_by(editor_de_texto, area_de_atuacao) %>%
  count() %>%
  ggplot(aes(y = reorder(area_de_atuacao, n), x = n)) +
  facet_wrap(~ editor_de_texto, ncol = 1) +
  geom_bar(stat='identity') +
  labs(
    title = "Preferência dos respondentes em relação a área\nde atuação versus editor de texto favorito",
    x = "Quantidade de respondentes",
    y = ""
  ) +
  scale_x_continuous(breaks = seq(from = 0, to = 14, by = 2))

Linguagem de programação no contexto geral

Analisemos em relação a preferência de linguagem de programação para verificarmos as hipóteses A linguagem de programação mais utilizada entre os novatos é Python e A linguagem de programação mais utilizada entre os veteranos/concluientes é Java sobre o período. Considere os periodos entre 2019.1 e 2020.2, como novatos, entre 2017.2 e 2018.2 como veteranos e o restante como concluientes

Observamos que entre os novatos e concluientes, a linguagem de programação Java domina, portanto nossa hipotese A linguagem de programação mais utilizada entre os novatos é Python, pensamos em Python pelo fato das disciplinas de P1/LP1, mas P2/LP2 e EDA/LEDA acabam puxam mais alunos para Java. Sobre a hipótese A linguagem de programação mais utilizada entre os veteranos/concluientes é Java em parte está correta para os concluintes, mas os veteranos preferem Python.

novatos_x_veteranos = responses %>%
  mutate(class = periodo)

novatos_x_veteranos$class[novatos_x_veteranos$class == "Entre 2019.1 e 2020.2"] = "novatos"
novatos_x_veteranos$class[novatos_x_veteranos$class == "Entre 2017.2 e 2018.2"] = "veteranos"
novatos_x_veteranos$class[novatos_x_veteranos$class == "Entre 2016.1 e 2017.1"] = "concluientes"
novatos_x_veteranos$class[novatos_x_veteranos$class == "Anterior ou igual ao 2015.2"] = "concluientes"

novatos_x_veteranos %>%
  group_by(class, ling_prog_ctx_ger) %>%
  count() %>%
  ggplot(aes(y = reorder(ling_prog_ctx_ger, n), x = n)) +
  facet_grid(~class) +
  geom_bar(stat='identity') +
  labs(
    title = "Preferência dos respondentes em relação a linguagem\n de programação no contexto geral versus tipo de aluno",
    x = "Quantidade de respondentes",
    y = ""
  ) +
  scale_x_continuous(breaks = seq(from = 0, to = 7, by = 2))

Linguagem de programação no contexto de back-end

Temos que nossa hipotese A melhor linguagem de programação para back-end é Go é totalmente incorreta, acreditavamos que Golang é uma linguagem de programação que vem crescendo e sendo adotada para o uso na programação back-end, mas em nossos alunos ainda continuam muito baixo em percentual. A maioria dos respondentes preferem Java ou Javascript, em nosso curso Javascript é visto em poucas disciplinas obrigatórias, mas ainda sim possui um grande percentual na amostra. Java porém uma linguagem de programação muito vista em todo o curso.

responses %>%
  group_by(ling_prog_ctx_backend) %>%
  count() %>%
  ggplot(aes(y = reorder(ling_prog_ctx_backend, n), x = n)) +
  geom_bar(stat='identity') +
  labs(
    title = "Preferência dos respondentes em relação a\nlinguagem de programação no contexto de back-end",
    x = "Quantidade de respondentes",
    y = ""
  ) +
  scale_x_continuous(breaks = seq(from = 0, to = 20, by = 2))

Linguagem de programação no contexto de front-end

Temos que nossa hipotese A melhor linguagem de programação para front-end é Javascript é correta, em nosso curso as unicas disciplinas que abordam bem front-end são Projeto de Software e Desenvolvimento Web, em que Javascript é adotado em ambas para essa função.

responses %>%
  group_by(ling_prog_ctx_frontend) %>%
  count() %>%
  ggplot(aes(y = reorder(ling_prog_ctx_frontend, n), x = n)) +
  geom_bar(stat='identity') +
  labs(
    title = "Preferência dos respondentes em relação a\nlinguagem de programação no contexto de front-end",
    x = "Quantidade de respondentes",
    y = ""
  ) +
  scale_x_continuous(breaks = seq(from = 0, to = 24, by = 2))

Banco de dados relacional ou não relacional

Nossa hipótese de É melhor utilizar banco de dados não relacional está incorreta, na disciplina de Banco de dados vista no curso estamos muito modelo relacional, além de outras disciplinas como Projeto de Sofware fazerem uso.

responses %>%
  group_by(tipo_bd) %>%
  count() %>%
  ggplot(aes(y = reorder(tipo_bd, n), x = n)) +
  geom_bar(stat='identity') +
  labs(
    title = "Utilização dos respondentes em relação a banco\n de dados relacional ou não relacional",
    x = "Quantidade de respondentes",
    y = ""
  ) +
  scale_x_continuous(breaks = seq(from = 0, to = 30, by = 2))

Conclusão

Nosso curso de Ciência da computação (UFCG) é muito voltado para as linguagens de programação Java e Javascript, que definem bem o mundo do back-end e front-end respectivamente. Muitas disciplinas adotam Java na sua metodologia, diferentemente de Javascript que é muito pouco vista mais ainda sim possui uma boa representatividade no curso definida pela amostra aleatória de 40 alunos participantes da survey. Um ponto crítico é que essa amostra de 40 alunos não espelham a população total dos alunos, notamos por exemplo que não houve muita participação dos gêneros além do “masculino” e “feminino”.