| (Also posted on the original thread:) I think some of the comments about simpler syntax (moving from Java to Python, for example) are in the right direction, but not far enough down the path. I think the fundamental problem is that of generalization. Someone may intuitively understand how to do a specific task themselves, but how do you take that idea and make it generic enough to be useful? Programming is communication about how to solve a problem. So let’s skip the whole computer language implementation detail. Don’t start with computers. Start with problem solving. Make the implementation language a list of steps to be performed. Split off people into pairs – have them write down descriptions of how to solve some problem, and then have their partner act it out. You get to talk through parse/compiler errors instead of having to translate something that only really makes sense when you’ve seen it a couple hundred times. Once people are comfortable with taking a problem and producing steps to solve it, picking up a syntax to say the things they’re already comfortable talking about seems like a much smaller step. Long term, we’ve got to start doing this earlier. Grade school. Hell, preschool. Why should analytic problem solving be something you’ve got to wait to learn? ----- Other thoughts while I'm here: We need to get over the math obsession. Yes, it's important. Yes, deep computer science has lots of math. But you don't teach someone to love music by first trying to get them to understand music theory. Let's cut out the parts that aren't essential. Let's take a lesson from unit testing culture - start with the smallest thing that will work. Big O isn't one of those things. Once people can come up with simple algorithms on their own (remember how great those first little wins felt?), it's a great opportunity to lead into complexity theory. But if you do it too early you'll just scare them off. Maybe I'm in the minority, but I think everyone has the ability to learn basic programming and the analytic skills that go with it. It doesn't have to be hard. But we've got to start with baby steps. |