Table of contents
Open Table of contents
Introduction
The reality is that we all think or write algorithms more frequently than we believe. A simple example is when we think of a cooking recipe and execute it to feed ourselves daily. But setting aside everyday examples, programming is an essential skill in today’s world, as it is the core of the technological revolution we have been experiencing for some time now and the recently begun AI revolution.
That’s why this field is trending, and more and more people see the possibility of making a living with this highly demanded profession. However, like any profession, it’s not something that can be learned quickly and trivially. It’s important to have a solid understanding of the profession’s fundamentals, for one’s own peace of mind and for the well-being of others (who are the ones using the software being developed).
Why We Should Understand Fundamentals
It’s simple, from my point of view. To excel in any qualified profession, we should have a solid grasp of its fundamentals. A slightly radical example could be a doctor or a surgeon. It’s unthinkable for a doctor to work or for a surgeon to operate on someone without a precise understanding of how the human body functions at its core, without knowing the fundamentals of medicine. Similarly, anyone working in the field of computer science should understand how a computer processes information.
Understanding the fundamentals allows one to adapt to different current languages and paradigms, as well as to write efficient, maintainable, and scalable code.
What is the Foundation of Computing
It refers to the fundamental principles and concepts underlying the operation of computers and the resolution of problems related to the manipulation and processing of information using electronic devices. These fundamentals are essential to understanding how computers work and how they can be effectively used to solve problems.
Some of the key fundamentals of computing include:
- Data Representation
- Computer Architecture
- Programming Languages
- Operating Systems
- Computer Networks
- Algorithms and Complexity
- Information Theory
- Logic
- Discrete Mathematics
- Computer Security
What is the Foundation of Programming
The foundation of programming refers to the basic principles and concepts that underlie the creation and development of software. These fundamentals are essential to understanding how programs work, how they are written, and how they communicate with computers to perform specific tasks.
Some of the key fundamentals of programming include:
- Algorithms
- Data Structures
- Programming Logic
- Syntax and Semantics
- Abstraction
- Modularity
- Code Reusability
- Debugging
- Optimization
- Programming Paradigms
The Current Landscape of Software Development
There are two clear issues that lead to a lack of deep understanding of the underlying concepts of programming:
-
Market trends encourage new entrants to the software development field to learn quickly through online courses or bootcamps lasting just a few months, with the expectation that individuals will be ready for their first job in the industry due to high demand. However, the reality is that people enter the workforce having acquired too many concepts in a very short amount of time about a dense subject like programming. It’s typical for a bootcamp graduate to have unclear aspects about how a programming language works, let alone a computer.
-
Excessive dependence on a high-level framework or technology. Organizations require a specific profile for a particular technology, leading them to seek individuals who are knowledgeable about that specific technology. This results in future developers specializing in only one technology, whereas the ideal scenario would be for the new employee to have a broad understanding of the foundation and, once inside the new company or project, learn the necessary technology and specialize.
How to Learn Fundamentals
In my opinion, a professional starting a career in the field of computer science should have knowledge in the following two areas:
- Theory of computation.
- One or more low-level programming languages.
The easiest way to acquire this knowledge is through a university degree or higher education. While it’s possible to be self-taught due to the vast amount of information available online, the most straightforward approach is through formal education. However, there are always individuals who enjoy autonomous learning, but I hardly know anyone who has mastered this subject through self-teaching (similar to how I know few people who have become experts in physics through self-teaching).
Rust: A Good Language for Fundamentals
I won’t delve into computing-related topics, perhaps in other articles. But I will discuss programming fundamentals and a language that is suitable for learning those fundamentals that I have been advocating throughout this article: Rust.
In reality, the language isn’t crucial for learning as long as the fundamentals are taught well. We could use a classic like C, its older sibling C++, or even Java. However, in this article, I will recommend Rust because it’s a more modern option that is equally efficient, if not more so, than the aforementioned languages.
Rust is a modern programming language that has gained popularity for its focus on safety, concurrency, and performance. It’s ideal for learning programming fundamentals for several reasons:
- Clear and Expressive Syntax: Rust has a syntax that resembles C++, making it easier to grasp concepts like variables, data types, and control structures.
- Memory Management: Rust introduces the concepts of “borrowing” and “lifetimes,” allowing programmers to understand how memory is managed at the lowest level of the computer, thereby avoiding common errors like memory leaks and pointer errors.
- Emphasis on Safety: Rust enforces strict rules to prevent common programming errors, such as accessing invalid memory or unsafe concurrency. By learning to work within these constraints, developers can gain a deeper understanding of how these fundamental programming features work.
- Rich Standard Library: Rust provides a well-documented and feature-rich standard library that exposes developers to a wide range of common concepts and data structures.
Conclusion
The market encourages new (and not-so-new) developers to learn languages and technologies quickly, whether through companies or the ever-growing supply of training programs that promise rapid specialization. However, the foundation of programming, along with that of computing, is essential to being a competent and versatile programmer. By investing time and effort into understanding the fundamentals, developers can enhance their problem-solving skills and create robust and efficient solutions. As a recommendation, one could use Rust to learn the fundamentals, along with a new, robust, and modern language.