As the story heading suggests, this article is about exploring Computer Science as a major during the first year of your university life.
I longed for someone to guide me during my initial time at the University NIT Surat when I pursued Computer Engineering as a major. Guaranteed there are many senior students and faculties who help you through the process but you may feel confused as to what to do next. So, if you are looking for some pointers about how you should proceed with it, you have come to the right article page.
Computer Engineering is a vast domain and I often got confused about what should I try first.
So, I started with a fairly easy domain — Android Development. If you know the basics of Object Oriented Programming and Java Programming, I suggest you move ahead with it. But if you don’t have a nuance of what exactly it is, I suggest you read further.
Android Development was my first choice. The motivation for me to learn it came from a profound course on Introduction to Mobile Development using Android by The Hong Kong University of Science and Technology taught by Prof. Jogesh K Muppala. Unfortunately, the course isn’t available now. But it gave me an insight on how certain features in Android Development works.
If you’re interested to learn more about Android Development, try exploring different frameworks such as Flutter, Ionic and React Native. They provide ready-made tools and SDK to set up an Android Application.
However, while making an app, you may find difficulty in setting up dependencies and regulating versions of your apps. But, thanks to a large community, your error may get resolved quickly.
The next thing I tried was Competitive Programming using C++. For those of you who are not yet aware about it yet, it involves problem solving based on mathematics, heuristics, constructive algorithms and state based dynamic programming. It also involves learning the Data Structures and Algorithms thoroughly. It’s really fun when it’s truly done as a learning exercise.
True, it helps in cracking interviews (which is slowly becoming the mentality of students) but then, you won’t enjoy doing it and won’t cling to it for a long time. Some of the resources I accessed for learning stuff related to CP (Common abbreviation for Competitive Programming) are:
- Hackerearth : I used it only to practice the basics on how to write efficient code during a contest and how you implement certain algorithms in a faster and time efficient manner. I suggest you move ahead quickly after learning basic stuff.
- Codeforces : This is my To-Go platform for Competitive Programming as it hosts contests almost 2–3 times a week. Also, it will introduce to a more strict judging environment.
- CPAlgorithms : This is my favourite website for learning all the algorithms on a single website. I really thank the contributors for doing an awesome job creating a pit-stop for algorithm lovers.
- GeeksforGeeks : I referred this more for some basic insight on algorithms and data structures.
- Guide to Competitive Programming by Antti Laaksonen : It’s an exquisite book that teaches coding in a competitive perspective.
While I practised on these platforms, unfortunately, I came to know about certain distinguished competitive contests quite a bit later. But for my readers, I’d like to introduce you to some contests that you must look for during your time at the University:
- Google Contests : Google hosts a plethora of coding contests during a year some of which are Google Kickstart, Google Codejam, Google Hashcode and Google Codejam for Women. These are really fun to participate and learn. Also, it gives you a chance to get selected for an interview call based on your performance.
- Facebook Hackercup : This is an event hosted by Facebook wherein there are 3 rounds along with a qualifying round. Coders are expected to solve a certain number of problems to advance to the next round. It’s conducted once in a year and is worth watching out for.
- ACM ICPC : Association for Computing Machinery is an organisation that holds its own Global coding event known as International Collegiate Programming Contest for university students. It’s something that all competitive coders look out for. Do check it out for more information on it’s registration deadlines, event dates and round venues.
- Apart from many such major events, there are also minor events conducted on certain Platforms such as Codechef, Codeforces, Hackerrank, Hackerearth and Atcoder which allows you to push yourself further.
Apart from these, there’s an enormous domain to explore. Ofcourse, as you might have guessed it correctly, it’s Web Development. Personally, I found Web Development really confusing at the beginning mainly because there was a lot to choose from and I didn’t give enough time to it.
For learning the basics of it, I referred a youtuber — thenewboston. I think that guy gave me the clearest explanation on how to go about with WebD.
Starting with the basics of HTML, CSS and JS, I advanced to learning PHP, MySQL and NodeJS which provided me the server side features.
There are certain other technologies to explore such as the MERN stack (MongoDB, ExpressJS, ReactJS and NodeJS), the MEAN Stack (MongoDB, ExpressJS, AngularJS and NodeJS), the LAMP stack (Linux, Apache, MySQL, PHP) and what not, but I suggest that, unlike me, who messed up learning WebD, please choose a single tech stack and stick to it no matter what.
Even Python has many frameworks available for server side programming in Web Development such as DJango and Flask. Flask, particularly, provides a smooth and easy way to implement server side endpoints and handle the website routings.
Web Development extends to developing Web Apps and PWA (Progressive Web Apps) which involves developing a state based application, which made web development smoother, faster and more UI friendly.
When we talk about modern computer science, the topic that comes into picture is Machine Learning, Data Science, Deep Learning, Artificial Intelligence and Computer Vision.
Hold your horses before learning these topics because these are fairly advanced. So, before you jump to these, do make sure that you are well versed with calculus (for basic Machine Learning algorithms and Deep Learning algorithms) , vectors, statistical analysis, normal distributions and heuristics.
If you’re interested in a theortical approach to these topics, I suggest you try the Introduction to Machine Learning course provided by Coursera taught by Mr. Andrew NG. It provides a basic idea of how primitive machine learning algorithms work.
Further, you may try Deep Learning specialisation that involves a set of 5 courses available on coursera taught by Mr. Andrew NG. Do note that while you may learn these concepts, you actually need to practice what you learned.
For a more practical approach, I suggest you try the Deeplearning.AI Tensorflow Developer and Tensorflow: Data and Deployment course that is being offered by Coursera taught by Laurence Moroney.
Once you try these, it’s time you practise the algorithms you learned. Hackerearth and Kaggle organise contests related to Machine Learning concepts that can help you understand and apply these algorithms on a real world dataset.
Computer Vision is also another aspect where you can apply Machine Learning concepts with Image Processing to make miraculous projects.
Learning Computer Vision becomes easier with Python programming. OpenCV is a great computer vision library that helps us achieve this task.
For OpenCV, just refer its documentation and you are good to go. The OpenCV contributors have made sure to make the documentation as easy as possible.
If you still didn’t find what you would like to go for, don’t worry, there’s another domain of computer science, that is, Network security and Capture the Flag contests.
I got to know about these topics a little late but when I did this stuff, it was a great experience.
Do learn basics of Linux Programming (sounds complicated, but all you need to learn is how to operate a linux based operating system using a terminal) before moving ahead.
To learn cyber security, I prefer trying it and then learning. For this, I suggest you head over to PicoCTF where each year, they hold Capture The Flag contests wherein you need to find vulnerabilities in the given tasks and look for a Flag (it’s a unique text sequence hidden in the given task). The task could be anything, be it an exploit in a website (of course not a real one but one that is made by them), or a shell binary exploit.
There are more such events held across the Web. Another one of them is Google CTF, a CTF event organised by Google.
Well, some of you who are not interested in coding at all, there’s much more to Computers.
UI Designing is one such aspect. I like designing stuff from childhood itself and thus, I explored this domain too.
UI Designing mainly involves wireframing applications on how you want them to look once they are completed. This process is done at the beginning of developing any customer centric application because if your customers don’t understand how to use your application, then what good is your application?
For UI Designing, you may try Adobe XD or Adobe Illustrator or Adobe Photoshop. There are many tools to choose from but one that needs to be within is the will to make an application a hassle free and an enjoyable experience for a user.
Learning Adobe Illustrator was a complicated thing but once I learnt it, I was even able to design Vector based Anime artworks as a past time. I referred Youtube for it.
Well, don’t just sit there, Applaud! You made it to the end of this article and I am sure that you might have found something worth your time spent on reading this article.
You might feel that these topics are more aligned towards Software based applications. It’s true. But this is what I was able to explore in the first two years of my university life.
Apart from these topics, there are certain other concepts that I wasn’t able to learn more about, such as Database Administration, Operating System Designing, learning about Low Powered Designing and Robotics, Agile Development in Practice, designing Simulators and Emulators using C++, making Linux based softwares and many more.
I am sorry that I wasn’t able to explain these concepts but the Web is an infinite place, so do make sure to check your area of interest on the Web if you didn’t find it here.
Do share this article with those who you feel might get some help with it.