If I could do it over again, after graduating with a CS degree I would explore either going to Wall St to grind and retire after 5-10 years, go to a top 10 law school grind for 10 years and retire, go to medical school. Hell, I'd even just do a DO school in the carribean. Sure you get crapped on for your residency, but after that it only gets better and you don't have shelf life.
And yes I have control over my destiny. As long as you're willing to get up, put your coat on and walk, then you're in control. But as long as you calculate everything in dollars, you're at the mercy of the 'big boys'.
Given the choice between 10 years of work that isn't all that interesting followed by the rest of my life doing whatever I want and 40 years of low status work I do find interesting and then the rest of my life doing whatever I want I know which option I'd choose, and I can see why some others would choose differently.
You should move away from San Francisco. In places like Austin, Tx or Atlanta, GA you could easily retire with a nice home after 5 or 10 years as a software engineer.
Your view is incredibly myopic
In tech and honestly in most other industries in America (I won't purport to speak for the rest of the world) you only end up "managed people without a seat at the big boy table" if you never have the gall to go out and try to strike it on your own. This is because you'll be managed by people who did.
And the shelf life of which you speak only happens if you refuse to learn new skills and improve.
I'd agree it is cynical, but not myopic. My whole post is about the long term career prospects of software engineers...
I don't live in SF, I was using it as an example to point out that even in our industries hottest, most competitive market engineers are still bottom of the totem pole. I don't live in Austin or Atlanta either but an area that is supposed to be more affordable but it's the same story.
I also did start my own software company and even went through an incubator (not YC), but that's beside the point, I was speaking about the profession as a whole. Doctors don't have to go out and strike it on their own, lawyers don't have to, management doesn't have to, investment bankers don't have to so why do we? Why isn't the skill of software development good enough for a successful career? Why must we switch to the new shiny every 6 months? To be honest that mentality is the exact thing that I lament about our profession. Why aren't we demanding better for our own? I'm not sure, but the independent attitude just isn't sustainable in the current political and economic climate, IMO.
I happen to have to have a close friend who was an investment banker and have met many through him. Their shelf life is 3 to 4 years max unless they perform well enough to make to make it to the next rung in the chain which their are few spots for. Most try as hard as they can to impress to make it into private equity, a hedge fund, or a VC. And if you dont make it you have to go into something else.
I have another close friend who is a lawyer. You are correct about that profession.... But only if you make it into a top 10 law school and a top tier law firm. If not you're lucky if you can find a job period.
http://mobile.nytimes.com/2015/08/25/opinion/too-many-law-st...
Doctors are a similar position to lawyers. More secure but you have to go to school much longer which I hope you can extrapolate means a lot more debt to pay off before you get a shot at making retirement money.
You are also drastically underestimating the amount of continuous education in other fields as well. Not quite as fast as in tech but not non existant either.
So I'm telling you we have it the best out of all the other professions you mentioned.
No school is required, a CS degreee helps immensely but it can be done without it. If you play your cards right you can make enough money to live in the top rung of people in every city except SF (you can even live really good in NYC if you land a good gig). I can think of few other professions like it.
P.S if it helps you feel any better Id be happy to ask my network to get more info.
Here's the fields I have friends or family in to go find more info to help dispell myths about.
Finance, Law, Healthcare, Oil and Gas, Dentistry, and probably others im not thinking of.
The idea of testing code was never covered in any of the introductory books I read. I learned the basics of C, Fortran, and Pascal while doing a physics undergrad in the 90's, then I learned Java and Python in the 00's on my own from books and websites. None of the introductory books I read introduced the concept of testing. It wasn't until I started reading programming blogs on a regular basis that I started writing tests for my code. Once I did, the quality of my code immediately improved and I felt much more confident in the code I wrote.
When I wrote an introductory Python text recently I included a chapter on the most basic aspects of testing. Beginners don't need to write tests for everything they write, but they should definitely be aware of the concept.
I know if I continue programming as my employment until I'm an old man without trying other pursuits, I will definitely regret it.
I'm 26, and I wrote my first line of code when I was 13 or 14 years old, and perhaps the only sub-fields of programming where I didn't dabble in substantially are assembly and prolog. These days I feel like, with programming, I've seen it all before. C, C++, Python, Objective-C, node.js, Lua, Lisp, Haskell, GPU computation, Django, REST API, React, Angular, Django, graphics programming, mobile apps, iOS, Android.
I've spent time with each of them, most of them in a hobby and commercial capacity and these days everything seems a bit too familiar. I know there's a lot of people who have way more expertise than I do, however, I think it would do me good to get some space. My body is giving me hints I can't continue in the same way I have for the past ten years - I feel my legs getting weaker by the day, random points of tingly pain in my finger tips that comes and goes. I find I really like looking at trees and feeling the wind in my face. I would love to do a lot less sitting and a lot more moving, as in quitting programming as employment completely, starting within 9 to 12 months.
It just takes a little effort to do it sustainably. For a couple years I never drove my car, instead pedaling around the city enjoying the breeze every morning and afternoon, because work was a 25-minute bike ride away. But now that I'm working from home, I have to make the effort to get outside or work some kind of movement into my day, and it's still entirely up to me to do.
Realizing how much better your body feels after running or biking or whatever physical exertion you enjoy can really help. Having a dog helps. Having friends around who like to constantly get outside helps too. You just have to remain vigilant about it, and grab any spare moment of the day to do something with your body other than transcribe code. There will always be improvements you can make to software, but just a little extra activity for your heart and muscles fixes a surprising number of physical "bugs."
Upside: Now I know many of the "under the hood" implementation things
Downside: Took FOREVER to build anything useful, demoralizing to spend so much time on algorithms and learning every bit of C and JavaScript from the ground up and not be able to do anything useful quickly. Didn't know how to put what I knew to practical use in the modern web.
I got into a funk and one day started learning a framework and it changed my life. I could use what I learned to build on top of the framework and quickly get webapps running that people could actually use.
I regret that I was stubborn and wanted to "learn it the hard way." If I could do it over, I would go through a book on a particular programming language to learn the ins and outs, and then quickly apply that knowledge to a framework. Much better positive feedback loop being able to see the fruits of my learning come together into something practical and actually useful rather than little programs that lived on my local machine and didn't do too much.
It's much more fun and less tedious to built out my own apps on the structure of people who came before me. GOod recent example: Building an app and wanted people to be able to drag and drop to upload files into their browser. Old me would have spent a month learning how to implement this in JS from scratch, new me just uses the DropZone JS library to make this happen and then I can focus on what I really want the app to do.
Not sure if any of what I'm saying makes sense to anyone but me.
I should have learnt more of following (a) memory management, (b) process memory layout, (c) good coding practices (d) read up code from other projects. There are really brilliant programmers out there churning out awesome code and that itself is a great teacher. (e) Teaching whatever I learn. Teaching (especially writing it down on paper/webpage) brought clarity to me.
Not doing all of the above early in my career is a regret I have now.
I try to avoid it and over time I've done a better job of approaching things dynamically.
That time could have been spent on growing ideas and design rather than now let's find out where this segmentation fault is coming from...
This should be done sooner rather than later.
Also, I should have started with Modafinil sooner to fix my ADD that prevents me from learning new stuff.
Between working smarter and working (and learning) with more motivation, working smarter may not be the clear winner...