How to think like a programmer

10 tactics to compute thoughts like a programmer 💭💭💭

The modern marvel of the 21st century is still the computer, an integral component that supplements the building block for any device with logic or automation. The limitations of the computer are no longer known as a result of juxtaposing exponential advancements in a computer’s hardware(memory, processor, etc..) and consistent Software breakthrough in development by communities of dedicated open-source developers. With computers being such a necessary component to daily life you would assume that operating it would be simple and intuitive. This however cannot be the case because of the specification it takes to operate computers from the Command line with precision. With the introduction of Microsoft GUI the world has experienced a very functional computer that does not require much technical skills to access applications. This has unfortunately created a crutch for most users of the computer who will never interact with or understand the power they possess with the command line. This blog unfortunately is not for the fore-mentioned group. Being a coder is not a 100% guarantee you will understand or be required to understand the complete complexities and intricacies of the languages you operate. familiarity with different code comes with the added benefit that once you’ve encountered and practiced enough code the syntax of the language makes it easy to understand the limitations and possibilities of the language.

The spoils from coding don’t come cheap and any one error could cripple a mammoth program. This idea or realization may detour many aspiring programmers but if you follow these 10 tips, refine your process and then meticulously apply that process, coding, problem solving and BDD(Behavior Driven Development) will become second nature to you. With enough practice you will be able to think logically in different coding languages and formulate abstract lines of code to solve many diverse problems.

BE ORGANIZED!

Organization wasn’t a strong suit for me before I started programming, this is a hurdle that all programmers will have to cross in their advent. everyone processes information differently and some things will immediately stick for a few while others will have to endure a grueling trial and error process. The problem with ignorance is that it is often bliss and you might not be aware of what exactly your weaknesses are or where you could use additional re-enforcement. The ultimate goal of every piece of coding information you have received is to understand how it functions in the grand-scheme of the programming language. By refining your code organization skill you now allow the code you have to belong to a bigger more stable idea structure in your head. This makes commenting on your code easier and and allows for easier collaboration with other developers as they can easily and precisely follow along with you train of taught. “Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live

Separate Code from personal Life

The most uncertain part of coding is knowing when you have done enough. With the constant developments taking place in the coding world and the amount of resources already available, The recurring question most programmers face is am I doing enough. This establishes a very toxic outlook on your growth and progress as you focus too much on what you don’t know, instead of simply understanding then moving on. A very effective strategy to implement is to predefine your coding schedule and dedicating the entirety of the allotted time to working on coding. In your free time you will occasionally get a burst of inspiration in regards to the code you have been working on, this is encouraged, but try to hold off on confirming your curiosity until your appointed coding sessions. This will allow for you to build up excitement and anticipation for your code and allow you to have more fulfilling and informative coding sessions.

Stay Positive

Coding will consistently feel like an uphill battle, as my Software Engineering professor, Eric rightly said “learning to code is similar to the motion of stocks on the stock market, you will have many good days and you will have bad days, but the general direction of the trend is up” The idea impacted me profoundly because even though the trend of the stock market is typically up, sometimes it has had drastically unfavorable declines. This will sometimes give the appearance that the market wont recover for a while, then positive information is released in the press and before days end the market is recovering. The same applies for us as programmers, in our ignorance we believe that the next addition or stage in our code is such a hurdle that is insurmountable or will require extensive effort to implement, but in reality the code needed to make it over the hurdle is simpler than you think, it’s just unfamiliar. This unfamiliarity will only go away when you use the code yourself so practice with out outside of your main project, and keep positive you can see the all the opportunities/possibilities in all the code you come across.

Express yourself in your code

Coding is a constantly evolving combination of different pre-defined keywords, variables, functions and libraries. with these tools we have a truly infinite combination sequence, humans were never made to process the infinite only acknowledge its existence. When we consider the nature of code you can easily contrast it to ideas of the Prussian mathematician and logician, Leopold Kronecker, famously declared “God made the integers; all else is the work of man.” He believed that math is a language and a tool but it’s one that we discovered. We did not invent arithmetic; adding two and two will always give you four. the built in key-word and libraries exist and will continue to exist, just as how integers will always exist. the keywords and libraries will always exist in the language and combining those stable elements with your own variables and functions allows for unique diverse programs. The stable predefined elements interact with your original variables and functions, this allows us to be authentic about what we code and even how we code. Allowing for various processes and even further advancements in the domain of your choice, which will not only bring you joy but people who have similar passions.

Identify Patterns

The most convoluted philosophy in coding is the in the context of DRY Don’t Repeat Yourself. Many assume this is meant to mean coding should be a theoretical practice and every code typed must be typed only when needed. This expectation makes us very hesitant with the amount of code we type which makes it very difficult to build the essential muscle memory needed to effectively produce syntactically correct code off-the-fly. With repetition and understanding eventually you will be able to achieve a deeper level of understanding called abstraction. Once abstraction is achieved you will not need the exact replication, but you can see the core, central idea that encapsulates the concepts. These patterns become sub-consciously linked, which will lead to an increase in the diversity of problems you can solve.

Overthought(The ability to deconstruct and reconstruct ideas)

The concept of Overthought originated with the My Hero Academia antagonist Kai Chisaki whose ability was called overhaul. This ability gave him the ability to deconstruct and reconstruct any matter he touches. By applying that concept to ideas and abstractions you begin to see that everything can be broken down into smaller pieces and/or that concept is just a portion of a larger more intricate idea. You organize these concepts, incorporating them into the larger ideology scheme and then use it as a basis to build your code up to or a starting point to create a larger application from. Matter is the building block of things in the physical domain, similarly, code is the building blocks of applications. By knowing how to deconstruct others codes to use or build on is an invaluable asset that elude many would be developers

Resource Filtering

When you encounter a problem your first step is to make it work. The goal here is only to understand the problem and how to find solutions. Nothing more. You might be thinking that your program should also be correct and optimized all in one but doing premature optimization never ends well. Remember that a good solution has to evolve and become better over time, start with just any solution. You can make the code do what it’s supposed to do in whatever ugly, messy manner you want, so long as it works. We are talking about software and there is no cost of materials so instead of trying to find a perfect solution in your first attempt, only find the solution that makes the feature work in your software. Don’t waste your time worrying about whether your approach is ideal, your code elegant, or your design patterns perfect. If you think that there are multiple solutions and you are unable to find the best one then pick one and go with it. Once you’re done make sure it works and works repeatably. The skill of information refining even with the modern Internet is still very daunting. The abundance of information on the web makes it increasingly difficult to get the precise result needed especially without the exact key-words. This test our ability to filter vague resources for related key-words to steer us on our road of discovery.

Resource Incorporation

Your job is to follow the refactoring fundamentals to improve your code’s design. Follow the software principle, check if any design patterns might make your solution more conventional. Refactor; Deduplicate code, clarify interfaces, sole responsibility, etc it’s highly recommended that if you have enough resources and time then always think about the performance of your code. Code optimization is not just about “how can I get this code to run faster”. But it is more than that. Your code should take less time and it should use fewer resources. You should be thinking how can I make it more testable, how can I make it more extensible, how can I make this code more valuable to the user.

Creating Your Own Master Plan

Let’s look at constructing a sample master plan. The ingredients include all the problem-solving techniques we have developed, plus our analysis of our strengths and weaknesses. For this example, I’ll use my own strengths and weaknesses. In terms of problem-solving techniques, I use all of the techniques I share in this blog, but I’m especially fond of the “over-thought” technique because using that technique allows me to feel that My understanding of my code is never lost on its own island but a part of a giant City where every idea is a valuable citizen Working vigorously to demonstrate their importance. If I’m currently unable to figure out a way to write code that meets the full specification, I just throw out part of the specification until I gain momentum. Start with What You Know When you begin learning a new programming language, by definition you know nothing about it. If it’s not your first programming language, though, you do know a lot about programming. So a good first step in learning a new language is to understand how code that you already know how to write in another language can be written in the new language. As stated before, you want to learn this by doing, not just by reading. Take programs you have written in other languages, and rewrite them in the new language. Systematically investigate individual language elements, such as control statements, classes, other data structures, and so on. The goal is to transfer as much of your previous knowledge as possible to the new language. Investigate What’s Different The next step is to study what is different about the new language. While two high level programming languages may have extensive similarities, something must be different with the new language, or there would be no reason to choose this language over any other. Again, learning by doing will always be the most beneficial.

Always Save

Save your work!

Make checkpoints every 15–30 minutes to save your work up to that point. It is also beneficial to save as deliverables are met to give you some security if the unexpected happens. These saves make a big difference, but don’t wait until all is lost to appreciate how wonderful it is to save.

Software engineer