I want to be Software Engineer

These are the steps I recommend, to be an engineer worth of being hired. Sure, there are lot of platforms helping you out. Here, we're purely talking of a strategy with links to other sources. Don't take leaps, go at your pace but make sure you're moving.

Assumption: You've a linux or Mac.

--> Resources:
- https://jvns.ca/linux-comics-zine.pdf and other zines on https://jvns.ca/
- https://howdns.works

Step 1: Learn some basic debian commands. Install basic packages. You're bound to use terminal for most of the things despite GUI available. Google how to install, and keep on doing it.

Step 2: Install git. Create an account on Github. Config your system with basics from there. Install sublime-editor.

Step 3: Build a hello world project in any language you already know.

If you're not already familiar with any language, I'd recommend start with python. Lot of experienced programmers and amateur programmers burst out as soon as they see Python. Lot of people argue that no, this is not right choice, you should start with C, C++, Java, etc.. But, for the moment, fuck them all. You're learning concepts of programming. Stick to python, focus on learning concepts beyond syntax.

--> Resources to learn basics of language (Python):
- https://learnpython.org/
- https://github.com/trekhleb/learn-python
- https://learnxinyminutes.com/docs/python/
- https://learnxinyminutes.com/docs/python3/
--> For practice and learn more hands on:
- https://www.hackerrank.com/domains/python
- https://www.interviewbit.com/
- https://triplebyte.com/
- http://www.pythonchallenge.com/

Step 4: Push it to github repository named 'hello-world'. This step should get you familiar with everything related to git, required for basic knowledge. Make sure you learn to push each and every exercise solution to github as you progress. Send the repository url to any of your friends, for code review.
I'd love to see your work/review it. You can drop me a mail here.

Step 5: Now that you've built hello-world, next step would be to build a static website. Create a new repo, read about creating github.io pages.

Sign up on http://freecodecamp.com, do the tutorials of html, css and javascript. Please don't spend too much time in learning how things work. Make it work, improve later.

Step 6: You should've a website up and running, at username.github.io
This is crucial for you, as we're gonna say good bye to pdf format of resume.

Step 7: Dive into programming. If you're already familiar with one language and want to warm up in it, go to hackerrank and attempt all the problems in language domain.

Step 8: Write a program in any language you're comfortable with.
The program shall send you one random problem from geeksforgeeks or hackerrank or other platform. That should be the first thing you're going to do everyday. If the problem is extremely challenging, spend an entire day to solve it. Don't give up. If the problem is solved earlier, don't skip it. Solve it again. You should be able to solve it every time if you were successful once.

Step 9: Design workflows. Get a new workflow every day. For instance, on day 1, design how would you architect a website like Stackoverflow. Improve it on, further, each day.
How to crack design interviews.

Step 10: Dividing a big problem into chunks. This is not mandatory for an interview process. However, given an assignment or project, this helps a lot. You need to divide the project properly into small pieces, code them up. Divide and conquer, the ultimate algorithm to rule it all.
Also, build and deliver all the chunks.

Step 11: Tools. Let's get murky now. Assuming you've fair knowledge of language and concepts, if you choose to learn django, it should take 3 days to launch a website. Remember, all the popular websites that we see are developed over time. Not on day 1. Building Stackoverflow in a day is impossible. Don't try to do it. Be realistic.

Step 12: Reading Code. Most of the times, you tend to be super awesome and reinvent the wheel by writing something from scratch, just because some tool out there is not meeting few requirements. That's stupidity. You should improve existing tool, to fit in your requirements.

If you really intend to start something from scratch, you should start with creating universe.

Tips to improve:

  1. Believe it or not, 'skills to google' is a must. Few companies like Uber, do check that skill in interview.
  2. This is not an exhaustive list. Internet is full of resources, and hence, distractions. Some documentations may be explaining things very well, but some might be very incorrect at basic level.
  3. Divide and conquer. Always. In my experience with great engineers, I never saw a method/function with more than one thing. Be it addition!