Fatal Exception’s Neil McAllister asks whether the need for advanced development expertise is on the decline in an era in which tools grow increasingly more advanced, and coding increasingly moves offshore. ‘Few companies share Google’s zeal for academic credentials when hiring new developers. Many are willing to accept self-taught programmers, particularly if they have other skills relevant to the business.’Witness Zoho’s homegrown approach to recruitment, in which high school graduates are molded into programmers by way of Zoho’s own curriculum. ‘Many American employers are trying a similar, ground-up approach to developer education. Rather than hiring new programmers to staff software projects, they recruit internally, often tapping employees with little or no previous coding experience to transition into development roles.’ The mixed state of IT education may play a factor here, but all these forces seem to suggest that the demand for computer science education in the job market is on the wane.
There are plenty of programming jobs out there where you need to have a good understanding of computer science principles beyond the programming languages themselves. You can learn a fair bit of that on your own, but a proper grounding in computer science can go a long way. Where I work, you get pretty much the whole gammit being useful: video-related stuff, networking, databases, data structures, general algorithm stuff, etc. Sure, you can learn a lot of that on your own, but you’re going to be a lot less effective – and more importantly, you’re not going to be able to adapt as well. A proper grounding in computer science helps a lot in learning new stuff and adapting to new trends. It also means that you’re likely to be a lot more effective at innovating, which matters a lot in some jobs.
I’m sure that there are plenty of programming jobs out there where you don’t need a CS degree to succeed, but with a lot of them you do. I know some good programmers who didn’t go to college, but people like that will likely have more to prove in order to stand a chance at getting a job – not to mention that if there are a lot of applicants, the odds are that the lack of a degree would be a good reason to remove someone from the running even if they’re qualified – simply because they’re looking for ways to reduce the number of candidates.
Personally, when I finished college a year or so ago, the folks I interviewed with likely wouldn’t have even touched me if I didn’t have the college education. Maybe they would have had I had extensive job experience, but they were looking for a level of knowledge and experience that you’re not likely to have on your own – and I do think that there’s a good chance that they wouldn’t have even talked to me if I hadn’t had the proper college education.
Sure, there are jobs out there where you can get by without a CS degree, but don’t count on that working out for you.
And I would claim that a CS degree is inferior to an engineering or physics degree. The CS degree is all about the tools, engineering and physics are more about solving problems…general techniques that can be applied using computers as a tool, not THE tool.
Sorry, have to disagree. The original posting even mentioned the importance of data structures, algorithms, etc. All of these things are not in and of themselves “tools,” but concepts needed in order to apply them to real-world situations.
It’s silly to get into any kind of comparison between the usefulness or validity of one degree over another in the technical or science fields. (of course, a bachelors in underwater basket weaving being the exception to every rule )
I have to whole-heartily agree. I have a degree in Electrical Engineering, but switched over to software quite some time ago. Looking back, I wish I had done a minor in CS to cover those subjects you just mentioned. I have read the books, but sometimes the books aren’t enough.
I have found that the relationship between computer science and software engineering depends upon the institution. For example, the university that I attended definitely placed a heavy emphasis upon problem solving and proofs (i.e. how do we approach the project requirements, and do the algorithms work) as part of the computer science program. And it was pretty much that way from the first semester onwards. (Yes, the introductory course focused upon a particular language; but it also covered the principles of programming languages, algorithms, data structures, and the readability/maintainability of code.)
I don’t agree at all.
I hold such a degree and we learnt the concepts and methods before we touched the tools. The tools were just a means to achieve the concept and end goal.
Algorithms, data structures, fundamental development and computing concepts all came well before the tools were even made available.
Yes, most engineers wrongly feel this way.
Just because they taught you Fortran and you know how to do differential equations doesn’t qualify you as a computer scientist. It’s important to point out here that nowhere in the engineering discipline is there any coverage of algorithms and data-structures which are fundamental concepts for solving problems in computer science. I’ve never met an engineer who would know an NP-complete problem if it hit him/her square in the face.
Also, if you think those things I’ve mentioned: data-structures, algorithms and NP-completeness are “theoretical BS” then you’ve no idea how useful these concepts are when solving real world problems.
GC
+1 Insightful, but I cannot mod you up anymore.
You missed out on one of the most important concept that is completely out of reach of any non-computer scientist, and that is algorithm stability. No other profession has any idea what it is, or what it is important for, and then they cannot understand why their code predicts things completely different from what is happening.
However, not many computer scientists know that either. And I learnt that off the net anyway, so I suppose it means that getting the degree may not be enough to offset passion, or rather the lack of it.
It’s unfortunate but true. You’ve got to have a CS degree for career mobility in the IT industry. No CS degree means you’re not going to get touched by 2/3s of the companies out there.
In actuality, you don’t necessarily need a CS degree to work in the IT industry, as the bulk of the industry is MIS work, but it’s one of those memes that people get stuck in their head as the “right” way to do things. It’s kind of like running Windows as Administrator. Is the right way to do things, no, but everyone assumes it is because it’s been common practice for so many years.
Why couldn’t you have posted this before I started my Computer Science degree in the UK?
Seriously though, even though I’ve only just finished my first year I feel like I’ve learnt so much more than I could have done on my own. For a start I’ve learnt some of the fundamental principles of programming languages, not just learning the language itself. It’s helped me greatly in being able to adapt and learn any programming language that I have to.
I’ve learnt lots about the inner workings of a CPU, even going as far as designing one using Cadence and Verilog. We also had to do some assembly programming, and learn what happens when code is compiled (or converted to bytecode in the case of Java, which is the language they teach at first). Personally, I’ve found it helps me loads when I’m writing code now for things like Android apps, that I know roughly what is good, what isn’t and why.
All this possible to learn on your own of cause but most people won’t bother to learn this stuff, they will just go for the basics of the language. This is fine, however it’s a bit like a surgeon learning how to perform an operation, but not why it’s performed that way. It will work fine, until something goes wrong, when someone who has read out the subject will step in and help them (hence stackoverflow.com).
Personally I’m happy I’ve decided to do a CS degree, even if it might lean to me actually being more employable.
Has anyone thought that the fact there are so many bad software products around might be die to these hiring habits of companies?
Having some (at least related) degree is currently a formal prerequisite for becoming “an engineer” (which is not entirely fair but that’s the way it is at the moment). Without such qualifications door to many good places will close, the fact that is not compensated by door to “Zoho” or similar companies remaining open.
In this context formal qualifications can be a safeguard “protecting” you from doing something stupid with your career (like accepting a job well below your qualifications). The good thing about it is that you don’t even have to bother doing the filtering yourself (which is not always an easy task to do, especially for a new person on market) – these lower grade jobs simply won’t be offered to you. Some people say, that’s a problem for engineers. In my opinion it’s not, not for the person that consciously chose this career and then worked hard to gain the qualifications.
With or without qualifications your first job will probably start at junior level anyway, so qualifications are not a replacement for experience. What’s different, though, is the scope of this and any subsequent job. On one hand, over time general work experience is making the qualifications less relevant, on the other – different work experience may actually make the split deeper.
I didn’t study computer science… I studied Software engineering which is slightly different. but I have this to say about self taught programmers.
The problem with a lot of self taught programmers (not all)… is because they don’t have any academic creds they pick up a lot of bad habits, and they don’t know how to do any proper research into more complicated problems.
We have a guy that does inline SQL … another guy that uses string builders in VB.NET to build an entire page … instead of using an Object and a Repeater.
It works alright … but maintenance and testing are a nightmare … though most of these guys think testing is basically seeing whether it works when they pass it the right parameters.
I am not saying all self taught programmers are bad … I sit next to a guy that is a damn good developer … he develops in a completely methodical manner and does proper research before committing to a particular tech.
It is just that some academic abilities are undervalued in the workplace now, and quality IMO can suffer drastically.
Edited 2010-07-15 22:31 UTC
Completely agreed.
Maybe a self-taught person can build a house, but a real architect will be needed to build a skyscraper.
Talking about this same topic, someone interviewed to Bjarne Stroustrup (the creator of C++):
and he replied:
http://www.technologyreview.com/computing/17868/page1/
Edited 2010-07-15 23:38 UTC
I am a little at odds with the comments above. Being self-taught, I can attest that a degree means nothing without passion. Most self-taught programmers have the advantage of being more passionate about programming than people with degrees. I do have an associates degree and will be getting my bachelors soon, but I can build an entire city – skyscrapers and all (code-wise) from the skills and perspective I’ve gained from being a coder both professionally and at home over the past 14 years.
That being said, I believe a degree does a couple of things. It proves that you can dedicate yourself enough to see something through to completion (your education), and gives you exposure to people who are most likely very good at what you are striving to do. In other words, it gives you a more humble perspective.
Degreed people tend to vigorously defend their degrees, but the fact is, a degree is not required in programming.
Someone who spent 12 hours a night programming in their bedroom, learning programming languages from Assembler to Java, to C# to C++, who learns constantly, has far more real programming experience than someone who merely got a college degree.
In fact, getting a college degree distracts from learning – when you are focused at that level.
It may be great to study American history, international economics, a foreign language minor – it very likely has nothing to do with your programming tasks – imagine if you had spent that time learning more.
College has always presented a false goal – the degree – as opposed to the knowledge.
Bill Gates didn’t finish college, I’d hire the man any day, he’s pretty smart, and has a lot of experience, and seems like a genuinely nice guy on top of that.
But look – all this is anecdotal. If you are worried about someone really understanding the job – here’s a tip – test them.
Don’t ever accept a degree as a substitute for demonstrable knowledge.
That depends a lot on the school you go to and the degree. The criticisms you point out IMHO apply more to people going for a phd, not at the bachelor’s or even the master’s level. General rule of thumb for phd’s I’ve met is that they are far more interested in personal development and pet projects than they are in forwarding the goals of the company they work for, it’s kind of an “entitlement” mentality rationalized by the level of their education. There are always exceptions to this, though.
The quality of a self-taught individual depends upon how they pursued their education. If you’re the type of person who learned how to program by solving a problem, then examined your solution critically in order to improve your techniques, you probably did a good job of educating yourself. If you enriched your education by learning about the theory, and the underlying math that it is based upon, you probably did an excellent job of educating yourself.
The thing is though, I see a lot of people learning how to use a language or a library by using popular books, reference manuals, and online tutorials. They may get the job done using that approach, but it is unlikely that they will do the job well. They are also, IMHO, missing out on some of the most interesting facets of computer programming and reducing themselves to code monkies.
Quoted because this is true, as opposed to all the verbose drivel posted on this thread.
Some people seem to think getting a degree makes you capable of thinking of programming more deeply. I don’t know where that comes from. Depth comes from staring at debugger and building your Nth architecture from scratch, with your mudstained hands.
I’ll hire a basement coder over acedemic “programmer” any day. OTOH, acedemic programmers are dime a dozen while basement coders are actually hard to find.
Indeed, a lot of academics can not program that well. Even if they are in CS, programming is usually a means for doing research. Academics can be good or awful programmers, just as basement (or attic) coders can be good or awful. In any case, good programmers are hard to find.
Disclaimer: I am currently in academics.
Edited 2010-07-16 08:11 UTC
You miss the point completely. University and college do not teach programming a language. Those people who proudly teach themselves Assembler, Java, C#, C++ etc for 12 hours a night are precisely the problem.
Knowing a language does not make you a programmer, it makes you a coder. Even if you know 12 languages.
Understanding design, algorithms, structured testing, how the computer deals with your data are the things taught on a degree, and until someone points them out, the coder in the bedroom won’t even know they don’t know them.
Don’t ever accept demonstrable knowlege over a proven education. just because I can reassemble an engine does not mean I could design one successfully.
My what a large brush you have there.
I’m fairly confident that anyone who has the depth of knowledge to teach themselves assembly probably has a good understanding of “how the computer deals with your data”. In fact I’d suspect they have a deeper knowledge of exactly what happens to your data in the real world, compared to someone who has spent four years working theoretically in Java and MMIX (for example).
The problem with these types of discussions is that everyone who has a degree assumes non-degree holders are all idiots, and everyone without a degree assumes degree holders are deluded fools. Add to that the US/non-US biases, where not having any further education in the US is a major hurdle, but not viewed so critically in places like Europe, and you have a recipe for a complete waste of time.
The only hard fact I have ever seen concerning degrees in the work place is that, as an average during their working life, graduates will earn more than non-graduates holders. That’s it. It doesn’t say anything about CS in particular, nothing about the skill sets of those two groups, nothing about the employability of those two groups: just that during a 50 year period, the guy with the degree will on average make ~10% more than the one with no degree.
Edited 2010-07-16 10:14 UTC
Quoted the above for how FALSE it is.
If you know 12 programming languages, chance is you have a very very good handle on data models, algorithms, etc – even if you don’t know the official names, or various design patterns. You also have more breadth in programming than most any CS student.
CS degrees (and I have one btw, more below) are junk. Academia has moved more or less to teaching students at a highly theoretical level, without practical solution support, focusing on one or two languages. They are not producing competent programmers, coders, or software engineers. Most CS grads are useless to the majority of companies as a result; many finding they needed to retrain them and teach them basics (like pointers) to make them useful to the companies. So it’s no surprise some companies are making the jump to “why hire a CS grad and retrain when we can just do the initial training ourselves and save the money”.
[The reason I have a CS degree is b/c I needed that little slip of paper companies wanted. I am primarily self-taught, involved in the community, and typically studied stuff on my own well before I got to it in my college curriculum.]
Well we certainly won’t accept your education over your demonstration. Demonstrable knowledge speaks far more than education. Education is but one of many building blocks for achieving demonstrable knowledge. But education without demonstrable knowledge is worthless.
Also, FYI – the big motor companies (e.g. Ford) had to a while back stop bringing in Engineering grads, and instead start bringing in farmers, etc to learn from. Why? While the farmers, etc. did not have engineering degrees, they did have hands-on experience that ended up leading them to better, more maintainable, and practical designs. Again, demonstrable knowledge outweighs education.
And speaking of Engineers, did you know that outside of Software Engineering you cannot (at least in the USA) call yourself an Engineer unless you have (i) been certified, and (ii) been through a post-Academic apprenticeship? In other words, the Engineering degree gets you in the door; but then you still have to demonstrate the ability to do solid engineering in your field to be able to call yourself an Engineer. Most apprenticeships I believe are about 5 years, and you have an actual Engineer reviewing your work throughout that entire time. Again, demonstrable knowledge over an educational degree.
It all depends on what and at what level are you programming. Number of applications that require some engineering skills is steadily increasing. To be fair, the number of applications that do not require such skills is increasing even faster but that doesn’t make the previous statement false.
Word “programming” is simply not precise enough. Asking if you need a degree for doing it is a bit like asking if you need a degree for “writing”. Writing what? A blog, autobiography, a screenplay, a novel, a scientific publication, a poem?
Finally, programming is just a part of the software development cycle. As software is getting more complex its relative importance is steadily decreasing in favor of the system/architecture design (that’s what engineering skills are very useful for) and verification, deployment etc.
Do not feel bad about my comments. I actually know a lot of brilliant people that has no academic degree and their work is amazingly good; in the other hand, there are a lot of people with not one, but a lot of degrees, certifications and that stuff that cannot write one line of decent code.
But I think that good programmers need to have a good theoretical background: data structures, algorithmic efficiency, good OOP basis, etc. Starting to develop professional web sites with one book of Java Spring Framework and the other one of HTML is not the way to go, IMHO.
All of this is pretty trivial stuff for someone passionate enough to dedicate significant amount of their freetime on programming.
My experience tells me otherwise. Time and again, most untrained people have demonsraed their lack of knowledge in these concepts.
Although in fairness id like to distinguish betweenm “programmers” and “software engineers”. The former being able to write function(s) and perhaps not requiring formal training. The latter being able to take a set of requirements and produce a project on-time, and definitely requiring formal training to be “good”.
Of course, there are always exceptions, but I’m speaking in generality.
You mention training, and not education. Education is what you get from a University, not training. Training would be given by the company that hires the programmer, whether they were considered educated in programming or not. Training is required after University, or else you end up with programmers that can write “Hello World” and little else. So, by that self-taught is just as good as university taught, and I agree with that completely. As a side note, both programmers and software engineers require training after they have been educated.
I have to admit that the mental image of the boss proudly saying “Well, the last guy I hired, he didn’t know anything!” makes me grin.
But seriously, we won’t have to go far down this path before nobody remembers that “magic” isn’t the right answer to “how does it work?”
well, when I graduated in ’03 with my CS degree I couldn’t find work unless I went north(I live in southeastern Ohio if that tells you anything)
I got a call one day in Jan. of ’06 from a former professor while I was washing my KFC uniforms to turn back in since I had quit in a huff. He called asking me if I wanted a job. Stupid me, I took it. Been working for a university for 4yrs in a programming capacity and not getting paid like one. He has a tendency to just fix the immediate problem instead of fixing it long term which drives me crazy.
Guess I’m just stupid for not taking the risk of leaving, but if I had I wouldn’t have met my wife who now is an R.N.
Edited 2010-07-15 23:22 UTC
I reject the implicit premise that a self-taught programmer isn’t capable of “advanced development expertise” – nor that an academically educated programmer HAS such expertise. It does not mesh with my experience reworking Ph.D educated spaghetti.
Of course I’m biased – I am a self-taught programmer.
A college-educated programmer is taught a certain set of skills. Whether they really learn them or apply them properly is another matter, but you can be fairly confident that they’ve been exposed to certain types of teaching. They may also have knowledge well beyond what’s taught in college from being self-taught or from what they’ve learned on the job.
A self-taught programmer learns whatever they teach themself. They’ll learn on the job just like the colleg-educate programmer would, and there’s plenty that they’ll learn which a college graduate learned in school. But you can’t rely on them having been exposed to all of the concepts that are taught in college. There’s stuff that a college graduate is almost certainly going to know that the self-taught programmer won’t.
Now, ultimately, it all comes down to the programmer. How diligent are they? How much do they strive to improve? How smart are they? What skill set have the actually acquired? Etc. Etc. But a college education goes a long way in getting you there.
One of the best programmers I know didn’t go to college, and I’ve seen plenty of bad college-educated programmers. However, a college education does a lot for educating a programmer, and one who doesn’t go to college is going to have to learn that much more on their own and have to prove that much more to any potential employer.
So, I’d say that you can get great programmers who never went to college, but if you intend to be a programmer, and you’re trying to decide whether to go to college or not, go to college. If you’re hiring, then you’re really going to have to look at each resume and person individually, and the odds are that unless the non-college educated programmer has a fair bit of work experience under their belt already, they’re not going to be viewed as favorably and are less likely to reach the stage that they get an actual interview, let alone get hired.
When I started out in IT, I knew I needed a degree to get anywhere. I changed over from engineering and don’t regret it at all. What I have learned is that learning comes full circle. You start out learning a subject. And at the undergraduate level, maybe thats all there really is. But once you start grad school things change. You learn HOW to learn. So now that I have an MS in IT, I work at a university. I could take courses all for free forever if I wanted. But I have found that I can now learn faster on my own than I ever did in a class. Maybe some people figure this out on there own. Hind sight is 20/20, but man the things I could do if I was 18 again.
You … studied for an attained an MIS in IT, and you now work for a school?
Why not corporate?
You said it.
Kids these days probably fail to appreciate how much better their opportunities are compared to my generation (thirtysomethings). They have Linux, internet, countless programming languages and libraries available for free. Stuff can be deployed to the whole world trivially through web apps (and stuff like “Google App Engine”).
Whereas as a kid I had to pirate turbo pascal 3.0 from school to get access to a modern programming environment…
This should be the golden age of self-taught programmers; I predict the time of staring at degrees will soon be over.
Ha, as soon as these self-taught programmers get to fill their first use case or user story in a .doc document you see the difference between him an an academic developer.
Of course, if what you need is a coder and just a coder then, why not?
Having been self-taught from books and magazines in my upper-elementary school level, I fault the primary and secondary school systems rather than the post-secondary systems. Programming is something that is as fundamental as math itself and people in other pursuits in life would benefit much more than the generalists that the schools in this country crank out with their assembly-line like mechanics.
I went back to college and got a 4-year degree and graduated almost 3 years ago. The degree meant nothing despite being from one of the best public universities in my state for computer science. I graduated magna cum laude and still, no permanent job. I got a 3 month consulting job after graduation and did well at that job, just in time for a hiring freeze at that company as the economy took a nosedive.
I think that the 17% unemployment rate among computer science professionals is accurate and well deserved in the lower ranks of educational institutions. It’s time we modernized the elementary school systems to integrate programming into their curricula for math and logic skills.
I’m a software engineer (yes fancy word… but also a licensed teacher). The problem you face with computer science in high school is that there are too few students who understand algebra.
I can’t explain how I ‘just understood’ variables and sequential steps. What I can tell you, is that 90% of any high class class does not get it. Many get by and just memorize or copy and cheat. Note, I’m talking about general algebraic math here. We’ve been teaching such math for decades and haven’t figured out how to teach kids that math.
So I doubt we could teach people to truly ‘get programming’ If they have a logical sequential abstracting mind… then they might take to the field. Otherwise, they go a different way. Even if it was possible, I’m not sure I’d want everyone to be as neurotic as programmers… I think that logical sequential abstracting mind is not all great
I remember being a manager at a Pizza Hut when I was young, before I got into computers, and taking applications from college graduates – someone of them were just awful.
People who couldn’t spell, couldn’t write a resume neatly, had problems with grammar – had nevertheless managed to graduate from College.
Then again, some brilliant minds work at Universities, but Universities cannot hope to take someone who isn’t that smart or motivated and expect that person to compete with a self-taught individual – it’s not that self teaching is so important – its that category of person who self taught themselves is so motivated.
In other words, if you aren’t very motivated you aren’t described as ‘self-taught’… a non-motivated person merely tries for a little while, fails, and doesn’t bring up the subject again.
So its not a fair comparison – of course self taught people are better, on average, than college graduates – but if you took a fair comparison – the most motivated of college graduates and compared them to these self-taught – in that comparison the college graduates would fair much better. Then you may see some refinements that would weigh in the college educated person’s favor.
Forget about computer science, I have another passsion, the Russian language, now I’ve been studying for 8 years, every day, reading russian for an hour or two.
Compare my success to the average college graduate with a degree in Russian literature, and there is no comparison, of course I’m much further along than they would be.
However, is that fair, constant studying for 8 years, vs. their mere 4 years? If you look at everyone that attempted to learn russian, via Pimsleur, Rosetta Stone, or a similar self-study method, you see the self-‘attempt’ group, did astonishingly bad, near 99 percent failure rate.
I say that from experience, having interviewed hundreds of people (yes, not a scientific sampling, but good enough for horse shoes).
But if you look at ‘self-taught’ past tense – implying success – then the self taught would beat the college grads, any day.
I took Ancient Greek while in school, minored in it. The students that were self taught for either 101 or 101 and 102 typically were a lot stronger than those that took the classes. It was very evident in class. We all used the same text book too – and they were able to test out of the portions they were self taught for.
So, I do agree – it depends on the person and their motivation. But those who are self-taught do tend to have (i) more motivation, and (ii) are more passionate about it. Both those (especially passion) yield better.
As to your quote of 99% failure for Rosetta, etc. – it’s most likely they were not (i) motivate, and even more importantly (ii) passionate about it.
Most successful programmers I’ve worked with have breadth of skills. I have a friend who is a musician and amateur photographer, that served him well working for companies that develop creative software. Unfortunately with the state of math and science education in K-12 system, a lot of CS students wind up having to play catch-up and are exempted from many breadth requirements. Sometimes the unrelated soft skills are important. It’s nice to be excited and interested in technology, but if you have a passion for industry you’re working in, that’s great too.
I think it also depends on what level you’re working at. I’ve had CS grads tell me that a lot of the theoretical stuff they learned was useless. They don’t work designing compilers, file systems or new operating systems. Some have said they would have liked to get more knowledge in business areas like project management. For folks who do want to go hard core into the depths of computing, a CS degree is great. But for those who don’t want that, a more interdisciplinary approach to software engineering may be more helpful.
Colleges and universities should be turning out grads with a well-rounded education, but with the course load for programs like CS, it’s not always possible, too much catching up on basic math and science.
I don’t know how many times I’ve heard this nonsense from people about how “CS isn’t needed” or “CS is a dead end.” The only people saying it are people who don’t have an education in CS because they don’t fully realize the benefit of it.
Computer Science is about conquering complexity. Anyone can write a simple program, but when you get into the details of solving truly complex problems which need to have scalable solutions, then you get into areas where it’s important to understand how data structures and algorithms can help you conquer a seemingly complex problem in a simple way by breaking it down into it’s constituent parts.
Like another poster said a self-taught person might be able to build a house, but an architect will be needed to build a skyscraper.
Self-taught programmers can handle some simple problems…. but when you want a large scalable system which can handle enormous amounts of data efficiently, then you need to bring in the big guns.
GC
Likewise, those who say “CS is needed” and “CS is not a dead end.” are those with CS degrees.
Neither is a particularly useful sample set.
As a self taught programmer who can handle more than “just simple problems” and who has in the past worked with code written by PHD holders I’m going to disagree.
Hey, with all this anecdotal evidence, I sense we’re really getting somewhere!
Yes, it is a dead end, but not for the reasons many think.
Most companies right now are just getting by on talent from the .com boom when the best of the best went into the industry. They are now the architects, product developers, managers…
When you have all this top talent in place, you can afford to just dump a lot of the work on anyone. Such is the case with mr PHD at zoho. He had the vision of zoho, probably organized a lot of the company..,
Now the question is… will you be able to grow one of these random basic programmers into that kind of leader? Probably not.
And so you will end up with a glut of people capable of doing basic programming tasks, but no one capable of architecting.
Anyone in the field sees it now.
The tendency is to have C level programmers, C level business analysts, C level, C level requirements analysts, project managers and nothing gets done.
It’s like in high school… trying to solve a calculus problem. 1 A student could just do it. Throwing C students at the problem really doesn’t do anything.
And so as these experts retire or leave the field or move too far up the company, and too few top people are going into the field… every company will become a bureaucratic blob. Spending way to much for 10 C level people, when a 3 good engineers would have sufficed.
Is it a dead end career in the long run? Yes. I sure as hell wouldn’t enter the field today. A good software developer could be a good accountant, doctor, dentist, nurse, teacher… which is a pretty good long term career in the western world.
Will it be lucrative for the few of us still lingering around? Absolutely… it’s been good to me.
Edited 2010-07-16 02:23 UTC
Ok, great, if you have an internal training system like Zoho then untrained people might fit in quite well. However, without any kind of internal training and minimal supervision it is a disaster.
I am sick and tired of electrical engineers and mathematicians without the theoretical understanding of essential Comp Sci principles (OOP for one) messing up projects through poor design, like of forethought and general “quick and dirty” fixes. I mean, just the other day there was someone seriously suggesting that we use the waterfall model as a SW process in the company (and we undertake relatively large software projects). He obviously had no concept of agile and/or iterative developement.
I find also with people not trained in software (and by that I mean software engineering and/or Comp Sci) that they view SW as a second class citizen because its the most easy thing to change when something goes wrong. The funny thing with this is that we actually spend more man-hours developing SW for our projects than the hardware (we’re in Aerospace)!
SW is the more complex part of the project, not just in man-hours but because design is so unconstrained (compared to the HW) and a hugely unconstrained design-space is a timebomb if you have untrained people working within it.
Because ultimately what businesses needing good programmers want is good programmers, and a CS degree doesn’t necessarily make you one.
I’d even dare to posit that ultimately the best coders are just very smart people that know how to solve problems and if they are worth their salt, they will have all the damn qualities a “classically” trained coder will have.
A good auto-didactic coder will write maintainable and good quality code, and if he or she is any good, will probably think up more creative and/or effective solutions while thinking outside the box a college or university education will frame someone in.
Of course, there are also good programmers that do have a CS degree, but I’d say that CS degree does not set them apart. Those people would have probably started coding anyways, degree or no.
But of course, I’m biased, since I am an autodidact.
What makes you think these “very smart” people do not have a higher education or took CS?
What makes you think they should have a higher education or a CS degree?
You don’t need a degree to solve complex problems.
Edited 2010-07-19 12:12 UTC
I think there are two main points.
1. Software engineering is different from programming/coding/hacking a few functions. The former requires more knowledge for a successful outcome.
2. Anyone can learn anything themselves and its really only a question of time.
Hackers/coders can learn the fundamentals of programming in their spare evenings over the course of a year or so.
However, I seriously doubt someone has the time to compress my 4 year full-time degree (excluding thesis), of which about 60-70% was spent on SW Engineering/Comp Sci or related, into spare evenings. It’s simply not possible.
Of course, maybe if someone didn’t work for 3+ years and spent most of their time learning software engineering they would learn as much (possibly more) than I did. But then I doubt these people would be looking for work. And there is also the issue of lack of reliable expert opinion if you#re not at a university (I know some lecturers are useless but the internet is hardly a reliable source of good information).
In the beggining of modern computing, hiring a developer for a company that wasn’t a software company was something exotic.
Later, as demand grew and more and more people became involved in software creation, needs arose and companies that had never thought about it began asking for inhouse development.
Software development in those days required specific knowledge and equipment/software that wasn’t widely available. So professional developers was the way to go.
Today, when almost everyone has used a computer even at school and has taken at least a few hours of basic programming and software development tools are too powerful, but also are embedded in office applications with wizards and automations never imagined before, custom needs can be serviced from the inside with relatively low cost. No need for expensive developer dudes that are superhuman with brains the size of South Dakota.
However there is also a turning point being reached. Software development is rapidly going online also more and more things are outsourced. That means that uber geeks with 2 doctorate degrees in computer science and no girlfriend just don’t have to move in to the office and so stay in their mothers basement earning half a million a year managing 100 developers each, all by remote.
Programmers are to software engineers are as brick layers are to architects. In a non-tech company a Computer Science degree is not important. The business, its goals and objectives are. As long as it works and you can fix it when it breaks, nobody cares.
There is more to a person than a piece of paper certifying his/her credentials. Some people are very bright and passionate about the subject they want to study, but they may not be in the position where they have equal opportunity to prove who they are.
There are many factors that can affect one’s academic “performance”, for example:
Mental/physical health issues. Many people suffer from stress and depression. This can be caused by things like death of a family member, financial worries, or disruptive atmosphere at home (e.g. abusive parents, etc). This often has negative impact on your grades.
Social background. Not all people are treated equally, discrimination is still pretty common. Education is not free in some places and can cost huge sums of money. If you don’t have wealthy parents and have to get part/full-time jobs as a student, then there is a very good chance your grades are going to slip.
It is also possible for college/University lecturers to be pretty mediocre at what they teach. I’ve seen a few of those and there is little you can do.
My University experience was quite negative, I remember a lot of anxiety and frustration. Not because I was stupid or lazy, but because of the things outside of my control. The most knowledge I ever got was from buying books and reading them, not from going to dull lectures, or doing useless assignments.
Knowledge is universal, if you can learn something on your own, doesn’t make you a lesser person, compared to someone who may have been taught by a famous professor.
If you are in the position of hiring someone, look at him/her as a human being and not just some commodity. There are many other factors beyond the academic qualification that may be important. Things like openness, honesty, loyalty, desire to learn new things, previous experience, team interaction, etc.
I think it should come down to an exam. If you can sit in a room and pass that exam you get your bit of paper. End of story. Most people will need 3 years to pass this exam, but it shouldn’t be the only route. I’m damned if I’m going back to uni now (I’m a married dad now with a mortgage), and I know I know more then many who did go the uni route, but an exam, sod, it, I’ll do. I don’t think there should be a limit to number of times you take this exam. This is to the advantage of uni folk to, if they pissed it all up the wall at the time, years later they can go back to the exam and improve their mark. Or if they did a degree in something else, they can get a computer/programming qualification without starting at the beginning. When going for a job, I always see it as a good sign if they do a computer/programming exam before they talk to you. Means it’s a place where a bit of paper is no hiding place.
Simple paper exams are worthless. People study to beat the exam. They don’t study to learn the knowledge the exam tests for. This gets you paper MCSE’s who can barely manage to add a user account to Active Directory.
What you need is a practical lab examination like the Cisco CCIE. If you can demonstrate the ability to solve actual problems in a mostly real world environment, then you know your stuff.
This type of exam is expensive to set up, monitor and grade, so not enough places do it in my opinion.
No arguing the exam would need to be done right. There is motivative to game the system on both sides. The uni wants lots of passes and people to use their system. The students wants to pass without work. But the the point is to have a system which can bring in people like myself out from the cold, without asking us to spend money and time we don’t have to jump through loops. If we fail, we need to work harder. If we pass, there really isn’t anything tangible we are missing.
I am half college-educated, half self-taught (at least in the beginning).
I started in college but had begin working at DEC. I found college to be boring as I was already doing the work I was going to college for. After two years I did not see the point and stopped going.
HOWEVER. The CS degree at the college I attended was not the best. My favorite classes were creative writing, logic and Data Analysis. My favorite language was Ada.
I was fortunate to work in a company that mentored and also had good programming practices including required commenting, peer code review, good development/testing life-cycle, etc. I was also fortunate to have had some of the most no-nonsense and brilliant software engineers as my mentors.
Now, I am just a shadow of them, but I think the college vs. non-college issue is fluid. I think some people CAN be excellent without schooling; I also think some people WITH schooling can be not-very-good, not because they lack intelligence but because when it comes time to practical implementation, they lack a certain … well they don’t do KISS.
Wow, that is really rare. Care to expand on this?
I pretty much deal with the other extreme with a variety of people, college educated or not in Computer Science. I know of a huge shipload of people who tend to go the quick and dirty route until their stuff blew up in their face.
I mean, even laypeople make the same mistake of not planning at all. Just look into business, gambling and people’s workspaces and you can already see something that extends to more than just computer science. I would even venture to say that kitchen cleanliness is correlated with code structure sanity.
Ada? Always loved it. It paid off too… sort of. It turned out an important piece of software [that’s all I’ll say] was written in Ada and it was handed off to me because I was one of the few people who knew ada. So I garnered some minor glory from that.
I like the structure and strict typing of ada, yet you CAN (with some very obvious code) override data types if necessary and remap data types…. stuff like that.
I also enjoyed it’s simple but useful build environment (checking and recompiling dependencies and such).
…
Re: the KISS thing.
Yeah, there is that too. But KISS does not correlate to “quick and dirty” (which I know you know) but to keeping code (and design) simple when it does not HAVE to be complex. Especially in my particular environment when every new guy that comes along in management wants to bring in his or her practices and techniques from their previous position. I don’t know how many times we’ve overhauled our software in the past decade. It does NOT have to be that way. Simple, but good design can be built on and maintained for extended periods of time and the latest and greatest methodologies are not necessary.
Edited 2010-07-16 18:24 UTC
A lot of the anger and angst from the self-taught comes from the idea that there is a glass ceiling.
There is! And there is a good reason for it, beyond just beying exposed to advanced topics.
Discipline.
Suffering through classes like “Social Health and Diversity”, and “Workplace communications” was pure hell for me. I was so bad at writing that I had to take “English 1010” Three times.
A college graduate knows how to hold his nose and do a good job of an unpleasant task.
OTOH, I know a lot of mediocre developers that made it through school.
I think both the passion and inquisitiveness of a hacker, and the discipline of a student are needed to be a top notch developer.
There has been a lot of great discussion in this thread! This really is an interesting topic of discussion and I can’t help but contribute my opinion on the subject.
At the end of the day, I believe there are multiple routes to success and greatness. This topic could be argued for a long time and I’d be willing to bet that people on both sides could carry on providing examples to prove their point or disprove the other.
The value of a CS (or related degree) is directly proportional to how much one values formal study. By that I mean, that people have different learning styles and this is well studied. Some people thrive in a structured learning environment while others suffocate. If you learn well through formal instruction, and are passionate about the subject, then a CS degree will probably help bring out the best of your abilities. If you are a more hands on or independent learning, and are also passionate about the subject, then you’re probably best served by independent learning.
For this reason, I believe it is unfair to make judgements about one’s depth of knowledge and quality of work based on whether or not one has a degree in the subject. If you are a good at what you do, passionate about it, and driven to succeed, others will notice, regardless of if, when, or where you went to school or what you studied.
Statistics that show that university grads are more successful (measured in terms of earnings) are difficult to qualify. There are likely certain mental aptitudes, behaviours, and socioeconomic circumstances that post-secondary graduates share that may be different from non-post-secondary graduates and these factors may influence career success or earning potential more or less than one’s education, qualifications or experience. This I’d be interested in learning more about and would love to read some studies on it.
In my own case, I value both informal and formal instruction. My original degree was in business. The whole time I was formally studying business, I was teaching myself CS. I then went on to work as a programmer for the next five years and have recently returned to school to study CS. I am enjoying studying CS but I can’t say if it’s making me a better programmer. I believe it is making me a better person though. What I value about post-secondary education is not hard skills – I develop those better on my own through hard work and dedication… What I value is the life experience and perspective. You are forced to learn things that may not interest you… to study things outside your field… and I feel this added perspective and new experience makes me a better person, which to me is more important than being a better programmer or whatever else. But that’s the way I learn and that’s the value I, as an individual, place on formal instruction. I would never extrapolate my experiences on to others and assume this was true for all and that everyone should or should not go to university or get some other type of vocational training.
EDITED GRAMMAR AND PUNCTUATION
Edited 2010-07-16 16:11 UTC
The determination of a good programmer is not training or degree. There is a certain way of thinking. It is almost as if some people are born with it, and some are not.
Those who are able to program may be able to get a good deal of useful thing from an education, making them even better, but those who do not have the temperament or aptitude may still be able to work hard enough to make it through.
This leads to good AND bad programmers of both the self educated and formally educated types. There have been several studies into identifying those with the aptitude for it, and those would be best. Of those with the aptitude for it, those with the formal education may be better than those without, but even those without the formal education would be better than those with degrees and no aptitude.
http://www.eis.mdx.ac.uk/research/PhDArea/saeed/
http://www.bricklin.com/wontprogram.htm
http://www.codinghorror.com/blog/2006/07/separating-programming-she…
I would have modded this up, but I already commented on this story somewhere.
But I totally agree with you.
As I’ve been saying for two decades, a degree in computer science doesn’t mean you’ve learned jack **** about anything, apart from how to leech off mommy and daddy for an extra 2-8 years while putting yourself a decade into debt in the process.
I have rarely met anyone with a degree in computers who learned ANYTHING useful – from people who think they are web designers from taking courses in Photoshop, Dreamweaver or even FrontPage (the only thing you can learn from Dreamweaver is how not to build a website) to people with alleged technical learning that you end up having to handhold through the simple task of installing a second hard drive in a machine… To the point I’ve had kids with bachelors going “Computers can have more than one hard drive?”
Back in the mid 90’s I handled hiring for a computer company inside the 128 belt near Boston, MA. The stream of kids with degrees that were completely undesirable due to not even knowing the most basic of skills needed to be line programmers or road techs was appalling; to the point we were going to end up spending so much training them — and worse, making them unlearn the total BULL they had their heads filled with by the teachers who were unqualified in their alleged field — that we ended up being better off and getting better employees out of going to high school job fairs. We hired green kids and taught them on the job; the ones who couldn’t afford college being thankful for the position and experience.
Excuse me as I commit a major blasphemy, but higher education is not, nor should it be for everyone. (though with grade schools pushing techniques like “social promotion” it’s going to have to be since, at least here in the US our high schools are lucky if the kids are graduating with what used to be a fifth grade reading level) It’s hardly surprising these pieces of paper are worth less than a sheet of bog roll. First, what good is a four year education in a field where 3 years is obsolete and five years is the scrap heap? Second, most of these teachers have not only no practical experience in what they are teaching, most of them I’ve encountered seem to be completely delusional about the real world; hardly surprising as they’ve never had to deal with it.
While there are certainly a handful of colleges that do it right, for each of those there are hundreds that are either a decade behind the times, little more than sock-puppets for corporations like Adobe and Apple, and in general do more harm to society than good.
Especially if you take the time to ask “and who’s going to pay for it” — since the lie of “everyone should go to college and get a white collar job” that’s been shoved down kids throats since the early 80’s is just that — a big fat lie. It’s attached a stigma to blue collar work, which is really the work that NEEDS to be done in a healthy society, resulting in a tanking economy and unemployment not from “not being able to find a job” but being unwilling to take anything less than the pipedream. See most recent college grads again living at home with mommy and daddy until they’re 30+.
Here’s a tip, suck it up and take that blue-collar job that might actually produce something of value instead of being a leech on the teat of society. That or do something useful with your life like joining the service or getting a real job to ease the financial burden you’ve placed on yourself, your family, and the nation you live in.
Edited 2010-07-17 10:07 UTC
Learning photoshop or how to install a hard drive is not computer science.
And Computer Science has little to do with Computers. It’s math.
You missed my point on that one — I know people who’s ‘degree in computer science’ amounts to little more than learning Photoshop and Dreamweaver… see the kids vomited out of the local state college near me. Not only should that not be considered computer science, it shouldn’t be considered web design either.
It’s part of why computer science degrees are worthless — many places all it takes to get one is mastery of some off the shelf crap like Frontpage. Poof, Computer science major; RIGHT. It drags down the reputation of the handful of places that do teach something useful.
… and yet is a simple skill one would expect them to have if they want an actual job in IT.
Not that the math side of it teaches anything useful since it’s all rote memorization and little if any real problem solving skills.
What was it Patton said, don’t tell a man how to do a job, tell him to go get it done and he will surprise you with his ingenuity.
Edited 2010-07-19 13:11 UTC
Hah. See my previous post about why CS degrees are needed. If you want an amateur working on your application, then that’s your business. If you want someone who actually knows what they’re doing, get someone with a CS degree.
The best comparison I can make is that between a medical technician and a Doctor. A Med-Tech is basically about patching holes and doing the simple stuff. This is what some people need, but, occasionally, they need more than that… sometimes they need a Doctor.
GC
As has been stated previously, University should not be for everyone. I’m old enough to remember when children failed classes and were kept back in school and a university education was the exception not the norm. Governments need to invest more in primary eduction, with the realistic expectation that not everyone will be able successfully complete a degree program. Those who prove they are capable of completing an degree should be able to do so without the strangling debt that so many are saddled with and any kind of scientific or engineering degree needs to have a very strong mathematics/calculus/logic component. Without the maths a programmer is a code monkey; nothing wrong with that, but limiting.
There is a big difference between skills needed for Application Programming for business applications and true Computer Science. Most companies do not need the latter at all.
The disconnect between what is taught in Computer Science (math, computer architecture, algorithms, compilers, OSes, etc.) degrees and what is needed in application programming jobs (problem solving, programming, communication skills, databases, and so on) should not be a surprise.
There is an overlap but a Computer Science degree is overkill for application programming, and is truly used by very few companies.
Computer Science is NOT programming. At Georgia Tech, I know several PhD students who have written one or programs during their stay here so far. And those programs were only for class work.