5 ms·
Ask HN: Alternative to mainstream programming jobs when you're self-taught?
I have a 4 year art degree and self-taught in programming and usually work in web dev, but I have a bit of paid game programming experience as well (C# and Unity with indie games). Web development and mobile app development are usually the go-to career tracks for self-taught people. I consider these to be the mainstream jobs in software. But what possibilities lie for the self-taught in less mainstream jobs?
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?
- mikekchar 9y agoBest 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!
- ccajas 9y ago>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.
- euvitudo 9y agoFrom 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.