Archive for the ‘Uncategorized’ Category
Check out her YouTube channel, or check out her site. She is awesome.
I’m co-blogging at Mindless Diversions. I’ll get around to blogging here again someday.
I don’t program for a living. However, I know a bunch of programmers, as part of my job I talk shop with Computer Science people, and programming languages interest me from the standpoint of logical systems.
I was chewing the fat with one of those aforementioned Computer Science folk this morning, and I offered a classification system for programmers that he found entertaining. Since I needed something to write about to get me back into the blogging gig, here it is for your consumption, with some embellishment.
Class One: The Directionless Hack
How to recognize them:
These people don’t know much about anything. They’re the type who learned how to program by reading “Java for Dummies”, or by hammering away at their computer to get something specific done (like, building the web site for their band or their buddy’s motorcycle shop). Edited to add: as Corey points out in the comments, you can have a degree in Computer Science, from a reputable university, and still be a directionless hack. How you learned what you know is less important than what you haven’t learned, and “just getting this next thing done” is a very common approach to formal education, too.
In and of itself, self-taught programmers aren’t necessarily a bad lot (many of the below classes started here), but these yahoos haven’t got an enormous amount of intellectual curiosity about how programming works and their “self-taught” skills stop precisely at the place where their current problem ends. They generally keep solving the same problems over and over, as they fail to realize that the problem that they’re trying to solve is something that someone else already solved a couple of decades ago.
Common statement: “Well, it works for me.”
Class Two: The Directed Hack
How to recognize them:
These are the people who know they need to get something done, but figured out somewhere along the line that it might be a good idea to pick up at least a couple of books about programming concepts instead of just “howto” manuals. If they graduated with a CS major, they paid enough attention in their theory classes to grasp what “layer of abstraction” means, although they may not be able to explain it. Like the directionless hack, they usually need full access to most things to get anything done, however unlike the directionless hack they’ll have learned enough about at least some things to know they don’t want to mess with it any more. If they have more than 5 years of experience, they’ll have some comments in their code (precisely at the location where most of the bugs are), because they occasionally want to go on vacation. They program in whatever language is currently en vogue wherever they are, or they will default to Perl or Python. They will have an opinion on what the best language is, but their strength of their opinion will be directly correlated to whether or not they’ve worked primarily on writing their own code (in which case they will prefer an unstructured language), or supporting the code of someone else (in which case they will prefer a much more rigorously structured language). Depending upon the stage of their professional development, they will work well with systems administrators, database administrators, or networking personnel, but never all three at the same time. These people actually make up the bulk of systems administrators, industry-wide. Programming editors vary wildly.
Common statement, in comments: “# I know this sucks, but it works. Do it yourself if you don’t like it.”
Class Three: The Mercenary Professional
How to recognize them:
They know Java, ASP.NET, and/or C#. They’re at least conceptually familiar with SOAP and/or Ajax. They hate whichever database they’ve relied upon that had the least competent DBA, and like whichever database they’ve relied upon that had the most competent DBA. They want version control, they want detailed specifications, they don’t want to have more than two meetings with the customer. They regard most of what they learned in college (if they were a CS major) as useless and unnecessary. These people want to get stuff *done*, and they don’t want another phone call about it afterward. They regard systems administrators and networking staff as necessary evils. They will love good DBAs, and set fire to bad ones. They will have a love-hate relationship with XML. They will likely prefer Waterfall development, and use NetBeans or Visual Studio IDE.
Common statement: “File that bug report with the maintenance team,” or “That’s not in the spec.”
Class Four: The Cabalist
How to recognize them:
They have a very, very strong opinion on which language is teh best evar, and the list of candidates includes Lisp, C, Modula-3, and Haskell. They will be able to write up at least six different logical diagrams of any project before writing any code… although they probably won’t write up logical diagrams because they can move from one layer of abstraction to another, on the fly, in their own head (or at least, they think they can). Their first approach to most software projects will be to suggest a complete re-write in a language that doesn’t suck. They will hate most programming languages, including any language that is proposed by anyone on their programming team that isn’t a Cabalist or a Professional. Good Cabalists will work well with good DBAs, but bad Cabalists will annoy the hell out of them by offering suggestions on how to improve the database. They will often argue with systems administrators or networking staff about technical limitations (of the systems or network) as if problems with deviation from RFCs are the technical staff’s fault. They will likely prefer some sort of agile programming methodology, and have a strong preference for their particular favorite incarnation. Cabalists typically will use Emacs (and have a very strong preference for a particular incarnation of emacs), and sneer at any IDE.
Common statement: “Only a complete idiot would do it that way.”
Class Five: The Theoretician
Closely related to The Cabalist, the Theoretician goes one step farther. They will have done one of the following: written a major software program in Assembly, written their own compiler in a language *other* than Assembly “just to do it”, written their own programming language, installed a C compiler on their HP calculator, contributed a driver or a chunk of the kernel to either the Linux, FreeBSD, or NetBSD projects, or installed and run Plan 9 on their home network un-ironically. These people are nearly useless in a team environment as nobody else can understand them except a Cabalist, and Cabalists and Theoreticians rarely get along. However, they also can be the sort of Free Electron that can re-write an entire application over a weekend. Almost all Theoreticians use vi.
Common statement: “Yeah, I wrote about that in the 2001 issue of IEEE Interactions between Compilers and Computer Architectures”
Class Six: The Weary Wise One
These guys and gals used to be one of the above classes, but have passed into programming Nerdvana to Enlightenment. They will have opinions, but no longer care about the strength of those convictions. They will re-write the entire code base, but only if necessary, or hack it if that’s the best way to get the job done. They will cheerfully reuse another programmer’s code (even bad code), or buy an off-the-shelf component if that’s legitimately the best way to get the job done nearly on time, basically on budget, and with quality good enough to make everyone happy. They will hate most operating systems, programming languages, and programming methodologies equally. Typically they will prefer vi or emacs over an IDE, but will use an IDE if it gets the job done.
Common statement: “This is still better than my dot-com days.”
Every year, something new happens in baseball. And it’s always a really *interesting* new thing. Something happens that’s never happened before.
Tonight, something happened that had never happened before… the San Francisco Giants won the World Series. The Giants had won it before, but not since they relocated to San Francisco. Not since well before I was born.
Congrats to the players. You’ve given three generations of baseball fans something to remember.
Go read. You’ll be somewhat catastrophically depressed, but read anyway.
Ben Goldacre posts over on Bad Science about the distressing tendency of people to reject that which does not confirm their already-held beliefs.
Their views on each issue were added together to produce one bumper score on the extent to which they thought science could be informative on all of these questions, and the results were truly frightening. People whose pre-existing stereotypes about homosexuality had been challenged by the scientific evidence presented to them were more inclined to believe that science had nothing to offer, on any question, not just on homosexuality, when compared with people whose views on homosexuality had been reinforced.
When presented with unwelcome scientific evidence, it seems, in a desperate bid to retain some consistency in their world view, people would rather conclude that science in general is broken. This is an interesting finding. But I’m not sure it makes me very happy.
This is in and of itself not a terribly astonishing finding (depressing though it may be). There is a very large body of evidence to show that people are resoundingly poor at objectively measuring evidence using a consistent standard.
Simply put, if a study has a conclusion with which you agree, you tend to ignore the limitations of the study and place more trust in the conclusion. If a study with the same exact design has a conclusion with which you disagree, you have a tendency to focus on the limitations of the study and place less trust in the conclusion.
Even if the methodology is precisely the same. Depressing, isn’t it?
Unfortunately, this tendency is not minimized by intelligence quotient. Smart people, as I’ve said before elsewhere on this blog, are not guaranteed to be wise. As I observed over the weekend to the pater familias, people who have invested huge quantities of time and training in a field (and thus have a justifiable belief in their own expertise in that field) unfortunately have a tendency to assume that competence possesses fantastic osmotic capabilities.
Which is fascinating, as they’d jump straight to how much work they had to complete to gain basic competency in their own field as a justification for their position for their beliefs in their field… but the expertise acquired by someone else through their own study of some other field is trumped by… well, I’m not really sure. The “obvious truth”, I suppose.
People who are mathematical mavens assume that they understand economics better than they actually do. People who are biologists assume that they understand psychology better than they actually do. Successful politicians assume that they can understand engineering, everybody assumes they understand everybody’s theology, and so on.
You see this a lot when you start arguing about the philosophy of science. Scientists, as a class, make fun of other fields in order of their likelihood to line up with postivist standards of measure. Mathematicians famously make fun of scientists (and the philosophers make fun of the mathematicians). I’ve thrown this XKCD comic up before, it’s a classic which illustrates the situation fairly well:
Sadly, as you move away from mathematics towards physics, you move away from an axiomatic system to constructive empiricism. You lose truth, but you gain facts, something I’ve mentioned before. The problem, of course, is that your facts are based upon your ability to observe, which is largely contingent upon the accuracy of your measurements. The farther away from physics you go, the more uncertainty you get in your measurements, and the more qualifications you need to put upon your observations (which has the distressing tendency to produce the, “Social scientists aren’t *real* scientists” attitude among the hard science crowd).
This follows, of course, when you have a biologist who has a particular ideological stance, but some whippersnapper sociologist comes along and challenges that ideological stance. The biologist, of course, depends upon science for their livelihood, so they can hardly disclaim science. They can cheerfully disclaim sociology.
You know, I’m really not sure I’m going to bother to say. If you’re reading this, and you agree with me, you’re already going to know what the point is.
And if you don’t, you’re going to disagree with the point, right?