Become the software engineer with strong fundamentals.
Tags: programming, softwareengineering, softwaredevelopment
Published: 2023-08-09 06:10:56

In the ever-changing world of software engineering, it is tempting for developers to focus on the latest trends and technologies. While staying up to date is essential; it is equally crucial to recognize the significance of mastering the fundamentals. Fundamentals act as the backbone of a developer's skill set. This article delves into some of these important concepts and highlights how a strong foundation can lead to long-term success in the field of software engineering.


## The ever-changing landscape
Technology evolves extremely rapidly, and software developers often encounter new frameworks and languages throughout their careers. A firm grasp of fundamentals equips developers with the adaptability needed to learn these new technologies quickly when needed.

Instead of being confined to a particular language or framework, developers who understand the underlying principles of programming can transition smoothly to new technologies. This adaptability is critical in an industry where innovation is constant.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ig8j436ivs18fbhnttqm.png)

Take Frontend development as an example. Frontend developers witness a continuous influx of new frameworks year after year. And different organisations will adopt different frameworks. Now, if you are a developer who wants to be "ahead of the curve", you could upskill on the new shiny framework/s so you are prepared to work for any organization. I used to have this mindset; and let me tell you, it is a waste of time. Because for most people, when something is learnt but not applied, it will be forgotten. What you should focus on is understanding the fundamentals of Frontend development. Additionally, go beyond the surface and dive deep into how the internals work and understand how UI elements are rendered onto a web page, how javascript interacts with the UI, how to handle API calls etc...

By focusing on strong fundamentals, you will be able to jump from one framework to another. It is not too difficult for a React developer to jump to using Vue if that developer has a strong understanding of HTML, CSS and JS, state management, responsive web design etc... For example, recently, I had to take over an Angular project. Now, I have never worked with Angular prior; throughout my career, I have only worked with React. Nonetheless, I took over the code base and I was able to be productive fairly quickly due to my years of experience in the Frontend space.


##Develop strong problem-solving skills
At the core of software development lies the ability to solve problems. Strong problem-solving skills and the ability to debug are invaluable. Understanding fundamental principles in programming allows developers to pinpoint issues quickly, saving time and resources.

Become the developer who exudes confidence in their problem-solving skills. This assurance empowers individuals to embrace new challenges and take on greater responsibilities. Moreover, developers who prioritize mastering problem-solving often find themselves sought after by employers who recognize the immense value they would provide for an organisation.

When I encounter a problem, I usually go through the following steps to solve it:

1. REALLY understand the problem and the desired outcome.

2. Discover unknowns and potential effects.

3. Explore all solutions and the potential drawbacks of each solution.

4. Select the best solution and implement it.

Note: I intentionally wrote the steps to be quite vague as these steps are not only for solving coding problems but also for all problems software engineers encounter daily.

**As final words of wisdom on this topic; be the person who can solve difficult problems.**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v3w93ml64fpt389qwppa.png)


## The technicals
And finally, we get to the technicals. I had intentionally left this part to the end because I wanted to put more emphasis on the importance of the previous 2 points. Nonetheless, even though this is the last point, it does NOT make it less important.

Below is a list of some of the technicals that a developer should master:

- **Data structures and algorithms:** These are the building blocks of software. Data structures store and organize data, while algorithms are used to process that data. A good understanding of data structures and algorithms is essential for writing effective and efficient code.

- **Object-oriented programming:** This is a popular programming paradigm that allows developers to create reusable and maintainable code. Object-oriented programming is based on the concept of objects, which are self-contained units of code that encapsulate data and behaviour.

- **Software design and architecture:** This is the process of planning and designing software systems. A good software design will ensure that the system is well-organized, scalable, and easy to maintain.

- **Testing and debugging:** Closely related to the "Develop strong problem-solving skills" section, these are essential activities for ensuring the quality of software. Testing is the process of executing software to find errors, while debugging is the process of fixing those errors.

The above list is just a few of the technicals a developer should master, but do consider other technicals if the domain requires it, i.e. mastering CSS-animation. 

In conclusion, the importance of fundamentals in software development cannot be overstated. While keeping up with the latest technologies and trends is essential; a solid understanding of core principles and concepts provides the foundation for success.