Is intuition in programming important to you?

Note: Read only the bold statements if you want to skim this quickly.

Do you remember the first time you saw classes? Objects? The word “string?” What about binary trees, regular languages, compilation of languages, and recursion?

I don’t realize it myself a lot of times, but I’ve come a long way in changing my mindset to handle the terminology of programming ideas and make them seem natural. I think others are the same.

Do you remember the day when you didn’t understand anything of programming terminology?

Today, hundreds or thousands of people are in that same situation. Today, many people do not know what a “segmentation fault” is or why their program is crashing. They don’t know why a reference for WinMain@16 is missing from their MinGW program that makes use of wxWidgets when first tangling with Code::Blocks, and they certainly won’t know how monads relate to endofunctors.

Do you remember how you first grasped your first to most recent ideas of programming?

I remember my personal experience: it was late at night trying to figure out why my 5th project in C++ was not compiling and I began helplessly throwing questions at Google and Stack Overfow.

I had no idea what I was doing, and — who’s to blame? — I just didn’t know what I was doing.

I remember that my account was question-banned on Stack Overflow for trying to ask questions as an independent learner, one or two semesters before I would ever encounter my first C++ program in college.

Of course, Stack Overflow has a strict policy on repeating questions that have already been answered, and an unwritten, unspoken policy on downvoting really basic questions — which I quickly learned after the fact.

But after three months of hitting roadblocks in compilation and unable to pass barriers of discipline and knowledge required to go directly to documentation, I found myself on top of a basic GUI system implemented on-top of SDL with Lua scripting on the side.

Learning can be a frustrating and humiliating experience; it can also be thrilling and easy given the right mindset and the right resources. To me, learning is not about wading through descriptions of mind-constructs and precise, compiler-like terminology to simply parse the mechanisms by which we build, arduously and untiringly — we make and mutate what is.

It’s not about the methods by which we gather information — we do not learn by reading documentation, but, rather, by the methods by which we internalize, understand, and distill such knowledge.

Learning is compressing methods and ideas intuitively so that they can be reconstructed and utilized at will.

Who is aiming to precisely teach “how to compress methods and ideas intuitively so that they can be reconstructed and utilized at will” for basic programming concepts? For searching and understanding basic programming terminology?

Opponents of doing such might give the arguments that “we don’t baby people around” and “people are capable of Googling the most basic of concepts,” but I don’t blame a baby for not being able to walk when all he or she can do is crawl.

If you remember the time that you searched “What is the best programming language?” on the Internet, you may remember that the best answer that  was given was no answer at all. People even think that asking such as question is wrong (and “wrong questions” do exist, in a sense).

I tried to write a tutorial myself. I worked on a C++ tutorial blog a few months back. And it’s horrible. It’s a mish-mash of concepts that are out-of-scope, poorly explained and written, and are not focusing on compression of knowledge into intuition. There is no notion of audience or aim; just a spewing of bits of knowledge that fail to present a coherent whole.

I now think that it’s not about just simplicity or a short word count, but teaching concepts so that they become intuitive to the receiver.

Many people want to learn programming today. Today, many people are starting at ground zero, with no equipment to learn for themselves. And today, you are the more experienced.

I’m writing this because I want to ask three questions and see what other people think:

  1. Is intuition in programming important for you? How would you teach correct intuition to a beginner?
  2. What concepts were important for you for sustained learning in programming?
  3. What resources do people need to map out programming for themselves and say to themselves: “This is what I know,” “This is what I don’t know,” and, “This is how I’m going to learn this?”

6 thoughts on “Is intuition in programming important to you?”

  1. I would like to think insight into (general) systems and processes are more important than the programming itself. Eg how do we get A from B with these set of rules? The rules are programming language rules and an understanding of how to navigate A to B. Some people have quicker comprehension of these systems. You could attribute it to intuition or talent. But great engineers are those who understand the problem and can create solutions regardless of programming language. So teach people analytical and problem solving skills first. Intuition wil follow.

    Like

  2. I’m currently studying computer science, but as it stands right now I’m way ahead of my class. I think that is because I taught myself to code, even before going to this school. Seeing the struggle of my costudents, trying to understand programs just by the concepts they were told to learn by hard, I totally understand what you’re going for.
    What got me to the point I’m at today was simply never stopping to code. That feeling you get when your code works is magical enough to continue doing it, and after a while you suddenly grasp what you are doing.
    I think you just need to show people how rewarding telling a computer to obey their rules can be, and when they start coming up with their own projects and ideas, intuition is just around the corner.

    Liked by 1 person

  3. I think that we should stop using the word “intuitive” and “intuition”, especially in a technical field, and mostly especially in the context of teaching. Have you read this paper by J Raskin? http://www.asktog.com/papers/raskinintuit.html I think the paper is compelling and that intuitive just means familiar (and the mystic “je ne sais quoi” layman meaning is not constructive or rigorous). So the question “is familiarity in programming important to you?” doesn’t have a meaningful answer. I respect your careful consideration of how to perfect the teaching process, or conversation, as I think of it. In doing so, I think we have to begin on solid meaningful premises.

    Liked by 2 people

  4. A long time ago, on the newsgroup alt.sysadmin.recovery, one of the regulars had a signature file that read “The only intuitive interface is the nipple. Everything else is learned.” This quickly spawned a hundred-post thread after a woman in the newsgroup pointed out that babies don’t exactly take intuitively to nipples, either.

    A native computer user might think the mouse is intuitive, but having had to teach multiple adults who had never touched one before how to point and click, I can assure you it is anything but.

    What we call intuition is just pattern recognition. People seek to fit anything new they find into the patterns of what they knew before. You can only “teach” intuition insofar as the things you teach today are consistent with the things your student is going to learn tomorrow.

    Liked by 1 person

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s