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 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.
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?"
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.
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 up through the web frameworks to every new JavaScript 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).
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, PostgreSQL, 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.
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 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).
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.
What other questions can I answer and what additional topics 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, on Twitter @fullstackpython or @mattmakai.
How should I improve this blog post? Fork this page's source on GitHub and submit a pull request.