Skip to content

sandbands/cs-resources

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 

Repository files navigation

Computer Science Guide

This guide is for everyone, regardless of your skillset.

This Guide may change in the future.

Please feel free to contribute to this Guide in *any way possible.

Requirements

  • an interest / curiosity

  • a computer

  • internet access

How should one learn?

You should be self-taught; i.e. not taking programming classes at your school, not going to a programming bootcamp / programming school; not having a personal mentor / teacher / coach to teach you (getting advice / tips is fine).

You can self-learn using resources such as Books, E-Books, Online Courses / Tutorials (not to be confused with a distance-learning bootcamp) such as YouTube Videos, Udemy Courses, etc.

Formal Education is also a good choice, and depending on the job / role you are aiming for, you may need a Bachelor's Degree and / or some other certification.

You can self-learn, and go to a College / University to obtain a degree which will definitely help you land a job.

Why self-learn?

  • Learn at your own pace (but try to be consistent)

  • Learn whenever

  • Accommodate / Fulfill your educational / academic needs

  • Learn from where ever you want

  • No stress

  • Cool thing to flex

  • There are lots of resources available

  • Resources out there are either Free or Affordable

  • Some resources provide certificates

  • Unlike school; does not add to your stress and responsibilities

  • and much more benefits; you'll love it

Does one need any certifications to get hired?

  • This varies per job title / role, and employer(s). But for most, certifications are required.

Is Computer Science hard?

  • Truthfully, the difficulty varies per person. It might be intimidating at first, but if you stay consistent with your courses, obtain the information from your resource(s) properly, you'll be on the path to becoming a pro.

  • Practice makes perfect; life is about trial and error.

How can one make money as a Programmer?

  • SaaS (Software as a Service; Google, Discord, YouTube, and Windows Operating Systems are good examples)

  • Freelance Work

  • A nine-to-five job (Remote or in-person)

  • Paid Collaboration

Picking a Programming Language

There are many Programming Languages out there such as Python, C, C++, C#, Java, Javascript, Go (aka Golang), etc.

Beginners should start with Python or Golang, which are popular Programming Languages that are used widely.

Python is General-Purpose (meaning it can be used for anything), Object-Oriented Programming Language (meaning it supports Object-Oriented Programming, which you'll see in most languages).

Golang (The name is Go, but many refer to it as Golang) is also General-Purpose, but it is not Object-Oriented like Python.

Python and Golang are simple but powerful languages and they serve as a good basis for beginners. Once you learn Python or Golang, other Programming languages will be easier for you to learn, in fact, most are pretty similar to the one of the two or both in their own ways, just with different syntax.

To install Python, go to this page and install the latest version of Python.

To install Golang, go to this page and install the latest version of Golang.

Choosing a Text Editor or IDE (Integrated Development Environment)

Note: There are some IDEs that can be used for multiple languages, and there are also some IDEs that are suited for one specific language.

Popular Text Editors:

  • Visual Studio Code (Recommended)

  • Sublime Text

  • Atom

  • Notepad++

  • Vim (Not recommended for beginners)

  • Neovim (Not recommended for beginners)

Popular IDEs:

  • Visual Studio

  • Pycharm (Python IDE)

  • GoLand (Golang IDE)

Installing and Setting up the IDE / Text Editor of your choice

Setup for Visual Studio Code:

  • Go to this page

  • Download Visual Studio Code (Community is Recommended)

  • If you chose to begin with Python and have it installed, follow these steps:

    • Open Visual Studio Code
    • Go to the Extensions Marketplace
    • Search for 'Python'
    • Install the Official Python extension
    • If it says 'Reload Required' after installing, click it to Reload
  • If you chose to begin with Golang and have it installed, follow these steps:

    • Open Visual Studio Code
    • Go to the Extensions Marketplace
    • Search for 'Go'
    • Install the Official Go extension
    • If it says 'Reload Required' after installing, click it to Reload

[Roadmap] What skills should one learn?

  • Any Programming Language of your choice (A General-Purpose language is recommended for beginners)

  • Git: Version Control Software

  • GitHub: Platform for hosting / publishing, editing / contributing to, and downloading repositories; includes built-in version control

  • JSON and / or XML and / or TOML and / or YAML: Data Serialization

  • Basic Computer Architecture and Hardware

  • Software Engineering

  • SQL: Work with Databases

[Terminology] Module vs Library vs Package vs Framework vs API vs SDK

Note: This is based on my personal knowledge, so please correct me if I'm wrong, or if you would like to add on.

  • Module: Reusable source code

  • Library / Package: A Group of modules, and can even include other libraries / packages

  • Framework: A structure used for building applications, like house frameworks are used for building houses

  • API (Application Programming Interface): Allows applications to communicate with each other

  • SDK (Software Development Kit): Tool(s) used for Software Development compiled into one Kit / Set / Pack

[Terminology] Full-Stack vs Front-End vs Back-End

  • Full-Stack: Combination of the Front-End and Back-End

  • Front-End: Client-Side / Interface

  • Back-End: Server-Side / Functionality

[FAQ + Mythbuster] "What's the best {technology}?", "x is better than y and z."

There is no such thing as "the best" X, and X is not better than Y or Z

What I mean by this, is that everything has their own strenghts and weaknesses / pros and cons.

Python is not better than C++ and C++ isn't better than Python.

C++ is not the best programming language.

Windows is not better than Linux.

Windows is not the best Operating system.

Like said, each technology in Computer Science has its own pros and cons, and may excell in a particular task / application, but it does not mean that it is better than another technology (in general).

List of some Self-Learning Resources

  • Sololearn

    • Website, iOS App, Android App
    • Free with paid features that aren't necessary
    • Free Certificates
    • Great content
    • Free Quizzes and Projects for good practice / knowledge reinforcement
  • tutorialspoint

    • Free Tutorials
    • Paid Premium Courses (Paid in Indian Rupees Currency)
    • Offers Certificates (Also Paid)
  • Programiz

    • Lots of free courses
    • In-depth content
  • W3Schools

    • Free Tutorials
    • Paid Courses (More in-depth than the Tutorials)
    • Certificates for Paid Courses
    • Variety of Content
    • Free Quizzes for good practice / knowledge reinforcement
  • GeeksforGeeks

    • Lots of Courses and Tutorials
    • Variety of Content
    • In-depth content
    • Offers Interview Preparation & Practice
    • Free & Paid
    • A Computer Science Portal
  • Codecademy

    • Some Free Courses, Some Paid / Subscription-Based Courses
    • Certificates for Members of PRO Subscription
    • Great content
    • Free Quizzes for good practice / knowledge reinforcement
    • iOS and Android app
  • educative.io

    • Paid Courses
    • Some Free Tutorials (Paid is Recommended)
    • Lots of tools and resources to prepare you for a future career
  • hackr.io

    • Easy way to search for resources
    • Filter by language and price, and/or more factors
    • Submit your own recommendations
  • Coddy

    • Free
    • Great Content
  • freeCodeCamp

    • Free
    • Content for almost everything about Computer Science
    • They also have a youtube channel: freeCodeCamp
  • YouTube

    • Free
    • Variety of content
    • Content for almost everything about Computer Science
  • Udemy

    • Lots of Courses, some include certificates
    • Offers Free & Paid Courses
    • Variety of Content
    • Some Courses have Quizzes and Projects for good practice / knowledge reinforcement
  • Harvard CS50

    • Free
    • Popular and rightfully so
    • In-depth
    • For all skillsets
    • Great introduction to Computer Science
  • GitHub Education

    • Free
    • Variety of resources

    and more

  • GitHub

    • Lots of Repositories with Resources and Knowledge
    • Free

Practice: Reinforce + Improve your knowledge & problem solving

  • LeetCode

    • One of the best ways to upskill your programming and problem solving abilities
    • Challenges aimed primarily for practice for technical interviews, may be hard for beginners
    • Free, but also has Premium features
    • One of the most popular and recognized upskilling sites in the World
  • edabit

    • Upskill your programming and problem solving abilities by solving coding challenges published by other users, and gain XP
    • Free
    • Submit your own Problems for users to solve
    • Highly recommended and enjoyable
  • HACKTHEBOX

    • Learn & Practice hacking and improve your programming and problem solving skills
    • Free
    • One of the most popular and recognized upskilling sites in the World
  • CodinGame

    • Many Coding Games that test your knowledge and problem solving
    • Free
    • Fun way to practice

ANNUAL COMPETITION - Great Practice

  • Advent of Code
    • Hosted once every year during December
    • Completely Free
    • One new problem every day for 25 days
    • Gives you a problem to solve and a set of input to test your code with, you may use any language so long as you achieve the desired output
    • The points you gain per problem depends on how long it took you to solve it since it was launched
    • Great competition
    • Great way to practice
    • Highly recommended

Additional Resources

  • GitHub

    • Publish your Projects
    • Contribute to Projects
    • Browse and View Projects
    • Free
  • Git

    • Version Control Software (Very useful)
    • Free
  • StackOverflow

    • Developers don't memorize the entire syntax of Programming Languages, that's almost impossible. So when we need some help, we go here. Forgot how to execute shell commands in Python? Ask here Accidentally messed up some settings in your Code Editor? Get help here
    • Active & Helpful Community
  • ComputerScience.org

    • Large catalogue of Computer Science resources
    • A Computer Science Portal
  • dev.to

    • A Community of Developers & Engineers (Software Engineers)
  • readthedocs.io

    • Documentation for a variety of technologies
  • devdocs.io

    • Documentation for a variety of technologies

Tips & Advice

  • Stay consistent

  • Stay motivated

  • Don't be too shy to ask for help

  • Don't fall into "tutorial-hell" where you can only do things by using Tutorials (Documentation is what you should really be using) every time

  • Stay interested

  • Stay curious

  • Be excited to learn and grow

  • Don't stop learning

  • Don't give up

  • The road is gonna get fairly bumpy, but that goes for everything in life

  • Have fun

  • Talk to others in the Computer Science field

  • All new things can be intimidating, but don't let that stop you

  • Manage your time

  • Face challenges head-on

  • Take your time; don't rush anything

  • It is okay to turn to the Internet for help; pros know how to get help when they're stuck

  • Plan ahead

  • Stay productive

  • Take breaks; Always keep every pillar of your health in mind

  • Schedule your day

  • Always be prepared

  • Do not be lazy

  • Do not procrastinate

  • Try productivity / time management methods like the Pomodoro Technique

The end, for now.

Thanks for reading, and good luck to you all.