Two More Think Like a Programmer Videos

Okay, I think I may be getting that hang of this, although making these videos still takes a lot longer than it probably should. Anyway, episode 3 is about the "blank screen," trying to get off the ground with a new problem.

Episode 4 is about recursion. Note that this is based on chapter 6 in the book, which you can read for free over at the book's page at No Starch Press.


Share this

Today in Oddball Amazon Pricing

If, like me, you do a good bit of purchasing, or at least browsing, at Amazon, you'll often find examples of pricing that make no sense. Many of these are violations of the volume-purchasing rule. For example, I've seen mp3 (downloaded) music priced this way, where buying the whole album in one go was more than buying the songs individually.

So today I'm looking at the magazines (don't ask me why, I haven't bought a magazine in years), and I see that Popular Mechanics can be purchased as a 6-month auto-renewal for $5, or for a 12-month (1 year) auto-renewal for $12. What am I missing here?


Share this

Try to Remember Something

I'm reading that Dwight Freeney won't be re-signed by the Indianapolis Colts, and the following jumps out at me:

Freeney won battles on the line of scrimmage with his blazing speed and spin move, something teammates and opponents continue to try and emulate.

There are three problems in that sentence. The first one should have been an easy catch, either by the author or the editor. For some reason, in speaking, people sometimes say try and when of course they mean try to. The author doesn't mean that teammates and opponents both try and emulate, he means the emulation is something they try. While no one should feel ashamed for saying try and, no one should write it, either.

Problem two is not as easy to see. The world of computing is to blame for this problem, I think, because in computing, an emulator is a program that simulates the operation of another operating system or set of hardware. For example, you can get a Commodore 64 emulator for your PC and run all the old great C64 games (like Wizard, Lode Runner, etc.). But emulate actually means to try to meet or surpass. In other words, if you emulate a person, you are trying to do as well, or better, than that person did in a particular field. It makes no sense to try to emulate someone, because the word emulate already includes the idea that you are making an effort that might fail.

The third problem is something. This word is effectively some thing written as one word. If opponents and teammates are emulating Freeney's spin moves and speed, those are two things, not some thing.

Reading a sentence like that reminds me of a sad truth: writing well is hard work!


Share this

Think Like a Programmer: The Movie

Ok, not quite. But I did decide to make a few videos explaining what the book is about and offer a few tips to get people started who are struggling with the problem-solving part of programming.

This first one is the intro:

And the second one demonstrates a concept fromthe first chapter, that solving puzzles is a lot like solving problems with programs:

If you have any suggestions for future videos or questions about the book, head over here for my contact info.


Share this

Learning How to Program: A Guide. Part IX

Matching Student Goals to Schools

(Be sure to check out part 1, part 2, part 3, part 4, part 5, part 6, part 7, and part 8 of this series if you haven't already).

In the last two articles, I talked about the purposes of higher education, and the strengths and weaknesses of individual schools. Now we are ready for the all-important question: how do you know which school is right for you? The short answer is this: you want to match your intended goals to the strengths of the institution.

Even before you start that process, though, there are practical considerations. You may be able or willing to travel only so far to go to school, for example. You may already have a job, perhaps even one in programming, with a schedule that must be worked around. And, of course, there's money. There's only so much you can spend on school; more to the point, regardless of how much money you could spend, if you have a practical bone in your body, you will want to spend as little as possible to achieve your goals.

There is also, of course, a large social aspect to attending college. Students want to go to schools where they already know people, or are filled with people they want to get to know, want to spend time on campuses they find attractive, to provide opportunities for the kinds of non-academic experiences they want to have. But while I acknowledge all of that, that's really beyond the scope of my discussion. In any case, I urge the prospective student not to place too much importance on non-academics when choosing a school, especially if you are a "traditional" student coming soon after graduating high school, because the fun aspects of going to college are there regardless of where you go.

Let's suppose, based on practical limitations -- proximity, money, etc. -- you have narrowed your choices to ten schools, a mixture of small, private schools, big universities, and online institutions.

Now you have to decide what your goals are. The truth is, very few students spend enough time considering this decision. Most students who were going to college because of programming would simply say that they wanted to become programmers (maybe they would use another term like software engineers), and that all of the schools they had on their list offer degrees in computer science or some other field that included programming, so all of them would meet their goals. Again, though, different schools offer different strengths and weaknesses as regards the three purposes of higher education. You don't want to attend a school that emphasizes a purpose you aren't that interested in, or is weak in the area where you would like to excel.

So why do you want to go to college, then? Is it for academics -- meaning, for our discussion here, that you want to learn the foundations of the science portion of computer science, that you want to help advance the field, do research? Or is it for training -- do you want to get out there and start earning your bread as a software developer, learn the tricks of the trade? And how important is gatekeeping? Do you expect your future employers to care where you received your degree? Is the degree itself more important than the work you'll do to get it?

You need to be honest with yourself here. What is it you actually want to get out of your college experience? Not what you think you should want to get out of it, or what someone else says you should get out of it, but what you want. Let me give you a couple of sample scenarios.

J. CODEHEAD is already a pretty good self-taught programmer who has been coding since childhood. J is just graduating high school, and wants to work at the cutting edge of technology development. While J knows there's a lot left to learn in terms of the practical aspects of programming (training), J is most interested in the academic aspect, the deeper understanding of how computing devices function. In particular, J is interested in computer vision systems, software that allows programs to process images, such as for use in autonomous robotics. Because J also hopes to work for one of the premier research laboratories, gatekeeping is also a factor.

H. PRACTICAL is just getting into programming. H works for the family business -- a small drug store chain -- and has been using software to help automate business practices. So far, this is mainly been macros in spreadsheets and off-the shelf database packages, but H has done enough programming to guess that it could be a lifelong pursuit, and sees a wealth of opportunities for applying programming skills in the areas of pharmaceuticals and small-business management. H wants to go to college for a higher order of training they can be provided by self-study. H is also looking forward to some of the general education courses, but isn't much interested in the academic aspects of computer science, a lot of which seems dry and esoteric from the course descriptions. H anticipates working for the family business for quite a while, and so is not particularly worried about the gatekeeping purpose.

Let me also provide an all-too-typical cautionary scenario:

K. QUICK has already learned a good bit about programming, but doesn't feel ready to take on real programming work. K would like to get to work as quickly as possible. Unfortunately, K is laboring under some misunderstandings. From reading the comments of full-fledged programmers like me who talk about getting started on programming before enrolling in a school, and who also point out the potential flaws of college education for programmers, K has decided that college education is valueless for programmers. K is therefore only interested in the gatekeeping purpose of higher education, intending to enroll in the school only to acquire a degree, and that only as a key to unlock a job. Neither the training nor the academic purposes are worth pursuing.

K's scenario is deeply troubling for a number of reasons. One, because it's based on an erroneous interpretation of the facts. Because of a variety of factors, it's tough to get full value out of a college education, but when there's proper alignment between the goals and abilities of the student, and the strengths and weaknesses of the school, there is tremendous value in it. Anyone who thinks it's just a kind of scam should stay out of it. Second, the attitude that K will bring to studies will demoralizing to other students who are there for training and/or academics. Third, and I've seen this more times than I can count, the student who enrolls in a computing program with no other desire but to get a degree is a student who is overconfident and quick to get in trouble. Worse, when the trouble arrives, students like K will be the first to cheat -- arguing, in effect, if it's all a game, if the only point is to get that piece of paper at the end, what difference does it make if it's the student's work?

The main point here, though, is that different people with different backgrounds will match up best with different schools. Figure out what you want to get from college first, and then start looking for colleges that match your needs. Next up: how do you know that a particular school is any good? Hint: it's not easy.


Share this


Subscribe to Front page feed