At least in my university, MS students were usually paying full tuition, with the understanding that they'll take classes and leave for (presumably) high-paying job.
On the other hand, PhD students were usually paying no tuition at all -- instead, after getting their masters-equivalent, they were expected to do the research for a few years and therefore "pay back" by advancing the science.
(of course the fun fact was that one could drop out half-way from PhD program and get a MS degree.. but this did not happen very often)
The Georgia Tech OMSCS program is very good and affordable (10K or less). It's also the 7th ranked CS program in the world. And, you can and do interact with professors, not just TAs. I'm an OMSCS grad. I would do it again and strongly recommend it. I think programs like it are the future of higher education.
OMSCS student here. I agree with the parent. However, the one downside of the program is that since the marginal cost of admitting an additional student is very low relative to the tuition amount, GT has an incentive to not be very selective about who they let in. From a democratization-of-educational-opportunities perspective, that's good: if you can hack it, then you can hack it, regardless of what formal qualifications you might be missing. But this program is the real deal courseware-wise, and that results in a lot of those under-prepared students taking classes that they just can't keep up in. Lots of those students end up washing out of the program... after paying GT a semester or two of tuition.
Example: in the Intro to OS course I'm about to finish, we started with 700+ students and are now down to about 340. The projects are typical schoolhouse stuff for systems programming: C programs that manage memory, use sockets, IPC constructs, pthreads, RPC libraries, etc. One of the guys on the class slack just posted that when testing & debugging the projects, he just printed stuff to stdout... for the whole semester... because he doesn't know - and didn't bother to learn - how to use a debugger.
I really enjoyed Electrical & Computer Engineering, and took CS classes as electives. Felt the math and engineering courses grew my brain, and the CS courses were enough to get me into software. The CS majors I knew seemed to enjoy their choice less!
I did a non-cs undergrad to cs grad path... It was hard. I wasn't admitted to the program without fulfilling almost all the core CS undergrad classes. This meant that between the prerequisites and the actual grad classes, I took over 120 credit hours of pure math and CS classes over the course of 5 years.
Obviously not every school has the same demands as others, and there are certainly a lot of degree farms that take foreign students money and funnel them though, but I'm not sure that the authors points ring very true... certainly not for everyone.
And then there's my old manager who found a negative correlation between a programmer's ability and them holding a PhD in CS. FWIW, he had a MS in Software Engineering himself and he said that the correlation only seemed to hold for CS PhD's, not PhD's in other sciences. My department had a number of PhD's, but only one in CS and that one was hired a few years after that manager left.
Correlation isn't causation and all that, but it does bias you a certain way.
Yeah, past a certain point you realize how shallow degrees are, as they're merely an organization's approval that you studied something and demonstrated some level of aptitude of it.
Which is to say, you don't need a degree to study/learn things.
Though that approval is helpful in opening doors to employment when you're young, it again is not needed when your history of experience, abilities, and work can do the same later in your career...
I hate to be super-negative, but I'm not even sure a bachelors in CS is a good idea. Oh sure, you learn a few good things along the way, but then the professors start dragging you down their favorite theoretical paths. I'm all for philosophizing and navel gazing, but there's not much practical in things like lambda calculus, NP-completeness and some of the other topics. To make matters worse, these pursuits can confuse the brain. I know one fancy CS major who dismissed a problem as unsolveable because it was NP-complete. He missed the fact that the dimensions of the problem were such that a quick heuristic did perfectly fine.
The sad thing is that large parts of the curriculum aren't that valuable. Data structures used to be my favorite, but today it's not that important because we stick everything in hash tables or database tables. We rarely use LISTS!
The same goes for compilers. No one writes a compiler any more. Apple just repurposed LLVM when they made Swift. But all of the undergraduates have to pull their hair out making toy compilers and for what end?
Most of the CS curriculum is pretty extraneous. This is why many companies are deliberately hiring technically competent people from tech fields like physics or chemistry. They learn practical skills to analyze their data-- the kind of practical skills needed by corporations not theory heads.
I heard someone else say 30+ years ago you were more likely to be implementing a sorting algorithm or other things often studied in your day-to-day job. Most people's job have changed to integrating predefined APIs--a completely different skillset.
However, as a counterpoint I wish I had pursued a degree. I've looked over friends' notes from their undergrad and graduate classes and wished I had the time to do what they did. Not just as a personal interest, but to give you a practical understanding of what those magic APIs are doing.
Similar to a "hello world" of a framework, in practice things get messier. You often end up having to compare frameworks to pick one. Or play around with a few to judge which is best to continue with. Having a rough idea of how it was implemented and knowing the pros and cons of those choices are hugely beneficial. After choosing, you only write the code once, but spend the rest of the time rewriting, debugging, and optimizing. Having those CS fundamentals not only helps you identify when the built-in solution is insufficient, but what better options might be.
Ignoring all of this, I'm sure you could fill a career with writing one-and-done CRUD apps.
I don't know if anyone (anymore) thinks that computer science is the same as software development. Knowing the latest library APIs, versus doing research to find a faster hash sort, are two different areas, IMO. I also wonder about the different industries and how they compare (SaaS vs CGI vs HFT).
I think if you want to forge new roads in programming, a little theoretical studying doesn't hurt, so why not explore a university degree.
I also do not enjoy the endless debates around self-taught versus schooling. I've seen real-life anecdotes from both viewpoints and find that it's too subjective for anyone to declare anything from either side. I personally don't recommend people jump out and grab a CS degree, but there are some good programs out there.
I think that just because most people do not write compilers for a living does not mean that it’s not useful to have implemented one. Writing a toy compiler properly is an interesting programming exercise that involves steps such as parsing/validating input and transforming it in a structured way. Even if you never write a compiler again, it can teach you many things of how to approach similar problems.
(Also, Apple didn’t exactly repurpose LLVM for Swift. LLVM is just the backend, and Swift has quite a sophisticated frontend with its own optimization passes and intermediate language. It is safe to say that a lot of compiler theory and programming language design went into writing it. As another example, the compiler for Go was basically written from scratch and does not use something like LLVM for code generation.)
I do agree that learning CS theory is no substitute for actually writing software, and doesn’t make you a good software developer by itself. And there are probably plenty of excellent software developers who couldn’t recall what a Turing machine is. That said, a good knowledge of CS fundamentals is indispensable for some types of software development.
90% of my job is get data from database, handle concurrency, show data to user, save data changed by user. I literally could most likely do my job with 0 CS.
However, CS exposed me to a lot of different concepts, algorithms, a lot of math. I obtained an associate degree before getting my BS in CS and I did not unlock the key to learning until the CS degree. I feel like I can quickly pick up different things now. I was able to build a 5ft tall retaining wall and submit plans to the city then execute the project. I literally can perform almost all jobs on my car, except machining engine blocks as I lack the equipment. I completely remodeled my house, learning different building codes.
I feel a BS in CS gives someone a huge advantage, they have proven they can accomplish something, and should also have unlocked the key to learning that works for them.
I am not sure if MS in CS is worth it though. I thought about it myself but would probably go with MBA instead.
Does not match my experiences at all. Plenty of data structures in my job, with occasional need to parse the data. Knowledge of how OSes work and distributed systems also come very handy.
I think this is because our product is not related to web in any way, and the only UIs we deal with are quick and ugly ones for internal use.
>> but I'm not even sure a bachelors in CS is a good idea
If your goal if "simply" to be a software developer (who usually use existing APIs), nope CS education is not needed
No need to study fancy theoritical stuffs.
Just straight learn anything practical like Java/SQL/Python/etc. And thanks to internet, you don't even have to wait to be enrolled in university. Any high school kids can do that.
>> Most of the CS curriculum is pretty extraneous
It's science, after all. Can we say the same thing about physics/biology? OK, computer science may not be considered as science as in "natural science". Instead, see it as a mix of math & engineering.
Still, the goal of CS department is no to produce practical programmers. At least many many years ago in my 1st day at the campus, the lecturers said that. Although no doubt most CS alumni work as programmers. Yes, I'm aware understanding theories is a thing, and writing software is another thing. That's why we also had software engineering, project management classes.
Part of the value of a CS degree is that many students incidentally end up RTFMs for a lot of stuff before they start their first job. Which makes them slightly less useless in their first few years.
How many people will get your sarcasm? Why, I could add to your post that even hacker news no longer serves its purpose to be at the central core of computing ;-)
CS certainly matters in software development design and implementation today; esp with AI, distributed systems, complex/large data, cyber security, etc.
Though, personally, I never learned, or was capable of, the appropriate & applicable CS until I faced these real world issues later in my career in advanced work.
So I do agree that in college I wasn't ready for such a level of detail that I could not apply in any functional matter of life or early career development.
In my experience, the biggest reason doing a bachelors in CS sucks is because it's a massive waste of time, leaving little to no time for side projects. Programming assignment questions tend to be vague and come with poorly scoped requirements. Usually the professor also forgets to tell you several essential details or has made several errors in the code. An average assignment can take upwards of 40 hours, with 10 or more of those hours spent because the professor was too lazy to check over their assignment for 30 minutes before handing it out. The saying that A students work for C students really makes sense in this context. A students never got the chance to work on what they wanted!
[+] [-] bryal|6 years ago|reply
[+] [-] theamk|6 years ago|reply
At least in my university, MS students were usually paying full tuition, with the understanding that they'll take classes and leave for (presumably) high-paying job.
On the other hand, PhD students were usually paying no tuition at all -- instead, after getting their masters-equivalent, they were expected to do the research for a few years and therefore "pay back" by advancing the science.
(of course the fun fact was that one could drop out half-way from PhD program and get a MS degree.. but this did not happen very often)
[+] [-] alexktz|6 years ago|reply
[+] [-] kixiQu|6 years ago|reply
[+] [-] _wldu|6 years ago|reply
[+] [-] daniel-thompson|6 years ago|reply
Example: in the Intro to OS course I'm about to finish, we started with 700+ students and are now down to about 340. The projects are typical schoolhouse stuff for systems programming: C programs that manage memory, use sockets, IPC constructs, pthreads, RPC libraries, etc. One of the guys on the class slack just posted that when testing & debugging the projects, he just printed stuff to stdout... for the whole semester... because he doesn't know - and didn't bother to learn - how to use a debugger.
[+] [-] mandy12xx|6 years ago|reply
[+] [-] gedy|6 years ago|reply
[+] [-] supercasio|6 years ago|reply
[1]: https://teachyourselfcs.com/
[+] [-] liquidify|6 years ago|reply
Obviously not every school has the same demands as others, and there are certainly a lot of degree farms that take foreign students money and funnel them though, but I'm not sure that the authors points ring very true... certainly not for everyone.
[+] [-] HeyLaughingBoy|6 years ago|reply
Correlation isn't causation and all that, but it does bias you a certain way.
[+] [-] commandlinefan|6 years ago|reply
[+] [-] Rury|6 years ago|reply
Which is to say, you don't need a degree to study/learn things.
Though that approval is helpful in opening doors to employment when you're young, it again is not needed when your history of experience, abilities, and work can do the same later in your career...
[+] [-] xhkkffbf|6 years ago|reply
The sad thing is that large parts of the curriculum aren't that valuable. Data structures used to be my favorite, but today it's not that important because we stick everything in hash tables or database tables. We rarely use LISTS!
The same goes for compilers. No one writes a compiler any more. Apple just repurposed LLVM when they made Swift. But all of the undergraduates have to pull their hair out making toy compilers and for what end?
Most of the CS curriculum is pretty extraneous. This is why many companies are deliberately hiring technically competent people from tech fields like physics or chemistry. They learn practical skills to analyze their data-- the kind of practical skills needed by corporations not theory heads.
[+] [-] pfranz|6 years ago|reply
I heard someone else say 30+ years ago you were more likely to be implementing a sorting algorithm or other things often studied in your day-to-day job. Most people's job have changed to integrating predefined APIs--a completely different skillset.
However, as a counterpoint I wish I had pursued a degree. I've looked over friends' notes from their undergrad and graduate classes and wished I had the time to do what they did. Not just as a personal interest, but to give you a practical understanding of what those magic APIs are doing.
Similar to a "hello world" of a framework, in practice things get messier. You often end up having to compare frameworks to pick one. Or play around with a few to judge which is best to continue with. Having a rough idea of how it was implemented and knowing the pros and cons of those choices are hugely beneficial. After choosing, you only write the code once, but spend the rest of the time rewriting, debugging, and optimizing. Having those CS fundamentals not only helps you identify when the built-in solution is insufficient, but what better options might be.
Ignoring all of this, I'm sure you could fill a career with writing one-and-done CRUD apps.
[+] [-] adamredwoods|6 years ago|reply
I think if you want to forge new roads in programming, a little theoretical studying doesn't hurt, so why not explore a university degree.
I also do not enjoy the endless debates around self-taught versus schooling. I've seen real-life anecdotes from both viewpoints and find that it's too subjective for anyone to declare anything from either side. I personally don't recommend people jump out and grab a CS degree, but there are some good programs out there.
[+] [-] Hercuros|6 years ago|reply
(Also, Apple didn’t exactly repurpose LLVM for Swift. LLVM is just the backend, and Swift has quite a sophisticated frontend with its own optimization passes and intermediate language. It is safe to say that a lot of compiler theory and programming language design went into writing it. As another example, the compiler for Go was basically written from scratch and does not use something like LLVM for code generation.)
I do agree that learning CS theory is no substitute for actually writing software, and doesn’t make you a good software developer by itself. And there are probably plenty of excellent software developers who couldn’t recall what a Turing machine is. That said, a good knowledge of CS fundamentals is indispensable for some types of software development.
[+] [-] avgDev|6 years ago|reply
However, CS exposed me to a lot of different concepts, algorithms, a lot of math. I obtained an associate degree before getting my BS in CS and I did not unlock the key to learning until the CS degree. I feel like I can quickly pick up different things now. I was able to build a 5ft tall retaining wall and submit plans to the city then execute the project. I literally can perform almost all jobs on my car, except machining engine blocks as I lack the equipment. I completely remodeled my house, learning different building codes.
I feel a BS in CS gives someone a huge advantage, they have proven they can accomplish something, and should also have unlocked the key to learning that works for them.
I am not sure if MS in CS is worth it though. I thought about it myself but would probably go with MBA instead.
[+] [-] unknown|6 years ago|reply
[deleted]
[+] [-] theamk|6 years ago|reply
I think this is because our product is not related to web in any way, and the only UIs we deal with are quick and ugly ones for internal use.
[+] [-] anta40|6 years ago|reply
If your goal if "simply" to be a software developer (who usually use existing APIs), nope CS education is not needed No need to study fancy theoritical stuffs.
Just straight learn anything practical like Java/SQL/Python/etc. And thanks to internet, you don't even have to wait to be enrolled in university. Any high school kids can do that.
>> Most of the CS curriculum is pretty extraneous
It's science, after all. Can we say the same thing about physics/biology? OK, computer science may not be considered as science as in "natural science". Instead, see it as a mix of math & engineering.
Still, the goal of CS department is no to produce practical programmers. At least many many years ago in my 1st day at the campus, the lecturers said that. Although no doubt most CS alumni work as programmers. Yes, I'm aware understanding theories is a thing, and writing software is another thing. That's why we also had software engineering, project management classes.
[+] [-] downerending|6 years ago|reply
[+] [-] NotSammyHagar|6 years ago|reply
[+] [-] ramoz|6 years ago|reply
CS certainly matters in software development design and implementation today; esp with AI, distributed systems, complex/large data, cyber security, etc.
Though, personally, I never learned, or was capable of, the appropriate & applicable CS until I faced these real world issues later in my career in advanced work.
So I do agree that in college I wasn't ready for such a level of detail that I could not apply in any functional matter of life or early career development.
[+] [-] bobbyz|6 years ago|reply