Pages

20170825

"SURELY YOU'RE JOKING, MR. FEYNMAN!" by Richard P. Feynman


  • I don’t know what’s the matter with people: they don’t learn by understanding; they learn by some other way—by rote, or something. Their knowledge is so fragile!
  • But you have to have absolute confidence. Keep right on going, and nothing will happen.
  • The problem of having to fake and lie in order to be polite, and does this perpetual game of faking in social situations lead to the “destruction of the moral fiber of society.”
  • Learn what the rest of the world is like. The variety is worthwhile.
  • All the time you’re saying to yourself, “I could do that, but I won’t”—which is just another way of saying that you can’t.
  • I’ve very often made mistakes in my physics by thinking the theory isn’t as good as it really is, thinking that there are lots of complications that are going to spoil it—an attitude that anything can happen, in spite of what you’re pretty sure should happen.
  • I had a scheme, which I still use today when somebody is explaining something that I’m trying to understand: I keep making up examples.
  • All science stopped during the war except the little bit that was done at Los Alamos. And that was not much science; it was mostly engineering.
  • The trouble with computers is you play with them. They are so wonderful.
  • What is not really appreciated by most people is that they’re perpetually locking themselves in with locks everywhere, and it’s not very hard to pick them.
  • The mathematical constant second in importance to pi is the base of natural logarithms, e: 2.71828…
  • It was a brilliant idea: You have no responsibility to live up to what other people think you ought to accomplish. I have no responsibility to be like they expect me to be. It’s their mistake, not my failing.
  • You have to spend a couple of days before something happens, on average.
  • When you’re young, you have all these things to worry about—should you go there, what about your mother. And you worry, and try to decide, but then something else comes up. It’s much easier to just plain decide. Never mind—nothing is going to change your mind.
  • I can’t understand anything in general unless I’m carrying along in my mind a specific example and watching it go.
  • I understood at last what art is really for, at least in certain respects. It gives somebody, individually, pleasure.
  • Ordinary fools are all right; you can talk to them, and try to help them out. But pompous fools—guys who are fools and are covering it all over and impressing people as to how wonderful they are with all this hocus pocus—THAT, I CANNOT STAND!
  • I feel that human beings should treat human beings like human beings.
  • The first principle is that you must not fool yourself—and you are the easiest person to fool. So you have to be very careful about that.

20170819

The Systems Mindset by Sam Carpenter

  • Almost always, it's better to get the various wheels of your life rolling immediately and at maximum efficiency.
  • Now is all there is.
  • Your future results will be determined by the systems that are executing in this moment.
  • Your personal peace will arrive after you secure control of your mechanical world.
  • First, find a way to control you.
  • Get good at what you do. As you improve your expertise in a particular area, pay attention to feedback, tweak incessantly, and become more efficient at creating value for others, and getting ahead will happen almost spontaneously.
  • Personal control is a good thing, and you want as much of it as you can get.
  • You are the supreme commander of you!
  • Your life is a collection of individual systems!
  • Your whole existence and all the world around you is an immense collection of independent systems and subsystems.
  • Via a host of separate processes, our lives are spent in a constant quest for control.
  • A system is a linear sequence of steps that execute over time, leading to a result.
  • There is no disputing that each result of your life came about because of a series of steps that executed over a period of time.
  • This is the absurdly simple blueprint: If you put consistent effort into system improvement; you'll reach your goal of living the exact life you want.
  • Your world is unsatisfactory because you are not deliberately and intensely controlling the machinery that created your life results.
  • If you want a different result form a system, you must go inside it, and adjust its configuration.
  • For real, tangible improvement to occur in your life, you must make mechanical changes within it.
  • Get mechanical control first and then, I promise, the emotional control will follow.
  • Here's how to use Ockham's law in everyday life: When there is a decision to be made and one of the solutions is more complex than the other, and you really, really can't decide which solution to take, pick the simplest option.
  • Personal freedom--meaning, among other things, lots of money and spare time--is a direct result of creating value for others.
  • There is a connection between feeling good and accomplishment, but the accomplishment comes first while the "feeling good" tags along behind as a by-product.
  • Once a Major is established, every action and decisions that's made, large or small, should contribute to the betterment of the Major, while contrary actions and decisions are to be avoided.
  • I ruthlessly take care of things now.
  • What matters is the machinery.
  • Your life is in the here and now, and it's entirely up to you to either work within your circle to make ti what you want it to be, or to stand by paralyzed, fretting about the things you can't control.
  • Identify the most important system elements of your life on paper, declare them equal in importance, and then spend most of your day focusing on the system elements of each.
  • Being able to decisively walk away from a dead-end scenario like this is a powerful personal attribute.
  • I like the automate-delegate-delete formula because it simplifies decisions making.
  • If you're going to communicate, send your message now.
  • Be militant about protecting your focus time.
  • Do what you say you're going to do.
  • As the leader of my business, and in my personal life, my job is to envision tasks and then, whenever I can pull it off, quickly give those tasks to other people to complete.
  • My job is to decide what must be done, not to do the work.
  • The brain is not capable of processing more than one thought at a time.
  • The world is a vast collection of individual systems.
  • Stop fire-killing and expend your time and energy on incremental system-improvement efforts that will deliver the life results you want.

20170818

Programming from the Ground Up by Jonathan Bartlett

  • One of the greatest programmers, Donald Knuth, describes programming not as telling a computer how to do something, but telling a person how they would instruct a computer to do something. The point is that programs are meant to be read by people, not just computers.
  • The kernel is the core part of an operating system that keeps track of everything.
  • As a gate, it allows programs to access hardware in a uniform way. Without the kernel, you would have to write programs to deal with every device model ever made.
  • As a fence, the kernel prevents programs from accidentally overwriting each other's data and from accessing files and devices that they don't have permission to. It limits the amount of damage a poorly-written program can do to other running programs.
  • Every command the computer sees is given as a number or sequence of numbers.
  • High-level languages are there to make programming easier. Assembly language requires you to work with the machine itself. High-level languages allow you to describe the program in a more natural language. A single command in a high-level language usually is equivalent to several commands in an assembly language.
  • The Von Neumann architecture divides the computer up into two main parts--the CPU (for Central Processing Unit) and the memory.
  • In fact, in a computer, there is no difference between a program and a program's data except how it is used by the computer. They are both stored and accessed the same way.
  • The CPU reads in instructions from memory one at a time and executes them. This is known as the fetch-execute cycle.
  • The CPU contains the following elements to accomplish this:
    • program counter
    • instruction decoder
    • data bus
    • general-purpose registers
    • arithmetic and logic unit
  • The program counter is used to tell the computer where to fetch the next instruction from.
  • General-purpose registers are where the main action happens. Addition, subtraction, multiplication, comparisons, and other operations generally use general-purpose registers for processing.
  • Computer memory is a numbered sequence of fixed-size storage locations. The number attached to each storage location is called it's address. The size of a single storage location is called a byte.
  • Registers are what the computer uses for computation. Think of a register as a place on your desk--it holds things you are currently working on.
  • Registers keeps the contents of numbers that you are currently manipulating.
  • Addresses which are stored in memory are also called pointers, because instead of having a regular value in them, they point you to a different location in memory.
  • The only way the computer knows that a memory location is an instruction is that a special-purpose register called the  instruction pointer points to them at one point or another.
  • Computers are very exact. Because they are exact, programmers have to be equally exact. A computer has no idea what your program is supposed to do. Therefore, it will only do exactly what you tell it to do.
  • The computer will execute your instructions in the exact order you specify, even if it doesn't make sense.
  • Remember, computers can only store numbers, so letters, pictures, music, web pages, documents, and anything else are just long sequences of numbers in the computer, which particular programs know how to interpret.
  • Processors have a number of different ways of accessing data, known as addressing modes. The simplest mode is immediate mode, in which the data to access is embedded in the instruction itself.
  • In the register addressing mode, the instruction contains a register to access, rather than a memory location.
  • In the direct addressing mode, the instruction contains the memory address to access.
  • In the indexed addressing mode, the instruction contains a memory address to access, and also specifies an index register to offset that address.
  • In the indirect addressing mode, the instruction contains a register that contains a pointer to where the data should be accessed.
  • Even if your tinkering does not work, every failure will help you learn.
  • Source code is the human-readable form of a program. In order to transform it into a program that a computer can run, we need to assemble and link it.
  • Assembling is the process that transforms what you typed into instructions for the machine.
  • An assembly language is a more human-readable form of the instructions a computer understands.
  • An object file is code that is in the machine's language, but has not been completely put together.
  • The linker is the program that is responsible for putting the object files together and adding information to it so that the kernel knows how to load and run it.
  • You must always reassemble and relink programs after you modify the source file for the changes to occur in the program.
  • UNIX programs return numbers other than zero to indicate failure or other errors, warnings, or statuses. The programmer determines what each number means.
  • Comments are not translated by the assembler. They are used only for the programmer to talk to anyone who looks at the code in the future.
  • You should always document any strange behavior you program performs.
  • Symbols are generally used to mark locations of programs or data, so you can refer to them by name instead of  by their location number.
  • _start is a special symbol that always needs to be marked with .globl because it marks the location of the start of the program.
  • Labels define a symbol's value.
  • The number 1 is the number of the exit system call.
  • An interrupt interrupts the normal program flow, and transfers control from our program to Linux so that it will do a system call.
  • To recap--Operating System features are accessed through system calls. These are invoked by setting up the registers in a special way and issuing the instruction "int 0x80". Linux knows which system call we want to access by what we stored in the eax register. Each system call has other requirements as to what needs to be stored in the other registers.
  • A loop is a piece of program code that is meant to be repeated.
  • Just be aware that the result of the comparison is stored in the status register.
  • The general form of memory address references is this:
    • ADDRESS_OR_OFFSET(%BASE_OR_OFFSET, %INDEX, MULTIPLIER)
  •  Every mode except immediate mode can be used as either the source or destination operand. Immediate mode can only be a source operand.
  • Programmers use functions to break their programs into pieces which can be independently developed and tested.
  • A function's name is a symbol that represents the address where the function's code starts.
  • A functions parameters are the data items that are explicitly given to the function for processing.
  • Local variables are data storage that a function uses while processing that is thrown away when it returns.
  • Static variables are data storage that a function uses while processing that is not thrown away afterwords, but is reused for every time the function's code is activated.
  • Global variables are data storage that a function uses for processing which are managed outside the function.
  • The return value is the main method of transferring data back to the main program. Most programming languages only allow a single return value for a function.
  • A convention is a way of doing things that is standardized, but not forcibly so.
  • In the C language calling convention, the stack is the key element for implementing a function's local variables, parameters, and return address.
  • Before executing a function, a program pushes all of the parameters for the function onto the stack in the reverse order that they are documented. Then the program issues a call instruction indicating which function it wishes to start. The call instruction does two things. First it pushes the address of the next instruction, which is the return address, onto the stack. Then it modifies the instruction pointer (eip) to point to the start of the function.
  • The base pointer is a special register used for accessing function parameters and local variables.
  • The only difference between the global and static variables is that static variables are only used by one function, while global variables are used by many functions.
  • When a function is done executing, it does three things:
    • It stores it's return value in eax.
    • It resets the stack to what it was when it was called (it gets rid of the current stack frame and puts the stack frame of the calling code back into effect).
    • It returns control back to wherever it was called from. This is done using the ret instruction, which pops whatever value is at the top of the stack, and sets the instruction pointer, eip, to that value.
  • When you call a function, you should assume that everything currently in your registers will be wiped out.
  • If there are registers you want to save before calling a function, you need to save them by pushing them on the stack before pushing the function's parameters. You can then pop them back off in reverse order after popping off the parameters.
  • In fact, almost all of programming is writing and calling functions.
  • Data which is stored in files is called persistent data, because it persists in files that remain on the disk even when the program isn't running.
  • UNIX files, no matter what program created them, can all be accessed as a sequential stream of bytes. When you access a file, you start by opening it by name. The operating system then gives you a number, called a file descriptor, which you use to refer to the file until you are through with it. You can then read and write to the file using its file descriptor. When you are done reading and writing, you then close the file, which then makes the file descriptor useless.
  • A buffer is a continuous block of bytes used for bulk data transfer.
  • Communication between processes is usually done through special files called pipes.
  • One of the keys of programming is continually breaking down problems into smaller and smaller chunks until it's small enough that you can easily solve the problem. Then you can build these chunks back up until you have a working program.
  • In programming, a constant is a value that is assigned when a program assembles or compiles, and is never changed.
  • Guarding against potential user and programming errors is an important task of a programmer.
  • When a Linux program begins, all pointers to command-line arguments are stored on the stack.
  • Structured data is data that is divided up into fields and records.
  • Robust programs are able to handle error conditions gracefully. They are programs that do not crash no matter what the user does. Building robust programs is essential to the practice of programming.
  • Programmers schedule poorly. In almost every programming project, programmers will take two, four, or even eight times as long to develop a program or function than they originally estimated.
  • It takes a lot of time and effort to develop robust program.s
  • Testing is one of the mot essential things a programmer does. If you haven't tested something, you should assume it doesn't work.
  • Allowing non-programmers to use your program for testing purposes usually gives you much more accurate results as to how robust your program truly is.
  • Most important is testing corner cases or edge cases. Corner cases are the inputs that are most likely to cause problems or behave unexpectedly.
  • When testing numeric data, there are several corner cases you always need to test:
    • The number 0.
    • The number 1.
    • A number within the expected range.
    • A number outside the expected range.
    • The first number in the expected range.
    • The last number in the expected range.
    • The first number below the expected range.
    • The first number above the expected range.
  • You need to test that your program behaves as expected for lists of 0 items, 1 item, massive numbers of items, and so on. In addition, you should also test nay turning points you have.
  • Not only should you test your program as a whole, you need to test the individual pieces of your program. As you develop your program, you should test individual functions by providing it with data you create to make sure it responds appropriately.
  • The simplest way to handle recovery points is to wrap the whole program into a single recovery point. You would just have a simple error-reporting function that you can call with an error code and a message. The function would print them and simply exit the program. This is not usually the best solution for real-world situations, but it is a god fall-back, last resort mechanism.
  • After every system call, function call, or instruction which can have erroneous results you should add error checking and handling code.
  • When using dynamic linking, the name itself resides within the executable, and is resolved by the dynamic linker when it is run. When the program is run by the user, the dynamic linker loads the shared libraries listed in our link statements, and then finds all of the function and variable names that were named by our program but not found at link time, and matches them up with corresponding entries in the shared libraries it loads. It then replaces all of the names with the addresses which they are loaded at.
  • When you use shared libraries, your program is then dynamically-linked, which means that not all of the code needed to run the program is actually contained within the program file itself, but in external libraries.
  • In Linux, functions are described in the C programming languages. In fact, most Linux programs are written in C. That is why most documentation and binary compatibility is defined using the C language.
  • A typedef basically allows you to rename a type.
  • A computer looks at memory as a long sequence of numbered storage locations. A sequence of millions of numbered storage locations. Everything is stored in these locations. Your programs are stored there, your data is stored there, everything. Each storage location looks lie every other one. The locations holding your program are just like the ones holding your data. In fact, the computer has no idea which are which, except that the executable file tells it where to start executing.
  • An address is a number that refers to a byte in memory.
  • Every piece of data on the computer not in a register has an address.
  • A pointer is a register or memory word whose value is an address.
  • When your program is loaded into memory, each .section is loaded into its own region of memory.
  • The actual instructions (the .text section) are loaded at the address 0x08048000.
  • The .data section is loaded immediately after that, followed by the .bss section.
  • The last byte that can be addressed on Linux is location 0xbfffffff. Linux starts the stack here and grows it downward toward the other sections. Between them is a huge gap.
  • At the bottom of the stack there is a word of memory that is zero. After that comes the null-terminated name of the program using ASCII characters. After the program name comes the program's environment variables. Then come the program's command-line arguments.
  • Your program's data region starts at the bottom of memory and goes up. The stack starts at the top of memory, and moves downward with each push. This middle part between the stack and your program's data sections is inaccessible memory, you are not allowed to access it until you tell the kernel that you need it. If you try, you will get an error (the error message is usually "segmentation fault").
  • The last accessible memory address to your program is called the system break (also called the current break or just the break).
  • Physical memory refers to the actual RAM chips inside your computer and what they contain.
  • If we talk about a physical memory address, we are talking about where exactly on these chips a piece of memory is located.
  • Virtual memory is the way your program things about memory. Before loading your program, Linux finds an empty physical memory space large enough to fit your program, and then tells the processor to pretend that this memory is actually at the address 0x08048000 to load your program into.
  • Each program gets its own sandbox to play in. Every program running on your computer thinks that it was loaded at memory address 0x08048000, and that it's stack starts at 0xbfffffff. When Linux loads a program, it finds a section of unused memory, and then tells the processor to use that section of memory as the address 0x08048000 for this program. The address that a program believes it uses is called the virtual address, while the actual address on the chips that it refers to is called the physical address. The process of assigning virtual addresses to physical addresses is called mapping.
  • Here is an overview of the way memory accesses are handled under Linux:
    • The program tries to load memory from a virtual address.
    • The processor, using tables supplied by Linux, transforms the virtual memory address into a physical memory address on the fly.
      • Note that not only can Linux have a virtual address map to a different physical address, it can also move those mapping around as needed.
  • All of the memory mappings are done a page at a time. Physical memory assignment, swapping, mapping, etc. are all done to memory pages instead of individual memory addresses.
  • If you try to access a piece of virtual memory that hasn't been mapped yet, it triggers an error known as a segmentation fault, which will terminate you program.
  • The way we tell Linux to move the break point is through the brk system call.
  • A memory manager is a set of routines that takes care of the dirty work of getting your program memory for you. Most memory managers have two basic functions--allocate and deallocate.
  • The way memory managers work is that they keep track of where the system break is, and where the memory that have allocated is. They mark each block of memory in the heap as being used or unused. When you request memory, the memory manager checks to see if there are any unused block of the appropriate size. If not, it calls the brk system call to request more memory.
  • When you free memory is marks the block as unused so that future requests can retrieve it.
  • A memory manager by itself is not a full program--it doesn't do anything. It is simply a utility to be used by other program.s
  • Generally, you should avoid calling the kernel unless you really need to.
  • Each digit in a binary number is called a bit, which stands for binary digit.
  • You should note that it takes most computers a lot longer to do floating-point arithmetic than it does integer arithmetic. So, for programs that really need speed, integers are mostly used.
  • Sign extension means that you have to pad the left-hand side of the quantity with whatever digit is in the sign digit when you add bits.
  • The x86 processor is a little-endian processor, which means that it stores the "little end", or least-significant-byte of its words first.
  • Other processors are big-endian processors, which means that they store the "big end", or most significant byte, of their words first, the way we would naturally read a number.
  • Assembly language is the language used at the machine's level, but most people find coding in assembly language too cumbersome for everyday use. Many computer languages have been invented to make the programming task easier.
  • High-level languages, whether compiled or interpreted, are oriented around you, the programmer, instead of around the machine.
  • Each language is different, and the more languages you know the better programmer you will be.
  • The main function is a special function in the C language--it is the start of all C programs (much like _start in our assembly-language programs).
  • Optimization is the process of making your application run more effectively.
  • It is better to not optimize at all than to optimize too soon. When you optimize, your code generally becomes less clear, because it becomes more complex.
  • Once you have determined that you have a performance issue you need to determine where in the code the problems occur. You can do this by running a profiler. A profiler is a program that will let you run your program, and it will tell you how much time is spent in each function, and how many times they are run.
  • Any optimization done on the first code base is completely wasted.
  • After running a profiler, you can determine which functions are called the most or have the most time spent in them. These are the ones you should focus your optimization efforts on.
  • If a program only spends 1% of its time in a given function, then no matter how much you speed it up you will only achieve a maximum of a 1% overall speed improvement. However, if a program spends 20% of its time in a given function, then even minor improvements to that functions speed will be noticeable.
  • Sometimes a function has a limited number of possible inputs and outputs. In fact, it may be so few that you can actually precompute all of the possible answers beforehand, and simply look up the answer when the function is called.
  • Registers are the fastest memory locations on the computer.
  • Parallelization means that your algorithm can effectively be split among multiple processes.
  • The more parallelize-able your application is, the better it can take advantage of multiprocessor and clusters computer configurations.
  • Two great benefits resulting from statelessness is that most stateless functions are parallelize-able and often benefit from memoization.
  • If you are constantly looking for new and better ways of doing and thinking, you will make a successful programmer.

20170817

Beginner's Guide to Linkers by David Drysdale

  • A definition associates a name with an implementation of that name, which could be either data or code:
    • A definition of a variable induces the compiler to reserve some space for that variable, and possibly fill that space with a particular value.
    • A definition of a function induces the compiler to generate code for that function.
  • A declaration tells the C compiler that a definition of something (with a particular name) exists elsewhere in the program, probably in a different C file.
  • The C compiler's job is to convert a C file from text that the human can (usually) understand, into stuff that the computer can understand. This output by the compiler is known as an object file.
  • The contents of an object file are essentially two kinds of things:
    • code, corresponding to the functions in the C file
    • data, corresponding to the global variables in the C file (for an initialized global variable, the initial value of the variable also has to be stored in the object file)
  • Object code is the sequence of (suitably encoded) machine instructions. that correspond to the C instructions that the programmer has written--all of those ifs and whiles and even gotos.
  • Running the program obviously involves executing the machine code, so the operating system clearly has to transfer the machine code from the executable file on the hard disk into the computer's memory, where the CPU can get at it. This chunk of the program's memory is known as the code segment or text segment.
  • Initialized variables have particular values that need to be used to begin with, and these values are stored in the object files and in the executable file. When the program is started, the OS copies these values into the program's memory in the data segment.
  • For uninitialized variables, the OS can assume that they all just start with the initial value 0, so there's no need to copy any values. This chunk of memory, that gets initialized to 0, is known as the bss segment.
  • Local variables are allocated on a piece of memory known as the stack, which grows and shrinks as different functions are called and complete.
  • Dynamically allocated memory is taken from an area known as the heap, and the malloc function keeps track of where all the available space in this are is.
  • Because both the heap and the stack can change size as the program runs it's quite common to arrange matters so that the stack grows in one direction with the heap grows in the other.
  • The most basic incarnation of a library is a static library.
  • Note the granularity of what gets pulled in from the library: if some particular symbol's definition is needed, the whole object that contains that symbol's definition is included.
  • For popular libraries like the C standard library (normally libc), having a static library has an obvious disadvantage--every executable program has a copy of the same code. This can take up a lot of unnecessary disk space, if every single executable file has a copy of printf and fopen and suchlike.
  • A slightly less obvious disadvantage is that once a program has been statically linked, the code in it is fixed forever.
  • As an aside, another useful tools is ldd; on Unix platforms this shows the set of shared libraries that an executable (or a shared library) depends on, together with an indication of where those libraries are likely to be found.
  • It's normal good practice in C to have a single declaration for any function or global variable, held in a header file.
  • The first change that C++ allows is the ability to overload a function, so there can be different versions of the same named functions, differing in the types that the function accepts (the function's signature).
  • A constructor is a piece of code that sets up the contents of an object; as such it is conceptually equivalent to an initializer value for a variable but with the key practical difference that it involves arbitrary pieces of code.

20170816

The Battle for Your Mind by Dick Sutphen

  • So, to begin, I want to state the most basic of all facts about brainwashing: In the entire history of man, no one has ever been brainwashed and realized, or believed, that he had been brainwashed.
  • What who have been brainwashed will usually passionately defend their manipulators, claiming they have simply been "shown the light"... or have been transformed in miraculous ways.
  • Conversion is a "nice" word for brainwashing ... and any study of brainwashing has to begin with a study of Christian revivalism in eighteenth century America.
  • The techniques are still being used today by Christian revivalists, cults, human-potential trainings, some business rallies, and the United States Armed Services ... to name just a few.
  • Let me point out here that I don't think most revivalist preachers realize or know they are using brainwashing techniques.
  • Three distinct and progressive states of trans-marginal inhibition were identified by Pavlov. The first is the equivalent phase, in which the brain gives the same response to both strong and weak stimuli. The second is the paradoxical phase, in which the brain responds more actively to weak stimuli then to strong. And the third is the ultra-paradoxical phase, in which conditioned response and behavior patterns turn from positive to negative or from negative to positive.
  • The way to achieve conversion are many and varied, but the usual first step in religious or political brainwashing is to work on the emotions of an individual or group until they reach an abnormal level or anger, fear, excitement, or nervous tension.
  • The progressive result of this mental condition is to impair judgement and increase suggestibility. The more this condition can be maintain or intensified, the more it compounds.
  • Other often-used physiological weapon to modify normal brain functions are fasting, radical or high sugar diets, physical discomforts, regulation of breathing, mantra chanting in mediation, the disclosure of awesome mysteries, special lighting and sound effects, programmed response to incense, or intoxicating drugs.
  • A repetitive beat, ideally ranging from 45 to 72 beats per minute (a rhythm close to the beat of the human heart), is very hypnotic and can generate an eyes-open altered state of consciousness in a very high percentage of people. And, one you are in an alpha state, you are at least 25 times as suggestible as you would be in full beta consciousness.
  • A "voice roll" is a patterned, paced style used by hypnotists when inducing a trance.
  • A voice roll can sound as if the speaker were talking to the beat of a metronome or it may sound as though he were emphasizing every word in a monotonous, patterned style. The words will usually be delivered at the rate of 45 to 60 beats per minute, maximizing the hypnotic effect.
  • The power of suggestion given to hundreds of people in hypnosis assures that at least 10 to 25 percent would see whatever he suggested they see.
  • It is  a psychological manipulation that works.
  • Catharsis is a purging of repressed emotions.
  • In catharsis (one of the three brain phases mentioned earlier), the brain-slate is temporarily wiped clean and the new suggestion is accepted.
  • Powerful sound and the proper use of lighting are of primary importance in inducing an altered state of consciousness.
  • Cults and human-potential organizations are always looking for new converts. To attain them, they must also create a brain-phase.
  • The following are the six primary techniques used to generate the conversion:
    • The meeting or training takes place in an area where participants are cut off from the outside world.
    • Now, let's look at the second tip-off that indicated conversion tactics are being used. A schedule is maintain that causes physical and mental fatigue. This is primarily accomplished by long hours in which the participants are given no opportunity for relaxation or reflection.
    •  The third tip-off: techniques used to increase the tension in the room or environment
    • Number four: Uncertainty.
    • The fifth clue that conversion tactics are being used is the introduction of jargon--new terms that have meaning only to the "insiders" who participate. Viscous language is also frequently used, purposefully, to make participants uncomfortable.
    • The final tip-off is that there is no humor in the communications ... at least until the participants are converted. Then, merry-making and humor are highly desirable as symbols of the now joy the participants have supposedly "found".
  • In human-potential training, the controllers will give a lengthy talk about the importance of "keeping agreements" in life.
  • The participants vow to themselves and their trainer that they will keep their agreements. Anyone who does not will be intimidated into agreement or forced to leave.
  • Before the gathering is complete, the agreements will be used to ensure that the new converts go out and find new participants.
  • Be wary of an organization of this type that offers follow-up sessions after the seminar.
  • As the early Christian revivalists found, long-term control is dependent upon a good followup system.
  • Basically, the participants are concerned about being "put on the spot" or encountered by the trainers, guilt feelings are played upon, participants are tempted to verbally relate their innermost secrets to the other participants or forced to take part in activities that emphasize removing their masks.
  • One of the most successful human-potential seminars forces the participants to stand on a stage in front of the entire audience while being verbally attacked by the trainers.
  • Many faint, but most cope with the stress by mentally going away. They literally go into an alpha state, which automatically makes them many times as suggestible as they normally are.
  • The sad truth is that a high percentage of people want to give away their power--they are true "believers"!
  • Cult gatherings or human-potential training are an ideal environment to observe first-hand what is technically called the "Stockholm Syndrome." This is a situation in which those who are intimidated, controlled, or made to suffer, begin to love, admire, and even sometimes sexually desire their controllers or captors.
  • But let me inject a word of warning here: If you think you can attend such gatherings and not be affected, you are probably wrong.
  • Anger or resistance almost always assures conversion.
  • The only hope of attending such gatherings without being affected is to be a Buddha and allow no positive or negative emotions to surface. Few people are capable of such detachment.
  • I want to mention the United Sates Government and military boot camp. The Marine Corps talks about breaking men down before "rebuilding" them as new men--as marines! Well, that is exactly what they do, the same way a cult breaks its people down and rebuilds them as happy flower sellers on your local street corner. Every one of the six conversion techniques are used in boot camp.
  • I'm not making a judgement as to whether that is good or bad. It is a fact that the men are effectively brainwashed. Those who won't submit must be discharged or spend much of their time in the brig.
  • Once the initial conversion is effected, cults, armed services, and similar groups cannot have cynicism among their members. Members must responds to commands and do as they are told, otherwise they are dangerous to the organizational control. This is normally accomplished as a three-step De-cognition Process.
  • Step One is Alertness Reduction: The controllers cause the nervous system to malfunction, making it difficult to distinguish between fantasy and reality. This can be accomplished in several ways. Poor diet is one; watch out for brownies and koolaid. The sugar throws the nervous system off. More subtle is the "spiritual diet" used by many cults.
  • Inadequate sleep is another primary way to reduce alertness, especially when combined with long hours of work or intense physical activity. Also, being bombarded with intense and unique experiences achieves the same result.
  • Step two is Programmed Confusion: You are mentally assaulted while your alertness is being reduced as in step one.
  • During this phase of de-cognition, reality and illusion often merge and perverted logic is likely to be accepted.
  • Step three is thought stopping: Techniques are used to cause the mind to go "flat." These are altered-state-of-consciousness techniques that initially induce calmness by giving the mind something simple to deal with and focusing awareness.
  • It is important to be aware that when members or participants are instructed to use "thought-stopping" techniques, they are told that they will benefit by so doing: they will become "better soldiers" or "find enlightenment."
  • There are three primary techniques used for thought stopping.
    • The first is marching: the thump, thump, thump beat literally generates self-hypnosis and thus great susceptibility to suggestion.
    • The second thought stopping techniques is meditation. If you spend an hour to an hour and a half a day in mediation, after a few weeks, there is a great probability that you will not return to full beta consciousness. You will remain in a fixed state of alpha for as long as you continue to mediate.
    • The third thought-stopping technique is chanting, and often chanting in mediation. "Speaking in tongues" could also be included in this category.
  • All three stopping techniques produce an altered state of consciousness.
  • I am convinced that at least a third of the population is what Eric Hoffer calls "true believers." They are joiners and followers ... people who want to give away their power. They look for answers, meaning, and enlightenment outside themselves.
  • In my years of communicating concepts and conducting training, I have run into them again and again. All I can do is attempt to show them that they only thing to seek is the True Self within. Their personal answers are to be found there and there alone. I communicate that the basics of spirituality are self-responsibility and self-actualization. But most of the true believers just tell me that I'm not spiritual and go looking for someone who will give them the dogma and structure they desire.
  • Never underestimate the potential danger of these people. They can easily be molded into fanatics who will gladly work and die for their holy cause.
  • The Moral Majority is made u of true believers. All cults are composed of true believers.
  • Mass Movements will usually have a charismatic leader. The followers want to convert others to their way of living or impose a new way of life--if necessary, by legislating laws forcing others to their view, as evidenced by the activities of the Moral Majority. This means enforcement by guns or punishment, for that is the bottom line in law enforcement.
  • A common hatred, enemy, or devil is essential to the success of a mass movement.
  • The True Believers are mentally unbalanced or insecure people, or those without hope or friends. People don't look for allies when they love, but they do when they hate or become obsessed with a cause.
  • Persuasion isn't technically brainwashing but it is the manipulation of the human mind by another individual, without the manipulated party being aware what caused his opinion to shift.
  • The basis of persuasion is always to access your right brain. The left half of your brain is analytical and rational. The right side is creative and imaginative. That is overly simplified but it makes my point. So, the idea is to distract the left brain and keep it busy.
  • Assume for a moment that you are watching a politician give a speech. First, he might generate what is called a "yes set." These are statements that will cause listeners to agree; they might even unknowingly nod their heads in agreement. Next come the truisms. These are usually facts that could be debated but, once the politician has his audience agreeing, the odds are in the politician's favor that the audience won't stop to think for themselves, thus continuing to agree. Last comes the suggestion. This is what the politician wants you to do and, since you have been agreeing all along, you could be persuaded to accept the suggestion.
  • But you might also watch for what are called embedded commands.
  • Today's media-oriented politicians and spellbinders are often carefully trained by a whole new breed of specialist who are using every trick in the book--both old and new--to manipulate you into accepting their candidate.
  • Neuro-linguistic training is readily available to anyone willing to devote the time and pay the price. It is some of the most subtle and powerful manipulation I have yet been exposed to.
  • Another technique that I'm just learning about is unbelievable slippery; it is called an interspersal technique and the idea is to say one thing with words but plant a subconscious impression of something else in the minds of the listeners and/or watchers.
  • Usually, when people are shocked, they immediately withdraw.
  • We are all conditioned that if someone s gives us something, we have to give them something in return.
  • Subliminals are hidden suggestions that only your subconscious perceives.
  • If subliminals are not perceptible, they cannot be effective, and subliminals recorded below the audible threshold are therefore useless.
  • 10 to 25 percent of the population is capable of a somnambulistic level of altered states of consciousness.
  • Vibrato is the tremulous effect imparted in some vocal or instrumental music, and the cycle-per-second range causes people to go into an altered state of consciousness.
  • The more we find out about how human beings work through today's highly advanced technological research, the more we learn to control human beings. And what probably scares me the most is that the medium for takeover is already in place! The television set in your living room and bedroom is doing a lot more than just entertaining you.
  • When you go into an altered state, you transfer into right brain, which results in the internal release of the body's own opiates: enkephalins and beta-endorphins, chemically almost identical to opium. In other words, it feels good...and you want to come back for more.
  • Most viewers are already hypnotized. To deepen the trance is easy.
  • Every hour that you spend watching the TV set you become more conditioned.

20170815

Compiler Construction by Niklaus Wirth

  • It is the essence of any academic education that not only knowledge, and, in the case of an engineering education, know-how is transmitted, but also understanding and insight.
  • very academically educated computer scientist must know ho w a computer functions, and must understand that ways and methods in which programs are represented and interpreted.
  • Computer programs are formulated in a programming language and specify classes of computing processes. Computers, however, interpret sequences of particular instructions, but not program texts. Therefore, the program text must be translated into a suitable instruction sequence before it can be processes by a computer. This translation can be automated, which implies that it can be formulated as a program itself. The translation program is called a compiler, and the text to be translated is called source text (or sometimes source code).
  • The translation process essentially consists of the following parts:
    • The sequence of characters of a source text is translated into a corresponding sequence of symbols of the vocabulary of the language.
    • The sequence of symbols is transformed into a representation that mirrors the syntactic structure of the source text and lets this structure easily be recognized.
    • In addition to syntactic rules, compatibility rules among types of operators and operands define the language. Hence, verification of whether these compatibility rules are observed by a program is an additional duty of a compiler. This verification is called type checking.
    • On the basis of the representation resulting from step 2, a sequence of instructions taken from the instruction set of the target computer is generated. This phase is called code generation.
  • A partitioning of the compilation process into as many parts as possible was the predominant technique until about 1980, because until then the available store was too small to accommodate the entire compiler. Only individual compiler parts would fit, and they could be loaded one after the other in sequence. The parts were called passes, and the whole was called a multi pass compiler.
  • Modern computers with their apparently unlimited stores make it feasible to avoid intermediate storage to disk. And with it, the complicated process of serializing a data structure for output, and its reconstruction on input can be discarded as well. With single-pass compilers, increases in speed by factors of several thousands are therefore possible. Instead of being tackled one after another in strictly sequential fashion, the various parts (tasks) are interleaved.
  • A compiler which generates code for a computer different from the one executing the compiler is called  a cross compiler. The generated code is then transferred--downloaded--via a data transmission line.
  • Every language displays structure called its grammar or syntax.
  • A language is, therefore, the set of sequences of terminal symbols which, starting with the start symbol, can be generated by repeated application of syntactic equations, that is, substitutions.
  • A language is regular, if its syntax can be expressed by a single EBNF expression.
  • The reason for our interest in regular languages lies in the fact that programs for the recognition of regular sentences are particularly simple and efficient.
  • Sentence recognition is called syntax analysis.
  • Ultimately, the basic idea behind every language is that it should serve as a means for communication. This means that partners must use and understand the same language. Promoting the ease by which a language can be modified and extended may therefore by rather counterproductive.
  • The scanner has to recognize terminal symbols in the source code.
  • The essential characteristics of a good compiler, regardless of details, are that (1) no sequence of symbols leads to its crash, and (2) frequently encountered errors are correctly diagnosed and subsequently generate no, or few additional, spurious error messages.
  • The simplest form of data structure for representing a set of items is the list. Its major disadvantage is a relatively slow search processes, because it has to be traversed from its root to the desired element.
  • In languages featuring data types, their consistency checking is one of the most important tasks of a compiler.
  • Consecutively declared variables are then allocated with monotonically increasing or decreasing addresses. This is called sequential allocation.
  • The size of an array is its element size multiplied by the number of its elements. The address of an element is the sum of the array's address and the element's index multiplied by the element size.
  • Absolute addresses of variables are usually unknown at the time of compilation. All generated addresses must be considered as relative to a common base address which is given at run-time. The effective address is then the sum of this base address and the address determined by the compiler.
  • Although bytes can be accessed individually, typically a small number of bytes (say 4 or 8) are transferred from or to memory as a packet, a so-called word.
  • Following a longstanding tradition, addresses of variables are assigned negative values, that is, negative offsets to the common base address determined during program execution.
  • The acronym RISC stands for reduced instruction set computer, where "reduced" is to be understood as relative to architectures with large sets of complex instructions, as these were dominant until about 1980.
  • From the view points of the programmer and the compiler designer the computer consists of an arithmetic unit, a control unit, and a store.
  • Whenever arithmetic expressions are evaluated, the inherent danger of overflow exists. The evaluating statements should therefore be suitable guarded.
  • The essence of delayed code generation is that code is not emitted before it is clear that no better solution exists.
  • Conditional and repeated statements are implemented with the aid of jump instructions, also called branch instructions.
  • Procedures, which are also known as subroutines, are perhaps the most important tool for structuring programs.
  • Addresses of local variables generated by the compiler are always relative to the base address of the respective activation frame.
  • Parameters constitute the interface between the calling and the called procedures. Parameters on the calling side are said to be actual parameters, and those on the called side formal parameters.
  • An open array is an array parameter whose length is known (open) at the time of compilation.
  • The unit consisting of array address and lengths is called an array descriptor.
  • The type to which a pointer is bound is called its base type.
  • A variable is no longer relevant when there are no references to it, references emanating from declared pointer variables.
  • The range of visibility of an identifier in the text is called scope, and it extends over the block in which the identifier is declared.
  • Software is not "written", but grows.
  • Once agreement is reached about the partitioning of a system into modules and about their interfaces, the team members can proceed independently in implementing that module assigned to them.
  • The successful development of complex systems crucially depends on the concept of modules and their separate compilation.
  • A primary goal of good code optimization is the most effective use of registers in order to reduce the number of accesses to the relatively slow main memory. A good strategy of register usage yields more advantages than any other branch of optimization.
  • In many compilers, local variables are allocated to registers only in procedures which do not contain any calls themselves (leaf procedures), and which therefore are also called most frequently, as they constitute the leaves in the tree representing the procedure cal hierarchy.

20170814

Dr. Jordan B. Peterson's 10 Step Guide to Clearer Thinking Through Essay Writing

  • Essay writing is more than just a thing to do to get grades in college. It's a practical method for clarifying your thinking and learning to articulate yourself.
  • An essay is a relatively short piece of writing on a  particular topic. However, the word essay also means attempt or try. An essay is, therefore, a short piece written by someone attempting to explore a topic or answer a question.
  • The primary reason to write an essay is so that the writer can formulate and organize an informed, coherent, and sophisticated set of ideas about something important.
  • It is important to think because action based on thinking is likely to be far less painful and more productive than action based upon ignorance.
  • Here is something to think about: the person who can formulate and communicate the best argument almost always wins.
  • If you learn to write and to edit, you will also be able to tell the difference between good ideas, intelligently presented, and bad ideas put forth by murky and unskilled thinkers.
  • Those who can think and communicate are simply more powerful than those who cannot, and powerful in the good way, the way that means "able to do a wide range of things competently and efficiently."
  • Don't ever underestimate the power of words.
  • People's brains function better in the morning. Get up. Eat something. You are much smarter and more resilient after you have slept properly and ate.
  • Do not wait for a big chunk of free time to start. You will never get bug chunks of free time ever in your life, so don't make your success dependent on their non-existence. The most effective writers write every day, at least a bit.
  • Realize that when you first sit down to write, your mind will rebel.
  • Three productive hours are way better than ten hours of self-deceptive non-productivity, even in the library.
  • An essay, like any piece of writing, exists at multiple levels of resolution, simultaneously. First is the selection of the word. Second is the crafting of the sentence. Each word should be precisely the right word, in the right location in each sentence. The sentence itself should present a thought, part of the idea expressed in the paragraph, in a grammatically correct manner. Each sentence should be properly arranged and sequenced inside a paragraph, the third level of resolution.
  • As a rule of thumb, a paragraph should be made up of at least 10 sentences or 100 words. This might be regarded as a stupid rule, because it is arbitrary. However, you should let it guide you, until you know better.
  • You have very little right to break the rules, until you have mastered them.
  • You break a rule at your peril, whether you know it or not.
  • Rules are there for a reason. You are only allowed to break them if you are a master. If you're not a master, don't confuse your ignorance with creativity or style.
  • A paragraph should present a single idea, using multiple sentences. If you can't think up 100 words to say about your idea, it's probably not a very good idea, or you need to think more about it. If your paragraph is rambling on for 300 words, or more, it's possible that it has more than one idea in it, and should be broken up.
  • All of the paragraphs have to be arranged in a logical progression, from the beginning of the essay to the end. This is the fourth level of resolution. Perhaps the most important step in writing an essay is getting the paragraphs in proper order. Each of them is a stepping stone to your essay's final destination.
  • The fifth level of resolution is the essay, as a whole. Every element of an essay can be correct, each word, sentence, and paragraph--even the paragraph order---and the essay can still fail, because it is just not interesting or important.
  • An essay necessarily exists withing a context of interpretation, made up of the reader (level six), and the culture that the reader is embedded in (level seven), which is made up in part of the assumptions that he or she will bring to the essay.
  • For the essay to succeed, brilliantly, it has to work at all of these levels of resolution simultaneously. That is very difficult, but it is in that difficulty that the value of the act of writing exists.
  • If you are bored while writing, then, most importantly, you are doing it wrong, and you will also bore your reader.
  • You must choose a topic that is important to you. This should be formulated as a question that you want to answer. This is arguably the hardest part of writing an essay: choosing the proper question.
  • Having said all that, here is something to remember: finished beats perfect. Most people fail a class or an assignment or a work project not because they write badly, and get D's or F's, but because they don't write at all, and get zeros. Zeros are very bad. They are the black holes of numbers. Zeros make you fail. Zeros ruin your life. Essays handed in, no matter how badly written, can usually get you at least a C. So don't be a completely self-destructive idiot. Hand something in, regardless of how pathetic you think it is (and no matter how accurate you are in that opinion).
  • If you can't write, it is because you have nothing to say. You have no ideas. In such a situation, don't pride yourself on your writer's block. Read something. If that doesnt' work, read something else--maybe something better. Repeat until the problem is solved.
  • Assume you need 5-10 books or articles per thousand words of essay, unless you have been instructed otherwise.
  • When you are taking notes, don't bother doing stupid things like highlighting or underlining sentences in the textbook. There is no evidence that it works. It just looks like work. What you need to do is to read for understanding. Read a bit, then write down what you have learned or any questions that have arisen in your mind. Don't ever copy the source word for word. The most important part of learning and remembering is the recreation of what you have written in your own language.
  • Take about two to three times as many notes, by word, as you will need for your essay. You might think that is inefficient, but it's not. In order to write intelligibly about it, you need to know far more than you actually communicate.
  • Here's another rule. When you write your first draft, it should be longer than the final version. This is so that you have some extra writing to throw away. You want to have something to throw away after the first draft so that you only have to keep what is good.
  • Production (the first major step) and editing (the second) are different functions, and should be treated that way. This is because each interferes with the other. The purpose of production is to produce. The function of editing is to reduce and arrange.
  • There is almost nothing a novice writer can do that will improve his or her writing more rapidly than writing very short sentences.
  • Don't be tempted to use any word that you would be uncomfortable to use in spoken conversation.
  • Read each sentence aloud, and listen to how it sounds. If it's awkward, see if you can say it a different, better way. Listen to what you said, an then write it down. Rewrite each sentence. Once you have done this with all the sentences, read the old versions and the new versions, and replace the old with the new if the new is better.
  • If you force yourself to reconstruct your argument from memory, you will likely improve it. Generally, when you remember something, you simplify it, while retaining most of what is important. Thus, your memory can serve as a filter, removing what is useless and preserving and organizing what is vital.
  • You are not genuinely finished until you cannot edit so that your essay improves. Generally, you can tell if this has happened when you try to rewrite a sentence (or a paragraph) and you are not sure that the new version is an improvement over the original.

20170813

Teaching Critical Thinking: Lessons from Cognitive Science by Tim van Gelder

  • Almost everyone agrees that one of the main goals of education, at whatever level, is to help develop students' general thinking skills, including in particular their critical thinking skills. Almost everyone also agrees that students do not acquire these skills as much as they could and should.
  • Cognitive science is the best source we have for genuine knowledge about "what works and why" in teaching critical thinking.
  • Roughly speaking, critical thinking is thinking which helps you figure out whether you should believe some claim, and how strongly you should believe it. Since you should only believe what is true, critical thinking is, as I like to say, it is the art of being right.
  • The first and perhaps most important lesson is that critical thinking is hard. It can seem quite basic, but it is actually a complicated business, and most people are just not very good at it.
  • A majority of people cannot, even when prompted, reliably exhibit and the most basic skills of general reasoning and argumentation.
  • Humans are not naturally critical thinkers; indeed, like ballet, is is a highly contrived activity.
  • Evolution doesn't waste effort making things better than they need to be, and homosapians evolved to be just logical enough to survive while competitors such as Neanderthals and mastodons died out.
  • Michael Shermer describes us as "pattern-seeking, story-telling animals." We like things to make sense, and kinds of sense we grasp most easily are simple, familiar patterns or narratives.
  • Critical thinking is a complex activity built up out of other skills which are simpler and easier to acquire.
  • Critical thinking involves skillfully exercising various lower-level cognitive capacities in integrated wholes.
  • Because critical thinking is so difficult, it takes a long time to become any good at it. As a rule of thumb, my guess is that mastering critical thinking is about as difficult as becoming fluent in a second language.
  • Critical thinking may be hard, but it is certainly not impossible.
  • Ericsson found that achieving the highest levels of excellence in many different fields was strongly related to quantity of deliberate practice.
  • They have to actually engage in critical thinking itself, not just learn about it or observe others do it.
  • One of the biggest challenges in learning new skills, particularly general skills like critical thinking, is what is known as the problem of transfer. In a nutshell, the problem is that an insight or shill picked up in one situation isn't, or can't be, applied to another situation.
  • Transfer of acquired knowledge and skills certainly does occur to some extent; otherwise, education would be largely futile. The problem is that it tends to happen much less than you'd naively expect.
  • The problem of transfer affects critical thinking as much as any other skill. Indeed, critical thinking is especially vulnerable to the problem of transfer, since critical thinking is intrinsically general in nature.
  • Beyond a certain point, improvement demands getting some theory on board.
  • Knowledge of the theory allows you to perceive more of hat is going on.
  • The better you can "see" what is going on, the more effectively you can understand what you are doing and how you can do it better.
  • The mistake is to think that skills are a natural outcome of theory. They are not; skills are a natural outcome of practice.
  • At root, belief preservation is the tendency to make evidence subservient to belief, rather than the other way around; or, put another way, to use evidence to preserve our opinions.
  • When we strongly believe something (or strongly desire it to be true) then we tend to do the following things:
    • We seek out evidence which supports what we believe, and don't seek, avoid, or ignore evidence which goes against it.
    • We rate evidence as good or bad, depending on whether it supports or conflicts with our belief.
    • We stick with our beliefs even in the face of overwhelming contrary evidence, as long as we can find at least some support, no matter how slender.
  • The ideal critical thinker:
    • Puts extra effort into searching for and attending to evidence which contradicts what she currently believes.
    • When "weighing up" the arguments for and against, gives some "extra credit" for those arguments which go against her position.
    • Cultivates a willingness to change her mind when the evidence starts mounting against her.
  • As Richard Feynman said, "The first principle is that you must not fool yourself---and you are the easiest person to fool."
  • A core part of critical thinking is handling arguments.
  • An argument is a connected series of statements intended to establish a definite proposition.
  • If evidence forms complex hierarchical structures, then those structures can be diagrammed.
  • Argument maps are simply a more transparent and effective way to represent arguments, and so they make the core operations of critical thinking more straightforward, resulting in faster growth in critical thinking skills.
  • Motivation comes in two different kinds, knows as intrinsic and extrinsic. Intrinsic motivation is caring about an activity or achievement for its own sake.
  • Extrinsic motivation is caring about an activity or achievement only because it will get you something else, something extrinsic to the activity.

20170812

Metacognitive Education: Going Beyond Critical Thinking by Joe Y.F. Lau

  • Critical thinking necessarily involves a certain amount of "meta-cognition", or "thinking about thinking".
  • Critical thinking must involve some amount of meta-cognition, since a critical thinker ought to be able to reflect upon the reason for her beliefs, and take careful steps to ensure that her reasoning is correct.
  • One of the most basic reasons for teaching critical thinking is to help students improve their decisions about what to believe or what to do.
  • Meta-cognitive education can help students learn how to acquire new skills and expertise quickly and effectively.
  • Without creativity, critical thinking is impotent in changing the world. But creativity in turn requires critical thinking in testing and implementing ideas.
  • A key insight of the meta-cognitive approach is that being a good thinking is not simply a matter of knowing the principles of correct reasoning. It has to be supported by an appropriate system of knowledge, skills, and character traits.
  • Reflective thinking is the precursor to what we now call critical thinking, and it includes a fair amount of logic.
  • Higher-order monitoring is needed to correct and fine-tune our cognitive dispositions, and this is precisely a central function of meta-cognition.
  • Reasoning itself is a cognitive process.
  • We often over-estimate our abilities and underestimate our susceptibility to biases.
  • Accurate self-understanding is important for knowing our strengths and weaknesses, and for identifying areas of improvement.
  • Creativity is often thought to be a matter of innate talent or a product of mysterious inspiration, But many people fail to realize that creativity in a given domain depends a lot on extensive knowledge and the development of expertise over a long period of time.
  • Our meta-conceptions about learning can directly affect our actual learning and problem solving skills.
  • Students can improve their academic performance when they are taught that intellectual skills can be acquired and enhanced through effort and in overcoming challenges.
  • Exploiting the help of social networks and learning from the best people around us can boost our problem solving ability.
  • Conformity and group-think are examples of thinking traps that we should avoid.
  • It is worth nothing that cognitive biases can occur even when no logical fallacy is being committed.
  • Cognitive biases provide an important source of information about the architecture of the mind.
  • Accurate self-knowledge is essential in order to control and improve our thinking.
  • Self-regulation is surely crucial for critical thinking. A critical thinker understands the importance of clarity and truth, and takes careful steps to achieve those objectives. Deliberate effort is needed to analyze ideas systematically and to avoid rash judgments.
  • In many cases, daily practice for a whole decade is necessary to achieve world-class performance.
  • Grit presupposes self regulation, and is highly correlated with conscientiousness (but not IQ). Grit predicts educational attainment, undergraduate grade point average, retention in college, over and above IQ and conscientiousness.
  • In any case, meta-cognition ought to be given a more prominent place in the teaching of critical thinking itself.

20170811

Self-Reliance by Ralph Waldo Emerson

  • To believe your own thought, to believe that what is true for you in your private heart is true for all men,--that is genius.
  • A man is relieved and gay when he has put his heart into his work and done his best; but what he has said or done otherwise, shall give him no peace.
  • Society everywhere is in conspiracy against the manhood of every one of its members.
  • A man is to carry himself in the presence of all opposition, as if every thing were titular and ephemeral but he.
  • Do your work, and you shall reinforce yourself.
  • For nonconformity the world whips you with its displeasure.
  • A foolish consistency is the hobgoblin of little minds, adored by little statesmen and philosophers and divines.
  • Speak what you think now in hard words, and tomorrow speak what tomorrow things in hard words again, though it contradict ever thing you said today.
  • To be great is to be misunderstood.
  • Prayer is the contemplation of the facts of life from the highest point of view.
  • Our minds travel when our bodies are forced to stay at home.
  • Insist on yourself, never imitate.
  • Every great man is a unique.
  • Society never advances. It recedes as fast on one side as it gains on the other.
  • For every thing that is given, something is taken.
  • Nothing can bring you peace but yourself. Nothing can bring you peace but triumph of principles.

20170804

How Computers Work by Roger Young

  • Computers are the most complex machines that have ever been created. Very few people really know how they work.
  • The ground wire is not shown because it is assumed that one connection of every light is always connected to the bottom of the battery by a ground wire in diagrams. Diagrams are simpler to draw than pictures that mean the same thing.
  • A key is a flat piece of springy steel that is bent up so that the key only touches the wire to the key's right when the key is pressed down by someone's finger.
  • An electromagnet is a coil of (plastic coated) wire. An electromagnet becomes magnetic when electricity goes through it.
  • A key and the electromagnet that controls it are, together, called a relay.
  • A computer is almost entirely made up of a lot of relays (today, transistors) connected by wires.
  • Today, transistors are used instead of relays for lower cost and greater speed.
  • Touching wires are connected wires.
  • Most relays in a computer are used to make loops, or connect the loops together.
  • A light bulb that is controlled by a loop is called a "pixel".
  • When the key is down and the light bulb is glowing, one says that the loop has value '1' and the pixel is 'on'.
  • When the key is up and the light bulb is not glowing, one says that the loop has value '0' and the pixel is 'off'.
  • A key is called 'closed' when electricity can flow through it from a wire on its left to a wire on its right. A key is called 'open' when electricity can't flow through it from a wire on the left to a wire on the right.
  • Any piece of wire that is powered is said to have value '1'. Any piece of wire that is not powered is said to have value '0'.
  • Writing to a latch will not clear any bits that were previously 1, so always clear a latch before copying (writing) data to it.
  • The next most important part of a computer, after memory, is the processor. A processor changes the values in memory as instructed by instructions stored in memory. An instruction is a group of bits (loop values) in memory that tell the processor to do something. A group of instructions that instruct the processor to do some task is called a program.
  • A transistor-based computer works in the same way as a relay-based computer.
  • A 16-bit computer has 16 bits in each 'word' and 65536 words of memory. This is because there are 65536 possible 16-bit addresses.
  • The data is the program. An instruction written with instructions that are just 1's and 0's is a machine language instruction. Machine language instructions are called 'machine code'.
  • A lookup table can be made to do any function with a limited number of possible inputs.
  • Modern computers use two types of transistors, which correspond to the two types of relays. An N-channel transistor corresponds to a normally open relay. A P-channel transistor corresponds to a normally closed relay.
  • It takes about twice a s many transistors as relays to do something. Of course, the high speed and low cost of transistors make transistors vastly superior in spite of the extra design effort required.
  • In modern designs, it is common for the ensuing instruction to be started before the prior instruction finishes, so a few instructions can be executed at once. This is called pieplining.

20170803

Programming Pearls by Jon Bentley

  • Careful analysis of a small problem can sometimes yield tremendous practical benefits.
  • Determining what the user really wants to do is an essential part of programming.
  • Don't write a big program when a little one will do.
  • Be familiar with advanced data structures. Advanced data structures aren't appropriate very often, but when you need them, they're indispensable.
  • Let the data structure the program. The theme of this column is that data can structure a program by replacing complicated code by a data structure.
  • The relations among input, program variables, and output describe the "state" of a program; assertions allow a programmer to enunciate those relations precisely.
  • To verify a subroutine, we first state its purpose by two assertions. Its precondition is the state that must be true before it is called, and its post-condition is what the routine will guarantee on termination.
  • The output of any calculation is only as goo d as its input.
  • Everything should be made as simple as possible, but no simpler.
  • The most important principle about code tuning is that it should be done rarely.
  • When efficiency is important, the first step is to profile the system to find out where it spends its time.
  • Simplicity can yield functionality, robustness, speed and space.
  • The space required to store a given object can be dramatically reduced if we don't store it but rather recompute it whenever it is needed.
  • Replacing a data structure can drastically reduce the space required to store given information.
  • How should you sort a sequence of records into order? The answer is usually straightforward: use a sort command provided by the system.
  • One part of a programmer's job is solving today's problem. Another, and perhaps more important, part of the job is to prepare for solving tomorrow's problems. Sometimes that preparation involve taking classes or studying books like Knuth's. More often, though, we programmers learn by the simple mental exercise of asking how we might have solved a problem differently.
  • Good engineers distinguish between what a component does (the abstraction seen by the user) and how it does it (the implementation inside the black box).
  • Before you build a fancy program, let potential users experiment with a simple prototype on many real inputs.
  • A well-built system is divided into independent components, each of which does one thing well.
  • The best design is usually the simplest.