Ask HN: CS, still a good career in 3-5 years?
I've been coding for half my life, out of pure interest for the building things and never got into it for the money. CS career being obviously a good choice and every smart kid I know majoring in it, mostly for the cash, honestly makes me worried about the future of the field in terms of whether it'll still be a good career in the future. I think smart people will do good work, just for the wrong reasons ($) and this might impact the field negatively. In 5 years maybe things will still be okay, but if the trend continues for 10 years? Will CS become unsustainable hours like working in the quantitive funds or unsustainable competition and workload like in medicine, or both?
PG has said something along the lines of "if everyone thinks something is a good idea, it's probably a bad idea" and Peter Thiel's competition theory where profits get competed away if everyone's doing the same thing are two ideas I think most about.
What does HN think?
310 comments
[ 4.1 ms ] story [ 252 ms ] threadThe best piece of advice I can give is that at the end of the day, do what you feel is best for you personally and don't pay attention to what your peers are doing. The programming landscape is LARGE.
It's a skillset that opens you up to a lot of possibilities
Right now there are multiple gold mines as software used to be more or less ethical/trustworthy, now people are busily trading that trust for $.
I've been programming for most of my life. I've poured hours into learning 6502, BASIC, 8086, C, C++, Perl, Python, Javascript, Common Lisp, Haskell... to say nothing of physics, linear algebra, geometry, graphics, logic, type theory, abstract algebra, category theory, information theory, databases, networking, compilers, operating systems, interactive theorem provers, distributed systems, etc. I've never even been to university or college and I've been doing this for nearly twenty years professionally.
Do it because you like it, because it means something to you. Keep being you and doing what you think is important and useful.
Would you say the same thing when you would be another field of work; like medicine maybe?
But in terms of 'jealousy' for those who earn more? Quite the opposite. There are plenty of companies I'd rather top myself than work for.
You're treating this like monetary value is the only motivator for people. Let's pick on medicine; a general practitioner consistently makes less money, but they tend to have greater, more regular contact with their patients, which may be a strong motivator for them over becoming a surgeon for more money. And to boot, the surgeon is more specialized, so they have simultaneously learned less than the Gen Practitioner, but more specificity within their selected specialization. This is similar to boot camps, that provide a very narrow skillset that give someone the best chance of getting hired into that very narrow position type; where as, someone like the OP and I are happy with our broader knowledge that gives us different benefits.
And probably most importantly, what do I care that someone else has optimized their job path for monetary gain. I could assign 5 minute increments to worrying about each person and still not make it through all the idiots that are employed in the tech industry in my lifetime.
We're not like doctors. There is no capital-P professional guild setting the bar for practitioners of software engineering. There are engineering guilds that recognize software development as a discipline that will accredit you if you meet their requirements and pay their dues. However it's often not mandatory for you to be accredited in order to practice software engineering. And it's not required that a company developing software employ a professional software engineer in order to conduct business. So hardly anyone seeks out accreditation.
In a free market you get companies like Google that need a large volume of people trained with vocational skills to churn out code in the various frameworks and tools. Doesn't bother me any.
I like to work on problems that are interesting and make the world a better place. You can't always do that at a Google or Netflix.
On my evenings and weekends, when I'm not unwinding, I'm presently working on Haskell libraries for type-directed data migrations, extending the community fork of Lean to add FFI support, and working on a course in abstract algebra.
Making the world a better place is pretty easy and can start with small things. I like visiting some of our customer factories and meeting the people who use our software. It makes my day to hear their feedback and know that it's making a difference for them.
I'm not trying to shame bootcamp grads or make any judgements about their skills if that's what you're implying. I think the free market is free to decide what they're willing to pay and we should treat it as such and not be upset if someone with a few months of experience with programming lands a job making more than we do.
My point was that your fiercest competition is with yourself. And CS is a valid career path with a lot of interesting options if you stick it out for the long race.
However, there are a lot of areas where knowing linear algebra will help you enormously. Many people who don't know linear algebra often don't see the problem because they will never choose a solution that will require it. They often don't know enough about it to realise that a solution exists and is potentially better than the solution they are reaching for.
Similarly, I can't tell you the number of times I've seen abject failures because the people involved did not understand statistics. In fact, if you only choose one math related area to learn about as a programmer, I highly recommend choosing statistics (which will unfortunately require calculus to understand well). Again, people who do not understand statistics often fail without realising that they are failing -- because they don't understand the statistics ;-)
I can make a similar remark for combinatorics and a variety of other mathematical disciplines. For a very cool job I once had to map animations onto a non-euclidean surface. Sure, I don't have to think much about math in my every day work wrestling with a legacy Rails system but I'm not sure I would want to define my entire career as doing that.
I would recommend that any programmer who wants to be a good programmer and to work in a variety of interesting fields to study math. Universities hardly have a monopoly on math. There are many good books and many internet resources to help you. You don't have to do it, but it will help you if you do.
Attempting to reach an absolute maximum for pay will probably be a bad time, but you can decide on the level of effort you're willing to put in and then maximize compensation for that.
I think the bigger question is, with programming being made more common to the public (aka being taught in elementary school), will the supply/demand ratio that makes US development a six figure job go away with the influx of "new would-be coders"?
Programming may become a lot like maths in that it’s mainly used by other disciplines to get things done. Learning something other than programming itself will always be an asset.
Democratization of computing will lead to greater stratification of programming jobs. The "Excel Programmer" won't exist being supplanted by the "Office Drone" whereas the "Distributed Systems Engineer" (or whatever) will keep on going.
The standard pedagogy is algebra then calculus by the end of HS. For me it was learning to program computers by way of making video games that solidified my understanding of HS level geometry, trig, and calculus. That was so long ago though that I don't really have any recommendations for current courses or books to go that route. I would recommend learning enough Javascript or something to get a canvas up in your browser and start making boxes move around, accelerate, rotate, follow your mouse, etc. It doesn't have to be anything sophisticated but it can teach you a lot.
If you're eager and enjoy a challenge I'd say my one regret was not learning how to construct my own proofs until much later on. Learning how to apply maths to solve problems is a lot of fun but learning how to think abstractly and make your own arguments is much more satisfying. There's a great book that doesn't require too much more than HS level math to understand which starts to make this connection called, Introduction To Graph Theory [0] and it's one of my all-time favorites.
[0] https://www.amazon.com/Introduction-Graph-Theory-Dover-Mathe...
Ultimately, you are gaining skills that will benefit you whatever you get up to next. Just the simple fact that you know a bit about how computers work will put you ahead in just about any white collar job, since pretty much all those jobs have people staring at a computer all day. This is a lot more than can be said for most majors.
If you do decide to be a coder, there's lots of stuff to do. There's no walk of life that's far away from software these days.
If you're there for sheer joy, my guess is you'll find something you like and where someone values your contribution. I wouldn't worry so much about FAANG internships, the exagerrated focus on that seems to be something that's bled from finance internships, where it is indeed important.
And if you wonder whether you make the big paycheck? Do not do that to yourself. Move somewhere where that is not important (and find the right partner for it).
Maybe fellow posters have even better examples than me.
For example, most government forms require you to fill out physical paper and send it in. There are thousands of agencies across the US, each with hundreds of forms for different processes. Just upgrading those to be more accessible and less error prone is going to take over a decade and thousands of hours of developer time. It's not glamorous work, but it will help a lot of people
I imagine when cuneiform was first invented, there was a group of people who were the first writers and they probably worried that it would get saturated. How can we all be writers? There are only so many things to write down: recipes, shopping lists, the kings desires, and heroic tales. What are the rest of us going to do?
But of course writing is just a way of expressing and recording. Writing becomes an essential skill for law (and law itself is hundreds of professions), or science, or "business" (which is a catch all).
Even within CS, I don't consider "machine learning", for instance, to be a single field. Whether you are using machine learning to apply astrology to the financial markets, or using it to diagnose diseases, makes a huge difference to your career.
CS is a skill, but your career will involve other things: a specific set of problems, a specific set of attempted solutions, a network of people who might help you, brands you will want to be associated with, and half a dozen other things.
This right here. I was in awe when I realized that software engineering affects all industries. Even farmers, it might not be necessary, but it can make a huge difference.
Also I too have been coding for a long time because I love programming. The way I see it, if I ever tire of it, I can switch careers. I'd still code regardless of who pays me to do what.
As a software developer by day, farmer by night, I'm not sure there is much overlap. Some of the problem solving skills I learned on the farm have made me a better programmer, I expect, but I don't see much advantage in building software for my farm. Anything you can dream of is available commercially at a fraction of the cost it would take to build it yourself. As the saying goes, technology is developed in the military, adopted by agriculture, and then exposed to the rest of the world.
That said, the story is quite different for my new side venture in a consumer market, however. I could easily turn development into a full time job in that industry. There is a lot lacking in what already exists.
It seems like an interesting idea.
Depends what you need it for https://tractorhacking.github.io/
Controlled environment agriculture is heavily data driven and is a fast growing field. Same with genetically modified crops.
To make such a thing economically viable you'd have to find a problem space that is either unexplored or unique to your business. Both are unlikely to begin with – everything you can think of has already been done – but in the odd chance you do have something in the former case, you really need to dedicate all your time to it in order to make it a commercial success. That pretty much means giving up farming. The latter case doesn't really come up either as farming is a commodity business. There is no benefit in finding differentiation in almost all cases. If you really have a good idea unique to your business, your neighbour is still going to want to copy you, which brings us back to the first case.
I know from working in other industries that there is often a business advantage to building custom tools. I don't see it in farming. Being a commodity business, the businesses are pretty much carbon copies of each other. There is no real advantage in differentiating yourself with specialized tools like there is in non-commodity businesses.
If you really, honestly, feel like you've found a novel idea that could help your farm business, you'd be better to quit farming and focus on building a tool that you can sell to all farmers. But it remains, if you can think of it, it is almost already guaranteed to exist. Agriculture is fiercely competitive.
For example no one likes Round-Up, people are not big fans of GM crops, one of the reasons we GM crops is the make them Round-Up resistant. The big player in the space has no incentive to change due to the fact that they own the IP to round-up and they own the IP to the GM crops that can resist it.
But what we are really talking about is getting rid of weeds. They way it is done now leaves a lot to be desired. A way to fix it is automated machines with object detection that eradicate weeds. Primary problem solved, weeds are gone, secondary problem solved Round-up is not needed and as a bonus not buying GM seeds.
The problem is no one is looking at it from that equation because either they have a vested interest in the current order of things or they do not have the technical chops.
That is just of the top of my head there are thousands of problems to address in the agricultural space.
I mean there are pest problems. There are water management problems. There are pollution problems. There are yield to market problems.
Anything that has a workflow has potential improvements.
Because in agriculture it is pretty much true. We are talking about the most technically advanced industry in existence, other than the military. As new technologies make new ideas possible, someone will jump on it immediately. Me, also trying to worry about operating my farm, will always be late to the party.
> A way to fix it is automated machines with object detection that eradicate weeds.
And that already exists and is commercially available. It is somewhat amusing that your best example of something that hasn't been invented yet is something that has been around for a long time.
It is not exactly cost effective against Roundup in all cases yet, but do you really think that if I tinker for an hour per day, if I'm lucky, that I'm going to magically find an efficiency that teams of people working full time on the problem wouldn't find on their own?
I am feeling that you continue to grossly underestimate what can be done with limited spare time between chores when competing against businesses with teams of technologists focused on the problems full-time.
That said, the commenter who said that farmers can make use of computerization did not say that they would employ engineers directly, and I see several other commenters falling victim to that narrow interpretation.
For low tech option there is just not enough margin and leverage to make it worth spending your time on it. For high tech options you are having millions in debt and another million or two in running cost (labor, seed, electricity) and with margins in single digits you are probably don't want to risk playing with your recipes. Safer bet is to outsource your tech needs to the companies that have teams of people working on just one single problem.
Care to describe what's missing in a little more detail?
In this consumer space, there is more effort to try and be different. In this case, the customer notices processes and better processes make for a better customer experience. That is how you beat the competition. Often the tools that are out there don't fit nice and tidy into the way we wish to do business. They are either tailored for other businesses or try to be a jack of all trades, master of none. There is all kinds of room to build software that is specific to our operation, and beneficially so. There is a room to get a leg up on the competition if you do it well.
As a bit of an aside, when you're paying $500,000 for a tractor what you get, in terms of technology, is also quite different to a $100/month SaaS product. That is the other big thing I have noticed is simply quality of software. Nobody could ever afford to pay $500,000 for a system in this consumer industry, so the options that are out there are quite low quality. Understandably – I know all too well from my day job the corners we often have to cut and the concessions we have to make to keep things within budget – but in an ideal world the software would be better.
When cuneiform was invented the things to be written down were tax records, business transactions, beer recipes, legal codes, poems for various gods, lists of military spoils, multiplication tables, customer service complaints, teachers griping about their students being lazy, and students griping about their teachers being hardasses. e.g. https://en.wikipedia.org/wiki/Complaint_tablet_to_Ea-nasir https://books.google.com/books?id=Nvgz3NOuo5EC&pg=PA230&lpg=...
What is it that computer science professors are doing?
In undergrad, the crowning achievements you can get are mainly the internships, especially at FAANG companies. Don’t worry about it too much. If it really is about the code and the work, just keep doing what you like doing. Computer science isn’t going to go away any time soon, and if it is, academics will be the last to let it go.
Certainly some people come for the money and stay for the experience. My best advice for internship applications is try to have some interesting project on your resume --- preferably one of the things you've been working on outside of class, but mention interesting class projects if you can speak to the whole thing. And get the interview basics down -- clean clothes, appropriate clothes (ask recruiter/scheduler what people wear to work and match the fancier end), arrive 10-15 minutes early, try to be relaxed, etc. For video or phone interviews, if you can find a quiet place with no distractions, that's best. It helps to do practice interviews, which could be for local companies you might rather not interview.
You didn't ask for interview advice, but I just mention it because I've interviewed some intern candidates, and it's always unfortunate when the candidate seems very unprepared or having a bad day, but may have been a good fit.
I feel like internships are a good way to learn if you haven't already been coding in the real world or on the subject matter and a good resume item, but if you have a good resume already and coding experience there are much better alternatives.
Having graduated about a year ago, this is the craziest thing I noticed about so many of my classmates. It'll be trial by fire for sure.
1. You get experience working with important concepts that exist in production like proper git usage, technologies like Kubernetes and Docker, managing differnt build flavors on the client, unit tests, how to review other peoples code professionally, etc
2. You learn the soft skills part about building software. More often than not, software is a team effort and learning how to navigate different peoples egos and personalities and trying to get your ideas across are very important. Even if you're the best coder in the world, if you can't get your ideas across, it doesn't matter
3. 3 months is actually a lot of time to get meaningful work done. Even full-time employees will have feature development that takes around 3-4 months from ideation to shipping (in high velocity companies). As an undergrad, you have 3 summers and I would consider at least allocationg 1 of those summers to an internship to see how you like it
It really depends on where you are and how seriously they take their interns. I've seen interns accomplish a fair amount in 3 months where I work (Mozilla). As a concrete example, we had an intern propose and implement a new devtools feature that lets you see what your site design looks like to users with various visual impairments.
Still depending on where you are and what you have already done, some things that one can learn from an internship that one might not encounter otherwise during college:
* Working with a large codebase.
* Working with a distributed team.
* Code reviews, both as the recipient and actually doing them yourself.
* Dealing with large existing suites and writing your own tests, then dealing with the intermittent failures.
* Finding out what various people in the industry are working on.
* Finding out what jobs actually look like in practice on a day-to-day basis.
It's possible to pick some of these up via various open-source project involvement, of course, even without doing an internship.
As a personal anecdote, during the one internship I did I learned a lot about the concept of "just because it's a spec doesn't mean you should implement it", ended up fixing a ship-stopping bug for the product I was working on, made some friendships that continue until today (nearly 20 years later), learned some hard lessons about the failures of corporate IT provisioning in a large corporation, plus some of the things I listed above.
That sounds like an interesting feature, where do I find it?
2) Select the "Accessibility" panel. See https://developer.mozilla.org/en-US/docs/Tools/Accessibility...
3) In Firefox 70 or newer, if WebRender is enabled, there will be a "Simulate" menu next to the "Check for Issues" menu. See https://developer.mozilla.org/en-US/docs/Tools/Accessibility... for details. Note that WebRender is not enabled across the board yet, so you may need to force-enable it, depending on your operating system and graphics card, to use this tool.
1. Wait, I really have to look at this screen most of the day? 2. The pay check is nice, but the job itself isn't high status. I'm treated like a grunt 3. I have my whole life ahead of me, plenty of income, and a degree from a top school. I can leap frog to another position in the company, or go back and get my masters.
Am I good at SE? No. But I went from terrible to average in a period of 4 years and am now earning 6 figures. All without side projects or unpaid learning.
Perhaps we have a different understanding of what constitutes "character".
My advice to you: don't worry about it.
Do not underestimate the competitive advantage you have if you are passionate about software development. The people that are chasing the money clock out at 5. There's nothing wrong with that, but they aren't trying to teach themselves Haskell on a Friday night just for fun. You will work harder than those people, not because you're scared, but because you love the work. And that experience will lead to career success. It doesn't happen overnight, but skilled and passionate people do bubble up on the food chain (assholes do too, but such is life).
Very few companies are engineering driven, some are product driven, some a finance driven, some are sales driven, and the respective department will have more clout than engineering.
If you're still an undergrad you could also think about some of the adjacent fields where having CS knowledge is a benefit. These include (applied) math, physics, economics and biology.
I majored in physics, but if I could do it all again I'd probably study equal amounts of math, economics and CS.
Otherwise, rather than worrying about whether you are in the right major, think in terms of "what kind of problems do I want to work on in life?" If you can answer that, you'll be on the right path. And, if you think the kinds of problems you want to work on don't involve technology or aren't solved by technology, then either switch majors or add a second major that augments the skills you need for the problems you want to work on.
This was in 1998 for me, and at that age I didn't know how to push back on my parents. Good 'ol Asian parents didn't know anything out of the big 3 (Doctor, Lawyer, [Licensed] Engineer). Still going to therapy for that.
I am now in a software engineering job as a TL but I'd say I'm about 8 years behind in my SWE career, after soujourns in a microbiology lab, food manufacturing, retail inventory planning, and then product management in retail, and then to engineering. To be fair, this might still be the case as the dot-com implosion happened just before I graduated from college.
I have amazing, varied experience as both an IC and people manager, but I don't have the ticket known as a CS degree. I'm thankful for the path I've taken but eventually I will have to make a jump to a "real" tech company, and I can't say that I don't have some apprehension about my lack of formal CS training, as well as age.
I would like to get paid more money, and I think I could look for higher paying work at this point. However,I actually do like the company I work for, and it's fairly low stress. I also have enough time to work side projects and start on my Masters (in Geoinformatics, not CS)
And yeah. I feel you on the age apprehension. I think it would be much harder for me to find a software gig back in the States now just due to my age.
It's just that the Asian kid in me is thinking I need FAANG on my resume even for a short time to get some street cred. Like you, I do like my job, the comp is OK, but eventually all things come to a end.
IMO, I dong think I could ever get into a faang company. I’m terrible with algorithm interviews. I also don’t think the job would be that fulfilling... what is useful about making or maintaining projects that focus on data, ads, etc, that doesn’t benefit anyone?
The money would be good, but eh... maybe I won’t ever make as much as a guy a google, but I can say I was involved in a project that helped disabled people get picked up by a bus more easily.
There's probably not a better path to a comfortable middle-class lifestyle. Just stay out of the Bay area; there's tons of jobs in second and third tier cities with reasonable cost-of-living that will pay you a hundred grand after a few years.
I would focus more on what specialization you want to pursue rather than worry about CS being viable. After a few years your degree begins to matter a whole lot less.
You have a leg up.
If you're trying to maximize income, you should focus on understanding finance/business and building soft skills. You're probably over the threshold of how much you need to know about computers. Maybe get some training on how to work better with others, or how to negotiate effectively. In other words, soft skills are going to be the value you have over your peers that have been cramming CS for the last 4 years.
> I've been coding for half my life, out of pure interest for the building things and never got into it for the money.
The reality of working in tech is probably similar to what you've already experienced: Lots of people working with computers, but most know less about what's going on than you do. I was kind of shocked by this when I started working, but now I realize it's because most people don't need to care about how their tools work to do their job.
This. Outside of FAANG(-alikes) and some finance software work, the real money remains on the business side. Managing others. Presenting & selling ideas. Communicating. Knowing some computer shit is a big bonus but isn't what'll get you the big bucks. It'll usually get you the medium bucks, though, before topping out, which ain't the worst.
You'll also need that to go independent (start a business, start a consultancy, high-end freelancing) which is a third way (pure Tech in a handful of businesses; tech + people skills anywhere else; be your own employer) to make real money doing this stuff.
Can confirm. I make medium bucks. The way the economics work, it made more sense for me to make medium bucks remotely in a cheap CoL area than it did to try and get big bucks in a major city.
Salaries top out at... $200,000 for non-specialized professions, $500,000 for the best of the best...
Compare that to the capital gains made by people who are owners of businesses. Or other large capital investments.
You'll have to work your ass off, but if money is what you're after, starting your own business (or businesses), consulting, and high end freelance work are incredible places for this.
A fourth may be pure finance (M&A, PE, hedge funds). People in that business long enough and high enough on the chain make VERY good money.
To reiterate, software is not all about writing software. There's usually an immense amount of buy-in you'll need from other people, not limited to other software engineers.
All while simultaneously trying to navigate budgets and legacy systems. Even if you're pretty heads down, you'll still see the outward effects of these things.
All these things are necessary though, as the system within which the software operates becomes increasingly complex over time, it becomes necessary to engage with many different people in a multitude of roles and capacities.
As others have said, CS gives you a framework for analysis and problem solving. That framework can be applied to almost any other problem in life.
If you already know programming and you're confident in your ability to continue self-teaching, I'd suggest you actually do a different route. MBA, Finance, Accounting, Medicine, Chemistry, Physics, etc. e.g. A good programmer who has a strong understanding of finance will do significantly better in FinTech than the programmer who has spent 4 years practicing CS theory.
If you want to make a real difference, learn a specific field and then use your technical skills to help them solve problems in ways they never imagined possible.