C is not the first programming language I learned, the first language I learned was GW-Basic. Although C is the language I fell in love with, it was actually the first wholesome programming language I saw, before this, I had worked my way up from GW-Basic and JavaScript.
The C programming language is known for its low-level access to memory and its powerful features for building complex systems. The intricacy of structs in C, which allow for creating custom data types, can be quite powerful but also challenging to work with. The ability to define structs with different types of variables and create arrays of structs, allows for efficient data manipulation and organization.
The consistent convenience of arrays in C is also a powerful feature, it allows programmers to easily store and manipulate large amounts of data in a structured way. And the ability to access variables using the “&” operator, which allows direct access to memory addresses, is a powerful tool that gives the programmer low-level control over the system.
However, the power of C comes with a cost, as it allows for direct memory manipulation and low-level access, it also allows for easily creating bugs and security vulnerabilities, if not used properly. The term “shooting yourself in the foot” is often used to describe the mistakes that can occur when working with C, as it refers to the ability to easily cause unintended behaviour or crashes by misusing pointers or other low-level features.
Overall, C is a powerful and challenging language that can be quite complex to work with, but also provides the programmer with a great deal of control and flexibility. It can be considered as the wild west of programming languages, as it provides the programmer with a lot of freedom and power, but also requires a great deal of caution and expertise.
As fate would have it, my first job involved working with C++. The opportunity to work with C++ right out of the gate was a great way to get started in my career. Not only did it allow me to learn the language in a professional setting, but it also exposed me to real-world problems and solutions that I could apply to future projects. C++ is a complex language and having the chance to work with it from the start allowed me to develop a strong foundation in programming concepts and best practices that I could build upon as I progressed in my career.
Inevitably I got side-tracked and took on some odd jobs that led me to writing PHP and Java, and teaching assembly language, there was a silver lining in that experience.
Working with different languages and technologies allowed me to expand my skill set and become a more versatile programmer. I learned new programming paradigms, different approaches to problem-solving, and gained an understanding of the strengths and weaknesses of different languages. The experience of working with different languages helped me to understand the trade-offs and how to choose the right tool for the job.
Teaching assembly language was particularly beneficial as it gave me a deeper understanding of how computers work at a low-level, and how the code written in high-level languages is translated to machine code. This knowledge can be applied to many other languages and frameworks, making me a more proficient and efficient programmer.
Additionally, working with PHP and Java opened me up to the world of web development and introduced me to new technologies and frameworks. This helped me to understand the different types of systems and applications that can be built and the challenges that come with developing for the web.
In conclusion, while getting side-tracked into working with different languages and technologies may have seemed like a detour at the time, it ultimately helped me to become a more versatile and skilled programmer. The experience of working with different languages and technologies was invaluable, and it has helped me to become a more proficient and efficient programmer, I was still in my early career stage and was not aware of this wisdom at that time.
I was at a cross roads and switching jobs was becoming hard because everyone wanted a expert of one.
While I was able to write adequate code and consider the complexity of the algorithm, I was far from an expert or would match a person with equal number of experience in one particular language. I did a bit of research and realized I was not the only one stuck in this predicament, this is a common experience for programmers who have worked with multiple languages.
With some stroke of luck; I was hired in a brand new start up as software engineer, however the paid was not the standard but beggars cannot be choosers initially I was asked to backend API(s) in PHP but as I was responsible to deploy my own application in production ready environment, my company and I identified I have neck for this. Next iteration of the project was in Java and we had already gone live once so to switch traffic from one environment to next required a blue green deployment — pulling that off successfully, in recognition of that I was promoted to the DevOps Engineer (read here what I think of DevOps Engineer).
Evaluating my proficiency in a programming language was challenging, because I didn't ever belong to one paradigm as there were many factors that contribute to a skillset. Another way to evaluate my skills was to consider the types of projects I had worked on and the level of complexity I was able to handle. For example, if I had experienced working on large-scale systems or had tackled complex problems.
Ultimately I realised I was an “Idiomatic Programmer” — According to me is someone who understands multiple languages and is able to write code that is considered well-written and in line with the conventions and best practices of multiple programming languages. This type of programmer has a deep understanding of the similarities and differences between languages, and is able to apply their knowledge of one language to another. They have the ability to switch between different languages and frameworks and can write idiomatic code in any language they are familiar with.
A programmer who is idiomatic in multiple languages can quickly adapt to new projects and technologies. They can understand the problem domain and design a solution that is optimal for the given requirements, regardless of the language they are using. They are also able to collaborate effectively with other developers, regardless of the language they are using, and can understand and read other people’s code more easily.
Additionally, this type of programmer can be very valuable in a cross-functional team, as they are able to bridge the gap between different languages and technologies. They can act as a translator, helping team members who are not fluent in a particular language understand the requirements and design of a system.
This mindset worked very well for in my current company, as I had the opportunity to not only work as DevOps Engineer and gain two AWS certification (Solution Arch. and Developer Associate) for which I was hired, but I was also exposed to Java again as SAP Commerce Developer, Cloud expert in as AWS Solution Arch., Integration Specialist in SAP Integration Suite, SAP CPQ Consultant, Performance Test Engineer and also dabbled quite recently a bit in SAP BTP; micro services written in JavaScript and got three sap certifications for SAP FSM, CPQ and CDC.
now I am well aware that the industry is constantly evolving and new languages and technologies are emerging. Therefore, I have decided to focus on developing my skills as a Idiomatic Programmer, someone who can quickly adapt to new languages and technologies and can write idiomatic code in any language they are familiar with. This strategy has served me well in past, as I have been able to take on a wide range of projects and work with different teams and clients.
In conclusion , my journey as a programmer has been an exciting one and I am grateful for the opportunities that I have had to work with different languages and technologies. I have learned a great deal, and have been able to develop my skills and become a more versatile and proficient programmer. I believe that being a Idiomatic Programmer is the key to success in this constantly evolving industry.
Top comments (0)