hoodwink.d enhanced


Math (Eww?) #

by why in cult

aparrish: How can you find fault in a programming tutorial that teaches you how to make a blog before it teaches you how to do arithmetic?

AtDuskGreg: So many people drone on boringly about how important it is for kids to learn computers, only to come up with curricula that focus on using a spreadsheet or writing a resume.

Paul Robinson: The first book I ever read on programming was on BBC Basic and was illustrated with pictures of robots in factories pretending to be FOR loops.

I have a solid four years of work ahead of me on Hackety Hack, which is in my mind a very primitive tool, but hey the discussion is igniting. And among people who I haven’t encountered before, yeahhh!! One common theme is: where do you start teaching someone? (Brian D. pointed out Constructivism on the HH mailing list.)

I’m not really sure, actually. Who really knows if H-ety H goes about things in a sensible way. I was a very bad student myself and am often occupied with ideas which are widely acknowledged as ill-conceived. So, today, I’m surprised at the feelings of goodwill pouring in for Hackety Hack, but I suspect waves of criticism are forthcoming, which will be quite stimulating indeed.

I designed HH with two of my very good friends in mind, Oliver Mooradian and A. Woolsey. The second friend, A., was taking a university beginning Java class. The culminating exercise of his class was to read a comma-separated address book into memory. His program was nearly one-hundred lines long. And he wrote it knowing that he would never use it again. As a reminder: it is the year 2007.

I didn’t think I had many strong opinions about the way things should be. But this infuriated me!! This is not programming!! It should not be acceptable in 2007 for students to write a program which isn’t somehow useful to them. Not when we all use computers and are already employing micro-hacks (emoticons, bbcode, email addresses, etc.) everyday.

A. was also subject to a lot of mathematical programs: drawing circles, computing distances, a lot of spreadsheet-style activity. This sounds like academic drilling. Surely this can wait until after you’ve tinkered with RSS feeds and written a blog.

I can’t say, though. I personally only really use math for pagination and pointer arithmetic. Tell me: are math and programming intertwined much these days??

said on 30 Apr 2007 at 18:58

yup. In graphics at least.

Any mathematical scraps I can pick up can (quite surprisingly) always be employed almost immediately in my work. And I’m pretty sure it’s of infinite depth too.

Not that you need to change the curricula of Hackety. At the moment you’re just (sub-consciously?) engendering the next generation of yous. If you seeked to create a bunch of little mes you should instead be pushing the applicability of strange and useless seeming math.

said on 30 Apr 2007 at 19:19

What you’re doing is inspiring as hell. But how many people are going to use blog software they wrote themselves? There are lots of blog software out there already. Besides, to use any blog stuff at all, you need to have some kind of web hosting. Chat software isn’t likely to be used again either, because for the software to be valuable to you, everyone else has to be using it too. (I’m not sure of what chat system you have them implement, I haven’t actually played with Hackety Hack yet, sorry. If it’s just an IRC client or something, consider what I said withdrawn.) Everything that someone would want to use again, someone else has already written, and better! This is the curse of open source software.

I do think opening up the shallow end of programming in useful ways is a great idea, but what is that shallow end? I think even RSS is too new and sudden for someone who has never programmed before. What does someone who doesn’t know computers know about computers? The Web, maybe files? Maybe you can add some kind of sound/video component, a la Squeak? Change the frequency of MP3s and stuff like that?

Of course, since you’re already getting great results from young people, I guess that means you know what you’re doing better than I do!

Best wishes (and I hope you support Linux soon!),


said on 30 Apr 2007 at 19:26

child rcorsaro would much rather have a blog that he wrote so he could make it do things like say ‘Josh Pachicho is a bowl of soup’ for infinity, along with all the normal blogging activities.

said on 30 Apr 2007 at 19:26

It depends on the type of programming. That said, most programs (or pieces of programs) can be roughly categorized as performing a computation or manipulating data. While most bottom-up teaching approaches focus on the computation, a top-down approach should focus on the data.

My first computer science class was UC Berkeley’s CS61A . The class was taught using Scheme and for the first month we did very little with numbers. In fact, I think the only time arithmetic was covered was in relation to that in Scheme you write (+ 2 3) instead of 2 + 3. The Scheme dialect we used (STk, a PLT derivative) had an abstract data type of words and sentences based on LOGO . Instead of adding numbers, we constructed sentences and worked with text. Although the text-book (SICP, one of the best ever) introduces programming in the context of mathematics, the Professor felt starting with a more familiar concept would be helpful. He was probably right.

Another successful data-centric approach is in Smalltalk and Squeak. Alan Kay designed Smalltalk with children in mind, and some of the programs 12-year olds were able to create were pretty phenomenal.

In short, steal as much as you can from Smalltalk and LOGO (a Lisp) and teaching material written for them.

said on 30 Apr 2007 at 19:46

I haven’t quite looked at HH yet (I’ll have to wait until it hits the Mac) – but I’m looking forward to it.

I’m not sure that algebra is fundamentally intertwined for what most of the kids need to start

But logic and counting certainly is.

I think that the reason that the Uni. curriculum is so heavy math is that:

a) most CS programs came out of the math department b) most of the faculty cut their teeth on fortran c) accredidation requires a very heavy math concentration

I use my matrices a bit, but other than developing problem solving skills and occasionally dealing with floating point arithmetic – all the calculus and numerical methods has been pretty much lost for me.

Logic is key, key, key though – but I’m sure that’s in HH all around

said on 30 Apr 2007 at 19:49

Is math and programming intertwined? Depends on what you’re looking for!

As a mechanical engineering major, we have a class called Computational Methods that is dedicated to the study of using numerical methods (algebra, etc.) in order to solve higher math such as differentials, integration, and differential equations. Our instructor also has us implement what we learn into Maple procedures so that we can learn how these equations and methods are applied to programming.

Learning how numerical methods goes along with programming is very important since you can’t do direct integration and such directly in C or Ruby or most any other languages!

We use Maple (and now Matlab) for two reasons: 1.) They’re integrated environments that aren’t going to scare newbies away. 2.) They’ll pop back up later on when we enter industry.

Now, to answer your question, it really depends on the area you’re working in. For most Mech E’s, programming is this really scary thing that you just have to use to get through Computational Methods. There have been many days in class that I’ve stopped and said “Hey, that’s easy to make parallel!” or “Hey, I know how I could implement that!”

There’s a lot to do with programming and math. It’s just that most people don’t like the math or don’t like the programming.

said on 30 Apr 2007 at 19:53

It depends on the type of programming.

I think that’s exactly it. Math is essential for financial, graphing, image manipulation, 3D applications, etc., but not so important for a blog or about 90% of the stuff I personally do.

I find most of my bastard code children are single-use-ish and don’t use mathematics beyond simple calculations.

Another reason a custom-written blog or internet-facing application shouldn’t be used for beginning programming students would be security. It’s hard ‘nuff to catch the tricky stuff when you know how things are s’posed to work… let alone when you’re trying to come up with the basic functionality to begin with. Ie.- beginning programming students don’t really start with boundary checking and testing.

But yeah… where DO you start? There has to be some degree of bootstrapping.

said on 30 Apr 2007 at 19:54


I am strongly opposed to teaching math as being a key part of programming. I consider it a vile and vicious conspiracy on the part of the Math professors who ended up being the ones in charge of this new ‘Computer’ thing back whenever.

I feel EXTREMELY strongly that programming is a language skill, not a math skill. Just like writing or any other form of communication sometimes you need to know the lingo for a specific field (e.g. math in computer graphics), but at the core you need to be good at stringing together a coherent sentence. If you do it for a while, you’ll need to be good at fundamental logic At the core though it’s all in service to a linguistic skill.

Sure, it’s good to be exposed to business math, because a great deal of the work out there involves terminology which is extracted from there, but unless you go into CG, you still won’t need anything particularly fancy.

To wax non-nostalgic, I always considered it extremely annoying for intro-to-programming books (which used BASIC ) to start by teaching you ‘read’ and ‘data’, instead of ‘print’ and ‘input’. That’s not the way to teach folks the positive feedback loop of programming. (Write something, see things happen, get excited, make changes, see more things happen!)

I love HH, by the way. We’ve been having discussions around the office and at home about what age it’s good to try to introduce kids to it. (My wife still likes Logo for very young kids, but we agree that this is a good second step, or first step for older kids.)

— Morgan Schweers, CyberFOX!

said on 30 Apr 2007 at 19:58

I am awful at math. I am pretty good at language. Morgan++

said on 30 Apr 2007 at 20:01

Discrete math is absolutely critical for learning how to write correct algorithms and such. Any other part of math, not so useful except in certain cases.

said on 30 Apr 2007 at 20:09

I dunno. I mostly use plus or modulus. Logic class, though, was kind of useful, I guess. It’s more important to be aware of multiple approaches than be skilled in particular skills.

said on 30 Apr 2007 at 20:10

Most programming is taught as an introduction to Computer Science. Of course computer scientists think math is the basis of programming.

Most people approach programming for the end result, creating widely used, useful software. Professors aren’t into that, unless teaching is a side gig.

The only time I use math is when the domain of the problem dictates it, like data warehouse analytics tools. When I’m doing it, I’m no longer wearing my coder hat.

The most important skill to teach is how to find the solution you won’t be teaching.

said on 30 Apr 2007 at 20:26

I think math is unrelated to getting new programmers excited and diving in, and crucial to a quality CS program. (Though I do remember the first time I encountered sin/cos; a by-hand circle-drawing routine that illustrated these functions’ usefulness much more readily than the triangle magic I learned years later…)

If HH is truly aimed at 13+, I’d say they have plenty of math in school by that time to get fully thrilled with programming.

Later on (HS/uni), bring on the matrices for 3D and constraints, set theory for databases, graph and design theory, the rigor of proofs (which clicked much more easily for me, given prior programming experience), the diffeqs, imaginaries, convolution. They’re useful both in application domains and for helping to strengthen the logic and rigor of thought.

said on 30 Apr 2007 at 20:59

I think maybe math isn’t the problem. It’s the math-homework style: do a contrived problem, get the solution, go on to the next one. We can be more creative than this!

Maybe we include math, but maybe not. Maybe we’re making a game, maybe we’d like to know if we’ve run into something. We can use a little bit of math. But it’s not the whole point, you know?

said on 30 Apr 2007 at 21:32

Math is hard. Let’s go shopping!

said on 30 Apr 2007 at 21:54

I’m chomping at the bit to see this on my Mac.

said on 30 Apr 2007 at 22:58

I’m at the point of my life where I should be going to college. I decided not to take a Computer Science class because I don’t want to deal with going into debt, or maybe hating life because of all the “math” I would have to go through. When really, all I want to do is create web-applications, which rarely require math. If anything, I’d love to take courses that would teach logic, but I don’t really know what to do.

Right now I’m just working and studying Ruby on my own, and making a pretty good living at 17. So, if anyone has some advice – let me know.

said on 30 Apr 2007 at 22:58

I’m at the point of my life where I should be going to college. I decided not to take a Computer Science class because I don’t want to deal with going into debt, or maybe hating life because of all the “math” I would have to go through. When really, all I want to do is create web-applications, which rarely require math. If anything, I’d love to take courses that would teach logic, but I don’t really know what to do.

Right now I’m just working and studying Ruby on my own, and making a pretty good living at 17. So, if anyone has some advice – let me know.

said on 30 Apr 2007 at 23:10

I agree with, um ”<=>.” Some math might be good in there, but not unless there’s a reason. Trajectories maybe? physics engine? that kind of thing. Even just bouncing balls around a pool table. I can’t remember what I knew and didn’t know at 13, but I’d definitely had algebra in school by then.

said on 30 Apr 2007 at 23:39

Math from where I sit there’s a whooole lot of Math in programming, but not so much the arithmetical kind.

It’s kinda weird. I mean, is a fixed point functor really math in the sense that people think about math?

The single best course I took in my entire college career was Distribute Computing over the Internet. The first half of that class involved working with Lambda calculus modified for Actor computations, Pi Calculus and Join Calculus. In that time we did all our work on paper. It was some of the most illuminating learning I’ve ever done and it’s made me a better programmer and a better student of programming.

Math is inseparable from Programming, but I don’t think we, programmers anyway, learn math correctly, or the correct math, for that matter.

said on 30 Apr 2007 at 23:46

That said, I agree very much with what sandofsky is saying. Computer Science professors don’t care about the craft of programming. They’re only concerned with, well, the Science (and correspondingly the Math).

I know that my Computer Science department didn’t teach me anything about doing the craft of programming or taking pride in the craft or enjoying the craft. It was only after I started learning about the craft aspects of it that I was able to come back on the science and math and really appreciate that part.

said on 01 May 2007 at 00:16

I see what alot of you are saying about functions being a part of math. And variables are a sort of algebra. It’s just not as conceptual.

I mean it’s conceptual while you’re writing code, but things materialize quickly into objects that actually have personality. A number has personality, but it’s single-faceted compared to other more diverse objects. So I guess objects which hold great weight in the student’s mind makes for an equation which is more about the pratical ideas in motion rather than the math itself.

Josh Pachicho is a bowl of soup!

said on 01 May 2007 at 01:05

Complex math is not useful for most of the programming tasks I have encountered. A lot of programming boils down to UI work, in which a grasp of simple arithmetic is sufficient. Algorithms are handy. To people like me, uninterested in math, programming-as-math is only interesting once you know programming.

said on 01 May 2007 at 01:53

Knowing maths is useful if you have maths problems to solve. Knowing HTML + CSS is useful if you have HTML +CSS problems to solve. etc.

Knowing how to code is useful if you wish to communicate with the computer about real world problems relating to maths or HTML .

That is, programming is a language issue relating to some real-world context.


said on 01 May 2007 at 02:42

Um. Mostly ditto the above, I guess. Since at the moment I do a lot of simulation of financial products, the maths (plural due to British assertion of linguistic independence) becomes fairly important. But other times it doesn’t matter much, when I’m data-shuffle-and-reporting or some other monumentally life-changing task.

said on 01 May 2007 at 03:04

Mathematics is everywhere and so it is in programming. And it’s strong in programming (more than in waking around at last). That is because you have to know logic to program and – depending on the problem – even more (just try to implement a search without knowing complexity theory and so on). Even more are programmers confronted with something (sorting, databases, ...) that strongly depends on mathematics. Programmers who know mathematics can understand these concepts faster and can use them to their full potential.

That doesn’t mean you cannot program without knowing mathematics or that it is no fun (if you call programming fun that is), it just becomes simpler if you do.

said on 01 May 2007 at 03:11

Basic math skills (including basic algebra) are essential (and we take them for granted), and the child has to have a pretty good grasp of that, when diving into programming, so that it doesn’t become a road-block to progress. But in a program like HH, I think that teaching logic is more important. (I’m thinking specifically of a child, not a teenager 13+. Actually, _why, I think HH would be better positioned at a younger age group, say 9 or 10+ instead of 13. By 13 they’re already picking it up on their own if they have an aptitude, or there’s other tools they can use that they can grasp. The hard part is starting them off younger—which yields better results in the long run.

I also think that a tool like HH should focus not on providing the child with the building blocks to create whatever it they want to create, rather than creating them for them. In other words, I’m not sure that supplying them with build-in methods so that they can build a blog in 6 lines in the best approach in the long run. They have to understand what they’re doing and how they can apply that knowledge to building something else. Start very simple-object, properties, methods-once you understand how to create and manipulate them, then the child can make whatever they want from scratch. The trick is providing an environment (like HH) that makes it easy for them to understand and “build” using those blocks, without creating a dependency on the tool. I admire you for tackling this, _why. An important task.

said on 01 May 2007 at 05:51

To answer the q at end of the main post – how intertwined are progging and maths? Depends what you need, i think. What level of abstraction are you working at in your program? The vast majority of programmers can get by there entire career without any need to know any maths. Where the need does come in it tends to be at a comp sci level (discrete maths), or specialised domains (where only some particular maths discipline is required). So, in general for 99% they aren’t intertwined.

Would it be good to be able to use HH to help those who want to use or teach math in/using progging? – sure! But so would lot’s of other stuff.

I think that why’s opting web oriented environment makes sense for a couple of reasons. First, one of the real drivers seems to be the desire to get a sharing based community going, this needs some of the web functionality anyway if you want it integrated with the HH environment, secondly the potential audience of people willing to pick up and try HH to utilise in new ways web resources they are already familiar with is, to me, a potentially larger group than those who may be motived by maths or even game dev (it may also encapsulate the majority of groups too, where the converse may not be the case).

What would be cool is if the HH community could develop the modules they want to see included, and HH allow users to plug in the modules they want.If all modules had to have tutorial resources as well as programmatic ones, then we could wind up in a situation where we could have distribution of HH with a base set of modules built in, and mechanism for users to plug in new ones they’d like to use – all complete with tutorial resources so that every HH module is a tool for learning as well as programming.

This would let people who want to learn maths in a programming context have the HH they want, and the game dev folk, and the web folk… but all still one big HH community.

said on 01 May 2007 at 06:43

Try to write a ray tracer or encryption algorithm with only knowing highschool math. Alot of trial and error :P

I think that to make regular software applications, math is hardly needed at all. However, to make software foundations (algorithms that keep making mp3’s smaller, networks faster and computation more efficient) one definitely needs a good grasp of math.

said on 01 May 2007 at 06:50

Steve Yegge wrote something interesting about learning math from the perspective of a computer scientist back in March, and I think what he’s saying is pretty compatible with what why is saying: you don’t need to know much math to do most of what you probably want to do, and the math that you learned in school is probably not the math you need anyway.

said on 01 May 2007 at 08:15

zerohalo: I’ll be working on a simpler, slower-paced, much more cartoonish tool called Hippity Hop for ages 6 and up. That’ll be later in the year.

TheLateMrB: I’m with you!! There’s a format for adding tutorials for the Try Ruby screen, the built-in tutor, and the help pages.

said on 01 May 2007 at 09:10

I’m sorry, but if you’re just messing around with RSS and Javascript, you’re not doing computer science.

Google and Amazon aren’t made up of a bunch of script kiddies. There are real computer scientists there who are dealing with the issues brought up in the intersecting worlds of graph theory, linear algebra, and information theory.

The data mining, clustering, search indexing, and other related technologies take a rather involved understanding of not only graduate level mathematics, but also an understanding of computer algorithms that are designed to work quickly when faced with document collections numbering in the billions.

You should not be going to university to learn stuff that any teenage hobbyist can pick up in a couple of weekends, namely, how to set up a blog.

Parsing a text file is a task that is done frequently when programming computers, so I don’t think it was a waste of time learn how to import a CSV file. The number of businesses that require a shift from a spreadsheet based method of managing their accounting to a custom application is not declining.

One of the fastest growing segments of the industry is GIS . Having a good understanding of geometry and its applications would definitely come in handy.

You need to realize that the world is more than just a bunch of people expressing their opinions. There are still meaningful things to be done…

said on 01 May 2007 at 09:51

Programming is all about math in the sense that math is all about symbolic reasoning. This is most obvious when we look at the skills that separate the barely capable from the competent: refactoring, for example, demands the ability to reason algebraically about programs.

That said, I, too, hate busy-work in all its forms. The most important thing is to let people do useful things from the start—but I do think we have an obligation to instill some basic theory as we go. Theory is important because words mean things; it gives us the basis we need to reason about the programs we write.

said on 01 May 2007 at 10:14

I believe knowing math is perhaps not as important as logic fundamentals in todays programming. Math concepts were important at one time when you had to work at the machine language level and worked directly in memory registers and buffers, et al. Today all of that tedious work is taken care of automatically by the operating systems and a multitude of programming languages and other levels of interface. The programmer is free to work on problem solution and is not required to know the inner workings of the computer. The one thing we all can agree on is that their are many people who love math and just as many who don’t. If you are a programmer programming a computer you are without doubt programming a solution to a problem. If that problem requires mathematics to help solve it then the programmer had best know mathematics and the tools you choose to build your solution on the computer must be capable of the same.

said on 01 May 2007 at 10:36

B-Squared: the thing is, those abstractions are “leaky” (to use Spolsky’s term). If you don’t have a basic idea of what’s going on at the lower levels, you’re going to get yourself in trouble eventually.

I spend a lot of time these days cleaning up after people who didn’t realize that (including my younger, more naïve, self).

That doesn’t mean you need to foist it on people right away, but it’s irresponsible to suggest that people don’t need to know it.

said on 01 May 2007 at 12:55


said on 01 May 2007 at 13:00

Programming and math both involve a lot of problem solving. I think many skills that are useful in one are useful in the other, and if someone is terrible at math (and hence, solving logical problems) then they may not be the best candidate for a computer programmer.

I haven’t tried HH yet but I’ve taken a look at it and I think the work you’re doing is great. I started programming in VB (shudder) I would’ve loved to have HH and Ruby to learn with instead.

said on 01 May 2007 at 13:01

The point here is to introduce children or early teens to programming... Using Hackety Hack should be something they’ll do for their own pleasure, and mathematics aren’t fun for a lot of people.

At 10, I only had GWBasic on my 8088, and I used mostly draw, circle, line, sound and play, with some loops and conditionals spread for good measure..

The most elaborate thing I wrote by that age was an animated sprite (two frames) controlled by the keyboard… Which was utterly slow since I didn’t know how to use the on key statement… everything was done using inkey$ and if.. gosub.

Whatever :)

said on 01 May 2007 at 13:02

A number has personality, but it’s single-faceted compared to other more diverse objects. So I guess objects which hold great weight in the student’s mind makes for an equation which is more about the pratical ideas in motion rather than the math itself.

The key here is “objects which hold great weight in the student’s mind”. So much of CS, Math, and education is about stuffing, jamming, and cramming unrelated foreign tiddly-winks into the student’s mind, when most of what is needed is a good analogy.

Also, I might add, one of the reasons I love numbers so much is that one single number has practically infinite meanings, attributes, etc. I see them as incredibly dense objects… is it a square? Is it prime? Is it the year I was born? I think this is why I feel such a primal connection to programming and information in general, to see something so simple but know there’s an infinity within it.


said on 01 May 2007 at 13:27

Math not being fun has an awful lot to do with the way it is usually taught. Stuffing a lot of numbers and busywork in people’s faces is no good.

said on 01 May 2007 at 13:29

(but there are other ways to approach it)

said on 01 May 2007 at 13:43

Oddly, I remember a discussion a few years ago about how programming, music, and mathematics were all interrelated. Seems all three involve some degree of symbolic reasoning. Getting into a groove while writing code or solving a long, complicated math problem seems to closely correspond to a long, innovative guitar solo.

Pat Metheny is not a bowl of soup.

said on 01 May 2007 at 14:06

William, Yes all of those things you mention are important and yes you shouldn’t be going to UNI to learn things that a teenage hobbyist could pickup themselves.

However you fail to remember that this is aimed at people aged 13+. We want to inspire a new generation to want to learn to be a programmer / computer scientest. Without doing that the field will shrink over time.

said on 01 May 2007 at 14:12

Hopefully it will also help kids to develop their rational thinking skills, since schools and even universities aren’t really doing that so much anymore.

(Which is a big problem for any technical field.)

said on 01 May 2007 at 14:49

I agree with you, MenTaLguY – developing rational thinking is the key. Problem solving is a big part of programming; you can always look up the syntax and exact mathematical formulas, but the crucial part is figuring out “how do I make X when what I have to work with are A, B and C”. There’s a computer game for kids called “The Incredible Machine” or something like that, which helps develop those skills by requiring the child to make a “machine” that performs a certain function using the parts given.

said on 01 May 2007 at 15:02

I loved “The Incredible Machine” when I was growing up.

said on 01 May 2007 at 15:15

_why: As an art/humanities-inclined person who learned programming very recently, what you said above about the “personality” of objects really strikes home with me. The most important skill I’ve found/learned in programming is ‘modeling’: figuring out how to combine objects into a useful representation of the world (or at least the part of it related to the software I’m trying to write). That’s why having projects in domains I was interested in (I got into programming because I wanted to distribute my music on the internet) was an absolute necessity when I was getting started—if I didn’t already know something about the domain and care about it, I never would have gotten past the starting line. I think this is why your idea of helping kids do things they already really want to do is so promising.

PS. Thanks for linking to my MeFi comment. Now you should respond to my email begging you to let me help out on HH in any way I can! Put me to work!

said on 01 May 2007 at 16:26

I wrote my own blog from scratch. And the one before that. And I’ll do the next one from scratch too! And each one in a different language. This is how I’ve been since I first started learning programming—immediately putting it to use for myself.

There’s lots of blog software out there, and everyone uses them because it’s so time consuming to write your own. If it weren’t, and people could just write code that made their blog different from everyone else’s, instead of writing the code that makes their blog the same, I think lots more people would write lots more blogs.

said on 02 May 2007 at 04:32

why: I haven’t come across any detail of the format and packaging requirements needed to produce complete tutorial-style modules. Am i just not looking in the right place, or are these details to be forthcoming? btw – I think you and your hackety associates have done a great thing getting this out, and it looks like it’s progressing really well. I hope it gets the snowballing success it deserves.

said on 02 May 2007 at 07:57

Gave HH to my 12-year-old boy yesterday. He spent the next two hours with it. Many excited ‘cools’ and ‘wows’ were heard.

Time for bed

Let me finish this lesson

Well what can you say to that?

We’ll see if he’s hooked. But for the first time he’s seen with his own eyes that computers don’t just shove ‘fun’ at you (hello, Neopets) they can be used to create.

said on 02 May 2007 at 08:51

bdunbar: Oh, that’s so encouraging! I’m only sorry that HH isn’t what it will be 4 months from now.

So, tell us: how far did he get? Anything that he was truly excited about??

said on 02 May 2007 at 09:02

I’m a CS student right now, and I have to say that I hate the amount of useless math that I’m forced to learn. Why hit it on the head again!

said on 02 May 2007 at 10:44

Why: Thank you for writing it. I could probably have poked along and shown him as I’m learning it myself but .. well dang you did all the hard work for me. And much better than I could have done.

I asked – he answered;

Lesson 4b and “Being able to make it ‘ask’ stuff.

What I really liked was something he said last night

You know, I’ll probably never use this stuff followed by 90 more minutes of poking and keyboarding.

Oh yes you will, kid – knowledge is never useless. You just don’t know it yet.

said on 02 May 2007 at 12:58

Thanks for the link/quote. I almost feel authoritative all of a sudden. :-)

I get where you’re coming from on where you begin, however from a pedagogical stand-point, Dijkstra would have kicked your butt. He suggested that we currently “plan today for tomorrow in the vocabulary of yesterday” and that was harmful.

He also suggested the way to teach programming was to teach predicate calculus as a “radical notion” and then let people’s brains adjust. Yeah, I thought he was mad too.

I’m not sure which angle is right, but I think you’d like his paper on the subject

Right now, don’t worry about it: go with your gut, and if it fails you can try again later.

said on 02 May 2007 at 13:04

Math is important… for later. Seems to me, right now there’s learning to be done! Encouraging excitement and participation is the key.

It reminds me of logo, long ago in the dinosaur days – the tutorial I was exposed to had you giving that little turtle directions, dragging a pen behind it’s butt – and it was pretty cool. There was math there, hidden deep below the surface, but you didn’t see much of it – just some cool spirograph fun.

I’m not sure how exciting blogs are to a 12 year old – it’s been a long time – but being able to call someone “garbage head” online has got to have an appeal. Me, I’d like to see graphics – something blobbish and objectified, so you didn’t have to do math so much as say giantball.bounce. If you can wrap a blog up in 4 lines, we should be able to bounce things around the screen without too much trouble…

Oh – and OS X version (or linux), I beg of thee. I managed to purge my house of Windows (had to tent the place) 6 months ago, and you’ve just given me the first reason to regret it. A bit. Slightly.

said on 02 May 2007 at 13:08

Oh – and OS X version (or linux), I beg of thee

Parallels is your friend. You still need a licensed copy of Windows but it can run small and harmless as a virtual machine.

said on 02 May 2007 at 18:26

90% of the actual business of programming is linguistic, not mathematical. The same is true of the actual business of BUSINESS . The most successful day-to-day programmers (like the most successful salespeople, or finance guys, or CPAs, or marketers) are the ones with the best grasp of language; both in terms of communicating with the team, and in thinking symbolically. Studying math helps with the latter but does bugger-all for the former. Ultimately, programming isn’t about communicating with the computer, it’s about communicating with other programmers.

The attitude in CS departments seems to be, let’s teach them symbolic math as if everyone will do all their work solo. They’ll figure out the communication stuff in the “real world.”

Right now I’m working in China with an outsource-grade development team and the one skill my best people all possess is a faculty for language. For example, I’ve been fighting to explain orthogonality for months (Chinese developers tend to roll all the model/controller logic into the view); I don’t think it was any accident that the guy who finally got it was the guy who speaks four languages. (And FWIW this isn’t an offshore outfit; I’m developing web-apps for a Chinese company. After my year in China I’m not outsourcing any non-Chinese development projects!)

said on 03 May 2007 at 13:18

Wow. This is a big list of stunning thoughts on what programming means to a lot of individuals. I doubt I can add much but what the hell, it’s only bits!

Thinking back on how I learned to code, there weer a few early things:

  • I think we did Logo, which to me was about drawing and mazes. We played games, that made me want to make games soo….
  • I made games in BASIC on my family’s win 3.1 box, but I couldn’t share them sooo….
  • I made games on TI-82s. Then we wanted multiplayer games, so I fondly remember a road trip to my friend’s grandparents where we programmed different versions of the same multiplayer game for fun. It was cool to look at my friend’s code after and learn how he came to make the game a bit different.

From there I fell off a bit, made some other TI stuff, played a little with perl, and then nothing struck me till I learned PHP , which meant I could DO things, and share them quickly. I guess for me, sharing my code or having others toy with what I build is very important.

So I guess if I was hacking on Hackity Hack, that’s what would be neat to me, the ability to save my code and beam it over to my friend. Making games and things I can play with. A blog is neat, but what middle school or high school kid who’s already a bit nerdy really wants a blog? Where the heck do they host it? No, games it is.

I also agree with PJ that CS doesn’t teach communication and real world team-work, but I don’t think that’s really in the scope of Hackity Hack, from the little I’ve seen. Being a self-taught developer steeped in team projects, working with CS majors who could whoop my ass in math often requires a lot of hand holding.

And I agree with Morgan that, at least for me, programming is a language skill. It’s a communication medium. It is a tool yes, but it is a tool like my french horn is a tool, or my mandolin, or my writing. I know for some of my friends it’s not the same, people into Mathmatica and systems at Google. For them the magic seems more about the complex problems they can translate and attack in simple code. Maybe.

Joy! Hackity Hack considered neat-o, but man, a software synth where you can make music and sounds like you can draw in logo would be awfully killer too :-).

Good hacking!

said on 03 May 2007 at 16:12

Let me start off: Math? Eww!

Let me revise. Math teaching? Eww!

I had the fortune to not learn math the traditional way. I didn’t learn abstract problems. I’ve never done much formal algebra. I’m working on calculus now, because it’s interesting for what I’m learning.

But I didn’t learn formal algebra, the so-called prerequisite.

I learned trigonometry first.

At this point, I’d been programming computers for a fair number of years (I started at age 6, on my TI 99 -4a. And I started with text manipulation, because we had the speech synthesizer addition.) I had an idea what variables were. I had a good idea how to twist the symbols around programatically. I could do what one might consider algebra, on the computer. But I wasn’t thinking about balanced equations and transformations—that came later when I wrote a wiki, and I thought about it textually. I was trying to get things to add up right to make the game world the right size. I was trying to make pretty colors (16 Bit!). I learned binary arithmetic.

But then I had to learn trigonometry.

And there was a reason for this.

We were building a house. And we’re not talking 16-inch-center studs, slap two up around every doorway cookie-cutter house, we were Building A House. Out of big timbers and straw bales.

And it had to not fall down. There’s no book of The Way You Must Do This that’s pre-approved, no thought required. There’s a bunch of engineering books. Some of them quite accessible. We had to make a plan and get an engineer to approve it.

So we did. My dad and I learned trigonometry together. We paced around timber and computer models. We learned about force vectors. We learned how the triangular structure of the house would distribute the loads.

I wrote a few programs then to figure some parts out. If I’d had Ruby at the time, I’d have used Ruby. But I had Quattro. And AutoCAD. And we made it work.

I’d been programming for years before I did much more than counting, mathematically, with it. I learned math, not by being taught abstractions, but by having a real physical use for it.

Oh, and the house is still standing. And it doesn’t shake in the wind like the one we lived in before did.

Really, math is shapes and transformations and patterns and relationships. The way it’s taught is manipulations on abstract symbols and so wholly unapplied that it’s painful to watch.

Programming, the way I learned, however, was fun. I wrote a wiki. I wrote text tools. I chopped words up in all sorts of ways. I wrote madlib generators. Lists of words, lists of sentences, lists of paragraphs. Yes, you can count elements in a list. Yes, you can think of the elements as symbols in a set alphabet.

But when it comes down to it, programming words is fun. And math is better when applied, either manipulating graphics or lumber. Teaching it in the abstract is boring. Really, really boring.

said on 03 May 2007 at 17:42

Oh – and OS X version (or linux), I beg of thee

Parallels is your friend.

Heh – Parallels may be my friend, but it doesn’t like my Dual-G5 much, no sir! Besides – I got rid of windows for a reason…

said on 04 May 2007 at 02:25

I agree with bortels: Creating games is what kids can really get off on. My daughter might be interested in programming her own blog (she did design her own website from scratch), but what really interests her are little games, or programs that perform functions that are useful to her. (Ie, she wrote, with help from dad, a Ruby program that tests her on her times tables, with high scores, etc. because she has a hard time with that (9 yrs old). Or a silly little program that tells you your Chinese zodiac sign when you input the year you were born. Stuff like that.)

said on 07 May 2007 at 03:01

Chat software isn’t likely to be used again either, because for the software to be valuable to you, everyone else has to be using it too. (I’m not sure of what chat system you have them implement, I haven’t actually played with Hackety Hack yet, sorry. If it’s just an IRC client or something, consider what I said withdrawn.)

XMPP too. The days of IM systems needing to be incompatible are long gone. Anyone writing a new client that doesn’t support XMPP needs a bullet in the head before they release it.

said on 10 May 2007 at 05:40

I think most people here are missing the point – the kind of math you need to know in order to be a competent programmer is not necessarily the kind of math behind the calculations your code may or may not be doing. Whether you’re writing 3D games or business intelligence applications that call 2312 different web services, knowledge of a number of concepts in discrete mathematics is extremely important. You may have learned it in the context of a formalized framework or picked it up as random tidbits, but, as a programmer, you know and use a fair amount of discrete maths in your daily work.

Math is much more than trig and calculus!

said on 11 May 2007 at 05:57

I got a C for math at high school level, and didn’t really like anything I was taught, more because of the way it was taught than anything else I guess.

Now that I’m back at university after 7 years of working as a developer, studying mathematics along with my CS subjects, I’m really enjoying it, and my grades are much much better :)

I agree with the poster who recommended applied math though, it’s far more interesting if you can see how it is being used to solve real problems.

Make things as simple as possible, but no simpler – I really dislike the trend to infantilize everything these days. Some things aren’t easy, that doesn’t mean understanding them isn’t worth doing.

Have a look at some of the undergraduate coursework at MIT (OpenCourseWare). If you’re having trouble doing that, that’s ok, but these are going to be the grads that get the really interesting jobs, working on stuff that actually advances the state of the art, instead of building the social networking phenomenon in the hopes of selling to a bigger company :)

said on 11 May 2007 at 06:10

I’d also say people skills are easier to pick up than critical thinking skills.

And I disagree with the poster who classified CS graduates as generally socially inept and useless at anything but churning out code (bad code at that).

Maybe when you were at school, grandpa!

We’re as hard drinking and partying as any other faculty ;)

said on 11 May 2007 at 09:12

While I agree that math is important to programming, so is having a way to get young people interested in programming for fun.

I started programming from a book of games written in basic for an apple IIe (dating myself I know).  I was 12 years old at the time.  I typed in the games as they were in the book and then had to teach myself how to debug my typos just to get them running.  It was self motivating.  Once I figured out I could change things I began playing with the code.  Before long I was pretty good at basic.  Over the years I have continued and now program in over 15 different languages most of which were self taught.  I have no college degree, but make a 6 figure income as a senior level software engineer for a fotune 100 company.  
I only tell you this to keep you motivated with what you are doing.  You never know what door you are opening for someone.  If it is enticing even one young mind to learn, it is a worth while cause.
11 Jul 2010 at 20:35

* do fancy stuff in your comment.