
Ask HN: Alternative to mainstream programming jobs when you're self-taught? - ccajas
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?<p>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.<p>What other programming jobs can I work on that present similar technical challenges? I am not some web framework guru, but I don&#x27;t find a lot of the challenges in web dev that interesting anymore.<p>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
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!

~~~
ccajas
>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
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.

~~~
mikekchar
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.

