Building a Strong Coding Foundation
A Guide for Beginners to Enhance Problem-Solving Skills and Master Data Structures and Algorithms
This piece is geared towards those who are new to software development, particularly recent college graduates or students looking to progress in the field.
However, the concepts discussed can be applied to developers of all types, including those focused on back-end, web, and app development.
On my Twitter and Instagram accounts, I frequently share my programming journey and development experiences.
A traditional degree in engineering will not prepare you to be a competent software developer. Many of the concepts covered in such degree programs may not be directly relevant to a career in software development.
A degree in computer science may be more aligned with research and higher education. On the other hand, software development can be self-taught, and a degree is not much use for that.
Enhance problem-solving skills
If you are new to programming, it’s essential to begin by focusing on the fundamentals of computer science and honing your problem-solving abilities.
Building a strong foundation and dedicating 1–2 years to mastering these skills will set you up for success in your programming journey.
It is common for students to prematurely jump into web or app development without first establishing a strong foundation in the fundamentals of computer science.
This can lead to ongoing struggles throughout their careers.
It is important to invest the time and effort to master the fundamentals before moving on to more advanced projects or technologies.
Don't worry about the latest trends
As a beginner, it is not necessary to concern yourself with the latest trends in technology or creating flashy projects to impress potential employers.
Companies do not expect this from someone just starting out in their developer career.
Instead, focus on building a strong foundation in the fundamentals and improving your problem-solving skills.
The latest technologies and fancy projects can be learned and tackled as you progress in your career.
While learning new technologies and frameworks is important, it is not as significant as having a strong foundation in the fundamentals.
Keep in mind that most new hires at a company are able to adapt to new technologies and frameworks within 2–3 months. And every time you switch companies, you need to adapt to their tech stack.
Where to start?
One of the best ways to improve your problem-solving skills and knowledge of data structures and algorithms is through competitive coding.
Although it may be challenging to start and you may feel frustrated at times, it is essential for your development as a programmer.
Once you have a strong grasp on the fundamentals, you will likely not struggle during technical interviews throughout your career, as problem-solving, data structures, and algorithms are typically the most heavily weighted topics during these interviews.
A great place to start competitive coding is by participating in CodeChef’s long contests.
These contests typically last 3–5 days and include multiple problems to solve, providing you with ample time to think and research.
I recommend participating in these contests consistently and honestly on a monthly basis.
Even if you get stuck on a problem for days, don’t give up. Patience and persistence are key qualities of a great programmer.
Remember, focus on quality over quantity, and never give up on a problem, no matter how long it takes to solve it.
Important topics and suggestions
Before diving into competitive coding, it is important to have a clear understanding of certain fundamental concepts that are used extensively in programming. These include:
- Time complexity analysis
- Space complexity analysis
- Recursion
- Backtracking
- Basic data structures like Array, Linked List, Graph, Tree, Stack, Queue etc
Having a solid understanding of these concepts will be extremely helpful as you progress in your competitive coding and programming journey.
You should be able to evaluate the time and space complexity of code by looking at it.
Once you have a deep understanding of time and space complexity analysis and it becomes ingrained in your muscle memory, your productivity as a programmer will increase significantly.
Take your time when learning these concepts and don’t move on until you feel confident in your understanding of them
I would also suggest:
- Starting with C/C++ as it will give you a better understanding of how things work at a low-level and how memory management works. Avoid starting with Python as it abstracts many underlying concepts.
- Using a basic code editor like VS Code instead of an IDE, as it will help you understand the underlying process of building and running your code.
- Compiling and running your code on a terminal, as it will give you a better understanding of how your code interacts with the operating system. Additionally, you could use a terminal multiplexer like tmux to divide the terminal into multiple segments and work on multiple tasks simultaneously.
It is also important to have strong implementation skills in addition to a solid understanding of data structures and algorithms.
You should be able to implement common algorithms such as:
- Binary Search
- Depth-first search
- Breadth-first search
- Shortest path algorithms
- Sorting and searching algorithms
- Adjacency list graph implementation
- Basic operations on data structures such as stacks, queues, maps, sets, linked lists, and arrays/vectors
It’s important that you should be able to implement these algorithms with your eyes closed.
I would also recommend learning new topics from editorial or books rather than video tutorials, as the written material will give you a better understanding of the concept and will be more engaging.
Additionally, after reading a topic, make sure to practice coding and implementing the concepts you have learned.
Practising Coding >>>> Watching YouTube tutorials
After Basic Coding
It’s important to remember that before moving on to more advanced topics, you must have a thorough understanding of the fundamentals. This will ensure that you have a solid foundation and will make it easier for you to learn and understand more complex concepts.
To keep yourself motivated, try to associate with people who share your enthusiasm for coding, and be in a competitive environment, as it will help you stay motivated and engaged in your learning journey.
Once you feel confident in your coding skills and believe that you can solve medium-level problems within an hour, it’s a good idea to move on to short format contests.
This is important because it will help you get used to the time pressure that you will experience during coding interviews.
Participating in short format contests or setting a timer while coding will simulate the pressure you will face during an interview.
This will help you improve your problem-solving skills and make you more comfortable and confident in high-pressure situations.
For short format contests, I would recommend checking out websites such as Codeforces, Codechef, and HackerRank.
To practice coding problems, you can use platforms such as LeetCode, GeeksforGeeks, and SPOJ. These platforms have a wide range of problems that cover a variety of topics and difficulty levels, providing you with ample opportunity to practice.
Keep Hustling
As a beginner, you don’t need to worry too much about advanced topics such as design patterns and system design. These topics are typically not expected of someone just starting out in their programming journey.
However, make sure that your problem-solving skills and understanding of data structures and algorithms are outstanding. These are fundamental skills that are crucial for success as a programmer and will be expected by any employer.
Once you have a solid grasp of these fundamentals, you can then move on to more advanced topics and continue to improve your skills throughout your career.
I will share more detailed topic-wise guidance and lists of important questions in future posts.
After that, we will delve into more advanced object-oriented concepts and the best programming principles.
Make sure to follow me for updates on these posts.
Remember that learning to code is a continuous process, always keep learning and practicing to improve your skills.
Skilled Coder (@theskilledcoder) • Instagram photos and videos
Thanks