7 ms·
Computer Science degree. Sure, lots of us "learnt" programming in our bedrooms or whatever by doing our own thing and messing about in whatever language. I we
by mattlondon 8y ago
Computer Science degree.
Sure, lots of us "learnt" programming in our bedrooms or whatever by doing our own thing and messing about in whatever language. I went into my compsci degree arrogantly thinking that I pretty much knew how to code already so please just give me the bit of paper saying I have the degree and I'll be on my way thanks very much.
I was very wrong.
Although I was pretty good at the coding (or at least I like to think so), I learnt so much more of the theory that is as relevant today as it was then, and as it was decades before that too. It stretched me in ways I did not even know I could be stretched - I dont think I would never have learnt the "hard" theory that transcends specific programming languages if I was just tinkering around on my own or reading a "How to program Python/Visual Basic 6/PHP/C#" books etc (aged myself there with VB6!).
More or less every day I still use those skills/knowledge I learnt on my degree, but not only that I came out beaming with confidence and the knowledge that I knew my stuff.
As a direct result of my degree I enjoy a pretty cushy, well-paid, well-perked, and secure job at a company that many people dream of working at, and have done for years. Sure it was 4 years and a few thousand GBP (at the time in the UK - more expensive now) but totally 100% worth it - I genuinely dont think I'd be where I am now if I had not done the degree.
- m90 8y agoI'd be interested in a few real world examples of these cases where you are able to apply the CS knowledge in your day job. Would you mind sharing one or two?
- Royalaid 8y agoI can contribute some. Mostly it comes when you attack problems and conceptualize your solution to that problem, it does not come when looking for a library or digging through the API. Almost all of the problems you will encounter in your day to day work will be something with an already known solution or use a well known and researched pattern. Knowing the common language and use cases for data structures is probably the one I lean on the most. Seeing the general shape and feel of a problem that needs a graph style solution or being aware that looping through a nested array is bad but that there are easy off the shelf solutions built into most languages to that problem is important. How else would I know that at the root objects in js, dicts in Python, maps in Java, C#, and Clojure are all backed by the samething and have similar properties or that those properties shape how you interact effectively and efficiently with those things? Additionally it opens the world of acidemia to you by teaching you the conventions and tools you need to read and make sense of comp sci papers which let you stay at the cutting edge of your field if you want to, imagine being a machine learning engineer before Google made this huge push in ML, I tried when I first started college to grasp the ML stuff but most of it was beyond stuck in papers behind lots of calculus that I didn't have the time or desire to learn. My CS pushed me through Calc 1 and 2 so if I wanted to I could just brush up on that and push into ML. It's hard to explain for a lot of people because in reality you can go it alone and do fine but it always be the case that your whole career you didn't get a CS education so you might have holes in your knowledge that you had no idea about. Additionally it lowers barriers to careers and gives you an incredible opportunity to build a social network of interesting people who in general will go on to do big things and you can leverage that social network for even more career gains. I haven't even touched on the social aspects of college which you can dip into if you want or the fact that it gives you an opportunity to learn how to live on your own all of which are important but directly connected to CS but rather college as a whole. TL;DR You don't know what you don't know but college helps you get those tools and teaches you s whole bunch of lessons along the way, but you can go it alone of you want.
- xor1 8y agoThe most brilliant and successful engineers I know don't have degrees, and they accumulated their vast CS knowledge on their own. They all dropped out of college within the first two years and started working at 19-20. Two of them now run their own software consulting businesses, one is a lead at Netflix, and one is a lead at Google. They're all a bit older than me, in their early 30s now. The younger ones -- one just started at FB with a 240k+ base (he's only 23), and the last one is at Dropbox. The main factors I think people should take into account for whether or not a CS degree is worth it: Do you believe that you absolutely need the degree to break in to a programming career, if you're someone who just wants a good job and doesn't know where to start (like I once was, and like many of my friends who are just starting off with learning are now)? Or are you interested in a specific programming field that has a hard CS/Math degree/knowledge requirement? Is the combination of tuition/fees and opportunity cost significant to you? If you are responsible for paying your own way and taking out loans, compare spending ~4 years in college and having -$40k and no work experience, vs. working for ~4 years, having $40k+ in the bank (possibly much more), accumulated possessions/assets, credit history, etc. This is not nearly as significant if your finances are being handled by someone else, and/or you don't have to worry about money at all because you have access to wealth anyways (mainly through trusts, planned inheritance, a partner, or your family). Do you believe that you need to the environment, structure, and pace provided by college/university to actually learn CS, and that you're incapable of doing so on your own? I want to note that there's nothing wrong with feeling that way. It's just something to take into consideration. If you need to be completely immersed in it to actually retain the knowledge, then it's the right choice. If not, and you're someone who can learn everything on their own, then consider if being in a CS program would actually hamper your rate of learning, as you're forced to match the slower pace of others.
- mattlondon 8y ago> Do you believe that you need to the environment, structure, and pace provided by college/university to actually learn CS, and that you're incapable of doing so on your own? For me, it was not a case of not being able to do it on my own, it was not knowing what I should know. You could probably spend years becoming an expert on C# or Java or C++ or Go or whatever just by coding in it at your own pace (or at a job) and slowly learning by osmosis/experience/mistakes along the way etc. That's fine. But would you learn the useful theory along the way as well? And if you did, would you bother if someone hadn't created a nice structured syllabus for you? I know that I almost certainly would not had I just stuck to churning out fairly clunky (as I know it was now) code without the formal education in it. As you said, I am sure some people dont need this though, and somehow just have limitless time or already somehow know exactly what they should learn next, when, and in what order and never need to ask any experienced people any questions to clear up misunderstandings or have their knowledge checked. Lucky them.
- dominotw 8y agoLearning about b-trees, storage layers of databases comes in hand when you have to push your database to its optimum performance. Similarly understanding storage classes for data and indexes, for example when to btree vs lsm trees. If you are using lsm trees when and how it should be optimized. And ofcourse, in interviews :D.
- scarface74 8y agoYou don’t really need a degree for that. You can learn that from a book. As far as interviews, the last three jobs I had. 1. We need you to design a fault tolerant system with no single points of failure. Write out your design on the board. 2. What is your 90 day plan to build a software development department to achieve these initiatives. 3. Here are some issues with our AWS infrastructure and challenges we are having delivering features. How can you help solve them. Yes, I’m supposedly a hands on developer, but at a certain point in your career, you’re not asked to write a merge sort on the board.
- lazarljubenovic 8y ago> You can learn that from a book. And I did read it from a book, when someone from University introduced me to the book and explained it to me in short firstly so I can grasp it more easily on my own. I'd never pick a book about B trees on my own (booooring, let's learn LatestFramework.js). My University professors were mostly a complete disaster but at least the materials we had were good enough. Who wanted to learn had access to knowledge, and for motivation -- at least the grades. I can't see myself on my own even finding a book about theory and then going through it for 4 months, getting into nitty gritty details just for the kick of it. There's no obvious benefit at the time of learning it. By the time you can see the benefit on your own, it could be too late.
- scarface74 8y agoAnd I did read it from a book, when someone from University introduced me to the book and explained it to me in short firstly so I can grasp it more easily on my own. If you had to depend on a teacher to expose you to the books you should read, what about the rest of your career? I'd never pick a book about B trees on my own (booooring, let's learn LatestFramework.js). No, but if I needed to know about how to optimize MySQL, I would do research on - how to optimize MySQL. My University professors were mostly a complete disaster but at least the materials we had were good enough. Who wanted to learn had access to knowledge, and for motivation -- at least the grades. I doubt that there is a dirth of knowledge between the free information you can get and paid courses online. I can't see myself on my own even finding a book about theory and then going through it for 4 months, getting into nitty gritty details just for the kick of it. There's no obvious benefit at the time of learning it. By the time you can see the benefit on your own, it could be too late. There was no obvious benefit from me learning 65C02 assembly language and BASIC in the 6th grade. But I did it anyway. There was no benefit from me spending hours on the comp.lang Usenet groups in college. For any software developer though, there is an obvious benefit from having a deep understanding in marketable technologies - competitiveness in the job market.
- kluck 8y agoI would argue it is not about the little facts, such as specific sorting algorithms, but its more about learning how to approach a CS task, how to abstract and how to reason about code. The colleagues I know that were not as lucky and could not study CS, often they just hit a "wall" when they would have to argue about a certain SW architecture for example or when they were presented with an abstract problem, such as implementing some generic behaviour. And learning how to do this is a process that continues after the study, but it is important to get a basis. It is hard to really be specific here but if you do not have a good foundation of knowledge in a field, you will sooner or later (if you are not self-delusional of your abilities) regret it.
- cellularmitosis 8y agoWe were storing HTML blobs in a database, and we needed to run through all of them and manipulate some tags. A coworker argued that we should use regex. I was able to turn that into a teaching moment about the Chomsky hierarchy, and how (simple) regex can't be used to parse languages which feature arbitrary levels of nesting.
- taneq 8y agoThere's a difference between the trade of programming and the science of programming. The former, you learn on the job. The latter, you generally learn at university. And for some things (fewer things than I'd like, honestly) the latter is going to help you a lot. For the rest, it's not really necessary.
- kodablah 8y agoWhile I have no doubt this paid dividends for you, I'm not convinced that the cost/benefit is greater on the whole than alternatively spending those 4 years doing real-world development. Subjective, sure, but from my perspective there are too many amazing self-taught developers and too many subpar ones with degrees to automatically justify the 4 year time and money cost for the average person (concerning skill, career prospects have their own reasoning w/ degrees of course). One of the biggest things one learns is the ability to self-teach. Unfortunately college charges a lot of time and money to learn via their chosen methodology which doesn't fit many people. At worst it can build a dependence on teacher-pupil classroom settings to learn new approaches, hence so many training sessions and stagnation in their absence. As a tautology, it's not that one approach is necessarily better than another, but we must remember that one approach is not necessarily better than another.
- Salgat 8y agoIt ultimately boils down to whether you have the discipline on your own to learn all the "right" ways to do something and understand how it works. Unfortunately we also have an issue where schools are pumping out CS degrees that aren't exactly high quality.
- kluck 8y agoStudying does involve a big chunk of practial work, so you get both theory and practise. If you don't know the basics it would be very hard to do any "real-world development". So why do you think, 4 years are better spent trying desperately to coble some scripts together with a boss behind you than spending those 4 years surrounded by experienced teachers and like-minded students in an environment that focuses on learning?
- kodablah 8y agoI'm going to try to comment like this, here goes... Why do you think 4 years are better spent paying to cobble together scripts for unnecessary assignments the way a can't-hack-it-outside-academia teacher wants who is not incentivized to do the best and is out of touch with real-world development instead of spending those years surrounded by experienced and like-minded peers in an environment that focuses on making tangible accomplishments and making money? I hope it's clear how ridiculous discussing things this way is. There are benefits on both sides, and a reasonable person would respect that.
- pasta 8y agoIf you can't invest in a studie it also helps a lot to skip searching how to do things in a specific language. You are much better off by searching for solutions. For example: 'how to create modular programs' will give you more valuable results than 'how to create a website in PHP'. Things like dependency injection work the same in most languages so it's more helpfull to understand what it solves than how to solve it in language [x]
- deleted 8y ago[deleted]
- barrkel 8y agoI went into my degree thinking the same thing, and I learned very little, because I generally knew more than the tutors. The biggest win from my college time was from the library and access to books on compiler theory, my real interest. Now, decades later, I despair at how poorly new and many not so new developers we hire really understand complexity theory. Complexity theory is the single biggest thing you can learn that you might not learn self-taught, but so very few developers internalize it. They write code that does network calls and database calls with abandon, never mentally multiplying out the complexity. And as the gap between testing environments and production environments grows (i.e. a lot more data in production), the cost increases. (I had learned and internalized complexity theory at 15, from a chance book found in a bookshop. This was before the web made such information easy to find.)
- jerglingu 8y agoI agree 100% that complexity theory is the most important thing you learn that doesn't come intuitively. Unfortunately, a lot of us idiots, I suspect maybe the majority, have to have scalability completely beat down into us until it's internalized and fully respected. It's similar to the hot stove lesson where you know conceptually that it COULD and probably WILL hurt, but a lethal mix of naivete, optimism and some arrogance convinces you to push that shitty 1.5-seconds-a-transaction piece of code anyway and then - oh wow! - it scorches you. If you're in a shop with no existing or only surface-level code reviews, then you learn the lesson in production, and it brands you for life. In an instant, all that big O theory and combinatorics you did in college makes complete sense. This is the single most common lesson every shop with junior developers learns at every place I've ever been at.
- halfastack 8y agoIs there a clear line between 'respecting complexity' and 'premature optimisation'?
- EduardoBautista 8y agoYou can learn that from a good textbook on algorithms and data structures. You don't need a full blown Computer Science degree for that.
- scarface74 8y agoI learned in my bedroom and got a degree in comp sci. Between the two, the comp sci degree was less useful. What has turned out to be more useful was knowing how to ship software that delivers business value without being an architect astronaught. I credit that to my few business classes in undergrad and my MBA studies before dropping out.
- loosetypes 8y agoTorn on this one. I'm currently finishing up my CS degree after having worked professionally as a dev for a few years. I got started with a bootcamp, maybe before they were mainstream. Maybe my expectations were out of line from the onset, but I came in more to learn than for the sacred degree. And I don't mean for this to be specific to my school - I imagine it's happening many places - but the school seems to be going out of its way to push students away from what I'd consider the core computer science curriculum. I don't think it was always this way but subjects like compilers, algorithms, operating systems, and computer networking are veering more and more towards optional. Taking all of them before graduating is rare. Instead, the hot thing seems to be software engineering. It sounds so good on paper - and I'm sure students, parents, and school admins all want it - but my experience with it has been complete nonsense. In practice, these, and similar classes, have just been watered down versions of what is done in bootcamps, but executed poorly by folks with little industry experience. The result seems to be no actual computer science knowledge, a superficial experience, and bad habits. There's so much more hard computer science I want to learn. And while I'd love to continue on to grad school - I have learned a fantastic amount here - so I can actually get to the good stuff, I don't know if it's realistically the best path. tldr, I'm a bit bitter that I've had to take so many "filler" courses during my cs degree. Are CS degrees getting watered down? Is software engineering as a domain like this everywhere?
- buboard 8y agoIf you are interested in CS-related research (like, really interested to make theoretical contributinos), then CS is obviously needed. For the rest of coders, i 'd say a math degree or a physics degree might teach more skills and a better appreciation of intution. I see sometimes programmers trying to apply extreme abstractions to simple situations that makes my physicist self almost angry. It also makes it easier to justify going with what works, rather than with what justifies the time spent to learn compiler theory.