Is this true? Can I start looking right now? Granted, I am not in the valley. I'm all the way in New Jersey.
Is this true? Can I start looking right now? Granted, I am not in the valley. I'm all the way in New Jersey.
You'll have to do the math and weigh the cost/benefits of your degree.
Personally I think we're in a bit of a bubble/gravy train. The idea that programming will become the new automotive assembly line for self-taught labor is a bit of a stretch.
A degree can impart many benefits (math, core CS ideas, subject matter classes such as speech theory, advertising, management, etc). While many people can make enterprise apps with direction based on being self taught; not many can really build something in depth. Boeing isn't going to let just anyone write aerospace firmware. So if you want to get a job quickly and milk this while it's hot - maybe you go for it? I don't think it's clear cut, and I like having my degree. I'm good friends with fantastic developers without degrees who work alongside me.
In the long term; it depends on the competitive advantage you can get out of that time in school vs your peers extra experience in the field; as well as your goals.
Developers generally fit into two broad categories -- those who learned to program on their own at age 10 or so and those who decided to pursue a CS degree because the job pays well or they like playing video games. 7 years of experience beats 4 years of college and 3 years experience pretty much every time.
Unfortunately, a huge amount of CS degree time is spent dealing with those with no experience (We have remedial Math or English classes, why not remedial programming classes?). When I hit college (pursuing EE with CS on the side), I already had almost a decade of programming under my belt. I coasted through anything programming related (I'd already found and read books on the theoretical side of programming, so even those weren't that interesting).
At the end of the college road, the people with college only were mostly worthless. They may be able to parrot the big-O notation, but they couldn't tell if a function would be efficient. They could talk about design patterns, but they couldn't handle systems more complex than a couple files. That's nothing against them, I (and others who had been programming from an early age) simply had a lot more experience in thinking in that way (and over time, most of them have become much better).
We need to introduce programming to all children at an early age. Not because everyone can code (that's not at all backed by any studies I've ever seen), but because lots of kids don't find out that they have a knack for programming until college (or not at all).
If most CS students had been programming since middle school, CS could drop a bunch of the remedial classes and focus on the finer parts of programming. Many so-called masters classes are within easy reach if you have some programming time under your belt. Companies would be a lot more willing to hire a dev out of college if they knew college was worth something. Until that happens, I don't think a degree is actually better.
The second way is easier so I'll get it out of the way. More education earlier is an argument that formal programming education can be helpful. That wouldn't undermine the idea that a CS degree has importance on a individual basis; not as a general yes/no rule. We've agree that formal programming education CAN help.
The second point is big for me, and it really bothers me to be honest (not about your post, I appreciate your post). It's this idea that the CS degree is this static cement thing; like we order it from Amazon. A degree is what you make it!
Your point about remedial classes, etc is spot on. It's exactly an argument that each person has to weigh the benefits they can get from the degree with the benefits from going right into the industry. If the person shows up at college and picks programming for the reasons you described; then you are probably correct in that it is not "better". However, college is a four year chance to build a competitive advantage. Statistics. Economics. Linguistics. Physics. Accounting. Art. Etc.
If someone chooses to make their degree a worthless money sink, that does not cancel out the person who spends four years learning to code, analyze speech, and working hard on the OpenROV team. Those are two completely different people and neither needs to put their degree on their resume. But only one can put speech analysis and OpenROV there; which they got as part of that degree. They also now have those contacts and team building experiences. Another example might be someone who spends the four years working part time as a contractor. "Got a degree while building industry experience" trounces "got a degree" AND "industry experience" (imho).
A degree is something you pay for, it's an investment and should be treated as such (in the scope of our discussion). While the underlying argument may be if an employer cares; I think that honestly employers are looking at it as a signal that there might be something more to you than some Java/JavaScript syntax.
Right now my in major GPA is above a 3.2 while my cumulative GPA is hovering around a 2.9; I just don't care about non-cs classes.
This would be find if being at a university had any noticeable benefits, but it only has detractors.
- No one will hire me for a paid position
- I have to waste most of my time on classes I don't care about
- No more time for my side projects that I use to learn.Other classes folded back into CS or working for a business as well. For example, my psychology course was helpful in a number of areas, including as preparation for an AI elective I took.
We also have a requirement for attending a philosophy class about ethics in computing or something.
Somewhere in there I took a few actual EE courses.
Guess which ones had the most impact on my career? Hint: it ain't the EE stuff (although I worked as an EE for 6 years after graduation).
Computer science is only focused on logic and algorithms with state.
It's not really math.
But in the end I DON'T mind math classes, I like math classes. I mind stupid English, Lit, and Phil, classes.
I'll probably go for a math minor. I like it. But I'm not going to for a English minor.
You could be affected by any number of things (wrong university, wrong goals, wrong order of operations, in a hurry). Please don't be offended, I just mean that you might leverage your resources better and find classes you care about (I ended up double majoring in CS and Economics, but I didn't care about econ until I tried it).
Here is a more plain and TLDR response. Pretend it's a new investment and write down/spell out what you are putting in and getting out. If it doesn't add up, don't make the investment.
Finally, not caring is a problem. For some arguing in favor of degrees, this is a big part of their point. Why don't you care about those classes? Do you think you'll only ever get cool and interesting projects at work? An employer needs to know you'll spend two weeks finding some ridiculous bug that doesn't even affect anything if that is what they assign. Every third Sunday, the system crashes. Fix it. While your peers do greenfield work. It means sometimes putting effort into things you aren't interested in as part of the bigger picture.
The more interesting work goes to programmers who can communicate. 90% of programmers can get the job done; I want someone who can articulate what he's built, how it can be improved, when it will be ready, what needs to be changed, what we're doing wrong, etc.
That's what all those classes you don't care about are for: giving you perspective outside heads-down coding that can be outsourced for $50/day.
You'd be amazed at how many people I have interviewed that simply either can't, or won't talk (from the interviewer's perspective they are the same thing!).
Again: most halfway decent programmers are adequate. The great ones are great not because they can write code, but because they can explain how that code works to someone else and, vice versa, they can understand someone who is trying to explain why the code doesn't do what they need. That is worth paying for.
The other day I finally cut a guy off and said, "Yes, sure, you aren't good with terms and explanations. How do you have technical discussions with other developers? What do you do in code reviews?". Deer meet Headlights.
I also realize your point is beyond technical communication, and you are right on that too.
One point people make is the best programmers without degrees are better than the worst programmers with degrees. This is true but does not mean much.
I took courses in Java and C++, and self-taught programmers tend to know as much as I learned in those classes. What they tend to skip is the theoretical foundations. Calculus, graph theory, theory of computation, mu-recursive functions.
I took two classes (one was elective) which dealt with mutual exclusion, race conditions, critical sections etc. I spent months studying them, writing complex homeworks dealing with them, being quizzed on them etc. This came to be helpful, sometimes very helpful for me. Obviously people are not learning about this as I run across race conditions in code far too often, and I have heard others say this as well. I had to sit down and learn to deal with this for some months and some programmers never do.
I don't understand the comments from people who say they already knew what was taught in class so it was a waste. Class is one fourth of the time, then you're supposed to spend three hours studying for each hour in class. So if you know 100% of what was taught in class you just saved yourself three hours to do something else. I was a Unix sysadmin for a long time and yes, the class where we learned "ls", "cd", "pwd", "chmod" etc. was not that educational. But the next class our homework was to study the process scheduler for Mac, Windows and Linux. I had always put off doing this, so I finally sat down and studied how Linux's completely fair scheduler worked and learned a lot. I learned what actually happened in full when an add instruction came in for two registers on a processor, and what logic gates they would go through. So even what I specialized in was filled out.
Another thing - often it is not what you know you don't know, but what you don't know you don't know. If I know a heap is a good data structure to quickly find the highest number in a list, then I can learn about heaps. If I never heard of a heap I might use a slower method. Or a real world example - in class I learn about Goedel numbers. Then a year later at work I have to take a (short) list of (small) numbers and make them into a hash. But how? Then I remember Goedel numbers. Again, it's not what you know you don't know, it's what you don't know you don't know. To learn by yourself, you have to know what to look for, and you often don't.
As I said, I worked a while as a Unix sysadmin. I went back to finish my BSCS. I'm not rationalizing a decision I made at 18 by talking it up, I realized how important it was to filling in gaps of knowledge, as well as to getting a job, especially when one is needed. A lot of people reading this are too young to have been working when most of the startups and dot-com's folded in 2000, and the few IT positions at traditional companies were flooded with applicants, many with college degrees. Things can turn on a dime, and having 4 years experience in RoR or Node.JS can quickly go from meaning a $120k job to meaning next to nothing.
If I am paying money for class, then shouldn't I be taught the material? Not do something I can do for a free 2-year stint with a computer.
As I said, most recommend each hour of lecture time to be followed by three hours of self-study.
Also, if someone is going to do those three years of non-class study (after class in my case) so they can have my equivalent non-class study - why not just do the extra year of in-class work and get the diploma? The attitude perplexes me - "I will study three years like you, but won't get a diploma that will help in employment".
No one is forcing me to go to class. But if I am taking a class on theory of computation, with quizzes etc., then it makes sense that that will be the months in which I read about pushdown automata outside of class. So after I choose which class to take in a semester, I am in a sense "forced" to study that topic outside class for the next four months. I can also e-mail my professor or classmates or wait after class or go to office hours if something confuses me.
2) You will have gaps because you missed things
3) You won't retain the knowledge as well because you won't be tested on it.
4) If you're someone who isn't good at math, good luck motivating yourself to study real analysis, optimization theory, statistical learning theory, etc.
It wasn't every middle schooler who reads a book on perl for leisure.
Most business degrees can be useful, because you understand the business much better. Accounting actually turns out to be useful for distributed systems.
Edit: It wouldn't have occurred to me, but I think Anthropology would be very helpful in understanding why systems were put together the way they are.
In fairness, I am a developer for an anthropological research agency at a large university. That is a plus.
I'll take a look at that book. Thanks.
I was depressed for a long time that I couldn't study CS. Then I realized, I can learn what I want freely. I have an entire life dedicated to computers.
Although I secretly dream about inventing the next facebook, I mostly embraced the fact that I won't be able to get a formal education and a job in the field.
Tinkering with computers is part of who I am. The rest is not in my hands.
I've had zero issues finding work in computing. If you're also not finding issues, the advice is "do nothing and continue to ignore the line in any JD that says 'BS in CompSci required'". It's almost certainly not.
If you are experiencing issues getting interviews, consider leaving your degree off or explicitly highlighting your self-taught nature and work experience.
Anyone who was reading a Perl book in middle school for pleasure and has stuck with computing since then is almost surely a strong candidate, at least way more than sufficiently strong.
A bit of background: I have been coding since an early age and hold an arts degree. I had no serious experience in the industry a few years ago, but had work experience in other fields and I had many independent projects to showcase. I have been gainfully employed in software for the last few years as I approached 30 myself. Now I feel somewhat established enough that the arts/self-taught background is not as big of a deal as it seemed when I was just trying to break into the field. They even have me performing technical interviews now for some reason, which I'm mentioning to show that I've now been on both sides of the table.
My advice to you is to build your resume around the skills and experience that may be unconventional but are as relevant to the job you want as possible. Where most people would have job experience or education front and center, I placed a rundown of projects that detailed what techs I used to accomplish what ends and what results I got out of each project. These may have been even unreleased, work in progress personal projects (clearly stated as such), not for profit projects or websites or communities that I had a technical hand in creating, open source software contributions, and so on. Of course, if you don't have any projects to show at all then you should work on that before trying to get a job. But I assume you have some personal stuff, even incomplete and unseen by anyone, that you can showcase to demonstrate your skills. Links to working demos are a major plus, and you should always prefer concise descriptive text over just namedrop lists.
I list work experience where I think it is relevant to the job in software. Any previous office experience, for example, can at least show that you know how to work on a project, meet deadlines, act professionally (arguable), etc. Highlight the transferable skills of your previous employment. Likewise, highlight the transferable skills of your degree. It often became a point of intrigue that I had this esoteric degree after we've talked in-depth about programming for an hour -- so don't think of it as a weakness. In your resume, stay focused on the goal, which is to get a job in software. Do not use a generalist resume as your software resume.
Finally, pound the pavement. Do not wait. Tweak your resume and send it out often. I lost track of the number of companies that I've actually applied to, but in getting my first job I had in-person interviews (sometimes multiple rounds) at over 10 companies. I flat-out bombed some interviews. It didn't click in others. And sometimes it seemed like I was going to get the job, but with my untested background it was too 'risky' or I was too 'junior'. Don't let this stop you from going to the next interview. Embrace rejection and use it as an opportunity to learn. Try to strike a balance between quantity and quality in the jobs you apply for. Be directed and intentional in that you only apply to jobs that actually interest you and that you actually think you can do (so no "Sr. Dev", of course), but don't be so focused on one or two companies that you just sit around watching their careers page for an opening. Find a middle ground somewhere between "The One True Dream Job" and loading 100,000 copies of your resume into a biplane and dumping them over the city. In my case, beyond the usual job sites, I got a list of all the tech companies in my city in some local tech magazine's annual hottest tech company edition (or whatever it was) and went through the list applying to every single one that seemed like it would fit. And that got me my first job in tech, which has been utterly game-changing.
Others have already mentioned that you need to practice that awful hurdle that is "the coding interview". So be sure to do that as well, and take every interview as a learning experience. Hope this helps.
I've heard this advice a lot but that hasn't been my experience. I stay in contact with quite a few of my co-workers from the past but I haven't stayed in contact with anyone from my time at the University. I was working and providing for a family while attending school so I didn't really have a lot of time to do anything other than the difficult CS assignments.
University is also a great time to have fun, develop relationships, and become a proto-adult. I'm not sure that 4 years of "head start" (by skipping college) is a good decision for the average 18-year old to make. By all means, if you have a great idea or a compelling thing that you're running "towards", that's fine, give it a go. But the default "go to a good school and get a degree in engineering, math, or comp-sci" is pretty sound advice for most. I had no idea (more precisely: the wrong idea) what I wanted to do with my life when I was 17. College gave me time to figure more of that out and I don't feel like I lost out, in fact quite the opposite.