Skip to main content

Command Palette

Search for a command to run...

Code as Communication: Thinking Beyond Machines

Published
7 min read
Code as Communication: Thinking Beyond Machines
B

I am a software developer from Algeria, I am obsessed with the world of programming and technology, and I'm always ready to share my experience and stories with you.

In the world of programming, code is more than just a set of instructions for machines. It's a language, a form of communication that extends far beyond the binary realm. In this article, we embark on a journey to explore the concept of code as communication and why thinking beyond machines is essential for every programmer.

Programming Languages

Programming languages are the bridge between the world of human language simplicity and the complexity of machine language (0s and 1s), we use it to interact and give orders to the machine, but its main use case is to precisely describe an algorithm which is a set of instructions and statements to solve a specific problem.

It's right that each programming language is good at some fields and not at others, but everyone can build almost everything with every programming language, it is just about time and features of each programming language that can help ease the process of building that thing, because you are just describing a way to manage the hardware and software resources for the machine, whether it's video game, desktop application or an operating system, it's all 0s and 1s.

But why they use specific languages for specific tasks

JavaScript is for web development, C and C++ are better as system programming languages, Python is better for data science and machine learning… , but you can create nice mobile or desktop applications with JavaScript, thanks to frameworks like React Native and Electron, frameworks and libraries are just like presets someone build for a reason so you won't need to configure and write more code to make your program run in a mobile device, or to run some python code in a server.

Frameworks

The revolution of frameworks in modern software development has fundamentally transformed how applications are built, fostering efficiency, scalability, and consistency across projects. These frameworks, whether for web development, mobile applications, or backend services, provide developers with a structured foundation, tools, and best practices, streamlining the development process.

Problem Solving

Problem-solving is an essential skill for programmers, it relies on understanding problems, exploring solutions, converting the best solutions into logic that can be represented with an algorithm, then finally describing the algorithm with a programming language.

Some beginners can find it hard to solve some complex coding problems, whether in LeetCode, Hackerrank, or even real life problems, and I always say that a good programmer is good enough to convert any idea of a possible solution into a piece of code, if you know how to do it yourself, then surely you can teach someone how to do it, especially if he has better calculation and memory resources then you.

How programmers think while they are solving a problem

Human simple data presentation is not for machine, so you should forget about it and start thinking about an appropriate way to represent the data (Arrays, Lists, Maps ...), then you need to create the logic to manipulate the data (sorting, searching ...), we can achieve that using the features available in every language, If issues arise, programmers adopt a systematic debugging approach. They use debugging tools, print statements, or other techniques to identify and fix errors.

Debugging

When something is wrong with the program, it's time for the programmer to act like a doctor and diagnose the code, he starts asking questions to the code in shape of prints and logs to understand the behavior of the code, and the change of data during the execution, until he finds the part which causing the error or the exception so he can fix it.

Debugging in programming shares similarities with a doctor diagnosing and discussing an ailment with a patient. Both processes involve a systematic examination, identification of issues, and effective communication, this is what debugging is all about.

Problem Solving Mindset

Programmers should have a special mindset for problem solving, and for programming in general. Programmers often face tight deadlines, complex problem-solving, hard tasks, creating conditions that lead to burnout.

Burnout is dangerous for programmers as it can stem from the relentless pressure, unrealistic expectations, and constant technological demands in their work environment. The high workload, coupled with the need for continuous learning, can lead to exhaustion and a sense of being overwhelmed.

That's why every programmer should cultivate a mindset that is prioritizing self-care, passionate about learning, seeing an opportunity to learn and improve in every problem they face, error they need to and exception they need ti handle. You can't expect a burnout from a programmer that feels good when he faces a new error because he knows if he fixes it he will get additional knowledge, he's an animal thirsty for knowledge and learning.

Practice

Practice is the only way of learning problem solving, but practice in the right way is essential for effective skill development. While practicing is undeniably crucial for learning problem-solving, the quality of practice matters just as much, if not more, than the quantity. Merely repeating the same problems without thoughtful engagement may not lead to significant improvement.

One of my favorite ways to practice is by creating problems for yourself, I remember in my first year in the university we didn't have a lot of practice in programming, so I had to create some problems from other subjects, like Machine Structure subject where we were learning about numerical systems, so I decided to create a numerical systems' converter in C, working with the same methods we've been using the Machine Structure class, and I strongly believe what I was doing was the responsible for the gap between me and the others in problem solving and programming, because I had to communicate with the machine all the time, while they were trying to solve the problems of the homework and the exams.

There are also some good platforms and website for free practicing, providing huge base of problems of different difficulties, and large community to get in touch with and collaborate with, making the process of learning more efficient and fun.

Computer Architecture

In the realm of programming, understanding the core principles of hardware and operating systems is akin to mastering the language that facilitates communication with the machine. Hardware awareness allows developers to comprehend the intricacies of the underlying machinery, enabling them to optimize code for performance and efficiency.

Memory

Understanding memory is like having a good grasp of your workspace as a programmer. A good developer should know what is happening in the background of his code, why we have to declare data types, what happens when we allocate a space in memory, what is the stuck, what is the heap… . Understanding all the core concepts of memory gives you a strong hand to manage the memory and optimize your code, and avoid a lot of damage like memory leak.

CPU

Understanding the concepts of the CPU (Central Processing Unit) is fundamental for any programmer, as the CPU is the brain of the computer responsible for executing instructions.

Compilers and RunTime Systems

Compilers and the translators that convert your source code from the high level programming language to the machine language. Understanding how the compiler or the interpreter of the language you're using gives you more options to optimize your code, and also to understand and handle the compile-time errors.

Understanding runtime system components like garbage collector, handlers, profilers allows for optimization strategies that can enhance program performance and avoid and resolve performance bottlenecks, memory leaks, and other runtime issues. It also aids with debugging and profiling.

Conclusion

In conclusion, the world of programming transcends the mere act of writing code; it is a form of communication that extends beyond the binary realm. Programming is not just about writing code in a specific language syntax, but it's about finding optimal solutions and using the resources of a machine to achieve it, it's about converting an idea from the human mind simplicity to a piece of code using the syntax and the features of a programming language. Programming is the art of teaching basic and complex solutions to a machine that has 10 millions times faster brain then you.