Does Learning To Code Outweigh a Degree In Computer Science?
jjp9999 writes A college degree may not the best route when it comes to jobs in coding. Jobs for computer science majors flow aplenty, yet employers (and job-seekers) often learn quickly that the college grads don't have the skills. "This is because the courses taught in virtually all computer science curriculums focus on theory, and they only dabble in teaching practical programming skills," says Cody Scholberg on Epoch Times. This ties into a unique factoid in the world of programmers. Nearly half of the software developers in the United States do not have a college degree. Many never even graduated from high school. Instead, many aspiring programmers are turning to open source learning materials, or to the new programming bootcamps popping up around the United States. While theory does have its place, the situation raises the question of whether colleges are teaching the right skills people need to join the workforce, and what its place is amid the rise of open source learning.
I wouldn't say learning to code outweighed a college degree. But having the mentality that would lead one to want to learn to code... That's a sure bet. Of course, that mentality might lead one to attend college but it's my contention that that is less advantageous for many (certainly it turned out to be a time sink for me).
Let me rephrase that question: "does knowing how to do a job outweigh knowing abstract theory about that job?" I think the answer there is pretty obvious: *of course* coders who actually know what they are doing are more valuable to an employer than some kid with a CS degree and no idea how to actually do a programmer's job.
There are too many things that an employer is looking for from a degree that has nothing to do with coding. Ability to follow through with a royally painful task, well rounded as in able to communicate clearly and plenty of other things.
Do colleges actually teach useful skills? I got the very basics out of my college and the rest I learned on an internship and on the job. I do think colleges could be improved but I'm not smart enough to say how.
It's all about what you know, not where you learned it. It's tricky to get started fresh without references in any career.
Shoot Slashdot ate the greater than sign in my title. It was supposed to be "Is Coding > Computer Science? Of Course!"
I think the debate then needs to focus on how vrs why. Theory pokes at thw why. Learning to program is learning how. Can you get a job knowing 'how' and not why? YES. I have a CS degree. The why is important to me. Its helped me grow and move beyond. And I think it makes me more flexible as I can understand things better than if I just knew how. This may not be the case for all.
From an HR persective, I would see the degree as 3rd party approval of what you've been exposed to. Its a benchmark of sorts. Coming with experience and self-taught programming requires you have a repuation that you can stand on build by yourself.
>>A college degree may not the best route when it comes to jobs in coding.
If you plan to be employed in the technology field, then you have to have a degree in computer science, engineering, math, or physics. Without a degree you will find nearly impossible to get past HR gatekeepers. Nobody actually cares where the degree is from, just that you have one.
Sure, you can beat the odds and be The Exception, but life is hard enough already that it is unwise to invite additional difficulties.
These are the graduates who end up in USA via H1-B process most of the time in HR, IT, banking projects. Quality of the graduates vary significantly. But they all make decent salaries in USA, comparable to high quality engineering grads from US schools on salaries. I have seen these programmers of questionable abilities pulling 100K to 140K a year easily.
sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
Computer Science is teaching EXACTLY what Computer Science is supposed to. Theory. It's an academic pursuit, not an applied skills program.
If you want to learn how to build usable software, that is a different skillset.
I've got a Comp Sci degree, and I've been a professional software developer for the past 19 years. While some things I learned in my degree program have come in handy, I learned to code professionally AFTER I entered the workforce, and primarily from working with other people's code and being mentored by those that had done the job.
There should be a professional "Software Engineering" (or call it something else if the Engineers get upset about the term) program for those that want to actually build code.
So much of the code that I've seen is poor because the people writing it have not learned the fundamentals of requirements determination and problem solving skills. Then you need to understand how to choose appropriate algorithms and tool sets to apply. Then you learn what you should have known in the first pass and you start again on a better solution. While colleges attempt to produce people having those skills, they often do not provide enough practice. For all four years of my degree program, only one course was about software engineering itself, and because it was only for a quarter, not nearly long enough to cover what takes years to pick up once you are out in the real world.
You've never needed a degree to do anything. You can learn anything on your own in time. A degree is just a piece of paper you spend far too much money for to say you know something. But employers need to have some sort of proof to say you actually know what you're talking about. Having your own successful projects, some interesting employer history, or a degree are the only ways they can tell really.
Am I going to learn all the skills I need in undergrad? Probably not. But I will learn how to deal with idiots, how to get along with others, and commit to something and follow it through all the way. Plus HR wants the degree - so you get the degree.
People who can teach themselves to code are vastly more effective then those who do not teach themselves.
*gets popcorn*
A Programmer Codes. An Engineer Designs. Which do you want to be? The theory that CS teaches is mostly and directly translatable to Software Engineering.
And on a tangent, anyone with the intelligence to get a CS degree should instead be focused on getting a couple bachelors then MIS or MBA. Twice the pay for half the work.
Any decent candidate has *both* a CS education and experience. That's the way engineering has been since day one. This article has a sly hint that somehow getting a CS education makes you less fit for the job. Wrong.
The truth is that neither education nor experience makes you a good programmer. We all have to study our craft, and we all have to practice our craft.
It's possible to give yourself a thorough computer science education with self study. It's hard work, but possible. The trouble is, most self-taught programmers only dabble in the core CS fields. Data structures, algorithms, numerical methods, analysis of programs -- these are hard work. And 99% of the time, they're useless. But that 1% is what makes the difference when a hard problem comes along, and when it does, the knowledgable programmer saves so much time and money that it's worth it.
When a candidate comes in my door without a CS degree, he or she has a much higher hurdle to get a job. A degree doesn't prove you're a good programmer, but it does prove you know how to work hard, persevere, deal with asshole professors, and achieve a goal that takes years -- all critical skills on any project. Someone without a degree has to have a LOT of experience to show match this achievement. On top of that, there's a pretty good chance a CS grad actually knows computer science.
If you plan to be employed in the technology field, then you have to have a degree in computer science, engineering, math, or physics.
I have never found that to be true at any company I've ever worked for.
As a consultant I have never had anyone ask about my degree.
I do have a CS degree, and I find it valuable myself - but I don't think everyone needs one.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
You are assuming that the job is only coding. There are many positions that require computer science in addition to or instead of coding.
As a person who not only does software development but also hires software developers, I would never hire someone who doesn't have a bachelors in a programming related degree (CS, CE, MIS). Although they never have the exact skillset to be a very productive developer at first, they have a background in theory which is necessary to be a good programmer. Hiring people right out of school and expecting them to be productive immediately is stupid. But having the background to understand things like lists, arrays, hashmaps, variable context, and the difference between strong vs weak typing and the pros and cons of interpreted vs compiled languages is invalueable and people I have worked with that didn't have that background were poor programmers. If you want to get cheap labor by hiring right out of school, expect to have to teach them the specific language skills you are developing in. And of course the best people will have already been doing some sort of programming while in school so should have some experience.
You are describing a trade school. Colleges/Universities are about a lot more than training job skills. I see computer science being about theory. Go to college if you want to study theory. I see software engineering being about practical work skills. Go to a trade school/boot camp/etc if you want to study practical job skills.
Computer Science is more math and theory and the underlying nuts and bolts.
Coding is just one specific application of that knowledge.
One of our Java development teams was discussing a new project, and one stated she doesn't know where the code runs. I over heard this, and went over to join the discussion. This is one of our best teams, and know one knew the answer. So I explained how Java Server Pages compile, and where each piece physically runs on multi-tier architecture. When these people learned to code, they learn though an IDE. Hit compile, and deploy the code, and it goes off into wonderland to run. They never learn how it actually happens. Have the same issue with SQL. Without the mathematical knowledge behind it, coders can't write complicated queries. Just learning to code is a good career, but you also need someone with the depth of knowledge to make it all work.
Being a developer is about more than code.
For example:
1. You'll follow and (perhaps later on) write and refine software specifications. You need to learn different ways to do this.
2. You'll need to select appropriate algorithms for the task at hand, and evaluate performance for new code -- which you wrote against a trivially small amount of data -- against production data volumes.
3. You'll need to understand pros and cons of different software development approaches, particularly waterfall and the broad category of "agile". Why would you pick one over the other?
4. You'll need, at least on occasion, to understand one or more software modeling systems, and perhaps to create models that represent what you're suggesting.
5. You may very well need advanced mathematics for your job. Just a couple of months ago, I had to write some vector-handling code, in PL/SQL of all things.
Sure...you could learn all this on your own. But a good compsci curriculum will provide you with at least an introduction to all of these, with some kind of attestation of basic familiarity.
If you want to be "just a coder," go right ahead. However, you'll never be all that competitive with those possessing the larger body of skills needed to be a solid technical professional. Of course, real experience is very helpful in landing the first job. That's what student jobs, interning, and cooperative education are for. I'd never have landed my first job without some of the skills I learned over four terms of co-op.
Let the really smart kids (IQ > 130) take traditional CS. They can deal with the theory and advanced math.
The kinda bright kids (IQ 100 - 120ish) can take Computer Programming where they learn to code in the real world. Teach some business-y stuff too while they're at it. Only math required would be high school algebra and geometry. Maybe some trig but that's it.
Astronomy graduates don't always make the best telescope lens grinders.
Microbiology graduates don't always make the best microscope builders.
Of course it does. You're hired. Your first assignment is to write a simple program to check wether my program terminates or not.
Employers are looking for a specific skill. People with degrees know the theory and fundamentals. Hence, they can pick up a new language or skill quickly. People who focus only on a specific language may know it in depth, but that knowledge may not translate well outside of that specific language.
A linguist can pick up a new language quickly. Someone who moves to a foreign speaking country will eventually be fluent in the new language and know its idioms. A linguist would likely speak a language "proper", while the native speaker would use slang and such.
Language is language, be it spoken or typed.
I have been an employed programmer for about 8 years now, dropped out of school to get paid instead of paying. Every single person I have had to work with who had a CS degree have had two traits in common. First, they love to remind you they have the degree. Second, they barely contribute anything to production except great ideas of how not to do things.
As a non-degree'd person, I have done contract work for 3 separate universities so far. You would think they would have an infinite supply of proud cheap labour to tap before giving me a call.
To be a politician? No, of course not. Fun fact: I studied political science, and now work as a programmer.
I'm assuming the vast majority of programming jobs require the ability to code, and no further domain specific knowledge. This is just based on my reading of many, many programming job listings over the years.
I'm sure there are jobs that require CS knowledge, just as I'm sure there are (programming-related) jobs that require Biology knowledge or Architecture knowledge or whatever. But all of those are niches: a very small subset of all programming jobs require those specific areas of knowledge. ALL programming jobs require coding though, and even among the ones that require domain-specific knoweldge, I'd imagine the bulk involve a lot more coding than anything else.
Nearly half of the software developers in the United States do not have a college degree. Many never even graduated from high school.
What? I pored over the article and the US BLS link in it to find the source of these statements. Aside from a pull quote that appears as an image in the article but isn't even in the article itself and is unattributed, could someone find me the source of this statistic?
... this article almost sounds like it's written by someone with no field experience. Granted that's a low sample set, I'd like to know where the other half of us are. Everyone keep in mind that a Computer Science degree is a relatively new thing and there very well may be elderly coders doing a great job without technically a degree in computer science.
Because I'm a software developer in the United States with a Masters of Science in Computer Science. All of my coworkers have at least a bachelor's degree in one field or another. And my undergrad very much so started with a sink-or-swim weed out course in Scheme and then another in Java. Yes, they were both easy if you already knew how to code but
The only way I can see the misconception spreading is that people who use Wix to drag and drop a WYSIWYG site (for you older readers that's like FrontPage meets Geocities) erroneously consider themselves "software developers".
My work here is dung.
Can we stop using the pejorative term "coding" as tho it were equivalent to "programming" or "developing software"? Coding is for code monkeys.
Employers cannot afford CS majors, so they simply will declare that a degree is not important.
I wonder... when / where can I do dentistry, med. doctor, architect, mycologist, attorney, accountant, civil engineer without a degree ?
What the heck is wrong with this profession and what makes you think that experience can replace 5 years of in-depth studies ?
I live on a day-to-day basis with cs "engineers" without any formal background and let me tell you... it is obvious they don't understand what they are talking about.
If you are hiring someone to develop code and you must pick one or the other, pick the person who knows how to code. If you can find someone with a degree in CS, math, physics, accounting, philosophy, a natural language, law, or anything else who also knows how to code then hire that person.
Especially if they have a degree in the subject matter and know how to program that's a bonus. Sometimes the actual subject matter really is CS. Sometimes it's accounting, medicine, physics, geology, or something else.
Saying one must hire a degreed person (with a specific degree no less) exclusive-or someone with skills is just silly. Don't weight the degree heavier than it deserves, but don't dismiss it either.
Some form of higher education involving logic, problem structuring and rational thinking is needed, though not necessarily computer science. Either that, or taking some sort of structured approach to learning that set of skills elsewhere, e.g. through mentoring or self-studies. You need to figure out what skill set it is that you need to learn, and then make sure you somehow learn it, either at university or some other way. That being said, I know plenty people with CS education who I would say make very poor programmers - it is easy to go through higher education and still learn very little. One of my favourite quotes, "he who has no plan goes nowhere fast". Just being somewhere and following some curriculum is not the same as pursuing a roadmap towards becoming a "real" programmer.
I myself am pretty much self-taught when it comes to programming, having taken an interest in that since the age of 9 with Basic and C64, but never taking any formal training. Higher education in mathematics has given me all the additional experience and skills I have needed. I have worked with programmers and managed programmers for several years, and though they are often better at coding than I am (which is not so strange given it is their job, whereas for me it has been just one of many different responsibilities), I often have an edge when it comes to e.g. structuring, algorithms, wading through complexity, or taking a critical point of view whether we are building the right thing.
If you want to be a top programmer who is productive in a work place, you need both programming skills and higher order rational logical thinking (plus being able to collaborate). It doesn't matter how you acquire it (in terms of learning it, not necessarily how attractive you are to employers). Everything else, e.g. new programming languages and such, is typically easy to learn once the basics are in place.
Colleges are not workforce training grounds. They are for higher education. College should prepare you for workforce training. They should not be training students in the latest language fad but giving students the ability to learn the skills needed to pick up the current fad, the next fad, and so on. Training for today's workforce will not be adequate for tomorrow's workforce. Corporations are attempting to push their responsibility of training their workforce back to colleges. A new computer science college graduate should not be expected to be a C++, Java, Design, Testing, project management, etc expert.There are too many skills that corporations need and that change too often for a colleges to produce such. Go to college for higher education, go to trade schools for workforce training.
If the metric of comparison is employment, you need to be able to produce output rather than cite theory. In fact, I know of no developer, ever, who was hired on the strength of his awareness of theory with no programming ability. There is a chance you could get something like that in emerging fields like machine learning or data analysis, but you'd still have to have some ability to implement your theories or processes. Of course, you'd also have to be an acknowledged expert in the field, and that's not likely without products.
If the metric is the ability to produce a secure, well-architected product that utilizes some of the more popular frameworks and libraries, working with the common IDEs, build and testing tools, team collaboration tools, and awareness of the software development lifecycle, well again, being an actual software developer is better.
If the metric is ease of writing more efficient code (less memory, faster), or being able to evaluate, generate, and implement complex or new algorithms and heuristics such as key based encryption, trend analysis, predictive modeling, physics frameworks, and so on - well, in these cases you need the strength of the CS degree. You can't do it without picking up a great deal of necessary knowledge.
As a side note, at least 98% - probably more - of software business needs revolve around simple data manipulation, trivial calculations, and user interfaces of ever-increasing complexity. They want an inventorying system, or a way to generate a report on sales, or to send a digital payment from one customer to another, or whatever.
Of course, a CS graduate who does not know how to program is a worse candidate for a programming job than someone with a few projects under his belt.
But I have to say, I have very little experience with CS graduates who do not know how to program. Every single Course VI (EE&CS) person whom I knew in college had serious programming chops.
No, I never took a programming class (I TA'd two) but it was because I felt I was a hot-shot programmer going in. Every summer I would take a project that would pay in the 15-30K range, and mostly, it would be finished before the first day of classes. Most of my friends had internships, and those were programming jobs. I very much doubt they were learning the basics on the job, either.
Many of my classes (computer vision, distributed computing, etc...) assumed that we had working knowledge of C (maybe C++) They all had final projects that could not be approached, let alone completed without serious programming skills.
As for those who felt that they needed to learn a language, they were classes for that, as well. I am not saying that there aren't people who graduate with a CS degree without having even basic programming skills, but they seem to be the exception to me, not the rule. Hell, every category has its fuckups. But in my experience, it isn't CS graduate without programming experience vs high school graduates with programming experience. It's programmers with or without a college degree. And frankly, for programming jobs, I tend to hire both. I also happen to spend hours explaining some basics to the ones without a CS degree. In the long run, they may become just as good as the ones with a degree, but they sure do not command the same salary. And it is fair: in general, they take more training.
Actually, in August, I had to recommend a book to one of my guys, and answer his questions about it. He had tried to implement a commit/roll back mechanism without any theoretical background, and had made a mess out of it. No big deal. He was smart enough to learn.
No good deed goes unpunished...
factoid (n): something that seems true, but isn't
The real question is not 'whether colleges are teaching the right skills people need to join the workforce'. First you need to address this assumption that the point of college is merely to qualify you for a job or increase your future earnings potential. Because it isn't at all clear to me that it would be a problem if college wasn't preparing people to enter industry - the only thing that a university degree specifically ought to prepare you for is further schooling and life in academia.
That said, even if we accept the notion that institutes of higher learning are really degree mills and tickets to future career success (which I admit they are fast becoming), why the hell does anybody expect a computer science grad to have any particular skill in programming? Degrees exist for the discipline in question: it's called software engineering. This is analogous to hiring a physicist to do electrical engineering or mechanical engineering work - sure, the physicist has demonstrated some aptitude in relevant areas, but physics training is in abstracted, idealized, theoretical scenarios, so there's going to be some difficulty making the transition to the concrete, rule-of-thumb, applied world of engineering. Anybody who doesn't understand this distinction shouldn't be in charge of hiring - there are computer scientists, there are software engineers, and they both offer different skills that are required in different degrees depending on the project.
Of course, that is how things ought to work in hiring. How things do work is another matter entirely.
Theory lasts a lifetime, practice, lasts until the next paradigm shift (10 years and you're out).
A working programmer and a computer scientist are two different things, but the computer scientist should be able to write a basic program:
A surprisingly large fraction of applicants, even those with masters' degrees and PhDs in computer science, fail during interviews when asked to carry out basic programming tasks.
For programmers, this is a basic test, but when a computer scientist can't do something this fundamental, it calls their higher-level qualifications into question; and even if it doesn't, it makes you worry that their architecture or design will consider real-world issues and implementability.
the vast majority of programming jobs require the ability to code, and no further domain specific knowledge
However, the theory of Computer Science and the history of it is still important to teach an aspiring programmer/computer scientist (still don't even know what that really means.) I think that the CS curriculum needs to teach more practical applications of things, including pure programming, but also necessary skills like using a version control system. Or how to download and install packages on different platform or using continuous integration servers/databases and other commonly used technologies. Learning the theory of SQL databases from 50 years ago is certainly not as helpful as learning how to set up and actually run a local database. More practical/hands on work, less theory and reading text books.
I think you hit the nail on the head here. I am kind of doing it backwards, but I learned to code, got a job, am currently working as a software engineer and am now getting a CS degree as a part-time student.
I don't think not having a degree has been much of a hindrance to me finding a job, but I want the degree for my own self-fulfillment, to set an example for my child, and because learning is awfully fun.
If anyone asks me for advice about whether or not you need a CS degree to develop software, I always say, "You don't need one, but get the degree if you can." Having to learn about pointers, memory management, data structures and algorithms is vital to being a better developer, and not always what self-taught programmers choose to learn.
Nope. University/College is a scam. Just watch youtube videos and read slashdot and you'll be golden.
Disclaimer: I have both an undergraduate and graduate degree in computer science, and while I have an amazing job and make more money than I thought possible, I don't think my education had *any* impact what-so-ever on my success.
Disclaimer2: This question appears almost weekly and is clearly a circle-jerk...
Title aside, the ability to code is a workplace requirement, and if you are not looking at traveling/work internationally, you aren't going to get very far without a degree.
Some of the "college drop out" success stories are no longer just coders. They are now C-Level executives, different rules apply. If you don't have a degree then in general you won't be eligible to get Visas to work in other countries.
Independent about how good you are, without a degree you are restricted to your local geography (country, etc).
Absolutely, to be a top notch software developer, learning to code trumps a CS degree. After all, you can get a degree but who knows how much attention you really paid in class. Further, learning to code goes beyond what is taught in a CS degree.
However, this isn't an issue of theory vs. practice. It's like saying, would you rather have a surgeon that learned surgery the traditional route with 4 year degree heavy in science, specifically biology classes and then went to med school, etc, or a self taught surgeon that learned at a field hospital during a war? Obviously, both would have to learn the basics of surgery itself, that is the actual cutting, the sewing, etc. The former is likely to have a far better grounding in a wider range of subjects to treat the patient, even if the a particular of the latter might be better at the actual cutting and sewing.
When one graduates with a CS degree, they might not have yet learned how to code, especially in a professional setting in a group. A coder can learn everything that a person with a CS degree learned, but that is basically going to each of the CS classes. Sometimes the hinderance to getting the degree isn't the CS classes, it's the other classes required for an undergraduate degree. In either case, to be a very good coder, you basically have to master both the theory and the practice.
... and I didn't have to read the article to know that. Real world experience is better than "untested outdated group think", I mean "progessive college theory" any day. I know may people make 6 figures programming who decide "I'll go to college now, to learn even more about programming" and after a semester or two they all say the same thing "I corrected my professor, he said you cannot do X or Y in JAVA, I tried to explain how we do it all the time by doing Q and R, but he just looked at me and said 'if you don't say it is impossible on the exam, you will not get credit.'" And they stop going. It's terrible when you think about the fact that more discovery and learning is going on during meetups and company events or small hack-a-thons among friends for free or little cost, than at schools charging $25,000 or more a year.
Good Will Programming
Respect the Constitution
I just started an upper division CS course at my university (all coding is in C), and it's already lame. Our first assignment is to solve various bit-shifting puzzles while artificially restricting ourselves to a very small number of language constructs (e.g. we can't use if, while, for, most logical operators, functions, or many other parts of C). It's not clear what we should be learning from this, other than that artificially restricting C makes it really tough. Or perhaps that wild guessing is a critical part of software development.
Does learning carpentry outweigh learning structural engineering?
I hoold a PhD in Physics, but coding is a important part of my usual jobs (i am a consultant).
Educating myself in conding and following a master, and then a PhD in Physics trained very different aspects of my skills.
None of each outweiths the other, and i am feeling very confident that i will never be without a job
Computer Science is largely very specific applied math and theory. It includes algorithms, algorithm efficiency, a bunch of math, data structures from a theoretical design standpoint, and computer architecture. It tends to be very academic.
University programs vary widely on what the programs focus on, but generally Comp Sci is about the math and theory, and programming is something you do on the side to get the assignments done to illustrate the theory you are learning. With Computer Engineering and Software Engineering programs, things tend to be more hands on and focused more on doing than theory.
Programming, as desired by business, is NOT computer science. Business wants the most simplistic designs (i.e. always use linked lists instead of more appropriate data structures), and above all, they want you to code whatever it is FAST FAST FAST so you can SHIP SHIP SHIP. Because generally, most business are not software businesses, and they don't value developers or software beyond getting the minimum quick and dirty solution out of them as fast and as cheap as possible. Also, most business are not doing anything remotely resembling state of the art, and value the ability to hire a newbie to replace you.
CS grads have it rough. They know too much theory to be satisfied with basic programmer jobs, but they don't know enough about efficiently slapping out code day in and day out to have an easy time in a basic programmer job. The degree can get you in the door though. A lot of places filter out folks with no degree.
Not that there aren't some grads who still can't code their way out of a wet paper bag.
There's all sorts of stuff about programming that you will never learn in a CS program, such as when to select designs based on implementation risk and ease of maintenance, rather than algorithm efficiency. It sucks, but the people who pay for you to write the software could not give two shits about how well the code is designed as long as it mostly works and ships on time. For the most part, that CS theory is mostly only directly relevant to later in your programming career, and when you actually have some autonomy to "do it right" versus "do it yesterday", or if you strike out on your own.
The mindset required to be a good programmer or systems / software engineer is totally different from the one required to be a corporate professional.
Unfortunately, college courses take years to define, layout, setup curriculum and teaching aides, books, documentation, etc.. By the time all of that is worked out, the language is probably dead or so changed that all of the course materials are years out of date.
This is why college degrees in Computer sciences related to programming and systems engineering are worthless.
I know this one coder who when to a 4 year state school and have found bugs / oversights in stuff he was worked and I'm not even in QA.
Now it may not be 100% there flat it may be that there QA / testing does not thing out of the box / they only test with pro users who don't use / don't really need parts of what is being made. They people with an testing mine set that have the power to change settings / manually setup different starting points / etc.
names are withheld but they are at least not working auto drive cars or autopilots.
Probably the biggest reason behind all those thousands (if not milions) of failed projects in the industry is coderz who learned how to code without learning why to code.
A degree in computer science doesn't teach you how to code but how to think.
You will always not have some skill listed on the requirements. When was the last time you seen : Wanted someone fresh out of school with 0 years experience in the technologies we are currently using. Though you might see:
Wanted unpaid/paid intern!
Usually what you will see is something like:
Wanted highly motivated individual with at least 5 years experience C#, and MCPD certification is mandatory. Experience with Agile and SCRUM is highly preferred.
You won't get that anywhere except by taking entry level position. And then you still could have your job taken by an H1B visa holder. Many if not most technical schools teach you to pass a certification exam and that's it. Having the certification without the experience isn't going to impress anyone but the the HR person with a checklist, you still need to get past the interview. I have interviewed at least a dozen applicants for positions over the years. I have discounted people because they had the certifications paper but not the skills. Or no breadth of knowledge. The job I ended up with my CS degree not only required programming, but also a good foundation in higher mathematics, physics and chemistry. You won't get that at a technical school. Bottom line pick a goal and get the training for that goal and a CAREER PATH after attaining that goal.
If you're just going for code grunt who just needs to implement X, then a degree is largely worthless verses just general coding ability. By contrast, if you're getting lot of 'I have problem X, can you solve it' situations, theory becomes a lot more important and the coding a lot less. However, i suspect the bulk of programming positions are more the former than the latter.
By Sturgeon's Law, most colleges that offer CS degrees are diploma mills. That isn't to say they're all scams, and you could certainly learn how to program well despite your shitty education, because after all, you really learn how to program on your own in any case, but simply because they teach things like Java and SQL, instead of things like actual fucking CS, you're not going to learn how to solve interesting software problems. You're going to learn how to be cogs in a corporate hierarchy and do what the people who inspired Dilbert ask you to do, valuing keywords on your resume instead of demonstrable achievements.
But if you got a CS degree from one of the schools near the front of this list, it's a pretty good bet you're not a retard, and if even if you're not yet a great programmer, at least you're not one of morons who can't pass fizzbuzz, and we can assume you'll learn on the job and have the theoretical background to keep up.
"Oh, but I'm such a great programmer and I learned all that theory stuff on my own and you can't judge me!"
Who said I was? You're the one framing it like that. Every good programmer is an autodidactic dilettante in many things. You have to be, because every job requires you inhale a bunch of domain knowledge about the real-world problem you're solving in addition to the technology you're using. You're not special.
But the people who spent four, or five, or ten years surrounded by the some of the smartest people their age doing nothing but having fun and (mostly) learning what interests them is going to be a lot more well rounded than the kid who went chasing dollars right after high school. All else being equal, the kid who went to a good school is better at this than the kid who didn't.
Many people are self-taught, not just "coding" but also computer science. It's not like you can't read a few books to get the underpinnings that will ever matter on the job.
OTOH, I've interviewed quite a few people with degrees but only very shallow coding skills (no real understanding of pointers or debugging), and who still didn't have strong fundamentals in computer science. I seriously wonder what some schools teach for four years.
But none of that really matters past the first few years in industry. Trying to get that first job without a degree is a heck of a thing, and of course it will pay less, but after 5 years or so it just doesn't matter.
Socialism: a lie told by totalitarians and believed by fools.
With someone that just codes, runtime equals XXX ms, with a comp. scientist, runtime equals big O notation for time and space.
-- Brought to you by Carl's JR
Schools are in the business of producing degrees and protecting their reputation. They aren't in the "teaching" business. If I knew more about computer science when I was in high school; I'd have applied to very different schools. Unfortunately, I needed a few years in my career to really learn how to judge a school.
No, I will not work for your startup
Every great programmer I know has a university degree AND learns to code on their own. The college grads that don't have any skills probably haven't bothered to look at any open source code or learn anything on their own.
Some purely self-taught developers are good but most lack the theory to really understand what is going on behind the scenes. This often leads to terribly inefficient or necessary code.
I was lucky enough to study in a department that made all computer scientists write a lot of code. I often interview CS grads these days however who've basically done none. To answer the original question though, the combination of being able to code, having been taught to do the basics well and having a good theoretical foundation in algorithms and other areas of CS is unbeatable. Being a self taught coder with good experience who does it for the love of the art is better than having a low quality CS degree and no interest in programming though.
my blog of work misery - http://beastofbaystreet.com
Actually, we had to put into practice a great deal of computer science theory just recently when working on a budget modeling application for a major public transit agency.
The amount of data and the complexity of the calculations involved demanded either a machine with a large number of compute cycles or some nifty CS theory-style rejiggering on the back end. In the end, the whole thing will run nicely on a modern, fairly average laptop as opposed to requiring the processing power of a huge server (or cluster).
In the end, I would say that universities should tip the balance of education away from theory and more toward practicality, but the theory is still important.
In the short-term if you take the time to become a master coder on your own, you can probably get a decent job as a coder and avoid a few years "wasted" in school.
However, if you later grow tired of coding, wish to move into management, get RSI and wish to do other IT, etc., then the degree will have notable benefits. HR departments feel more comfortable with degrees when it comes to hiring semi-generalists.
Look at it from HR's perspective: If 19 candidates with degrees and 1 without apply, if HR selects or approves the 1 without and things go sour, HR looks pretty bad. If they pick a degreed person and things go sour, then it looks more like a random bad apple.
Plus, a degree exposes you to more subjects than just IT, making you more well-rounded, and perhaps a better communicator.
Table-ized A.I.
The difference between someone with a Computer Science degree and one who's learned practical coding is the difference between a residential-home architect and a construction-oriented master carpenter. The first can design your home and tell you why it's designed that way. The second can actually build it, tell you what goes into the construction and why, and when certain design elements are going to muck up the physical realities. In the end, you're going to need both skillsets unless you restrict yourself to just building cookie-cutter copies of existing house plans. And ideally your senior people should have both skillsets so their designs take into account the grungy details of turning them into working code.
The absolute worst situation is senior architects/designers with no practical experience, they tend to turn out beautiful, elegant masterpieces that're a nightmare to actually implement. That's followed only slightly by pure practical programmers trying to do high-level design while being ignorant of the overarching principles and abstract concepts that help guide you when it comes to what's the best way to approach a problem.
I didn't bother with college. When I graduated from high school, I figured that four years of experience would be worth more than the degree, and that proved to be the case.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
It isn't true that Universities don't focus on practical coding. In school I had to code many things. They had to work. Many students cheat. They have other people do their assignements. Or they do the assignments with a study group. Or they use google to find the solutions to problems. They get out of school and cannot program simple things. This is why internships are so important. Companies need to try out people before the commit to them. They need to work with for a few weeks to see if they are fakers.
Classess or not, the issue is never going to be the "ability" to program, it's the desire to program that will be most important. Skills can be learned and updated, but the desire is the most important factor you cannot teach. Being a programmer involves lots of frustration sporadically broken by moments of accomplishment - Its really not for everyone. I have several friends who simply refuse to handle "coding" in any real sense for extended periods of time, they just burn out. I'm not comparing this work to manual labor where you reach a point of physical exhaustion, it's more of a kind of self-esteem exhaustion. When you reach a problem you simply cannot mentally abstract and solve, you can get very depressed. Most people hit this wall with no inner incentives to continue further, they assume "this is all I can understand" and decide they can find more satisfaction doing something else. Its not necessarily a bad thing, I do the same thing with advanced calculus - I simply do not understand much of it, so I go elsewhere and focus on functional logic instead (aka: programming). If we didn't do this, most people would be even more miserable for most of their lives because they're not doing what they really want. I don't diminish calculus, I just have no inner burning desire to comprehend higher calculus. Perhaps more exposure to programming and logic will give more students the chance to see what programming lets them do, but a badly-conceived course can ruin the experience and potentially drive away as much interest as it gains. And as a career, programming is not exactly stable or secure with long-term advancement - its more cutthroat than most markets, so telling students that programming is reliable work is misleading.
College degrees are not the same as those from vocational schools which is what it sounds like at least some in industry prefer. Nobody graduating with a college degree has a very high skill set for a particular task - not even accounting majors. All start on the lower rungs but are expected to advance rapidly because they have the necessary broadbased knowledge to learn and use knew skills effectively. Simply put, they are not one trick ponies. Did somebody say ponies?
If getting a degree is part of your career plan, it is probably worth it. If you expect to "learn a trade" or "see where you land" or "get an education" you are in for a huge sea of debt and disappointment.
If you are going to college to learn to be a computer programmer, that might be possible, but it will be NP hard, and I have never seen it done successfully.
There is this kind of false dichotomy that ignores the benefit of a degree because everyone confuses a college education with "learning."
The day I showed up for freshman orientation, I had all the skill I needed for an entry level programming job... I know because I started both at the same time. The people in my classes who were ALREADY coders were the only ones who did not drop the classes. You go there to learn what everyone else calls that one cool trick you saw that one time (recursion, or tree-sort, or adaptors or injection or bitwise and or whatever). You go so you can commiserate in your peer interviews about "towers of hanoi" and "9 queens." You go so you can prove to an employer that you can do something hard for 4 years. You go so you can get past the HR desk monkeys. You go so Mister CEO won't feel bad paying you 100k for doing 'puter stuff.
Learning to code is a completely different thing from getting a degree in computer science. They are married in people's heads, but they are oranges and orangutans. You don't go to the SAT to learn to do math. You don't go to the DMV to learn to drive. You go to PROVE you can do something roughly equivalent to the thing that future employers want. As bad as the comparison is, there is nothing else (and no Certifications don't do anything).
This is an age old question not necessarily particular to Software Engineering... Are credentials or experience more important?
I would say experience is what you need to do the job, while credentials are often what you need to get the job in the first place and advance your career beyond your current role. I think that holds true for the majority of jobs, but there are plenty of examples and counter-examples of people having success without experience and/or without relevant degree credentials. Career wise I would suggest maximizing the financial return on all your strengths in the near term and either address your weaknesses as best you can or just go around them. Medium to long term always be looking to fill in the gaps in your experience or education that might be relevant to the types of jobs you may want/need in the future.
I would of never learned about algorithm complexity (Big O notation), the cpu pipeline (The dream of computer science), or data structures (lots of pointers ewww) on my own. Maybe some people could do this but definelty not me and I came into college with 2 years of java and basic. College made me confront these corner stone aspects of computer science and conquer them. Even after being out of college for two years they affect the way I code everyday. Sure you dont need a degree if you want to be a dime a dozen web app program for some CRUD website. Even as I write this I can already see the commits comming in from non-degree people that have horrible runtime complexity code.
While theory does have its place, the situation raises the question of whether colleges are teaching the right skills people need to join the workforce, and what its place is amid the rise of open source learning.
This part:
raises the question of whether colleges are teaching the right skills people need to join the workforce
begs the question of whether or not a university exists to train people to enter the workforce.
/rant, I'm just really sick of people bemoaning the university system when it is very clear that they just expected to be handed a great job despite lacking any kind of critical thinking or problem solving skills. In university you (largely) get rewarded for recitation, in a job you get rewarded for synthesis. If you cant turn your knowledge into solutions to problems you are just a walking book.
I do not believe this to be the case. I think that if you are resourceful, think critically, and learn quickly you are employable in many fields. You are ready to join the workforce. If you are all of those things we can basically train you on the job. Then why get an education at all? To build knowledge.
University educations exist to expose you to knowledge so that you can use that knowledge and your critical thinking ability to synthesize solutions.
Example: Understanding algorithms and data structures + critical thinking = knowing when to use a linked list vs an array.
You can tell a programmer: "use an array for faster random element access and use a list for faster element inserts at arbitrary locations". Great, he/she might remember, probably doesn't understand why thats the case but whatever. Now in some new standard library there is a Map. The guy who actually understands data structures is now gone and the programmer doesn't know what the fuck a map is nor how to use it. Thats not a good situation.
Now if that programmer had gotten a CS/CompE education he would have the tools to synthesize a solution based on the knowledge he as about data structures and his critical analysis of what is important in the problem's context.
The programmer could receive data structure / algorithm knowledge on the job but thats not what is going to make his company money. If he comes into that job with that knowledge then he can learn the domain specific knowledge of whatever his company is and then start solving problems.
I think it is really sad that people expect to be trained in a university. It is short sighted because that training will one day be obsolete and then your fucked, and it also allows the student to shift the blame when they can't find a job. The student can rationalize it as "my university didn't train me, now I cant find a job" instead of " I don't have the skills to be employable (resourcefulness, critical thinking ability, good learner), so despite the fact that I got a 4.0 and can regurgitate shit from a book I don't have the ability to synthesize solutions so I'm useless.
I don't think a degree is necessary but a lot of everything in your work life depends more on where you intend to go from there. College can also give you skills in business, leadership, writing and negotiation skills. Those can be very helpful if you want to ever get out of the coding business or just want to expand your horizons outside of coding. The thing you find out quickly in this business is that there are a lot of coders, but fewer people who can organize requirements from customers, architect solutions to scale to enterprise level, negotiate a schedule for release, or even lead a group of programmers in a large scale project. Yes, even those things might not require a college degree, but if you don't have those skills to begin with, college can be a good place to acquire them.
At the risk of being pedantic, you mean Apple ][ and Apple //e, but now that is out of the way ...
Lots of game programmers never bothered with a CS degree.
The world has moved from the 1980's. Whether it be programming, or devops, having a degree helps make you stand out and get past the HR drones.
Once you have 5-10 years _experience_, no on cares about the _theory_ that you learnt, or were supposed to know.
Having a degree gives you the possibility for more doors to be open for you. Not having a degree doesn't give you the same opportunities.
--
"Theory always comes after Application"
We've been arguing this for more than 20 years. Not much has changed, and it's not a new question. Code Slinger vs. Book Knowledge. College of Hard Knocks vs College of Ivy. I'm a greybeard now, and while I won't pretend to answer the whole question, I will provide some perspective...
I was a code slinger type - Right out of high school with some programming knowledge, some commercial success (with the C64), and whole lotta balls. I did some college, but it wasn't for me at the time. It didn't connect with what I wanted to do, which was code. I joined a contracting house, and they sent me all over the country. I learned more in 10 years doing that than any college would ever teach. Databases, Integration, GUI's, network programming, mulithreaded programming, and real-world problems, both programming and political. C, C++, Cobol, Fortran, BASIC, assembly (various), and eventually Java.
In the late 90's, I went back to school. Why? Not to learn programming - I was already at the top of my game. I went back to learn all the other stuff, and to do other things. I took psych courses, math courses, art classes, electronics, music, law, languages (Living: French, Dead: Nahuatl) ... I did it on my terms (Harvard Extension, no time limits.) I will graduate next year.
Do colleges teach some basics? Sure - Data algorithms and Graphics programming were very useful. Are they realistic? Not really - sometimes horribly so. Massively Parallel Programming was a mess of math decomposition problems I dropped quickly. Did I need them to enter a career of commercial programming? Nope.
I would say college education is not a prediction of coding ability. Having a college degree when you are entering the field can be useful, but having a CS degree IMHO is not any more useful than a general BA or BS. If you go to college, go to get a general education, learn how to think critically, expose yourself to some interesting things - but it is NOT a training program for coders. Technical schools are a whole 'nother thing, and I would avoid them like crazy. My experience is that they do train you, but the training is narrow and short-sighted. In the end, it would be throw-away time, and the student would have very little gained.
College? Sure - go do it. You will be a better person, and you will have some great social experiences. But if you want to code, you need to put the time in yourself and learn the skills. College won't teach you that.
}#q NO CARRIER
If you only have designers with degrees, nobody will be happy doing grunt work. User interfaces will suck. Artwork will suck. That isn't to say nobody can do art or user interfaces, but a self-taught person will have more drive to learn what "feels good" instead of the bare-bones proof of concept.
If you only have coders without any degreed theorists, code optimization will regress to converting bubble-sorts to shell-sorts. There's a reason theory is taught. Self-taught coders are unlikely to have ever computed the big O of an algorithm or done a recurrence relation or converted a complex math problem to a tractable computer program.
A mixture of both can be useful for actually making stuff.
It REALLY depends. There are several fast-moving and emerging programming disciplines which are too new to even exist at an educational institution yet. Once they DO exist at an educational institution, you can bet the info is outdated and the people teaching them have no idea what they're doing. Now I hear you saying that if you learn the fundamentals in school that they're applicable elsewhere. This is true, assuming they're the correct fundamentals, and there is a good possibility they are NOT. Once again, outdated info can hurt in the programming world, depending on which area you end up working in. Someone else posted about needing a degree to get past HR. Once again, this is partially true. On the other hand, if you make your own project, library, framework, or some other programming project, release it into the world and show it off, people WILL hire you. These days the #1 request I get from anyone is "show us your github code repository" or "show us examples of your work." It is ENTIRELY possible to get coding work without a degree. In fact, sometimes the people doing the hiring will PREFER that. That said, a large portion of college has NOTHING to do with learning a profession.
How much of that "nearly half" without a college degree is from the era when computer science degrees didn't exist? I went to a Top 10 engineering school, and we didn't have "Computer Science" or "Computer Systems" until my junior year - the closest was either a Math or EE specialization. There were already people leaving college early directly for industry, because the market was hot in both industrial and military applications. Alternatively, how many are from military training? I have worked with two people, both at the engineering level, both alumni of Air Force technical training in computer-based systems.
I concur with the many posters pointing out that a degree isn't just about coding; I keep having to fix things by people who can code, but never learned to DESIGN.
I'm assuming the vast majority of programming jobs require the ability to code, and no further domain specific knowledge. This is just based on my reading of many, many programming job listings over the years.
I'm sure there are jobs that require CS knowledge, just as I'm sure there are (programming-related) jobs that require Biology knowledge or Architecture knowledge or whatever. But all of those are niches: a very small subset of all programming jobs require those specific areas of knowledge. ALL programming jobs require coding though, and even among the ones that require domain-specific knoweldge, I'd imagine the bulk involve a lot more coding than anything else.
You don't need "domain specific knowledge" to code, but I think most such programmers are subpar. Code is like writing; you only need to know English (or your native language) to write, but if that's all you know then you're not going to be a particularly useful writer. Code implements algorithms, algorithms solve problems, and knowledge of the problem space is always not just valuable but the difference between uninteresting scribbles and a best selling novel.
A lot of the time, code supports other code; its code designed to address computer system issues explicitly. Knowledge of how computer systems work is essentially to being able to write or debug or sanity check reasonable code. Sometimes code directly tackles a non-computer problem like code to analyze data in another space. Its not *mandatory* to understand that space, but its extremely limiting on a developer to write code to analyze data about a subject matter they know nothing about. They will always need someone else to translate every little thing for them, and they will never be able to know if their code is actually doing something useful. If it goes awry, someone else will have to tell them that.
You have to be an extremely stellar programmer to be worth it, if you don't understand what you're coding about.
OTOH, I've interviewed quite a few people with degrees but only very shallow coding skills (no real understanding of pointers or debugging), and who still didn't have strong fundamentals in computer science.
It's not that I doubt you, but how do you catch that? I am actually asking, not being facetious.
By the time I invite someone for an interview, I have looked at their resume, and I have had them answer a few questions that are supposed to tell me of their CS grounding OR of their command of google and their ability to wade through bullshit.
At the interview, I mostly talk about their projects and give them short task that tell me about their programming tasks. I certainly expect to notice if an applicant isn't comfortable with pointer arithmetics, or has never wondered about character set representation, for example.
But their understanding of CS fundamentals? Sure, I try to see whether they come up with the test answers on their own, or looked them up, but for the rest... Unless you are counting basic algorithms and complexity, you need time to see how well grounded they are. And if they lack the programming skills, I will let someone else investigate their CS credentials.
No good deed goes unpunished...
What does this say about /. editors?
My husband was involved in coding and tech for years because he got in the game before a degree was a requirement. But he capped out on his salary and companies refused to pay him higher even though he was more skilled and managing most projects, because he didn't have a stupid degree. He had 12 years more experience over everyone around him and was actively training and updating his skills, but still they refused to pay him 6 figures without the degree. That company tanked and went under a year after he quit and he is in business for himself now making more money than ever. But because of his own rules, own company.
Coding is about being smart and solving problems. Especially modern coding, it's less technical and more listening to business/users and using existing systems to solve a problem.
In my education practicality was very important, every quarter we did a project with a group resulting in a working piece of software. I don't know what US computer science looks like but maybe they are not teaching what the companies need.
I think the value of a degree depends on what you want to do. If you want to design websites (visually), a highly technical degree is probably not that useful. I don't mean to say that work is easy (I could not do it) you just don't need to be technical to do a good job.
A CS degree is a foundation of knowledge on which to build a career as a programmer. In much the same way as an accounting degree can lead you to deeper understanding the numbers that any layman can plug into Quickbooks. It doesn't mean that one person or another will be better at it ... each will perform as their ability and interest permits ... but a degree holder might have a deeper understanding of how the internals work. Sometimes this yields helpful benefits.
As an example, a year or so ago I was reading some online MS documentation about one of the generic containers in .NET which claimed O(1) efficiency. My degree knowledge told me this was at least improbable and very likely impossible, so I wrote a test program and discovered O(n) efficiency. Without looking into the matter any more, I immediately understood why the documenters claimed O(1) (they were judging the hashing part of the algorithm, not the lookup part) ... and also immediately knew the coders chosen an utterly horrible implementation. Using this knowledge, I put together my own O(log n) solution which ran orders of magnitude faster than the readily available generic container in .NET. Discussing the matter with some non-degree-holding co-workers yielded a lot of blank looks ... until I explained what O() notation was ... and explained why it told me how the internals of some sight-unseen .NET library were operating.
Degree holders also have some cross-field knowledge ... most programs require some amount of physics (probably calculus based) ... some EE ... some telecommunications. I wouldn't have any knowledge at all of wireless spectrum, bit rates as a function of frequency, or signal attenuation today had it not been for a college education. Is that directly applicable to writing a for-each loop? Nope. But knowledge pays dividends in unexpected ways every day.
In my day we had to scan the disk for D5 AA 96 and we were happy!
You may have a BS in Comp Sci, but I'll tell you one thing: I'd really hate having to read your Implementation Docs or code comments if they look anything like the post you just made.
Your post also brings into question exactly how good of a programmer you really are as well. You see, English, much like programming, has a structure and a syntax. While you may have syntax, there is no structure. You may not have to compete for a job with someone who doesn't have a BS in CS, but you will most certainly have your cover letter compared to another person with a BS in CS who actually puts structure into his correspondence.
The amount of data and the complexity of the calculations involved demanded either a machine with a large number of compute cycles or some nifty CS theory-style rejiggering on the back end. In the end, the whole thing will run nicely on a modern, fairly average laptop as opposed to requiring the processing power of a huge server (or cluster).
I can't speak to your case specifically, but there's a trend in our industry (because of virtualization, AWS, etc.) to do the exact opposite of what you did. The basic equation of why goes like this:
X = the cost of a programmer for a month (or however long it took), including not just their salary but also their medical, 401k, the fractional cost of their manager's time, etc.
Y = the cost of the cheapest AWS machine you could get away with for the next 5 years
If X > Y then you're wasting money/your programmer's time by making them optimize the code.
So again, I can't speak to your specific case, but a basic truth is that people are expensive and hardware is cheap, so it takes a lot of hardware to make an optimizing programmer worthwhile.
It is not as simple as theory vs practice. Yes, Comp Sci is very theory heavy and far too much so for the workplace. But companies are often not just looking for code writing monkeys. Being able to code is not nearly enough to actually write a useful program or even just a tiny part of it. You need a lot of math and advanced logic, and at least some of that theory they teach in comp sci.
Otherwise it is like trying to solve calculus problems without any formal calculus knowledge; You might be able to hack your way through it, but that is about it.
Troll is not a replacement for I disagree.
Eh wrong.
I've been working in the industry for 28 years, during my last year of high-school to now. College would have been a step back.
I've worked with College grads that couldn't program a simple for loop, or think outside what they were taught.
I'd rather have a no college person with the right attitude and aptitude than any masters program computer science guru any day of the week, and twice on Sundays.
When the college folks say "It can't be done" i'm usually halfway through implementing the solution.
As an IT professional since 1994, I can safely say that you are 100% wrong in your assumption. I did not complete high school, I have never been to college, and I have only held two IT certifications (neither were in Microsoft products). However I live a very comfortable life making six figures because I have the experience, desire, and will to not only try and keep my skills updated but improve them when possible. I have seen many programmers and other IT professionals out there that have ended up at Burger King simply because they wanted to get someplace where they could make money and did not care what career path they took. I learned UNIX and Linux simply because I wanted to and it has lead me to a very productive and happy life. All without a piece of paper and the debit that goes with it.
All that being said, I do believe that over the past 20 years in IT, it would have been very helpful to have been to college for the purpose of learning more of the math and much of the theory behind computer science. It isn't a waste to go to college for an engineering degree in CS, but rather an addition to your experience and a certificate of proof that you are willing to put your money where your mouth is and buy into the field (literally) with four years of your life.
You've never needed a degree to do anything. You can learn anything on your own in time.
Not necessarily. Several regulated industries, such as law and health care, require a degree as a condition of a license to practice. Other fields, such as development of software in industries where closed platforms are the norm, require some employer to take a chance on you first. And a lot of times, a relevant degree is the only way to convince an employer to take a chance on you.
Having your own successful projects, some interesting employer history, or a degree are the only ways they can tell really.
In a regulated industry, there's not much of a lawful way for "your own successful projects" to happen before you get hired.
If and only if that programmer does the optimization after coding and has not learned to code in an optimized fashion to begin with.
Have to agree. I read about the first two lines then thought "Screw it" and jumped to your comment.
There are a lot of programmers that do not make a lot of money and have low job-security. That are those that do not know theory, background, algorithms, complexities, etc. In order to be more than a low-level code monkey, you need all that Comp Sci knowledge and skills. Of course, you also need to teach yourself coding, as most CS programs are indeed weak on that, but learning to code is easy if you have the talent for it. If you do not have that talent, do not go into the field in the first place, you will never be any good. And yes, there are quite a few CS graduates that do not have the talent for programming and hence will never be good programmers. That is likely what these employers are picking up on.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
The premise in the summary is wrong. Employers have not learned that actual skill outweighs the fact that someone survived college.
The fact is that such a degree in no way indicates that obtaining it involved actually learning what was presented for longer than it takes to pass the relevant examinations.
On the other hand, if the programmer presents a series of complex projects they have completed, this does positively indicate they have both the knowledge (what the degree should attest to, but really doesn't rise to the challenge) and the ability to employ that knowledge (which the degree does not assure anyone of, at all.) Those completed project should also serve to demonstrate that the required portions of theory have both been absorbed and implemented, presuming the project works well and as intended.
Employers and HR departments are rarely focused on actual performance, except in the very smallest of companies. Most use a combination of bean-counting, related age-discrimination, and the supposedly valuable rubber stamp of a degree to winnow out programming job applicants. After all, if said employee screws it up, that's the employee's fault. Not the HR person.
This, in fact, is why most corporate software goes out the door with so many problems, and it is also why those problems typically remain unfixed for very long periods of time.
It sure would be of great benefit to end users and companies if actual skill *did* outweigh a degree. But that's most definitely not happening. It's wishful thinking, that's all. And if you're an older programmer, even your sheepskin won't help you -- you cost too much, your health is significantly more uncertain, they don't like your familial obligations, they don't like your failure to integrate into "youth culture" as in no particular fascination with social media... or even your preference for a shirt and tie. Welcome to the machine. You put your hand in the gears right here. Unless you've enough of an entrepreneurial bent that you can go it on your own. In which case, I salute you and welcome you to the fairly low-population ranks of the escapees.
I've fallen off your lawn, and I can't get up.
Perhaps better coders but definitely worse persons.
I would say that to be a good coder, it is far more important to know how to identify a problem and detail the steps to solve it. And unfortunately, I think this is often more innate problem solving life skills, and is far harder to teach than coding (I'm not even sure some coders I've met *can* be taught this).
I also think people that learn to code on their own tend to have this. I think colleges try to teach this when they teach theory, because quite honestly, if they teach you today's hot new language, you'll be obsolete by the time you graduate. I've always said that colleges aren't a good place to learn. Rather, they are a good place to learn how to learn. Unfortunately, too many people go to college for a CS degree not because they have potential, but instead because someone told them it was a good money making career.
So I believe both are important and complementary - you have to know how to identify problems and define processes to solve them (theory), but you also have to be able to translate that theory into code. However, I also believe coding is far easier to teach than problem solving.
There are a lot of home grown coders that lack the theoretical expertise for modeling complex systems. You certainly would not need a degree to build Twitter or Facebook, but you need some pretty good math and theory to support millions of simultaneous users.
Hope is the currency of fools
They complement each other.
Note that the list you linked only includes schools with graduate programs in computer science. A few really strong undergraduate-only schools have been left off that list.
... and i am feeling very confident that i will never be without a job
wait 'till you hit 50
Hope is the currency of fools
I am an IT professional and I have been in the industry for 30 years. Network Engineer, Programmer, etc. etc.
Yes, real experiance outweighs a degree. The IT field changes too quickly for universities to keep up. By the time they have a new class, the technology is outdated. As new products come out, the manufacturers provide their own classes for their products.
When you apply for an IT job, they will likely set you down and give you a hands on test. Either you know how to do it, or you don't. All the pieces of paper in the world will not make a difference.
If the employer puts a degree as more important that real experience, then they don't know much about the IT field, and you will be better off looking for a position elsewhere.
When a company needs a programmer, why are they even interviewing computer scientists? Computer science isn't about programming, it's about reasoning about computers and programs.
While in college full time I had a job with the web department, ran my own LAMP server, worked on a networked puzzle game in VB, and a shmup in C (with direct X at the time).
You get back what you put in.
Haven't we posted enough articles and comments about the value of X-type computer degree vs. Y-type life experience???
The answer to this questions is the same one that the doctor gave Nancy Reagan when she asked how she was going to keep Ronnie from pooping his pants during his last State of the Union speech:
"Depends".
You are welcome on my lawn.
What is needed in today's job market is someone who can work as part of a complicated project, perhaps even a bloated one. That means communicating with team members, understanding client requirements, comprehensive testing, and some basic engineering principles. Neither school assignments, even team projects, nor self-taught hobby project, ever reach that level of complexity. That means the workplace is the first place a programmer/computer scientist is exposed to it.
For simple projects, where the design is straightforward or has been provided, a coder can do well without a post-secondary education. But there aren't many simple projects left, and education matters for complex projects and working within large diverse teams.
I beleive that a person should make decisions about education for themselves. But, I also think people should use some data in those decisions.
If you read the chart and the article and then conclude that college is not worth it for your profession, so be it. It is also your prerogative to completely ignore my opinions or any opinions in the original article.
You're also assuming that the people who wrote the listing actually know WTF they need (vs what they want vs what Everyone Else Is Doing So We Need To Do It).
Still get through the firehose? SICK TO DEATH of this topic.
Course VI is EECS at MIT. Speaking from experience, those are not your average CS grads.
Actually in terms of self-awareness, development and personal growth, experiencing university life can have a tremendous impact beyond the classroom. On average, I'd say it can at least doubles your social skills to an order of magnitude improvement social skills for some, and improve your quality of life. My personal opinion is that for many young people (and perhaps those not so young) considering this question, this can be an far greater benefit, and a more important benefit to your quality-of-life.
Having a degree can also make it easier to get a chance to be considered during a tight job market, and improve chances at negotiating a better salary / contract.
Getting a degree, without learning to code, will certainly make you an incompetent bane of your co-workers existence, no matter how short that career may be.
While being aware of the financial realities (and potential opportunities for assistance) of the cost of university, the strongest case tends to obviously be: do both.
Others have pointed out the obvious complimentary nature of knowledge (theory) combined with experience (practice). If you don't know what to work towards, you can waste a lot of time and effort doing things the hard way or rediscovering the bubble and merge sort. Or if you don't know what can and can't be done, or how to do it, you end up a hard working monkey with a very limited playbook. You may find the ever constant change in technology a burden, rather than an enjoyment (I mean after the first 5 years), because in my experience those who understand the fundamentals, those abstract or theoretical bits, can adapt to change more readily and often with dramatically less effort.
Most famous university dropouts (in Sciences and IT) both made it through admissions obviously, and more importantly left before they could finish their degree: that is to say, they were most likely in their 3rd or 4th year, not entirely flunking out first semester (though having a rough to horrible first year grades isn't particular uncommon even for many who later become professors themselves). In a fair number of cases, including some William guy from Redmond, they complete their degree later in life.
In the end; it is what you make of it, just like everything else in life.
Optimizations are not obviously optimal. Sometimes you need an implementation and then the experience to make finer decisions. This is the nature of "new markets" and "new products". There is often no time to "learn to code in an optimized fashion" when there's not enough data, to begin with.
Premature optimization is terrible.
-Hentai [in vita non pacem est]
...I found that people who had focused on learning to code were the ones that needed the most hand-holding when it came to solving new problems that didn't mostly involve cut and paste from StackOverflow posts. They also had more trouble picking up new coding languages. Whereas the ones that had a solid understanding of the theory behind computing were most often the ones to jump in and come up with creative solutions to new problems. They also generally picked up new coding languages more quickly.
How many times do we have to go over this. College is NOT supposed to be trade school. Yes, you learn things that have no real world application except on an intellectual level. No, all the classes are not tailored for making you marketable in the work place. No, computer coders should not expect schools to be turned into their personal trade schools.
So please set up coding schools where they can learn their trade along side the welders and auto mechanics, and leave the colleges alone.
The only thing worse than a Democrat is a Republican.
All you can assess in an interview is stuff tied to coding problems: data structures and algorithms, mostly. I personally use a coding question that leads to a discussion in which I try to determine whether the candidate understands how a hash table works (everyone seems to blindly use them, but surprisingly many don't understand how they're implemented with all that implies).
At previous companies, we've phone screened based on knowing the simplest things about pointers (which culled nearly half, but I'm currently in a Java shop so we don't care), and we've also done a debugging-centric coding problem as an interview test. (Here's a laptop and someone to help you with anything you're unfamiliar with, solve the following problem in 2 hours. The solution was just a few lines of code, but the problem was set up where you'd need to discover stuff through debugging or some sort of experimentation.)
At the large companies I've worked at, interviews are general 1 manager session asking resume-related questions, and a set of timeslots with engineers where the candidate demonstrates coding ability on the whiteboard. We all try to come up with questions that reveal fundamentals over playing "compiler trivial pursuit".
Socialism: a lie told by totalitarians and believed by fools.
Yes. Because a few off the cuff remarks given little effort because they are ultimately no real value certainly implies that all of his professional work is substandard and useless. [/sarc]
Clearly the classic subjects are being neglected here either in primary education or at University.
A Pirate and a Puritan look the same on a balance sheet.
Learning to be a programmer is being able to use a word-processor, having the rules of grammar, the 4 modes of discourse, a huge vocabulary and a storytelling ability fluently available to you.
"Coding" tells you the structure of a for loop. Being a programmer tells you when to use it and how to deal with the exceptions it could throw up. Sadly there are no job interviews I have ever encountered that are deep enough to split the one from the other.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
Every time I see an article like this I cry inside. Universities are not trade schools. The point of an education is not to get a job. It's to learn and to expand your horizons. I always hated the kids both in high school and college that raised their hands and asked "Am I ever going to use this in the real world?". The teacher/professor's job is not to train you for any job or real world application. It's to teach you knowledge that you can then go apply to whatever real world you want. A student once asked Euclid how geometry was going to help him in real life. The reply was "Give him threepence, since he must make gain out of what he learns". Euclid wasn't offering job training. He was teaching geometry. If you are going to a university just to get trained to do a certain job, then you are absolutely going to be disappointed. And no, they are not the most efficient job training centers, because they were never intended to be. Why does everything in your life have to revolve around you working for someone else's vision? You eat candy because it tastes good. You play games because they are fun. Some of you have friendships because they are fulfilling. Do you ask how you are going to use these things in your career? Of course not, because your life is about more than your career. Why is education different? Why can't someone teach you something just because it's interesting? Now that that's out of the way, we still have an interesting question posed here: are university-taught computer scientists more or less proficient than self-taught coders? Yes, self-taught coders do have certain skills that fresh graduates do not (version control, the lastest, greatest, probably going to be obsolete next week programming fad, etc). I'm going to say it depends on what you need. Are you doing mobile apps, websites, and other small-scope stuff? Great. A coder is all you need. Are you doing performance intensive, critical, large and/or complex projects? If so, you probably want someone who spent time learning about how to optimize algorithms, mathematically validate an algorithms' correctness, and other such things that most self taught people view as "theoretical and not very practical". Admittedly, there are more jobs requiring the former than there are the latter, so perhaps HR people need to rethink why they are requiring a degree. You can say there's no difference after 5 years of experience, but I disagree. People will almost always incorporate new knowledge into their existing mental model. If they start out with theoretical model and fit practical knowledge into that, they will have a whole, cohesive understanding of what is going on. If, however, they either never learned all that theory or, like a large number of CS graduates who really wanted a trade school job training, never bothered to let it sink in, the knowledge will either be missed or not be understood holistically. I guess you could argue that a lot of people with CS degrees were looking for job training and therefore didn't pay attention to the theory they were taught. They come out of college with no practical knowledge but also with no theoretical framework within which to place new knowledge. It sounds like the /. community believes this represents the vast majority of graduates. If that is the case, I guess I can't argue with the conclusions of most of the commentators here. However, someone who went to a university to actually take advantage of the theory taught at a university will come out much different than the stereotype being described by everyone.
This has been quite the ramble, but so be it. These are the thoughts I had in roughly the order I had them. What think ye?
Skilled tradesman vs architectural engineer, to give an analogy from architecture.
The answer, like always, is "It depends...."
Is a CS degree valuable to a programmer? Yes, it teaches the theory that a programmer needs to handle advanced situations such as creating algorithms, handling matrices, etc.
Is a CS degree needed to get work as a programmer? No. Most HR departments look for a degree, but it can be in anything as long as you have some experience in the position that you are applying for.
As usual, most people here are debating the value of a degree and whether it is worth it. In today's job landscape, it would be silly not to get a degree. Mainly because having one gives you more options by exposing you to a wider range of concepts and theory. Plus it gets your foot in the door. However, It doesn't have to be a CS degree. But, if you are determined to be a programmer, it would be the one that would fit the best. That doesn't mean that you couldn't take another degree and minor in CS.
What you get out of college is up to you. Unlike high school, you will not be nagged by the professors to do the work or study. It's up to you to be mature enough to direct your own life. Yes, you can spend the whole time in college partying. You can also take the opportunity to make an effort to learn. Most learn that there is a balance to College, much like there is in life.
this is an interesting discussion...I always like reading what actual coders have to say
i was in middle school in the late 80s-early 90s and first used a computer running DOS...i understood coding conceptually & we did a few command line things, also formulas in spreadsheets...i learned coding mostly from doing database management...then got an MS in information and communication science which included getting our CCNA
in academia i used SSPS which has (IIRC) a python-like (maybe Fortran?) scripting language for hand coding your crosstabs & such
my degree was an Engineering degree but not coding per se...we only used code to solve a problem or set up a router
in my research work, the SSPS code view was actually really helpful...the only way I learned how to do all the high level statistics coding was by meeting with the head research scientist at our university (they oversee all the research projects) and had him tutor me for a semester
the kids graduating from my MS program were getting $50,000+ jobs left and right and really like their work...I always wanted to see a coding option for our program because we had all this great expensive Cisco shit and awesome computers but no one in our program ever **made** anything...we never made apps or anything like that, because really **none of us could code in those languages**
Thank you Dave Raggett
The answer is no. I have met over the last 20 years a slew of self taught people versus degreed people. There are exceptions to the rule.. there are people who are geniuses that are self taught. I believe, however they would have been even more amazing if they had gotten that degree.
You just don't have the ability to teach yourself what you don't know you need to know. I've had things come back to me from that tiny tidbit in an algorithms class, or the now antiquated numerical methods class I took... people today would say "oh just use mathematica", but those same people wouldn't even know where to begin when they had a job that required higher math and they didn't have a library to do it for them
But someone who can code AND knows the theory is better than some stupid code-only monkey anyday.
If you just want a 9 to 5 job with no future and no job satisfaction, then skip school and just code. Learn how to fix computers for people making double your salary and hope that your job isn't lost to some outsourced foreign guy with better English grammar than you. But if you want to actually build stuff and create things then you can't take the short cuts.
Nobody in a senior position only does coding. Computer science is being used, physics is being used, mathematics is being used, economics is being used, every science is being used somewhere. You get hired and the first job is "optimize this library", but you don't know the first thing about algorithms because you thought the class was stupid and only for computer nerds, then what do you do? Or you're asked to change the routing protocol, but you skipped all the classes and didn't know that queueing even had a theory. Or you're handed a schematic and told "write me a driver" but can only mumble "um, isn't there a library for that?"
The stuff in Computer Science is not just ivory tower games with no practical purpose. It all gets used by people in the real world with real jobs, including real programmers.
Ignorance is not a virtue!
Sure maybe the majority of programming jobs are just dumb jobs that the majority of people can handle, and if all you want is the most basic job then go for it. But do that damage only to yourself, do not encourage other people to follow you in the paths of ignorance.
In 1990, with a couple semesters of college behind me (including formal courses in C and Fortran) and a LOT of self-directed learning behind me in high school (including AppleSoft Basic, 6502 Assembly and Machine Language, 8080 Assembly Language and Pascal), I took an entry-level development job. I was working with C (on which I had formal training), an assembly language (different from the others I'd already learned) and a language called Occam II.
It did not go well.
While I had a good understanding of the basics, and I could do bitwise logic and such (courtesy of my assembly language and machine language experience), I found myself struggling. Hard. It took me a while to get stuff working, because I had to "feel my way through" on most everything and I was severely handicapped in how complex the code could get before I was lost.
I eventually went back to college and got the Computer Science degree.
Being able to program is a useful skill. But if you don't know enough theory to handle relational databases, trees and other fairly complex data structures, you're hampered right out of the gate. Yeah, that's theory. Being able to code a balanced tree is useful; understanding when you do and DON'T need that data structure is more so.
Additionally, I don't get where they're saying these degrees are all theory. I had to write a pile of assignments in C++ during my college studies, as well as learning enough Scheme, Java and MIPS and x86 Assembly Languages to write assignments in those languages. That's practical, hands-on development, gaining experience with the language and its associated APIs. Additionally, if you do an internship somewhere while you're in college (I didn't, but I've managed/mentored an intern or two, now that I'm an experienced dev), you have hands-on experience with more than just a programming language.
Every company does things a little differently. Different standards, different conventions, different infrastructure. Ergo, it is PHYSICALLY IMPOSSIBLE for someone to walk in, with no existing experience with that company, and go right to work, being productive for the employer on day one. Yes, Human Resources and management keep indulging in that pipe dream. If only the schools would teach THIS, not that. If only they'd spend less time on math and more time on the finer points of this framework. Failing to realize that they'd be chopping out useful theory which could (and quite frequently, will) be useful down the line.
Besides, if you were trained in EXACTLY what this company needed, you would never be able to jump ship to another employer. Too many employers keep finding excuses not to provide raises that keep up with the cost of living. The only way to keep up, these days, is to jump ship every few years. And your next employer will need stuff the last employer didn't need. So, getting trapped in a pipeline which is heavily customized for one employer is bad for your long-term prospects.
... by the Dew of Mountains the thoughts acquire speed, the hands acquire shakes, the shakes become a warning
Some companies what scientists; some want handymen.
CS degrees are similar to applied mathematics. Many of them tend to focus on how to solve serious problems, often in the natural sciences. Most CS degrees require extensive amounts of science and mathematics courses like physics, biology, Calculus, statistics, discrete mathematics, and linear algebra, courses that don't really come in handy in using programming as a simple tool unless you happen to be working on a scientific project, like analyzing data using complicated physical laws or designing advanced artificial intelligence algorithms for commercial use.
This is also why a lot of companies that want to accomplish these tasks hire people with advanced degrees in subjects like physics, statistics, and astronomy, because while they might not be formally-trained programmers, most have learned programming as a tool and they have the mathematical and scientific knowledge to apply algorithms to real world systems in finance, artificial intelligence, et cetera.
You don't really need someone with an advanced degree in physics, statistics, or computer science to handle most of the low-end programming tasks that are dealt with.
If all you want to do is code, I don't really see the point in going to school for a CS degree other than to "check the box" on a liberal arts education, as many companies require to even be considered.
However, if you want to work on something like AI for Google or analyzing data for NASA, a CS degree is pretty much a requirement.
Computer Science is one thing. Electrical Engineering is another thing, Software Engineering is yet another. You can study all of these things in college. Programming and coding are skills. Most people studying CS, EE, or SE pick up some programming along the way. In my experience most CS majors don't even like programming; they view it as a necessary evil. They don't want a job as a programmer unless perhaps if it is a stepping stone to a "real job." If you really like programming and want to do it than a lot of CS will seem like a waste of time. Personally I always enjoyed both theory and programming. I enjoyed learning theory and how computers and system software works and got a CS degree. I learned more about programming from a few Plum hall books than all my CS courses combined though.
That seems to be the question. Personally I'd rather have somebody with experience AND a CS degree. ;)
I've been in the field awhile and have worked with many people who are self taught and either have no degree or a degree in another field. I've also worked with many CS grads. It's anecdotal but in my experience the CS grads in general will pretty quickly surpass the non grads in programming acumen, - all else being equal (and they seldom are). They often grasp concepts quicker and develop a larger set of tools to draw upon. There are many exceptions of course and I've hired and worked with good software developers that don't have a CS degree. It's not a pre-requisite for working for me but I consider it a strong plus.
It's not surprising to me that half the programmers in the US don't have a CS degree. That's partly because historically programmers have been in high demand. A more interesting statistic would be which group tends to be more successful in tech careers over the long haul.
Sure you can just dive into Open Source projects and learn Linux and PhP on your own. You might get hired. But you will be a code monkey. I run across smart people who do not understand a lot of the principles of programming. They never heard of the principals of software development (Ada who?). A University Degree gives you a lot more of the foundations and a lot more debt.
With that debt, you will want a higher salary. Sadly, too many managers do not know the difference. They want to pay code monkey money to a professional software developer.
I find myself cleaning up monkey poo far to often.
How many of the professionals you hire would you want to have "learned it on the fly"? Your dentist? Your lawyer? Or do you consider coding closer to being a tire changer or a window washer?
Coding is computer science, but computer science is not just coding. I got my CS degree 20+ years ago, I've been in the field ever since, and I only spent a few years doing actual coding. The rest is all sysadmin/hardware design/architecture.
All of it is near useless. Modern development has plenty of jobs for programmers that are closer to tradesmen than the developers of yore. Of course, here on slashdot you'll get lots of posts from academics defending academia and floating-among-the-clouds architects defending years of theory study before you even dare to touch a keyboard.
The harsh reality is that most of your time will be spent fighting with CSS/HTML/JS to make the page look nice on all 3 browsers.
The rest of it will be using someone else's (the cloud floaters) API to read/write data. In the advent you have to build the API, most of the storage problems are solved with 2nd Normal Form (master-detail records); and even that is becoming passe with NoSQL.
Someone above was posting about optimization & De Morgan's Theorem. This is wrong and bad, very bad.. Code should always be readable. Even Knuth stated that the root of all evil is premature optimization. Writing code that looks neat & does cute tricks is pretty bad when someone else has to read it years after you're gone.
Sure, if you find yourself with free time, pick up a beginner's book about 8051 embedded development, and buy a processor, LEDs & resistors, & USB programmer for $25 from ebay/china. You'll learn about how everything is actually working under the hood and why some of the greybeards here are so obsessed with optimization & algorithms/patterns.
This report is about two things: (1) most "software developers" are just incremental writers or hacking on trivial systems; (2) companies want a perfect match between young (cheap?) developers and the companies' technologies.
What if it's a new/small company seizing the advantage of a freely-available new/exciting approach? Sure, there will be lots of self-schooled practitioners (and if they're not educated to think they know better, they're cheaper and more compliant).
But mostly companies work with legacy technologies in mish-mash systems, and they have a hard time finding people who know or love the technology. This is a variation on the "skills gap" that drives H1-B programs. The reality is that companies don't want to invest in training, particularly when developers leave as soon as they can find better work. My guess is, the companies would be better off providing work guarantees to older developers who wanted job stability, but that wouldn't fly at the C-level.
Now, should colleges teach practical skills? No. They're best learned in real practice, with real clients. Colleges will never be up-to-date with technology or business trends. Schools should focus on developing insight and analysis required to solve large problems and cut through B.S.
The best-run company I ever worked with took what I thought was a sensible approach to optimization:
We were working on a complicated production system with hundreds of individual components and intense uptime requirements. The vast majority of the programmers (about 1000) were to focus on writing "robust" code that worked in an "obvious", easy-to-maintain way. The Performance Engineering team would look at system metrics (everything was instrumented) to find the actual performance bottlenecks. Then they would send in a crack team of commando programmers to do trippy, non-obvious optimizations on very small pieces of code.
The idea was, in a complicated system it's very unlikely that your specific piece of code is going to be the limiting factor in overall system performance. So it's better to have less performance-optimal but more robust code in most places; and to use fast but brittle code only where absolutely necessary.
FWIW, the company in question is outlandishly profitable, and their software is widely considered the best in their industry.
Thanks for answering! I guess we pretty much do the same thing, except that we draw the line between programming skills and CS fundamentals in a slightly different place :-)
No good deed goes unpunished...
If you're asking this question then it is very likely you don't have a college degree.
i work for a company that sells electromechanical instruments for use in labs
the cost to customers is 10 - 20 thousand
there is extensive custom software, user GUI, drivers for stepper motors and PMTs, reports back etc
I would say that in our case, N=1, the programmer doesn't need any domain specific knowledge, but he does have to be able to understand at some level what the instrument is doing
... learning to operate a rivet gun or steam shovel? A bridge or building could be more cheaply built by skilled operators with little or no knowledge of stress and strain, but how long would these structures stand?
The same could be said for computer programmers, who may be skilled in coding, but have little or no knowledge of the best methodologies for constructing robust and reliable software systems and structures.
It is slashdot, his statement in his free time does not necessarily represent his performance, aptitude, or attention to detail in their other aspects of life.
-different AC
First - let's exclude the slashdot crowd. Afterall - we are the exceptions to the rule not the general herd.
For me (having been on both the hardware and software side of the world) - the difference is very similar to a hardware technician vs a hardware engineer.
The technicians are often self taught and very practical in their solutions. There are degree programs -but almost always are very hands on approach and 2 year degrees. Some technicians are absolutely brilliant and worth more than a handful of engineers. In general though they are very good at the day to day stuff, but when a difficult problem arises or some deep analysis they need help from an engineer.
The engineer is much more theory based. Great at understanding how the system should work and optimizing based on theory. Often missing some common sense or simple real world solutions that technicians handle in a couple of minutes of thought.
The 2 really go hand in hand. And I think software engineering really is the same. You have the general day to day programmers/coders that work on making code to specifications and deal with 80-90% of daily work and you need a couple of engineers at the top level to focus on the theory providing the guidance on how the system should work and coming in to work on issues that need that extra level.
(of course - my underlying belief is many 'engineers' (hardware and software) are really just technicians. can't solve a problem without guidance but willing to beat their head against a wall until 3am)
But someone who can code AND knows the theory is better than some stupid code-only monkey anyday.
It's true that "pure" coding is becoming less valuable, but that doesn't mean that Comp Sci skills are your only way (or even the best way) out of that niche. Being able to understand business requirements and translate them into functional products is a lot more important than understanding five different sort algorithms that you'll never use (since the API handles all that crap for you).
As someone without a BS in anything, I've actually found the opposite.
Yes, people who are self-taught often have gaps in our knowledge, but we tend to be *much* faster at filling those gaps. Also, the fact that we acquired all the knowledge we did without a college degree indicates that we are motivated to fill those gaps ourselves.
It is very likely that there are things we have not been exposed to, even if we match your 15 years' experience as a software engineer. However, upon exposure, I am willing to bet that we will beat you soundly at rapid acquisition and assimilation of knowledge - especially since, if you've been in the field for 15 years, your degree is over 15 years old. Which means that plenty of things which are new to me will be new to you, too.
You're absolutely right that you'll never have to compete for a job with someone that does not have a bachelor's degree. I, on the other hand, have to compete with people like you for the right to do my damn job all the time, because you're absolutely convinced that four years in a university beat four years actually in the field working on real-world problems, while voraciously consuming papers and books, and while corresponding with experts in the field - because unlike you, my tools were not handed to me by a university; I had to build them myself.
None of which translates well to a bureaucracy-approved stamp I can stick on my resume, so you're right - good on you. You'll get fast-tracked to management, where you'll continue to pretend like you know what you're doing more than I do, where you continue to ignore my explanations of why your harebrained ideas won't work, and where you'll continue to get me fired when they fail in exactly the way I warned you they would. You've certainly got it all figured out.
Except how to fucking code.
-Hentai [in vita non pacem est]
Premature optimization is terrible.
So is unmaintainable spaghetti-code. Usually.
30 years programming experience, rarely got interviews after applying. Degree, 5 applications, 5 interviews, 4 job offers.
Google used to hire people with PHD, not one trick ponies programing in a basement.
I am a self taught coder/engineer. The idea that self taught people are more practical then the "elite educated" milled out CS folks is patently false. I spend most of my time developing superior theoretical approaches above all else. I do the math, see how it works and try to improve. I've learned languages such as VHDL, designed processors, built operating systems and single board computers. I do financial maths and numerical analysis. I've seen CS graduates who are confused as to what threads are and how virtual memory works or how numerical instability happens and what the ramifications of floating point algorithms are. Very few can read code, and that is my metric of having even 2 cents. Lot's of people don't like to work with me because of getting bogged down in the actual understanding of the problem and understanding how to solve it.
I'm not saying university students are all bad. Most smart people do that kind of thing. But just because somebody didn't get a rubber stamp doesn't mean that can't code, don't understand the theory or have a broad body of knowledge.
This is EXACTLY the right approach. Not that everyone needs a "crack team of commando programmers" necessarily, but just that every programmer should write for maintability/readability primarily first. Then, AFTER looking at real performance metrics (and not just "Bob thinks it's probably slow because of X") specific performance pain points should be addressed, and in those areas only readability/maintainability should be sacrified for the benefit of performance.
But again, if you get to where you have a performance issue, and it's possible to solve it by throwing money at a hardware solution (which isn't always the case), it's very likely that you should throw the money at the hardware, and not at a programmer to fix the issue. Not all the time of course, but with the cost of hardware dropping and the cost of programmers rising, most of the time the hardware solution will be cheaper.
Sorry, I wasn't trying to ask the question my subject line asks, it's just that Slashdot silently ate my ">" character. I was trying to ask "Is Coding > Computer Science?"
NEXT!
A college degree is the highest probability you will get to do interesting work.
It also means you have a wider set of experiences and interests. This is critical because being able to understand the business/industry is more important then the language you use.
Sure, you want to work at a boring company writing html that workd with every IE version of the last 10 years? Then you probably don't NEED a degree.
You want to do robotics? areospace? actual computer science? get a degree. And learn many other subjects that you can. Be interesting.
The Kruger Dunning explains most post on
Who writes what is under the API?
thats right get those clicks dice
I do not have a degree, as I am not at 'university age' yet, however, I used the appropriate guides, and over the course of two or three years, toyed and hacked around with code. I am now at the stage where I can bearably read The Dragon Book, comfortably code in (x86) Assembly, C, and Lua (and soon Scheme and Common Lisp (I've been using a mixture of SICP and The Aluminium Book for the latter two)). I know someone who's doing a CS degree at a JavaSchool, I have had to teach him really basic things like what a kernel is, how it meshes with the hardware, etc. I find it utterly appalling that they aren't teaching him [i]any[/i] concepts related to programming, they aren't even teaching basic CS concepts like B-trees, pointers, et cetera. So I (personally) find a degree utterly worthless aside from satisfying the prerequisites of employers who are too lazy to look at experience, or employers who think I can find a 'better' education at a university.
Once you start to teach coding you have to consider which languages and to what depth - do you produce people who can code in just one language and hope it's the right one (ie the one there's a demand for) or a little bit of a lot of them?
"because while they might not be formally-trained programmers, most have learned programming as a tool and they have the mathematical and scientific knowledge to apply algorithms to real world systems in finance, artificial intelligence, et cetera."
I found that not to be true.
I have worked with many extremely smart experts in their field, but there software was broken. When I consulted, I was often called in to work with those people.
Every time there where serious flaws in the software. Often the result they were getting weren't the resolution they thought the were getting.
There are numerous reasons for this:
Not knowing how to evaluate libraries, not aware of memory techniques, or data import issues.
Performance was often bad. Things taking 'over night' that should take 30 minutes.
The Kruger Dunning explains most post on
1 self-taught coder may be able to build a better app than 1 computer science graduate, but a team of 5 self-taught coders is going to be a nightmare. The problem with the self-taught coder is that their code is very idiomatic. Not knowing the theory results in a lot of hacks and workarounds that are not easily understood by anyone else.
Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
Could it be that it's for learning how to think about solving a problem?
There should be a professional "Software Engineering" (or call it something else if the Engineers get upset about the term) program for those that want to actually build code.
The engineering community seems to be accepting it. After talking with some colleagues about software engineering being a discipline that potentially needs certification, I found out you can actually be a PE (Professional Engineer) in Software Engineering now, in addition to traditional PEs in Mechanical, Electrical, etc. Link on NCEES website.. They just started this last year basically!
I'm interested in pursuing it potentially, I wonder how you get it if you normally need to study under a PE for x years but there are none at first? I guess there's a grandfather in period for those with experience, even though it wasn't under a PE. I do not know anyone with a PE Software Engineering yet though. Anyone out there taken the exam? What do you need to apply, how hard is it, what does it emphasize, etc.? I should probably contact the board myself and ask. My guess is that a cert like this will be a big thing in a few years. Some big companies will want PEs as the managers. Maybe government contracts will require a PE in charge.
If this is the case, then CompSci majors (or anyone really) will be able to take the FE exam and become Engineer-in-Training like other disciplines, and this will separate the professionals from the academics. Once the FE for Software becomes popular, I imagine Bachelor of Software Engineering will start popping up to start preparing student for the FE exam, much like mechanical, electrical, etc., today.
Having a college degree does help an employer see who was at least committed enough to run through a voluntary four-ish year program from start to finish. That's no small factor if a company wants to have mature products, including software products. That kind of ability to commit can be demonstrated through work experience, but if one is starting out, then the degree will be a leg-up to get in the door before other factors are considered.
The other side of it though, is that learning to write software through a college program is a top-down approach, where one should learn project management, cost/benefit analysis, group-interaction, and other non-coding parts of work that will affect how the programmer thinks about the task of coding. By contrast, a bottom-up approach, for self-taught programmers, may give the programmer good fundamentals of the language and an ability to play with idiocyncracies of that language to one's benefit, but might not get the rest of the picture.
It really depends on what's being written, for what audience, and how the company plans to further maintain the code (free updates, paid updates, paid full-new-releases, etc) and who will be doing that maintenance, and who will handle what aspects of the original design versus maintenance coding. A company might not want to hire a non-degreed person into a position where they're laying out the framework for the project as there could be condsiderations that the non-degreed person simply hasn't considered, but would hire them for the maintenance side because they're following an existing framework.
That being said, you can't really know what they'll want until the interview, and they might not even know what they want until they see it.
Do not look into laser with remaining eye.
I'm not talking fake value (like your employer wants you to have it just to have it). I spend an obscene amount of my time at work having to turn hackers into programmers. For that, they need to know computer science. Otherwise, I end up with hundred thousand line programs written with algorithms without scalable algorithms, unmaintainable structure, no demonstrable reason to believe in their correctness, etc. One of the best computer scientists I've ever known didn't have a college degree, and many people with CS degrees don't how to write code that rests on a sound theoretical foundation, but by and large, if you want to write really great code, it pays to learn computer science, and a good university CS program is a great way to do it.
"Nearly half of the software developers in the United States do not have a college degree. Many never even graduated from high school."
And it shows. But if we're talking games, then who cares?
I learned plenty of useful skills in college that directly apply to writing good quality software. The fact the half the programmers out there don't have a degree may be one of the reason there is such poor quality of software.
Did I learn everything I need in college? No. But I did learn how to analyze a problem and build a comprehensive structured approach to solving the problem. All too often poor programmers get the job done by writing monolithic unstructured software that is hard to understand and even harder to maintain.
Structuring a system so that it can be easily maintained and expanded takes up front requirements, design, implementation, some re-design (loop those last two a few times) until it is complete.
I highly agree with an earlier poster about being mentored. I learned a lot about writing simple code that is easy to understand from a co-worker early in my career.
I used to try to write highly efficient optimized code which isn't always the easiest to understand. Now I focus on writing simple easy to understand and maintain code and only optimize it if there is a large performance issue. Which with today's processors isn't that often. That doesn't mean my code is a CPU hog, I just don't waste time on optimizing code to save a few milliseconds on code that only runs once in a while.
The one thing someone with a BS doesn't do is make sweeping generalizations. None of them do. Ever.
How many articles with this same theme am I going to read?
The problem is that theory persists over time far far better than practical applications. And the truth of the matter is that the practical applications that most student complain about are really implementation details. Operating systems, programming languages, hardware architectures, ... these things change.
... these are implementation details for you to learn on your own time. Labs with Windows based PCs are available, you are free to use them for personal development and independent study. If and when appropriate, and only with the consent of the instructor, you might ask to do a particular class project on these PCs. However do not expect the instructor or TA to teach you the Windows environment and coding for it. That's your responsibility to figure out if you want to go down that alternate path.
My undergrad CS program was Unix based. Many students complained about wanting practical experience coding under MS Windows. That is where the jobs were. The way the dean explained it at a faculty/student meeting was that the university's job was to teach the more persistent theoretical and conceptual knowledge. The theory and concepts of a compiler, operating system, of algorithms and data structures, the theory, concepts and mathematics of computer graphics, etc. Things that are largely relevant regardless of whether you are coding under Unix or MS Windows, OpenGL or Direct3D. That things like a particular editor or IDE, C++ rather than C, Windows API rather than Unix,
The preceding seemed reasonable and fair to me but some still complained. They literally wanted an elective class to teach Win32 programming. To get university credit for working their way through the earlier chapters of the Petzold book I suppose.
I think I agree with the dean and professors. The University classes are to teach you the persistent stuff like theories and concepts. The more practical stuff is for you to figure out on your own time, although the University will make resources (ex Windows PC) available to you.
Obviously, people doing low-level systems programming do need to have the background to understand this stuff. But that doesn't really matter – there are a hundred application programmers for every systems programmer. It's like saying all programmers need to be able to write in assembly and count cycles, just because some embedded work still requires that sort of stuff.
So what about the next job? Should the application programmer never change jobs to a systems programming job? Should programmers only be prepared for the current job and never for the next job?
Learning the minimum necessary was never the goal we had when the US was in the lead in technology and science, but maybe it's the goal today. Learning extra stuff is never a waste of time.
It must be Thursday
*yawn*
I have been programming for 15 years professionally. I was self taught and programmed for about 6 years before my professional career.
A few years ago I started going part time to a State University for CS. I think your theory that you are somehow going to be superior to any, or even most, college grads by virtue of the fact that you never went to college is a load of bullshit. I also think your assumption that you will learn and assimilate knowledge faster than any, or even most, college grads is equally baseless.
I think if you actually did some rigorous education in Computer Science you might find it a lot more beneficial and useful than you seem to think. But you never actually went to University, so you don't seem to know what types of things are taught there. Sure, there are lousy schools with lousy programs. And yes, many of my peers (who are of normal college age and not in their thirties like me) are unmotivated and not going to win Developer of the Year awards. But I've learned things that I failed to teach myself and have found immensely useful in my day to day work.
When I was young I thought I knew everything. Around 27 I started to realize there was all this stuff I didn't know. I tried to teach myself many of the theory aspects (things ranging from algorithms, data structures, automata theory, etc) and failed. I failed because I THOUGHT I understood what I was learning, and it wasn't until I had good professors who were showing me where I was wrong and forcing me to understood things that I would normally not be motivated to teach myself until I actually started to grasp things.
You claim you built your own "tools." I doubt that. I doubt you built your own OS, I doubt your built your own compiler. Your tools WERE handed to you. They were made by people who went to Universities and learned the hard theory and engineering practice to build them. I took a course in Compiler Construction, and let me tell you that parsing theory is difficult. Register allocation, code optimizations (dead code removal, constant & copy propagation, constant folding, etc) and supporting multiple back ends are difficult. You might be one of those rare autodidacts that can teach yourself these things, but I'm able to admit that I wasn't. I need someone to point out mistakes, push me to complete assignments I didn't particularly want to do and large scale projects that were difficult to deadlines. Most people similarly cannot just teach these technically complex topics to themselves.... It is much more difficult then learning the latest fad web framework.
Another thing you would learn about in some University is a false dichotomy. Your post has an obvious one, which is that programmers who went to University are fundamentally and irreparably inferior to those that do not. The truth is, knowledge is good. When you take a good programmer and give them theory, they can do things they couldn't before. If you studied CS at a half-way decent school, YOU could do things you couldn't before. You would be able understand problems and solutions that you can't understand now, and you would be able to derive useful analogies to your daily work.
But instead you have an inferiority complex about how all these hair brained college grads are coming in and ignoring your "explanations" (which of course must be right), get you fired (which you clearly didn't deserve) all because you know how code and anyone who went to school by your definition does not.
By the way, I would be interested to check out all the tools you built yourself. It would be interesting to see the OS you use that isn't Linux, OS X, Windows, etc. I would also like to see your compilers that are most certainly not LLVM (started as a college research paper), GCC (includes many academic projects in it's implementation), Visual Studio (I'll just speculate that probably a few people who worked on Visual Studio went to college), Python, Ruby, Java (James Gosling thought going back for his CS PHD was immensely worth it).
I would love t
As someone who teaches computer science for a living, I can tell you that if you're only majoring in computer science because you think you need to get a degree, then the degree will be useless to you. You'll do the minimum work to pass (if that) and not retain anything you learned. Then you'll have a hell of a time trying to find a job. Employers have become jaded and assume that although you have to be a college graduate to apply, almost all college graduates are morons. This is because most of them are there just to get a degree, and employers have to go through gargantuan efforts to find those few who are actually good.
On the other hand, if you're the kind of person who is good at learning to code and you actually find computer science interesting, then getting a degree will help you immensely. If you're really smart, you would learn most of this stuff on your own anyway, but classes help you organize the knowledge, and professors can help you with the difficult questions. If you go to a good school, you'll learn more than you would if you did it alone because college degree programs help direct you along and force you to practice as you go along. Finally, when you're done and graduate with good grades, you have verifiable evidence that you've been exposed to this knowledge. If you just learned it yourself, you'd have to ask the to take your word for it, and they're not going to do that.
Also, let's not forget that finishing a degree is also proof that you are able to start and finish a long-term project. It means you have attention span and can be dependable. Being able to finish things is another rare trait that employers put a lot of effort into looking for.
The problem with being self taught, having only experience, is that the experience tends to be only in what was necessary or what was interesting. Very few aspiring developers have the ambition and discipline to study and learn all the topics that one will be "forced" into studying in a formal degree program. For most aspiring developers the formal degree program will give them a broader set of knowledge and tools to build upon. The purely self taught that have such a broad set of knowledge are exceptionally rare. Most of us need someone to push us to do a little more than we think is necessary.
That said, being very good at software development is not simply a matter of having the correct broad set of knowledge to build upon. A person absolutely needs some inherent curiosity and interest in the field. To be truthful, many in college have no such curiosity/interest. They are just in college to get their "ticket punched", to meet some requirement on a HR checklist. This includes some in computer science and related programs.
Yes, people who are self-taught often have gaps in our knowledge, but we tend to be *much* faster at filling those gaps. Also, the fact that we acquired all the knowledge we did without a college degree indicates that we are motivated to fill those gaps ourselves.
Meh. Your generalizations are just as bad as someone arguing the opposite. I agree that someone who is self-taught AND motivated can be amazing -- ultimately, that's sort of what college used to be about, i.e., taking you from the high school "spoon feed you knowledge" mentality to the self-learning place where you can teach yourself what you don't yet know.
Good college grads learn to teach themselves, sometimes as a result of university training. Other people pick up the self-teaching and motivation skills on their own, and they would have done so regardless of whether they went to college or not.
The vast majority of people in the world are probably not that motivated and aren't particularly good at teaching themselves, and those sorts of people exist both in the college-degree crowd and among the people without one. The vast majority of people who don't have a college degree were also challenged intellectually to a lesser degree, and therefore they are probably somewhat less likely to have picked up those skills.
But whatever. These are meaningless generalizations. I've met people who never went to college whom I would count among the most intelligent, clear-thinking, amazing folks I've ever known. I've also met Ph.D.s who are idiots (even from prestigious universities).
One can argue the merits and drawbacks of college, but one thing I think is pretty clear: very few people have the kind of natural motivation to self-teach that you describe about yourself. If someone challenges you with tasks that require you to do so, I think you have a somewhat better chance of picking that up. It could happen on a job with the right boss or the right team; it could happen at college. Traditionally, a broad-based college education was partly about exposure to a lot of ideas, and in the process of critiquing those ideas from various fields, you'd learn how to think, how to learn knew things, and how to think intelligently about them. Nowadays, college has often become a glorified trade school for lots of students (though admittedly, it always had part of the crowd who went there just to party, it's just in the past those were just rich people's kids who had time to waste and money to spend). So it doesn't surprise me at all that lots of college grads today come unprepared with practical knowledge and what they learned in technology may be out-of-date by the time they graduate.
But that doesn't mean all higher education is crap, or that it can't help some people to learn how to think... it just depends on the school, the program, and the motivation of a student. Motivated people can often get ahead anywhere.
If they are of no real value, why did GP comment?
If the first paragraph is a wall of text, why would I think the functions/methods would be smaller?
If the whole post looks like it was dictated but not edited, why would I expect any thing more than type-and-commit?
Here is the complete post to which GP replied:
Here's the reply in question, paraphrased:
And here's the part I really like.
On a selfish note, I will never, ever have to compete for a job with someone that does not have a bachelors degree. So this is good for me and it's not good for our country but hey you're going to do what you want to do dummy.
First, we were talking about the importance of a CS degree vs. not a CS degree. AC definitely has to fight for a job with people who have a degree in something other than CS, making that completely irrelevant. Stream of consciousness poster has forgotten the point, making most of this gibberish irrelevant. Defend irrelevant points if you want - oh wait, you did, so ignore that.
More importantly, if it's not good for the country, then learning to code outweighs getting a CS degree. That defeats whatever point he/she might have had.
There is no logic, and code requires logic. There is no attention to detail, and code requires attention to detail. Communication skills in code are not obvious, but if you cannot communicate your intent, either by code or comments, then you have failed to communicate the importance of your implementation, or other details.
There is nothing good about the post you are defending, in the context in which I found it. That you defended it, seemingly without truly considering your defense, makes me question your competence. Note, I am not personally attacking you, merely evaluating your response on its merits. And it has none.
What exactly is this "questionable ability"?
Most of enterprise software development is working on some code base which is a huge hairball and you do not need any "advanced degrees" to do the job. If you are an excellent / above average programmer you are probably wasting your life in such environment.
You should not equate the skills needed to do the above with ability to write "elegant code".
Tat Tvam Asi
I wouldn't say learning to code outweighed a college degree
I started as a college student, spending days and night digging into each and every details to the machines (big irons) that we were using in order to make things work
Then I worked, starting as a coder, then a team leader, then in charge of the entire department, then I was hired by another company, and another, and another, and end up I started one company, and the next, and the next ...
What you say may be true, from the end of the coder, but if you see it from the other side, as I have done, for more than the past 3 decades, you will know that hiring people base on their sheepskin alone is beyond stupid
Of the people that I hired, and those who ended up being my partners in my businesses, most of them didn't even finish their college degree - but they possess the skill that no college student have, they have the experience and the instinct to know where to look and what to fix when something fucks up
Muchas Gracias, Señor Edward Snowden !
Don't have to pay those non-degreed blue collar workers as much.
The popular expectations are all totally wrong. The college system is a big business as well so they don't want to let CS die into obscurity like it should have decades ago (perhaps it never should have left the Math dept?) being replaced with Software Engineering or some non-science degree program better suited to reflect the careers out there. Most students are only thinking job training and are in a certification mindset - these people do not belong in college. Computer work out there is far more like a skilled trade desperately in need of a union; if you look into the traditional trade unions, they have a superior education model to the college system. They spread out education with experience over a long period of time and it is more akin to a MD program--- which is one of the few degree programs that bent to fit the traditional apprenticeship education model.
Employers are lazy SOBs and are totally geared to cost externalization (especially MBAs) so they don't want to train anybody or be attached to any employees and then wonder why employees are not loyal! They expect the college to do all their job training for them. We get complaints about not teaching some framework or buzzword and it is really sad when it comes from people who should know better. I don't think of employers as jaded-- but as selfish and clueless with an extremely narrow perspective. They want as little responsibility as possible and zero loyalty. Doesn't matter if your are a genius, if you don't know BUZZWORD X for 5 years longer than it existed then they need more H1B visas (speaking of which those people won't likely know X any better.)
College is not for everybody. By making everybody go there even when it is not necessary or when it does not properly fit the needs you create a evolutionary like pressure which will degrade college education (and has been already.) In my state, we have college in the high school already which just shows how horrible the high schools and colleges (well, the gen ed portion) have both become. We have students gaming the college system like they did the high school system and if you flunk all those punks (and I have) you get pressured by other parts of the school that something must be wrong because their simplistic statistics show a negative deviation.
Now if people think education is just a recited lecture you could just video and coursework you can just multiple-guess (or as a student said to me "BS my way thru") then they should love all-online learning! correspondence school can become popular (but under a new name to hide the stigma... add E or CLOUD to it...) Thing is so many people have not experienced anything else they don't see the problem, then they come to me... and their mind is blown. Discussions, real work and interaction-- where somebody has to participate or they fail. You can't BS my oral exam process. No idiotic paper test can replace my brain's evaluation. Even I have to bend... but if I had tenure... it would be a 1 man war!! This Sensei isn't giving you a black belt if you are going to have your ass handed to you in your 1st real fight... No, I'm not hated... but I am avoided by some because I can't be fooled.
Americans now have an attention span of 8 seconds. it was about 13 a decade ago. Goldfish now win at 9 seconds. Should we bend to cultural declines? I think not! If you are not good enough there should be prep schools... the apprenticeship model won't let you progress until you are ready (or at least it is more difficult to warp.)
College graduates are elite. or they were. That is why it was valuable. Even if you make it all work; the elite status will get somewhat diluted. I also think some degree programs shouldn't exist. Making something you learn on the job and putting it into a serious of courses shouldn't be enough... again, I blame lazy employers helping to create this mess. We are not a certification center for businesses. They can create those if they want to lower training costs! My father was a corporate instructor bac
If you have to ask this question, then the answer is that it isn't going to matter. There are plenty of examples of people without degrees who are excellent coders, such as Bill Gates. There are plenty of examples of people with college degrees who don't code well. There are also plenty of opposite examples. Gates didn't drop out because he had "learned" everything. He dropped out because he was confident and was certain that he knew what he was doing. He taught himself coding. He also taught himself business management. He also worked extreme hours. Supposedly in the early 80s people would call Microsoft around midnight on the weekends because Gates was the only person working at that time and would answer the phone. If you are that motivated, then you would not ask random people on a website what you should do.
If you have not been coding since middle school for fun, then you probably should go to college. But while you are in college, you should teach yourself coding in addition to your coursework. The people I know who code well taught themselves. Some have college degrees, some do not. Not a single one of them made a decision of "Should I learn to code or should I go to college". They all taught themselves just because they wanted to know how.
If we'e lucky they are taught theory. I have a CS degree and I was taught C++ strictly. I had no clue that learning a variety of languages was key. Now I know better and I am appalled at my school's curriculum.
If you're just a script monkey, fine.
if you're doing signal processing algorithms, encryption, loop control, modelling, and a slew of other things that require advanced mathematics. Unless you consider yourself some kind of savant (which you're not, asking questions on Slashdot) who can just pick up a book and learn it all, pack yourself off to college.
If you need access to a particle collider, yes you need a big, formal research facility. For everything else, there is enough free information to get a solid job. It's too bad recruiters are looking for a degree, they shouldn't. A programming test can be administered very inexpensively and the problem space is too big to learn every possible question by rote. Current system basically ensures that only rich white and asian people have a shot at a well paying job with their $100K+ degree, regardless of aptitude and effort.
Bitterness, check. Jealousy, check. Rationalization, blaming others for your own station in life, inferiority complex the size of Superdome--check, check, check.
Congratulations! You have exhibited all the negative stereotypes we associate with non college grads. You may now proceed to explain to us why, if you are so much more intelligent than us, you are so dissatisfied with your life relative to ours.
Signed,
Just Another College Graduate
Is the goal to convince people self learning is better than a structured leaning environment.
You a comparing people who became programmer because they heard it paid well. The did not program before college. They did no more than the class work.
Compare that to some who has programmed in there spare time for years. College will make that person better.
This works for sports music art.
The all what to train with a pro
Why would programming be any different.
"Does practical experience outweigh a properly trained structural engineer?"
I'll let you decide-- let me know whether you choose to buy a house that was designed with the help of one of those untrained engineers.
Faster isn't necessarily better. Anybody can learn a crapton of random stuff. However, that doesn't mean that there's going to be real integration with the other information they know. Nor does it imply that they'll be able to take that new information and generalize it for application in unrelated tasks.
I'm sure there are self taught folks that can do that, however, that's one of the major things that schools tend to hammer on.
As far as bureaucracy goes, a degree isn't the end all be all of competence, however it's a lot easier to check to see that somebody has at least completed the degree than it is to have to administer tests to all applicants over that kind of range of topics.
How does it help if the "obvious" code used the wrong data structures and algorithms in the first place, requiring obvious (rather than non-obvious) design optimizations to the whole thing?
We're discussing CS vs. self-taught, I doubt those coders at the company writing the obvious and easy-to-maintain code lacked the CS degree and knowledge.
Coder == Carpenter
Degree == Architect
Being able to write code is a skill. You can put together some good stuff, but you wouldn't want them designing a skyscraper.
Now a carpenter who has lots of experience definitely picks up many tricks of the trade and will understand things better. But can they do the math to understand how wind shear should be accounted for, how many elevators are needed for the occupancy, or all of the fire codes? Is that to say an architect can build a beautiful piece of furniture? Not necessarily but a skilled carpenter certainly will.
Now someone with a CS or CE degree will be able to write code, not only from their first year basic course, but having to implement basic algorithms and data structures. Later, they'll get into Design Patterns to understand useful structures. They'll get into OS courses to understand inter-process communications and race conditions. And finally and potentially most importantly, they'll eventually learn how to evaluate their algorithms to ensure they're doing things in the most efficient manner.
Depending on what types of apps you're writing, simply knowing coding can be plenty. But at some scale and/or level of complexity, 4 years of college coupled with an internship/co-op of actual experience will outweigh just coding. Yes, experience will certainly get you there as will lots of personal motivation and curiosity. Don't get me wrong, there are plenty of kick ass carpenters but sometimes you need something more.
As someone who learned how to code without school, and gradually since the early days of the internet, I think I come to the table as someone with a lot of practical experience on this subject. Practical experience is great. But when you are a self taught programmer, you're (at least initially) going to speak a slightly different dialect than your counterparts that spent years in school learning how to do this stuff. And that's okay, because it's something that's workable.
You're also going to end up with a lot of experience that revolves around the way you think, and the way you, personally, happen to solve problems. This is going to be an issue for you until you have about a decade of experience or so in the corporate world. The advantage here, is that there will be certain areas where you run circles around the college guys, which is great for your ego, and strong egos are important in young programmers.
The drawback is that there are going to be other areas where the college guys can expound on a subject at length, and you'll have no idea what they're talking about. If you're smart enough to keep up, you'll get it; just bear in mind that there will be things that you'll have to begin learning that the college guys spent half a decade studying.
The best thing you can do, as someone who teaches yourself code is remember that everything you're doing, and everything you have done is part of the learning process. Unlike a lot of the guys who earn degrees, you're never going to stop learning, and for simple reasons of economy, you're going to have to remain faster, stronger on the practical matters of your trade, and more open minded to changing platforms and workflows than your counterparts. This is what makes you competitive in the marketplace.
In the event that you do end up going back to school, usually because you've convinced yourself that you need an expensive piece of paper, I urge you not to make the mistake that I've seen some of the best self taught programmers make. Don't unlearn what you know. Don't forget what you've done, or the practical experience you have. Just because you happened to hear it in a CS lecture doesn't necessarily mean that this is the most accurate or up to date information on any given subject.
If you decide not to pursue the academic route (like I did), my best advice would be to take your craft seriously. Young programmers are like cats with imposter complexes, and they can make the mistake of seeing other programmers as competition. What I'm telling you is that you need to run directly against that instinct, and go out of your way to find good mentors. Most people that would mentor you work day jobs, and with a little cyber stalking, it's not really especially difficult to get yourself on their teams.
Comb through big open source or high profile proprietary products that you can verify are much stronger programmers than you, who may work in areas you're interested in. Seek these people out, stalk them, try to learn from them. Apply for jobs where they work. Try to get jobs on those teams. Then... learn how to take orders, and let them teach you what they know about programming and life. Of all of the options available to you as a programmer, this is the most challenging. But in my experience, it yields the greatest rewards... even if it is an exercise in humility at times.
There will be days when you feel the job has beaten the shit out of you, but that's how you know you're learning.
Don't give up.
Don't pretend you don't belong there. It's never your place to make that call.
Rinse, repeat.
Do this for a years, and you'll be among the best.
Hope that helps.
This signature has Super Cow Powers
As a successful coder who lacks a CS degree, I say: get a CS degree. Sure, you can learn all that stuff on your own, but you'll learn it faster and more thoroughly in school.
I am not sure you are understanding my point. My point was that they understand the systems and are responsible for implementing them. They are not necessarily writing the actual code themselves.
In theory, a computer scientist does not even have to have ever written a single line of real-world code and knowing how to code is worthless if you do not understand statistics, linear algebra, calculus, physics, or whatever underlying task the program is relying on.
Ultimately, it all depends on the individual and what their role in a project is. The dirty work of coding and the higher level conceptual work are too very different things.
bunch of false ads.
Here's how your RESUME goes in the Real World
yes we love your degree in "not knowing crap about this stuff, nice you know what a PN junction is, and your destiny/fraud based programming of your place in the universe is impressive yet borderline delusional." Sad. ya just don't meet our qualifications.
You can't actually DO anything can ya, as you have no REAL experience.
If we were looking for another leader with a vision of "PN Junction, MOV AX 1" we wouldn't have created this corporation in the first place.
.
Hey I will pay ya fucking $700 an hour, HOW MUCH are you going to MAKE ME?
Imagine a world where coding is as ubiquitous as reading and writing is to us today. Bear in mind that centuries ago, reading and writing was about as ubiquitous as coding is today, and was at one point in time the preserve of the masses. Writing for machines and reading machine instructions will at some stage become part of our everyday literacy. The thing is, efficiency matters: in a competitive marketplace, for a given market niche, barring underhand business tactics, the more efficient (and effective) software will tend to do better. Eventually underhanded business tactics will become too inefficient relative to the state of the art, and will be destined to die out (as, in general, will self-serving greed, it too not being the most overall efficient use of resources). Maths is unavoidable, and computer science is an outgrowth of maths, and is the part relevant to modern digital computers. Furthermore, concepts and phenomena we see in computer science and artificial intelligence often have implications and applications well beyond digital computers once considered in mathematical generality. Long term, coding is not enough, but not being able to code when computers are as ubiquitous as they are today is as sensible as not being able to read or write, or do simple arithmetic.
John_Chalisque
I thought HS was skills for a career, a life, a job.
College was for higher learning, not just a job.
===
Now HS is a daycare center
and college, a la BS degree, is summer vacation
and college, a la MS or higher, is entrepreneurship for some social networking startup.
Some degrees contains a lot of theory around algorithms but they miss the point of how do you code in a good way - produce code that's easy to maintain.
The bulk of the code written is essentially just bread and butter, check this, check that, merge strings, store data, retrieve data. Few have to concern themselves with indexing algorithms, best function to seek data - it's in the database API.
The "How to write quality code" chapter seems to have been lost (if it ever did exist) for many that are coming out fresh on the job market.
Employing someone with a degree in Computer Science can even mean that you employ a code jockey that re-invents functionality that already exists in a library - with the risk of new interesting bugs introduced.
If builders built buildings the way programmers wrote programs, then the first woodpecker would destroy civilization.
While in college, I saw a frighting amount of CS majors that didn't know how to program. Those folks later graduated with a degree.
Been there, done that, 30 years ago.
Every Windows driver with WHDL certification has passed the Microsoft Static Driver Verifier, which is a proof of correctness checker. Passing means that the driver won't blow away the rest of the OS with a bad pointer, subscript error, or other fatal error. Since Microsoft started requring this in Windows 7, Windows OS crashes have been way down.
About 5% of verifications either require too much time or too much memory. Any formally undecidable program would hit one of those limits. If it's that hard to tell if a driver has a bug, they assume the driver has a bug.
So there. Solved problem in practice.
Coding is engineering, not science. A fine distinction, but a distinction nonetheless.
This story is from the Epoch Times, the poltiical paper of the Falun Gong movement. Anything there that's not political is filler to make it look like a real newspaper. Probably not a good source for programming wisdom.
Well, you do learn to code in colledge too. It may be not the style the employer wants, but people who learn coding outside of classrooms may not be all that much better in the long run. Of course there are exceptions on both sides.
Your post also brings into question exactly how good of a programmer you really are as well. You see, English, much like programming, has a structure and a syntax. While you may have syntax, there is no structure. You may not have to compete for a job with someone who doesn't have a BS in CS, but you will most certainly have your cover letter compared to another person with a BS in CS who actually puts structure into his correspondence.
"Your post also brings into question your abilities as a programmer. English, like programming languages, has both structure and syntax. While your writing has syntax, it is largely unstructured. You may not have to compete for a job with someone who doesn't have a degree in Computer Science, but you most certainly will have your cover..."
... Oh, forget it. Your last sentence doesn't actually have logical coherence.
Hugs,
QA
Crumb's Corollary: Never bring a knife to a bun fight.
Probably one of those programmers who doesn't understand how tabs and spaces work. Honestly, I don't give the first shit whether you prefer tab or spaces: when you edit *existing* code, MAKE SURE YOU FOLLOW THE CONVENTION IN THE FILE! :)
It boggles my mind how some people can't comprehend this, and makes me question their attention to detail in other areas...
At USC Beaufort, we have a relatively new undergraduate major in Computational Science that includes elements of software engineering and high performance computing with an emphasis on problem solving and application over theory. We don't ignore theory altogether -- we just teach it in the context of actually *building* something. Computational science is not computer science--it's more like "science, computationally." The students seem to like it, so we're growing as a program, getting NSF grants, hiring new faculty, and placing our students in internships and full-time jobs ranging from web & app development to support of large-scale engineering projects. It's not perfect, but we must be doing a few things right, no?
Stereotypes go both ways. Why would you assume there are not plenty of students who loved to learn and hack while in college? In fact, my "extracurricular" projects were always what intrigued interviewers out of college, and I guess that has carried over to my interviews of potential candidates now.
Honestly, I had *fun* in college, as well. And also double majored, played a sport, made tons of life long connections (friends and networking). I appreciated that I had the opportunity to study and do many other things besides one specific future-job-related-skill. I understand not all college students got as much out of it as I did, but that doesn't mean my experience wasn't valuable in many ways, job-related and otherwise.
Just my $0.02:
I've met all kinds: self-taught (for the most part what I am), university educated with varying levels of degree and anything in between. I've seen lots of people with high level degrees who were totally useless as soon as actual code was involved, but I've also met the other kind, highly intelligent people with degrees that at the same time were able and especially willing to use what they had to craft superb code.
If you want to learn to program and do actual work instead of just meditating about computing theory or fiddling with database concepts, you will. In the end, you must want to learn it, you must be interested, and you have to be a practical girl or boy, interested in getting into the thick of it and getting your hands 'dirty'.
IMHO, whether you get a degree or not has nothing to do with that.
If a train station is a place where a train stops, what's a workstation?
where all the bad code is coming from
You simply won't be considered without a degree in a relevant numerate subject. It doesn't have to be computer science though. There are also specific software engineering degrees that typically diverge from the computer science stream, after the first 1-2 years.
In the United States, consider a masters. The first year or so of a degree, is typically high school level material.
it wont help you shit in how to design the thing you want to build.
not that many most jobs are CRUD type applications
I once had a recentish graduate comment oh 3Db isn't much :-) Its more than Double BTW!
I'm 45. I started coding at the age of 14-15 (GW Basic) and still love it today (mostly C/C++). While in school, me and others were always way ahead of our teachers, we had to "learn" again what we already knew. Yes coding can be taught, but not the love of it, nor the art of it. Also, for your code to work, it has to be beautiful -some will understand what I mean by that-, simple and one-task dedicated. Coding is a beautiful thing.
I had to write some vector-handling code, in PL/SQL of all things.
Doesn't really seem sane. Why was that needed?
Maybe the problem is the definition of 'code'. Is is just cobbling together bytes that seem as if they want to fit together, trying to fit the round piece in the square hole until you realize that may be the wrong way to do things? Or is it the same as programming, which should involve a plan and design and a deeper understanding of the problem and possible solutions? 'Code' certainly sounds a lot more like "I hacked together something and it even works!" than 'programming'....
If a train station is a place where a train stops, what's a workstation?
The value of "learning to program" is roughly comparable to the 1st year of CS classes at a reputable University.
And that it the delusion that people operate from that got us a hackable Icloud, and endless years of buggy MS software, UX and other abominations.
Also, the degree is no replacement for practical experience.
This is true.
Here is the problem, Learning and programming are far, far, far more important that theory. I have (as one of) a degree in Avionic. You know how long of the two year course was spent in theory of electronics? 6 weeks. Theory of flight? 6 weeks. Actual repair, assembly, fabrication, customization of the actual avionics components (which are miniature computers now not the old fashion dials and gauges, but I digress) The entire rest of the course. Computer theory is meaningless without the ability to actually code, debug, and compile actual complex software as know the principles of flight is with being able to fix or fly a plane.
12 weeks max. No more. When someone one leaves a college, they should be able to code in at least three languages something that would be production ready. Just Like my final test was to fix a malfunctioning avionics component on an ACTUAL 747 (yes we had a gifted one in our hanger that was used for tests. It was no longer flight worthy but we were never told that until after the test.)
AC is the reason people can fap to J Laws and Kate Uptons nudes right now.
I would so mod you up right now. You are so my point I was making earlier.
Does Learning To Code Outweigh a Degree In Computer Science?
Yes it does. In the "real-world" at least.
There's been lots of talk in this entire thread of learning to code only getting you so far and will only make you a "cookie-cutter programmer" whilst getting theoretical understanding that a degree will give you helps you to go much further and be a true "engineer".
I don't disagree with this, however, the sad reality of the real-world is that there is far more demand and opportunities for "cookie-cutter programmers" than there is for "engineers". Most employers don't really want engineers who'll spend excessive amounts of time working out the very best solution to a given problem, they want code monkeys who'll quickly throw something together that works so they can get it out of the door quickly and invoice the client.
Funny enough, I myself am completely self taught and have not needed a computer science degree to land work because I was lucky to have pushed for work experience, internships, etc. I have attended zero Unis and paid little to nothing for my education while most others I know who have gone to get the degree are drowning in debt.
Employers look highly upon folks with actual industry experience, most don't even give a rats ass about your piece of paper... it's worth as much as toilet paper to them. The last company I worked for, when I first applied for work there, there was a cocky little bastard waiting with me to get interviewed for the position. He scuffed at me not having any degrees of any kind telling me "bro not sure why you're even here". Long story short, the guy walks out the door all confident and gloating and I'm the last one to go in. I showed the employer (my former supervisor and very good friend now) the two companies I worked for over a period of 2 years and I landed the job then and there. Didn't even include any of the other work experience and internship stuff I had done, only the full time work I had landed.
Degrees win you fuck all. Degrees are a new age of "permits" so to speak. Don't fall for the BS scam of the new age. You look back 40-50 years and most people were either self educated or were taught by people who knew the trade.
College computer science programs are doing the right thing. There's no point in college if all you want is "practical" programming skills.
I would really like to learn to code and a job doing it. I can setup and maintain LAMP stacks in my sleep. I'm just tired of the infrastructure side of IT.
A practical job writing code all day probably gains little benefit from a CS degree if you can learn the fundamentals another way.
If you want to do research and design then you probably should go down the CS degree path.
Some of the best coders I know are CS major dropouts. I hire and lead Web UI devs for my area at a Dow 30 company for the most visible consumer-facing web apps. If you can whiteboard out the code I need and show an aptitude for learning more, you're in.
Education looks good for the initial HR and management filters, but seriously- 10-15 years into your career, how much design pattern work that you're then using did you actually pick up in college?? Myself, I'm not doing so much Pascal and emacs work... If you're not continually learning, you're dead-ending yourself. So if a candidate shows they're already in that self-learning track, that is much more tangible to me.
Know the scale of where you are applying for a contract or FTE. If it's enterprise, know and have experience in enterprise SDLC and don't put down PHP and MySQL without having working knowledge of Agile, source code management, and a good diverse swath of languages, platforms, and frameworks.
And bite off a little more than you can chew. Never overstate yourself, but do show the inclination to learn. I can teach anyone to code, but I have to see that thirst in the very short amount of time during you're interview.
Am I saying to skip college? Absolutely not. The life experience is worth it. Is it essential to landing a great coding contract or job? No.
But less literate then (sic) those with an educaton.
I have been an employed programmer for about 8 years now, dropped out of school to get paid instead of paying. Every single person I have had to work with who had a CS degree have had two traits in common. First, they love to remind you they have the degree. Second, they barely contribute anything to production except great ideas of how not to do things.
As a non-degree'd person, I have done contract work for 3 separate universities so far. You would think they would have an infinite supply of proud cheap labour to tap before giving me a call.
You sound pretty bitter.
Also, has it dawned on you that people might be doing a degree because... they want to learn things, i.e. not necessarily to make money on their job? Is this notion so outlandish to you that you fail to even acknowledge it?
Also, in many (most?) countries you do not pay to go to university.
Improve at backgammon rapidly through addictive quickfire position quizzes: www.bgtrain.com
However your University may not have used Java or some buzzword fancy new language that is all the rage, but rather used an older core language.
So when you are competing against some one year code monkey for a job that lists whatever language is the flavor of them month that you don't necessarily have it doesn't work out well. I have tried explaining that the fundamentals are the same, or that I would be able to pick up any language very quickly, however to management and HR, the guy who had the training in the fancy wing ding gets the position.
Congratulations! You have exhibited all the negative stereotypes we associate with non college grads. You may now proceed to explain to us why, if you are so much more intelligent than us, you are so dissatisfied with your life relative to ours.
Because my parents couldn't afford to send me through college, and I was too busy coding in junior high and high school to keep my grades up or network with the right people.
-Hentai [in vita non pacem est]
Absolutely. And usually early optimization leads to way more spaghetti code than properly describing the problem, coding a conceptually elegant solution, and then optimizing from there.
-Hentai [in vita non pacem est]
Symantec? You worked at Symantec?
I've met people who were brilliant sysadmins or developers but who never went to college/uni, let's call them the enthusiasts. In fact, I'd say many of the best free-thinking problem-solvers (those that could deal with an "unexpected" issue and sort it out quick) were not college-educated.
However, there is one thing the "educated" people brought - other than an expensive piece of paper - was structure in dealing with long-term support, mainly documentation. The college people tended to indent nicely, comment code, and use variable names more descriptive than $x1, $x2, etc. They tended to leave a paper trail that was easier for successors or co-workers to follow.
When sh*t hit the fan, the college guys sometimes fell into a "OMG it's not in the book/docs, what to do!?" whereas the "enthusiasts" were quick to come up with useful but sometimes unortherdox methods for diagnosing and fixing issues.
I'm more of a middle-grounder myself. I spend years dealing with crazy computer issues before Uni, but still managed to scrape up the cash to attend. Having industry experience was also helpful in finding a decent gig post-Uni (for that matter, I *highly* recommend a course that has co-op - work-terms, generally paid - if available). If you *like* code, there's no reason you can't go to Uni and/or do some side projects of your own for fun and learning. Again, in my personal experience, Uni provided me with the *structure* that helps maintain the systems I run, but experience and an interest in the industry provided me with the ability to deal with quirks and unusual situations. Engaging in activity that show you have good group-work/communication skills is also *very* helpful.
For those hiring, a team with some educated coders/admins and an enthusiast be *very* effective. The problem is generally in finding people who work well together, as both types tend to come with their own variety of ego. It's sometimes hard to get the enthusiasts to commit to building good documentation or working on longer projects (they work well on-the-spot but can be more easily distracted/bored), and you get a lot of upmanship (upwomanship?) in either direction.
I'm not sure what market you're in, but here in Dallas TX it's super easy to get a job in technology. Extremely easy.
I dropped out in 9th grade and it's only been an issue in a handful of interviews. Never had a gap in my work history and make 6 figures.
Programming is something you do to learn comp sci, but it's not the point, much like the point of carpentry is not to learn how to swing a hammer. This view that a comp sci graduate should automatically know how to program large projects is asinine, that's not what real comp sci is. Vocational degrees are great if what you want to do is simply learn to develop software, go know yourself out. On the job training in an entry level position for someone with a comp sci degree (or you know, an internship) solves this problem as well, I don't know why this whinging comes up so often.
I'll tell you one thing my degree is freaking great for, not getting my resume thrown out with the 250 applicants that had no degree. Technically, personal references trump everything, I'm not sure how well half our industry does with those given the high rate of "interesting" personalities.
Become a programmer through self-study/training course and get an entry-level job with a company with tuition reimbursement. Then take night classes. Get practical experience as you get theory. Get paid. Get school reimbursed. It will take six or years instead of four, but you will have 6 years experience and have a "staff" title, working on your "senior" title when you graduate.
The original author of the article missed the point of a USA university degree. The goal is not to become technically proficient in a career choice as fast as possible. Good universities in the USA give the student a broad perspective on diverse topics from ethics to history to philosophy to mathematics to [insert your career]. A 4 year Bachelors degree can be one of the funnest and greatest times of your life where you are given room to explore and make discoveries and mistakes. Ten years after they graduated, the majority of the people I know who went to a top 50 university regard it as the one of the best times of their lives.
Take a chance, grow your soul while you have a chance.
Having ANY degree is a good thing, though. It shows that you can follow through with a long-term project, which is what a degree ultimately is. I'm getting a degree in Information Systems, which includes database and other applicable programming. It's much less theory, and a lot more relevant learning.
degree is morely to produce an engineer, self taught is morely to produce a hacker. This refers to a planned approach vs "just start writing / changing code".
The very best engineers (in my experience) were self taught. The very worst hackers were also self taught.
"Learning To Code" and "Computer Science" One is a subset of the other.
Those numbers "about half of all software engineers have a degree" [wikipedia]. "Nearly half of the software developers in the United States do not have a college degree. Many never even graduated from high school" I haven't been able to find a single study that confirms those statements, and it isn't corroborated by my own experience. Even if they were real, what would they even mean?
If all people who write programs of all type are included, the number may have some validity, but in my team which builds software that runs an advertising network 6 of the 8 software enigneers have a degree. The two outliers are a developer with twenty years experience building software, and a senior graphic designer who is holding an internship level software engineering position because the company wanted to support his desire to change careers. Across the engineering department, a hand full of engineers have degrees which aren't computer science, but very few of them have no degree at all.
Building software is a lot like other skills, skill sets vary. You don't hire a detailer who you pay $20/hr to wash cars to paint a car if you want car-show quality results; you hire an auto-body expert and pay him $100/hr. Similarly, you might hire any old contractor to build a garage, but you don't hire any old contractor to build you a thirty story building — you hire a real architect, and a real engineer. On the same note, you can't hire someone who just "can program" to build a system that runs a business of much scale.
Michael Jackson's (no, not that one) first two rules of optimisation:
1. Don't do it.
2. Don't do it yet...
Metaphor: So are you asking whether or not learning to use a hammer and saw outweighs becoming an architect? People who just learn to code are most likely to produce unstructured, difficult-to-maintain, "spaghetti code." Why? Because they are focused on a line-by-line development process, and rarely see or give thought to the overall structure of the software they are developing. This can be OK for small programs or software for personal use. Programs developed by coder-only people often have code that flows out like an amoeba rather than code that has an expandable solid structure to it--impossible for the next guy to alter or maintain. Granted some colleges don't see this and instead equate coding with software engineering. The best CS curriculum dwell on structure and testability of the software, and focus less on what textual syntax actually produces the executable binary code. True software engineers design the software--coder merely fill in the blocks within their little corner of the design.
i think solving the problems in our industry is interesting, and it's clear that many attribute some of those problems to their education experience
the notion that 'computer science' and 'software development' are two different 'things' is reductive and confuses the question
it is a false dichotomy, as another pointed out, on many levels
i used to teach in academia...in an **academic setting** within a greater 'school' I can certainly see the need to differential between 'computer science' and 'software development' as distinctions **within computing generally**
they could be two different major options within a greater "math and computing" program, just as an example...
in *that* case, the distction is relevant and logical...
in general discussion, the two activities frequently describe the **same behavior**
they're overlapping terms in common parlance...so yes, this all matters...because how we train the people who work in our industry matters...when we talk about the problems of "computer science" we really confuse the discussion and make things more confusing by drawing hard-line linguistic distinctions as you do
Thank you Dave Raggett
This is like saying that most buildings don't require architects. This is true if you don't care if the final result sucks. When software fails it's usually just inconvenient. When a building fails, people usually die. We typically care more about building quality than software quality. If you don't care about software quality than hire a self taught coder. If you don't care about your building being safe, then hire a construction worker to design it.
As someone who worked as a software developer before and after I got my degree, I can tell you that the degree matters. I experienced a 50%!!! increase in salary after I got my BS in CIS. I got my last two jobs after I received my diploma, and both employers looked at my education during the background check. I agree that it shouldn't matter, but unless you have a killer app on the android store, or some other tangible piece of evidence of your coding prowess, the employer is going to want to see the degree.
Of course a construction worker who actually knows what he is doing is more valuable than some kid with an architecture degree who has no idea how to do his own job.
That's true until your building falls down because the construction worker/self-taught architect didn't know the fancy theories behind calculating loads and stresses, and only knew how to attach metal piece together.
Getting a Master's Degree in Computer Science has not only afforded me a professional advantage in every job I've ever applied for, but also provided a solid foundation in the fundamental algorithms, data structures, and patterns that underlie the high level tools and platforms that I use every day. I know from first-hand experience that the degree gave me a broader perspective and deeper power of insight than colleagues without degrees who merely pick up the language-of-the-day as they go along.
Get a degree if you have the opportunity and want to learn this discipline from the theory to the metal.
I don't think any unbiased person out there could suggest that a solid academic foundation could actually hurt.
Maybe that analogy holds up for some companies; as I said, there are companies that need computer scientists who can code just like there are companies that *need* biologists, architects, or artists that can code. I want the Adobe Illustrator team to have artists on board, and I want Google's search team to have computer scientists on board.
But the reason your analogy falls apart is that not all applications are Google search. At all of the software companies I've ever worked for, and most of the ones my friends have worked at, knowing big O notation is *completely* useless. In contrast knowing that you want to cache your jQuery selector before starting a for loop (vs. re-querying on every iteration) is pretty important. But even still, I've interviewed plenty of developers with major companies on their resumes that didn't even know that much.
The simple truth is that a large number, if not the majority, of applications you use and websites you visit have team members with no CS degree. Some of them don't even have a person with a CS degree on the team. But those applications/websites aren't crashing and burning because they lack academic knowledge: they're (successfully) powering your life.
Gets what they pay for.
From the post: "Nearly half of the software developers in the United States do not have a college degree."
Well, that explains a lot! Colleges teach people how to think critically. Not knowing how to think critically leads to the kinds of flaws which are exposed daily in software.
I feel that there is an unfair expectation put upon new grads here. "graduates...are often ill prepared for the work force." The unwritten expectation here is that the graduate will be proficient at programming, and able to code at their employer's request the day they graduate, as if colleges and universities are just pumping out coding machines ready for the factory floor. I think it's entirely unreasonable to expect a fresh grad to have the wherewithal to code in a real world production scenario on day 1. At university, they've been schooled in the concepts and skills they will need to help them grok the scenarios they will later encounter in the work force. That's what college is, a place to learn; some application is needed, most certainly, but the foundational learning is crucial. Software engineering programs aren't like a trade school, where after 1-3 years you come out a skilled plumber or other skilled craftsperson ready to rock it. But that's how I feel that the aforementioned employers are viewing software engineering, like a trade, that has specific parameters to learn, the graduates of which should immediately be plug-and-play in the workforce. This kind of naive short-sightedness permeates the software industry, and reveals itself in computer-illiterate management and product-owner types who's mindset is analogous to "it's just programming, its all the same". "Oh you went to school for programming? So you can fix the e-commerce system then." "You know Java so you can you fix the web page layout issues." "Is it fixed yet?" External coding schools and programs are fine, but if they aren't teaching theory and the foundational concepts, they're just creating a bunch of do-it-yourself coders who, in my decades of programming experience and now software management experience reveals, are more often than not sloppy cut-and-paste hacks who burden the forums with questions they would know the answers to with proper foundational education. This is not always economically feasible for some, I know, but that's a different topic. Get the degree. You'll be glad you did.
I'm not going to comment about the value of the degree to the employer. I have my own opinion and it and it has already been covered more than adequately. I want to point out the value of the degree to the developer.
When my son was in college he mentioned that a friend of his had been offered a job with a decent starting salary without the need to finish his degree. That was in 1999. The industry was flying high. I pointed out that he risked stagnation w/out the degree. It would be difficult to move to another employer w/out the paper. This meant that his current employer need not pay him commensurate to his skills. I saw it as a cynical move on the part of the company to capture talent that would then find it harder to leave. Worse, if the economy tanked. he would be competing with degreed professionals for the better jobs.
He took the work, the dot com boom turned into the dot com bust and he was out of a job. At that point he returned to school and finished his degree. Fortunately he was in a life situation where he had that kind of flexibility. Had he a family to support and perhaps a new car and mortgage to pay off, he might have been in a pickle. Lots of degreed professionals found themselves out of work at that point but I'm sure the degree gave them an advantage finding something else to do.
And just for grins, I interviewed for a position today and they *did* ask about my degree (earned in '82) and how applicable it was for the work involved. And yes, I will start Monday.
Learning syntax and APIs are one thing. Maybe you're particularly adept at that. However, this is only a fraction of what makes a good software engineer. Theory is critical to their application. The development of robust, efficient, and maintainable software more than just knowing how to mash the keyboard and hit "compile". The theory of application for those APIs, the theory underlying data structures and algorithms, theories of architecture, etc.. With out these your projects will suffer as you constantly reinvent the wheel and "learn from your mistakes." Yet, those who went the self-teaching route most often skip the theory, skip the mental exercise, narrowly focusing on syntax and APIs.
I'm not saying a college degree is a perfect accommodation for producing best of breed software engineers. I think many colleges are missing the mark on providing necessary experiences encountered by those in the trenches. So much of the course work feels like bringing a tank to a knife fight and it provides a distorted sense of reality that undermines the point of what they're learning.
Two of my imaginary friends reproduced once
Self-taught, while not always, usually means all syntax and APIs but precious little theory except that which is obtained through osmosis. Due to the "you don't know what you don't know" factor this limits not only the domain of problems that can be solved but the efficiency, robustness and maintainability of their solutions. Most often they reflect a focus on too many trees and far too few forests. A reflection similar to their decision to try to shortcut their way around the prerequisite of a formal education.
Mean while anyone having to work with them or their products is forced to waste time waiting for the reinvention wheels as well as fixing or working around their messes.
Two of my imaginary friends reproduced once
You would be surprised to see how many interviews you can cut short by asking questions like: "what is the purpose of inheritance in OOP?" or, "You are told that you are going to be assigned to a project involving a number of technologies for which you currently have no knowledge. How would you prepare?"
Two of my imaginary friends reproduced once
At all of the software companies I've ever worked for, and most of the ones my friends have worked at, knowing big O notation is *completely* useless.
You need to know about things like time and space complexity when selecting appropriate data structures. For people who don't know what their doing, an array works just as good as a linked list (until it doesn't), and someone who understands time complexity needs to figure out why the code is slow and fix it.
Some plain old coders know the basics of computer science, but there are a lot that don't. There are even people with CS degrees that don't know the basics of CS theory. So no, not ever programmer needs to know about the halting problem and finite state machines, but you need to at least know the basics to write code that doesn't completely suck.
I'm not saying you need a degree. I'm saying that a degree usually indicates at least a basic understanding of CS theory which I think is indeed very important. There is more to being a software developer than "Knowing how to code" (i.e. Writing code with correct syntax). And I have found that many if not most self taught coders (along with some CS degree holders) do not really have the skills necessary to write *good* code, due to lack of understanding about basic theory. And by good code I mean code that doesn't have to be rewritten at some later point by someone knowledgeable.
Some of them don't even have a person with a CS degree on the team. But those applications/websites aren't crashing and burning because they lack academic knowledge: they're (successfully) powering your life.
Most code sucks. The reason websites continue to work (sort of), is because they are all relying on good software written by people who *did* know what they were doing. And this code is usually so good that it helps people who are incompetent make something that kind of still works despite themselves (given enough time). Most of the time it is not even cheaper to hire incompetent people because it takes them so much longer to get things done even with all the great tools out there. It costs the same to pay someone $100/hr to finish something in 2 days than it is to pay someone minimum wage to finish it in 2 months.
And as far as people who know a lot of theory but don't know how to actually make anything... I don't think those people really exist. I too spent most of my time in college drawing boxes and arrows rather than coding, but even with a heavily theory based program I was exposed to 2 wuarters of C++, 1 quarter of assembly, 1 quarter of Java, 1 quarter of networking (udp/tcp), 1 quarter of SQL, etc. Learning to code competently is relatively simple. I'm not saying that theory is very hard, but if it were easy, then everyone would do it (without school). There are many of coders for every person who knows theory. And even new grads pick up coding in a few months if they don't already know how to code pretty well at the time they graduate.
The development of robust, efficient, and maintainable software more than just knowing how to mash the keyboard and hit "compile". The theory of application for those APIs, the theory underlying data structures and algorithms, theories of architecture, etc.. With out these your projects will suffer as you constantly reinvent the wheel and "learn from your mistakes."
Amen, but ...
Yet, those who went the self-teaching route most often skip the theory, skip the mental exercise, narrowly focusing on syntax and APIs.
Now you just made a logical leap that I can't follow. Especialy when we both agree:
I think many colleges are missing the mark on providing necessary experiences encountered by those in the trenches.
So is there more to being a good programmer than just syntax and APIs? Absolutely. But you'll need to give me some sort of evidence if you want to claim that fresh college graduates have more of the practical "theory of application" knowledge than an un-schooled coder, since that goes directly in the face of my experience. The way I see it, a college graduate is more likely to know how to implement a linked list (which they likely never will do), while the self-taught coder of the same age has at least worked on some projects and learned from some "reinvent the wheel" mistakes.
It isn't always about primitives--bubble sorts, linked lists and the like. Theory deals far more broadly.
Two of my imaginary friends reproduced once
It's a person with the ability to logic and reason a problem to its completion regardless of their coding skills or degree. But..... Most CS or MIS grads I've worked with were for the most part unable to cross the road on their own. They were however skilled in manipulating management into believing their CS-speak. Of course this also goes for the "bulldozer coders" who amuse and confuse management with piles of listings and errors only they can deal. Plot.... Myself and others have always contended that our college professors were all members of a Red Sleeper Cell hell bent on creating future impotent CS leaders. Case in point would be Gates, Jobs and the whanker who came up with C.
This is not the point you are trying to make but maybe it is, not sure here: most of the cohders I know and have known over the years (this is now more than quarter of century) have no f. clue about construction of robust and reliable software systems and structures. In fact those that do are a few and far between. The difference between those that do and those that do not have a clue is striking and does not involve speed of coding but rather speed of development - in case of really good guys you still have to refactor but there is visible sense in it and you do not have the feeling you got yourself dirty when you are done with it.
This is an interesting post regarding computer science degrees.
I believe there are two tracts – formal education (BS, MS, PhD, and certificate tracks (MCSE, CCNA, etc.)
Each has valid application.
I went to university late in life, it was 2003. At the end of the first semester, I looked at the syllabus thinking, how am I going to get a degree in IT if they don't even do lab work until the last quarter. SO I went on my own and started learning programming, not IT.
In other words, mostly rote memorizing that on a model XYZ the red plug goes here, etc etc. Monkey work.
This is how the games industry works. This was particularly necessary in the previous generation when writing 'optimised' code wasn't guaranteed to really be that much faster depending on the platform. The PS3 is fast, but making things run well on it involves jumping through a lot of hoops and understanding what data needs to be in what bit of memory at what time. As long as the general developers were writing code that wasn't obnoxiously slow, it was fine.
It's almost always a surprise when you run instrumentation tools and find out what the real bottlenecks are. There are a lot of interactions between various agents in large-scale games, so doing anything other than writing obvious, clean code is just making trouble for everyone else.
A lot of other people have gone over what's wrong with your argument, so I'll try not to rehash that too much.
I'll admit that my 13 years as a professional programmer (after my degree) are years that I would say are more fundamental to my general programming skill than my CS degree, but I learned a lot of things in University that are hard to come by elsewhere. I learned a lot of things that aren't about computers, and that's been really helpful.
Being good at programming isn't the only thing that makes a good programmer, it turns out. I'd way rather have 5 programmers on my team that rank as 7-8 out of 10 than 5 10/10 programmers. In my experience, those guys are too interested in being good at programming and not interested enough in making something that's going to work for everyone. I'm in the games industry, and our programmers need to be able to talk to artists and designers. You need a few of those really exemplary programmers here and there, but being broadly interested in things is way more useful than being able to pick apart a C++ compiler.
But also, I have a lot of options available to me now. I won't always work on games. I could probably jump ship to an environmental science firm without too much effort because my minor was in Earth and Atmospheric science. I speak geologist and meteorologist and even some palaeontologist. So much programming is undertaken by scientists that have no other choice but to program their own tools because the programmers of the world don't understand the problem space and it would be harder for them to learn the problem space than for the scientist to learn how to code a bit.
Lastly, I think you misunderstand computing science as a discipline. The fact that I finished my degree 13 years ago doesn't mean that much of it is out of date. The optimal rasterization of a line is still the same, algorithmically. All the graph theory that I learned is permanently correct--and permanently useful. Compiler implementations change, but compiler theory is largely the same. The stuff that you learn in computing science is actually really fundamental, which is what prevents it from going out of date. I can't stop learning without being left behind--the same as you--but I learned things up front that will always be mathematically, provably true. I'm not saying all of it is immediately useful (I think a lot of it isn't, in my field) but just because it's old doesn't mean that it's useless.
I wouldn't discount hiring a programmer without a degree. I've worked with several excellent--really, truly excellent--programmers that came to the industry without anything other than motivation. But don't tell me that just because out of my 18 years of being academically involved with computers, 4 of those were spent mostly in the classroom that I don't know how to fucking code.
Sure, there's going to be exceptional members of each class. But look at it this way:
Who am I, as a un-degreed programmer, more likely to run into when dealing with someone with a degree - you, or the guy who can't code and who is using his degree as a crutch to bully the people who actually know what they're doing?
Who are you, as a degreed programmer,more likely to run into when dealing with someone without a degree - me, or the guy who just knows how to cargo cult his way through a CRUD web form?
I've taken a strong interest in biology, biochemistry, physics, neuroanatomy, sociology, psychology, history, and abstract math; while I have no major or minor in any of these subjects, I can generally have an interesting discussion about the relative merits of Bohm vs. Everett-Wheeler or the cellular hormone signalling going on in butterfly metamorphosis or the peculiar sociopolitics that influenced the transition from the last Chinese emperor to the pseudo-communist regime. And not everyone who didn't go to college is like that, but generally speaking, neither is everyone who went to college. And I've found that being a college graduate is completely orthogonal to knowing what the hell you're talking about, whether it's within your major or outside it.
But the thing is, if you're coming in as a Lead Developer, and you have a degree, I can't discount the possibility that you got the job on the merit of your degree rather than your skill - so from my perspective, the likelihood that you know how to code is less likely if you have the degree, because it provides an alternate (and regrettably much more salient) hypothesis for how you got here.
Does that make sense?
-Hentai [in vita non pacem est]
If all you wanna do is code, then you don't need a computer science degree. There are plenty of companies looking for people to do form plumbing.
Now, if you wanna do real computer science, yes you will need a degree. By real computer science I mean things like improving performance using algorithm complexity analysis (Big O), knowing when to utilize the best data structures, architectural optimizations, AI, writing your own lexers and parsers - the list is endless.
Computer science is different than coding. Whereas coding is a tool, computer science is the study of any kind of computation. You can implement a quicksort algorithm on C++ or while sorting your own clothes in the closet. Both are computer science.
If "learning to code" include some careful, thorough attention to theory, algorithms, oop and patterns AND a deep, productive dive into building real functioning software, then, yes, it's beats the shit out of a BS from most colleges. Languages and frameworks are essentially built environments. Theory and ease in learning core language features doesn't compare at all with extensive experience with a set of useful, well supported libraries and frameworks. Most wheels have been invented. Most problems require the applicarion of existing structures. Yes, there are important instances where extensive knowledge of theory matters but you can add a HELL of a lot of net value without deep theory that is impossible to add without specific knowledge of libraries and the application of patterns.
Every rule has more than one consequence.
Self learned coder: yes
Coder with a degree: no