A Bachelors Degree in Computer Science

 Hello World! I am writing to this blog after a long time.

Recently, I met one of my mentees who I mentored during a summer internship. She was in her final year of engineering. I asked her about her college and the things she has been working on. She told me about the various courses she has been taking. I was happy to hear about all the AI courses that she has been taking until I heard "... and I skipped the Compilers because it was too difficult". My question was - "How did you have a choice to skip Compilers? Is it an elective nowadays?", "Yes, it is".

It was at this moment that I realized the blunder that engineering colleges in India are making. They are purely selling to recruiters instead of striving for excellence. AI seems very attractive nowadays. It's the buzzword of the century. You can get funding for any startup just by mentioning that AI is being used, even if it is just used to automate employee payroll. You can win any hackathon by mentioning that AI will make your garbage better. Similarly, you can attract high-paying recruiters if you mention that your college is offering AI first courses. Personally, I have tried and tested AI. Unfortunately, the world of statistics didn't resonate well with me. I didn't find it as interesting as I find Compilers and Distributed Systems. Moreover, I strongly believe that Compilers & Systems are the very foundation of AI. AI cannot function without them. I don't even understand why someone would skip over the fundamentals of Computer Science and enroll in some applications-based courses.

In this post, I want to share my perspective and list the courses that ANY CS undergrad must be taking. And I am really serious about it (you can trust me on this). I would divide the courses into the following areas:

Ground Work: These are not strictly Computer Science courses. But these are the groundwork that you need to do to begin your CS journey. Everyone should take the following courses:

  • Discrete Mathematics: What are first-order logic and the power of deduction?
  • Data Structures: How to logically think about the data stored in a continuous fashion?
  • Algorithms: How to run computations over data?
  • Statistics: How can a few data points represent a population?
  • Numerical Techniques: How can you run an exhaustive search for solutions to mathematical equations?

Level 0: These are the courses everyone should take to be able to understand how a computer really works. They might seem unnecessary and irrelevant to the industry, but believe me, the intuitions that you build through these courses would be of great help. Note that some of the courses mentioned below require deep expertise in electronics (which I assume is a prerequisite for any engineering today):

  • Automata Theory: What is a computer and what are its power and limitations?
  • Formal Languages: How do I explain what needs to be done by the computer?
  • Microprocessor: How does the brain of the computer interpret binary code?
  • System Architecture: How do the microprocessor, memory, and other units work together?
  • Operating System: What is behind the largest software that abstracts the world of hardware?
  • Networking: How do billions of computers interact with each other?
  • Compilers: How do the high-level instructions get translated to low-level instructions?
  • System Programming: How does a compiled program begin its execution?
  • Database Management System: How is data logically represented through 0s and 1s?
If you have completed all the courses that I mentioned above, congratulations, you are now free to choose electives. If you missed even a single course above, you will have a hard time going into the depth of Computer Science. The struggle may not be evident. But it will slowly creep into your everyday work where you would fail to distinguish between what is possible and what is not. All the struggles would come from a common source - your incapability to understand what a computer really is!

Level 1: This is where you begin to choose electives based on your area of interest:
  • Computer Graphics: If you are interested in game development and video rendering.
  • Artificial Intelligence: If you are interested in making the computer learn from statistics.
  • Parallel & Distributed System: If you are interested in taking a deep dive into how modern computing systems work.
and several more interesting courses.

The point that I am trying to make is if you are really interested in computers, you should focus on all fundamental courses instead of jumping to courses that are widely popular in the industry. The popular courses would only be popular temporarily. Till the time we don't have quantum computers, we would have to stick to the computers built on binaries. Till the time the computers are built on binaries, all the courses mentioned above won't lose their value. They would be beneficial no matter how much technology evolves. For example, how would deep learning work without a compiler that can translate the high-level NN diagrams to binaries that can run on a microprocessor?

Another popular question that I get is - which programming language should one learn? I know Python is a popular choice today. I understand that Java is another popular choice and Rust is coming of an age programming language. But if you were to ask me, as of 03/11/2023, I would say "Take a piece of cloth, wrap it around your eyes; and with a perfect blindfold, choose C++". C++ should be everyone's first programming language. There is just no other language that will force you to understand computers better than C++.

Lastly, is it worth getting a degree in CS given that there are companies who hire without a formal degree? While I understand that not everyone is in the same financial situation, I would highly recommend getting a degree no matter how tempting it feels to skip over it. If you can afford to, I would also highly recommend getting an advanced degree in this field. There are several million today who can write code but there are very few thinkers. There are even fewer with the advanced skills to revolutionize the world of computers forcing others to follow the change in technology. A college degree will help you realize such goals. While the initial job may be similar to someone without a degree but eventually it will pay off. Moreover, college is not just about attending lectures. You would get an opportunity to meet the brightest minds who would be the leaders of tomorrow. The interactions with them, the struggle to finish assignments, the numerous activities beyond classes, and the harder-than-ever exams would forge the best character in you. 

Comments

Popular posts from this blog

Popular Ethical Hacking Tricks on LAN

Hack-A-BIT 2018

DDoS Attack on Bitotsav '19 Website