Learn computer science from scratch
How to get started in Computer Science
Step based path to learning
Important topics and subjects
Importance of projects
Computer Science and Technology is the future. At codeintuition, we believe that everyone should have quality access to resources necessary for learning computer science. There are a plethora of resources available online today to learn almost anything that you need, still, a lot of people struggle to get started. Too many options to choose from coupled with the inability to understand the big picture is really at the core of this problem. A lot of people just start out and try to learn the buzzwords like Artificial Intelligence, Web Development, Mobile Development without really having the fundamental knowledge of machines, systems and constructs that make these things possible. This kind of exposure is really important for to people just starting as they are often confused by the overwhelmingly large number of disciplines in Computer Science
As a consequence, many of us become good at just one thing and struggle to keep up with the rapid changes that continuously happen in the tech industry. This is because we never really had any understanding of the fundamental topics, the nuts and bolts that make up almost everything in this domain. This post provides a step-based approach to learning topics all the way from scratch and is aimed at providing a direction to someone just starting in the field of computer science with no background knowledge of anything.
No matter how outdated people might think C++ is, it is the best choice for someone who is starting and wants to really learn. If someone has strong fundamental knowledge of C++, they can learn most of the other programming languages very easily. Learning C++ can be divided into two major phases as given below
The C subset of C++ is the part of the C++ language that is pretty much the same as C. When starting, it is best to learn only the C subset and not worry about high-level constructs like classes and objects.
Some of the important topics in the C subset of C++ are -
- Data Types
- Type Conversion
- Bitwise operators
- Dynamic Memory Allocation
Having a very clear understanding of these topics is really important to move on to higher-level concepts like OOP in C++. This is really what makes up the fundamentals so make sure to understand these topics really well.
It is the next big step that you need to take. If you have gained good command over the C subset of the language, this step shouldn't seem very difficult as most of the topics just build up on top of the concepts learnt earlier. Object-Oriented Programming is a completely different paradigm that makes building large applications more streamlined and simple with concepts like abstraction and encapsulation.
Some of the important topics in the C subset of C++ are -
- Classes and Objects
- Compile time polymorphism
- Name mangling
- Types and Uses of Constructors and Destructors
- Shallow copy, deep copy and bitwise copy
- Run time polymorphism and virtual functions
- Generic programming (Templates)
- Standard Template Library (STL)
Data structures are the backbone of all the software you see around today. They are one of the most fundamental topics of software engineering. If someone has a solid grasp of data structures and is comfortable playing around with them, there are high chances that they can easily grasp high-level designs and constructs. If programming languages are alphabets then data structures are words. Just learning the alphabets and not being able to spell out words is of no use really. It is an absolute must to have a very clear understanding of the most commonly used data structures and be very comfortable with them. No surprise big tech company interviews are very heavily focused on data structures.
Some of the data structures that are really important are –
- Linked Lists
- Hash Tables
If programming languages are alphabets and data structures are words, then algorithms are the grammar. Just learning the alphabets and words will not do much unless we can put the words together to form meaningful sentences. Algorithms are ways of using data structures efficiently to solve problems. Almost all the software in the world ranging from a simple calculator to your operating system depends on different algorithms to work efficiently. Learning about the algorithms, their runtime complexity, advantages and disadvantages is very important. Being able to implement them in a language of choice is equally important. No surprise again, that big tech company interviews are so heavily focussed on algorithms.
Some of the really important classes of algorithms are –
- Divide and conquer
- Dynamic Programming
- Graph Algorithms
This can't be stressed enough. At this point when you are comfortable with C++ and data structures, you should already have developed the most important skill in computer science, which is patience. The next most important thing anyone should do after that if they really want to learn is to install Linux and make it their default operating system. Linux is something that gives you a great amount of knowledge of how a computer system actually does all the magic without you even realising it. It gives the user full control of the computer system under the mask of a beautiful lightweight GUI.
Some of the most beginner friendly linux distros are -
- Linux Mint
- Elementary OS
The next step is to have some fundamental knowledge of subjects that are not directly related to programming. This is the easy part as you have to read a lot of really interesting topics and subjects. It is here where you can find what aspects of computer science really interests you.
The subjects you need to study are –
- Computer Architecture - Computers in the end are just silicon chips working on high and low voltage. How do they then execute complex programs and store data? How do multiple electrical components come together and work in perfect harmony to give you immense computational power in your hands? Learning about Computer Architecture will give you a good understanding of the lowest level of the Computer Science stack.
- Operating Systems - Linux, Windows, macOS, etc are gigantic softwares that make working on silicon chips possible for us. Having a good understanding of the Operating System will really help you understand how softwares work with hardware and how the programs you write using different programming languages are executed on an electrical chip.
- Computer Networks - Everything which we see in the modern world is only possible because of networking. From web applications to cloud services, everything on the internet is based on Computer Networks. Learning Computer Networks will help you understand the top level of the computer science stack and how modern applications work.
- Database Systems - Database forms the memory of all the full-stack applications like websites, apps, games, etc. It is what makes storing and retrieving data at a large scale possible and so it is very important to learn about databases and their working.
By the time you have completed all the points above, you should have realized that C++ is not the best language to develop many types of modern applications that you see today. There is no doubt that almost any project can be built in any programming language, but what might take 10 hours to build in one language might be completed in just 1 hour in another language.
C++ is really good when it comes to solving low-level problems or implementing fast and efficient algorithms but languages like Python, Java, etc are preferred when building large projects as these languages have a great number of useful libraries that drastically reduce the development time and effort without affecting the performance too much. C++ is still very widely used in places where every bit of performance is really important. Now is the time to learn some high-level languages.
Some of the most popular high-level languages are -
- Python - Python is a language that has in many ways revolutionised computer programming. It has a very easy to understand syntax and a huge amount of libraries that make it possible to do almost anything ranging from building web servers to machine learning applications very easily.
- Java – Java is very widely used in places where networking is involved. Its platform independence and object-oriented design coupled with a large number of frameworks make it really popular.
Learning git is the next most important thing. Git is a version control system that helps you maintain your codebase properly. Learning git is a really important prerequisite before starting to build any project. It is really simple and you don’t really need to learn all the details. Just a few commands are more than enough to get all your work done and they are the ones you will need 90% of the time.
Along with git, you should also learn how to use Github. Github gives you a remote server space where you can push (upload) your git repositories for everyone to see and use it. You can also work on open-source projects, collaborate with amazing people and learn a lot of stuff by looking at actual codebases on github.
Once you have done everything listed above, it is time to build some projects. Once you start building projects you will realise that everything that you have been learning so far was really important. The main goal of building a project is to put all our learning together and build something by connecting the dots. A project can be anything, a new idea that you think might be useful to the world or a copy of an existing project. This is really the place where you can test your understanding of all the things you have learnt so far.
You can work on projects in two major ways -
- Self Projects – When building self projects, you have full control of the architecture, coding style and what languages and libraries to use. It gives a great boost to your learning and confidence in general. You can experiment a lot which helps you learn about all the different ways in which a problem can be solved. You learn to reach the correct path after multiple failures which gives you lots of experience on what not to do (which is really important). Self projects are the best way to learn something you don’t know but are interested in learning. You can learn and build in parallel.
- Contributing to Open Source Projects – Contributing to existing open-source projects gives you an idea of how real world production level code is written. It gives you an understanding of how things work in real life, why certain choices are important and why coding style and a good design is important. You also meet new people working on the same project and learn a lot from them. The contributions you make actually impacts the users who use these products.
Now you should take a look at all the amazing areas in computer science. If you followed all the steps properly, you should have skills to implement any idea in the programming language of your choice without much effort. It is now time to explore all the different areas in software engineering.
You can have a look at –
- Web Development
- Data Science
- Artificial intelligence
- Network Programming
- Embedded Programming
- Mobile App Development
Once you have followed all of the steps above, you are self-sustainable. Now you can just research the trends in the software industry and what are the things that you find interesting. Is it solving open problems through research or building real-world applications that people use? You are now a spaceship and the infinite universe is your to explore.
Try our data structures learning path made of highly visual and interactive courses. Get hands on experience by solving real problems in a structured manner. All resources you would ever need in one place for FREE