159

There is more to a CS degree than programming and more to programming than Design Patterns. I'm actually an expert in such things and have designed and published a few as a committed member of the patterns community. If I were teaching you programming in some object-oriented language you would certainly learn about and use many such patterns, but you might ...


54

I'm afraid that there is no single silver bullet. The problem you've pointed to is very real, and isn't limited to students. All of us tend to stick to our own familiar toolsets because, well, it's easier. We know how to use them already. Enter the Motivating Example. This mythical thing makes a new topic so useful that the new topic is practically a ...


52

Buffy's answer perfectly addresses your question about design patterns. I would just like to add a bit of perspective about CS curricula in general. Computer Science (CS) is very young compared to other scientific disciplines. For example maths or biology are strongly structured disciplines which rely on a quite well defined corpus of must-know basics. Of ...


52

There is a big controversy about the purpose of "Computer Science" education specifically. This controversy has become hotter the the last few decades as CS has come to the fore as an important field. One camp feel that "Computer Science" is akin to "programming", and should be teaching real world skills. In this view, ...


44

Please don't... ...give the students who are ahead more of the same kind of work to do. Please. That's just boring. If they get it, they get it. ...make groups by mixing the students who are ahead with the students who are behind - often, the students who are ahead won't teach the behind students, but will just do the whole thing themselves. I say this from ...


34

I think that the purpose of such a course is not to teach you a language. After all, Scheme, with its abstract syntax, is pretty minimal as a language. The purpose of a course like that is to teach you to think abstractly. If you can do that now, several years later, you can probably thank the course for getting you started. Abstraction, after all, is the ...


33

It has been well known for decades by anyone coming out of University that, as you say, "the problems in the real world, both in academia and in the industry, can be more easily handled with a good choice of design pattern". And it has been well known for almost as long that this claim is wrong. When you have a problem, you come up with a way to solve it ...


31

I have seen my share of this 'program gets output' but the programmer has no clue how she/he got there. It's funny how that happens so many times. This is what I have done to at least handle the issue. Before assessments, I break down the evaluation to include the following. Simply getting the output gets them the bare passing grade. Those who can use ...


27

I see no reason to teach binary in an introductory programming class. It is not generally needed (see exceptions below) when programming in high-level languages, which is usually what is taught to freshmen students. If you have extra time in your course, rather than introducing binary, why not introduce them to other areas of CS that freshmen don't usually ...


26

I'm not sure the following will work for all students, but I remember this being a transformative "aha" moment in my own education: Show them your code. Preferably contrasted against a functioning but god-awful student submission from the previous term. Show them how its an order of magnitude simpler than their shotgun-formatted needlessly complex mess. ...


26

I just did a quick scan of the SIGCSE-MEMBERS mailing list for the past year and nothing stands out. The language wars continue to smolder with some balkanization (Java, Python, C#, JavaScript, ...) but not with the intensity of previous days. I doubt there will be special sessions on such things in the near future. There was a thread there on whether a ...


25

Binary is fundamental to programming, but this has a lot more to do with logic than just with data storage. Computers work on "yes greater than no" or "no greater than yes." There are only two choices. Boolean logic has only two truth values, "true" or "false." Boolean logic is fundamental to computers. In more advanced CS subjects such as information ...


24

There's one more reason I'd like to add to those here, less high-minded, but also a genuine consideration. One of the practical difficulties of teaching an introductory course is that the students come in at vastly different levels. Some are quite competent already, and some are brand new. It is rare for kids to come in with any experience outside of ...


24

One good overall educational strategy is to teach the same thing to students repeatedly, using a Spiral approach, in which each turn of the spiral teaches at a deeper level. Don't expect the students to completely get much of anything at the first mention of it, but reinforce the ideas and deepen the knowledge. You can do this for many things in one course, ...


24

You can find a fair amount of information about accredited programs in the US here, including links to schools that have one or the other programs. In general, Software Engineering is more directed at the processes involved in creating software, and Computer Science is more generally focused on the underlying theory. But, I'd suggest that both programs ...


23

I think there is very limited benefit in teaching assembly so early, and it's more likely to just scare away your students. When I started learning programming, I thought bare-metal OS development was really interesting, and I started to learn about it (mainly through OSDev). But frankly, assembly was far beyond my level at that point, and it was hard to ...


23

When I was teaching and mentoring first-time students, what got them really excited for the first time was seeing their name in lights. Write a program that allows a student to enter their name, then print it on the screen 10 times (or 10,000). It introduces the concept of variables and variable types It shows how computers interact with the outside word by ...


23

If I understand your problem correctly, it's that students can create programs that behave correctly without understanding why they behave correctly. I assume that they do this by some combination of brute force trying things and SO search. Using program correctness for grading has the desirable qualities of being objective and automation friendly. So how ...


20

I don't believe that your question is entirely valid; some languages require jumping. The first principle, therefore, is to follow the norms of your language. However, I suspect that you are asking about languages that discourage (but do not ban) jumping, such as Java, or C++. In these cases, I agree with Peter that the solution is to give them the ...


20

General overview on updating to Java: First, a general observation about updating to Java. Previous versions of Java used to be released about once two years or so. As of 2017, Java has switched to a bi-yearly release schedule: there will be a new version of Java released every March and September. Each release is also guaranteed to receive two updates (one ...


17

Every second you spend explaining a programming language is a second you are not teaching programming, software development, software engineering, software design, or computer science. You can teach the entirety of Scheme in a single lesson. You can probably teach the entirety of Scheme in 10 minutes. Python is significantly more complex than Scheme, so, ...


16

One controversy within my department is whether it is a good idea to take time to both teach about and enforce the very basics of coding style. (Think indentation, variable naming, vertical spacing, or how often to comment.) One camp believes that it's vital, and that students producing "poor" code need to be redirected, even if the code meets ...


15

I'm going to begin by quoting Ken Thompson's Turing Award Lecture "Reflections on Trusting Trust" (link). To what extent should one trust a statement that a program is free of Trojan horses? Perhaps it is more important to trust the people who wrote the software. In my mind the first and most foundational lesson to impart is this: software, computers,...


15

With Scheme, you start teaching programming concepts on day 1 - and also implementing them as working code on day 1. With a typical procedural language (C++, Java, etc) you first have to crawl through the swamp formed around 20+ years of accumulated obsolescent and deprecated syntax. The survivors from that experience might get to learn some concepts ...


15

There are a number of facets to this question. But the first thing you need to remember is that students (like anyone) will tend to apply solutions that they are most familiar with. In the student context that means, often enough, the things they learned earliest and have been practicing with the most. This effect is most pronounced on hard problems that may ...


15

Buffy has stated much of what I would have, so I won't repeat. But do read that answer carefully. The first point is, university is for proper formal education, which means heavy theory and less practicals. University is not for job training (there are lesser schools for that). That is what makes a university education better than a job training school, and ...


14

Rather than trying to motivate the students, or the reluctant ones, to progress into using your new tool (foreach after for), and finding a new motivating example every time, try to motivate them to be self-interested, lazy coders. Now that I'm under the tar and feathers, I'll explain. People like to find the easiest way, not the best way. Earlier postings ...


14

There is debate over how to respond to students' changing mental model of files and directories (as highlighted in a recent Verge article.) This doesn't solely affect computer science education, but it is a bit of computer science affecting education as a whole. Essentially, having grown up with cloud services and ubiquitous, reasonably effective search ...


13

I did a (rather unscientific) study of a few popular tutorials for Python to see what they did after "Hello, world": Learn Python the Hard Way introduces expressions (25 + 30, 5 + 7 > 3 + 1), and implicitly hints at types (although never mentions them by name in the chapter after "Hello, world"). Codecademy introduces variables (assignment), then types, ...


13

I took both the AI and (basic) ML undergrad courses at Princeton and currently teach an AI elective at the HS level for some very bright students. I've seen some good online material from Berkeley (CS188) and MIT (6.034), and of course Stanford's ML lecture series is amazing. Russell & Norvig's textbook is basically the bible for these sorts of courses. ...


Only top voted, non community-wiki answers of a minimum length are eligible