Ask HN: Alternative to mainstream programming jobs when you're self-taught?
5 comments
Best advice I can give you is that programming is programming. I've worked all over the place (literally and figuratively): scientific, embedded, real time, shrink wrapped software, enterprise, web development. There isn't a lot of difference, to be honest.
The key thing to understand is that programming is 5% "getting it to work" and 95% "expressing what you are doing in a way that others can extend". Most people, when they are at the beginning of their career, have enough to worry about just making the code work. It's easy to get an anti-climax once you get over that hump, though.
Even doing work in real time or other resource constrained systems, you will discover that algorithm design and optimisation are secondary because in a big software system you often can't get there from here. You have some terrible mess and it seems infeasible to refactor it in a way to even apply those optimisations.
Anyway, having said all that, I'll say that embedded work is mainstream :-). I have a hard time thinking of stuff that isn't mainstream. By numbers, the vast majority of programmers work on internal business systems -- many of which are far older than the web. So I would remove that notion that "mainstream == web development". Programming is programming.
Being self taught is not so much of a worry these days. I don't really pay much attention to it when hiring people. I will say, though, that companies with an engineering background often like to hire people with engineering degrees first and will begrudgingly hire people with CS degrees. It's often hard to break into those companies without a STEM degree. Having a good CV helps a lot.
As I have done it many times, I will say that it is challenging to hop over domains. If you are a web developer, then people often tag you as a "web developer". If you are an enterprise Java developer, then people tag you as an enterprise "Java developer". It's up to you to display a flexible mind and show that you are a generalist programmer that can pick up whatever tools they throw at you in short order. I've literally lost track of the number of programming languages I've used professionally (probably somewhere between 10 and 20), not to mention libraries and frameworks. When I go to an interview I explicitly tell people, "If you want someone who is an expert in X and who knows all of the tricks for using X, then you probably should look for someone else. If you want a solid programmer who is going to help you get your code base in order, then I'm your guy." Sometimes it is a short interview ;-) (which is good for both of us).
Finally, one last piece of advice. When you work for someone, you do what they need done. Sometimes that corresponds with what you currently want to do, sometimes it doesn't. If you want to develop yourself in a particular area, you have to invest in yourself. That means a side project. For some parts of your career (even myself right at this moment!) that means doing katas, and exploring ideas. For others that will mean starting a project and grinding it through. While there is no harm in interviewing for jobs, I would encourage you to spend most of your time exploring the kind of programming you want to do -- by writing your own code. Having done that, you will be very much more valuable to the people looking for that kind of programmer. It is true that lots of people in the field that you will want to get jobs in will not care about that work -- but, trust me, you don't want those jobs.
Good luck!
The key thing to understand is that programming is 5% "getting it to work" and 95% "expressing what you are doing in a way that others can extend". Most people, when they are at the beginning of their career, have enough to worry about just making the code work. It's easy to get an anti-climax once you get over that hump, though.
Even doing work in real time or other resource constrained systems, you will discover that algorithm design and optimisation are secondary because in a big software system you often can't get there from here. You have some terrible mess and it seems infeasible to refactor it in a way to even apply those optimisations.
Anyway, having said all that, I'll say that embedded work is mainstream :-). I have a hard time thinking of stuff that isn't mainstream. By numbers, the vast majority of programmers work on internal business systems -- many of which are far older than the web. So I would remove that notion that "mainstream == web development". Programming is programming.
Being self taught is not so much of a worry these days. I don't really pay much attention to it when hiring people. I will say, though, that companies with an engineering background often like to hire people with engineering degrees first and will begrudgingly hire people with CS degrees. It's often hard to break into those companies without a STEM degree. Having a good CV helps a lot.
As I have done it many times, I will say that it is challenging to hop over domains. If you are a web developer, then people often tag you as a "web developer". If you are an enterprise Java developer, then people tag you as an enterprise "Java developer". It's up to you to display a flexible mind and show that you are a generalist programmer that can pick up whatever tools they throw at you in short order. I've literally lost track of the number of programming languages I've used professionally (probably somewhere between 10 and 20), not to mention libraries and frameworks. When I go to an interview I explicitly tell people, "If you want someone who is an expert in X and who knows all of the tricks for using X, then you probably should look for someone else. If you want a solid programmer who is going to help you get your code base in order, then I'm your guy." Sometimes it is a short interview ;-) (which is good for both of us).
Finally, one last piece of advice. When you work for someone, you do what they need done. Sometimes that corresponds with what you currently want to do, sometimes it doesn't. If you want to develop yourself in a particular area, you have to invest in yourself. That means a side project. For some parts of your career (even myself right at this moment!) that means doing katas, and exploring ideas. For others that will mean starting a project and grinding it through. While there is no harm in interviewing for jobs, I would encourage you to spend most of your time exploring the kind of programming you want to do -- by writing your own code. Having done that, you will be very much more valuable to the people looking for that kind of programmer. It is true that lots of people in the field that you will want to get jobs in will not care about that work -- but, trust me, you don't want those jobs.
Good luck!
>Anyway, having said all that, I'll say that embedded work is mainstream :-). I have a hard time thinking of stuff that isn't mainstream.
Ah, well in Chicago area at least, the market is dominated by web development, mobile development, data science, and algorithmic trading roles, in that order. I'm part of a few local Slack groups for Chicago programmers and it's been hard to find leads for embedded programming jobs. Several people have told me embedded programming is not something Chicago has a lot of.
>As I have done it many times, I will say that it is challenging to hop over domains. If you are a web developer, then people often tag you as a "web developer".
And this is the obstacle I'm trying to overcome, when I don't necessarily have the time or budget to dedicate several years for another degree. I'm in my mid 30s after all. How to get into those heavily engineering oriented firms, like JPL or NVidia, doing the low level stuff? When your last full-time job was in front-end JavaScript with PHP for a dime-a-dozen SaaS company? Can I find a suitable replacement for STEM college education that has the same level of organization AND credentialing? (remember I want my resume to at least make NVidia want to interview me)
I don't think anyone likes being pigeonholed, and it's especially troublesome when the majority of jobs here have a programming language in the damn job title. I want to work in "concepts", not languages.
I'm still trying to map out how to get from point A to point B. Maybe go from a local web dev shop to a local web-and-mobile shop that uses Java, then use that Java experience to work at an enterprise firm, then slide in some C++ work? That's just a guess :) It's also gonna likely take as much time as getting the college degree, so I don't know, I'd like to get a do-over in college life.
Ah, well in Chicago area at least, the market is dominated by web development, mobile development, data science, and algorithmic trading roles, in that order. I'm part of a few local Slack groups for Chicago programmers and it's been hard to find leads for embedded programming jobs. Several people have told me embedded programming is not something Chicago has a lot of.
>As I have done it many times, I will say that it is challenging to hop over domains. If you are a web developer, then people often tag you as a "web developer".
And this is the obstacle I'm trying to overcome, when I don't necessarily have the time or budget to dedicate several years for another degree. I'm in my mid 30s after all. How to get into those heavily engineering oriented firms, like JPL or NVidia, doing the low level stuff? When your last full-time job was in front-end JavaScript with PHP for a dime-a-dozen SaaS company? Can I find a suitable replacement for STEM college education that has the same level of organization AND credentialing? (remember I want my resume to at least make NVidia want to interview me)
I don't think anyone likes being pigeonholed, and it's especially troublesome when the majority of jobs here have a programming language in the damn job title. I want to work in "concepts", not languages.
I'm still trying to map out how to get from point A to point B. Maybe go from a local web dev shop to a local web-and-mobile shop that uses Java, then use that Java experience to work at an enterprise firm, then slide in some C++ work? That's just a guess :) It's also gonna likely take as much time as getting the college degree, so I don't know, I'd like to get a do-over in college life.
> How to get into those heavily engineering oriented firms, like JPL or NVidia, doing the low level stuff?
Maybe first try to talk to someone who does that kind of work, to see if it's even appealing to you? I say this because my understanding of this issue is very similar to the parent poster - no matter what the domain, programming as a career WILL be dominated by dealing with large and ugly code bases, where your main struggle will be to understand them and then try to make intelectually trivial changes in a non-breaking manner. For example, I spoke with people who developed GPU drivers, and they said that the code base was an insufferable mess, and that they escaped it to do something theoretically much more mundane, but at least with much less preexisting code.
My gloomy conclusion is that software engineering is not the best career choice for someone creative and intellectually curious. It's just too dull.
Maybe first try to talk to someone who does that kind of work, to see if it's even appealing to you? I say this because my understanding of this issue is very similar to the parent poster - no matter what the domain, programming as a career WILL be dominated by dealing with large and ugly code bases, where your main struggle will be to understand them and then try to make intelectually trivial changes in a non-breaking manner. For example, I spoke with people who developed GPU drivers, and they said that the code base was an insufferable mess, and that they escaped it to do something theoretically much more mundane, but at least with much less preexisting code.
My gloomy conclusion is that software engineering is not the best career choice for someone creative and intellectually curious. It's just too dull.
From my own experience:
One approach is to try software in academia. Look for departments that need web developers, and once there see about branching out into other areas (they often like folks who are willing to learn new things that can be applied in their domain).
In addition to the ability to branch out, you'll likely have the opportunity as FT staff to pursue a degree at reduced tuition (depending on the university/college).
It's often the case that you take an income hit in academia (which is often a reason they're willing to hire anyone with relevant experience), but the learning experience can be beneficial.
Of course, I could be generalizing my experience.
Just a thought.
One approach is to try software in academia. Look for departments that need web developers, and once there see about branching out into other areas (they often like folks who are willing to learn new things that can be applied in their domain).
In addition to the ability to branch out, you'll likely have the opportunity as FT staff to pursue a degree at reduced tuition (depending on the university/college).
It's often the case that you take an income hit in academia (which is often a reason they're willing to hire anyone with relevant experience), but the learning experience can be beneficial.
Of course, I could be generalizing my experience.
Just a thought.
I can actually +1 this. While I was getting my degree I worked in various departments at my university (I'm not the kind of person who can study without working, so I worked pretty much full time). I worked in Chemistry, Physics, Astronomy and even in the computer services group. Astronomy was probably the most fun because I wrote code to animate star fields with the planetarium projector. Lots of math!
Downsides are that sometimes (well... lots of times) they need you to do trivial things. Often you are working with some stinky piece of code that a grad student wrote in fortran 10 years ago and that another grad student rewrote in C -- transliterating the design from one language to another. Nobody understand software development practices, so it's cowboy time every day (unless you are good at managing it yourself). And the pay is generally pretty low :-) Still it is probably the most fun I've ever had and I would go back if I was anywhere near a university.
Downsides are that sometimes (well... lots of times) they need you to do trivial things. Often you are working with some stinky piece of code that a grad student wrote in fortran 10 years ago and that another grad student rewrote in C -- transliterating the design from one language to another. Nobody understand software development practices, so it's cowboy time every day (unless you are good at managing it yourself). And the pay is generally pretty low :-) Still it is probably the most fun I've ever had and I would go back if I was anywhere near a university.
In particular, I like tinkering around with limited resource capabilities and finding performance bottlenecks in code, and optimizing performance. For one of my game dev jobs, most of my work was around profiling inefficient code, and optimizations for rendering and geometry generation. I know the basic concepts around some data structures and Big O.
What other programming jobs can I work on that present similar technical challenges? I am not some web framework guru, but I don't find a lot of the challenges in web dev that interesting anymore.
I have hobby C++ experience but my knowledge in that language is not very strong anymore (many of my old C++ projects were locked out from a hard drive failure). Maybe work in embedded programming? Or is that a high barrier of entry for an autodidact without a STEM degree?