You must develop computational thinking

Excuse me but why isn’t anyone talking about THIS?

As someone who’s learning JS but gets desperately stuck when it’s time to code ANYTHING, even the simplest tiniest thing in basic exercises, I couldn’t get what the issue was. It felt like I started learning at the wrong angle entirely even when I tried to change my approach to more practical. I couldn’t explain what is it that I don’t understand.
It was my lack of computational thinking. Yes, I am good at problem solving but in different categories of life. Programming is a bit different. If you learn computational thinking, you will be able to use pretty much any language (unless you fail to understand the language itself) because you’ll understand the principles of “how to think like a programmer”.

Here is short and sweet explanation of what CT is:

Here’s a VERY promising looking textbook on the topic that I’m gonna start reading today. You can find free PDF somewhere online, I’m not gonna post it here as it is piracy.

This book is far less technical, written for absolute beginners who’re more used to liberal arts and practical fun exercises:

I also found this light, exercise based course fitting for high school students or 1st year college folks. I might try it:

I hope this post will be helpful to anyone and if you have any more resources to study this topic, please share it here. ^^

Usually, you’re supposed to develop just enough CT by learning math but this approach simply doesn’t work for everyone or it doesn’t work when kids don’t quite understand what they’re trying to REALLY learn in math class and they’re just battling numbers. :confused:

5 Likes

Yup, this is exactly what most of us regulars on the forum mean by saying that to learn to code you need to develop your ‘problem solving’. We mean ‘problem solving in the specific context presented by computational problems’. I’m glad you found words to describe that process that make sense to you!

5 Likes

I think it would be a good practice to be more specific when telling people to learn problem solving. Internet is flooded with correct but too vague advice like that. x_x

4 Likes

In my humble opinion, Computational Thinking is like Systems Thinking applied to Computer Science problems. You need to understand the whole of the problem and the interrelation among its parts to give a reliable solution.
This is an habit you could develop, not only with Mathematics. Apart from practicing programming(the foremost thing one should do) , one can apply problem solving through designing, writing, philosophical argumentation, budgeting, and even seriously playing Shogi or Chess.
Problem solving could be more common than we think.
No need to read five books on computational thinking. Though of course, this stuff may be a good start.
Hope this helps.

4 Likes

Unfortunately, I have not yet mastered the art of knowing the exact words that will make sense to each person I talk to before talking to them :grin:

Personally, I tend to use more colloquial terms in my explanations where I can, especially for something like learning strategies. I find statements like ‘you must learn computational thinking’ to be intimidating for some learners. There are hundreds of ways out there that people describe their understanding of how to solve problems in code and I’m not big into 'one true way’s. I prefer to start with a more general term like ‘problem solving’ and then use other terms as the learner prefers.

But, like I said, its cool that this description works for you. Knowing what works for you is important.

2 Likes

Pretty much… Earlier in my life I was focusing on learning about and exercising critical thinking, deduction, design, logic in art of rhetorics. It’s all similar stuff but none of it is helping me right now with the issue of using JS in practice. It feels so similar and yet too different. Oh well, I am happy to develop new way of thinking on top of my current arsenal. Learning CT will work very well with the rest of my interests so far.

1 Like

Basically it would be more useful to let people know which terms and phrases to search for so they can further research and understand core issue. To explain to them what elements make problem solving possible. Algorithmic thinking, decomposition and pattern recognition are so useful to google because you suddenly gain a whole new angle. Whether people will take this info and do anything with it is their deal but at least now they KNOW. :smiley: Anyways, thanks for being helpful guy.

I think is great. Perhaps these things are not helping you explicitly but if you did them well. In one way or another they are easing your learning.
Also, coding is Not easy, even if you have the right attitude, it takes time, there is no “Mozart way” in coding, you need your time to learn.
Your learning skills are in a great part a mirror of your environment. Try to create a conformable way of learning. If Computational Thinking theory helps you, that is great!
Have patience,since you are concerned about the best way for learning you are already making progress.
Best wishes

2 Likes

I think it depends. Again - no ‘one true way’. What works for one person can be harmful to understanding for others. I’m glad that you like this approach, but I don’t think I’ll be telling every new learner that they must use the idea of computational thinking.

Sure thing, I think I’m just too excited right now because I’m having an eureka moment AND I MUST TELL EVERYONE AT ONCE. :'D

2 Likes

Hi @BurningQuestion,

Something that I see often in the forum is that people think using JavaScript, and that make everything more difficult(the usual recommendation in this case is replace JS with pen and paper).

The thing is, a solution is not the same as an implementation(in the implementation you have to fight numerous constrains). A good way to see this is read the posts(?) about the calculator project in the forum. An Example[0]

… I completely agree that this logic is difficult to understand

… In a nutshell I wrote that to solve the User Story #13 after a lot of trial and error.

I see, so your app evolved, it was not designed. This is really common, IMHO is because most people write code “at the function level”, they write functions not systems. Another reason, is because they think using a programming language. The problem with that is a programming language is not the best tool to think[1]: it make difficult to express things that are often trivials with other tools, and the need to use a specific syntaxis can result in the waste of many hours fighting the language. Most of the time pen and paper is a better option. I really like to draw diagrams and tables for my apps, when I read code I have the tendency to try to “see” the logic of the programs, so is easier to use paper (maybe you can try to describe the logic of your app using other thing(not code, and it doesn’t have to be drawings)).

Also, the implementation of a solution in a programming language is difficult. Programming languages are opaque/unintuitive/verbose/imprecise[2] and most of the time you need to fight the language.

… if you have any more resources to study this topic, please share it here. ^^

  • According to wikipedia the article “Program Development by Stepwise Refinement” (about the teaching of programming) is a classic text in software engineering[3]. This is the origin of the recommendation: “divide the problem in small pieces”.

  • I really like the approach of the book “How To Design Programs”[4]

  • This talk is interesting “Design Patterns vs Anti pattern in APL by Aaron W Hsu at FnConf17”[5]

Cheers and happy coding :slight_smile:

Notes:
[0] Project feedback JavaScript Calculator

[1] Leslie Lamport: Thinking Above the Code:

[2] Google AI Blog: Extra, Extra - Read All About It: Nearly All Binary Searches and Mergesorts are Broken

I was shocked to learn that the binary search program that Bentley proved correct and subsequently tested in Chapter 5 of Programming Pearls contains a bug. Once I tell you what it is, you will understand why it escaped detection for two decades.

The bug is in this line:
6: int mid =(low + high) / 2;

So what’s the best way to fix the bug? Here’s one way:
6: int mid = low + ((high - low) / 2);

[3] Program Development by Stepwise Refinement

Programming is usually taught by examples … Unfortunately, they are too often selected with the prime intent to demonstrate what a computer can do. Instead, a main criterion for selection should be their suitability to exhibit certain widely applicable techniques.

Furthermore, examples of programs are commonly presented as finished “products” followed by explanations of their purpose and their linguistic details. But active programming consists of the design of new programs, rather than contemplation of old programs. As a consequence of these teaching methods, the student obtains the impression that programming consists mainly of mastering a language (with all the peculiarities and intricacies so abundant in modern PL’s) and relying on one’s intuition to somehow transform ideas into finished programs.

[4] Preface

[5] Design Patterns vs Anti pattern in APL by Aaron W Hsu at FnConf17 - YouTube

2 Likes
  • A interesting YouTube playlist which introduces Beginners to Computational Thinking
  • The Approach and content is uniquely suited to beginners with Zero Programming Experience


  • A Philosophical Query ? Which would U Prefer for Beginner ?
    • Getting Started with your Tech Journey ! Failing ! And Then realizing Computational Thinking is required .
    • Getting started with Computational Thinking and then moving on with tech Journey .
2 Likes

I do not see the ‘computational thinking’ framework as the only way to learn how to code. It is not at all a requirement. 'One true way’ism is a dangerous trap.

1 Like

@JeremyLT

  • Do U see the need/benefit to be taught or be a made aware of computation thinking in a structured manner at some stage ???.

The need? No. The ‘computational thinking’ framework is not at at all a requirement for learning how to code.

It is great that it helps some people, but that does not mean that the ‘computational thinking’ framework is a requirement.

There are a ton of wrong ways that work for nobody and lots of right ways that work for some people, but there zero ways that are guaranteed to work for every person.

That’s not what my programmer colleagues back in Poland told me. They confirmed that they all basically operate on this stuff whether it comes to them intuitively or they had to learn it but they said that if you learn this, you can use pretty much any programming language. And they meant not just copying ready solutions with understanding but creating your own original solutions first and foremost. Basically learning to use logic is crucial, without it noone could get far. Sure, you don’t need this stuff for HTML or CSS but trying to tackle any serious programming language without ability to reason in certain ways is like trying to create music without developing musical ear first.

There is a big difference between saying that programmers need to use logical problem solving and saying that programmers must learn logic problem solving through the language and framework of ‘computational thinking’.

There are lots of ways to learn how to solve problems with code. There is no one true way that everyone must use.

1 Like

If I could chime in as someone who learnt to code through FCC last year after knowing nothing, and who is now employed as a React software engineer, I’d say try not to run before you can walk.

If I dived into how to think computationally before learning JavaScript it wouldn’t make sense, and it would be incredibly overwhelming. It’s really trying to front load all the information to make it easier later, but for me that would have led to early burnout and giving up because there was too much to learn.

Once I’d moved on from HTML and CSS to JavaScript you are forced to learn to think computationally, because you need to tell the computer in the syntax it understands. And then the more you do and the more you think about it the better you get at computational thinking.

I’m still learning, and probably now I could benefit from reading a book on computational thinking, but I’d really stress to take it one baby step at a time rather than trying to dive into the deep end and getting overwhelmed

4 Likes

@BurningQuestion i think you simply lacked the right words to be explained an important notion regarding coding, the type of words that will click with your own thinking and make sense to you. I cant agree computational thinking is not promoted all over programming lessons. Maybe its not in the way you expect it to be said, maybe its not as explicit as you want it to be. Maybe none call it straight forward “computational thinking”, but its there. Its components are spread and slowly presented in various topics.
Those are all just terms to describe something, but in the end, its the meaning thats important not the tag. Just because the tag did not figure in a given source, it doesnt mean the meaning is not present. Ill be honest, i had to google what you mean with the term “Computational thinking”, as i didnt really dwell in those type of cathegories, altho the term itself can be self explanatory, i couldnt be sure what the official definition is. So few main pillars i found was decomposition, abstraction, pattern recognition and algorithmic design. Again terms, which might not speak enough to everyone or anyone, and again, its the their meaning what matters and as you review their meaning, you will discover, or at least, its in my opinion, that those notions are well promoted here on the forums and in other learning sources. Mainly they are present when people look for definition of whats coding, how to learn coding etc. The need to split a prbolem into smaller chunks, into smaller problems, the need to look for a pattern, the prerequisite to put your instructions step-by-step. Those are all practices commonly promoted here on the forums, whenever the issue in someone work lays in one of those. I find myself often refer to some of those, as well as anyone else who spends time here to assist others to learn. Just the last topic i was reviewing, i was pointing out the improvement of ones code could be in locating the pattern in the problem(it was regarding roman numerals and that there is a pattern in how they are generated to describe numerical values, and patterns are the food of coding functions).
So just because the appropriate term for you was not pointed out explicitly, or on an early stage(i cant argue whether it was or not), it doesnt mean the notion of it and what programming is in general, is not present

2 Likes

Here is a link to the BBC bite size guide on CT Computational thinking - KS3 Computer Science - BBC Bitesize
It is aimed at a young audience but some people might find it useful.

Personally I found it more confusing than helpful. I’ve been a Professional Developer for over 25 years and I’ve never had to “learn” CT. It’s what I would call common sense or just good practice but we now live in a world where everything needs to be given a fancy label and people need to be spoon-fed. Just roll up your sleeves and start coding. When you get stuck, look it up or ask for help. We learn by example. When we were babies we learnt to talk by copying our parents or others around us. We didn’t need to learn the rules of grammar like verbs, adjectives, nouns and tenses first. That came later - hopefully.

3 Likes