Because the term “freelancing” is easily recognizable, now those who pursue computer science education often think that freelancing can be easily started for earning. Freelancing can indeed be a suitable choice. Thinking about earning is also valid. After completing education, one must earn. However, it’s not right to think about it only during studying. If this concern takes over your mind right after being admitted, education might not progress well. Perhaps with effort, freelancing can start. Earning can also begin. But one needs to ask oneself, in exchange for what?
“Never settle for anything less than what you deserve. It’s not pride, it’s self-respect.” ― Chanakya“
Freelancing is easy. With a bit of effort, anyone can do it. It doesn’t require an in-depth understanding of computer science. Since you have the desire to study computer science, why settle for mediocrity? Why not excel, where you can do something extraordinary? Starting freelancing in the first year and diving into work with limited knowledge might jeopardize the learning opportunity. I am a freelancer myself. I don’t see freelancing as something minor. However, I will say, first build yourself up. For something better.
First Year:
In the first semester itself, students are introduced to computer programming. Additionally, those aspiring to major in computer science should also learn a programming language early on. They can choose C/C++ or Python.
After grasping the basic concepts of programming, students can challenge themselves by solving programming problems on online judges. There are several online judges available. You can start with platforms like https://codeforces.com/ or https://onlinejudge.org/. Initially, you might find it a bit challenging. However, as you solve a few problems, you’ll find it easier. You can begin with Ad Hoc problems. After tackling a couple, the rest will seem less intimidating. For instance, you can start with problems like UVA Online Judge 100, 102, 111, 113, 119, 120, 133, 136, 146, 147, and 347. These problems are relatively straightforward. Make sure to learn about the International Collegiate Programming Contest (ICPC) as well. If you’re interested in participating, connect with those who are already involved to understand how you can participate in ICPC contests.
While competitive programming might not appeal to everyone, some may prefer excelling in their academic courses. It’s important to excel in your academic subjects too.
Second Year:
In the second year, students will be introduced to general graph theory, data structures, and algorithms. These subjects might seem challenging to many, but once learned, they become applicable throughout one’s career. Most job interviews include questions related to these fundamental concepts. The problems presented in interviews often stem from these subjects. If you find difficulty understanding any concept, don’t hesitate to seek help from teachers or senior students. To practice, you should attempt problems related to these topics on online judges.
When you visit online judges, problems are categorized based on their topics. If you find certain problems difficult, you can search for simpler ones related to the same topic. For instance, you can explore problems from “Beginning Algorithm Contests” by Rujia Liu. Similarly, you can solve problems related to graph theory, data structures, and dynamic programming. Regular practice will improve your problem-solving skills in these areas.
Third Year:
In the third year, typically advanced subjects like advanced algorithms, databases, advanced math, and possibly a new programming language are taught. The open credit system allows for flexibility in choosing courses based on personal preferences. However, completing prerequisite courses can take some time.
Once you’ve learned advanced topics, you’ll be capable of solving more complex problems. You can search for and solve advanced problems on online judges.
For those who might not be interested in competitive programming, they can explore frameworks in their preferred programming languages.
Whether you’re into competitive programming or not, it’s important to have a good grasp of the following concepts by the third year:
- Discrete Mathematics and Related Algorithms: Tree (BST, Tree Traversals), Graph, DFS, BFS, Topological Sorting, Minimum Spanning Tree (Prim’s Minimum Spanning Tree (MST), BackTracking (n-Queen’s Problem), Shortest Paths (Dijkstra’s shortest path algorithm), Maximum Flow ( Ford-Fulkerson Algorithm for Maximum Flow Problem) etc.
- Sorting Algorithm: Insertion Sort, Selection Sort, Merge Sort, Quicksort, Counting Sort, Heap Sort . Etc
- Data Structures and Related Algorithms: Stack, Queue, Linked List, Min Heap and Max Heap
- Other Algorithms such as: Brute Force, Divide and Conquer, Greedy Programming, Dynamic Programming Need to know about related algorithms.
Fourth year:
This year, generally specialized courses are offered. There’s an opportunity to take major courses. Mainly, subjects that we don’t major in, we try to work in those areas. Some take courses related to web development, some take software development related courses, some opt for courses in artificial intelligence or machine learning, some choose data science courses, and some go for game development courses. Whatever subject you major in, if you can excel in it, you can pursue both jobs and freelancing.
The competitive programming you have been doing all this time will come in handy for major courses. You will easily understand everything. If you want to work for a good company, that’s also possible. Interviews will be easier for you. Even if you don’t want to do a regular job, there’s no problem. You can easily start freelancing or work remotely, whichever suits you. If you start freelancing now, Inshallah, you will earn well compared to others.
For those who do competitive programming, most of them can easily enter companies like Google, Apple, Microsoft. You can prepare for software engineer interviews quite easily.
If someone doesn’t want to stop here, I suggest studying machine learning, data science, etc. Also, start participating in Kaggle competitions.
Now, someone might say, “I won’t do all this competitive programming. I will do freelancing.” I can provide guidelines for that as well.
In the first year, after learning about programming, you should look for any major sector. For example, mobile app development, web development, software development, etc. Among them, software development is relatively more complicated. If someone wants something easy, they can learn mobile app development or web development.
Mobile App Development:
In the field of mobile app development, there are two options again: Android or iOS. If you want to learn Android app development, you will need to learn Java or Kotlin programming. Since you already have an idea about basic programming, I hope learning these won’t be a problem. After that, you can learn how to create apps.
For iOS development, you will need to learn either Swift or Objective-C programming. I would suggest learning Swift. After that, you can learn iOS app development. Please note that for this, you might need a Mac.
If you want to learn web development.
For this, you need to start by learning HTML and CSS. It will be quite easy to learn. After that, you should learn any web programming language. There are many languages available. In the field of web development, the most commonly used languages are PHP, JavaScript, Python, and others. Once you learn these, you can start working with a framework and begin your web development journey.
Whether in mobile or web development, both fields require various courses taught in universities. Topics like algorithms, data structures, graph theory, software development processes, and databases will be applicable in both areas. So, whether you freelance or not, having knowledge of these subjects learned in university will be useful.
The majority of the content above seems to be focused on academic-related discussions, which can become quite monotonous and mundane. If you keep getting entangled in semester gaps, life might turn into a monotony. It’s advisable to venture outside academic books and explore other genres. Most of what’s written above is about problem-solving. Reading books beyond the academic realm will make you consider each problem from different perspectives. To wrap it up, I want to leave you with this thought:
“Never settle for anything less than extraordinary.”