7 ms·
I think its pretty well known that you can work as a successful developer without a CS degree. However , as someone who is currently working through a masters i
by itsmemattchung 7y ago
I think its pretty well known that you can work as a successful developer without a CS degree. However , as someone who is currently working through a masters in CS (after working in software the last decade), I would say that CS courses (some, not all) provide invaluable foundation that would be difficult to obtain (of course you can self study CS). Sure — you don’t need to know how the OS works to write a web app that rakes in cash . But there’s something beautiful about peeling back the layers of abstraction : you gain an appreciation of how things work underneath the hood.
- whatshisface 7y agoYou can "peel back the layers of abstraction" without a CS degree, all it takes is time and (admittedly rare) dedication. Webservers, operating systems and books on theoretical CS are all out there, you just have to be interested.
- learc83 7y agoIt's possible to learn most things through self-study. But the vast majority of people will only learn the parts that they find fun and interesting. They generally won't wrestle with the tough sections in a systemic fashion, the way you are forced to in a decent CS program. For most people (even most professional developers) the only practical way to gain the equivalent knowledge you'd get with a CS degree, is by getting a CS degree. I worked for years as a self taught professional developer before going back btw, and I've hired/interviewed many boot camp graduates, self taught programmers, and degree holders.
- ssully 7y agoLike whatshisface said above, quality self-study is rare. As you point out, people will learn what is fun/interesting, but I will also add that they will just learn what they need to get whatever job done. I have a friend who does webdev (mostly Wordpress, some Drupal) who did not have go through a CS program, though he took a few web dev classes in college. He goes good work, but he has a very loose grasp on fundamentals. He showed me a side project he was doing (a web based clicker game) and after looking at the code, I suggested he try adding some classes to reduce his code reuse. After explaining the basics (and some quick research on how classes work in Javascript), it kind of blew his mind. He never used classes before in his code because he just had no reference point.
- leowoo91 7y agoI agree on difficulty of self study by remembering my student days, simply I was asking the lecturer about why we have to study some of uninteresting CS topics. They were quite boring but really got their benefit in the long run.
- mattmanser 7y agoWe've all seen the utter messes that recent CS graduates have made with classes, unnecessary inheritance and over complicating problems, while being unable to do fundamentally basic logic, you must know the opposite problem is equally true. CS majors who cannot program applying academic theory without understanding. I'm old enough to remember graduates rolling their own sorting algos, or building classes 6 levels of inheritance deep. While simultaneously creating massive if/else nesting, with tons of duplicated code, unable to understand how to use basic ideas like functions and recursion, even though I'm sure they probably had a whole one lecture on the subject, mixed in with whole modules on pointless compiler lectures. Because that's what their CS degree taught them. How both CS graduates and non-graduates really learn is by seeing what other programmers do in the industry, or by making their own mistakes.
- eloff 7y agoNo, you don't need a degree. All you need is a resolution to learn the things that you're missing. I covered C++ in all its hairy glory, assembly, SIMD, data structures and algorithms (implementing them, not just using them) and concurrent and lock free algorithms and data structures. Some of the data structures I created perform better than anything in the published literature - but I couldn't be bothered to write papers. I might do them as an in depth blog post one day. I went way beyond what any CS grad does, and it cost me nothing in money and less time than a CS degree. If you're motivated you can beat a university CS education - it's actually really not that high a bar. I agree with you that most people won't do that. I was home schooled so I have a different attitude about learning than most people - and that's made all the difference. But is fundamentally a problem of motivation and goals, you don't need university for either.
- UncleMeat 7y ago> some of the data structures I created perform better than anything in the published literature - but I couldn't be bothered to write papers. You can probably imagine why many people wouldn't believe you. "My work is amazing but I am too lazy to publish it" is a peak stereotype for self-educated people. My prior on this being ignorance rather than genius is super high. And if it is true that you are a once in a generation genius who could outpace the research community then your experience is completely useless for others, given that you'd be so much smarter than a typical person who is doing self-education and trying to get a job.
- eloff 7y agoIt's not really that hard. For example I made a queue that outperforms the lynx queue. My fundamental instinct after reading that paper was that there's no way faults out perform bounds checks in a modern, speculating out of order CPU. I ran some tests and yes my instinct is correct. Maybe the result wouldn't hold under peer review for some reason, I just tested a few more ideas / criticisms with a colleague and moved on. I don't personally benefit from trying to publish the result and I have enough demands on my time. I'm not a genius, unless you count an online IQ test I took in my early twenties, but I'm deeply skeptical of those. It's true I'm well above average though, so perhaps my experiences don't generalize. I don't believe that though. I still think it's motivation and goals that count.
- illuminati1911 7y agoThis is absolutely true, however in reality (= in practice) very few non-CS degree devs _will_ reach the same level of knowledge. When you have to learn all that stuff to get your degree, then you just have to learn it. Period. Also people who are full time students have more time to spend on these topics, but when you are actually working 8h+ per day and your career is mostly around JS frameworks it becomes much harder to invest time into these things. Obviously this doesn't apply to everyone, but I'd say it applies for most.
- kemiller2002 7y agoI don't disagree with you, but I don't completely agree with your implications either. From my experience, most people with a CS degree will not attain that level as well. Even at the masters level, a number of people will not understand. It's sad. I really feel this is a failure of universities not forcing students to learn, but I know there are a number of politics etc that factor into how hard they can make courses, and what they can teach.
- TheOtherHobbes 7y agoThere's a difference between learning specifics, and learning habits of thought. The two best things a CS degree can do is expose you to ideas you wouldn't otherwise know about, and to force you to work on hard projects that require a combination of multi-level analytical thinking and research. Both of those are excellent training for at least some aspects of being developer. But that doesn't mean the details are inherently useful. There are very few situations where you will be expected to write a compiler. So in that sense compiler theory itself is optional - far less useful than the experience of having to handle a complex set of data structures and relationships, which could in theory come from other kinds of projects. Academic CS also tends to miss out a lot of useful practical skills. It won't teach you much about management (from either side), salary negotiations, office politics and co-worker relationships, or business theory. It may not even teach you how to write good clean code that's easy to read and maintain. So IMO the ideal CS degree doesn't exist. The ideal degree would be a good mix of theory with plenty of industry practice - possibly with some standardised requirements that would lead to a Chartered Developer qualification that was better at guaranteeing a working blend of practical skill, theoretical understanding, and analytical talent than current degrees seem to be.
- varrock 7y agoAre there any well known resources to do just this? I have no idea which books and topics to pick up.
- dev_dull 7y agoYour comment goes to the heart of the debate: does understanding what’s going on behind the scene of your tools help you become better at using them? I think for the vast majority of jobs it does not, but for a few it absolutely does.
- deleted 7y ago[deleted]
- mettamage 7y agoFor me, understanding how a compiler and cpu/RAM works and is put into machine code and later on a programming language means that I fully understand what programming is. It allows me to make sharper categorizations whether something is mathematical, architectural, security, programming, framework related or a best practice. This again gives me a good feeling of whether something will be easy/quick to learn.
- commandlinefan 7y agoIf so, though, then a CS degree in general is sort of pointless, isn’t it? But if you can say that about a CS degree, what degree could you really not say it about? I suppose a medical degree is “meaningful” in the sense that you can’t get access to bodies to dissect without attending medical school, but if a CS degree is a waste of time, then pretty much every degree is a waste of time.
- motivated_gear 7y agoI completely agree, Hackernews has really helped me personally. Tons of interesting articles over the years on LLVM or the inner machinations of garbage collections. Picking the brains of clever CS friends also helps a lot too!
- harianus 7y agoIt seems like you’re saying it’s nice to know the layers of abstraction but it sounds like you don’t use it in real life. As a non CS degree developer I can’t really see anything that I’m missing because of not having the degree. I have a successful business, get hired for freelance jobs for a good salary, can build anything I want, ... Would love to know what one would get out of having the degree versus self study.
- II2II 7y agoSelf-study verses earning a degree is a red herring. While there are some advantages to studying in an institution, the degree is simply there to tell others that you have studied a particular curriculum. My only concern with self-study is that a lot of resources are the educational equivalent of get-rich-quick schemes, but that says more about the people who create those resources than the learners themselves. As for knowing the theoretical basis of computer science, that will have value in some parts of industry and very little value in other parts of industry. While someone in your position may have a high degree of success working in the upper layers of abstraction, someone has to develop, advance, and maintain the lower levels of abstraction that you depend upon. None of that is meant to say that you need that theoretical knowledge to be successful, rather it is important for some people to have that theoretical knowledge to ensure the success of the industry.
- illuminati1911 7y agoThe original comment is about engineering competence and having the comprehensive understanding of subject, which is not just limited to running business and getting monthly paycheck to pay the bills. Some benefits that it will give you: - It will actually let you move into different positions within tech/it industry when you have wider/deeper understanding of how things works. - As someone said already in this thread: "allows me to make sharper categorizations whether something is mathematical, architectural, security, programming, framework related or a best practice." - You'll be better at your job. Maybe not every day you need to know what's happening under the hood, but there are and there will be days when you need to. Even if you only developed JS frontend apps whole your career. When you actually say "I can build anything I want", then (although I don't know you) I'm pretty sure that you can't. People who get that deeper understanding of things also understand how complex some things are and how complex some things can get.
- cmrdporcupine 7y agoTheoretical and CS fundamentals has never been an issue for me (no degree), because I find them interesting. Probably more interesting than most of my coworkers. I think you'll find this is the case for many people who end up in this industry out of passion rather than educational path. A year unemployed during the .com crash gave me lots of time to work on open source hobby projects, where I wrote my own virtual machine, compiler, etc. That was fun. Wish I could afford to do that again. Honestly, what I find I'm missing is mostly class status and a piece of paper.
- non-entity 7y agoI'm at a point where I don't want to do (web) app development anymore and want to switch to something more interesting (to me)so I'm not stuck doing something I hate for the next x decades. Unfortunately, it seems that what I want to get into (low level embedded stuff, firmware development, etc) seem almost neccessary to have a degree (or even a Masters or PhD). I assume this isn't mostly because of the level of EE knowledge required. Unfortunately going back to school is out of reach now
- oneplane 7y agoIt actually is because of the theory required. If you go low enough, more happens in your head and less in your tooling. It's why there are low-level and high-level languages. The lower you go, the more you need to know (and do) yourself. That is where CS degrees do help, because without the benefit of layered architectures of shared libraries, systems and code in general you need to know what those layers did in order to know how to do the work without them. That said, low-level doesn't always mean the same thing. Some people think writing software in C is low-level, but when I think low-level I mostly think of assembly on bare metal with no OS or anything like that.
- souprock 7y agoI have coworkers doing that without a degree. They did however show up with experience. Personal projects will do. You could work on Open Source software. Obvious choices: qemu, valgrind, FreeRTOS, RTEMS, Linux (kernel), SeaBIOS, gcc, clang, ghidra, binutils, MAME, OpenOCD, gdb, dosemu, dosbox, FreeDOS, Wine, SDCC, dolphin-emu, Xenia, coreboot
- chapium 7y agoCS isn't really about programming so much as it is about problem solving.
- umanwizard 7y agoYou are conflating “having a CS degree” with “learning CS”. You don’t need a professor to tell you what books to read. You can just read them.