The Successful Programmer | P-PL.com
Tags: programming, productivity, career, codequality
Published: 2021-11-29 20:13:21

The world needs more successful programmers. More specifically, the world needs more people that embody the _mindset_ and attitudes of skilled and successful programmers. Programmers are problem solvers. Programmers embrace and learn from failures. Programmers persevere and innovate the world around them. Successful programmers make the world a far better place.

Modern programming started in the era of punch cards and working on green screen terminals. Back then, programming was pretty difficult to learn; syntax was nothing like it is today. By the way, the reason screens were green back then is because the fluorescent green on black background was easier on your eyes and allowed you to work longer hours. Hollywood ran with idea and that's why hackers are depicted with green on black terminal windows, no other reason. As time has passed, a multitude of new languages to write code have emerged, syntax has become far more intuitive, and technology has advanced in some wild ways. Yet, be that the case, there are some things that have never changed since the dawn of the industry: the mentality of the successful programmer.

I'd like to make one clarification before I proceed. Above, where I mention "successful programmers," I'd like to make a distinction: Successful in this case does not refer to the wealth a programmer has, his position at the top of the ladder within his organization, or the any type of worldly gain procured through his job as a programmer. Success here is simply defined as the individual who has embodied the characteristics we are about to talk through and is successfully employing them in his life at a whole.

Successful programmers embody many attitudes and traits; we will touch on 5 of them here: 

-Problem Solve

-Persevere

-Embrace and Learn from Failure

-Finish the Job

-Innovate the World Around You

_____________________________________________________________


**Problem Solving**


Programming is a process of solving problems. Solutions are arrived at through clear and logical thinking, analyzing complex concepts down to their most fundamental parts. A program goes from concept to operation in stages: analysis -> design -> implementation -> verification/testing -> production and maintenance. This very process has been repeated over the years by millions of programmers, generation to generation, with only one goal: Solve problems. In a world where you can solve most your life's problems through Google search and Facebook friends, in a world that is obsessed with social media and entertainment, we have lost the problem solving spirit of our youth; the mindset that many famous programmers attribute their success to: Programmers are problem solvers. They know how to think about a problem, and more importantly, how to approach it. The programmer realizes that specialization is not enough. Creativity and intelligence is not enough. Original thinking is not enough. The "thing" that wraps all of this up together and makes it work... is the ability for the programmer to think about the problem in the correct manner. In your programming career (hobby or professional) you will undoubtedly run into something that has never been done before; this is where the fun begins. Programmers have to be able to take an idea and think of ways it can be implemented in code. To do this, you will need the ability to quickly understand concepts that most people wouldn't understand unless they were told directly. For instance, say you are implementing some sort of data editor/browser; it doesn't matter how elegant you want to make it look or how nice your user interface is, the bare minimum you have to do is take some data and display it in a window. How could you do this? Well, there are numerous ways; which way would you choose? The answer most likely depends on the type of data. For instance, if you were writing an RSS reader, you would probably implement a tree data structure first on paper (or in your head) to represent the hierarchy of each node. Then there are different ways of rendering this list; you could use a text list with some CSS styling, or a table. What about radio buttons? If it is set up as an editor, then it needs to be able to add, edit, delete data. What if it is web based? How would you get the contents of a text file into it? These are all questions that have been asked before and answers found; if you don't know what those solutions are then you must research them or come up with them yourself. This is the cunning of the programmer. 

_____________________________________________________________


**Perseverance**


Programmers persevere through the most difficult situations possible. However, perseverance is not just about hard problems; it is also about not giving up after the first blow. There are so many programmers that give up when their Kickstarter fails to yield any funds, or if they can't get the attention of venture capitalists for their new start-up (even though some VC's flat out deny anyone who asks) but why did these people fail? It is because they were unable to persevere. They could not weather the storm and they gave up when things got rough; this is where perseverance comes in.


Not giving up is difficult because of the reasons behind failure can be more than just a lack of skill or being unfamiliar with the task at hand, but sometimes it is personal (injury) or circumstantial (no money). If you are a programmer, then perseverance is your bread and butter. You should always be ready to learn from failure and use it to improve yourself; this will allow you to tackle many different problems, even if they seem insurmountable at first glance.

_____________________________________________________________


**Learning from Failure**


Learning from Failure is a high level skill that not everyone can readily posses. There are many examples of how people fail. The key here is to embrace the failure in order to progress forward; learn from your mistakes and continually improve: The Wright Brothers and their failed glider, Edison's almost-failed light bulb, Jobs' IBM career and his next venture (NeXT/Apple), Musk and SpaceX, the list goes on. Failure is a part of life. Everyone fails (except for those that never try) and the skill that separates the successful from everyone else is failure's ability to drive them forward. If you cannot accept your failures or learn from them, then you will be stuck spinning your wheels on a "dead end" path. The simplest example I can give would be someone who keeps failing at the same concept or task over and over again. They keep doing it wrong, they keep trying to do it right, but they are stuck in this failure loop that continually drives them nowhere. This is where a programmer can break out of the cycle; if you were able to learn from your mistakes then you could think about the problem differently and approach it another way. To put it simply: failing is not a necessary evil; it can be turned around and used to your advantage if you know how to handle it right.


The programming world is full of people like this; people who keep trying to do something, but can never seem to get past the hump. They are stuck and they are unable to get out of it. It could be that they don't know how to learn from their failure; this is a skill you have to possess in order to continually improve. 

_____________________________________________________________


**Finish the Job**


Successful programmers are extremely dedicated to the tasks in store for them; they finish what they start. Whether this is an epic, multi-year quest to create a web application that will bring new data into your company's production database or a simple one-night hack job to just get your resume working; programmers always complete their assigned work. This is because successful programmers do not just focus on completing tasks, but they are also dedicated to their craft. If you spend time learning how to program and write code and then someone comes along with a small task for you; it may be tempting to jump right in and start helping (You'll find over time that programmers are extremely helpful to one another; the community is a great one to become a part of). Knowing how much workload you can handle, however is an important trait. Its critical to recognize when you're taking on too much. This is where the debate comes in about whether or not you should say "no" to helping someone out. The bottom line is this: The world is full of unfinished projects... I can't even begin to count the number of coders/programmers who start a project and then let fall head first in the "Incomplete Abyss." Don't get into a habit of starting a project and then failing to finish. Finish what you start and complete your work. The reward at the end is always worth it, and the habit you will begin forming is incredibly advantageous in this industry.

_____________________________________________________________


**Innovate the World Around You**


This is an important characteristic of anyone in the software development industry. In a world where technology changes every day, and new languages are created as fast as advances in computers allow; programmers must be on the forefront of building something new and innovative. This doesn't mean you have to start your own company and create your own product or service. You can still be successful in the industry without doing this. 


What I mean by "Innovate" is that you should make changes to yourself and your habits, and build something new that will better your life and the lives of others. If you fail at a project or task in front of you, consider it as an opportunity to learn something new. If you see a simple (or complex) problem in your day to day life, ask yourself a few questions:


1) How big is this "problem"?


2) Can I solve this problem with code/technology?


3) If I do solve the problem with code/tech, will my solution help or benefit people around me who have the same or similar problems?


This right here, is the basis for any innovation. Passion and drive to solve that problem are the ingredients for a great outcome.

_____________________________________________________________


**Conclusion**


The goal here is to isolate some very finite, yet complex character traits that you can begin to think about on your journey through the wonderful world that is programming. No matter what project you encounter, task you take on, or dreams you decide to build, if you embody and take action on these mentalities, you are setting yourself on the best course... a successful one. The Successful Programmer.

If you are interested in becoming a better programmer, learning a new language, or want some second opinions on the code you're writing, head over to P-PL.com and sign up! It's free to sign up and we've got experts ready to help you!