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

Y'all Listen to This

Just a few quick tips for anyone who is trying to write a "Southern" character, about that most Southern of words, y'all. The first tip is that's how you spell it. Remember that an apostrophe, outside of being used in a possessive, indicates missing, unpronounced letters. Y'all is short for you all; the "ou" is what's missing. Some people, and I have to admit some of these people are Southerners themselves, write ya'll, probably from the influence of words like we'll.

The other tip is that y'all is a second person plural only; it's not some sort of blanket Southern replacement for you. It can only be used to refer to two or more people. I think some observers get confused because they see person A talking to person B, no one else in the conversation, and hear y'all. But in those cases, more than one person is being referred to, even if not present. Examples:

"Why don't y'all come over and watch the game with us?"

In this case, person A is inviting person B's entire family over.

"I hear y'all need to find a decent quarterback."

In this case, person A is referring to person B's chosen football team.

"Do y'all need anyone right now?"

Person A is asking if Person B's firm is hiring.

And so on. What you have to avoid is something like this:

"Y'all look good in that shirt."

"Y'all shouldn't have said that."

"I'm going to punch y'all in the mouth."

In these cases, Person B knows that Person A is some sort of impostor, and will alert the authorities as soon as possible.


Share this

Learning How to Program: A Guide. Part VIII

The Strengths and Weaknesses of Individual Colleges

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

In the last article I discussed the three general purposes of higher education: academics, training, and gatekeeping. Here's what these purposes mean to computing specifically.

Academics, in computing, means advancing the study of computer science, the creation of algorithms that do new things, or old things better, the limits of computation, the development of artificial intelligence, more secure transmission and storage of data, and myriad other things. A college that is strong in academics prepares the student to help the field progress--onwards to graduate school, research, teaching, and so on.

Training, in computing, is mostly about training for software development. Programming is a big part of this, but also the broader software development process, using ideas from general project management, and understanding databases, networks, and other things with which software interacts.

There's some overlap in these two areas, but they are quite different overall. Think of academics as comprehensive study of computing in order to help create a better future, and training as the development of skills to make the best software we can right now. Of course, to understand anything about computer science you have to know how to program, and to be a good programmer you have to know a little bit about most areas in computing. But you can become very knowledgeable about computer science without having the practical programming knowledge to do much useful development, and you can be a very useful programmer in many areas without deep understanding of computing as a science.

Finally, there's gatekeeping. That is, a degree is a stated requirement for some jobs. Beyond that, the perceived quality of the degree (that is, what college awarded the degree) may affect future employer's decisions as regards hiring and promotion. This is part of gatekeeping as well.

In order to receive a lasting benefit from attending college, it's important that you match your goals to the purposes of the school and program. Your first thought here might be just to go to a school that's really strong in all three purposes. That would be a great idea, except there aren't really any schools that are strong in all purposes.

Why not? One issue is time. Once you subtract all the courses given to core academics and start dividing the number of courses that are left among the various subjects in computing, there's no way to cover everything. Just to cover the academic function in its totality is impossible--take a look again at the list of possible elective subjects in the ACM recommendations linked in part 7. The more training you include, the more academics you leave out, and vice-versa.

Let's look at some samples to show the kinds of trade-offs that are involved. I want to stress that these are not pseudonyms for actual schools--I'm not here to point anyone to, or away from, a specific college. These just show common situations.

BIG STATE U is a land-grant institution with a total enrollment of 25,000 students, offering BS and MS degrees in computer science and computer engineering. The graduate programs are strong, with most graduate students, and many undergraduate students, working alongside professors in grant-derived projects. The undergraduate program's primary goal, then, is preparing students for graduate study.

This school gets high marks for academics. However, it may be lacking in training with all the focus on preparation for the graduate program. Another problem is that, like many schools with extensive graduate programs, many of the early undergraduate courses aren't taught by professors at all, but by graduate students. This isn't to say that graduate students can't be good teachers, but more often they are inexperienced and ill-prepared to help the neediest students. I was a teaching assistant as a graduate student, and though I consider myself an excellent teacher now, I assure you, I was not an excellent teacher then. Another problem is that even in the courses taught by professors, the professors haven't necessarily been recruited and retained on the basis of their teaching ability, but rather on the basis of their research abilities, and, not to put too fine a point on it, their ability to lure in grant money. Again, from a pure academic point of view, this is not always a problem. If you are primarily interested in research, the benefit of doing high-quality hands-on research may outweigh any deficiencies in the classroom. But if you are more interested in the training purpose, you may be in trouble.

This university probably gets a good grade in gatekeeping, regardless of the destination, academics or industry. In particular, successful undergraduate students can easily progress to the graduate program.

Finally, the school has a "medium" cost of attendence. There are lower-cost alternatives, but it is far from the most expensive.

OAK-LINED COLLEGE is a highly-regarded smaller school with an emphasis on the liberal arts, which nonetheless has programs in computing. There are fewer degree choices in computing, but the school tries to compensate with a decent selection of electives and some interesting interdisciplinary degrees. The core educational requirements are large enough that fewer credits remain for the courses in the major. The college has few graduate programs, and none in computing. This means there are considerably fewer opportunities for undergraduate students to engage in real research; it also means that professors are more likely to be hired and retained on the basis of their teaching ability, and almost every course should be taught by an actual professor.

This school does well in academics, but not as well as Big State U. With fewer courses, and without the graduate program or ongoing serious research to interact with, the student will only progress so far through that list of ACM recommended subjects. On the plus side, having even the earliest courses taught by career academics means that what the student does learn, he or she will likely learn well.

The program will perform decently in training, but given the liberal-arts focus of the overall college, it's unlikely that many of the courses focus on nuts-and-bolts practicalities.

Gatekeeping is excellent, both in academics or industry.

This is the most expensive of the three sample schools.

ONLINE TECH is a distance education school whose existence is shown only by an elaborate web site. They offer a surprisingly wide variety of degrees in computing, including standbys like computer science, but also in narrow categories, like web design or database development. The graduate offerings are sparser, and it's implied that few of the undergraduate students migrate to the graduate program. Rather, the graduate program is aimed at the student who earned an undergraduate degree long ago, and now needs to go back for a master's degree while still working full time.

This school probably has high marks in training. It's not so much worried about preparing students for the future of computing, but rather, for getting them gainful employment as soon as possible. The instructors are more likely to be from the industry, rather than career academics. The marks are lower for academics, though. The students who pass through have less patience for material that doesn't directly apply to daily work, and most of the students aren't intending to add graduate degrees.

The school does okay in gatekeeping for industry, where many prospective employers will just look at the names of the courses, and not care too much about where they were taken. The school gets poor marks in gatekeeping for academics, though. Traditional brick-and-mortar schools, even those that offer some courses online, are reluctant to accept credits from Online Tech for transfer, and traditional graduate programs are less likely to be impressed.

This is the least expensive of the three sample schools.

Again, these are not three actual schools, just typical examples. And there are plenty of schools that don't fit these patterns at all. There are all types of schools at all types of price ranges, many with surprising strengths and weaknesses. My point here is to demonstrate the kinds of trade-offs a student of programming will face when choosing a school. More on that in the next article ...


Share this


Subscribe to Front page feed