Ask HN: How do I become a self-taught software engineer in 1 year (full focus)? - jobsandjobs
======
mitchellst
As the other answers say, you will need something specific to drive at. The
field of software engineering is vast. You'll be repeatedly overwhelmed by its
size and scope without getting anywhere unless you start, and develop skills
on the way. Phrased differently, you don't know what you don't know. By far
the best way to explore what you want to do and to gain the skills necessary
is to do it on someone else's dime. Get a job.

Easiest way into a tech company in a technical role is through front end.
(Let's kill a myth here: not because FE is easier—it's not, necessarily. But
the risk is generally lower, since it's hard to really screw things up in
javascript and your mistakes will usually be more traceable for others to
clean up after you than they would be in, e.g., devops.) Give yourself 3
months to learn everything you can to pass an interview in javascript, html,
and css. Then go to a non-silicon valley town with lots of tech (Austin,
Boston, Chicago, LA come to mind) and go out for every front end job you can
find in a mid size company.

If the company's too big, you'll get locked in the front end role without
opportunities to explore other things. If it's too small, you risk (a) that
it's the founder's lifestyle business without any real innovation, or (b) that
it will grow so fast that you'll have responsibility piled on you and no time
to learn. (I recently interviewed a guy like this. Super smart, but he joined
a high-growth startup as a cheap early employee, and his expertise stayed
unfortunately narrow because he had no time to grow, only to prop up his part
of the system.) You're looking for a place with 30-70 engineers, whose senior
technical people are over age 45.

~~~
protonimitate
Great advice. As someone who is on the self-taught path, and employed as of
recently, I would recommend the following as well

\- Start digging into data structures and algorithms early and often. Leetcode
is meme status now, but it does help to practice routinely. Don't wait until 2
days before an interview to try to learn how to these things. Grokking
Algorithims, the Algorithm Design Manual, and Cracking the Coding Interview
all helped me out along with constant practice

\- assuming you'll be front end focus to break in, get a good understand of
how the internet works (and be able to describe it well). It's a go-to
interview question for front end positions

\- Dig deep into Javascript. Understand why it's useful, and more importantly,
what the issues are with it so you can avoid those pitfalls when working with
it.

\- Learn React. Vue/angular/etc are all helpful and good to know, but React is
getting more widespread by the day. It's pretty easy to pick up once you have
a good JS foundation, and there's tons of learning materials.

\- Learn about webpack and what it does. You don't need to know how to
configure it from scratch or memorize its docs, but know when and why its used
and how it helps your project.

\- Most importantly, learn how to get stuck. Try things that are really hard,
get stuck until you want to give up, then try some more. Get comfortable not
knowing how to do something, but figuring it out.

\- Don't get too bogged down learning the right tech stack. Pick one and go
hard on it for most of your time learning. No matter where you end up, the
stack will be different. Starting over is common and most places expect you to
have 'ramp up' time to get used to their dev environment/stack

~~~
godelmachine
>> get a good understand of how the internet works

Believe me, I have been spending the last two days understanding the
difference between Internet vs World Wide Web.

Would you kindly offer your advise on how the Internet works?

------
rayvy
You'd definitely want to narrow down what you mean by "self-taught software
engineer". Once you've done that, you'll have much more clarity in regards to
whether it can be done in a year.

E.g., writing crud apps WebApps in Go? Definitely possible in a year. However,
building a robust compute system in C++ from scratch -- probably not so much
(for someone new to the field).

So just define what "self-taught software engineer" means to you, more
accurately.

------
willpewitt
It depends, is your goal to land a job? If so that is totally possible. Look
in your area (somewhere like indeed.com) and see what is in demand. In most
areas Java or JavaScript are both good options as both are in demand and
fairly easy to pick up. Based on what language you learn you will need to lean
a accompanying framework and other skills needed such as build tools, sql,
general design patterns, etc.

The biggest piece of advice I can give is too just fully dive into learning.
Program every day and read every day. It is going to be uncomfortable because
a lot of concepts dont come easy to learn and it can be very intimidating.

Another huge help would be to find a mentor, when I started programming I had
someone to give the a path to follow, read these books, learn this , learn
that etc.. Which gave me a huge boost among my piers. Also, you will not get
some concepts right away, and thats expected. Someone who has run into those
problems can shine a light and explain it to you.

Programming and computer science are diffrent. Learn to program first then a
little later pick up a computer science book. And that can be a pretty
controversial thing to say especially here. The truth is that most junior
level positions just want someone who is reasonably competent and will
continue to learn.

------
sova
If you wanted to be a master musician you would need to at the very least: try
every different kind of instrument (reed, percussion, string, horn/tube, wine
glass w/ water). Then you would need to focus on one until you got proficient
at it. Then you would move to the next one, until you have 30% proficiency at
each one. Then you need to read more theory to understand chords and
intervals, phrasing, and tempo. Then, you revisit all the instruments again
with your new theory.

In CS, it's similar. All the different instruments are the different kinds of
languages. There is LISP-like Clojure (and others), there is Javascript
(functional with declarative), there is imperative programming, assembly
programming, and interface/event programming. Hard to split it into the
analogous flavors to music, but maybe you can follow. Lisps work fundamentally
differently than something like Python or C++. So learn one language in each
of the different classes of languages, first to expand your mind to what is
possible with the instruments.

Then, you must learn the theory. You must learn everything regarding graph
traversal, manipulation, and big-O notation.

You also need a really strong understanding of what solutions are common for
real-world problems. Get a coding book like Cracking the Coding Interview
Gayle McDowell. You also need small, incrementally ambitious projects that you
can put online to showcase your abilities. Then probably a gig as a software
intern to get "corporate experience" and then once you are pretty savvy with
the general coding interview questions, apply to your dream job and tell them
how excited you are to tackle all these problems. Did I miss anything?

------
chipuni
What do you mean by "self-taught" \-- and why is that important?

Even if you can't go to a university, they remain great ways to learn software
engineering. For example,
[https://ocw.mit.edu/index.htm](https://ocw.mit.edu/index.htm) has useful
classes.

Finally, I agree strongly with rayvy. Choose what you mean by "software
engineer" and what your goal is.

Good luck.

------
tmaly
I would focus on certain fundamentals first. I would also suggest picking a
single programming language to learn and learn it well.

Python is one that many people choose as it has many courses and books on
learning.

Pick a text editor or IDE and practice with it, the tools you choose can help
you a lot.

MIT has a great course 6.00 Introduction to Computer Science. Udemy has a
great Python 3 course Complete Python Bootcamp: Go from zero to hero in Python
3

I would learn a little about Clean Code, I started porting a PHP version to
Python [https://github.com/tvmaly/clean-code-
python](https://github.com/tvmaly/clean-code-python) it is a work in progress.
The book by the Robert Martin is a great way to go if you like books.

I would learn how to test your code, Kent Beck's Test Driven Development book
is good and also covers some patterns.

Learn about Object Oriented design, Data Structures, and Algorithms

Learn about version control, git is a good choice

Learn about the command line, it is always a good skill to have

------
ithilglin909
By self-taught, do you mean you don’t want to take classes, even if they’re
online or get any kind of mentorship, or just that you’re not going to go back
to college and getting a CS degree? Also, do you have any understanding of
programming/CS basics?

~~~
ithilglin909
Also, it would be helpful to know more specifically you're hoping to achieve
by the end of that year. A software engineering job?

------
FeynmanThomas
See this twitter thread:
[https://twitter.com/FeynmanThomas/status/1013697640830156800](https://twitter.com/FeynmanThomas/status/1013697640830156800)

------
cdnsteve
What's your current knowledge your starting with, complete ground zero, some
understanding of how computers work, some programming experience? What area of
interest do you want to focus in software engineering? Web Dev, Embedded, etc?

------
cvaidya1986
Build an app to solve a problem that you have.

------
segmondy
Without a mentor? It's going to be super difficult.

