Computational Thinking

This is about thinking about how a problem can be solved

2 steps:

1) state the problem so that it can be solved with an algorithm

2) make an algorithm to solve it

Algorithm must be good, clean adn efficient though. Testing data and user feedback is also vital

Abstraction

"Abstraction is removing unnecessary details"

This is all about taking away information which isn't important eg:

If you're making a recipie for making a sandwich, you don't care about harvesting the wheat for the bread and making the dough yourself etc..

Example 2: we don't care about all the transistors or whatever here, we just care about what makes up a computer

Abstraction is also useful for programming languages so that the programmer can just focus on code rather than all the nitty gritty.

It's like, why don't we just always code in binary like sigmas? Unfortunately, you're a beta so you need a layer of abstraction to help you code

Exmaple 3 of Abstraction: EUlers bridges

You know the drill. Walk across all the bridges without crossing any of them more than once. Euler abstracted it more and more until it was easier to visualize

Representing the bridges as nodes and edges is a layer of abstraction.

Also the topology of a mug for some reason.

Data Abstraction

same thing, but with data.

eg: abstract datatypes like queues and stacks. you don't care about how it's stored in memory whatever, just that it is stored in some abstract way

Thinking ahead. Yeah. That's the chapter title.

You have input, some sorta computation, then output. Ez

but knowing exactly what kind of inputs and outputs is crucial for this

Reusing program components

Dynamic Link Library (DLL) is an example of a program which reuses components.

These are libraries used in scripts for eg: rng, math functions, etc

Caching

this is thinkigng aghead but by the coputer

so it gives a small lil bitta temp space near or in the cpu for very quick temp storage

Thinkign Procederally

Procedural abstraction is carrying out a sequence of steps for some task.

These procedures could be like drawRect(0, 10, 50, 60) to draw a rectable for egs

this is also a procedure interference

again, we are just abstracting away innit

decomposition is breaking down a problem into smaller chunks

top down design is a way of breaking down a problem into major tasks, then broken down further into smaller subtasks

easier to test and write the program this way. self contained modules and well documented inputs and outputs

Hierarychy charts for represenging the strucure of a program. How modules relate

  1. Blessed
  2. Are
  3. The
  4. CheeseMakers