Fall 2024 Git Workshop Survey Responses

Number of responses

Code
library(tidyverse)
library(bslib)
library(shiny)
library(bsicons)
source("scripts/helper_functions.R")

# list of workshop IDs to filter results
workshops <- c("2024-10-22-ucsb-git")

results <- read_csv("data-joined/all_workshops.csv") %>% 
  filter(workshop %in% workshops)
  
# Fix comma separator
results <- results %>% 
  mutate(findout_select.pre = str_replace_all(
  findout_select.pre, 
  "Twitter, Facebook, etc.", 
  "Twitter; Facebook; etc."))

pre_survey <- results %>%
  select(ends_with(".pre"))

post_survey <- results %>%
  select(ends_with(".post"))

n_pre <- sum(apply(post_survey, 1, function(row) all(is.na(row))))
n_post <- sum(apply(pre_survey, 1, function(row) all(is.na(row))))
n_total <- nrow(results)
n_both <- nrow(results) - n_pre - n_post

layout_columns(
  value_box(
    title = "Total responses", value = n_total, ,
    theme = NULL, showcase = bs_icon("people-fill"), showcase_layout = "left center",
    full_screen = FALSE, fill = TRUE, height = NULL
  ),
  value_box(
    title = "Both pre- and post-", value = n_both, , theme = NULL,
    showcase = bs_icon("arrows-expand-vertical"), showcase_layout = "left center",
    full_screen = FALSE, fill = TRUE, height = NULL
  ),
  value_box(
    title = "Only pre-workshop", value = n_pre, ,
    theme = NULL, showcase = bs_icon("arrow-left-short"), showcase_layout = "left center",
    full_screen = FALSE, fill = TRUE, height = NULL
  ),
  value_box(
    title = "Only post-workshop", value = n_post, , theme = NULL,
    showcase = bs_icon("arrow-right-short"), showcase_layout = "left center",
    full_screen = FALSE, fill = TRUE, height = NULL
  )
)

Total responses

23

Both pre- and post-

6

Only pre-workshop

13

Only post-workshop

4

Departments

Code
depts <- results %>% select(dept_select.pre) %>% 
  separate_rows(dept_select.pre, sep=",") %>%
  mutate(dept_select.pre = str_trim(dept_select.pre)) %>%
  count(dept_select.pre, name = "count") %>% 
  mutate(percent = (count / (n_total - n_post)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(depts, aes(y=reorder(dept_select.pre, count), x=count)) +
    geom_col() +
    geom_label(aes(label = text, hjust = -0.1),
               size = 3) +
    labs(x = "# respondents", y = element_blank()) +  
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(depts$count)*1.1))

“Other” Departments

Code
other_depts <- results %>% 
  count(dept_other.pre, name = "count") %>% 
  drop_na() %>% 
  mutate(percent = (count / (n_total - n_post)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(other_depts, aes(y=reorder(dept_other.pre, count), x=count)) +
    geom_col() +
    geom_label(aes(label = text, hjust = -0.1),
               size = 3) +
    labs(x = "# respondents", y = element_blank()) + 
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(other_depts$count)*1.1))

Current occupation / Career stage

Code
ocup <- results %>% select(occupation.pre) %>% 
  separate_rows(occupation.pre, sep=",") %>%
  mutate(occupation.pre = str_trim(occupation.pre)) %>%
  count(occupation.pre, name = "count") %>% 
  drop_na() %>% 
  mutate(percent = (count / (n_total - n_post)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(ocup, aes(y=reorder(occupation.pre, count), x=count)) +
    geom_col() +
    geom_label(aes(label = text, hjust = -0.1),
               size = 3) +
    labs(x = "# respondents", y = element_blank()) + 
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(ocup$count)*1.2))

Motivation - Why are you participating in this workshop?

Code
motiv <- results %>% select(motivation_select.pre) %>% 
  separate_rows(motivation_select.pre, sep=",")  %>% 
  mutate(motivation_select.pre = str_trim(motivation_select.pre)) %>%
  count(motivation_select.pre, name = "count") %>% 
  drop_na() %>% 
  mutate(percent = (count / (n_total - n_post)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(motiv, aes(y=reorder(motivation_select.pre, count), x=count)) +
    geom_col() +
    geom_label(aes(label = text, hjust = -0.1),
               size = 3) +
    labs(x = "# respondents", y = element_blank()) + 
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(motiv$count)*1.2))

How did you find out about this workshop?

Code
findw <- results %>% select(findout_select.pre) %>% 
  separate_rows(findout_select.pre, sep=",")  %>% 
  mutate(findout_select.pre = str_trim(findout_select.pre)) %>%
  count(findout_select.pre, name = "count") %>% 
  drop_na() %>% 
  mutate(percent = (count / (n_total - n_post)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(findw, aes(y=reorder(findout_select.pre, count), x=count)) +
    geom_col() +
    geom_label(aes(label = text, hjust = -0.1),
               size = 3) +
    labs(x = "# respondents", y = element_blank()) + 
    theme_minimal() +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.y = element_blank()
      ) +
    expand_limits(x = c(0,max(findw$count)*1.2))

What you most hope to learn?

Code
results %>% group_by(workshop) %>% 
  select(workshop, hopes.pre) %>% 
  drop_na()
workshop hopes.pre
2024-10-22-ucsb-git How version control works and how to use it
2024-10-22-ucsb-git This will be my third time taking this workshop. I just hope to be able to do the things we learn after I walk out of the workshop (which hasn’t happened before)
2024-10-22-ucsb-git I’ve been meaning to learn version control, since I write some SageMath scripts for my research.
2024-10-22-ucsb-git I’m the worst working with GitHub! I have the GitHub Desktop installed but honestly don’t know how to use it! On the other hand, all my lab mates utilize that and I don’t wanna stay behind.
2024-10-22-ucsb-git Comfort dealing with branches
2024-10-22-ucsb-git getting git up and running so i can finally be on top of my workflow
2024-10-22-ucsb-git How to use GitHub push and pull function. How to organize the data/code using git. Other function I don’t know
2024-10-22-ucsb-git Learn about the basics of GitHub
2024-10-22-ucsb-git to know more about Github and its utilization
2024-10-22-ucsb-git I hope to learn the basics of using GitHub and git.
2024-10-22-ucsb-git setting up a website using git
2024-10-22-ucsb-git learn more about how to use github
2024-10-22-ucsb-git Better understanding on campus resources for learing to use or building awareness of tools to assist research IT, researchers.

Learning environment in the workshop

Code
orderedq <- c("Strongly Disagree", "Somewhat Disagree", "Neither Agree or Disagree","Somewhat Agree", "Strongly Agree")
addNA(orderedq)
Code
agree_questions <- results %>% 
  select(join_key, agree_apply.post,    agree_comfortable.post, agree_clearanswers.post,
         agree_instr_enthusiasm.post, agree_instr_interaction.post, agree_instr_knowledge.post
) %>% 
  filter(!if_all(-join_key, is.na))

n_agree_questions <- nrow(agree_questions)
  
agree_questions <- agree_questions %>%
  pivot_longer(cols = -join_key, names_to = "Question", values_to = "Response") %>% 
  mutate(Response = factor(Response, levels = orderedq),
         Question = recode(Question,
                     "agree_apply.post" = "Can immediatly apply 
 what they learned",
                     "agree_comfortable.post" = "Comfortable learning in 
 the workshop environment",
                     "agree_clearanswers.post" = "Got clear answers 
 from instructors",
                     "agree_instr_enthusiasm.post" = "Instructors were enthusiastic",
                     "agree_instr_interaction.post" = "Comfortable interacting 
 with instructors",
                     "agree_instr_knowledge.post" = "Instructors were knowledgeable 
 about the material"
      ))

summary_data <- agree_questions %>%
  count(Question, Response, name = "count") %>% 
  mutate(percent = (count / n_agree_questions) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

ggplot(summary_data, aes(x = Question, y = count, fill = Response)) +
  geom_col(position = "fill", color = "black", show.legend = TRUE) +
  scale_y_continuous(labels = scales::percent_format()) + 
  scale_fill_manual(values = c("Strongly Disagree" = "#d01c8b", 
                               "Somewhat Disagree" = "#f1b6da", 
                               "Neither Agree or Disagree" = "#f7f7f7", 
                               "Somewhat Agree" = "#b8e186", 
                               "Strongly Agree" = "#4dac26"), 
                    na.translate = TRUE, na.value = "#cccccc", 
                    breaks = orderedq, drop = FALSE) +
  geom_text(aes(label = text), size = 3,
             position = position_fill(vjust = 0.5)) +
  labs(y = "# respondents (Percentage)", x = element_blank(), fill = "Responses",
       subtitle = paste0("Number of responses: ", n_agree_questions)) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        plot.subtitle = element_text(hjust = 0.5, size = 12))

How an instructor or helper affected your learning experience

Code
results %>% 
  group_by(workshop) %>% 
  select(workshop, instructor_example.post) %>%
  drop_na()
workshop instructor_example.post
2024-10-22-ucsb-git I had an error, put up a pink sticky note, and promptly got help, and when the first two helpers didn’t crack it the third one did, and I was able to proceed
2024-10-22-ucsb-git I had a question that the instructor wasn’t able to immediately answer in class, but they were sure to follow up with an answer in a later email.
2024-10-22-ucsb-git Helped me fix Homebrew, which was causing me some issues
2024-10-22-ucsb-git Having helpers during the workshop was awesome!
2024-10-22-ucsb-git They answered all my questions! The demonstrations on the screen had a really good pace that I was able to follow despite only learning everything for the first time.
2024-10-22-ucsb-git When I fell behind due to a lapse in attention, I was caught up.
2024-10-22-ucsb-git I liked how we used the blue and red stickers to inform the instructors if we were having any problem and they would help us solve it immediately.
2024-10-22-ucsb-git I was struggling with understanding on how to set up ssh. A helper helped me figure out what I was doing incorrectly and guided me in fixing it. And the instructor later answered a question about whether I had to create a new ssh for each repo.
2024-10-22-ucsb-git They were able to answer all my questions in real time so that I didn’t get stuck or behind when I had one. (Including that I needed some catch-up after missing the first day.)

Skills and perception comparison

Code
# Calculate mean scores and make graph for all respondents (only_matched=FALSE)
tryCatch(
  {
mean_nresp <- get_mean_scores_nresp(results, only_matched=FALSE)
graph_pre_post(mean_nresp$mean_scores, mean_nresp$n_resp_pre, mean_nresp$n_resp_post, mean_nresp$n_resp_pre_post, only_matched=FALSE)
},
error = function(cond) {
message("Could not do the plots as there are no pre or post results to show")
}
)

Code
# Calculate mean scores and make graph for only matched respondents in pre and post (only_matched=TRUE)
tryCatch(
  {
mean_nresp <- get_mean_scores_nresp(results, only_matched=TRUE)
graph_pre_post(mean_nresp$mean_scores, mean_nresp$n_resp_pre, mean_nresp$n_resp_post, mean_nresp$n_resp_pre_post, only_matched=TRUE)
},
error = function(cond) {
message("Could not do the plots as there are no pre or post results to show")
}
)

Workshop Strengths

Code
results %>% 
  group_by(workshop) %>% 
  select(workshop, workshop_strengths.post) %>% 
  drop_na()
workshop workshop_strengths.post
2024-10-22-ucsb-git many helpers constantly monitoring for issues people have, the sticky note system to ask for help/check people are following was good, beginner friendly
2024-10-22-ucsb-git Good at covering all the most popular terminal commands for git
2024-10-22-ucsb-git It started from the very basics which was a good and much needed refresher for me
2024-10-22-ucsb-git Very applicable to my work. Provides a gentle introduction, but it’s enough that I can get started with Git and Github right away
2024-10-22-ucsb-git Easy to follow, practical
2024-10-22-ucsb-git stickies, instructors and helpers were very knowledgable and the workshop contents were what I expected (as what we were told on the invitation email)
2024-10-22-ucsb-git Straightforward and applicable, taught by professionals
2024-10-22-ucsb-git - Well designed; - Really good instructors
2024-10-22-ucsb-git Guided, Small, Hands-on, Interactive
2024-10-22-ucsb-git The format and pace seemed just right–it was independent and practical enough for most of us to run into instructive problems but not so fast that people got behind (as far as I could tell). Instructors were clear and helpful. Nice to have so much staff in the room.

Ways to improve the workshop

Code
results %>% 
  group_by(workshop) %>% 
  select(workshop, workshop_improved.post) %>% 
  drop_na()
workshop workshop_improved.post
2024-10-22-ucsb-git most of the time the pace was a little too slow for me to pay attention all the time, but when I had a problem that delayed me for a while, there wasn’t really a way to catch up on my own; and my suggestion was going to be “maybe hand out/share the entire set of instructions for the workshop” but I stopped and checked and the workshop website actually does that and I’m dumb, maybe instead advertise more specifically that the website contains step-by-step instructions? “Materials” was a little vague and I didn’t understand it to mean that it had all the instructions; ; also unfortunately I didn’t attend the second day so I don’t know what happened there, but the overall workshop was a bit basic considering time investment of four hours, I think it could be compressed to two or three hours; ; I know some people left upon learning that it would just be the basic stuff without dealing with things like handling merge conflicts, and I feel like that could have been prevented with a more detailed description of the workshop during its promotion (ex. “this is a workshop geared towards beginners and we will be covering basics like making a repository. We will not be covering…”)
2024-10-22-ucsb-git Sometimes, terminal commands and flags can be cryptic; I think it would be helpful to explain what each flag means (especially when doing the ssh part) so that those who want to can appreciate what’s being done.
2024-10-22-ucsb-git I wish that this workshop (and others) could have a demo of a real-world use case. It’s all well and good to learn the very basics, but then when I think about applying this to my workflow or to existing collaborations I have I can’t even picture what it would look like. If the last 30 minutes could have been a demo with a more complex set of files and a larger slate of collaborators, that would be good.
2024-10-22-ucsb-git Some other students mentioned “branching” as a topic they want to be covered, which might warrant a third day for the workshop
2024-10-22-ucsb-git The pace was a little fast at first, but then it got better
2024-10-22-ucsb-git Longer, mor github functions taught
2024-10-22-ucsb-git I hope you could provide us with the full learning materials that we can look back in the future in form of a pdf or something like that.
2024-10-22-ucsb-git A summary of the material covered after the workshop
2024-10-22-ucsb-git For the scope of the topic the workshop was perfect. Lots of possibilities for advanced beginner workshops–working on our own stuff with instructor support, learning about branches, best practices for collaborative work come to mind. Could probably fit 15 min of the latter into this one, since it went a little short. (better a little short than a little long tho.)

How likely are you to recommend this workshop? Scale 0 - 10

Code
orderedq <- c("Detractor", "Passive", "Promoter")

nps <- results %>% 
  count(recommend_group.post, recommende_score.post, name = "count") %>% 
  drop_na() %>% 
  mutate(recommend_group.post = factor(recommend_group.post, levels = orderedq),
         percent = (count/sum(count)) * 100,
         text = sprintf("%.0f (%.0f%%)", count, percent))

nps %>% 
ggplot(aes(x=recommende_score.post, y=count, fill=recommend_group.post)) +
  geom_col(color="black", show.legend = TRUE) +
  scale_fill_manual(values = c("Detractor" = "#af8dc3", "Passive" = "#f7f7f7", "Promoter" = "#7fbf7b"), breaks = c("Detractor", "Passive", "Promoter"), drop = FALSE) +
  geom_label(aes(label = text, vjust = -0.5), fill = "white", size= 3) +
  scale_x_continuous(breaks = 1:10) +
  labs(x = "NPS Score", y = "# respondents", subtitle = paste0("Number of responses: ", sum(nps$count), "
 Mean score: ", format(weighted.mean(nps$recommende_score.post, nps$count), digits = 3))) +
  theme_minimal() +
  theme(
    panel.grid.minor = element_blank(),
    panel.grid.major.x = element_blank(),
    plot.subtitle = element_text(hjust = 0.5, size = 12)
  ) +
  expand_limits(x = c(1,10),
                y = c(0, max(nps$count)*1.1))

Topic Suggestions

Code
results %>% 
  group_by(workshop) %>% 
  select(workshop, suggest_topics.post) %>% 
  drop_na()
workshop suggest_topics.post
2024-10-22-ucsb-git maybe intro to command line/terminal? I don’t really understand how it works and I just type the things instructions tell me to, but I have little troubleshooting ability besides googling the error (which isn’t bad but I don’t know what I’m doing)
2024-10-22-ucsb-git I think a research organization workshop targeted towards upper-division undergraduates and new graduate students could be helpful. For graduate students especially, we often learn the research practices of our advisors/PIs. While they are incredibly knowledgeable, they may not be familiar with some of the newer technology and best practices. As I reflect on my graduate studies as a fifth-year, I wish I had been better set up for success in terms of organization in the beginning, but I just didn’t know better (nor did my advisor)
2024-10-22-ucsb-git Terminal commands
2024-10-22-ucsb-git I’m looking for a workshop that teaches how to create and modify a makefile
2024-10-22-ucsb-git Working with R (or Python) and GitHub instead of .md files
2024-10-22-ucsb-git Transferring between languages (we learn a lot of R but I know a lot of the working world uses python)
2024-10-22-ucsb-git - Basics of Object Oriented Programming
2024-10-22-ucsb-git Introduction & Intermediate workshop on Linux
2024-10-22-ucsb-git see previous answer re git workshops. i’d also like to learn about working with APIs.