No if: you want to work as a software engineer (made the mistake myself, some friends are in lead positions and earn way more than me and have generally more opportunities because they worked two years more than me, even if I graduated with a 3.8 GPA from one of the top 2 unis of the country) or if you think it will boost your skills as a developer (Udemy/Coursera work better).
Maybe: if you want to work in the government where these things have a value. But spending two years of your life (even if with a scholarship) doing something that might not turn out to be a good investment just for this reason is insane.
Where as maybe a master's is a small advantage.
However, it does make sense given that the capabilities of people with bachelor's degrees and master's degrees become equal at some point, assuming all other things are equal. I do not think a master's degree is a ticket to a lifetime of greater competence in CS and salaries ought to reflect that.
The same could be said for PhDs too given the quality of work that we saw come out of places like Sun. There are plenty of CS people that I believe have only bachelor degrees that are not in any way inferior to holders of PhDs and in some ways, are more capable because their solutions are demonstrated to work in the field. I imagine some of them will receive honorary PhDs for their work.
This is not relevant to someone without a bachelor in CS though. I will post my opinion on that separately.
If you're going to look for a job in academia or research, then yeah, the educational background will matter. If you're going to write code that makes things work, it doesn't matter.
The same is true for the difference between 10 and 12. If those additional 2 years were more of the same, they matter little. But they also could have been full of significant new work and learning.
Knowing relevant theory is power. Is the goal to be an enterprise CRUD programmer or an architect who is a thought leader and helps set the direction of what you're working on?
I know everything can be done without a degree, I have a few genius friends who are doing great. But could they have had more options to choose from, more freedom, more potential with a degree? Hard to say, but most people don't self-learn everything they would otherwise.
But I still stand by the fact that unless you're going to stanford, CMU, or MIT, or a professor who is not strictly a theorist at an above average school takes a liking to you.
If not and you really enjoy the field you're better off teaching yourself.
I would not say the same thing to someone who already has a BS in CS; but for someone looking for a career switch like you are, it makes a lot of sense.
I have a lot of programming experience, and a lot of statistics/numerical computing experience, but not so much experience with more hardware- or low-level networking stuff.
- Change in my career possibilities and new job offers: exactly zero. Nada. Nil. I work as a software engineer in finance (high-frequency trading), and there domain experience matters much more than the amount of computer science education received. (If I would have been a quant trader, not an engineer, it would be another story -- education matters there).
- Mind expansion: some. I've got some preliminary math education (so I am not scared of reading quant papers anymore and can immediately work with formulas), and also there were excellent courses on coding theory and automata. Some other courses (e.g. computer graphics) was on subpar quality, but this is not my specialty anyway.
Was it worth it? For me, that't a definite yes, psychologically and intellectually. But if my motivation would have been only related to career -- the answer would be no.
Another thing to consider is cost. If you get right to work, you'll be gaining valuable experience and making money while you do it. If you spend another year or two in school, you're racking up debt and getting no real world experience.
All that said, I'd imagine that there are certain fields that require more specialization, like AI or signal processing that would benefit from an extra couple of years of study.
With no undergrad CS and no development work experience they won't even be able to tell you how fast a sorting algorithm is.
Also you're not taking into account how new important tech is unfolding or what the long term impact of this choice will be over a lifetime.
What are you referring to here? Like remembering off the top of your head the big O of bubblesort? Or figuring out the big O of an algorithm you wrote yourself?
The first is something easily looked up. No reason to dedicate some of your limited human memory to that.
That's irrelevant because it's true of everything. I can also look up and learn quantum mechanics at khan academy: https://www.khanacademy.org/science/physics/quantum-physics
Sure it's feasible to look up facts here and there, but it's harder to grasp the underlying meaning and generalize it when rushing to check in code for a job, compared to having dedicated and structured time set aside.
Anecdotally, I started coding intensely in middle school and thought I was pretty bad ass by the I time entered college. Was blown away at how little I knew about what I didn't know. Gave up hubris at that point.
Perhaps you've already checked out the field out and still want to switch, but if not, I think you'll (a) find a lot of like-minded people and (b) find a lot of meaningful work in the field that needs computational expertise. That latter point is what's most important to me: issues like building/urban energy consumption, affordable/dense housing are low-hanging fruit that are being done in manual/non-optimal ways right now.
You can email me if you'd like to talk.
IMO, what it really comes down to is if your learning style is best suited for a class-room education, and if so then whether you can afford to 'stop the world' and go back to school. A grad-student should be capable of doing independent research, so in theory you should be able to learn how to code on your own (if you wish to be a software engineer). You'll need to be sure you have a way to receive objective feedback on your output, and be ready to humble yourself as you descend down the Computer Science rabbit hole.
In full disclosure, I'm going back to school for a MS in Information Technology. It's not as rigorous as CS, but it's reasonable given that I have a BA in Music. I wouldn't necessarily have gone back if it weren't for having a perfect opportunity to do so (My wife got a job as a professor at a university that had a masters program for IT, and so I'm getting a good deal on tuition).
[1] https://www.google.com/about/careers/students/guide-to-techn...
If you want to work in tech, go for the CS degree. Yes it'll be harder, but it's vastly more valuable. IS/IT degrees are nearly all fluff, especially a MS.
In my case, the school that I'm attending only has a MS in IT. I decided that spending a short amount of time getting a higher degree in a 'softer' field would be better than struggling through the (somewhat arbitrary) math for a long time just to earn another Bachelors.
Either way, I'm trying to use all of the free-time that I have now to supplement my education as thoroughly as possible in the realms of hard CS topics. I hope to integrate this into my thesis as a way of demonstrating that I made the most of my time.
With the benefit of hindsight I can tell you that if you want to work in the quantitive side of technology, the pain of suffering through the math and truly grasping it, is absolutely and completely worth it.
As time goes past, the tech industry appears to be becoming more specialized. An analogy that I think works pretty well is the medical field. In the beginning you just had "doctors", then as more advances were made, the field specialized into nurses, doctors, physicians assistants, and then further into specialties and now sub-specialities.
Someone can absolutely work in technology without a firm grasp on the fundamentals, hell they can even make a lot of money. But it's a difficult leap to go from working on a React & Rails app to working on distributed systems, advancing the state of the art AI, etc.
Also be careful about assumptions about who is in 'management'. This is also a mistake that I made when I didn't really understand the industry. I have spent time working for managers who are non-technical and am rebuilding my life so that I never have to do that again.
Happy to chat more about this if you'd like. Good luck with your degree and I hope it works out well for you.
1. Learn the basics of programming. This means writing software to get a computer to do things, even as simple as adding all of the numbers between inputs n and m, which is not a bad beginner exercise.
2. Find an OSS project that interests both you and prospective employers that has active development on IRC (likely freenode).
3. Start handling small bug reports and adding minor features.
4. After familizing yourself with the code base, start collaborating with the more experienced project developers on bigger changes. More veteran developers are likely to be happy to offer advice/answer questions on how to do things like them.
5. After a year or so, you will likely be able to get a job, assuming that you do not have offers already.
I sort of did this unintentionally when I started contributing to OSS projects for the sake of improving them for my own use. That eventually lead to consulting for a time before I found full time employment at a company that I felt was a good fit. I went a few years without asking even asking if I had a degree until a year into full time employment when investors wanted everyone to submit resumes. I believe any degree would have been sufficient. My manager for instance only had an applied math degree.
For full disclosure though, I have bachelor of applied science and engineering that is a double major in "Computer Science" and "Applied Mathematics and Statistics", plus partial graduate CS study. Also, my company went out of business last month. I have options for both employment and consulting, although I now favor full time employment due to familial pressure.
That being said, it would be easier to advise you if you said specifically what area interests you. There are different areas such as operating system development, systems programming, embedded programming, web development, user interface design and others. That matters quite for step 1 in picking your first programming language. Being multilingual is great (and I certainly am), but you will find things easier if your first language is language used by what you want to do as your first job. That way you save some time on becoming proficient.
Without a CS degree of some sort you're going to need to prove you can code. Dabbling helps but you'll need to show work experience.
Getting work experience without a CS degree likely means taking jobs that aren't otherwise appealing.
Contracting or freelance can be a way to get that experience since the bar for proof is often lower, especially when working in non-technical industries.
But those are jobs, and they pay money.
If you have the financial means and can attend a reputable school, I'd recommend getting the masters, or even a bachelors.
Having that degree, and learning what they teach you in a CS program, will help you get a much better job and will help you perform in that job earlier than learning as you go.
You're going to need to make the call if you can afford the short term financial hit/investment.
I say it's shitty because they don't follow best practices and just focus on pushing out workflow apps as quickly as possible. No docs, old tooling, etc. Really a mess.
That's the situation I'm in now, first full time job. I majored in business [first economics, then MIS], big mistake. Now I'm working for the uni with plans to get a second bachelor's in CS beginning in the Fall (for free).
People always ask me why I majored in business. I've had recruiters say to me "Have you considered a minor in CS", etc. despite a very nice portfolio and 2 years worth of clients.
So, since I must deal with HR and would like to be taken seriously as an engineer, I'm going against the advice of the great Charles Manson and going out of my way to prove something to the phonies.
Plus, I wanna learn my maths much better but can't bring myself to go it alone so I figure it's worth it in that regard.
I doubt schooling would fix this. It tends to be more about theory and algorithms than building "real world"(depending on what you're doing) apps.
Also, those are problems you can fix by reading a few books on best practices, learning from your team, keeping up to date on tools and just doing it (docs). If anything, the school would likely be behind on things like tooling and many best practices related to the modern frameworks.
It's not all bad, you'll learn things that from time to time come in handy, but getting a CS degree won't turn someone into a good programmer. That's a skill you'll develop over time from doing it and learning from others.
This repo is pretty cool and links to lots of free courses that show the kind of things you'd learn at Uni: https://github.com/open-source-society/computer-science
I meant, is going to school for CS worth working at a place like that.
They really aren't willing to make changes, as I said the goal is to push out apps as quickly as possible.
Coming from my previous job, where I was the only developer, I have full jsdocs/phpdocs, quite a few tests and high level user manuals. They have nothing resembling that.
Is the CS program high quality? If yes, then the job you work in order to attend that program is merely a means to an end. Think of it as waiting tables, just slightly more related to what you're interested in.
You could take the opportunity (not too quickly, be mindful of politics) to make a case study out of it and attempt to apply some best practices, it sounds like it could turn into a thesis about software development in the real world.
I took a few classes at university before I started a degree program. Despite this there were classes where classmates with undergrad CS degrees were at an advantage, so it was a fair amount of work to catch up/ keep up. Those with an undergrad degree had seen this stuff before for me it was new. On the plus side I was not wasting time in classes with stuff I already knew.
It was worth it for me, I actually saw a lot of things from university at work (I did some time doing Operating System "Augmentation", writing libraries. Datastructures and algorithms and database classes were also useful post graduation. I think the degree helped get work and I enjoyed getting it.
I agree that it wasn't all amazing, though -- some courses are great full stop, some are just bad, and many (as you say) really shine only when you go above and beyond.
Still, for those with existing programming experience or an undergrad CS degree, it may not be the best thing to do. If you want to learn some particular skillset, there are more direct paths. It might help with the resume filter, though, and it's handy for non-US people who want to get an H1B for now.
I'm about to graduate with a BS and I will be going straight into the workforce, but I'd like to pursue a MS (without taking time off from work).
Cons: Time and money investment. May be unnecessary if you just want a standard dev job.
If you're looking to get better at coding/software engineering, the best way to do this would probably to take online courses or just start as a junior dev and OJT. Masters in CS tend to (but this is NOT always true) focus more on research-related areas. Most of the professors I met during my Masters didn't really care about version control, unit testing, deployment pipelines etc. all of which were extremely important in the real world. So Masters is definitely not a good place to start a career in Software.
On the other hand, there are many auxillary benefits to getting a CS degree. You can choose to go to another country and some (like the US) have work after study program that makes it easier to work immediately after you graduate. There are also many campus recruitment efforts where you can interview with a bunch of companies all at the same time.... this allows you to negotiate better offers as well.
Some schools are obviously better than others. The good ones are expensive as hell though. The bad ones are nothing but a mountain of useless shit.
You don't need a degree yes but theory is relevant however yes a CS degree is not a good indicator of any skill and too many CS educated people can't code worth a damn. Theory is not useless as long as you can implement it.
I've hired many many software developers and couldn't correlate a master degree with the success of the person after being hired.
Side note: why do so many people abandon architecture after successfully graduating? As an outsider, architecture seems like a great thing to do for a living.
As a software engineer your earning power will be extremely high, especially if you make wise career choices. 60k debt you can pay off in a single year when you have a decent job. The opportunity cost of not being in industry for a number of years is way higher than anything else, so if you want to focus on the monetary aspect it's the opportunity cost you should be concerned about, not the cost of tuition.
e.g. http://www.fu-berlin.de/en/studium/studienorganisation/immat... and http://www.fu-berlin.de/en/studium/international/studium_fu/...
Some of these have quite good reputations too.
Even now I toy with the idea of taking a year off and just travelling somewhere to do another one. Something just plain interesting. Modern Japanese Literature, for example, or just identifying a few universities with cheap rates and picking something really interesting out of their catalogue.
If you do it for yourself, out of interest in the subject and because you just want to be better than you are, at that price it will be worth every penny. There is a frame of mind that struggles to comprehend education for the fun and satisfaction of it, rather than as part of earning more money. I smiled politely and stopped talking about it with them.
I went back to school after a decade of professional programming and finally finished a BS. It was worth it on a number of levels, but it was not cheap to do as an adult.
A great quote from Lambert:
1. Decide what the program should do. 2. Decide how the program should do it. 3. Implement these decisions in code.
Only the last part is actually coding. So learning how to think better and more systematically is absolutely worth it. A good University will teach you how to do that.
Academia has a specific purpose for self development of providing a cognitive playground of sorts tempered with tough accountability, critical review and deadlines.
If you are not already, start with the goal and break down your roadmap from there.
What do you really want to do? (In this case, what are two or three jobs you would want to do?)
What are the necessary prerequisites to achieving that? (Fortunately, most places specify these in the job listings)
What steps must be taken in order to clear the prerequisites?
If you need a master degree in CS to do what you want to do then yes, it will be worth it. If you can possibly do that thing without first getting a master degree in CS the no, the degree would not have been worth it since there exists at least one cheaper or faster way to achieve your goal.
Yes it is necessary as it is a certification, it will make easier move across borders, will make you pay less taxes and will make you easier to hire.
You can really get all the notion without a formal education, provided that you are curious enough.
However: I got a second B.Sc. in Computer Science (first Bachelor's was in the arts), and that worked just as well, for a career change, and at less cost.
Check out your options. I found that getting a B.Sc. in CS was very doable, and would take less time the Master's.
It all depends on your situation. For me, I only had to take CS classes (and some math/stats). Everything I did the first time through transferred. I'm guessing your situation may be similar. If in doubt, you can always email the college and ask for specifics. They're selling a product (education), and generally very willing to help.
But if you just passed through some crappy courses which ends with "in Java" in some third-rate school, then you have, probably, wasted your time and money.
Good schools which still taught fundamental principles, like MIT, will always worth it.
If your goal is to go into a more academic area like AI or some other topic that's more of an area of R&D, then it's probably more worthwhile. If your goal is to be an academic, then obviously you need not only a masters but a PhD.
I've seen so many technically superior students fail to learn a new technique because they couldn't read the logic notation.
That said, a CS degree is less cost effective per niche subject than a specialist with 10+ years experience.
Money wise, it's more or less the same, biased towards experience.
The first thing you should do imo, is to decide what skills you want to get, what is that you wanna do and then move for MSc or coursera or anything else that will give this structured training you need.
Specifically, I was looking at http://ufonline.ufl.edu/degrees/undergraduate/computer-scien...
I'm a CS master student in Amsterdam. I feel I have more similarity to you since you're also from Europe. The US system is nuts, I don't get it. My current debt is gasps 3000 euro's! If I finish my master degree it will be looks in horror 300 euro's! When someone from the US thinks about giving advice, please know that educational systems are different everywhere. So you need to disclaim where your experience is based upon. Mine is based upon the Dutch educational system, where the whole experience was (back then) funded by the government.
Furthermore, the idea of a university and also the idea of getting a master degree (in The Netherlands) have different cultural connontations. In The Netherlands it is kind of a given to do a master degree after a bachelor. No one knows why, but I feel that a lot of children were raised with the idea to "finish school," and most people feel that getting a master degree is what "finishing school" is like (there are exceptions of course).
Should you get a master degree? I'm going to give you a very opinionated answer. I'd be delighted if people countered me, because my story might be dangerous to take at face value, though less dangerous than having no or not enough information.
I'm a programmer teacher myself right now and one thing I've never realized is that you need to keep pace. Some students fall below the pace, others above it and to some it's the right pace. Chances are high that you're either above it or below it, since I can literally divide my students into 3 equal groups.
Furthermore, my Dutch curriculum gave me a many many obligatory courses during my bachelor. It gave me some freedom in my master. This is bad. Get as much freedom as possible. I've noticed that -- on average -- obligatory courses teach me less useful things. In some cases, I did need to learn certain basics that I didn't want to learn, but more often than not: I learned some academic arcane wizardry that I'm never going to use again (or at least, chances are a lot lower).
By the way, good obligatory courses are everything that's involved with how computers work. So distributed systems, computer systems and the like. Other good obligatory courses are theory of computation, algorithms, etc. You're not necessarily going to use that knowledge but they teach you a certain way of thinking.
Bad obligatory courses: anything that has to do with ontologies (as an optional course it's great, as an obligatory course, not so much), research on Multimedia Systems (too in-depth), software engineering courses (if they don't have a practical/pragmatic basis and emphasis), basically anything that focuses too much on science and research. They're all great as optional courses, but having them as obligatory courses, no. Also, obligatory courses that only show powerpoint slides and academic research paper assignments are a no go. Even as optional courses I'd be wary to take these (from a pragmatic computer science standpoint, go ahead if you want to be more broadly educated).
The next thing that is really important is the student body. You want to be in a student body that suits your goals. If you want to overachieve during your studies, you need to go to a university of overachievers. If you just want to go solo at it, you need a university that's not getting in your way when you do that.
These 3 things:
- pace
- ratio of obligatory courses and optional ones
- the type of students that are here
Are all metrics to answer one single question: to what extent does this study program fit your learning goals and your learning style?
Anything below 80%, don't do it. Everything between 80% to 85%, meh. You'd want at least a 90% fit or higher to consider it to be worth it. Remember, if you have an 80% fit, that means that you'll most likely waste at least 20% of your time on university, time that you could otherwise spend on self-study and creating an amazing portfolio. Also, when the fit is 90%, then you'll most likely at least waste 10% of your time there, which is twice as less compared to at least 20%.
If I could do the uni thing again, I'd aim for a 95%, personally. Otherwise, I'd do self-study. Why? Well, self-study means that I need to create an eco-system for myself (support group, learning the right material, having discipline). When that eco-system is up and running it's very hard for any university to beat that. You know better what you need than any university program out there for most cases.
That's one thing I want to leave you with (another realization since I began to teach): there's no perfect university program for you. It's impossible, since it needs to cater to different needs for different students. I'm noticing I cater to the lowest performing students, otherwise they won't get anything out of the programming bootcamp I provide. This bores the better students. My 'duck-tape-style' solution is to give them a codeschool account (like fixing with duck tape, it works but.... yea I think you see how this is a quick fix). So by nature, study programs have to compromise. The only thing that could be a perfect fit is when you design your own curriculum.
The advantages of a 95% fit with a university program is in the synergy it provides. For a slightly lower learning rate you get:
1. contacts
2. experts who you can bother with questions
3. various incentives to study
4. a proof that you know this stuff (your degree)
5. a broader view
All these advantages elude to the point of: you don't have to setup your own eco-system (remember that discipline thing? Or finding outside help? It's pretty hard for most). If you're really good at doing that, then I'd say university is not going to help you. Consider the advantages of setting up your own ecosystem: 1. you have contacts with more work-experience 2. you know experts in more specific/niche fields 3. clients will give you a strong reason to know more 4. your portfolio is your proof 5. you'll have a more real-world view
The advantage of uni: you don't need to set it up. Most of it is already there. The advantage of doing it yourself: more tailor-made, more real-world experience.
To wrap this up, you need to ask yourself the question: what educational system (uni, work experience, self study or otherwise) will give me the most alignment to my learning style and learning goals? How do you progress the fastest, and can you have some sort of showcase (i.e. degree or portfolio or blog -- like Scott Young with his MIT challenge) of that progress?
Goodluck
Disclaimer: I finished psychology (bachelor + honours courses), business informatics (bachelor) and information science (master). I'm working as a teacher for a programming bootcamp nowadays and am in the final phase of doing computer science. I also didn't finish some studies, I dropped out of business school, twice (don't do business school, it's only powerpoints and some writing but nothing pragmatic). I'm recently beginning to learn how well I stack up to self-learned individuals and the answer is: about the same (since HN keeps me up to date with the real world).
Plus, if you're looking to apply for big companies like google, etc. It's mandatory.
Otherwise, anyone can write code!!
From what I've seen, HR creates a short list of candidates, this is before the hiring manager step. When a company is hot, they receive a lot of Resumes. HR maxes out the requirements in order to create a quick short list. This is purely based on the content of your Resume. They run a simple search in their system by maxing out all the requirements to see which candidates pop up first. In 2017 you'll be surprised how many candidates have more than the minimum requirements! If you haven't applied through referral and if you're aiming for a big conpany, you'll get filtered at the very first and automated step - HR.
Master's degree applicant would be building something like, compilers, distributed systems, machine learning etc as part of the degree
I just haven't seen any correlation between skill and education level. Ha, with the exception of people who get a PMP... I've found them to almost always be bad at running projects.
For web development there is tons of resources on the web to learn.
The other stuff you really need to start reading books or academic papers. And it's useful to have someone to tell you where to start.
One thing you'll find really quickly: there's not nearly as much focus on credentialing and licensing in software, compared to architecture. Like, I'm talking, zero. No AIA, no AREs, none of it.
My advice: focus on getting an education, but realize your education can come from a lot of places.
If you want to be a software dev but aren't sure exactly what you want to do, just take the first job you can get and work your way up. You can absolutely get to the top of the profession this way (Google, etc.), it will just take a while. Advantage: practical work experience, cash earnings. You need to find a place that will invest in you and your skills though; most startups won't do this, so avoid them. Look for a great manager and a balanced team of junior/mid/senior people with strong engineering leadership, and a good culture of code review, learning, and leveling-up. [2]
Graduate programs in CS are better if you want to get into a special area of computing that requires a lot of theoretical learning. The more established the field, the more you'll need graduate education. You can probably "sneak in" to some of the newer subfields with high demand, like genetics or machine learning/AI. If you want to do signal/image processing, you'll need graduate school.
You won't get a job at a big, high-paying company without work experience or a degree. Feel free to try, but the AmaGooFaceSofts don't really recruit for the jobs you want to get [1] without the right degree or work experience. People say otherwise, but they're basically full of shit.
I wouldn't advise going to university for you. You've presumably already got a BA or BS, so you've gained a lot of the non-disciplinary benefits of college (how to write well, how to organize and structure your time, etc). If you really just want vocational cross-training, find a good company and clock up a few years of work experience.
Feel free to email me for more on this topic, email is in my sig.
[1] You can probably get dead-end, low-status jobs in a bigco with the right credentials, but you'll do better avoiding these.
[2] This can be very hard to spot/recognize unless you've been in the field for a while. Try to figure out who works there and back-channel to figure out what it's like working there. All crunch time, endless death march, all senior people with no juniors, all promotions from outside (no internal talent growth) = avoid. Probably 90% of startups and most tech companies in general are terrible in this regard; everyone's in such a damned hurry all the time.