Ask HN: How do I get out of my unhappy coding job?
I need your advice; I'm working in an internal IT department at a non-software company which is, as you can guess, far from ideal. I live + work in the UK.
I am starting to feel very depressed about my situation and am desperate to find a way out. I've applied to a job at a decent software company which unfortunately I didn't get (though it certainly gave me an idea of what to improve if I were to apply again, so was positive overall.)
I'm working on developing a programming language; it's extremely early days but I have certain convictions about what is important in a language and in the hacker tradition want to make something that fits those convictions.
I, much to my regret, don't have a degree in Computer Science (though I do have an engineering degree) - though I grew up loving programming I, for somewhat complicated reasons, ended up choosing the wrong subject.
As far as I can see the following steps are the way out. I'd be very grateful for any advice/criticism you care to offer about these steps, also with any suggestions you can offer me in finding a happier coding existence:-
+ Work hard on my language project; if I can actually do something with this I will have something very nice to put on my CV. Programming languages, compilers, parsing, etc. are really my passion; they are the one thing I'd like to get into more than anything else.
+ Develop knowledge of algorithms, big O, etc. - the kind of stuff I would have picked up on a computer science course, as well as being the kind of stuff asked at interviews.
+ Get involved with open source - I am especially interested in LLVM as it ties in nicely with my language project.
+ Practice, practice, practice - Practice coding, consciously trying to improve as much as I can.
And the most recent, most radical thought:-
+ Ditch the idea of going to work on someone else's stuff and get going on a Micro ISV. Keep the day job and work all the hours outside of work to put a product together. I'd like to somehow link this to my passion for programming languages, etc. - perhaps that old programmer startup cliche of a development tool of some kind?
Thanks in advance for any advice you can give me, it's really appreciated. Feel free to criticise + tear my ideas apart, by the way! Always happy for (constructive) criticism.
(I am using a different HN login from usual for obvious reasons.)
63 comments
[ 1.5 ms ] story [ 118 ms ] threadThe abstract knowledge you pick up (such as algorithms, you already refer to that) will help though, since it will allow you to build relatively complex stuff where 'cut-and-paste' types will have a disadvantage competing against you.
Open source is great way to advertise your skills, but only if you want to be re-hired somewhere, is that your intention or do you plan to become independent ?
The last item on your list sounds like the best bet in the shorter term. But maybe first you should exchange your job that you hate for a nicer one to get you out of the frame of mind you're in and in to a more healthy one.
Then from a position of strength you can make your decisions, usually that works better (at least, it does for me).
Good luck!
It's true that the language project itself is unlikely to be monetisable (especially since the chances of it ever being used let alone popular are close to 0), but I wondered whether I could develop something along a similar vein, say a code analysis tool or some such, which could find application of language-related techniques and keep me in an area I find especially interesting.
I guess I just want to be happy as a coder; whether that requires me to be independent or can be achieved working for someone else is something I'm not yet sure about. I agree I need to leave the negative situation, I guess part of what I'm asking is how best to improve myself such that I can get a job somewhere decent.
Also: being happy at work is usually more related to your work environment and your co-workers than it is to the actual work you do (you may be different though). So try to meet the people you'd be working with, if that's a possibility, when you are interviewing.
There's nothing stopping you from still working on your own projects once you are at your new job, and if your day job is enjoyable, you will have more energy and motivation to put into your side projects too as a result.
Also it sounds like you are trying to hop from internal IT to software/language development (is that correct?), if you have no previous official "programming experience" at a job, the open source projects might be your best bet. That way you can have programming on your resume that they can relate to. Personal projects are good but if the project is bigger than yourself it will carry more weight - and the world needs more open source programmers.
But maybe don't be too romantic about a job in software company...you could very well find that it also isn't a ideal job...you will perhaps fight with bureaucracy, being forced to do dull work, etc. etc.
So before quiting your job, try to think really deep why exactly you don't like your current job. Maybe it is something more fundamental, and ordinary software company might also not fix it. Anyway, good luck, finding a software programmer job is certainly achievable.
And I certainly don't accept the contention that there aren't jobs programmers can be really happy in (as some contend, not saying you are necessarily), I think that's lazy thinking...
In any case I certainly don't think it's something fundamental as it's not the work itself that bothers me so much, but rather the pain of working in a negative situation.
I agree with you that I think the academic approach wouldn't be as efficient as taking a more practical approach to what I need to know.
There's all the other stuff that you need to know, like the basic data structures, but these are (IME) hard to avoid if you've done much programming at all. I'm not sure you need to know hardly anything about hardware architecture unless you're aiming to code at a very low level, device drivers etc. Obviously, familiarity with machine code, cache characteristics, optimization at the assembly level, etc. are useful, but these things are best learned by sitting at a computer with a stack the Intel processor PDFs, an assembly timing loop and a simple algorithm you're trying to reduce the clock count on.
I'll add some of my own experience, as I got into compilers and currently work as a compiler developer. I was interested in compilers at a young age, I recall thinking hard in school about how one should go about evaluating arithmetic expressions correctly accounting for precedence. I wrote an open-source expression evaluator for the Delphi community, as part of the JEDI library. I built a regular expression compiler in Java, compiling to Java bytecode, as my final year project in college. Then, in my first job (in a software company, working on a green-field project, very lucky), I was able to point out the benefit of writing a custom compiler for a DSL to fill in a configurability-shaped hole in the architecture. After having built up this experience, I was in good shape when Borland (as it was at the time) came calling looking for an engineer for the Delphi compiler.
I don't think there's a deterministic kind of guarantee that can be drawn from this experience. But learning the whole stack of technology that you need to implement a language certainly gives you plenty of practice in a lot of the fundamentals of CS, right from data structures and parsing at the top (I personally would avoid parser generators as a didactic exercise) to machine architecture and cache hierarchies at the bottom, to details you'd rather not have to know about, like the idiosyncratic addressing modes of the x86 processor. And putting it into practice, even if it's in an open-source side-project, gives you a better angle on related opportunities.
Any chance you could give a list of that surprisingly smalll amount of practically useful stuff?
For data structures, it's more important to have a taxonomy, and a rough general knowledge of the kinds of data structures that are available, so that you know what's required and when, and have enough confidence to implement any given data structure as needed.
It's also nice to have the time and opportunity to look at different levels of various stacks, such as the network stack (the analog wire signals, how binary signals can be encoded on them, ethernet, IP, TCP and UDP etc.); and things like OS caching, process scheduling, etc. But where you're looking to put those kinds of things into practice, it's not difficult to take a day or two out of your time and read up on them - it doesn't take long to scratch deeper than an undergraduate course covers (IMO).
Depending on what area you target, other things can also be useful. Re compilers and languages, I'd be wary of taking the academic stance too seriously. Classic texts like the Dragon book overemphasize the analysis of finite state machines and pushdown automata, DFAs and NFAs, and the details of grammars and parsing, LL vs LALR, and generally all the data you need if you want to rewrite lex or yacc. But really, parsing is a very small part of writing a compiler and is actually quite easy, unless you're trying to parse C++ or something. And a more modern trend is to overemphasize type systems and their analogies to proof systems; I'd also steer fairly clear of these guys, as they are (IMO) primarily interested in churning out PhDs by creating new mathematical abstractions that have very little practical application.
When downplaying the practical value of much of a CS degree, however, I'm assuming that you already have pretty decent coding chops. For example, I would expect that you wouldn't be intimidated by programming competition problems, for example see some of the problems in the PDFs from this page:
http://acmicpc-live-archive.uva.es/nuevoportal/
The harder problems rely on a relatively small amount of base knowledge, but you have to be pretty comfortable with recursion, generating combinations and permutations, dynamic programming, and often a little computational geometry. The easy ones are more like warmup in how to read and follow instructions.
Another consideration is whether you ever want to work in the US. Getting a H-1B isn't easy without a degree.
It's worth asking for a meeting or lunch the supervisor, and explaining the worries about where you can go with this firm and why that lack of hardcore software prospects is worrying you a bit. It sounds very much as if you've ended up working as a mechanic when what you really wanted to do was design engines or gearboxes. If your employers aren't jerks and you've been doing a good job up to now, they may well offer some career-building assistance or advice that you might not have thought of yourself. Tread carefully, to ensure you aren't the obvious choice if the economy requires them to lay off a few people in every department ('Oh, let's get rid of yacoder, he's not that happy here anyway so he won't make a fuss'), but keep an open mind. For all you know the lack of core software openings at your company is due to management's inability to build a better programming team, and they might see your ambition to delve deeper as a valuable future asset.
Yeah. I know. I am being an idiot. I guess it's just easy to be too afraid of being rejected, which I definitely am. I need to get over myself I think.
Software companies aren't the same this side of the pond, the culture seems rather different. Maybe I've just had bad experiences, but London is full of soul crushing financial services/admin software type places. I'm sure the US is too, but there also seems to be a healthy community of fresh companies.
Check out your very own jobs.stackoverflow.com - this is one of the places I would expect a modern company to advertise, but there are nine jobs listed for the whole of the UK, compared to over 50 for NY alone. If you want a "normal" programming job you have to take your chances with the vast sea of recruiters on Monster.co.uk.
(or, of course, build personal connections and/or do your own thing)
Web development: check out NMA Top 50 for Agencies.
Startups: Check out the WiredUK Silicon Roundabout article _and_ the comments!
Misc: Check out things like Times TechTrack.
Interested in a particular technology? Check out the official language job board and search for London (e.g jobs.perl.org).
There are definitely interesting companies you just have to spend some time finding them because they won't come to you.
I mainly program in C#, though I code in scheme (what a lovely language), F# which is a .net ocaml near-enough, and I am learning ometa which, though not a language, allows you to experiment with languages quite nicely in other languages.
As far as stuff I've done, I've mainly played around with stuff; outside of work I've been on-and-off working on the language idea for a while, at work I've done a bunch of internal stuff much of which sucks :'-(. I try to do as good a job as I can, though it's difficult to stay motivated when in such a negative environment. Am rather depressed about it all at the moment to be honest!
I feel like I have a lot more to improve on. a lot more. In fact I have a terrible fear that if I was to apply for jobs now my suckiness would screw my chances at some of the cooler places blowing my chance to apply at them later. Argh.
Given your relationship to programming as you describe it, I am quite sure that you can break out of this job. So please don't feel depressed! Just steel yourself to work damn hard on other stuff, no matter how tired or bummed you are from work, and don't stop until you get somewhere you want to be.
Working on open-source projects is a great way to develop credibility. A huge advantage of this approach is that you build credibility with the right crowd - the ones who find the same things cool and interesting that you do. If I were you I'd work backwards from the kinds of companies I'd like to hire me and try to make substantial contributions to open-source software that such companies use. Either that or I'd make cool new library on top of one.
Working on a personal language is less likely, I think, to be externally impressive. Most people's reaction to that will be "yawn", unless you're able to demonstrate something fundamentally new about it, and even then there is a high barrier to convincing anybody. You'd be better off finding open-source implementations of some known language to work on. (I'm talking, strictly, about using it as a bridge to paid work. Obviously you feel passionately enough to make it worth doing in its own right, but that's a separate question.)
I think a consensus is emerging that putting the language project aside for a while to focus on OSS would be a good idea.
I'll be running a pretty weird experiment in a few weeks, I'm not yet ready to explain it in public because I'm still tweaking the idea and I don't want to limit myself by nailing it down, if you are interested drop me an email (email in my profile).
If you like compilers I'd just do that. Life's too short. You might have to move somewhere far away if you want to be a professional compiler artist, though.
I may have a job/project for you - and we can definitely work out something to accommodate your side projects/business. If it's any use to you drop me a line and we'll talk (always happy to help fellow HNers)
We are not a software company; we actually do security/forensics (which is super interesting) but we have a little software project that should be pretty lucrative.
If you'd prefer not to post such info you can drop me an email, it's in my profile)
Otherwise; pretty much I agree with what the others are saying. Put the programming language to one side for the moment and concentrate on FOSS projects if you can.
Roughly: based in London, mostly C# skillset (currently).
After spending a few years of my life contracting exclusively at non-software companies, I can definitely say that the culture can vary greatly from shop to shop so far as how well it caters to people who are there to hone their craft vs those who just show up for the paycheck.
Also, don't forget - jobs at software companies can suck too! :-)
I realize that you want a new job now. Well, that's going to take patience. Don't spam your resume! Trust me, I use to interview and this was very common... you could detect these types.
Start today. Just build something that can be demoed, something preferably practical.
Good luck man!
Aside from that, don't get discouraged. Good tech companies get to where they are because they have high standards. Getting a job with them takes practice. Don't get discouraged. Ask the people who turn you down for feedback. Honest feedback is surprisingly rare, but the ones who give it to you are the ones you want to listen to. Other than that just give it time! You'll figure it out eventually.
working in an internal IT department at a non-software company can be a HUGE advantage. Why? Because your "customers" are right there.
Please do not underestimate this as part of your career planning. Sure, we all want to create cool technology, but AFAIC, the single biggest shortcoming for developers that I've ever seen is what I'll call "detachment from users".
You don't have that problem. You have end users right there at your fingertips. Take advantage of it! Learn from them. Practice your systems analysis skills. Find out how to make that missing link, the connection between technology and people, work properly.
I have written significant pieces of technology for software houses, but was actually more frustrated. Why? It took months, sometimes even years before anyone actually used it. And then, they were communicating with someone other than me. The technology was cool, but by not closing that loop with my customers, I always felt that my work (and learning) was incomplete.
By all means, continue your dreams and career plans. But don't waste your current situation by being depressed about it. I can't tell you all the times in my career when I stood head and shoulders above my peers because I had suffered in the trenches like you are now. Except you don't have to suffer. Because now you know to look for opportunities to get a lot better in other ways. They're all around you if you just look.
For instance, in a typical java consulting job, you're face to face with users all the time - but you're building a boring webapp. On the other extreme you could be building awesome technical tools but your real users are several time-to-market phases away.
Having a choice (in this case a job) is sometimes bad. If your back is against the wall, you'll be more driven to go after what you want.
I was working for a bank in the early part of my career. I was doing mainframe applications and I have always wanted to do web apps. So I quit my job and learned a web programming language (.Net). I learned it pretty fast and I built a small site to showcase my work. In two months since quitting, I found a consulting job that does web apps.
A few years ago, I was working for a big company in San Diego. I wanted to be in a startup environment. I tried my best to create one in my company but I failed.
So I quit my job and moved to the Bay Area. When I moved here, I realized that most startups use open source and I cannot find startups that use .Net. Actually I found a startup that uses .Net but they rescinded their offer when their investor told them to freeze hiring.
I was unemployed for months in the Bay Area so I said to myself I need to learn an open-source language. I ended up learning Python/Django.
I accepted a short-term web development using .Net and when that ended I continued learning Python/Django. Via networking, I ended up working for a YC startup and eventually moved to another startup in SF.
I'm really happy (but not satisfied) with where I am right now. If I didn't quit my job, I don't think I would have had the motivation to go after what I really wanted.
But for some regions it is probably best to keep your old shoes on until you've bought some new ones.
When I quit my job in 2008, it's when the recession hit. Bay Area was no exception. I cannot find any job and my skill (.Net) was not in demand.
Of course someone could move to a place where there is more employment, but that's a double risk, it means you also leave behind the social net that just might be able to catch you if things don't work out immediately.
Even during a recession it would probably still be easier for a qualified coder to find some work there than in most other places, the fact that he found a gig within a relatively short time seems to prove that.
When you're young, unattached and without too many responsibilities this is a lot easier (and possibly even hard to imagine that one day it may not be that easy).
Given the question, I assume that the thing he most cares about is getting a more enjoyable job,
I was unemployed a total of 6 months in the Bay Area last year.
If I chose to stick with .Net, I could. I got a job offer from a company I used to work for in San Diego and also a company in DC.
Now realize that you are telling someone to quit their job without a backup plan and without a lot of insight in to their personal situation.
I think that is somewhat irresponsible, just because it worked for you is not exactly a guarantee, and I highly doubt you'll be able to catch him if he follows your advice and it turns out that he can't find a replacement, for whatever reason.
Then there are the details such as unemployment not kicking in if you voluntarily leave your job and a whole pile of other, circumstantial factors.
Yes, I factored in everything. I didn't get unemployment because I quit. I also didn't know anybody in the Bay Area. I knew those before I made a decision.
I hated my job. I became a very bitter person. I didn't like what I became. I had to act big to change things. I can tell you that despite the financial difficulties, I was very happy when I didn't have a job. I was developing a number of side projects.
I never lost hope that I'll get what I want. I knew from previous experiences that if I work hard, good things will come.
I'm not saying that he should just quit his job. If he does, he should make a commitment to do things that would make him desirable for the type of company he wants to work in.
There are no guarantees with anything. He can stay at his current company but it could also go under or he could get laid off. Wouldn't it be nice to take a career path that is guaranteed to make you financially stable for the rest of your life?
Just critical about telling someone to 'Quit.'.
It seems irresponsible to me, apparently we disagree on that but that is my take on it. Of course he's under no obligation to follow through on any of the stuff written here.
I quit just like you did, and it worked out amazingly well. But I'd still hesitate to tell someone else to just 'quit' without knowing a lot more about their situation than what he put in that little blurb at the top.
> Wouldn't it be nice to take a career path that is guaranteed to make you financially stable for the rest of your life?
Yes, but as you said, there are no guarantees, so that one is also not guaranteed.
> You're saying what I did is somewhat irresponsible?
No, I'm saying that to tell other people to follow you because it worked for you is irresponsible, that's a huge difference. Think of it as anecdotal evidence based on a sample of '1'. (and if we add our samples, that makes it 2, and probably we can find a few more).
If you had said 'work towards quitting' or something to that effect it would be different. But an unqualified 'quit' seems to me to be too simple a solution.
> What is irresponsible is not living the life you want.
On that we agree. Which is the reason why I quit too.
But the rest of the situation has to be taken in to account as well.
I've been really lucky to get where I am today, I'm a high-school drop-out without any papers that would get me employment, so the job that I had (systems programmer at a bank at a disgustingly high salary) was really a one in a million opportunity for someone with my education level. I worked really hard to get it.
And then one day I decided to give it up and start my own business, after talking to my boss of the day (A guy called Eddy, I owe him a lot).
He showed me a very concrete way of making a go of it independently, and I took the chance and ran with it.
At the time I was living in an industrial area for pennies, had no girlfriend, no mortgage, basically 0 obligations. Without knowing a lot more about the OP I'd really hesitate to tell him to follow in my tracks because 'it worked for me'.
ok ?
I quit my tech support job with no plan and 4 months of savings. Within the year, I had started my own business, and was making more money than I ever did at my old job.
Take the risk. Trust in your own abilities, and go for it. You'll never get the life you want by living the one you don't.
Long answer: Its much easier to get an interview for a job if you can demonstrate that you've done it well before. It might still not be easy (because they may have degree requirements that you dont have ) but it will be easier than if you had nothing.
So go do what you really really want to do. Create a side project and do it. DO IT WELL. Ie, get feedback, make it as professional as possible. The project should have the same criteria for sucess as if it had been built by someone who's job you are seeking.
Then show it to the people who hire for that kind of position.
Pitfalls: 1. The kind of job that your passionate about may not pay very well in the future. 2. You might realise its not your passion and because of that you'd have done only an half assed job. This can be solved by trying something else. You'll know soon enough if this makes you happy or not.
Life is too short to have jobs that you dont like. I've been in that situation and have recently remedied it. I should have done this sooner.