This article might be a bit lengthy, but I assure you, it might be worth your time.

"How long?" I'm not sure. I'm just another human next-word prediction model. I simply write until my brain says, 'Stop generating.'

My aim is to guide the upcoming generation of coders, provided they are open to learning even from old dogs.

Before I delve into my advice, allow me to establish my credibility. I am a self-taught programmer with nearly four decades of hands-on experience. I have co-authored books on PHP with renowned publishers like Wrox (Wiley & Sons, APress). My coding language repertoire includes C, Pascal, C++, Java, Perl, PHP, Objective-C, R, Python, and many more. However, as any programmer would know, the number of languages you know is not a measure of your competence. Proficiency in any language can be gained or lost; it's entirely up to you. For instance, despite having written books on PHP, I haven't touched a line of PHP code since I stopped working on PHP projects. This is the reality of coding, and in fact, of life itself.

I am no stranger to being a novice coder. I am predominantly self-taught, having only minored in Computer Science, which, to be honest, didn't contribute significantly to my skills. What truly mattered was the time and effort I invested.

Now, let's move on to some practical advice for aspiring coders. How will you know when you've become a successful coder? Trust me, you'll know. Your life will have transformed significantly.

Grasp Object Orientation Firmly

First and foremost, it's vital to understand the four pillars of object orientation: abstraction, inheritance, polymorphism, and encapsulation. These principles should be applicable not only to your programming endeavors but also to your entire worldview. Why? Because object orientation mirrors the way our universe functions.

Consider this perspective: everything in existence, whether tangible or intangible, can be viewed as an object. This concept may seem straightforward, but it's so profound that it can take a lifetime to fully grasp.

The knowledge you acquire from others serves as a foundation from which you can inherit, modify, and expand, thereby enabling polymorphism. During this process, you may opt to keep the inner workings hidden, which is encapsulation. This is the typical workflow of an open-source programmer and ideally should be your approach as well.

I was fortunate to start early with object orientation, learning in Pascal, a strictly typed educational language. Now, with Python readily available, you have no excuse not to delve into and master object orientation. Python's simplicity and power make it an ideal language for grasping these fundamental concepts.

Collaborate, Don't Work Alone

I'm not necessarily suggesting you always work with other people. Rather, I'm advocating for the idea that you don't have to shoulder everything by yourself. Throughout my career, I've consistently coded in an IDE. Even esteemed programmers like John Carmack and Guido van Rossum have their preferred IDEs.

At present, I work with PyCharm (a JetBrains tool) and GitHub Copilot (based on GPT-3.5), essentially collaborating with AI. This collaboration allows me to leverage the power of AI to enhance my coding efficiency and effectiveness.

In the realm of coding, there's no traditional concept of plagiarism, as long as the work being copied is open-source or intended for duplication. This is where the concepts of inheritance and polymorphism become relevant. Remember Rule No.1: Object Orientation.

However, it's important to note that open-source does come with licenses and rules about how the code can be used or modified. Respecting these rules is absolutely crucial.

The open-source community fosters an ideal environment for growth and collaboration. A testament to this is when I was contacted by Wrox after releasing my bulletin board system, NeoBoard, written in PHP, as an open-source project. This experience underscores the potential for positive outcomes that can arise from active participation in the open-source world.

Fundamentals Are Key

I must confess, I may have been slightly misleading earlier. Despite my previous statement, minoring in Computer Science did equip me with a solid foundation in fundamental concepts, such as data algorithms. Having a firm grasp of the basics broadens your problem-solving abilities and nurtures creativity.

Take, for example, if you're intrigued by machine learning or AI. A robust understanding of modern linear algebra is crucial. Sure, you could skip this and dive straight into working with PyTorch and Tensorflow, but if you're encapsulating everything, you're likely taking a misstep. Why is that? Because by doing so, you're restricting your opportunities for inheritance and polymorphism, which are key concepts in object-oriented programming. This could potentially stunt your growth as a coder.

In essence, while it's tempting to jump straight into the more advanced aspects, it's the fundamentals that truly empower you to understand and create complex systems. So, never underestimate the power of the basics. They are the building blocks that will enable you to reach greater heights in your coding journey.

Know Your Place

Statistically speaking, approximately 68% of coders fall within one standard deviation from the mean, which categorizes them as average. But what exactly defines an average or below-average coder? Common traits among these individuals often include neglecting the fundamentals, failing to invest adequate time and effort, and not expanding their knowledge beyond their comfort zones.

Contrastingly, what sets above-average coders apart? In the era of AI, these individuals make a conscious effort to understand the workings of AI and actively collaborate with it. They are not just content with the status quo but are constantly pushing boundaries and seeking new knowledge.

While I may not consider myself to be exceptional, I am always striving to emulate these outliers. In this age dominated by AI, I am simply treading the same path. I am committed to continuous learning and improvement, always seeking to elevate myself from the realm of the 'average'. This is not just about being a better coder, but about being a better learner and ultimately, a better individual.

Just Do It, More

In conclusion, to truly excel as a coder, it is essential to go above and beyond what the average coder does in every aspect. This principle is not exclusive to programming but is applicable to all facets of life.

Every opportunity that presents itself for learning should be seized and treated as invaluable. This is because each learning experience, no matter how small or seemingly insignificant, contributes to your overall knowledge and skill set.

Ignoring this simple yet profound truth could lead to unnecessary difficulties in life. It could result in missed opportunities for growth and development, and ultimately, hinder your progress in your coding career or any other field you venture into. Therefore, it is crucial to remain open to learning at all times and to strive for more than just being average.

I hope you find this advice helpful.