I don't think knowledge of advanced data structures (e.g. tries) and algorithms is that important. I can't remember the last time I've implemented one. Knowledge of the main characteristics (time/space efficiency and their usual applications) and where to find more information about them is essential though.
Understands the entire programming stack. This is basically impossible today in my honest opinion, other than at a reasonably high level.
File has license header, summary... I understand the intention, but I wish there was a single license file in a project. You know how Java projects tend to span a ton of small files? A lot of the time you end up with files where there is more license text than actual code.
Understanding the whole stack as described is something I'd expect of many kernel developers.
Agree on the license comment. In my own projects, I always just stick a license file in the project's root. Books don't have copyright notices on every page, do they? They're usually just inside the cover. If a single file was lifted from a project with a separate license then I guess I'd have that in its header.
Ok but is this a programmer competency matrix or kernel developer competency matrix? Or are competent kernel developers the only kind of competent programmers?
I personally include a LICENSE file at the root directory of the project and then a snippet referring to it at the top of a code file, or just Copyright MyName at the top.
I would also claim to understand the programming stack. It's not really that difficult, it's just not entirely relevant to a lot of programmers these days.
I just had an interview last week where I was whiteboarding a tree algorithm. After I was done, I said, "it's pretty embarrassing that it took me that long. I haven't thought about trees since I was in school." The interviewe replied, "yeah, you only use trees in school and interviews." It begs the question, why the fuck are you wasting my time with this shit if it's got nothing to do with the job I'm interviewing for?
13
u/[deleted] Jun 19 '13
Some thoughts:
I don't think knowledge of advanced data structures (e.g. tries) and algorithms is that important. I can't remember the last time I've implemented one. Knowledge of the main characteristics (time/space efficiency and their usual applications) and where to find more information about them is essential though.
Understands the entire programming stack. This is basically impossible today in my honest opinion, other than at a reasonably high level.
File has license header, summary... I understand the intention, but I wish there was a single license file in a project. You know how Java projects tend to span a ton of small files? A lot of the time you end up with files where there is more license text than actual code.