Ask HN: CS, still a good career in 3-5 years?

384 points by martinesko36 ↗ HN
I am currently in an undergraduate university considered "elite" in US. CS is the most popular major. My friends have switched from finance & medicine to CS majors - for the money and because it's obviously a good idea to do so right now. All the worries my classmates have is how to get an internship at FAANG. Again not that they'll do interesting work (which is rarely the case), but for the resume item...

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 ] thread
It's still a great idea, and the fact that you have more experience and a real passion for it means that you'll most likely out compete your peers.

The 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.

Working for FAANG might be lame, but you can find some interesting company to work at without a doubt. I just graduated, and my friends from CS are doing everything from engineering at exciting biotech companies, Product management, building their own startups, and of course many at FAANG :)

It's a skillset that opens you up to a lot of possibilities

That's something I thought about too, but the fact that most people that I know who are studying it, are producing really bad work like software development, for example, is something you have to have lots of practical experience to get good at it. Well, that's the situation in Germany however and people like me, who really enjoy developing software and bring innovative ideas are wanted much more than anyone completing their course.
I totally see that but I think smart people will do good work, just for the wrong reasons ($) and this will 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? Will everyone at Google be the same Ivy League student who's more concerned with their GPA and internships than actually learning?
That's already how it is at other "unicorns" like Uber and Lyft. I know from firsthand experience. Unbearable work environment. Constantly being sniped by your co-workers who are more interested in playing the game the accomplishing something of value.
Another issue is ethics. There is a critical mass needed of people saying no to prevent unethical software from being common.

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 heard of people going from a bootcamp course straight into Google and optimizing 100% for the career path. They make embarrassingly more than I do, have been programming for a scant few years, and I couldn't care less.

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.

That is some amazing experience you have that no bootcamp can ever hope to teach. Thanks!
How can you not care for people working in the top tech while probably not even knowing half of what you have learned?

Would you say the same thing when you would be another field of work; like medicine maybe?

I'm not the OP but generally I don't attach that much importance to my job. I'm very lucky to (both now and historically) have great colleagues working on interesting problems.

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.

I mean - honestly - most people that work in computers don't work for FAANG, or even a FAANG adjacent corporation. I like job stability (and with my health issues, job stability and good health benefits are always at the top of my priority list), so most of FAANG (and many start-ups) are lower on my priority list; I know I could almost double my income moving out of higher ed. but that comes with different costs and benefits.

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.

I focus on myself. Am I better than I was yesterday? Three years ago? Good. Keep going.

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.

Curious, and being serious here, what problems are you working on and how do you make the world a better place?
At my present day job I make software for factories. My team and I make people's jobs safer, keep machines running longer, and have improved food/drug manufacturing safety operations.

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.

It's not a competition. If you can do what you enjoy then that can be very rewarding in and of itself.
To be clear, courses such as "category theory" and abstract algebra are not required to be a good engineer.
100% agree. Category theory is simply practical and something I came across through a combination of Haskell and Group theory.

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.

Would you be open to having a video chat about these things? I have a distant appreciation but not a full grasp of many things you mentioned and would love some insights.
Me too! I would love to hear more about your experience.
Go to an engineering school and ask if calculus is required to be a good engineer ;-) You can be a programmer without a lot of math skills. You can do a good job in a number of different areas. You can be promoted and lead other programmers. You can write a lot of good code.

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.

The good news is that linear algebra is one of the easiest forms of algebras out there to learn.
I've been programming most of my life too, and I absolutely care how much I make from my job. This other stuff is for the birds.

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.

You dont hear big stories from the ones who tried this and crash burned.
> They make embarrassingly more than I do, have been programming for a scant few years, and I couldn't care less.

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"?

Time will tell. I think there will always be a market for people who can solve problems.

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.

Unlikely, it will just eliminate the "easy" jobs. Just look at writing, mass literacy surely eliminated many jobs but lawyers are still quite well compensated. Another area is mathematics with actuaries.

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.

Ops is getting commoditized through no-code/IaaS-turnkey solutions -- not there yet but I can see what is hard now, becoming easy for 80% of a business needs.
Do you recommend any books or lessons online to learn the math you mentioned? Trying to break into it but right now I'm only in Algebra II (MAT 111) in HS so a lot of stuff I look at requires more prior knowledge than I have.
Well I'm not a mathematician so I'm not sure my advice is going to be useful.

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...

There may be loads of people signing up, but I bet you've also seen a lot of people dropping out. Once you graduate, you'll see a lot of kids unable to find anything. Maybe not so many from your elite school, but for sure many people study CS without "getting it". Or liking it.

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.

Computer Science teaches you to think on abstract stuff. That enables you to do so many other thing (e.g. business process planning, organization planning, etc.). You see things differently (and most likely you already do). In that way it is similar to an MBA degree.

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.

The supply of jobs is still way above the available workers. A lot of people conflate coding jobs with valley, FAANG, or startup jobs. The reality is that every industry, institution, and every company is in the process of migrating their business practices and operations to be digital. I think coding is going to become more common place in every business, including the small ones. Software development may eventually be seen as the new factory work - a blue collar job that pays the bills and helps you support a family.

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

Yes but anecdotally I think the supply is accelerating faster than demand.
CS isn't a career. CS is part of all careers.

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.

> CS isn't a career. CS is part of all careers.

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.

> Even farmers, it might not be necessary, but it can make a huge difference.

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.

I'm not sure that's a saying outside of agriculture.
It was on HN that I first heard it. I'm not sure it is a saying within agriculture. We take for granted the advanced technology that we get to play with.
Advanced compared to what? Probably not microchip factories...
Do you have a link?

It seems like an interesting idea.

(comment deleted)
> As a software developer by day, farmer by night, I'm not sure there is much overlap

Depends what you need it for https://tractorhacking.github.io/

Once you get into level of assets that require tractor like this your main job is financial planning.
> I don't see much advantage in building software for my farm.

Controlled environment agriculture is heavily data driven and is a fast growing field. Same with genetically modified crops.

All agriculture is heavily data driven. It is not that you couldn't put your skills to use, in theory, but it is not economically viable to do so as there are businesses who have full-time employees doing it better and cheaper. In order to stay competitive with other farmers you have to turn to the third-party providers, not hack it yourself.

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.

Maybe genetic algorithms could help you optimize correlated questions you might need answering.
And if that's the case, someone has already thought of it and I can simply buy their product at a fraction of the cost that would require me to implement the same. Not only that, but it will be higher quality too as they have staff working on it day in, day out, while I've only got time here and there, between farm work, to work on it. There is no economic incentive for me to build it myself. It would be a net drain on my business to try.

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.

You are falling victim to the everything has already been invented line of thinking. There are plenty of things still needed for agriculture. Some of them just require thinking about turning the industry on it's head.

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.

> You are falling victim to the everything has already been invented line of thinking.

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.

I would argue that CERN like mega-projects are just as technical as agriculture.
A vertically integrated farming company is going to beat collections of farms with cobbled together technology. We are not yet at that end state.

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.

Controlled environment agriculture = greenhouse. There are two scales of this operation: small scale low-tech option which require just thermostat and fans and then you have big scale high tech versions that costs many millions of dollars and come with all the controllers built-in.

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.

> I could easily turn development into a full time job in that industry. There is a lot lacking in what already exists.

Care to describe what's missing in a little more detail?

The thing is that all farms (producing a given product) are pretty much the same. When something is a commodity, there is no benefit in differentiating your business through process. A tomato is a tomato is a tomato. Nobody cares about what it took to get it to market. This means that everyone converges in the same direction. This means that the tools that are out there for other farms are pretty much guaranteed to fit right into your operation with ease. It would actually be counterproductive, economically speaking, to try and recreate this existing tools. It will cost you more in the end.

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.

Consider your ability to automate tasks on your farm (watering, checking soil health, product QA). All of those tasks being automated potentially increase your output.
Thats very beautifully put. I am definitely going to be using this analogy the next time this topic comes up. Thanks.
> 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.

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=...

No complaints about how spoilt the younger generation was, with their fancy tablets everywhere?
Whether this is true or not, it's distinctly unhelpful for a high school student trying to pick a college major.
I interpreted this comment as saying that CS will always be a useful skill and will never be saturated so therefore pick CS as your major if you are passionate about it, without a fear that it will be saturated
The CS market has definitely been saturated over the years, it has booms and busts just like any other hot field. The 80s in particular were very hard on programmers, not to mention the years after the dot com bust. Long term it seems fine, but just beware it can be a riskier if more rewarding choice.
The question was about a career, not a major. It's not like "pre-med" or "pre-law". You don't need to decide this in high school.
(comment deleted)
> CS isn't a career.

What is it that computer science professors are doing?

Your thinking about going against the crowd is exactly right. Pivot either into a niche in CS, e.g. machine learning, or try an emerging engineering field like robotics. Alternatively, consider something like genomics.
So would you stop if it were a “bad” career choice? That seems just as disingenuous as you’re insinuating your colleagues to be in switching to CS. And anecdotally, having went to CMU, everyone I knew switched to CS or moved CS adjacent - and many of those that switched are enjoying it to the fullest - not as FAANG engineers but many as CS PhDs.

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.

People who are in CS for the money are probably not going to stay in CS long term. There's plenty of ways out for people who don't enjoy the work (management of people or products, technical writing, possibly design).

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'm almost certain I'd never do an internship. It's not a way to optimize for learning and personal growth. And definitely not a whiteboard generic software engineering. Lots of things about internships in the tech field put me off. If it is a startup, I have had a startup, high chance it's a shitshow. FAANG, don't think so. Also what meaningful work can you really get done in 3 months?

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.

It’s partly about working in a professional environment. You can get a 4 year degree and never use git, never work on a single codebase that has existed long before you came and will exist long after you leave. There is so much experience from just working in a professional setting that can greatly boost your resume. We take caution hiring people without this experience as it can be impossible to teach this to someone when teaching them tech skills is easier.
agree for exactly the reasons above. the internship i did helped me understand so many things, from version control and unit testing to larger / longer-lived codebases, to the interpersonal dynamics of corporate settings... To this day I feel like I went through a relatively strong CS undergrad based on what I learned there vs. what my coworkers report having learned, but I also learned just as much via internships as I did in school.
> You can get a 4 year degree and never use git

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.

I understand the sentiment. But before I did an internship, I was also in the same position as you where I had been coding a lot. However, like others have mentioned, an internship is very helpful for the following reasons:

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

> Also what meaningful work can you really get done in 3 months?

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.

> 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.

That sounds like an interesting feature, where do I find it?

1) Open devtools.

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.

It's really not a career path you should get into if you're just in it for the money. Your friends will probably wash out within 3-5 years after they figure out they're not actually interested in software engineering.
I think you underestimate what people will put themselves through to score a high-paying, high-status prestigious job (see: med school)
The thing about software engineering is that it doesn't require expensive post graduate education like med school. The barrier to entry is much lower. Many status seekers will eventually realize a few things about software:

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.

Disagree. I don't care about CS at all. Still like the work, but wouldn't do it if it weren't for the money.

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.

If you've really not put in any time for independent study and have only 4 years experience on the job, you are not "average". You are below average, and apparently unaware of it. Not to mention a cancer on the industry. It's my job to make sure people like you don't pass the phone interview.
Comparing others to cancer, that's always a great display of character. There is much to unpack here, but I'll enjoy myself a bit and simply leave you with the concept "eternal September". Google, if you haven't heard of it.
I'd hire someone qualified, motivated, and hungry to improve over someone who barely scrapes by without wasting a single cycle worrying about their word choice on an internet forum.

Perhaps we have a different understanding of what constitutes "character".

I think since the 90s it was known that CS offered a good, well-paying career path. My classes were packed with fellow students who were in it for the money. Today, I don't know a single one of them who haven't moved into other fields (albeit often related fields, like managing software engineers). If you love software, you'll always have a job, however many other people enter the field. You'll be the one eager to learn new things at work, memorizing documentation, and earning a rep as the one who sees the big picture, not because you're chasing a career but because you love doing those things. That will lift you to the top of you peer group.
I started playing with computers in middle school as a hobby and it basically morphed into a career. I've been in the industry since the 90s, well before everyone realized what a lucrative career it can be. And I saw the same thing - the field became flooded with people who were only chasing the money.

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).

What I see is a subset of people who chase the money who are actually very smart and willing to work hard for it in the long run - think those high schoolers who had to be type A students to get into Ivy League with 4.0 GPA and SAT scores so perfect they still put it on their resume.
Type As don't tend to get into engineering, and even if they do, they'll quickly realize it doesn't bring them as much status, influence or whatever they're seeking as they thought.

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.

It's not just people looking only for money that are jumping into the field. I know of several classmates who started off as math/physics/economics majors, took a couple of CS classes because they heard "everyone needs to know programming", ended up liking it and are now CS majors. Even if a majority of new entrants to the field are in it only for money, there's still a large proportion who truly enjoy it as well.
Just because you may be out of touch because of your elite circumstances doesn't make it a bad career. Getting a FAANG internship is something most students can't (or don't, for whatever reason) do.
It's still a very solid career choice and probably will be for the foreseeable future. AFAIK, Thiel has a thesis about how most innovation in the past 50 years has come in the world of bits and not atoms. This seems unlikely to change in the near term as half of global population isn't on the internet and there are still productivity gains to be made in many industries by digitizing processes or rewriting legacy codebases.

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.

CS is a fantastic undergrad path of study because it is fundamentally a degree in systematic thinking and problem solving. So, regardless of where you go in life, you'll have acquired useful ways to categorize and approach problems.

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.

I was a kid programmer and it sounded crazy to spend college learning to code. I studied anything and everything else. More interesting, but not a good resume-building strategy.
Modified for myself: I was a kid programmer and my parents thought it sounded crazy to spend college learning to code. I studied pre-med but didn't go to med school.

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.

Similar boat here; not Asian, but I was in the military, and got into CS when I was 30; got a remote gig at 36. I get paid far, far less than others, but I also happen to live in a low cost of living country, so it (kinda?) evens out.

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.

Like other feedback in this thread has already covered, the upside is that coding is applicable anywhere, and in fact, I think that outside of our little tech-bubble, it has greater impact as fewer people have those skills. Even a small amount of tech applied to the right place can have huge value.

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.

I don’t think FAANG is really that necessarily important though. Sure, it might open up some opportunities. So would making good stuff that people might eventually recognize.

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.

CS is probably one of the best fields to be in if you like doing it and you don't want to shackle yourself to the law/medicine/finance treadmills, with the expensive extra years of schooling and insane hours for the first years.

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.

Having taken courses in both finance and comp sci while attending one of them elite schools they are two very different group of people. Even if they start at the same line their career path will probably divulge down the road.

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.

Its one reason I avoid doing too much front end work. There are so many bootcamp people now and most are good enough if they're motivated. I don't see how these high salaries can last.
It entirely depends what you're trying to do. If you want to make a bunch of money, it's unfortunately more about politics and luck than merit.

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.

> 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.

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.

> It'll usually get you the medium bucks, though, before topping out, which ain't the worst.

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.

I think what he means by big bucks is ownership.

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.

He does. The thing is you have to hang out with the right people, and even then it's a low percentage chance that you'll become an owner.
Completely agree with this point (especially the third). If you look at high income individuals, many have had a hand in building a new business or lead businesses. Same goes for consulting - imagine charging 20+ clients over the course of a year and the income that will generate.

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.

"it's unfortunately more about politics and luck than merit"

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.

I went into CS without ever having programmed before and consider it the best decision I've ever made.

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.

> I've been coding for half my 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.

I can't find the article now, but that was actually a suggestion I really liked; don't learn CS in college, learn History, learn Math, learn anything else, because someone who can program are about a dime a dozen; but a historian that can also program is unique. The domain knowledge is so much more important than the tool used to explore it - and having both is a golden ticket.
A CS degree gives you a strong ability to automate work using software. If applied correctly it will be be a very lucrative career for a very long time.