As I learn to code, there are many times that I just cannot go on. I just cannot solve this error, sometimes for days. Sometimes when I stop to complain to somebody about why the code is not working, I finally understand the problem. By mouthing out loud the problems I was facing, I reached a higher understanding, or considered something I had not yet tried.
If I had a mentor of some sort, I suppose this would not be needed, as at that point I would have a knowledgeable person who can talk through the code with me. But if nobody near you understands code, It ends up being just the nearest friend who will listen. I will complain for hours to my friend James about what I cannot do, only to find out that it helped me find a solution. This is great, as long as you have a person who is willing to listen to nonsense they don’t understand and can’t reciprocate. Most people enjoy conversation, rather than being mindless reservoirs for code-complaints.
It turns out that a living person is not even needed. I actually became more knowledgeable about the code i wrote, by explaining out loud what it is supposed to do, then reflecting on what it is actually doing. This has been recognized as an informal term called Rubber duck debugging.
Rubber duck debugging is an informal term used in software engineering for a method of debugging code. The name is a reference to a story in the book The Pragmatic Programmer in which a programmer would carry around a rubber duck and debug their code by forcing themselves to explain it, line-by-line, to the duck.
Continue reading “Liver Debugging”
As a student of web development, i often run into errors or new technology that seems insurmountable. I sit in front of my computer, and with my mouth gaping open, witness the overwhelming mass of confusion that is laid before me. I have no idea where to begin, and all i can see is how big and impossible this looks.
This exact feeling is what keeps many beginner developers from continuing on. It does seem insurmountable and you know it is going to take a big chunk of time and energy to figure it out. Some thoughts that might go through ones head: Do i even need to figure this out? Maybe i’ll just skip this and move on to something else. Maybe i should try a different career.
10 Reasons Why Climbing Mountains Can Enrich Your Life explains ways that climbing mountains can affect your life in positive ways. Ill be the first one to tell you that there’s no way i’m going to try climbing an actual mountain in my current physical state, but I am going to use quotes from this article in relation to programming.
Continue reading “When Climbing Mountains”
As a person who has worked as a hardware/electronics technician for many years, I am often wondering what skills do i already have which will be useful in web development. I have worked many jobs in the last 25 years, and built up a pretty good skill set based on making mistakes and learning from them. I’m going to brainstorm a little bit here and see if i can’t find some common ground.
in The 4 Most Important Skills for a Software Developer, Simple Programmer says the four skills of a good software developer are:
- Solving Problems
- Teaching Yourself
- Dealing with People
Based on this list, it seems that the job of a programmer, language skills aside, are somewhat the same as that of a mechanic, or hardware technician who repairs objects.
Continue reading “Skill Shifting”
As a beginner and student of programming languages, there are many new concepts to learn and understand. Many of these concepts are designed to make things clearer, not only to learn, but to put into action. It seems like one of the most important aspects of good code is clear and understandable architecture.
Everything is better off with a solid structure. Buildings, cars, people, politics; all of these are stronger as a result of an organized structure. So, as we go into coding, it should also be important to recognize this common idea and be able to understand it to a functional level.
Object-oriented programming (OOP) is a programming paradigm based on the concept of “objects”, which are data structures that contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods. A distinguishing feature of objects is that an object’s procedures can access and often modify the data fields of the object with which they are associated.
So, we create objects that can be reused and altered as needed to perform repeated tasks. I play the drums. When i pick up a stick to attack the drum head, my mind thinks to hit the drum in a certain way that correlates to the music i am trying to emulate. I do not think about how my heart is pumping blood to my fingers. I do not think about where my elbow is positioned, and i do not think about the actions of my muscles and nerves in my hand. The hand, elbow, and heart are all objects. The do not need to be brought up front in my mind every time i hit a drum, it has become a fluid motion. This way, i can play faster and with less energy use. This also applies to programming.
Continue reading “Structure and Object Orientation”