Ask HN: I am 30+ and bored with life and the software industry, what do I do?
I used to love software/programming but it's getting boring now. It seems so clear to me that so much futile effort is being put into building yet another language, yet another editor, yet another UI rework, yet another infrastructure rework. And for what, just because people would have something to show for. Seems the number of people trying to come up with futile things for the sake of popularity has outnumbered the ones who try to do real work.
The hate for one language as if other languages are elite. Trying to use all the features of a language and thinking a one liner is cool even when a five liner and a one liner is same when compiled into machine code. Too much jargon, falsely claimed software engineering practices and overly zealous object oriented mentality (Seems people try to use Object Oriented for everything, they call it the best, even better than simplicity in many cases.)
Quite frankly many years of self hacking/studying and experience in industry, I think I've just had it with software industry. Does it get any better ? Am I seeing things correctly ? Is this a burnout ?
133 comments
[ 2.7 ms ] story [ 203 ms ] threadhttps://www.youtube.com/watch?v=jN9L7TpMxeA
http://cliki.net/Getting+Started http://www.gigamonkeys.com/book/ http://mitpress.mit.edu/sicp/full-text/book/book.html
And no, it's not yet another language, it's that feeling you have had all your life. That feeling that something was wrong with the world. You don't know what it is but it's there, like a splinter in your mind, driving you mad, driving you to me.
I mean, if you were on a desert island, would you even want a computer? What would you do with it?
"BOAT" = "Break Out Another Thousand"
enuf said:-)
It can also be something of an intra-life crisis. For some reason 34 hit me really hard. I think part of it was that suddenly I knew that there was some things that I had considered "something I'll do some day" were probably off that list, permanently. Like a friend of mine who realized he wasn't going to ever be one of the world's top jazz musicians. (for me it was being an astronaut) And the realization that this is "all" there is, you live, you experience life, and you die. There is no "win" there is only great times and not so great times. All of that came down pretty hard on me in my 30's.
My coping mechanism is finding something new to learn, but that certainly doesn't work for everyone.
If not Virgin Galactic there will be another company.
[1] Not exactly epic experiments though, I recall that one of the sillier ones was tie two fans together at the base, with their blades facing opposite directions, and see how fast it would spin.
Some other ideas:
- Spend your free time (and take some extra time off) to do something new non-computer related: gardening, mountainbiking, climbing, etc. Sometimes, computers are just work (until you have more inspiration), which is ok - it pays the bills, find the challenge somewhere else.
- Try some vipassana meditation classes. It can be really insightful to see how the mind works.
- Take a year off, travel the world (relax a little before a real burn out hits you).
- (If applicable) Start a family :). We have a 1.5 year-old daughter, it's great to just watch her play, going for a walk in mountains with her, etc.
There are also very different paradigms which I find renew my interest. erlang, rlang, golang... you may have to dig to find what keeps you interested.
It sounds like you need something new, something refreshing. Maybe take a break from your existing approaches?
Tools are just that - they are tools. Granted, there are many of them, new and shining, coming in all packages, but that gets tiresome after you've spent a substantial period of time with them. They are all essentially the same and sooner or later you lose interest in them.
What never gets boring is using tools to create things that affect people's lives. And I gather from your message that you've missed that joy.
My advice is simple. Think of some thing that would be helpful to (non-technical) end users. Come up with some kind of service that would solve even a small problem for them. Then see your eyes light up as people are adopting your offering and giving you their thanks.
In short, your work must have a meaning. You should know that somehow what you do improves the world we live in, even if in a small and seemingly insignificant way. For as long as you're just finishing tasks prepared by somebody else for somebody else's meaningless projects, you're not going to be happy. As with all creative professions, in programming too you have to take matter in your own hands.
You've just realized (subconsciously) that your work has been meaningless. You basically need to find your path. What you could do:
- Forget about the tools, just pick up something you're comfortable with and create something useful for people
- Change jobs until you find a project you can personally identify with and where you'll see you work affecting the outside world in a tangible way
- Change profession or role to the one where your need for meaning will be satisfied
That's hard I know. I wish it weren't but it's just the way things are in life.
Software, computer science, can be your ticket into whatever industry you want, whatever interests you, because it all needs software.
So think about what's interesting to you in the world. Aircraft? Aerospace? Trains? Medicine? Medical devices? Business? Movie making? Publishing? Oppressive scheduling algorithms managing on call jobs in the legal slavery known as retail? Shipping logistics? Law enforcement? Surveillance? Human rights? Gambling?
Man, the world is infinite for all intents and purposes, and you get to participate in any part of it you want. Raise your head up from your tools a bit and look around.
I totally agree with you. Technology for the sake of playing with technology gets stale after a while.
The software industry loves re-inventing things and attaching new labels. You are absolutely correct that regardless of what language/paradigm/methodology you use eventually every program results in machine level instructions being executed. In some cases less efficiently than in other cases. It's not about the program, it's about the problem being solved.
Only you can decide, based upon the other comments and preferably after competent medical advice, whether your situation is a case or burn-out, depression, mid-life crisis, etc.
Assuming that it is none of the above, then you might want to consider finding a "real world problem" and using your knowledge and expertise to create a solution for it. If you can't find any worthwhile problems (yet) then go travelling! It will open your eyes to a massive, colourful, complex REAL world out there with its myriad problems. Sooner or later you'll find something you care about enough to want to solve.
WHY are you building software? Start with answering that question. Then, do a bit of soul-searching; figure out what truly feels meaningful for you. That's something no one can answer but you. Then go and do it.
If you can't come up with an immediate answer, then start trying different things.
Building a bridge isn't enough. Connecting two communities over an otherwise impassable chasm is.
* Figure out how to write AI for games. A simple example would be, how to write a bot that finds shortest path out of labyrinth.
* Check out graphics programming
* Try to see if low-level programming is for you: kernel level, GPU, OS
* Check out infosec industry, there should be a lot of fun there: malware analysis, penetration testing, etc
* Machine Learning: tons of coolest stuff. predicting, classifying, reinforcement learning, neural networks. Check out Kaggle machine learning competitions.
* Checkout competitive programming sites. My personal favorite is hackerrank.com, but other popular ones are topcoder.com, codechef.com, codeforces.com. Try doing challenges for a couple of weeks you may find that you learnt as much as you previously learned in a year. Also through it you may get interested in particular algorithms and fields.
* Distributed programming, system engineering. How to build systems at scale? How to process tons of data in parallel.
If you don't seek for the new challenging things to do that could improve you, then you will find boredom and burn out in any field.
Along the way, you might find {activities, collaborators, products, ideas} that get you really excited. And since it's not "pure software" there will almost certainly be lots of opportunities to have a major impact! Software is eating the world, and almost every "non-pure software" activity is hurting for good programmer help.
That's great! Many of us have done the other way: approaching programming via robots. If you are tired on programming, do something that moves AFK: create a robot. You can start from small. There are hundreds of people sharing their insights so you can learn fast and do your own. Try here: letsmakerobots.com
Francisco
The wonderful thing about our line of work, especially these days, is that it's so easy to find projects, learn about them and participate. It just takes time and perseverance :).
After some time, these challenging stuff have the same problem, being mundane. Specially constraint of work environment and people you have to deal with. Plus some of the "coolest stuff" just blows up with overfitting and seems to be a mere hype to me.
There's nothing unexciting or less complicated or challenging about producing good CRUD [sic] applications.
I don't understand the industry cynicism towards producing good quality "bread and butter" software for any vertical market.
It takes years of experience to learn good (relational) data modeling.
It takes years of dedicated attention to assemble tried, tested and efficient user interface designs that your user community loves to use on a daily basis. User interface design (and yes, we are talking about your "boring" invoice capture screens here) may seem easy at first glance to be dismissed as unexciting, but almost every real world example is a challenge that requires creative thinking. Many are implemented badly.
It takes hard knocks experience to add gems of strategies to your repertoire of "boring" reporting solutions. Producing industrial volumes "TPS reports" may sound boring, but architecting reliable and efficient reporting solutions is hardly easy.
Another challenge of the "1 inch deep and 1 mile wide" mental specter associated with "CRUD" apps is managing the challenge of excatly that - the 1 mile wide sprawl. Each CRUD app may be simple and boring on its own, but how do you manage several of them on one site such that each one not only operates efficiently with its own specialisation but also as an integrated whole with others? These are not simple or by any means boring.
I love CRUD apps. I love seeing different CRUD apps in specialised domains and how similar concepts of the CRUD world manage to solve specialised needs of a particular niche.
Fascinating.
:-)
A billion times this! In retrospect, it's kind of funny that at my previous engagement, I was doing things which were kind of unusual to me and yet I was feeling bored and depressed. Now I'm back squarely in the CRUD world and learning so much. It's one thing to write applications that perform these tasks, it's a whole other ballgame to make those applications performant, scalable, and a delight to interact with.
So while getting "the damn thing up" may be the burning expectation in everyone who isn't making the wall, the wall maker knows the consequences of poor work and it is his responsibility to educate folks who depend on said wall.
But how does this tie in with the manager who says 'it's just an invoice screen, why are you taking so long' probably based on the mentality that $ revenue is proportional to # features.
Obviously the problem here is the manager, not the fact that you want to write and build quality work. Especially if they run on flawed assumptions such as "the mentality that $ revenue is proportional to # features".
You can't build quality under shitty management like that.
There's markets and jobs for both types: some desire cheap & shitty, others are willing to pay premium for solid, beautiful & well-designed.
Also, I've noticed many end users are not confident to comment on what they believe is an inefficient interface. So, problems with user interfaces are not spoken openly unless the interface completely blocks the user from completing his/her task. It takes some amount of permission-giving from the developer's side to get valuable feedback that would otherwise not be spoken about.
The exception to this is in situations where the market is being disrupted. For example when the iPhone 3g came out it just made any other hard-to-use smart phone look like shit. And thus the competition was forced to catch up.
However in enterprisey applications we are a long way off that. The awesome invoice screen may add value to the customer, but not much if none of that will be captured by the provider of the software.
Unless a certain class of invoice screen is on the list of must-have things the buyers must have, because it is a particular pain point. In which case you will be told by the pointy haired boss to make it awesome, it won't be your choice as the developer.
Damn I sound cynical!
Your point about users is spot on, and we have all been such users. I mean you have used MS Word ... right? And often at work we have to use such applications. We just push on through. Users that are not programmers may not even know to question it, they assume that is the way it is unless they have used a competing product.
Learn what you want to, work on what you want to. Tackle the difficult problems. We still have very difficult problems in this industry. I suspect you are not challenging yourself enough and that's why you are getting bored.
A lot of programmers as generally assholes for whatever reason
I've just been back at a desk for 4 years, but am again burnt out so now I quit again, and I'm driving around Africa for 2 years starting in a couple of months.
Get out and live, I say!
[1] theroadchoseme.com
I honestly felt like I was spending money to live, rather than to die slowly by going to work.
I spent roughly $1200 a month on the trip [1], and prior to leaving, simply to go to work every day in Calgary I was spending that much monthly. So it really was a great feeling to be spending no more money, but to be really alive every day.
[1] Full breakdown - http://theroadchoseme.com/the-price-of-adventure
Life is bigger than your job or your immediate interests. Take a break. Travel. Challenge yourself. Break out of the circle that you don't like and find something else, even if it's just for a short while. That's what I usually do. At the very least you'll find something else to rant about, and maybe eventually realize that things could be much worse.
Champion the cause of code that's legible - and that doesn't mean covering it in syntactic sugar. Legible code makes it damn obvious what it does and how it does it. Sometime find the "power take off" for a tractor ... that's what you're trying to do.
You can also champion the cause of not fixing that which is broken. There is also fun to be had demonstrating the technical debt is real debt and it does need to be paid back.
Much fun introducing peer review, too.
Get yourself, your team or whatever to sit next to your damn customer. Have them look at what you're doing at least once a day so they can say "oh, no, not like that" before it turns into a $100k fuckup.
So, yeah, you've just got through to the next level. It's not the software that's the challenge, it's the people.
Well said. The customer is the final and only arbiter on our disagreements about tech tool choice, style and architecture. In front of the customer, all our internal arguments look and sound like those of immature, spoilt and unfocused professionals.
Add to that that many IT professionals dislike getting advice/input from non-techs and you see why we have so many broken systems out there.