As a programmer, what is your mindset in a single day?

Developers come in all shapes and sizes, but they do share one thing in common: they all THINK like programmers. What people say about this?

Phillip McMullen, Electromechanical Systems/Software Engineer:

The Five Elements of the Developer Mindset

 

1. Learn to strap in and not stop until the job is done.

Anyone who has ever dabbled in coding knows that it is an exercise in patience. Sometimes, especially when you are getting started, you will spend HOURS trying to find one missing semi-colon or one miss-capitalized word that is breaking your script.

The good news is that computers are black and white: if it’s not right, it won’t run.

The first tenet of the developer mindset is cultivating the zen of coding: you have to learn to be calm, break your problem into the smallest steps possible, and methodically go through your scripts line by line to root out the bug.

Most importantly, you can’t give up until it’s done.

Now that I have been programming for a few years I can tell you that when I encounter a problem in my code that’s not easy to diagnose, the shift is literal. I will shift all of my energy to focus on the task at hand, often literally change how I sit in my chair, straightening my back, planting both feet on the ground, ready to tackle whatever comes at me.

 

2. Learn to love the pain. Or at least, not fight it.

Dovetailing on #1, part of cultivating the zen of coding is to reframe how you approach things that we are accustomed to feeling are “painful.” (Read more about the importance of confusion in learning here.)

I remember going to a dinner party at the house of a friend of my parents’, and their daughter had just had her wisdom teeth out and was sitting at the table all puffy-faced, complaining about being in pain and debating whether to take another painkiller.

Having had a few drinks, my dad looked at her devilishly and said: “Well, you could take another painkiller OR you could just learn to enjoy the pain.”

I still laugh when I think back on this both because it was sooo not what she wanted to hear and because he was so right.

Life in general and coding, in particular, is full of things that totally SUCK. But they are sucky things that we all have to deal with and work through, and the best thing we can do for ourselves is to try our best to reframe how we think about.

And fortunately, the Hallelujah moment you get when it DOES all come together is worth all of it.

 

3. Remember WHY you are doing something!

Coding is like…being asked to write a book using only numbers. How would you do that?

Well…you could use 3 for e, 4 for a, 8 for b…

The point is that you are in this constant situation of having a limited set of tools to work with, and an ever-changing set of things you are expected to accomplish.

The magic comes from you creatively figuring out how to bridge the gap between your limited toolkit and where you want to go.

A common trap for developers is to spend too much time focusing on HOW they do it. How clean their code is. How efficient. How fast.

And clean, efficient, fast code is a good thing. But only if it’s in the pursuit of something cool and useful.

The BEST developers come up with funny, smart, useful things to do with their technical skills.

Your challenge is to expertly use the coding tools at your disposal to make the MOST amazing, MOST useful thing you can think of.

Remember: code is the means, not the end unto itself.

 

4. Remind yourself that EVERYONE needs help. Reach out!

One of the biggest mistakes I see beginners make when it comes to programming is that they think they SHOULD know how to do it all and wait far too long before they reach out for help.

Stop that!

Look, of course, you do need to learn to be somewhat self-sufficient, but it’s well documented that just the process of asking a question can be enough to help you find the solution. So ask! Moreover, ALL developers need help pretty much all of the time. And programmers have created a HUGE industry out of helping one another with various coding challenges. Stack Overflow, run by the parent company Stack Exchange, is worth, by some estimates, over $300 million!

Looking for help? Start by googling for the answer and you will no doubt find countless forums, blog posts, and StackOverflow threads explaining just how to fix your issue.

If not, start looking for IRC channels by topic. If you are a Ruby developer, you can find one by just googling something like “Ruby channel on IRC” (#ruby-lang), or just search for the IRC channel of the topic of YOUR choice (Angular! Startups! Python!). Then download an IRC client and start chatting with other, like-minded devs! If in-person is more your thing, take a look at Meetup for language- or topic-specific meetups, or google for something like “PHP user groups” in your area (replace PHP with the topic of your choice).

 

5. Keep in mind that having fun is key. Remember to be playful!

Programming is hard. And the best way to make hard things easier? Have a sense of humor!

For as long as humans have had computers, we have been using computers to make us laugh


Suhayl Kodiriy, Music Producer (2014-present):

#include “./Neural_network.h”
#include “./terminology.h”
#include <time.h>
#include <iostream>
int main (int argc, char *argv[]) {
// declare and instantiate variables
Neural_network myBrain = new Neural_network(2017);
bool work = false;
//initiate wake up procedure
while (myBrain.get_dream_state() != terminology::REM_sleep.end())
{
myBrain.enable_motor_neurons(“arm”, “snooze”, “alarm”);
if (myBrain.get_dream_state() == terminology::REM_sleep.end())
break;
}
try {
myBrain.initiate_morning_protocols();
}catch {
myBrain.inform_boss(“sick”);
}
std::cin >> terminology::BREATH.deep();
std::cout << “Aaaaaaah!” << endl;
myBrain.activate_driving_procedure(“late”, “turbocharged”);
//has arrived to work
work = true;
while (work)
myBrain.functions->overdrive = true;
//note, this program has a glitch where the brain
// does not stop working. Have Hal look at this tomorrow.
return 0;
}

Animesh Jha, Game Programmer, Software engineer, Technical Artist:

Humans are born. Professions are created. Talents are found.

Keep the above line in mind, when you feel you are in doubt.

I have broken up the answer according to the description:

“I’m not a very big fan of math, never have. And I’m worried that I will never be able to build up my knowledge in math. I’m 16 and still in high school.”

My personal journey/self-discovery:

Natural engineers usually like to break stuff to know how it works. I burned my first processor by overclocking it because I couldn’t get the game Carmageddon to work correctly on it, the game ran slow, I had an AMD CPU when I was in 8th grade. Two years later (10th grade) I burnt my GPU doing a similar overclocking experiment. I sold CD’s by writing movies on to them out of piracy because CD-writers just came out, I made money out of it, bought myself a new RIVA TNT2, this card was a bomb back then. This is an obvious clue, you like to learn by doing, by breaking things to know how they work, and then you fix it. (Side note: I used to cut toys, but when you miss a screw after you put it all back together, you know you are “screwed,” my mom used to get angry with me for the same) Math is not really required for most people to be in the software industry as it is profession specific (I use it because I need to know the basics of my job, don’t mistake this as an ability to calculate really fast in your head, that doesn’t make you a mathematician). I was 19 when I started engineering, 21 when I failed, gave the exam again, passed, and 22 when I passed my engineering. Before this, I had Math and Arts simultaneously as choices in school. I liked to invent my own weapons, gadgets by drawing it on paper. I loved this and still do this to this day.

Random sketch I made a long time back (via my Deviantart profile):

You can apply Math to make art, in this case, Fractal art (made this in apophysis):

In India, Engineers are “farmed” not even made. You get 2 million engineers a year ready to take jobs which people in developed countries won’t do because they have the luxury of 200+ choices of career/courses. In North American college’s or university whereas a typical 4-year Indian degree engineering course will make any person make him go through three levels of Math whether he likes it or not, its a requirement.

 A high school student goes to extra tuition classes after his school for the three critical subjects required for technical colleges: Physics, chemistry, Maths, if you like Math but don’t like chemistry, you don’t get a choice, you have to do all three regardless. People who don’t like math or science don’t take technical courses because they can compete in Europe/America, in India you don’t have this choice, if you want a stable job, you need this. In the past 10 years, the economy has taken a turn because money is now flowing into India from foreign companies for the above reason. Which is a good thing for India at-least, but this will cause studios to close down elsewhere because you can employ four Indian engineers for the same salary as one engineer in Europe and NA.

The financial conditions of the family and the parents themselves can and usually would skew the making of a person into a more practical profession, the Holy Trinity of occupations being: Engineering, Doctor or Business.

Now back to your questions:

1: Can logic and problem solving be taught by living by the principle learning-by-doing, or am I at a dead end here? I AM _REALLY_ willing to spend all my free time in a college math class if the mindset required for programming can be taught over time.

Learning by doing will super-cede book knowledge almost always because the current technology can never be put into books immediately, only the basics can. So you might learn C/C++ to begin with like me, but you will be placed on a project which has C# and now you have to learn a new language on the job. Not easy tasks if you have less time to complete it or a deadline coming, if you can’t do it, you might be replaced.

2: Are you, or do you know anyone who entered a programming class with zero logic skills who ended up being a good programmer?

Yes, I work with two of them, I can’t comment on who is right or not because they both do a different kind of work, but the design aspect is usually handled by someone who is an engineer and is more experienced with the system, not just a code monkey. So if you ask who is more skilled between two people both knowing how to code, I would say someone who knows how to be an architect of a system by designing it. The design comes with experience not just book knowledge, but good design can be learned from reading about real-world examples of live projects which are successful, most significant being Google and Facebook.


Final Note:
I didn’t like math but had to do it. (I even flunked in engineering Math but the irony being that I use more Math than the people who passed with flying colors). Hence conventional knowledge usually would tend to scare you, but you can gain your confidence back by killing your fear, how?

Be curious, ask questions, learn to find the answers. Engineering taught me how to learn, more than anything else, I wanted to join Pixar knowing my skillset of half artist, half engineer. Hence that is my next goal, already achieved my past intention of releasing an international game title.

I will end by saying that from 15 to 25, I just learned one thing:
I know nothing and knowledge acquired out of interest last longer than what schools teach you, hence stay hungry, stay foolish.