Author Archives: deroj

About deroj

https://nicholasderoj.com/

Elevator Pitch of Critical Rationalism – Elliot Temple

This is an elevator pitch of Critical Rationalism (CR) by Elliot Temple that I like.

I did not use the blog’s quote funktion. Instead I put the entire quote in quotation marks, because the quotation funktion removes italics and messes with the original quote.

Elevator pitch:

CR solves the fundamental problems of epistemology, like how knowledge can be created, which induction failed to solve. It’s a very hard problem: the only solution ever devised is evolution (literally, not analogously – evolution is about replicators, not just genes). In terms of ideas, evolution takes the form of guesses and criticism. CR develops much better criticisms of induction than came before, which are decisive. CR challenges the conventional, infallibilist conception of knowledge – justified, true belief – and replaces it with a non-skeptical, non-authoritarian conception of knowledge: problem-solving information (information adapted to a purpose). Although we expect to learn better ideas in the future, that doesn’t prevent our knoweldge from having value and solving problems in the current context. This epistemology is fully general purpose – it works with e.g. moral philosophy, aesthetics and explanations, not just science/observation/prediction. The underlying reason CR works to create knowledge is the same reason evolution works – it’s a process of error correction. Rather than trying to positively justify ideas, we must accept they are tentative guesses and work to correct errors to improve them.

This position should not be judged by how nice or strong it sounds; it logically works OK unlike every rival. Decisive issues for why something can’t work at all, like induction faces, have priority over how intuitive you find something or whether it does everything you’d like it to do (for example, CR is difficult to translate into computer code or math, which you may not like, but that doesn’t matter if no rival epistemology works at all).

I expect someone to bring up Solomonoff Induction so I’ll speak briefly to that. It attempts to answer the “infinite general patterns fit the data set” problem of induction (in other words, which idea should you induce from the many contradictory possibilities?) problem with a form of Occam’s Razor: favor the ideas with shorter computer code in some language. This doesn’t solve the problem of figuring out which ideas are good, it just gives an arbitrary answer (shorter doesn’t mean truer). Shorter ideas are often worse because you can get shortness by omitting explanation, reasoning, background knowledge, answers to critics, generality that isn’t necessary to the current issue, etc. This approach also, as with induction in general, ignores critical argument. And it’s focused on prediction and doesn’t address explanation. And, perhaps worst of all: how do you know Occam’s Razor is any good? With epistemology we’re trying to start at the beginning and address the foundations of thinking, so you can’t just assume common sense intuitions in our culture. If we learn by induction, then we have to learn and argue for Occam’s Razor itself by induction. But inductivists never argue with me by induction, they always write standard English explanatory arguments on philosophical topics like induction. So they need some prior epistemology to govern the use of the arguments for their epistemology, and then need to very carefully analyze what the prior epistemology is and how much of the work it’s doing. (Perhaps the prior epistemology is CR and is doing 100% of the work? Or perhaps not, but that needs to be specified instead of ignored.) CR, by contrast, is an epistemology suitable for discussing epistemology, and doesn’t need something else to get off the ground.”

 

Purpose of Laws

Laws are designed to protect the weak, not the strong“, Tucker says at 9:14. I disagree. Laws are designed to protect individual rights (or at least that’s how it should be in a moral society).

Weekly Goal Summary 2020-06-13

Period: 2020-06-06 – 2020-06-13
(“Goal weeks” starts on Saturdays and ends on Fridays.)

I met 0 out of 2 main goals for this week.
I met 0 out of 2 secondary goals this week.


Main Goals

  • Programming / Simply Scheme (minimum 1 chapter / week)
    Not met.
  • Overreaching & learning (Write down what I know. Work on it and update it once every week.*)
    Not met.

Secondary Goals

  • Typing (minimum 30 min / day on average)
    Not met..
  • Blog (minimum 1 non-goal related posts / week)
    Not met.

Temporary Goals

Shorter term goals. About one week. Mainly focused on working on a particular skill.

  • None this week.

Thoughts

I took a break form active learning. Just did some passive stuff last week.

I did some reading / audiobook listening outside of my goals. Mainly listened to “The Return of the Primitive: The Anti-Industrial Revolution” by Rand and “Surely You’re Joking, Mr. Feynman!” by Feynman – and read some Oist stuff on the web.


I will post weekly summaries of my goals weekly until I have meet all my goals for three weeks in a row. After that I will most likely only post summaries of my goals on a monthly basis.

Weekly Goal Summary 2020-06-05

Period: 2020-05-30 – 2020-06-05
(“Goal weeks” starts on Saturdays and ends on Fridays.)

I met 0 out of 2 main goals for this week.
I met 2 out of 2 secondary goals this week.


Main Goals

  • Programming / Simply Scheme (minimum 1 chapter / week)
    Not met.
  • Overreaching & learning (Write down what I know. Work on it and update it once every week.*)
    Not met. Did not write down anything.

Secondary Goals

  • Typing (minimum 30 min / day on average)
    Met. Did average more than 30 min per day.
  • Blog (minimum 1 non-goal related posts / week)
    Met. Posted 2 non-goal related posts.

Temporary Goals

Shorter term goals. About one week. Mainly focused on working on a particular skill.

  • None this week.

Thoughts

I missed two of my goals last week.

I had some motivational issues last week. I could not concentrate when trying to work on my main goals. Non-thinking activities went well – such as typing.
I did not push on the main goals nor look into why I had motivational issues. I just let it be.

Instead of working on my main goals I did listen to some some Objectivist stuff. Primarily “The Return of the Primitive: The Anti-Industrial Revolution” by Ayn Rand.


I will post weekly summaries of my goals weekly until I have meet all my goals for three weeks in a row. After that I will most likely only post summaries of my goals on a monthly basis.

Rationality is about methods of thinking which allow for the correction of mistakes. It’s wise because irrational attitudes, if they are mistaken, stay mistaken. Mistakes in rational attitudes can be fixed. Can someone reject the premises of my argument, or refuse to listen to it if they don’t want to, or misunderstand it? Yes. And for all I know they can understand it and reject it — maybe I’m wrong. But none of this is a problem or bad thing. Progress doesn’t come from airtight arguments that force people to accept reason or anything else. It comes from voluntary action, people choosing to think and wanting to gain values by thinking, people having problems they want to improve on, people recognizing their mistakes and wanting a better life. Life presents problems which can inspire people to take some initiative in improving, we don’t have to worry about forcing passive people to live the way we deem correct (and we must not do that, because we might be mistaken; a tolerant society is the only rational society).

– Elliot Temple, [comment on] The Myth of the Closed Mind, 3

Weekly Goal Summary 2020-05-29

Period: 2020-05-23 – 2020-05-29
(“Goal weeks” starts on Saturdays and ends on Fridays.)

I met 1 out of 2 main goals for this week.
I met 2 out of 2 secondary goals this week.


Main Goals

  • Programming / Simply Scheme (minimum 1 chapter / week)
    Met. Finished ch 7.
  • Overreaching & learning (Write down what I know. Work on it and update it once every week.*)
    Not met. Did not write down anything.

Secondary Goals

  • Typing (minimum 30 min / day on average)
    Met. Did average more than 30 min per day.
  • Blog (minimum 1 non-goal related posts / week)
    Met. Posted 3 non-goal related posts.

Temporary Goals

Shorter term goals. About one week. Mainly focused on working on a particular skill.

  • None this week.

Thoughts

I missed one of my goals last week.

Other than Scheme I put most of the time on a passive approach (listening, reading). I think this is less effective than writing down things, putting more thought into the ideas, and discussing / asking questions on the content. I will work on changing this during this week.

Update 2020-06-02:
I don’t have an elaborate plan on how to do a shift from the less effective method to the more effective method. I will just dedicate some time each day from today to do some actual writing on my other main goal (“overreaching & learning“) – even if it is only a couple of minutes per day. That might work on getting me started.


I will post weekly summaries of my goals weekly until I have meet all my goals for three weeks in a row. After that I will most likely only post summaries of my goals on a monthly basis.

Fizz Buzz in Scheme

I learned about a children’s game called Fizz Buzz today. It turns out that Fizz Buzz is a fairly common programming task that comes up during programming interviews.

Since I am learning to program, I decided to give it a shot.

Here is one way to code a Fizz Buzz procedure in Scheme.
It took me about 5 minutes to think out the solution to this and write the code.

(define (fizzbuzz x)
    (cond ((and (equal? (remainder x 3) 0) (equal? (remainder x 5) 0)) 'fizzbuzz)
          ((equal? (remainder x 3) 0) 'fizz)
          ((equal? (remainder x 5) 0) 'buzz)
          (else se x)))

Update 2020-05-28:

I learned about a new notation called “let” today.

I figured I could improve my Fizz Buzz code by adding “let” to the previous code. This way it becomes easier to alter the “fizz”, “buzz”, and “fizzbuzz” values since they would only have to be altered in one place instead of changing the number in all places in the code.

This was my first solution with “let“:

(define (fizzbuzz x)
    (let ((fizz 3)
          (buzz 5))
      (cond ((and (equal? (remainder x fizz) 0) (equal? (remainder x buzz) 0)) 'fizzbuzz)
          ((equal? (remainder x fizz) 0) 'fizz)
          ((equal? (remainder x buzz) 0) 'buzz)
          (else se x))))

I thought some more about it and figured I could improve on the code even more – rid it of the redundant parts.

Result:

(define (fizzbuzz x)
    (let ((fizz 3)
          (buzz 5))
      (let ((fizzname (equal? (remainder x fizz) 0))
            (buzzname (equal? (remainder x buzz) 0)))
      (cond ((and fizzname buzzname) 'fizzbuzz)
          (fizzname 'fizz)
          (buzzname 'buzz)
          (else se x)))))

Update 2020-05-29:

Adding some explanation to the evolution of above code.

The first code did what it was supposed to do. It gave the right answers to Fizz Buzz for numbers divisible with 3 and 5.

In the next step I added the “let” notation. Adding “let” made the code better because it made it easier to change the numbers from 3 and 5 to any other numbers.
By adding “let” one only needs to change the numbers in one single place of the code. Without “let” one would have to change every singel “3” and “5” that appears in the entire code. Thus there is less room for error after adding “let“. An error would be to eg miss to change one “3” in the code.

In the final step I added “let” to recurring parts of the code as well. By doing this, recurring parts of the code only need to be evaluated once instead of multiple times. This makes the code more efficient.

Weekly Goal Summary 2020-05-22

Period: 2020-05-16 – 2020-05-22
(“Goal weeks” starts on Saturdays and ends on Fridays.)

I met 0 out of 2 main goals for this week.
I met 1 out of 2 secondary goals this week.
I met 1 out of 1 temporary goal this week.


Main Goals

  • Programming / Simply Scheme (minimum 1 chapter / week)
    Not met. Did not finish a chapter.
  • Overreaching & learning (Write down what I know. Work on it and update it once every week.*)
    Not met. Did not write down anything.

Secondary Goals

  • Typing (minimum 30 min / day on average)
    Met. Did average more than 30 min per day.
  • Blog (minimum 1 non-goal related posts / week)
    Not met. Did not post 1 non-goal related post.

Temporary Goals

Shorter term goals. About one week. Mainly focused on working on a particular skill.

No temporary goal for the coming week.


Thoughts

I revised my old goals so that I would not overreach. I still didn’t meet my weekly goals. This time I do not think the main issue was overreaching, but evading.

I did not focus on learning overreaching & learning as I wrote down I would do. I treated it more like a secondary goal and left it for “later” every day. “Later” never came because at the end of the day I didn’t have mental energy to work on this. This coming week I will dedicate time early in the day to working on overreaching & learning.

Programming a did work on to a larger extent. Chapter 6 was fairly long. I finished it on Saturday.


I will post weekly summaries of my goals weekly until I have meet all my goals for three weeks in a row. After that I will most likely only post summaries of my goals on a monthly basis.

Simply Scheme: Chapter 6, Exercise 6.13

My main goal right now is just to learn to code. My main goal right now is not to write the best code that I possibly can.

By first focusing on just learning to code in Scheme I can focus on only that and not on writing the best possible code. This helps me to avoid overreaching (learn to code and write awesome code at the same time) and lets me improve one step at a time. Once I get better at fundamental coding in Scheme, I can focus on writing better code.

Below is how I dealt with exercise 6.13, ch 6, in Simply Scheme. My thinking process, my mistakes and how I solved them.

All my Scheme exercises can be found on Subscribestar in the $2 tier.
From chapter 4 and onwards I write out my thinking process and mistakes.
For chapter 1-3 there are only my solutions.


6.13 Write a better greet procedure that understands as many different kinds of names as you can think of:

> (greet ‘(john lennon))
(HELLO JOHN)

> (greet ‘(dr marie curie))
(HELLO DR CURIE)

> (greet ‘(dr martin luther king jr))
(HELLO DR KING)

> (greet ‘(queen elizabeth))
(HELLO YOUR MAJESTY)

(greet ‘(david livingstone))
(DR LIVINGSTONE I PRESUME?)

I will just focus on the examples given in the exercise. I will not come up with new kinds of names.

Thinking process:
1. A title will always be in front of a persons actual name – eg “dr“, “queen“, “king“.
2. For “dr” greet as “dr” followed by last name. But only if last name is not “jr” / “sr“. If last name is equal to “jr” / “sr” then use the second last name.
3. For “queen” / “king” greet as “your majesty“.
4. Don’t know how to presume if someone is a dr without making a list of all ppl that are dr.

Step 1:

Test the core concept.

(define (greet name)
    (if (equal? (first name) 'dr)
        (se '(hello dr) (last name))
        #f))

Works.


Step 2:

Add more “if” procedures. Add “king” / “queen“.

(define (greet name)
    (if (equal? (first name) 'dr)
        (se '(hello dr) (last name))
        (if (equal? (first name) (member? '(king queen)))
            (se '(hello your majesty))
            (se 'hello (first name)))))

Did not work.
member?” lacking one of its two arguments.

(define (greet name)
    (if (equal? (first name) 'dr)
        (se '(hello dr) (last name))
        (if (equal? (first name) (member? (first name) '(king queen)))
            (se '(hello your majesty))
            (se 'hello (first name)))))

Did not work.
Prints “(hello queen)

Test 1:

Effort to find the problem.

(define (greet name)
    (if (equal? (first name) (member? (first name) '(king queen)))
            (se '(hello your majesty))
            #f))

Prints “#f

Test 2:

(member? 'queen '(king queen))

Prints “#t

I think my mistake is that I am mixing the wrong domains.
member?” is a predicate (a function that returns either #t or #f). Thus “(equal? (first name) (member? (first name) ‘(king queen)))” would be evaluated as (step by step evaluation):
1. (equal? (first name) (member? (first name) ‘(king queen)))
2. (equal? ‘queen (member? ‘queen ‘(king queen)))
3. (equal? ‘queen #t)
4. #f

My “king” / “queen” code is unnecessarily confusing. I can just eliminate the “equal?” part.

(define (greet name)
    (if (equal? (first name) 'dr)
        (se '(hello dr) (last name))
        (if (member? (first name) '(king queen))
            (se '(hello your majesty))
            (se 'hello (first name)))))

Works.


Step 3:

Fix “jr” / “sr“.
jr” / “sr” only matters for ppl that are “dr” as “jr” / “sr” is at the end of the name.

(define (greet name)
    (if (equal? (first name) 'dr)
        (se '(hello dr) (last name))
        (if (and (equal? (first name) 'dr) (member? (last name) '(sr jr)))
            (se '(hello dr) (last (bl name)))
            (if (member? (first name) '(king queen))
                (se '(hello your majesty))
                (se 'hello (first name))))))

Did not work.
Prints “(hello dr jr)” for “> (greet ‘(dr martin luther king jr))“.

It is because the first “if” procedure is true. I need to change places with the first and the second procedure. That should fix it.

(define (greet name)
    (if (and (equal? (first name) 'dr) (member? (last name) '(sr jr)))
            (se '(hello dr) (last (bl name)))
            (if (equal? (first name) 'dr)
                (se '(hello dr) (last name))
                (if (member? (first name) '(king queen))
                    (se '(hello your majesty))
                    (se 'hello (first name))))))

Works.


I don’t know how to do the following without making a list of all ppl who could be considered doctors in advance.

> (greet ‘(david livingstone))
(DR LIVINGSTONE I PRESUME?)

A list of that would be something like:

(if (equal? name '(david livingstone))
        (se 'dr (last name) '(I presume?))
        ...))

Then it would look something like this:

(define (greet name)
    (if (and (equal? (first name) 'dr) (member? (last name) '(sr jr)))
            (se '(hello dr) (last (bl name)))
            (if (equal? (first name) 'dr)
                (se '(hello dr) (last name))
                (if (member? (first name) '(king queen))
                    (se '(hello your majesty))
                    (if (equal? name '(david livingstone))
                        (se 'dr (last name) '(I presume?))
                        (se 'hello (first name)))))))

Works.