The danger of having system programmers around
utcc.utoronto.ca
utcc.utoronto.ca
Especially in emergencies, it can be really great to have three or four people attack a problem from different angles. What you need is someone reading the docs while the system programmer is running strace() and the tuning guru is reallocating processes and memory and the customer liaison is on the phone trying to figure out if they really need to be running this particular enormous task on every page load.
The alternative, if you're by yourself, is to try to multiplex the roles, but it can be extremely difficult to pull yourself out of systems engineering mode while you are in there.
I really was not sure what to learn from that episode. The logical conclusion seems to be to try to read your way through the target source code, if you have it, before investing the time to find and skim through documentation. On the other hand, it feels like a really bad lesson. Time will tell if this moral holds up.
Most of all, if you're getting it right more than 50% of the time (and I'm finding it hard to imagine a way you'd do worse than that) there really is no point beating yourself up about it.
Right now we're refactoring our codebase from one language/framework to another. Identifying which parts are still maintained and need the refactor vs. which parts would be a waste of time because a developer hasn't touched it in years is important.
This is especially important if you're one of few/sole engineers on a project.
If it doesn't hold the answer, fine, we can look elsewhere. But it does hold the answer often enough that reading that funny manual first all the time will save time over the course of a career.
I used to work like that in the mid-1990s.
When I had a problem, first I thought a bit, then I looked at the documentation -- and as a last option I searched (at the time, mostly Usenet).
A year later I'd become realistic (or lazy), I searched before reading the documentation.
And after another year, I searched before even thinking about the problem... :-)
This article does have a valuable lesson, in spite of the miscoloring. What we see in this article is an example of overthinking the problem. With experience, your debugging/problem-solving skills will get better, and this kind of mistake will not be often repeated. It took me many years to get out of the habit of speculating and to get closer to actually debugging. I had learned that it was faster to look at what was really happening than to guess at it. It helps even more to come to a detailed understanding of your system, but if you do not have time for that... Never start at the bottom first: start with the symptom.
When people describe themselves as something, it is to indicate what they are interested in doing. Hiring a self-titled "Web Programmer" to do VMWare work is probably not a good fit, not interesting for them. But it is not unreasonable to find that they are capable of doing the work if they wanted to. We need to be careful about categorizations.
I see your point about basket weaving, but when I went to school, I did not see a class for it in my CS curriculum, and I also did not see "systems programmer 101" or "web development 101". These are applications. In CS, we learn how to navigate in all these fields, whatever their rules... that is, out in the field, we can learn enough of basket weaving to create a software model for it. The point is that we can solve the problem in software.
Really, it is because of this nonsense that I gave up on recruiters entirely and learned to go directly to the technical hiring managers. The good ones do not use requirements checklists with bullet points like "knows C++", "has programmed in linux", and "knows basket weaving".
Edit addition: This thinking would be career-limiting on me because I have adopted a mindset that boxes me in, focusing in the wrong things.
I had a course in OSes. And a course in databases. And a course in graphics. And a course on compiler design. So on and so forth. All part of the curriculum. They taught us to be computer scientists, not systems programmers or web engineers or whatever fancy title is nice. I should add that the university I attended is one of the top in the US for CS.
Also, in interviewing candidates, I did see that there are several schools that do teach about the toys rather than about CS. I generally ignore that and look for good developer qualities instead.
Your second sentence is pretty personally insulting, beyond the call of simply disagreeing with me. Please consider an edit?
He made a good point, people often dismiss candidates because they see some buzzword they don't like. A good programmer is a good programmer regardless of what he calls him/herself. It's more important to assess a programmers competence, desires, and fit within a company than discriminate on what "type" of programming you think he should be doing.
This sounds much more like you're projecting frustration with recruiters rather than making a useful point on categorization.
(1) Avoid overanalyzing when debugging. This is true for all programmers.
(2) Divorce identity from skills to avoid personal limitation. Say "I can develop web pages", not "I am a web page developer".
(3) Side point: I am not convinced specialization in CS is helpful, and in my experience, it proves to be a hindrance to integration.
Sorry for the confusion.
These type of programming requires a distinct skill set and usually more experiences than for example web frontend development (PHP, JSP, etc).
Asymptotically there's no such thing as a systems programmer but that's not really how the real world works.
I can understand if a hiring manager wants somebody who has some experience in some OS, in using Dreamweaver, in knowing the Java language, or in some other platform. These are just toys, though. I agree that that experience is a bonus, but the real core skillset has nothing to do with any particular toy. The hiring manager will easily miss good developers with such a narrow-minded focus.
And certainly, strong experience in any of the items of this list should not suggest that the developer cannot also do GUI programming, web programming, JavaScript, or any of the like. These are simply environments. Everyone has to learn the local company's codebase or some business's specific rules.
I have never seen an educational institution use these terms. Nobody gets a serious degree in "systems programming" or "web frontend development". If they do, avoid that institution!
What you want in a developer is the ability to learn, the ability to think, and the ability to communicate on things that make some hardware operate. But call them a "systems programmer", and we do a grave disservice to our industry. Distinct skill set? No way. Don't let the pencil-pushers carve us into tidy little imaginary fields. They do that because they are trying to measure the work. As someone who has experience in all the levels from our computer's digital circuits up to databases and sideways to some pretty graphics and sound, I can assure you that these definitions are ridiculous. I provide maintainable solutions.
I am not a systems programmer. I am not a web developer. I am not a game designer. I am a software developer: I can do all these things and more -- and specifically, I personally have, so I know the differences.
I do not hire people because of the toys they have used; I hire them because they are capable of learning and extending mine.
Reading documentation, on the other hand...
You think I'm trolling or trying to be funny, but it's actually a real trend I've noticed.
"With a few weeks of hard work, creativity and dedication in the lab you can often save hours in the library."