title: How to Become A Successful Self-Taught Software Developer
slug: become-successful-self-taught-software-developer
meta: An answer to the question of the ideal path to becoming a self-taught developer.
category: post
date: 2017-05-14
modified: 2017-05-14
newsletter: False
headerimage: /img/170514-self-taught-developer/header.jpg
headeralt: Header image for the blog post.


I received the following question via email from someone spending
significant effort learning how to code in anticipation of obtaining 
full-time job with those skills. The question is also frequently 
asked by university students and coding bootcamp graduates. 

This post provides my current answer on how get your first full-time job
as a software developer. My answer assumes that the definition 
of "successful path" for a self-taught developer is getting a 
full-time position after investing so much time learning to code.

Note though that as I describe in my answer below, I took 
[a more "traditional" route](http://www.mattmakai.com/matt-makai-resume.pdf) 
to become a professional software developer. Therefore my response should 
be only one of many that you solicit while working towards making the 
leap from self-taught to professional software developer.


## (Paraphrased) Original Question 

> I'm not sure what I should learn first to become a developer. 

> Right now the path I am on is/was: Learn basic python fundamentals -> 
> git/github -> ubuntu/linux OS--> flask/jinja2 --> Bootstrap -> 
> SQLalchemy -> Docker -> Celery -> Redis -> AWS -> Django?!
 
> I don't know where JS / Angular2 / ECMAscript6 / HTML / CSS all fit 
> into this...

> What is the ideal path to becoming a successful self-taught developer
> so I can eventually get a job as a software developer?"


### My tl;dr answer
Go very deep in one area you really enjoy working after you learn the 
fundamentals and get a broad overview of the language's ecosystem. Leverage
your depth in your targeted expertise area when you find teams that need
that skill to land your first full-time job.


### Answer Context
Figuring out what order to go in when learning is definitely one of the 
trickiest problems for self-guided learners. I'm not sure my answer to your 
question is the best one that you can get because for better or worse I 
took four years of computer science (CS) in high school, followed by 
undergrad CS & grad school CS (while working as a full-time developer). 
That route seems like the "traditional developer" background. However, I 
will do my best to give an answer. You are definitely not the only person 
who faces this issue.


I typically see self-taught and developer bootcamp grads feel like to 
get a job they have to learn everything from the 
[database backend](/databases.html) up through the 
[web frameworks](/web-frameworks.html) to every new 
[JavaScript](/javascript.html) frontend framework that comes out,
but that's definitely not true. When you land that first full-time 
developer gig it will be because a development team sees you have a 
particular skill that their team lacks and they need help with on their
project(s).


### Going deep
If you find yourself coding front-end stuff but wishing you could get 
back to optimizing the database, you should focus on going much, much 
deeper in database optimization. Learn as much as you can about SQL, 
DDLs, DMLs, [ORMs](/object-relational-mappers-orms.html), 
[PostgreSQL](/postgresql.html), database testing and performance tuning. 
Constantly go deeper. Spend most of your time coding but when possible also 
teach others what you're learning. Some folks prefer to teach by writing blog 
posts. Other people enjoy giving tutorials at a meetup. You also mentor
others in-person or remote on video chats who are also new to software 
development. 

By teaching others you are not being purely altruistic: explaining 
programming and answering others' questions will reinforce in your own mind 
what you have learned and where your gaps remain based on the questions. 
Experiment with code to learn more and continue to go deeper. Create a
feedback loop where you code, learn, write and find new unexplored veins 
to learn more in that area.

You should be ready to start job hunting once you have a good feedback loop 
where you are digging into your favorite subject area and are teaching it to 
others in some way.


### Job searching
When you've gone deep in your subject, search for jobs that have a bit 
of a full-stack flavor with an emphasis on your specialty. Reach out via 
email to developers on the team or the hiring managers. Ask them for advice
on what skills successful developers on their teams have an what unsuccessful
candidates were lacking for their positions. Use their answers as data points
for what you may still need to learn when their responses are relevant to
the area you're going deep in. 

When you feel you are ready, see if you can grab lunch or video chat with 
developers on those teams to learn more about their work. If that goes well, 
ask them if they'd refer you into the interview queue. Referrals will get you 
much further than applying through a human resources resume collection 
system. 

Look for both software development junior roles and technical support 
roles, if the technical support roles are at software-focused companies. 
For example, [Twilio's Support team](https://www.twilio.com/company/jobs) 
often hires folks who have limited development experience but over time they 
can learn how to debug coding issues based on all the support tickets they 
have to answer (along with continued self-paced learning). 


### Interviewing and working tips
Enthusiasm is crucial for obtaining and doing well in your first few jobs.
In hindsight, a lot of the enterprise software I worked on right out of 
college was horrible, but it was all new to me so I soaked up as much
knowledge as possible while asking the tech leads and architects around
me a ton of questions. Enjoy climbing steep learning curves.

Keep your cynicism and any "I'm better than this" attitude in check 
because companies have a ton of unexciting grunt work that needs to 
get done. The grunt work will teach you how to become a better software 
developer.

While looking for your first position, always be working on dozens of 
potential opportunities and do not pin your hopes up on one specific 
job. The goal is to get your first development gig that will help you 
continue to learn, not to land your dream job. The dream job comes later 
when you actually have enough experience to know what your dream job looks 
like!

You will eventually land your first development gig. Then you will have
to constantly keep learning and the great part is that you'll get paid for
it.


### Feedback 
What other questions can I answer and 
[what additional topics](/table-of-contents.html) can I add to 
Full Stack Python that would be immensely helpful to new folks who are 
struggling to become self-taught developers?

Let me know via 
[a GitHub issue ticket on the Full Stack Python repository](https://github.com/mattmakai/fullstackpython.com/issues), 
on Twitter 
[@fullstackpython](https://twitter.com/fullstackpython)
or [@mattmakai](https://twitter.com/mattmakai).

How should I improve this blog post? Fork 
[this page's source on GitHub](https://github.com/mattmakai/fullstackpython.com/blob/master/content/posts/170514-self-taught-developer-path.markdown)
and submit a pull request.

