Critical thinking and programming.

I think that critical thinking skills apply to coding a project.

From Wikipedia and noting that No One Is Perfect:

Critical thinking calls for the ability to:

Recognize problems, to find workable means for meeting those problems Understand the importance of prioritization and order of precedence in problem solving Gather and marshal pertinent (relevant) information Recognize unstated assumptions and values Comprehend and use language with accuracy, clarity, and discernment Interpret data, to appraise evidence and evaluate arguments Recognize the existence (or non-existence) of logical relationships between propositions Draw warranted conclusions and generalizations Put to test the conclusions and generalizations at which one arrives Reconstruct one's patterns of beliefs on the basis of wider experience Render accurate judgments about specific things and qualities in everyday life

In sum:

"A persistent effort to examine any belief or supposed form of knowledge in the light of the evidence that supports it and the further conclusions to which it tends."

That last part ..... the heart of debugging?

I believe that critical thinking being taught in schools less and less (and in some home-schooling not at all, to make good little robots) and this is why we see so many mental zombies that don't have the ability to trace even a few lines of simple code. It's like it's all arcane incantations, they keep asking for the magic. When you give it to them they don't work it out, they just copy it and plug it into whatever abortion they build next and ask why the magic doesn't work.

What does it take to get people to THINK? IMO, treating them like cripples only reinforces the "I can't" attitude.

I think everybody in this country should learn how to program a computer because it teaches you how to think.

Steve (might have been the devil) Jobs

GoForSmoke: I think that critical thinking skills apply to coding a project.


GoForSmoke: I believe that critical thinking being taught in schools less and less (and in some home-schooling not at all, to make good little robots)

At least you have known schools that teach it. I honestly don't remember anything like this during my secondary education. The official program was indeed all about making good little robots, except from a few really good-hearted math and phys teachers who gave some kind of "underground lessons", for free, during their free time, for the ones interested. And even then we weren't many, and everybody already had it.

My point is, can you really teach people to have critical thinking ? I believe you are born with it (for the most part), it's more like a character trait. Some people want to solve a problem when encountering one, some turn away. No matter how much you explain them how rewarding it is to sort out some very complex thing (in programming or in any other field), now matter how convincing you are when telling them that all the interest (and the fun) lies in the journey rather than the destination, some people will always come ask you to wire up their DVD player.

Edit: mistake fixed :sweat_smile:. But i can argue this one in particular didn't produce an error message.

Public HS class of 75 with some very good teachers. Their main goal was to teach us how to learn. It wasn't easy and I can only claim to limited success on my part.

I don't dispute wants. I think that the skills are not something we're born with at all, there's enough developmental psychology to show that. Also how many people do you know that run on hunches when things get past simple, sometimes dead simple?

And then there's the people who employ argument from ignorance which might work between humans but never cuts it with machines.

I'm always having to discipline myself and have many memories of finding bugs hiding under my assumptions to think I'm made of logic. :grin: In fact, one way I've fixed or improved my own work has been by questioning it and my approach. When I code Arduino I have a browser with tabs to the Reference page (syntax keeps slipping from my mind) and sometimes the AVR-LibC libraries page. Sometimes I have 2+ IDE windows open with working code examples.

How many people do you know who actually check a dictionary past age 18, if even then? Or use a spell checker often to spell the wrong word correctly? How many people spell 'your' for your, you're, and yore or 'there' for there, their and they're? Context lets that slide in English but try that with C code!

What people do, they do. This is about what people can/should do to program. One part is to identify what you're actually doing which is a critical thinking skill.


I think everybody in this country should learn how to program a computer because it teaches you how to think.

Steve (might have been the devil) Jobs

programming is just one way of thinking imho.

I think people should learn to observe first. (re)learn to use their "inputs" and be aware what they see hear, see smell feel taste experience.

@ GoForSmoke,

Well ok, I see your point. But if objective thinking is a skill that can be acquired, acquiring that skill is almost instantaneous : once one has been told that he just have to ask himself “where is the problem” in total, complete honesty, regarless of anything that isn’t the work he’s on, that’s it. And remebering to apply this “tenet” (or the steps you listed in your first post, for instance) cannot be difficult as an error (be it an compiler message or an absurd result) will always pop into your face, daring you to fix it.

In that view, I still fail to see objective thinking as a skill (but problem solving, yes completely - that’s a different yet related issue), with the lengthy processes involved to master it, like computing particle cross-sections or piloting an aircraft is.

But perhaps, I misunderstood your point ?

Have you been to the Project Guidance or Programming Questions parts of the forum?

:) Well, I've asked several questions in the programming section, but I don't really look at other people's ones (unless Googles points me one relevant to my query, of course). But I think I've got why you asked me this.

Lots of examples why I posted the thread.

GoForSmoke: Lots of examples why I posted the thread.

You mean the

Hello, Can someone please give me the code to make the arduino control my house?



It seems that a lot of people are unable to break up problems into smaller parts.


I think everybody in this country should learn how to program a computer because it teaches you how to think.

Steve (might have been the devil) Jobs

Don't mention that guy... makes my blood boil...

Learning how to program is a curse... after 5years (17 years now) you change the way you do things in real life, i kid you not, i doubt many people are aware of it, to speed up coding time the easiest way is to not make mistakes and have to constantly look at material to help you code.

  1. Less code.
  2. More readable
  3. More Efficient
  4. Think of everything that could go wrong.

Number 4 is the killer.

Once you get the hang of 4, it makes life there's no longer the thought of "let's go out and do something" it's a "if i go out" what could go wrong?

Will i be burgled? Will i get mugged?

You start thinking up every single possibility of what could go wrong? why? because that's your new mindset, programming will do that to you.....

it's a bloody curse!

4 is why we quote Murphy.

First thing to speed up code is to get unambiguous requirements and domain knowledge. Thereafter get the design/architecture right. After that coding is most often not that difficult any more. Good requirements give you also the fit criteria to define and build unit, integration and acceptance tests.

Imho one of the biggest causes for bugs is feature creep translated into code creep. Feature creep in its turn is often caused by not understanding the user (= part of domain knowledge) and pressure to make a quick win.

That's solid Rob though IME feature creep is most often the result of managers/customers that don't have more than a clue about the code and an inverse desire to "make it like a Microsoft app".

...don't have more than a clue...

100% right : Customers know what they want after it is build and managers know what they want after it is sold ;)

Getting the requirements right (before the coding starts) is really the most difficult part of a project. The R. must be unambiguous complete explicit communicable (and more ....). You need to dig in and understand the mind of the user (the one using the product) the customer (the one paying it) the salesman (the one selling it) the marketing manager (the one wanting it fit in a company portfolio) and the developer (that's you :). Depending on the product you probably need even more "mind melts" ;)

Learning to program is one art, learning to understand peoples (deepest?) wishes and motivations is a complete different one.

One of the better books on requirements imho is - - I did the course from Suzanne Robertson, so I am biased.

I think critical thinking can be encouraged on this forum by not rushing to the aid of someone who is a new poster. People are constantly coming here like its a free clinic. They ask their question, someone spoon feeds an answer, the poster dissapeers off into the blue. What are we left with? A clutter of broken thread stumbles that lead to a waste of time reading.

Someone comes on and says, "I've got a project, it doesn't work, I'm stuck, what am I doing wrong?" Sadly, someone comes along and "helps" them. Why not just reply by pasting the op's definition of critical thinking? Or paste the step which you think applies. At the end of the day their project isn't interesting so don't invite them to divulge their hobbled together sketches so that you can sort it for them free of charge. Instead, have them divulge what they've done which works! Otherwise you're just helping someone else keep their successes and discoveries secret, and are encouraging proprietorship.

There is no reward in doing this. Why give your expertise for free? All that does is encourage a feeding frenzy. If new posters want help, find out if they have done anything to make this forum an interesting place to go before prostrating in servitude to their every need.

that can go both ways, for a noobie it can be helpful for some genuinely stumped it can be highly frustrating

The ones that make a habit of playing lame do get identified and called out for it. The ones that put in effort do enable the best help to happen for themselves, we appreciate that.

I read a lot of threads that I don't post in just to pick up tips. From the visit counts I expect that a lot of members do the same. So what help is given to one is generally also given to some/many and not wasted.

You have a point that instant solving the ops question might not be the best idea, but (there is always a but) first learn him some way of thinking and let him/her grow step by step has it drawbacks too. E.g. other people finding the thread, find a short thread with a quick answer, instead of a three or more page discussion about BWD1 or whatever…

There is no reward in doing this. Why give your expertise for free? All that does is encourage a feeding frenzy.

Yes, for some it will encourage feeding frenzy, their choice.

Imho there are big rewards in giving my expertise away for free.

  • It learns people that there are other values than money and that makes the world a bit of a better place.
  • It makes knowledge available to the masses preventing a split in society of the haves and have-not’s
    (remember the medieval times where the knowledge was in the hands of a few)
  • It gives people insight how things can be done in code/mechanics/electronics that they can study
  • I learn a lot from analysing some interesting problems (e.g. relation between speed of sound, temperature and humidity)
  • and for me personally it feels good to help people, it gives more meaning to my life than being a couch potato :wink:

And no, I do not (need to) give the best and most engineered version of the code at all times like I am expected to do in my paid job. On contrary most of the times basic (parts of the) solutions are given which the OP needs to convert to his own problem domain.

If new posters want help, find out if they have done anything to make this forum an interesting place to go before prostrating in servitude to their every need.

So a newbie with 1 post will never be helped? just because he is a “stranger” to the forum? If you want people to grow you should help them when they are still “new and fresh” and learn them the right way to do things.

Remember the (Irish?) proverb “A stranger is a friend I have not met yet.”

1Blink Without Delay

I'm more than pleased to offer help where I can, but the limits people impose on their ambitions due to the requirement of extra thought is somewhat dispiriting. That is most of the posts requiring assistance are looking for a way to avoid thinking altogether.

If it is a case of someone who is willing to use their brain but is a have not, I've got nothing against offering to help set up and stock a community workshop or hack lab / resource centre to give have nots access to tools and knowledge and workspace.

I think the interesting projects are group projects. At the moment you've got one person here and one person there with their project which they want to rule over like a god. Yet all of these people are basically attempting the same thing. Everyone is basically working on the same bit of circuit. I just see the same projects come up time and again. Take scoreboards for sporting events for example.

There is only so many times you can take an interest in display board interfacing and powering till you come to the point of yawning and thinking oh god not another wretched sign post wiring problem. There is no other way to describe it. It is very very dull untying other people's knots for them.

I like the proverb, give someone a fish and you've fed them for a day. Teach someone to fish and you've fed them for life. There should be a database referral system set up to document all the... Actually no, because I can bet I know who'd have to build it and it still wouldn't work because they already exist and work fine but no one can be bothered to go and use them.

The central problem is that nobody wants to work together on physical projects. Few people understand that... OK let's take the sign post people. Lots and lots of people want to build those. Basically their function is identical to another bar aesthetics. Now one person can hobble up a sign board that is dedicated to a highly niche purpose but is in terms of functionally desirable attributes no different from the next. So why don't all the sign board people around the world get together and work on creating a super upgrade able recycle-able configurable set of interchangeable processes for creating your own decent sign board on a budget? An ongoing project where this thing is constantly being improved like with software?