See EECS1012 original version and a description of the goals in this course.
See EECS1012-F18, Net-centric Introduction to Computing for a current version of EECS1012 (this year, the backend server/php was omitted to leave more time to develop student competence in computational thinking).
Notice the variety of languages and concepts a beginner must learn (even in the absence of a backend server).
For a comparison of languages at the basic CS1 level see yuselg/languages.
We seek to understand student engagement/retention (via “flashy" web-apps as in the current version of the course) versus the substance of a CS1 course in terms of student skills in computational thinking (i.e. at the CS1 level, using simple algorithmic thinking to convert problems into code using variables, assignments, conditionals, loops & loop-termination, arrays, methods, and some I/O).
We do not seem to have enough data. For example, what is the drop rate starting with EECS1012, through EECS1022 and the end of EECS2030 (which replaces the old EECS1030)?
Remarks from a senior faculty member who has taught EECS1012 (Web Centric Computing) multiple times with enrolments of about 700 students:
One might imagine having a Scientific Computing section (as in #1 and #2) of EECS1012 and a Multimedia section (as in #3) to cater to students with different interests.
[1] See chapters 1-7 in Introduction to Computation and Programming Using Python, by John Guttag at MIT. This is the 6001, Introduction to Computer Science and Programming course at MIT for students with no prior experience, which is also a popular MOOC offering. Informal specifications, testing and debugging are taught early on.
[2] Princeton recently changed from Java to Python in their CS1 course. Introduction to Programming in Python
[3] Georgia Tech uses Introduction to Computing and Programming in Python by Mark J. Guzdial and Barbara Ericson. This textbook uses multimedia applications to motivate introductory computer science majors or non-majors. The book’s hands-on approach shows how programs can be used to build multimedia computer science applications that include sound, graphics, music, pictures, and movies. The students learn a key set of computer science tools and topics, as well as programming skills; such as how to design and use algorithms, and practical software engineering methods. The book also includes optional coverage of HCI, as well as rudimentary data structures and databases using the user-friendly Python language for implementation.
See Criteria for knowing a programming language. What skills should our students have before going out to co-op, internships, and graduation?
Dan Grossman on the Undergrad Curriculum. Dan’s research interests lie in the area of programming languages, ranging from theory to design to implementation. He has served on thirty conference and workshop program committees and served as the Program Chair for PLDI 2018. He has served on the ACM SIGPLAN Executive Committee, the Steering Committee for the ACM / IEEE-CS 2013 Computer Science Curriculum, and the ACM Education Board. He currently serves on the CRA Board. See the above URL for his talk at an industrial gathering. Below is a small quote:
So I’m just going to show you what these courses look like. If you did do an undergraduate degree particularly in the US, you probably had 13, 14, 15 week terms and you had two terms a year. We have three 10 week terms. So that kind of throws off your mental mapping so I wanted to make sure to point that out. Hundred-level introductory programming, these things have never programmed before. Or maybe they have, but we assume they haven’t.
They show up in what we call CSE142, 1,000 of them at a time or so. And it turns out that if you’ve never programmed before, and you’re basically a college freshman, in about 10 weeks we can teach you variables, conditionals, loops, arrays, methods, a little bit of I/O, and a little bit of objects.
OK, you’ve got to start somewhere. It’s a good place to start. 3,000 students a year, 7 out of 8 will not end up with a bachelor’s degree in computer science. About half of them will go on to our next course. This is when you get into some juicier stuff, recursion, linked lists, binary search trees, real object oriented programming at least at a second course level, interface versus implementation, abstraction, things like that. And now about four out of five of them will not end up with a four year degree in computer science. So to me this is kind of the starting point for when students get into what I consider the focused study of computer science. ….
Software design implementation. This is an early, you might argue not early enough, introduction to actually designing your software, testing it, programming it in terms of abstractions, writing readable and usable and effective specifications, learning to debug, a little bit of design patterns so when you go to your summer internship, you know what people are talking about, and so on. You still got to understand the difference between linear and quadratic and exponential and logarithmic. You have to deeply understand how trees work, priority queues, hash tables, seven different ways to sort, graphs they’re a big deal, nodes, edges, arrows, they’re important.