This repository contains the data from the "progfun" survey, and the source code for many of the plots seen in the Functional Programming Principles in Scala: Impressions and Statistics article on scala-lang.org.
We encourage you to checkout the repository, to generate the plots shown in the article yourself, and to explore the data further. Given sufficient interest, we plan on writing a follow-up article, and we'd love to hear from you! If you've found anything interesting in the data, or otherwise have a cool/interesting visualization to share, please don't hesitate to let us know! We'll include as many as we can in our follow-up article.
(Please note: we plan on adding a few more graph types and doing some organizational work in this repository, so keep an eye out for improvements!)
The following questions (with their available choices) were on the survey:
What's your age group?
- Possible choices: 10-17, 18-24, 25-34, 35-44, 45-54, 55-64, 65+
- What country do you live in?
What's your highest degree?
- Possible choices: No High School (or equivalent), Some High School (or equivalent), High School (or equivalent), Some College (or equivalent), Bachelor's Degree (or equivalent), Master's Degree (or equivalent), Doctorate Degree (or equivalent), Other (fill in)
If applicable, what field of study was your highest degree in?
- Possible choices: Computer Science, Computer/Software Engineering, Electrical Engineering, Mechanical Engineering, Statistics/Mathematics, Business/Marketing, Physics, Life Sciences, Liberal Arts, Fine Arts, Other
How many years have you been programming?
- Possible choices: 0-1 years, 1-2 years, 3-5 years, 5-7 years, 7-10 years, 10-15 years, 15-20 years, 20+ years
Did you finish the course?
- Possible choices: Yes, No
How many hours, on average, did you spend per week on the course?
- Possible choices: 1-2 hours, 2-4 hours, 4-6 hours, 6-8 hours, 8-10 hours, 10-12 hours, 12+ hours
How difficult did you find the course overall?
- Possible choices: 1 - Too Easy, 2, 3, 4, 5 - Too Hard
How difficult did you find the homework assignments?
- Possible choices: 1 - Too Easy, 2, 3, 4, 5 - Too Hard
Do you feel the course was worth the time you invested in it?
- Possible choices: 1 - Disagree Completely, 2, 3, 4, 5 - Agree Completely
Would you take a follow-up functional programming in Scala course, if it were offered?
- Possible choices: 1 - Not Interested, 2, 3, 4, 5 - Absolutely!
What interested you in the Functional Programming Principles in Scala course?
- Possible choices: Personal Interest/Curiosity, University Studies, Helps With Profession
Where do you plan to apply what you've learned in this course?
- Possible choices: Personal projects, Individual project at work, Team project at work, University projects, No application plans, attended for general interest
What is your preferred editor, for use outside of this course?
- Possible choices: Eclipse, IntelliJ, Sublime Text, Visual Studio, XCode, TextMate, emacs, vim, Other
What editor did you end up using for the majority of the course?
- Possible choices: Eclipse, IntelliJ, Sublime Text, TextMate, emacs, vim, Other
- Possible choices: No experience / not seen it at all, I've seen and understand some code, I have some experience writing code, I'm fluent, I'm an expert
You need SBT 0.12 installed. If you don't already have SBT, make sure to grab it.
If you've got a mac, you can use either Macports:
$ sudo port install sbt
$ brew install sbt
For Linux users, you can use APT (other package managers are available on the getting started page)
apt-get install sbt
- Start SBT in the root directory of progfun-stats.
- Select the plot that you wish to generate. Or select
ProgfunStatsto generate them all.
Explore the data with Scala!
To generate a new graph, define a new singleton object in ProgfunStats.scala, and make sure to extend the proper
GraphFactory (current choices are
In all cases, there are a few fields that you need to implement-- for example, the
name field, which corresponds to the name of the HTML file you wish to output, as well as the
data field, which represents that data that you would like to display on a graph.
Accessing the survey data from Scala
There are two ways to get to the data, depending on what you'd like to do with it. In general, all of the survey data lives in the
CourseraData object. You can:
Access entire rows of the dataset, i.e., a single question answered by all respondents of the survey. For example, to see what all responses were for the question: "What's your highest degree?", you can simply
import CourseraData.degrees(have a look at
CourseraDatato see all other possible options for import)
Access all responses per respondent, i.e., a list of
Users, each has a field for each question asked in the survey (luckily no more than 22!). Simply
import CourseraData.users.This is useful when you want to plot two qualities against each other. For example, in the graph of perceived difficulty vs background/field we need to know what a single user inputted for two different fields. That is, we needed to first filter out only Java/C/C++/FP experts, and then for those users, we needed to examine how difficult they believed the course to be.
The source code and data within this repository are open source under the Apache License V2.
A summary of the license can be found here. Like all licences the Apache License v2 grants certain rights under certain conditions. In brief a licensee of Apache Licensed V2 software can:
- copy, modify and distribute the covered software in source and/or binary forms
- exercise patent rights that would normally only extend to the licensor provided that:
- all copies, modified or unmodified, are accompanied by a copy of the license
- all modifications are clearly marked as being the work of the modifier
Apache License V2
Copyright 2012 École Polytechnique Fédérale de Lausanne (EPFL)
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.