9 ms·
Ask HN: If you could go back to study any CS-related field, what would it be?
I'm a sophomore in college, and feeling pretty bogged down by the not-so-relevant required courses at my school. I love the CS courses but I keep finding myself looking at entry level code monkey jobs and thinking of dropping out. I work part time as a developer right now and I enjoy working far more than doing any of my homework, so this is something that is on my mind a lot.
What are some lesser known areas of CS that would be worth studying while I have the chance? I would say the subjects that excite me the most are Machine Learning, p2p tech like IPFS, UX-design, and alternative computer-interface things (like brainwave sensors, VR, and that jawbone thing from MIT that was posted a few weeks back [1]).
[1] http://news.mit.edu/2018/computer-system-transcribes-words-users-speak-silently-0404
- rajacombinator 8y agoEven if you can’t find interesting courses (unlikely), you could use the time to work on a startup or for “personal learning” experiments.
- floatingatoll 8y agoFactory operations. In absolute seriousness! If you want to get years ahead in Ops, learn queuing theory and applications years ahead of your CS peers :)
- jimpudar 8y agoI'll second this - queuing theory is extremely relevant in all sorts of places. If you haven't studied it, you might not know when the concepts will apply. It's applicable to all sorts of things like event loops, job queues, network packet analysis, even database access.
- azhenley 8y agoHuman-computer interaction! I didn’t have any exposure to this as an undergrad but have been doing research in the area for my PhD, and now I’ll be starting as a professor in August. I think it can benefit you in just about any job you go for.
- jimpudar 8y agoNot exactly a "lesser known" area, but computer architecture and operating systems. No matter what you are doing with computers, no matter what high level language you are using, you will eventually need to understand what is happening "on the bare metal".
- ikeyany 8y agoComputer architecture was my undergraduate focus and sometimes I'm not too sure what's happening on the bare metal. You'll want to take VLSI, semiconductor physics, and a course on compilers to get the entire picture.
- godelmachine 8y agoI would also suggest Digital Design.
- tristanj 8y agoEconometrics. I completed all the pre-reqs too, just never got around to taking it.
- mlevental 8y agoisn't econometrics basically just a math methods class for economy student that want to do theory? just like how in the physics department it's called "theoretical physics" or something like that but it's just a Hodge podge of odes and linear algebra (and maybe calculus of variations)
- tristanj 8y agoA few people I know who studied it ended up working in Data Science/Machine learning.
- gnodar 8y agoI would take some Electrical Engineering classes, maybe even minor in it. Given an abundance of time, I would also take some higher level math classes. Based on your interests a broader exposure to these fields, which are strongly related to CS but only lightly-to-moderately covered in a standard CS curriculum, can only help. For me personally, I would do a deep dive on distributed architecture, which you may also be interested in given your interest in p2p.
- mehrdadn 8y agoWhen you say EE, do you mean signals/optimization/control/etc. or do you mean circuits/device physics/RF/etc.?
- msoad 8y agoDatabases. Those are the most fascinating and complex programs I know but I have no idea how exactly they work. Most of complex algorithms and data structures are used in databases.
- Animats 8y agoDatabases are conceptually simple. It's making them go fast reliably that's hard. Naive databases are "Lock everything, take search criterion, run over all records, return result, unlock." (DBASE II in the DOS era actually worked that way, and that's what people using Excel as a database are doing.) Now make it go fast and make it reliable despite failures while updating.
- jbros 8y agoI would do whatever these guys are doing at [lambda the ultimate](http://lambda-the-ultimate.org http://lambda-the-ultimate.org). This all looks strangely fascinating.
- shiado 8y agoInformation Visualization. It fits in really nicely with the ML and big data hype.
- aurelianito 8y agoMy suggestion to you is to take any courses where a 10 years old book is not outdated. This probably includes almost all math, algorithms, big o notation, databases, OS fundamentals, etc. And it probably does not include things like machine learning, HCI, etc.
- macawfish 8y agoMath!!!
- edejong 8y agoThe ones that will help you long-term: management, requirements analysis, distributed aystems architectures. Technologies come and go and you’ll be autodidact during your career. Management, however, will help you identify how to become more effective, regardless your actual posistion.
- quintes 8y agoThis
- adamnemecek 8y agoPhotogrammetry. It’s the art of reconstructing 3d models from several 2d images.
- brightsize 8y agoGeospatial technologies. Cartography, visualization, remote sensing, geospatial databases. If you're good with Python you'll go to the head of the class. My impression is that most students and practitioners in GIS don't have CS backgrounds and thus programming and relational/geospatial database (e.g. PostGIS) skills are in demand.
- manish_gill 8y agoOne thing I've been always fascinated with was the Symbolic Systems course at Stanford. It was a fascinating curriculum involving a mix of Computer Science/AI, Philosophy and Linguistics. I've tried searching for material online, but it's a course taken by only a few people every year and there isn't a whole lot of information available online. If someone reading this studied that/or knows about the methodology/syllabus, I'd love to delve into it!
- Animats 8y agoThat's "traditional AI". I once took John McCarthy's course, "Epistemological problems in artificial intelligence", also known as "Dr. John's Mystery Hour". It was about how to hammer the real world into predicate calculus. That turned out to be mostly a dead end.
- peakai 8y agoDev work probably feels enjoyable since you end up creating things for the product and see where it impacts the business everyday. Coursework is a little more abstract, but you can still make it enjoyable by talking with peers and professors to find out what is interesting and chic local to you. You might try taking some statistics, algorithms and engineering courses since you seem attracted to the by-products of the theory there. Good luck, and hope you don't drop out!
- tytytytytytytyt 8y agoI would take all of the electives I could, if I could go back in time, even if it required staying an extra year. Graphics, networking, databases, ML, everything. I would even go for the masters, really. The undergrad degree is in a sense the prep work for the really interesting stuff.
- pfzero 8y agoI think that this website gives a great study roadmap for computer science: https://teachyourselfcs.com https://teachyourselfcs.com You should definitely consider choosing some topics from the and study them.
- Endy 8y agoBeing honest, if I could study any CS-related field, it'd be pretty simple - advertisement technology management. I'd want to know how to get in the game of stealing people's private data for money; it seems that's the wave that's going to be cresting soon - and people always want to know more about other people.
- gitgud 8y agoNo-one has mentioned Cryptography. Although it seems boring, the applications are almost ubiquitous. It's used everywhere in internet connected systems, secure software and data storage (to name a few). It would seem that would get to work on the large and important things if you pick up cryptography as a skill.
- greenhouse_gas 8y agoAnd also, its one of those things that's hard to learn on your own. On the other hand, do they cover defense against practical attacks in uni? As in, will you be told to roll your own crypto, and have the professor show you the timing attacks, etc.? Because honestly, the theory you can pick up on your own, in industry you just use a library, and I don't know how nice will OpenSSL devs be if you just show up as a crypto noob on their doorstep asking for mentoring.
- whiskers08xmt 8y agoDanish university student here. In the course I'm currently taking, they've made a point of stressing the importance of not rolling your own crypto, along with using salts, and have had assignments where the point was to crack weak encryption like MD5, and do dictionary attacks on stronger crypto. Timing attacks were covered as well.
- greenhouse_gas 8y ago>they've made a point of stressing the importance of not rolling your own crypto, I think there should be a class on how to roll your own crypto, because someone's got to do it, and, as we saw with Heartblead, you don't want something like crypto to be something only a handful of people in the world to understand.
- QML 8y agoThat belongs to the realm of graduate courses where theory and rigor are more emphasized.
- jimmies 8y agoAs a former-dropout myself [1]: You might some of the courses utterly stupid now, and you might have many doubts about the usefulness of a degree, but I think ultimately a degree is very very much worth it, both intellectually and for logistics reasons. A degree will open doors to you, for example, most jobs will throw your resume right away if you don't have a degree. Some countries won't allow you to immigrate if you don't have a degree. There are many dreams that require a degree. The only reason that you can justify dropping out is that either (1) you think you can't possibly learn anything useful from the professors that are teaching you and you'll rebuild/repay what you didn't learn one day (and you better have to have a good answer when you'll do that right now), or (2) when you have a grand startup like Bill Gates or Mark Zuckerberg. But I don't think that's why you're wanting to drop out now. So don't drop out. Keep pushing. For me, I wish I learned assembly, kernel development, stats and machine learning. First two because I love to, the latter two because they are useful. I am now almost finished with grad school, and I feel like I know nil. But in a very Lao-tzu way, I think the biggest enemy of mine is myself (the willing to sit my ass down and learn), not that these can't be learned by myself. Lately, I think I somehow I overcame that problem and was able to read, learn and make a lot of stuff on my own. I think the same thing can be said about anyone who had the patience to get a degree as well: It means they are willing to deal with things they don't totally enjoy to get what they want. As Lao-tzu said, patience is a good virtue by itself... 1: If you need to verify, read the entry called crankshaft #2 on my blog on my profile.
- mehrdadn 8y ago> For me, I wish I learned assembly, kernel development, stats and machine learning. Did you take compilers, learning e.g. parsing theory? If so, are you happy you did or did you feel it's skippable? If not, do you wish you had taken it?
- jimmies 8y agoCompilers is definitely my #1 favorite course. Data structures and algorithms is my #2. I kinda have a love-hate relationship with data structures later on because I never feel I am good enough to say I love it. With compilers, I found only love (perhaps because I don't know enough about it to fear it). Compilers was taught by a very competent professor in my college. It was an undergrad 1-semester course in a liberal arts school, so I think it wasn't as hard as courses offered at other schools. Nevertheless, I enjoyed it immensely, it made sense of everything that I learned in those boring theoretical courses like automata and formal languages. It showed that little machines with very little memory and power can do amazing things. It showed why the ancient calculators with practically no memory can parse a very complicated math function correctly. I really found my fascinations being unleashed in compilers. I still remember at the very end of the course, with the people who survived the last assignment, our professor handed out to us the paper "Reflections on Trusting Trust" by Ken Thompson. I don't think it needed to be mandatory because I can see why some people don't like it. I believe people who get out of school to be web devs, for example, will not be needing it to be competent. But I really think the ideas in the courses are useful in real life in many cases. Later on, I even used what I learned in that course to make a poor man's HTML parser to translate rudimentary HTML to the instructions to write to the Adafruit thermal printer. So basically it makes the thermal printer a wireless one with an easy-to-use API that you can interface with from a phone app [1]. The code is for the Raspberry Pi, but was intended to run on an extremely limited uC that is embedded in the printer itself. I never had time to make the actual hardware but it works well enough for a Raspberry Pi right now. Without the stuff I learned in Compilers, that would have been impossible. 1: https://github.com/htruong/html-bt-printer https://github.com/htruong/html-bt-printer
- glebashnik 8y agoFor machine learning take math, especially advanced stats. Algorithms and architecture will help you to get high-level CS jobs. A couple of business courses will help you to advance your career.
- jahewson 8y agoI felt exactly the same way and made it through my undergraduate degree, worked for 6 months, realised that being a coding monkey was going to consist of repeating those same six months for decades and promptly returned to school, ending up with a PhD. The best advice I can give is to find a mentor - someone who captures your imagination. Most professors are desperate for enthusiastic students to do stuff for them! And yes, do more math. You need people around you for that.
- fyfy18 8y agoOut of interest, what are you doing now you have a PhD. How does it compare to being a code monkey in terms of a career (salary, hours, prospects)?
- iliketosleep 8y agoFront end development. It's incredibily useful for when you get an idea for a product and want to whip something up.
- deleted 8y ago[deleted]
- bennyp101 8y agoSomething that I looked at doing recently was getting into law around the internet/AR/cryptography etc. It seems that there are a lot of people currently making laws and rulings on things that they don't understand - and there is going to be a lot of change coming soon with the way technology is going. Unfortunately I can't afford the time or money to do it now (I think it was like 6 years to just get qualified) which is a shame. (I never went to university or even finished my A-levels, I just went straight to get a job at 17, looking back 20 years later, it hasn't hindered me in anyway, but I do think that going would have had a positive effect and maybe changed my career)
- megadeth 8y agoAutomata and FSM
- baus 8y agoI agree with everyone who says focus on math and stats. The best programmers I have worked with have come from a math background. This is an area I greatly underestimated in my education, and if I went back to school now it is where I would focus
- amorphid 8y agoHey OP, I'm a self taught programmer and former tech recruiter. I wish I had a BSCS for the following reasons: - it would have been easier to get interviews at places I wanted to work when I had less experience - it would be easier to get interviews now at places I want to work if I had prior experience at companies like the ones I could have joined with a BSCS - I'd finally know what I could have learned in school but didn't, and what I just needed to learn on my own - I'd spend less energy on feeling like I have something to prove to BSCS grads If I were in a BSCS program, and I wanted to drop out, I'd do the following before bailing: - prove to myself that I could power through boring work AND do it well to reduce the chances that I'd get fired from a job because I couldn't/wouldn't do the crap work that job required of me - I'd seriously look at my finances to understand how much time I could afford to be unemployed, because I was damn broke in school, and if I got canned from a good coding job, and had to take a crappy non-coding job, I'd have less time to code, which would make it hard to get another good coding job - immediately start living as cheaply as possible on cash I had, only using student loan money for school expenses, and completely staying away from credit cards - line up a job before dropping out, and keep still playing student well enough until I had that job - talk to my professors about my challenges in remaining interested in school, and see if they can offer me some perspective that might help me appreciate the pros and cons of staying in school, because unlike your boss at work, you can talk to professors about your non-growth/personal development - find some professional mentors who could guide me on how to be an employee and/or entrepreneur - stop throwing around derogatory terms like "code monkey", because that kind of job may be the I could get, and I wanna certain I'm not insulting people with whom I'll be working by unintentionally coming across as an ahole - figure out how to pay for health insurance
- xfz 8y agoDon't drop out; you'll spend your whole career trying to push open closed doors (it gets easier with many years' experience or during an acute skills drought, but the issue never goes away completely). Study whatever you enjoy most. It'll be easier for you to excel that way, and you'll still get the all-important degree. Once you get your career underway, continue to learn and work on whatever interests you most; be prepared to continually learn and adapt over the decades. New technologies and ideas will come along that haven't been imagined yet, while some of the stuff you study at uni will be surprisingly relevant later. Best of luck!
- LocalMan 8y agoAs you get older, it gets harder to learn new stuff.
- purplezooey 8y agoComputational Phrenology
- kapauldo 8y agoFirst, I advise you to finish your degree. Most dropouts have tougher lives than those who finish. Second, you have to find the intersection of your interest and what's in demand and what's coming. I can only speak to the latter and I think the big things that are coming are quantum computing, ( more) deep learning and bio sensor stuff. Hth.
- keynan 8y agoPick what your passionate about and learn it deeply. However you would be well advised to take atleased one course on: - networking, focus TCP - Compilers, focus theory behind lex and yacc, or equivalent - parallel algorithms, focus on lock free and message passing - A.I. focus on or-tree search and genetic emergence. (Not ML, important but that comes later) - functional models of computation and recursion.
- mooneater 8y agoThe degree itself opens doors that can remain closed to you otherwise. Get some theory in you and you will stand out from those without it. There is lots of time to be a code monkey.
- mooneater 8y agoYou may not see the relevance of certain courses, some may never be directly relevant. But they are shaping your mind getting you used to abstract thought and greek letters. What we have atm is a job market where you can make good money with your skills. Consider that the "weather", it may come and go. In leaner times, the degree can be of more value.
- kyleperik 8y agoI feel as though many of the comments here are throwing out fields because they're interesting. I think college is a very long term investment that will change what you'll be spending your valuable time on for the next 4+ years. I agree with many comments that suggest pursuing something more "meta" like management or architecture that will help no matter where you land in 5-10 years. Although personally, I'd say experience is practically the best education you can get.
- nojvek 8y agoCompilers - every programming language uses this. Databases - Btrees, indexes, distributed key value stores. The world runs on databases. Graphics - if you like games, how a 3D scene is rendered, photo realism with Ray tracers, GPU pipelines and OpenGL AI and Machine Learning - tons of fascinating problems and algorithms. I’d say focus on the basics. Hash tables have remained mostly the same since they were invented. C still uses pointers, the basics are fundamentally so powerful that they are kind of eternal. When I hire someone, i’m looking for someone with strong fundamentals. They understand the basic datastructures, algorithms and how a computer works.
- quickthrower2 8y agoStudy something that makes you excited. For me, if I had enough money to retire and I am just doing this for fun/intellectual I'd probably look into 3D graphics. I'm not a big nut on Machine Learning. Programming Language design would be kind of cool but I'm afraid it would get a bit dry. I did well studying topics I could visualise. Therefore I did well at analysis at university because you can visualize limits then transcode that to a proof. But vector spaces blew my mind out and I didn't really enjoy that.
- LocalMan 8y agoI dropped out in 1971 for reasons similar to yours. I am now retired. I've supported myself by writing software since the 1970's. Dropping out has cost me several hundreds of thousands of dollars. I don't know how many. Lots of companies pay more just for having a degree. Consider transferring to a cheaper and/or easier school. You'll have more time to yourself, which is often a good thing. Unless you're actually depressed. If you're interested in CS, math is almost always useful. I wish I'd had more. Most of the topics you list are research topics only available to research-level academics. Changing schools is the one thing I regret not trying. Another thing to consider is to change girlfriends. Or find a better one. That can certainly impact your overall view of life. In other words, don't ignore the social aspects of choosing a school. In the 70's through the 90's I had to contend with management that was often quite stupid. And quite often did not even know what a computer really was. You can avoid situations like that more easily if you have a degree.
- your-nanny 8y agoI regret not taking linear algebra (not required by most programs, but very relevant to what I do), computer graphics, and software engineering methodology. If I had taken these classes, I would not have taken other interesting and useful coursework that I would regret not having taken. Hard to measure which path would have minimized my regret. Possibly none, because it may be that degree of regret isn't a function of the path you take.
- thisone 8y agoSame as with linear algebra. It was never part of my course work. Differential Equations, yes. Linear algebra, no. I plan to teach myself one day. Maybe I'll start today
- jxub 8y agoI just wanted to chim in and say thank you for the question, @offbytwo. I'm in a similar situation now and these answers provide a better mental model to act on.
- muzani 8y agoI made the perfect choice when starting with Android. Great job prospects, great pay, allows me to go in and out of a lot of fields. But if I could try over, I'd focus more on small skills instead of breadth. Full stack is nice to know but ultimately not useful. Anyone can learn to program something over 3 months. That doesn't necessarily make you valuable. What makes people valuable is being better than other people at a skillset. Like right now we really need a good AngularJS (1) programmer, but that's hard to find. "UI/UX guys" are a dime a dozen, but what's extremely valuable are the ones who can prototype quickly, write their own CSS/HTML. These guys will be core to any group. There will always be new, sexy tech. The hard part would be coding the algorithms. The guys who are cashing in on e-commerce know their Big O. The guys who are well paid writing code for Uber know their algorithms. The rest will change, and will either be reading documentation or copy paste.