Abstract
We performed a controlled experiment comparing a C and a Python Introductory Programming course. Three faculty members at University of Campinas, Brazil, taught the same CS1 course for the same majors in two different semesters, one version in Python and one in C, with a total of 391 students involved in the experiment. We measured the dropout rate, the failure rate, the grades on the two exams, the proportion of completed lab assignments, and the number of submissions per completed assignment. There was no difference in the dropout rate. The failure rate for Python was 16.9% against 23.1% for C. The effect size (Cohen’s D) on the comparison of Python against C on the midterm exam was 0.27, and 0.38 for the final exam. The effect size for the proportion of completed assignments was 0.39 and the effect size for the number of submissions per assignment was -0.61 (Python had less submissions per completed assignments). Thus, for all measures, with the exception of dropout rate, the version of the course in Python yielded better student outcomes than the version in C and all differences are significant (with 95% confidence) with the exception of the failure rate (p-value=0.12).
- Irwin Bross. 1954. A confidence interval for a percentage increase. Biometrics 10, 2 (1954), 245--250.Google ScholarCross Ref
- Jacob Cohen. 1988. Statistical Power Analysis for the Behavioral Sciences. Lawrence Earlbaum Associates.Google Scholar
- Stephen Cooper, Wanda Dann, and Randy Pausch. 2003. Teaching objects-first in introductory computer science. ACM SIGCSE Bulletin 35, 1 (2003), 191--195. Google ScholarDigital Library
- Paul Denny, Andrew Luxton-Reilly, and Ewan Tempero. 2012. All syntax errors are not equal. In 17th ACM Conference on Innovation and Technology in Computer Science Education. 75--80. Google ScholarDigital Library
- Paul Denny, Andrew Luxton-Reilly, Ewan Tempero, and Jacob Hendrickx. 2011. Understanding the syntax barrier for novices. In 16th Annual Conference on Innovation And Technology in Computer Science Education. 208--212. Google ScholarDigital Library
- Albrecht Ehlert and Carsten Schulte. 2009. Empirical comparison of objects-first and objects-later. In 5th International Workshop on Computing Education Research. 15--26. Google ScholarDigital Library
- Richard J. Enbody and William F. Punch. 2010. Performance of python CS1 students in mid-level non-python CS courses. In 41st ACM Technical Symposium on Computer Science Education. ACM, 520--523. Google ScholarDigital Library
- Richard J. Enbody, William F. Punch, and Mark McCullen. 2009. Python CS1 as preparation for C++ CS2. ACM SIGCSE Bulletin 41, 1 (2009), 116--120. Google ScholarDigital Library
- Scott Freeman, Sarah L. Eddy, Miles McDonough, Michelle K. Smith, Nnadozie Okoroafor, Hannah Jordt, and Mary Pat Wenderoth. 2014. Active learning increases student performance in science, engineering, and mathematics. Proceedings of the National Academy of Sciences 111, 23 (2014), 8410--8415.Google ScholarCross Ref
- Ernie Giangrande Jr. 2007. CS1 programming language options. Journal of Computing Sciences in Colleges 22, 3 (2007), 153--160. Google ScholarDigital Library
- Michael H. Goldwasser and David Letscher. 2008. Teaching an object-oriented CS1 -: With Python. ACM SIGCSE Bulletin 40, 3 (2008), 42--46. Google ScholarDigital Library
- Philip Guo. 2014. Python is now the most popular introductory teaching language at top U.S. universities. BLOG@CACM http://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-u-s-universities/fulltext.Google Scholar
- Stefan Hanenberg, Sebastian Kleinschmager, Romain Robbes, Éric Tanter, and Andreas Stefik. 2014. An empirical study on the impact of static typing on software maintainability. Empirical Software Engineering 19, 5 (2014), 1335--1382. Google ScholarDigital Library
- David C. Howell. 2011. Confidence intervals on effect size. Lecture handout. Psychology. University of Vermont.Google Scholar
- John M. Hunt. 2015. Python in CS1-not. Journal of Computing Sciences in Colleges 31, 2 (2015), 172--179. Google ScholarDigital Library
- Jussi Kasurinen and Uolevi Nikula. 2007. Lower dropout rates and better grades through revised course infrastructure. In 10th IASTED International Conference on Computers and Advanced Technology in Education. 152--157. Google ScholarDigital Library
- Ken Kelley and Kristopher J. Preacher. 2012. On effect size. Psychological Methods 17, 2 (2012), 137.Google ScholarCross Ref
- Sebastian Kleinschmager, Romain Robbes, Andreas Stefik, Stefan Hanenberg, and Eric Tanter. 2012. Do static type systems improve the maintainability of software systems? An empirical study. In 20th IEEE International Conference on Program Comprehension. 153--162.Google ScholarCross Ref
- Theodora Koulouri, Stanislao Lauria, and Robert D. Macredie. 2015. Teaching introductory programming: A quantitative evaluation of different approaches. ACM Transactions on Computing Education 14, 4 (2015), 26. Google ScholarDigital Library
- Sarah K. Kummerfeld and Judy Kay. 2003. The neglected battle fields of syntax errors. In 5th Australasian Conference on Computing Education. 105--111. Google ScholarDigital Library
- Linda Mannila, Mia Peltomäki, and Tapio Salakoski. 2006. What about a simple language? Analyzing the difficulties in learning to program. Computer Science Education 16, 3 (2006), 211--227.Google ScholarCross Ref
- Guillaume Marceau, Kathi Fisler, and Shriram Krishnamurthi. 2011. Measuring the effectiveness of error messages designed for novice programmers. In 42nd ACM Technical Symposium on Computer Science Education. 499--504. Google ScholarDigital Library
- Clemens Mayer, Stefan Hanenberg, Romain Robbes, Éric Tanter, and Andreas Stefik. 2012. An empirical study of the influence of static type systems on the usability of undocumented software. ACM SIGPLAN Notices 47, 10 (2012), 683--702. Google ScholarDigital Library
- Bradley N. Miller and David L. Ranum. 2005. Teaching an introductory computer science sequence with Python. In 38th Midwest Instructional and Computing Symposium.Google Scholar
- Ellen Murphy, Tom Crick, and James H. Davenport. 2016. An analysis of introductory university programming courses in the UK. arXiv:1609.06622 (2016).Google Scholar
- Marie-Hélène Nienaltowski, Michela Pedroni, and Bertrand Meyer. 2008. Compiler error messages: What can help novices? ACM SIGCSE Bulletin 40, 1 (2008), 168--172. Google ScholarDigital Library
- Sebastian Okon and Stefan Hanenberg. 2016. Can we enforce a benefit for dynamically typed languages in comparison to statically typed ones? A controlled experiment. In 24th IEEE International Conference on Program Comprehension. 1--10.Google ScholarCross Ref
- Joseph D. Oldham. 2005. What happens after python in CS1? Journal of Computing Sciences in Colleges 20, 6 (2005), 7--13. Google ScholarDigital Library
- Holly Patterson-McNeill. 2006. Experience: From C++ to python in 3 easy steps. Journal of Computing Sciences in Colleges 22, 2 (2006), 92--96. Google ScholarDigital Library
- Arnold Pears and Lauri Malmi. 2009. Values and objectives in computing education research. ACM Transactions on Computing Education 9, 3 (2009), 15. Google ScholarDigital Library
- Arnold Pears, Stephen Seidman, Lauri Malmi, Linda Mannila, Elizabeth Adams, Jens Bennedsen, Marie Devlin, and James Paterson. 2007. A survey of literature on the teaching of introductory programming. ACM SIGCSE Bulletin 39, 4 (2007), 204--223. Google ScholarDigital Library
- Leo Porter, Cynthia Bailey Lee, and Beth Simon. 2013. Halving fail rates using peer instruction: A study of four computer science courses. In 44th ACM Technical Symposium on Computer Science Education. 177--182. Google ScholarDigital Library
- Vennila Ramalingam and Susan Wiedenbeck. 1997. An empirical study of novice program comprehension in the imperative and object-oriented styles. In 7th Workshop on Empirical Studies of Programmers. 124--139. Google ScholarDigital Library
- Stuart Reges. 2006. Back to basics in CS1 and CS2. ACM SIGCSE Bulletin 38, 1 (2006), 293--297. Google ScholarDigital Library
- Norsaremah Salleh, Emilia Mendes, and John Grundy. 2011. Empirical studies of pair programming for CS/SE teaching in higher education: A systematic literature review. IEEE Transactions on Software Engineering 37, 4 (2011), 509--525. Google ScholarDigital Library
- Christine Shannon. 2003. Another breadth-first approach to CS1 using python. ACM SIGCSE Bulletin 35, 1 (2003), 248--251. Google ScholarDigital Library
- Robert Michael Siegfried, Jason Siegfried, and Gina Alexandro. 2016. A longitudinal analysis of the reid list of first programming languages. Information Systems Education Journal 14, 6 (2016), 47.Google Scholar
- Gabriela Silva-Maceda, P. David Arjona-Villicaña, and F. Edgar Castillo-Barrera. 2016. More time or better tools? A large-scale retrospective comparison of pedagogical approaches to teach programming. IEEE Transactions on Education 59, 4 (2016), 274--281. Google ScholarDigital Library
- Andreas Stefik and Susanna Siebert. 2013. An empirical investigation into programming language syntax. ACM Transactions on Computing Education 13, 4 (2013), 19. Google ScholarDigital Library
- Murat P. Uysal. 2012. The effects of objects-first and objects-late methods on achievements of OOP learners. Journal of Software Engineering and Applications 5, 10 (2012), 816.Google ScholarCross Ref
- Christopher Watson and Frederick W. B. Li. 2014. Failure rates in introductory programming revisited. In Conference on Innovation 8 Technology in Computer Science Education. 39--44. Google ScholarDigital Library
- Aharon Yadin. 2011. Reducing the dropout rate in an introductory programming course. ACM Inroads 2, 4 (2011), 71--76. Google ScholarDigital Library
Index Terms
- A Controlled Experiment on Python vs C for an Introductory Programming Course: Students’ Outcomes
Recommendations
Python Versus C++: An Analysis of Student Struggle on Small Coding Exercises in Introductory Programming Courses
SIGCSE '18: Proceedings of the 49th ACM Technical Symposium on Computer Science EducationMany teachers of CS 1 (introductory programming) have switched to Python rather than C, C++, or Java. One reason is the belief that Python's interpreted nature plus simpler syntax and semantics ease a student's learning, but data supporting that belief ...
Introductory programming: a systematic literature review
ITiCSE 2018 Companion: Proceedings Companion of the 23rd Annual ACM Conference on Innovation and Technology in Computer Science EducationAs computing becomes a mainstream discipline embedded in the school curriculum and acts as an enabler for an increasing range of academic disciplines in higher education, the literature on introductory programming is growing. Although there have been ...
Performance of python CS1 students in mid-level non-python CS courses
SIGCSE '10: Proceedings of the 41st ACM technical symposium on Computer science educationIf you change the CS1 language to Python, what is the impact on the rest of the curriculum? In earlier work we examined the impact of changing CS1 from C++ to Python while leaving CS2 in C++. We found that Python-prepared CS1 students fared no ...
Comments