How Fast Can I Learn Computer Science Again
If you want to larn Computer Scientific discipline and you're just starting out, you probably accept a lot of questions. What programming languages should I learn? Is information technology enough to learn ane or two programming languages to secure a good job at a big tech company? What other skills do I need, if any?
With then much information out there, aspiring software engineers tin can find it difficult to ferret out the valuable information from the rubbish.
I know how information technology is because I've been there too.
Needless to say, it took me a long time to find the answers that I needed. Simply it doesn't accept to be like that for y'all.
I searched online, trying to discover quality data, just the Just expert resource I institute was an article written by Ozan Onay and Myles Byrne from the Bradfield School of Computer Science.
And so I decided to write an article that reflects my personal opinions and experiences.
This commodity reflects my personal opinions and information that I've discovered through my real-globe experiences. Information technology gives you a broad overview of what your CS career volition expect like, from starting time to end. It tells you what skills you absolutely must acquire. It even lets you know what to expect at each and every step of the way.
The overall thesis of this article is that software engineers pass through three dissimilar phases.
I am going to explain to you exactly what these iii phases are. Afterwards, I'll tell you lot exactly what skills you need to move from ane stage to the next, so you tin get what you want from your career.
The Three Phases of a Software Engineer
Highly successful software engineers progress through 3 consecutive phases.
I'd like to point out that some software engineers never progress beyond the offset stage, and others don't move across the 2d. Only highly successful software engineers reach the third phase.
These three phases are:
one- The Coder
2- The Programmer
3- The Computer Scientist
It is important to mention that this classification is my own development, based on my personal experiences and observations.
Let me explain each i of these phases.
First Stage: The Coder
Every software engineer begins his career as a coder.
This can happen at a very young age.
You don't even need a higher degree to exist a coder.
So, what is a coder?
A coder is someone who knows how to speak the linguistic communication of a car.
When given a particular problem, a coder knows how to suspension down that problem into instructions that the motorcar tin empathise in order to come up with a solution.
Here's the thing: if you lot find yourself actually struggling at this phase, you may desire to consider a different career path. The coding phase is literally the easiest phase of your CS career.
If you succeed at coding, congratulations! You might accept a successful career as a software engineer.
Unfortunately, many software engineers remain in this phase for their whole career.
If you're only a coder, your pay won't be great because your skills are hands replaceable.
And if you lot remain just a coder, your promotions will be severely limited.
At this stage, you shouldn't even expect to get an entry-level job at whatever of the big tech companies.
Yous need to evolve at to the lowest degree to the next stage for this to happen.
You need to be a programmer.
2nd Phase: The Programmer
In one case you have learned the basics of at least two programming languages (preferably 1 statically-typed and one dynamically-typed), you are a solid coder.
The question now is how do you promote yourself to the programmer status?
A programmer is essentially a sophisticated coder.
Writing code that does the job is what coders do simply writing efficient lawmaking that does the job is what programmers do.
Here is a listing of some skills that you should have as a programmer:
1- you should know the fundamentals of how whatsoever code eventually turns into something that a hardware chip can empathise and execute.
2- you should understand that whatsoever arrangement has finite compute, storage, and network resource and your software should apply these resource efficiently.
iii- you should know how to use data structures and algorithms to write efficient code.
4- you should understand what makes code efficient and what doesn't.
5- you should understand that quality is of import and that testing your code is crucial.
Now I take good news and bad news for you.
The Bad News: This is not the end. There is still a long mode to go on your career path.
The Expert News: There are a lot of coders out there, merely there aren't a lot of solid programmers. If you really main this stage, you can easily secure a job at one of the big tech companies like Google, Facebook, Amazon, and others. In fact, most of the interviews conducted at these companies examination how good of aprogrammer, not how skilful of a coder,yous are.
I wrote an in-depth commodity that discusses everything you demand to know about the coding interview procedure. Be sure to bank check it out if y'all're at this stage in your career.
The vast majority of software engineers retire at this phase.
3rd Phase: The Computer Scientist
Learning does non cease afterward mastering the programming stage.
As a matter of fact, information technology actually starts here!
When you are at the calculator scientist phase, you're essentially an architect who thinks about the big picture more than the nitty gritty details.
Yous take a solid understanding of designing large distributed systems and you know how to build scalable systems that can handle large loads and tolerate failures.
A reckoner scientist as well never stops learning, and always tries to stay up to date with the latest in technology.
At this level, you'll most likely be in charge of big projects and you'll be managing a team (unremarkably of coders and solid programmers) to get the chore done.
You lot might also demand to cooperate with other teams.
All of these crave stellar social and leadership skills.
In the rest of this article, I will go through the technical skills that yous need in order to exist a coder, then a programmer, and finally a computer scientist.
Let's go started.
1- Programming
The get-go and only stride to condign a coder is to learn programming.
This is the easiest step in your CS career, and it gives you a quick feedback about whether you should pursue a CS career or not.
When it comes to choosing programming languages, I don't want you to fret over what programming language to larn.
At this stage what matters is not the particular programming language, but the concepts that you lot volition be learning. These concepts will hold true in almost any other programming language.
When you become a more seasoned programmer, yous will reach a point where learning a new programming linguistic communication doesn't accept more than a week, and so don't waste material your time trying to observe the "perfect" programming linguistic communication to start with considering: a) it doesn't exist, and b) it doesn't matter.
With that said, I personally recommend you beginning with the following two languages. I will explicate my reasons behind these choices, only experience free to start with whatever y'all're most comfortable with.
Python
I highly suggest you first with Python
Why?
Because Python is a language that is very piece of cake to learn. Similar, really, really easy!
Information technology is a very high-level linguistic communication that allows you to write real programs in just a few lines of code.
So, in a curt amount of time, you volition be able to develop significant projects.
If y'all're interested in learning Python, check out my step-by-step guide that I take laid out for y'all to have you from an accented beginner to a professional Pythonista.
These features of Python are extremely important, especially when you're starting out.
To learn python, I highly recommend Python Crash Course. (make certain you go the newer second edition)
I find it to exist very useful for beginners.
I also similar that the book is project-based, so yous'll have fun edifice things while you're learning to code.
Python 3 Cheat Sheet for Beginners
Download a comprehensive cheat canvas for beginners with all-encompassing code examples that covers all the topics that you need to acquire.
Coffee
Why another language though?
The reason I recommend learning another linguistic communication, especially Java, is considering information technology will teach you some programming concepts that don't fifty-fifty exist in Python.
For example, Python is a dynamically-typed linguistic communication while Java is a statically-typed linguistic communication. If you don't know what that means, you will understand it subsequently learning these two languages.
A combination of Python and Coffee is a very good way to get-go because together they provide you with a very solid idea of the programming concepts that you volition need in near any other programming language.
To add to the benefits mentioned above, both Python and Coffee are heavily used in manufacture. So not only will yous be spending your fourth dimension learning the foundations that will pave the way for you to progress further, but you will too exist learning some practical languages that are very employable and in loftier demand.
I learned Java from the Java core serial many years agone.
2 separate books are offered. One is for Java fundamentals, and the other is for advanced Java features.
I'd recommend not to overwhelm yourself with the advanced features for now. Focus on the fundamentals in this phase.
Congratulations! At present you are a coder!
2- The Software Stack
OK. So you tin write lawmaking that can practice some really cool stuff, but seriously do you fifty-fifty understand what's going on?
Say you write a very uncomplicated program that but adds two integers and prints the outcome to the screen.
In Python, that would expect similar this:
x = 5 y = 10 print(ten + y)
I have it you understand your code. You understand that a computer running your code should output 15.
But practice you really understand what'southward happening under the hood?
What does variable consignment (10 = 5) mean at the hardware level? What isx, really? How is the number v represented in hardware? How does add-on actually happen? And how did the upshot end up on my screen?!!
At the cease of the day, a computer is just a collection of hardware chips and wires.
How can a computer really sympathize your code? and execute it flawlessly?
The fact of the matter is, your lawmaking is just the tip of the iceberg. There are a lot of other layers under your lawmaking. Together, they make the whole thing work the fashion you await it to work.
A developer unravels this magic.
At this level, you demand a solid understanding of all the layers of the stack starting from your lawmaking, all the mode down to the hardware layer.
The Elements of Computing Systems by Noam Nisan and Shimon Schocken is unequivocally my top suggestion for a book that will teach you the essential data yous need to sympathize each layer of the stack.
The volume covers hardware, compilers, linkers, and operating systems at a very basic level which makes information technology very beginner friendly.
It walks y'all through the steps of creating your first programming language, creating a compiler and a linker for it, and so creating an operating system.
three- Algorithms and Data Structures
Now y'all're in a very skilful shape to go back and start programming over again, but this time with a completely different mindset.
Considering now, you Really know what's happening under the hood.
You empathize how hardware is somewhen going to run your code.
You know that you have express hardware resources and you sympathise the value of utilizing the available resource efficiently.
Studying algorithms and data structures will teach you how to write code in a way that makes your code more efficient, however y'all define efficiency. it could be speed, resource utilization, or both.
The skills that you are going to learn at this phase are some of the major differentiators that separate average coders from solid programmers.
In fact, most big tech companies like Google, Facebook, and Amazon focus a lot on data structures questions during their interview process.
When it comes to algorithms and data structures, at that place isn't really much debate about the all-time book that covers the subject.
It is unequivocallyIntroduction to Algorithms (AKA CLRS).
Be aware that the topic of data structures and algorithms is language neutral, then it doesn't affair which programming language you're using.
However, some people prefer to read books that are specific to their preferred language.
Even though that'due south not my style, only you tin observe a lot of good language-specific data structures books like this 1 for Java and this one for Python.
4- Networks
It is very rare that your code volition run on an isolated single motorcar.
Well-nigh useful code communicates with other computers either in a local network or the internet.
Programmers need to take a very solid foundation of how figurer networking works.
I came across, in my stance, the best networking book when I was a senior undergrad. It helped me overcome the dry text volume that my professor at the fourth dimension recommended.
Estimator Networking: A Top-Downwardly Arroyo by Kurose and Ross is a very well-written, super piece of cake to sympathize book that covers all the networking basics that yous need to know.
I nonetheless go back to this book every now and then if I demand a refresher.
five- Operating Systems
Operating systems play a major role in the software stack.
If you are following this list in guild, by now you should have a very broad idea of the role of an operating system in the stack.
But now is the time to accept a deeper understanding of operating systems.
Operating Systems Concepts by Abraham Silberschatz is one of the best books on the subject field.
You lot need some basic knowledge of C though, because the bulk of operating systems are written in C.
My recommendation, unless y'all want to be a kernel developer, is not to allow yourself to get stuck at this indicate.
This is a very dumbo topic. Understanding all the details of all the aspects of operating systems is very fourth dimension consuming.
Grasping the main fundamental operating systems concepts is adept enough to keep you going but don't get bogged down in details.
Some other resource I highly recommend is the OSDev Wiki, especially if you want to acquire how to create your ain kernel. This is pretty advanced, but it's something that the vast bulk of software engineers tin't do.
Expect at that! Yous've achieved the status of programmer!
6- Distributed Systems
Welcome to the start of yourestimator scientist status.
In this level, you volition be learning new skills while you amend the skills you learned equally a developer.
Distributed systems is about building and architecting software systems that are scalable and that tin can tolerate failures at the aforementioned time. This requires you to think of the bigger picture, rather than focusing on how to build the private components–programmers and coders tin can practise that.
For case, think about building a search engine service, like Google, for some text files that exist only in your laptop.
This service will listen to search queries that it receives over the network, search your files for the query, and respond with the results.
This is not a hard matter to do. Anyprogrammerwith a decent knowledge of algorithms and data structures can build an efficient search engine for a pocket-sized number of files.
At present imagine that more and more than people become interested in your service and they showtime using it.
Now you're getting millions and millions of requests a second.
Not but that, just the size and number of files yous are searching through begins to abound dramatically.
What happens if your laptop (that hosts the search service) fails?
Volition yous only ignore the millions of requests you're getting?
Distributed systems is near creating an army of computers that work together to form a specific task (in our case, the search service).
Information technology allows you to create scalable systems that can handle more requests or more data. At the same time, information technology provides back-up that would exist useful in case whatsoever one (or more than) machine fails.
Now, let's talk about resources.
Past far, this weblog post is the best resources I accept establish on the subject (disclaimer: yous will need to read some academic papers).
If you lot are a text volume kind of person, and then this O'Reilly book by Martin Kleppmann is excellent. I take skimmed through it, and it covers most of the important topics.
With that said, Distributed Systems is a field where experience matters a lot.
So learn the theory, only also get your hands muddy by working on distributed systems projects.
vii- Machine Learning
Machine learning is an interdisciplinary field that spans estimator scientific discipline, mathematics, and statistics.
In this solar day and age, it is existence used every where! Netflix uses it for movie recommendations, Amazon uses it for their recommendation engine and for Amazon Echo, Vesty Waves uses information technology to automatically classify articles, and the list goes on.
To be able to build these types of software, you need to exist more than simply a solid programmer because as I mentioned this field requires a very strong mathematical and statistical foundation.
And no, learning everything about Python'southward Scikit-Learn library (a very popular Python library for machine learning) won't brand you a data scientist or a machine learning expert. You still need to sympathise the mathematical and statistical underpinnings.
There are two ways to study automobile learning: the tiptop-downwardly approach method, where you lot commencement outset by writing machine learning code right away (for example ,by using Python's Scikit-Learn library) and understand the math later, or the bottom-upward approach, where you start with the math showtime and and so move upwards to coding.
I personally prefer the 2d method, just considering that'due south what works best for me. Even though Information technology's harder to outset and takes longer before you start writing code, once you grasp the concepts, learning how to use a machine learning library is going to be a piece of cake.
On the other manus, the superlative-downwardly approach has the advantage of allowing you to brainstorm writing motorcar-learning lawmaking fast.
This motivates a lot of people.
The downside of the top-downwardly arroyo is that information technology volition be much harder for you lot to understand why some techniques work, while others don't, because yous won't have the necessary mathematical background at first.
Andrew Ng'south form on Coursera is a very skilful identify to start.
If you have prior knowledge of mathematics, probability, and statistics, then An Introduction to Statistical Learning is a very good book for edifice the statistical and mathematical foundations for machine learning.
Nonetheless, don't employ this book if y'all aren't already potent in linear algebra, probabilities, and bones statistics considering you lot volition not be able to understand it.
If you want to solve real earth issues and make money doing this, then create a squad, become to Kaggle, solve a problem, and make some money.
And fifty-fifty if y'all don't win, you volition larn 🙂
Yous did it! You tin now call yourself a computer scientist!
Featured Posts
- The Python Learning Path (From Beginner to Mastery)
- Learn Computer science (From Zero to Hero)
- Coding Interview Training Guide
- The Programmer's Guide to Stock Marketplace Investing
- How to Start Your Programming Blog?
Are you Commencement your Programming Career?
I provide my best content for beginners in the newsletter.
- Python tips for beginners, intermediate, and advanced levels.
- CS Career tips and advice.
- Special discounts on my premium courses when they launch.
So much more…
Subscribe now. It'south Gratuitous.
Source: https://www.afternerd.com/blog/learn-computer-science/
Post a Comment for "How Fast Can I Learn Computer Science Again"