|
as explained in The Hackers's Bible (who's read it?) a programmer advances thru a series of metamorphoses, like an insect: from the 'larval stage' to fully fledged 'guru'.
the larval stage is characterised by obsessive interest rather than clinical careerism, and I believe the self motivating factor of intellectual curiosity is fundamental to being a good developer. every good programmer needs to spend a year or two in which his/her bedside table is stacked with a teetering pile of manuals and code listings.
having said that, it is difficult to be a really good programmer without having a rigorous understanding of theory and technique. all programmers worth their spurs should know things like how to write a recursive descent parser, what lambda calculus and functional programming are, what predicate logic is, what SQL does, how to find the computational complexity of a function, what a discrete cosine transform is, how to do linear algebra using C++ and so on.
its possible to accumulate some of this knowledge ad hoc, through reading and experimenting, or by being thrown in at the deep end on a project, but by far the most efficient and exact way to do it is thru formal instruction.
so i think its more than a case of 'the best of both worlds'. i think a programmer who is not self taught AND formally trained will always be inferior to one who is both.
|
|
|
|
|
This is the good old problem of experience vs. theory
Of course, both are needed. Being self-taught, I have never felt that my lack of formal training has been a problem at all. I have worked with both types of programmers and find that the formally trained programmers are more or less "all the same". They use the same terminology, think pretty much the same way, etc. The self-taught programmers typically think in their own way and sometimes have their own terminology.
When it comes to solving problems or inventing something new, the self-taught guys typically know everything that the formally trained do not and vice versa.
Self-taught and formally trained programmers collaborating is the only thing that seems to make sense. Typically, you should let the self-taught guys do the coding and the innovations. The documentation, planning, and more organizational matters should be left to the formally trained.
BTW, remember to pay the coder more money than the manager.
Ask not whether it is useful. Ask what it is useful for.
|
|
|
|
|
Learning on the job is the worst by far because you will only be as good as the best developer you work with and if he/she is crappy than you will be. This is why formal training is needed and it helps for a newbie to work at either a leading SW Dev. shop or a big consultant company, than they will learn how to do things the correct way starting off.
If you start with bad habits, you will have a hard time getting away from them later.
My two cents
|
|
|
|
|
By the same token, formal training is only as good as the trainer... It is best to keep learning from any source!
Once you stop learning, you're a manager!
Hogan
|
|
|
|
|
|
Some of the best programmers I've met did not work at large shops.
I don't think learning on the job is the worst, but better than formal training. Formal Training teaches a few basic concepts. Though those basic concepts are important.
Most programming is a balance of development time, and application performance. In most places of business you have to consider programming cost and time in relation to customer demand. No formal training can teach that balance. You have to know when to break the rules to be successful.
If I didn't have the it's not black and white option and had to only pick one or the other, I'd have to pick self taught, assuming the self taught person would be reading books, articles and samples where more experienced programmers include the basics taught by formal training
DH of KC
|
|
|
|
|
I have worked in small and large shops and the best places by far are the small shops because they force you to learn alot of things and think out-of-the-box. But the only disadvantage of working on a small shop is that you tend to always do things the wrong way for the sake of time. And most of the time you do not have time to go back and fix anything you previously did once you learn the correct way. This is why I think formal training is needed so you can learn how to do things the right way from the beginning.
|
|
|
|
|
i'm in agreement with your comment.
void izmoto(char* szKwazi);
|
|
|
|
|
What's the right way and wrong way? What determines this? There isn't a text book example that holds true for all cases.
I think formal training, teaches guidlines we strive to adhere to given the constraints we're given for any individual project.
Experience (aka self teaching) gives you the ability to make the determination for what the definition is for that project as to the right way to program it. Formal training cannot do that, it teaches a best case senario / solution.
I think the right way to program is determined by the time you are given, the flexibility of that time, the required functionality, and the existing environment and tools you have available, and completing the project within those limits.
I'd also like to ask, how many of us can say when we look back at programs we've written and not seen a better way to have done it? I don't know of anyone who chooses a lesser way to program something unless there are conditions that merit the decision at the time.
DH of KC
|
|
|
|
|
What I meant by right and wrong way is the inefficent way and the efficent way. Without formal training you will tend to do thing inefficently. Like using ADO.NET controls instead of writing the code manually to do the same thing. Using old ways of doing things just because someone on Google said it the way to do it. Not use OOP methods and so on.
|
|
|
|
|
I think that if a developer is not self taught it means he is not too interested in what he is doing, Somebody will have to push him in order for him to improve his skills. Formal training is verry good but only when self taught exists.
Turning back to your question you are right there is no right or wrong way BUT there are alternatives that can and should be taken into consideration under all situations (trade quality for dev speed etc) and in general the programmers that only know what they've learned trough a formal training will always try to apply the same resolutions.
So even if you choose 'a lesser way to program something' you should have in your mind another possibility of doing it.
|
|
|
|
|
I disagree. Who says that you have to do something the same way as the programmers around you unless they force you into their set of made up standards? I have been a contractor for most of the 13 years I have been a programmer and I have never been at any location where a standard of programming existed based upon one idiots idea. Most standards by far were the result of learned information, a consensus of all of the programmers there... but mostly, they were the normal standards... with that said, though, some idiotict things have existed... those were the places where guess I didn't last long, I have very little patience for idoicy in programming.
Your background and how you learned matters... like starting from the ground up and counting in martian, as peter Norton would say is a better start than learning how to say "Hello World!" with VB.
Some formal training centered on systems rather than programming itself is best, I believe. learning about a network and how and why it functions... knowing for what WAN stands, how a database transfers information through the network makes it natural to consider throughput, security and database stress off of the top of the development cycle of the project.
Learning multiple languages also help as well as being humble enough to learn from anyone helps as well. Also, a tip for the unwary: wait for a new latest and greatest technology to be proven before jumping on the bandwagon... also, never buy version A, always wait to at least version C, all of you rush to stores on release day idiots...
version A is the one with the most bugs).
So, my belief is that most self taught programmers have taught themselves more than just programming hence their overall systems knowledge is greater than SOME formally trained people who are taught based upon a narrow curriculum of some language and not the system. If you have been trained in VB alone, you have been trained in how to use macros to program and know nothing about the underlying code, object oriented programming and whether or not you use GoTos, your code is going to become someone else's nightmare. Now there are some University trained budding young geniuses who's first program was not a hello World VB program; but an operating system and who has a laptop connected to some dinosaur PC in their dorms is a different story. However, living in the real world has little disadvantages and just like a star LB is still a rookie in the NFL so are you... but some of you will be stars at the next level very quickly.
Building your own stuff like servers and routers from router software and a hub is a challenge that also puckers you up a bit, but teaches you a lot. You'll find that when you go to work to build software you are prepared with a whole lot more low level information about the 1's and 0's than most of your counter parts...
I am a mix but am more self taught. Some formal training, but mostly self taught from the old school of programming... and that's my story and I'm sticking to it... in conclusion ... uh, hello?
**cricket**
**cricket**
**cricket**
Well, so what... it's my opinion!
Clarence Tunstall
modified on Thursday, April 3, 2008 3:41 PM
|
|
|
|
|
I will agree here. Formal training is needed, but can only take you so far. Self taught to me would be hands on, combined with formal training would be the way to go. Both are needed.
|
|
|
|
|
Not to be down on this, but who cares who's better. I'm always going to hire the one (out of the current pool) that has the best skills and experience.
Hogan
|
|
|
|
|
Or, failing that, the guys that have to work with whatever HR put in the next cubicle.
We are a big screwed up dysfunctional psychotic happy family - some more screwed up, others more happy, but everybody's psychotic joint venture definition of CP blog: TDD - the Aha! | Linkify!| FoldWithUs! | sighist
|
|
|
|
|
I've been going for close to 30 years, most of it self taught. The times when I have had formal traning it has been very focused to the trainers point of view or desired out come. Training etc I think is very good to get you started or give you a fresh look but experience and raw talent can only leed you forward to expanded those ideas.
I'm am now I need of a new kick start so I sould be in time for a training course. Like a car a programmer needs a service every 10-20000 lines of code.
Why is it when you are busy everyone whats it yesterday, But when your not no-one has any work for you?
|
|
|
|
|
Hi!
What really makes a good programmer good, is not where he/she got their education/experience. Rather, it is their desire to BE good!
A self-taught programmer has already gotten to know the environment they are working in, however, if that programmer needs to work in another area/expertise, how much will he know about it? How long will it take to learn and adjust to the new environment?
A formally taught programmer, while (perhaps) having a lot of knowledge of the available resources (e.g. a .NET programmer will know more about the .NET Framework), will struggle to use the objects available, if the only interaction they have had is exercises done during training. Furthermore, formal training may not even cover many aspects of the environment, only those that are necessary to get the current job done.
However, a programmer who has a passion for what he/she does, who knows his/her own limitations and desires to overcome them, will use any options made available to them: if there is formal training* available for the subject at hand, they take that class; if not, they figure it out on their own.
Additionally, a good programmer doesn't wait until a problem comes up to start figuring it out. They are always on the lookout for new developments in all areas, and when such arise, read up on it even though it is not currently relevant to them.
To summarize, a good programmer is one that utilizes all available opportunities that come up, whether formal or individual, to further advance their knowledge. Just one or the other is never going to be enough.
Of course, all this applies when comparing two programmers with equal experience; as in all things, the more experience one has the better a programmer is.
Schmuli.
* My understanding of formal training includes lectures at a university or programming school.
|
|
|
|
|
A formal education is the inspiration and the self learning is the perspiration that is needed to be a good programmer.
But nothing takes the place of common sense!
Mike
|
|
|
|
|
First I agree about the common sense!!
Second I also feel both self training and formal training is needed to become a good programmer. Many times it helps to try it yourself for a while and write a few projects. When you finally go to training sessions, the information is much more meaningful because you can see what mistakes you've made and understand better what the correct coding will be for future projects.
Lost in the vast sea of .NET
|
|
|
|
|
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;
|
|
|
|
|