[Context: I wrote this post immediately before getting my only job as a software developer at a place that I thought was actually good to work. I worked there for a few years until somebody else acquired them.]
A little while ago I complained about what it's like to work in software development. The gist of my complaint was that writing code is a ton of fun, and when I was in school and still had to take a bunch of worthless gen-ed and theory classes, I couldn't wait to graduate so that I could finally start writing code full time, and not have to bother with busywork and going to class.
In some ways, it's odd that I didn't like gen-ed classes. I thoroughly enjoy both reading and writing. I write something almost every day, much of it private and much of it intended for publication. It's rare nowadays for me to go a week without having at least one day were I write an essay that is the length of a typical paper I wrote for school. I read 1-2 works of non-fiction a month just for fun and a little bit less fiction, which isn't that much less than I'd be assigned in gen-ed courses at uChicago. The problem I had with my classes is that I didn't see a point to them. At least half of the books I read for school were books I never would have read. After one book by Plato, I was pretty sure I'd never read another. Dante's Inferno was already the most tedious book I had ever read the first time I read it and it was even worse the second time. -- Aristotle and the Iliad, however, are both fantastic... and I expect to read the rest of Aristotle at some point in my life. The same thing with the papers. Except for a few rare instances, the papers were not what I would have been writing if I wasn't assigned to write them. I have absolutely no objection to the general practice of reading and then writing about what I've read. I just had objections to what my instructors picked for me to read and what they picked for me to write about.
When I graduated and starting working, I had the same complaint about the work I was assigned to do as I did about the busywork I was assigned in school. I just didn't see the point. The code my bosses were telling me to write was not the code that I would be writing if I was examining the codebase and trying to figure out what code needed to be written. It was also not the code my bosses would be telling me to write if they were examining the codebase and trying to fix it, or even if they understood enough about programming to do the requisite examination.
Worse, I'd gotten the sense from talking to several of my friends and reading endlessly many rants on the internet that this was extremely normal. The life of a software developer is in many (possibly even most) companies quite dreadful. You spend your days degbugging awful legacy code that you're not allowed to actually fix because nobody trusts you to re-write it any better than the last guy, and scorns your assertions that you could in fact radically improve some particular part of the project by axing everything and starting over as a combination of Not Invented Here Syndrome and the sort of hubris that allegedly accompanies all software developers. Yada. Yada. Yada. So you spend your days duct-taping together heaps of garbage and listening to lectures by people who have no clue what they're talking about telling you how you should be able to duct-tape garbage together a helluva lot faster and turn it into something pristine. And it's awful, and I would rather do just about anything else.
It pays okay. But if you're working at one of the approximately infinitely many shops that have been maintaining a product so long that it's mostly held together with silly string and chewing gum, the company's probably not very profitable (if they're profitable at all), so the pay probably isn't great, and you may have to work lots of unpaid overtime just to the company from collapsing under the weight of all the drying saliva in the chewing gum. So once you take into account the hours and your prospects for advancing within your company, you are probably underpaid relative to your IQ. If you're in a career like consulting or sales, it doesn't matter if you find yourself at a bad company for a while because your job is pretty much networking anyways. If you're a software developer, your job is sitting in front of a computer. If you're at a not-great company, they are probably pretty aware that they are not the best company, and they might try to keep your networking opportunities as limited as possible.
You might have to fight your boss just to be allowed to speak directly to the clients whose problems your trying to solve (instead of having some other middleman at the company have the conversation first when the client and secondly with you). It can be even harder to get permission to talk to the consultants who the company brings in to decide what code you'll be writing next. This wasn't a big problem at my last employer, but it was a huge problem at my first job out of college. My boss who knew next to nothing about stats, hired a stats guy as a contractor and then insisted upon being an intermediary between me and this consultant. He would relate instructions to me based on his conversation with the consultant that made absolutely no sense, and I would tell him that something had been lost in translation and give him some options for things that were kind of similar to what he had said but would make sense. Then he would go back to the stats guy, and after about three conversations, we'd start to get somewhere that could have been easily communicated if I was just allowed to talk to the guy. But my boss insisted on being the intermediary. I might be paranoid, but I was convinced that he did that specifically because he was worried that guy might offer me a way better job than the one I had. I was actually hired at Groovebug (the company I'm referring to) specifically to specialize at the thing that this consultant did full time. In my job interview, I had told my boss that that was what I was looking to do with my career. It was related to projects that were a few months down the pipeline when he hired me, but something he did plan to eventually have done. So anyways, my boss there knew my long term career goals, and he also knew that he was blocking me from the one networking opportunity at Groovebug that fit well with them. He also knew that a ton of stuff was being lost in translation when he tried to be an intermediate between me and the other guy. I did eventually meet the consultant, and he told me that he thought that his job would be a lot easier if he was able to deal directly with me (without any prompting from me to say so), so I know he wasn't opposed to us meeting, I know I was actively asking to meet directly with him, and I know that my boss who knew all of this stuff was very opposed to that happening. I think it's a pretty reasonable interpretation of the circumstances for me to say that my boss at the time was actively trying to derail my networking opportunities.
So anyways, my professional experiences in my first few years of school were pretty awful, and I felt trapped in a really bad situation. And I felt like it was pretty easy to go into software engineering or computer science and wind up at a company that you wouldn't want to stay, and find yourself feeling trapped, with no real prospects for advancement in the company (because a lot of the companies where you wouldn't want to stay are not profitable and not growing) and no leads towards greener pastures tomorrow. And to top it all off, when you're in one of these situations, you start to get really burnt out. When you've spent ten hours debugging old code, you don't come home wanting to write more code to post on github, you pick up a new hobby that is as unlike programming as anything you have ever done. I picked up painting and I started running. If you're not an introvert (and you probably are if you're a software developer), feeling drained every day also makes you not particularly enthusiastic about socializing. I really like the version of the introvert-extrovert distinction that says that extroverts are the people who get energized by socializing and introverts are the people who use up their energy by socializing. That's definitely how I feel. I like socializing with other people; it's just the last thing I want to do when I'm already feeling drained. (I've always believed that the correlation between happiness and socialization is mostly attributable to introverts, and is caused by the fact that introverts only want to socialize when they're happy. When I'm feeling happy, I want to hang out with other people. When I'm feeling exhausted, sad, or angry, I want to be alone. It's not that I don't want to see other people when I'm not feeling positive about life. I just don't want to be seen.)
So anyways, all of this stuff is still true.
And yet, I have a completely different perspective of what it's like to work in STEM than I did a couple months ago when I wrote it.
What changed? I put my resume on Monster.
For real.
I was reluctant to do so. I didn't expect anything good to come of it. I expected to be a little be depressed after I put my resume up because I'd just get a few calls from pyramid marketing companies like I did when I posted my resume on some website years ago when my only degree was my high school diploma and all of my work experience was the sort of summer jobs that you would expect. (A math REU once I got to college. Manual labor when I was in high school.)
Turns out, there really is a huge demand for software engineers, especially software engineers who X, for any value of X, including software engineers that really like statistics, math, and machine learning! In all my time of looking at job listings trying to find a company that might higher me, I have never seen a single job listing for a role that fits what I wanted to be doing that didn't list a PhD in Math/Statistics/Computer Science/Physics as a prerequisite and also ask for five years of software developer experience (neither of which I have). I've occasionally applied to one of these companies with a cover letter saying that I'm a software developer who wants to specialize in artificial intelligence and machine learning, but am willing to continue in a UI or implementation or something else that I have experience doing along with beginning to get professional experience in AI kind of stuff. Never a nibble. Nobody's ever contacted me about a machine learning role related to those inquiries. Nobody's ever contacted me about another role developing iOS apps that would involve working with people who are developing machine-learning algorithms that those apps use. (I've gotten a few requests for just plain iOS development over the years at companies that manufactured "ooh shiny!" but I'm really not into making "ooh shiny!" unless there's also some substance behind it.
Then I posted my resume on Monster, and all of a sudden I started getting calls from people who wanted the opportunity to spend their time and their networks trying to find a place for me that fits my interests and is located someplace I would want to work. And they set up actual time to talk to me, and get to know me and what I can do, what I've done, and what I'd like to be doing. And they set up interviews for me with the sorts of companies that are doing exactly what I'd want to be doing, where I want to be doing it, and paying more than I would have been asking for if I wasn't talking to these people. It's fantastic! I've gone from feeling like I'm completely trapped to feeling like there's a whole wide world out there full of people who want to hire people who like using Linux and programming in python, Haskell, Lisp, and other programming languages that are fun to use. And like I'm not going to end up spending the rest of my life debugging ancient .NET code or writing pointless iPhone apps if I don't manage to get myself out of the software industry while I'm still enough of a generalist for consulting companies to take an interest in me.
So this is the conclusion of the matter. If you go into software development as someone who majored in abstract mathematics, you have a really high chance of finding yourself at a lousy firm or two in your first couple years out of school. (Because math majors are not in as high of demand as software developers straight out of college.) While you're at these sorts of companies, you won't have any networking opportunities at these sorts of companies, and you probably won't develop your skills much or put much new material on github. You will see your world closing in around you and feel trapped, but when you emerge from that cocoon, you will find that you have metamorphosed into something that is much more appealing to the parts of the software industry that you actually wish to appeal to than you were when you went in.
So all in all, it's probably worth it. And I take back what I said about the software development industry being a terrible industry to work in unless you find a great company at your first job out of college. In most industries, you expect your first few years out of college to not be the best years of your career. You also expect to be making connections and building the skills you will use for the rest of your career which doesn't happen in the software industry. (At the kinds of companies where you don't want to work, you are probably building skills related to technologies that were obsolete enough to be inconvenient years ago, and will become obsolete enough to be irrelevant in another few years.) But it doesn't matter. There actually is enough demand that you don't need to waste a bunch of time networking and attending conferences once you have accumulated a couple years of experience.
Edit:
Once you have enough experience that good companies are willing to let you demonstrate competence (which is only about two years), it's really easy to demonstrate competence and end up with a job that pays well enough that you can quit what you're doing on a whim and have money saved up to allow you to continue to live like a king while you build the career you want. I've completely changed my original recommendation away from, "If you're not sure what you want to do with your life, avoid coding," 18 months out of school to, "If you're not sure what you want to do with your life, and you're smart, take up coding until you figure it out," at this point.
Once you put in your first two years to get experience, you will find work as a software developer whether or not you really even try.
No comments:
Post a Comment