After trying and failing to grasp Objective-C for quite a while, I stopped Googling things like “Objective-C tutorial,” “Objective-C documentation,” and “Objective-C examples,” and instead looked for “Objective-C for C++ Programmers” and “Objective-C for Python Programmers” because those are my two strongest languages. This was just tremendously efficient for a large number of reasons, the most obvious of which is that new information is expressed explicitly in terms of direct contrast to information with which you are familiar. The typical “computer language tutorial,” in contrast, is in my opinion a very shoddy document from a pedagogical standpoint, usually appearing totally clear to anyone familiar with the language but vague and ambiguous to its target audience.
As someone who spends a lot of time reading Internet, I don’t recall ever reading this advice before—learn new languages faster in context of languages you know—so I thought I’d post the thought here.
The typical “computer language tutorial,” in contrast, is in my opinion a very shoddy document from a pedagogical standpoint, usually appearing totally clear to anyone familiar with the language but vague and ambiguous to its target audience.
Brent Yorgey’s “monad tutorial fallacy” points out a possible cause of this problem: the authors of tutorials mistake a summary of an insight as being the path to that insight.
learn new languages faster in context of languages you know
A related problem I’ve seen newer programmers struggle with is that even reasonably good tutorials are often written in the context of specific older, popular languages, typically C. And if they are written for C, they are not titled “Foo for C Programmers”; they are just titled “Foo Tutorial”. And they say things like, “Whenever you would use XYZ in C, you can use PDQ in Foo.” This is useless for learners who are not coming from C.
I’m put in mind of the Red Queen from Through the Looking Glass:
‘Do you know Languages? What’s the French for fiddle-de-dee? ″Fiddle-de-dee’s not English,’ Alice replied gravely. ‘Who ever said it was?’ said the Red Queen. Alice thought she saw a way out of the difficulty this time. ‘If you’ll tell me what language “fiddle-de-dee” is, I’ll tell you the French for it!’ she exclaimed triumphantly. But the Red Queen drew herself up rather stiffly, and said ‘Queens never make bargains. ″I wish Queens never asked questions,’ Alice thought to herself.
I heard that Objective-C is something like “Smalltalk implemented within C”; a solution trying to combine the advantages of both languages. Since you already have experience with C, I guess it could be useful to also learn some Smalltalk tutorials; not to become a fluent Smalltalk programmer, but to get an awareness of how things are approached in that language. And perhaps then, some things in Objective-C would make more sense as you would know what the authors of the language were trying to accomplish.
More meta: A few times I tried to write a programming tutorial or textbook, but I usually stopped at asking myself: “I am going to teach X to people who already know what?” Because when I am teaching, that is the essential question; I can’t imagine doing it otherwise. I always start by asking my students what they already know, verifying that they really know it instead of just guessing my password. But how would you do the same thing with a textbook?! Then the remaining options seem to be just assuming some background knowledge (and I feel any specific assumption will usually be wrong), or start by explaining everything from some common base (e.g. high school math), but then the tutorials would be extremely long and a lot of starting material would be repeated in different tutorials. So to avoid the repeating, maybe I should separate the shared parts and actually make a tree of tutorials… and at that moment I usually see the amount of work, how much would it take… and I give up.
After trying and failing to grasp Objective-C for quite a while, I stopped Googling things like “Objective-C tutorial,” “Objective-C documentation,” and “Objective-C examples,” and instead looked for “Objective-C for C++ Programmers” and “Objective-C for Python Programmers” because those are my two strongest languages. This was just tremendously efficient for a large number of reasons, the most obvious of which is that new information is expressed explicitly in terms of direct contrast to information with which you are familiar. The typical “computer language tutorial,” in contrast, is in my opinion a very shoddy document from a pedagogical standpoint, usually appearing totally clear to anyone familiar with the language but vague and ambiguous to its target audience.
As someone who spends a lot of time reading Internet, I don’t recall ever reading this advice before—learn new languages faster in context of languages you know—so I thought I’d post the thought here.
Brent Yorgey’s “monad tutorial fallacy” points out a possible cause of this problem: the authors of tutorials mistake a summary of an insight as being the path to that insight.
A related problem I’ve seen newer programmers struggle with is that even reasonably good tutorials are often written in the context of specific older, popular languages, typically C. And if they are written for C, they are not titled “Foo for C Programmers”; they are just titled “Foo Tutorial”. And they say things like, “Whenever you would use XYZ in C, you can use PDQ in Foo.” This is useless for learners who are not coming from C.
I’m put in mind of the Red Queen from Through the Looking Glass:
Maybe, but here are two other hypotheses:
People who think about pedagogy write more specific tutorials, but what makes the tutorial good is a separate effect of thinking about pedagogy.
There was nothing special about the last tutorial; you just needed repeated exposure to the concepts.
I heard that Objective-C is something like “Smalltalk implemented within C”; a solution trying to combine the advantages of both languages. Since you already have experience with C, I guess it could be useful to also learn some Smalltalk tutorials; not to become a fluent Smalltalk programmer, but to get an awareness of how things are approached in that language. And perhaps then, some things in Objective-C would make more sense as you would know what the authors of the language were trying to accomplish.
More meta: A few times I tried to write a programming tutorial or textbook, but I usually stopped at asking myself: “I am going to teach X to people who already know what?” Because when I am teaching, that is the essential question; I can’t imagine doing it otherwise. I always start by asking my students what they already know, verifying that they really know it instead of just guessing my password. But how would you do the same thing with a textbook?! Then the remaining options seem to be just assuming some background knowledge (and I feel any specific assumption will usually be wrong), or start by explaining everything from some common base (e.g. high school math), but then the tutorials would be extremely long and a lot of starting material would be repeated in different tutorials. So to avoid the repeating, maybe I should separate the shared parts and actually make a tree of tutorials… and at that moment I usually see the amount of work, how much would it take… and I give up.
May I ask why are you learning Objective-C? Programming for Mac?
Originally for iOS programming and since buying Apple computers I’ve acquired a more general interest in programming for Mac.