computer science — Home

Computer Science

Parent Note (Up)

Objective

My objective behind learning more about computer science is to become a full stack developer. It is important to spell out one's exact objective. since the scope to learn computer science is immense. In order to prevent one's self from getting lost in a rabbit hole, one needs to have a few clear boundaries, and an idea of what areas they plan to dive deep in.
To me the idea of becoming a full stack developer is ensuring that I understand enough about each element of website, application and project development to participate in and lead any part of development. Rather than specialising in the intricacies of front end, back end or architecture, I would like to be able to deconstruct entire systems and build them.

Full Stack Roadmap

In order to map out what all I need to learn and how to go about learning the same, I have picked up references from experts on the internet as a starting point:
- Greycampus' Full Stack Developer Guide : A good overview of the different pieces of the puzzle.
- Daniel Borowski's Guide to Becoming a Full Stack Developer : Lists out a lot of the important elements details important concepts one needs to understand.
- Codeburst's Mega Full Stack Resource guide : Provides a great deal of detail regarding most of the relevant elements with a good number of links to resources for thorough learning. However, it seems to be missing some useful direction on the web application architecture front, which has always been a little confusing for me.

Key Topics

From the above 3 great starting resources, the understanding that I have developed is that the following elements are important:

1. development environment setup (Personal Setup)

  1. Laptop or desktop
  2. Text editor or IDE
  3. Terminal (makes you look like a hacker, and is absolutely necessary to operate efficiently)
  4. Git
  5. Web browsers and other devices (for viewing & testing)
  6. Online Resources & Notes Apps

2. development operations (How the code meets the internet)

  1. Infrastructure (where & how the code is hosted and served to the internet at large)
  2. Virtualization (ensures portability and stability across multiple different code development setups)
  3. Automation (standard and confusing dev ops should be automated)

3. front end (Defining the look, feel and everything visible)

  1. Basics (HTML, CSS & Javascript are the underlying languages used for all front end development)
  2. Framework (Toolkits and packages of code that enable a lot of standard front end templates with little code)
  3. Style (Sets of rules applied on top of framework to increase power within a standard set of constraints)

4. back end (Everything that runs on the server instead of the end user's computer)

  1. Language (The programming language in which the logic at the backend is written)
  2. Framework (The packages that enable communication with the front end place constraints on how the backend logic is called and run)
  3. Package manager (Tool that manages the libraries of code that we borrow from other programmes)
  4. Data structures & algorithms (the science/math that helps optimise the logic)

5. database management (Storing and reusing user information)
6. mobile applications (Creating a mobile app front end and connecting it to the same backend and database)



The order in which I have stated the above might seem a tad bit unconventional, and might not be in sync with many other resources. The reason I have listed it in that order, does not have to do with the order in which they have to be learned. Rather, this is the order in which I believe one would have to make design choices and the order in which one would develop a major project (or maybe that's just me).

Useful Projects

Over and above the 6 key topics covered above, it is always useful to complete a few large projects to learn the above skills thoroughly. It also serves as a way for me to make something useful with my newly acquired skills. To this end I will maintain a list of different technology projects to build on.

Insert contact information or a way to receive comments (emails)

End of Note

Notes mentioning this note