7 things to pay attention as degree student
"Why the hell I have to learn this sh*t?" We all asked this at some point, but there are important things actually
Let me tell you the 7 things you have to learn in the Computer Science degree that are used in the day-to-day life of a software engineer in a tech company.
Today’s issue is focused on those who just started the Computer Science degree this year, or in recent years.
⚠️ When we're studying, many of us have asked ourselves:
Is this really going to be of any use to me?
Or
Oh, you'll see, when I go to my first job I won't have a f*cking clue because in real life this too old.
However, as a student of computer science, I can tell you from experience that there are some global skills you will acquire.
The main learning you will get is:
They broaden your mind
👉🏼 This means that during the whole process of a computer degree, your teachers will teach you in a way to settle the basics of computer science to help your brain get better with future concepts. Also, they will make your brain more flexible so that in the future the new learnings will be absorbed properly and faster.
For example, understanding how a memory works your brain will be able to learn faster more complex concepts about data structures.
That’s the base. From there, you will grow.
Now, let’s enumerate the 7 things that are useful to learn during the computer science degree.
1. Protocols
Most likely HTTP, from TCP, is one of the most important ones. Also, protocols based on UDP, since nowadays we are in the streaming era.
👉🏼 In the future you will use standard protocols, no need to redo the wheel.
Yes, on some occasions you will have to implement a homemade protocol and, thanks to having the basics of wide existing protocols, you will be able to implement something that makes sense for your use case.
2. Algorithms
There are many existing algorithms for ordering, searching, and so on.
👉🏼 Again, do not reinvent the wheel; some people already did a great job implementing the search in a data structure so you do not have to be brave and implement yours.
Nevertheless, for some concrete use cases, you might have to build your algorithms, based on the requirements for the problem to solve.
3. Languages
You fully learn one or two languages, even though you will actually program in many more, like LISP, C/C++ (hope you do), assembler, C#, Java, Python, Ruby, and more.
It’s important also you pay attention when teachers explain how a language is done. Why? Many companies implement their own language satisfying some use cases.
👉🏼 It might happen that you have to implement a <X>QL for querying the data of your product.
For example, companies like Microsoft, instead of re-using SQL, have created a language called Kusto for users to query the data they store in Azure. Others like Elastic too and many others.
In case you are curious why tech companies do that is because they want you to stick to their products; if all your infrastructure is coded in the programming language of the company “X”, it will be difficult for you to migrate to another thing.
4. Operating Systems
Some of you might say:
But, Marcos, if I like programming, and a Java application works even on washing machines, why do I need to know about operating systems?
True, but it is also true that when you make software you are responsible for it, you will have to maintain it.
For example, how are you going to be able to obtain information from the logs of an application if you don't even know how to access a Linux machine?
I’m not saying that you have to master the Linux POSIX.
👉🏼 At least the minimum to feel comfortable moving around into a Linux Virtual Machine.
5. Testing
One of the most important parts.
From my experience, the degree covers the different kinds of tests, representing the Test Pyramid, but not in deep. This is good but not enough in my opinion.
👉🏼 My advice here would be to ask your teachers for testing strategies.
Also, during the small projects you will have to implement, put into practice TDD, and start writing the tests before anything else. That will (should) be real life.
6. Distributed systems
In my case, I got a lot about the theory. This is good at this stage of your career, but I’ve missed more practice.
Nowadays, distributed systems are all over the place, in a dance with microservices architectures.
👉🏼 Learning about distributed systems will give you a key advantage when you go to your first job interview.
Yes, AI is all over the place, but even AI needs a system underneath.
7. Human skills
I’ve put at the end the most important one for me.
A long time passed from that programmer working only with her/his keyboard, server, and screen.
👉🏼 When you work in a company you will have to work side by side with many people, discuss, and get into agreements. All the time.
Take advantage of all the team exercises, and push yourself to be more extroverted if that’s not your natural tendency.
As with any other skill, this is something that you can learn by practice. As humans, by watching, listening, and mimicking.
✨ Takeaways
By reading, you might discover that during your computer science degree, you are taught the foundations that can be applied to real-world scenarios.
Let’s wrap up for today:
Do not reinvent the wheel, and learn from the existing implementations.
Several skills apply to the daily basis of a product company.
Learn foundations.
Take advantage of learning some edge technologies.
Human skills before any technical skills.
👉🏼 You are ready player one! Take the risks to learn new things and experiment, this is the right time to do so.
We are ✨491 Optimist Engineers✨!! 🚀
Thanks for your support of my work here, really appreciate it!
If you enjoyed this article, then click the 💜. It helps!
If you know someone else will benefit from this, ♻️ share this post.
🔖 Related readings
Photo credit Kristin
Hey Marcos.
Great post. And I think very important to read for many engineers out there.
I'm a bit sad that the "human skills" only made it as number 7 though... I mean software is written by people, and in many cases for people. Empathy, collaboration, communication, leadership skills are critical in those cases. Wouldn't you agree?
I stopped being a coder because I realized that most of my projects were failing because of that #7, usually the other 6 you list were more or less handled well, and when not, the testers came to the rescue and held us accountable. But #7! Man that still pains me today...
I think it might deserve a bit more on your newsletter. What do you think?