Ask HN: How do you keep your programming motivation up?
When I graduated Uni few years back i was very interested and excited about programming and would constantly work on side projects. Now after having worked for a few companies, it almost completely killed my motivation and interest in programming. Working on boring, crappy projects for a living is just killing me, and you never know until you get on the job. How do you deal with this?
134 comments
[ 5.2 ms ] story [ 149 ms ] threadYou couldn't live in a better time for being able to pick your work as a Software Engineer. Even location is irrelevant more and more with remote work. If you want to work on something that excites you, find that and do it!
Outside of that, build things that you want to exist using interesting technologies or even just a refined, latest and greatest version of the stack you currently know and use.
Whether you turn these things into actual products or just things you'll use yourself, it's irrelevant, as long as you enjoy building them.
I think that's a bit oversimplified, a lot of really cool projects are simply inaccessible for one reason or another. While there's cool stuff out there, the vast majority available to your average person seems to be the boring stuff
If you're worried about "keeping up," then I would suggest you 1) ignore the rat-race that is framework-of-the-day and 2) focus on learning fundamentals of your domain. Sure, you'll miss out on some hip startup jobs but typical employers don't care about your lack of 5 years experience in a 3 years old framework.
Especially if you are an older developer (I’m 45) and you will just be seen as just another old out of touch developer.
That being said, the further down the stack you go, the more stability there is in technology.
> That being said, the further down the stack you go, the more stability there is in technology.
IME, it's about where you go and not what level of the stack.
Some places are just fine with a basic form-based website with a little JS for convenience that ultimately just talks to an IBM mainframe. Others want full-blown SPA in the latest, greatest Hipster language deployed across a dozen datacenters with Kubernetes and whatever other trimmings.
If the market is paying higher than market salaries for the buzzword compliant “digital transformation consultant”, that’s what I will learn.
As we speak, banks are migrating from systems written in cobol/fortran to systems written in java. I just got quite a few recruiters contacting me for open java jobs. Sure, frontend code was in angular and they offered training for it, but for some even angular might be considered to be "ancient" because they're living in a react bubble (not saying that you are).
When the day comes that I do decide to leave my job and I leave by choice, I’m staying buzzword compliant enough to be an overpriced “cloud consultant”, “digital transportation consultant” or whatever the hype of the day is.
But, I wouldn’t take a job doing Angular knowing that React is more popular and I would rather add React to my resume than Angular.
A lot of jobs exist where they just want to know you can code and assume you’ll learn what you need as you go along. Experience in their languages seems most important.
By the time I got back out on the market ten years later, I was already 35 and I was able to talk about projects, architecture, trade offs involved in shipping, etc and I was applying for mid level roles - partially because I had become an expert beginner “engineer” even though I was good “developer” and they were getting me cheaply.
Eight years and three jobs later, my engineering skills had caught up with my age and I was applying for jobs where they needed a “change agent” or “someone who could speak experience into the team”. Now, I rarely get asked any programming questions. It’s mostly architectural and soft skill questions.
But, in the grand scheme of things. There are only two reasons anyone is interviewing for a job. Either they are being forced to find another job because of a layoff or the current environment has become inhospitable or they are choosing to find another job for more money/new challenges.
In the former case, where I need to find a job now, I need my resume to be buzzword compliant so I can find a job/contract fast. I also need to be ready to for more technical interviews especially for contracting.
In the latter case, I can be more picky and find jobs where they are looking for “principal developers”/team lead type of positions and the interviews tend to be more architectural/theoretical.
On a side note, I’m not sure what I want to do next. If I choose the cloud consulting/“digital transformation consultant”/“enterprise solution architect/consultant” route. Knowing a little about everything will come in handy - including something like Graph QL.
I like the insight here about the two types of job and looking back at my jobs I think this is spot on.
There is another reason to change jobs which is for lifestyle reasons. Moving country, changing to a work from home/digital nomad would come under that. In the lifestyle case you are probably trading other factors for the lifestyle factor, so that would also more likely lead to the buzzword compliant route.
Don’t get me wrong, those things are problems that need to be addressed, but in my limited experience it doesn’t seem to be as common as it might appear.
Whether I am actively looking for a job or not, optionality is important.
I am not advocating not learning things for 20 years. I think it is ok to skip 1-2 years, then you check state and learn framework, relax, learn something fun, relax, learn framework, repeat.always one not all.
Luckily, right now, everything is in the right place for my current job.
- they are paying me above the local median (we are talking Atlanta here not Silicon Valley)
- the technology stack we are using is not bleeding edge but in the right place in the hype cycle.
- I think they will continue to do so for the next two years.
But you’re right. I’m not going to spend my time learning the latest frameworks if I am not going to use it at my current job and I don’t see myself in the market within six months. But if my company ever got too far behind the market, I would have to start preparing.
Networking like that is how I found my job without a degree in computer science.
I only started really job hopping and taking my career seriously 10 years ago at 35. I’ve always had at least a half a dozen interviews and a minuscule number of rejections. My network got me to the interview without going through an ATS. My Resume Driven Development and knowing the game got me offers.
Ageism outside of the cool hip startup world is exaggerated. Most of the older developers confuse ageism with not keeping their skillset in sync with the market.
The browser and front end code - just sticking with Microsoft, the popular method has been classic ASP, ASP.Net Web Forms and ASP.Net MVC and ASP.Net Web API and they both have changed significantly after Core. Not to mention that the industry has moved away from server side rendering to client side rendering. The popular client side framework seems to change every year.
The next level down is a server side language, let’s assume that we are doing client side rendering. When I really got serious about my career in 2008, after staying at a job for a decade, job listings were looking for C# and Java. Those are still two of the most popular enterprise languages. While of course both languages have evolved in 10 years, it’s mostly syntactic sugar. If you were in a coma for 10 years, you could wake up and easily understand code in either.
Databases - back in 2001, I was working as a backend developer writing batch jobs to load data into MySQL and Sql server databases and do reports. Now, I’m still working with MySQL doing some ETL as part of my job. What I learned back then is still applicable. The difference between those two databases now and the front end framework of the day is like night and day.
Web servers. I don’t deal with web servers that much anymore (see below), but when I do, it’s still IIS, dealing with IIS hasn’t changed much in 15+ years.
Networking/Infrastructure. I’ve had to deal a little with the networking in the early 2000s, but I didn’t get back into the infrastructure side until two years ago with AWS. Everything made perfect sense. The basics of TCP/IP, servers, load balancers, etc hasn’t changed in decades. While AWS is always adding things, nothing you learn is ever obsolete unlike the framework of the day.
Maybe my English is not that good, how do you mean? Asking as a 43yo developer.
As far as staying relevant, I’ve developed a network of trusted local external recruiters and I speak with them to see what companies want.
When I’ve been looking for a job, I’ve found jobs where I have the listed “must have” skills and I want the “nice to have” skills. Rinse and repeat.
I don’t do non work related side projects. I will work extra hours and volunteer for a low risk project using new to me technology just to learn.
I want to say that I would change jobs if I saw the technology that my current company is using is out of sync with the job market all other things being equal. But, every job change I’ve done in the past decade has come with both more pay and more resume building opportunities.
Now after job hopping and following my own advice for a decade, I’ve reached close to the local market (Atlanta) maximum unless I start working for a consulting company (not contracting/staff augmentation).
a) Focus on technologies that have staying power. I don't think Java EE jobs will really ever disappear
b) instead of flavour of the month, focus on the flavour of the decade? i.e. Go and Kubernetes seems to be the trend :)
c) instead of resume-driven development, focus on having a network. Most of my jobs have merged because a former colleague, classmate or friend realized I knew some programming once, and they might want me to work for them :)
More in depth, I think you can make a trade-off between the tried and tested and the new-fangled thing, by introducing the new in your current job. Technologies that are not cutting edge, but slightly past the first peak on the hype-curve. I.e. if you do backend, you would probably try Go language (instead of Rust/Elixir/...), on frontend you could introduce Type-script (instead of other compile-to-js languages), you might try Kubernetes ... in general technoligies with following that are still new, but with more than five years in production at some places it puts them outside of the 'flavour of the month'
B) There are still a relatively few jobs in Go and they don’t seem to be paying more than your standard enterprise language. I’m not wasting my time learning a language/technology with both a smaller market and no pay premium.
But K8s while I think is overhyped and something being chased because of the ooh shiny effect, it is the type of technology I would jump on, insist on a pay premium and ride the hype curve.
C) you still need to do RDD. Who you know will only get you so far. Who you know gives you the inside scoop on opportunities but you get jobs based on what you know. No one is going to stick their neck out for someone who is objectively unqualified.
I can keep up with that from talking to former managers, former coworkers, my network of local recruiters, recruiters job listings, LinkedIn posts, Indeed job listings, etc.
For example. Let’s say from all over those sources I see the following trends.
Senior consultant positions (in my case AWS). There are relatively few jobs in my local market compared to everything else that pay enough to make me jump ship just for the money. But when they do become open. I’m building my resume and skillset to be qualified for these types of jobs. If I leave my company on my own terms, I can wait until the perfect position opens up. If I need to find a job now I can’t afford to wait and it’s too risky for me to over specialize in an area where local jobs aren’t plentiful.
On that same note, the only reason I am specializing in AWS instead of Azure is because that’s the job I ended up in. Even though the market for AWS is much larger than Azure, the Azure market is more than large enough so it doesn’t matter. GCP on the other hand...
If I take that same mentality to Java, C#, and Go, the same thing applies. Java is more popular in the enterprise, but C# is popular enough that you can quickly find a job, it’s hard to ask for above average compensation just for a developer job since there are plenty of people who can do it “well enough” to develop your bog standard SAAS CRUD app or bespoke internal app. But they pay well enough. The cost of living is relatively low in Atlanta.
On the other hand, I don’t see that many jobs for Go developers locally and when they do appear, the salary is the same as C# and Java. Why specialize in a language where the demand is lower and the compensation is the same - unlike AWS Consulting.
Learning Go would mean I am neither optimizing for salary or for optionality to find a job quickly.
Of course, it’s always good to have Javascript in your back pocket because of the web and it’s used for server side code, desktop apps, and cross platform mobile apps.
As far as my next career move, I am not sure. Extra money would always be nice, but cloud consulting/enterprise consulting doesn’t excite me. I have a decent work life balance and I enjoy my current stability.
On the other hand, I am getting bored with developing, a change of pace would be nice and increasing my savings and investments wouldn’t hurt.
In reality, you probably mix bit-of-collum-a/bit-of-collum-b.
learn stan (still relevant technology despite being one of the oldest in its domain). learn image processing. learn database administration.
How many companies need someone who specializes in “image processing”? Soon, if it’s not already a commodity library that any company can leverage.
If you want to be a general hire, then you will suffer competing with generalists (this is not a bad thing just a different strategy). You can choose to become an expert on a general skill (or trendy framework). This is useful and highly marketable, but your competition pool is also larger and the technology is still likely to dissolve over time.
Also, for DBA , I think i'm internally thinking Data Engineering instead. I perhaps misspoke by title.
i second that. It became a 9-5 work, and i am fine with that. If and when i get myself very curious about something, i just open a new bitbucket private repository and play with it until the novelty fades away.
At that point I had to start looking elsewhere for a sense of engagement. I ended up finding fulfillment in discovering where I could provide the most value to a company and then focusing on that. 9 times out of 10 it had nothing to do with technology.
These days, if I want to enjoy learning about technology I sit down and read some of Knuth's "The Art of Computer Programming".
What I found was that despite how good I thought I was, I'm way better now and enjoy programming even more than before my career. I don't program at home nearly as much, but when I do it's for something I really want to make and it's very satisfying to be able to just whip it up.
I spend all my struggling hours at work and can just use the knowledge at home now. Much, much better than spending all my free time struggling to figure things out and getting little done.
To sum it up: you don't need to constantly chase after the greatest & latest framework. But, you need to constantly review new inventions/technologies to help you improve the way you currently do things. I am grateful for still having the passion to improve things around me!
I know a lot of people (myself included) got into the field by turning a hobby into a career, but I don't think it's healthy to try to force yourself to spend 12 or 14 hours a day crunching away at the keyboard. Even if you truly do love programming.
Honestly, my advice is to find other hobbies and interests to do outside of work that are not programming related. Recharge during the week and use weekend time to work on side projects if you feel up to.
If you are feeling burnt out by the daily slog, I don't see how forcing yourself to "be motivated" to do more work will help.
- Customize your work environment. This is rarely mentioned, but it's a very effective way to keep you interested in programming. All the best SWEs I know customized their work environment heavily. I've basically never lost interest on programming, even on the most boring projects I've worked on, mainly because just "typing" on my vim/terminal is so fun!
- Learn other engineering branches. When I don't feel like coding, I design and print a lot of 3D printer stuffs. I build/program RC cars/quadcopters. Then somewhere in the process, I'll be like "hey I can program it to do this!" And I'm back to having fun with my computer.
- Don't burnout. I have the feeling you may have some early symptoms of burning out. Go play games and hangout with loved ones.
- Know what _really_ makes you unhappy. Is that the work truly soul crushing? Are you trying to get promoted, but felt like you can't even though you are trying hard? Work environment? Lack of sleep? You usually can't debug a problem without knowing what causes it. So take some time and reflect about it.
Hope things get better for you :). And keep it up!
Some point in time company owners may change, situation may change, but for what it is worth I am riding this wave until it dies and then will see. Not changing that job even for 2x salary.
The real question is why should you keep your programming motivation up if its not something you're enjoying? Find something you enjoy and do that! Programming is a means to an end. If you want to enjoy the means more, find a more inspiring end!
It's a bull market right now, you can try working in a very different kind of programming.
> you can try working in a very different kind of programming.
On that note, how do you manage to work in X when all your years of experience are in Y? I'd love to try different things, but I just don't know how to pivot
Since full time work rarely makes good use of focused mental resources, you might be lucky if you have a couple hours in the evening to work on personal projects. For weekends my experience was I needed Saturday to recover - it's hard to focus on a screen and sit in a chair. But by Sunday I can devote focus into personal projects. Still not very many hours to use. It helps to have no social life and family responsibilities, but I'd rather have those than more programming time.
Overall it's hard to have enough motivation and mental energy while working 8 hours a day, but you can optimize for health and get some more utility out of your free time.
I had luck with my current employer, ended up in a company that needs me and are greatful for what I do for them. It is a software shop, so I am not a cost for them but an asset. So one thing to note, try to find company where software is their main product. Earlier I was working in a company where software for them was: "those silly kids fooling around", boy that was bad.
Some people say they stopped doing development after work. There is so much stuff to learn that I cannot just let it go. I was mostly Windows person, I learned loads of Linux stuff. I don't do the same stuff I do at work after work. I don't have deadlines, my projects don't have to provide any value, I don't have to open source them. I don't have to learn after work to stay competitive. I am just fooling around just like I want and there is no sprint, no points, no product owners so it feels so much better than what I have to do at work.
I think all those words I used could be summed up by: take it easy, don't take it too serious, have luck.
I deal with it by choosing not to work on crappy projects.
If a company or the project they want you to work on is crappy, don't choose them!
There aren't many non-crappy tech jobs in my neck of the woods, so I branched out on my own.
I do the odd consulting gig if you're a small company who has a few technical problems and want to pay to fix them ASAP.
And I work on my own projects in the meanwhile... websites... saas... working on an algorithmic trading bot right now.
It's working out OK.
Yoga helps fill the downtime between ideas... and is really helpful at generating new ones I find.
In fact, I just had an amazing idea on the way home from practice earlier today that I should really get working on!
Or hey, perhaps programming just isn't your thing and you've finally realized that. It's not for everybody.
It's a tough world out there, but you're doing the right thing by asking questions and trying to change yours.
Take care now.
Chin up!
Any suggestions on how to approach building algorithmic trading bots?
Really look at it... pore over it... think it... be it... once you start dreaming about price and volume data, you'll know you're on the right track...
...until you think you might notice an edge or something somewhere... then write unit tests to see if that hunch about the pattern your monkey brain thinks it saw is actually consistently profitable.
Then you do all of the real work that is implementing the actual trade execution engine. (Yes, I just yada yada'd over months of work)
That's how I went about it at least and it's working out great so far!
Good luck!
https://qoppac.blogspot.com/p/about-me.html
A google will turn up plenty of videos and interviews too.
I've thought about this before, and imagine I could encounter some pretty interesting problems as well as collect some pretty valuable experience, but I just doubt companies acknowledge or care about a lot of tech issues. Particularly if they shakes up established processes
You're bang on, they sure don't.
Which is why I am extremely selective in who I will work with.
My consulting gigs are generally just favors for friends or friends of friends who are stressed out from having hired shitty programmer after shitty snakeoil salesman for the past few years straight... and are finally ready to bite the bullet and pay a few grand for whatever they need done... once and for all.
I would say that situation describes almost 100% of the consulting gigs that I have ever done.
Most don't have this luxury, and have to eat what moldy bread they can get their hands on.
There isn't enough to go around in most places.
They're few and far between in my neck of the woods too!
tl;dr work for yourself... figure out how to make some money selling something or trading or consulting and do it.
These days to keep up my side projects I set attainable daily goals for the projects/languages I wanted to work more in using WakaTime to track my progress. I get daily emails that motivate me to keep reaching my goal of at least 2 hours coding per day.
https://wakatime.com/goals
I was running a startup, during first few years my programming contribution to our products were very high as I had inexperienced developers. But once they gained experience, my contribution to actual coding got diminished and was limited to architecture and major troubleshooting. That was compromise I had to make as a single founder and executive of the startup.
But in 2018, I had severe health problems and had to undergo life-threatening surgery which has permanently restricted my neck movements severely and had to close my startup.
While I was bed ridden during recovery, I wondered whether I could even get back to computer usage if not programming. Now a year since surgery, I have adapted to restrictions in the neck movement, changed computer display setups to aid it and started programming few months back although my primary profession now is coaching startups.
I recently released the project which I was building past few months[1], which was inline with what I do professionally and being able to build and launch the project after months of uncertainty over whether I will be able to use the computer again has had a positive effect on my morale.
[1]: needgap - 'Submit problems for startups to solve' - https://needgap.com
My motivation for programming is strictly that I get an above average amount deposited into my account twice a month to do a relatively easy job in an air conditioned office or at home.
This is difficult considering what most SE's work entails (i.e. advertising, addictive feedback loop design etc.).
Choose your work with strong philosophical underpinning. Else you'll end up in existential crisis.
1. Find a good space of the day when your brain is optimally productive and lock into a tasklist that you've preplanned. For example, I will often create a tasklist in the evening for what I want to achieve the next day, then hit it hard in the morning as that's when my enthusiasm and focus is best.
2. For any given project find an interesting approach to the solutions you need to provide. I won't take a run-of-the-mill approach to solving things (unless it's a quick win or mostly appropriate to do so) but will use solutions as a platform to approach things in a new way, with a new technology or just by improving what already exists.
3. Exercise: the reason I find the morning my most productive time of day is because I cycle to work every day, I think. If I have too much sedantary time in front of the computer it does my head in, but even a quick walk around the building will let my mind work on itself to meet the other two points I mention. If you're frustrated at your desk, you're already losing.
Hope that helps! :-)
Chances are that the technology you use might also be useful for side projects. Also not working in a high pressure environment might enable you to work on interesting things and leave some space for creativity at home.
The times I felt the most burned out at work where actually also those where I took the job most seriously. That's very much the experience I have now from working over 10 years at various companies. Hope this helps ;)