|
A good developer is constantly looking to improve their skills. That means digging into new technologies to stay with the trends, but it also means seeking to better understand established theories and practices.
Also there's no substitute for experience. Everyone's gotta start somewhere, but there's often things you'll never know until you face the problem.
I disagree that self-taught programmers (aka "Cowboys") are doomed to work on smaller projects where you've gotta have education if you want to work with large-scale applications.
My first real project came after just a year of experience and no education other than Barnes and Noble. My co-conspirator had only one more year than I did and was also self taught. We had some problems early on which wouldn't have happened if we'd had someone with more experience, but I've worked with plenty of college grads who we had to straighten out and show them the way.
Also, when we did run into problems we went to some more experienced developers and they had no idea what our problems were caused by. We ended up tracking it down and fixing it on our own on more than one occasion.
Before we brought on permenant help we had broken 1-million page views a day and we had tables with several million records. So you can't just drop either group in a category and call it good.
That's why I say, it's all about a desire to learn and improve. No matter where you start you can become a great developer if you put in the time and effort to learn.
|
|
|
|
|
There's a previous survey[^] that asked the question from that perspective. The results are... mixed:
University and post graduate education 3299 3.36 Offsite Training camps / seminars 2411 2.45 Formal on the job training 2789 2.84 Informal on-the-job training (keeping your eyes peeled and asking lots of questions) 3796 3.86 Self education (books, websites, newsgroups etc) 4482 4.56
Citizen 20.1.01 'The question is,' said Humpty Dumpty, 'which is to be master - that's all.'
|
|
|
|
|
In my first real job, the CS Major who was running security claimed that Chemists, Physicists, and Chess Players made the best programmers. It could have been said to make me feel good, but I've seen some by-the-book work of late:
My employer had a contractor who further contracted out some development to India. It came back perfectly by the book. Alas, that was its downfall. It was also totally without insight. It was relegated to a bad memory. Another project, with some of their reps here (yes - from India), is up and running: but not with an unbelievable hell-to-pay period for the users. If was not a matter of isolation. They did their interviews and wrote their code.
I don't mean to pick on Indian programmers per se with this They were just the live example that is most recent - and these were from a code-mill.
One could postulate that the self-taught programmers were very much involved with the concept of making-it-work from the start, and any elegance (gained through experience) was added with each new application. This latter concept applies to programmers from all walks of how they got started.
Is programming so unique in this regard? How about a car mechanic, for example. For that matter, as a hybrid of the concept: in grad school, a rather well know professor (who assumed we all wanted to be professors) started teaching his course with the following observation: 'If you continue your graduate research on your own, after you graduate, you'll be doomed to oblivion.'
Another example that only those willing to reach out beyond their current limits can truly succeed.
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein
"How do you find out if you're unwanted if everyone you try to ask tells you to go away?" - Balboos HaGadol
|
|
|
|
|
To ask if one black-or-white factor can make a good developer is borderline silly.
There are so many factors that go into making a good developer, just as there are so many niches that a developer can fill. Are you talking about a "coder" or an "architect" or something else.
There are a number of things a good developer needs to do long before hitting the keys. First, you need to understand the problem you're trying to solve, so that also means you need to be a good analyst.
If someone's doing a solo effort, they must have many hats. If they're part of a team, they need a good amount of skill and expertise in their part as well as having good teamwork skills.
When I interview people, I neither look for nor shy away from formal education (and credentials!), but rather I look for demonstrated success and specific skills.
From my formal education, I learned valuable skills that help me to understand better how computers process through low-level things like Turing Machines and other finite state machines. In the real world, I've learned business processes. The two areas are very different, but have to be merged for successful solutions.
|
|
|
|
|
Seriously, I've noticed that a lot of really good programmers are self taught *and* have music backgrounds and particularly classical music/conservatory training.
¡El diablo está en mis pantalones! ¡Mire, mire!
Real Mentats use only 100% pure, unfooled around with Sapho Juice(tm)!
SELECT * FROM User WHERE Clue > 0
0 rows returned
Save an Orange - Use the VCF!
VCF Blog
|
|
|
|
|
Does six years of choir in school count?
I may have a lousy sense of pitch , but I've got that diaghramatic breathing thing down pat.
Software Zen: delete this;
|
|
|
|
|
Sure if you learned music theory and analysis and then used those techniques on pieces that you performed.
¡El diablo está en mis pantalones! ¡Mire, mire!
Real Mentats use only 100% pure, unfooled around with Sapho Juice(tm)!
SELECT * FROM User WHERE Clue > 0
0 rows returned
Save an Orange - Use the VCF!
VCF Blog
|
|
|
|
|
Actually, I did. In addition to choir, I took music theory my junior year. Our final project in the class was an original composition that had to be two minutes in length. Fortunately, I had a friend who played piano who could play what I wrote down and then help me revise it to something that didn't sound like mating bulldozers.
Software Zen: delete this;
|
|
|
|
|
Maybe you should restate the "classical" part then. I went to the College-Conservatory of Music at the University of Cincinnati, but Jazz was my specialty. Composition and Theory were not only mandatory classes, but instrumental in understanding and perfecting the art of jazz improvisation. So much so that we were required more classes than the typical symphony or orchestra musician.
So, you should really adjust this to say "formally trained" instead of "classically trained."
Draugnar
|
|
|
|
|
Wow a fellow CCM'er! When were you there? I graduated in '96.
Draugnar wrote: So, you should really adjust this to say "formally trained" instead of "classically trained."
Fair enough.
¡El diablo está en mis pantalones! ¡Mire, mire!
Real Mentats use only 100% pure, unfooled around with Sapho Juice(tm)!
SELECT * FROM User WHERE Clue > 0
0 rows returned
Save an Orange - Use the VCF!
VCF Blog
|
|
|
|
|
Long before then. I was there during the summers of '83 and '84. They had a program called the Summer Music Institute for Advanced High School Students, which included alot of the SCPA kids as well as a some of the better ones from throughout the greater Cinci region. I know that it PO'd one of the SCPA kids that he got third Bone in the jazz band while a non-SCPA kid (me) was lead.
I went to college for IT (math and computers being my other skills), but still taught private lessons to make some extra cash. I still play in church, but it's not exactly big band, swing, or the blues but I do get to arrange a lot of pieces for our brass quintet from hymnals and piano sheet music.
|
|
|
|
|
You know, that is scary...!!!! I love Mozart and play, well used to, the Bassoon. My first formal education to the C-Programming Language was, "...Here is the book - The Original Kernighan/Ritchie...", now develop the code.
HOwever, I did have formal training later, about 5 years later....
".... We will add your biological and technological distinctiveness to our own . . . . Resistance is Futile . . . . You will be Assimilated . . . . . ."
|
|
|
|
|
As a self-taught programmer (HTML, then ColdFusion, then VB.NET plus some JavaScript along the way) with a BA in Music Education, I'd have to agree! Actually some of the things I learned as a classically trained singer DO port over to my current life as a programmer...I had to learn bits and pieces of different languages - Italian, German, French, Spanish, Latin - and to be able to think in those different languages (albeit on a very limited basis!) to correctly communicate the song I was singing at the moment. I've often mentioned to non-technical people who've said, "I could NEVER do what you do" that programming is really largely learning another language. Sure there's a big problem-solving component to it, but there's also a lot of creativity required, especially if you do any web design work.
Honestly, I think I probably have got some holes in my knowledge because I am primarily self-taught, but because I can teach myself, I can always fill in the gaps as needed.
|
|
|
|
|
My current position involves working with both types. Although the shop was started by self-taught developers, they've realized the need to move toward developers with more formalized training. There is only so far hacking will get you when needing to build strong, reliable enterprise applications or heavily used websites and million+ record databases.
only two letters away from being an asset
|
|
|
|
|
Formally trained developers who are able to teach themselves new skills
|
|
|
|
|
If that would be one of the options, I'm pretty sure it would get near 100% of the votes and that would ruin the entire poll.
[Imagine Cool Inspiring Stuff Here :P]
|
|
|
|
|
Unfortunately, there's probably only ten of those guys in the world and they are all busy writing books, or working in research labs...
-----
"Be liberal in what you accept, and conservative in what you send." - Jon Postel, First Law of Internet Communications
"It's 5:50 a.m., Do you know where your stack pointer is?"
"If at first you don't succeed, you must be a programmer."
http://vanguard-against-confusion.blogspot.com
|
|
|
|
|
Yes, the better programmer is who always keeps learning, whether he is a self taught or formaly trained.
-------------
commander
|
|
|
|
|
The value of formal training is that the programmer has a wider variety of tools to use in attacking a problem. The self-taught programmer tends to have a favorite 'wrench' for every problem.
Self-taught programmers have something that the other programmers don't: the ability and motivation to learn on their own. They're the ones to dive in and try things. The best ones are often early adopters.
If a self-taught programmer isn't flexible and willing to adapt, they tend to stagnate at one level of skill. If the formally-trained programmer stops learning when the training is over, the same thing happens. The key is to continue learning, regardless of how you got your start.
Software Zen: delete this;
|
|
|
|
|
I agree with the sentiment that continual learning is the key to success in the world of programming.
I am a self-taught programmer, that has had a lot of exposure to "formal" concepts via interaction with formally trained people, and a lot of reading.
I have to say, that without that exposure, I would not have been able to advance beyond a certain level of skill, but I disagree with the idea that where or how you learn these ideas is relevant to your ability to use them.
The biggest difference that I see between self-taught and school-trained people (in any field) is that self-taught people tend to be bigger risk-takers, take action earlier, and thus yield results earlier. They also tend to be the innovators in the technology field.
I disagree with the "favourite wrench" example. In fact, I think the opposite. A school-trained programmer is likely to view their education as a static collection of different "right ways" of doing things, and then look at the problem, and choose what they think is the "right tool for the job". Often, they tend to be biased toward a methodology that they find more interesting than some other methodology, and apply it where it doesn't belong. In more abstract terms, they are living in the solution domain, not the problem domain. They are more likely to change the nature of a problem to suit a particular solution than to change the solution to fit the problem.
The self-taught programmer, coming from an attitude of "find a way to make it work", lives more in the problem domain, rather than the solution domain. They look at the problem, and follow this process until success:
1) Use a solution they have used before that worked for a similar problem
2) Do some research by asking others, reading websites, books, etc, until they find a solution for this type of problem
3) Invent a totally new solution that suits the unique problem.
I find that school-taught programmers *rarely* make it to step three. They have greater success at step one, because they have more solutions under their belt to work from.
Impatient self-taught programmers will often never make it past step one, since they are always able to find some way to twist their limited abilities to "make it work" (though not in a "good" way). They tend to have a harder time during step two than school taught programmers, because they have to get over their own egos, and admit they don't know something. A lot of self-taught programmers are very proud of being self-taught, and dislike admitting that there is something they don't know already.
This has an interesting effect, in that a self-taught programmer will often skip step two completely, or just do a minimal job of it, and assume "there is no existing solution to this problem", and move on to mode three.. They will work hard to invent something, and then afterward talk about it as if they did something really amazing that other people can benefit from. To thier surprise, they find out that if they had spent more time during step two, that the solution already existed, and in fact is more formalized and mature than their "invented" version of it. It's only then that the self-taught programmer realizes that they shoudl have done better research, and then they will go and learn the formal version of the idea, while munching unhappily on the foot in thier mouth.
In rare cases though, the self-taught programmer will be very good at step two, and still find themselves in situations where they need to progress to step three... and that's how a lot of advances in software technology happen.
Without that do-it-yourself spirit, and without the ability to focus on the problem-domain, it's extremely hard to advance past the second step.
Anyhow, these are just general observations. I personally fall into the self-taught category, and I find I spend most of my time in "step two". In fact, these days I start there. With technology changing so quickly, the solution I used last year, may no longer make sense to use... So the first thing I do, (even for things I think I already have a solid solution for) is go out and see how other people are solving the problem with the latest technology. If there is no new method, I use my known method. If there is a new method, I implement it both ways, test the results, and try to figure out which is a better way to go.
I almost never have gone to the third step, and the few times I have, I end up with my foot in my mouth... Someday I might actually need to invent something new, but I doubt it.
Thanks,
Troy
-----
"Be liberal in what you accept, and conservative in what you send." - Jon Postel, First Law of Internet Communications
"It's 5:50 a.m., Do you know where your stack pointer is?"
"If at first you don't succeed, you must be a programmer."
http://vanguard-against-confusion.blogspot.com
|
|
|
|
|
I voted "Self taught programmers generally make better developers" but that depends in what area you end up programming. I know some jobs where I'd prefer a systematic, formal programmer to a genius cowboy (and vice versa.)
regards,
Paul Watson
Ireland & South Africa
Fernando A. Gomez F. wrote: At least he achieved immortality for a few years.
|
|
|
|
|
I've worked with both. The systematic programmer works best in a group on large projects, whereas the cowboy is best on his own with smaller work. Cowboys don't seem to get the 'big picture', and will make sweeping changes without regard for the global implications of what they're doing. The formal programmers are good at coloring within the lines, but they're not always innovative in the crunch.
Software Zen: delete this;
|
|
|
|
|
I'd have to disagree with this conclusion.
I think of myself as a cowboy. I work on a team, but often work on projects that are a solo effort. I'm fortunate that I can turn out excellent solutions that are well received by the customer. Some of my projects are quite big both in functionality and reach throughout the organization, and one of my biggest strengths is understanding business processes and the "big picture."
Not to be all about me, either. I know of a few other people that I think fit this category as well. Not many - but a few.
|
|
|
|
|
I was generalizing based on my experience.
I've seen cowboys that could work well in a large effort with a team, and I've seen more formal types that were good self-starters. My feeling is that programmers like this are simply good at adapting to the work environment, which strikes me as the ideal.
Software Zen: delete this;
|
|
|
|
|
Self taught doesn't mean that you don't use formal techniques, it just means that you didn't attend an offical programming coarse
|
|
|
|
|