I hesitate to say this, but I really do think that very very few people should be allowed to write software at all. Of the hundreds of developers I've worked with, most of them subtract value from the project. If a developer hasn't read a giant pile of books (which I'll try to list in my next post) then almost every line of code they write is suspect. I've been on some projects with some really smart people, and even they let things deteriorate. Let me try to give some simple examples.
Unit Testing -- Sometimes even the best people just don't write unit tests. Or, they didn't take a class on unit testing in college, haven't read up on unit testing patterns, and so when they do write unit tests they are dog slow, and become a maintenance nightmare. (I've been personally responsible for this). Developers who don't write tests, or write nightmare tests should NOT be allowed to code until they read more.
Refactoring -- Ordinary developers aren't focused on refactoring. They don't understand that you should strive to remove duplication ALWAYS. They don't understand the right way to do refactorings, or they are scared for a number of reasons. Dev's who add duplication, or haven't read Fowler's Refactoring should NOT be allowed to code.
These are two fundamental ideas in software development, and unfortunately, most developers I've met don't do either. Thats just two. The list goes on and on.
I've read a lot of books on this theoretical list. I can't stop; I'm addicted. Many times after I read a book, especially if I consider it a classic, I say to myself, "I can't believe I ever wrote a line of code before having read that." I realize I've subtracted so much value. Whats worse is it happens all the time. I am a victim of my own high standards here. I should NOT be allowed to write a line of code until I read like 10 more books.
So to finally address the title of this blog, Who should be allowed to write software? What kind of roles should newbies fresh out of college get? How hard to you have to manage developers that haven't read the books on the List? Do you have to monitor their every check-in? Do you have to code review every test? It seems like it to me. But sadly, this would subtract from the time that the best developers have, because someone good is going to have to monitor them. Maybe just lose those people in need of monitoring to free up time for the good people to get it done.
I think it takes 10 years of consistent reading to get to a point where you're always adding value. Thats a huge number. Who should be allowed to write software?