I think RTFM has its place. I know I’m not in the minority with this view, but it’s not exactly polite to talk about it. We have all started out on the other side of RTFM at some point, clueless and helpless, not knowing where to begin.
To be quite honest, I wasn’t told to RTFM that much, because I learned to program from books when I was 12, and I wished I could ask somebody for guidance. My father still knew BASIC from the late 70s and early 80s, and my teachers knew enough PASCAL to pass their own exams and then teach children how to use Microsoft Excel. There was nobody to turn to.
When I started learning Java from a book, I was very confused, and I learned many bad habits, idiosyncrasies of the book’s author that I stuck with because I didn’t understand what they meant. Then I bought a bigger, heavier book about Java, and I slowly learned to program. I learned programming in general and Java in particular at the same time. One textbook explained what classes in Java do, but not why you would use them, and the other textbook vacillated between treating OOP as a scary newfangled concept nobody understands but everybody has to use because of Java, and something you have to be familiar with already because the book assumed you already knew C, C++, BASIC and smalltalk.
I read the manual and I didn’t understand. What finally got me to understand OOP was ironically learning and reading code in Python. Unlike in Java and smalltalk, OOP in Python is optional. Although everything in Python is an object, the common Pythonic programming style is procedural, with OOP constructs used sparingly when they make sense. This finally let me understand what OOP is good for. No amount of contrived examples like “class PickUpTruck extends Car { ... }“ helped me understand OOP in Java.
The same thing can happen with classes, module systems, macros, build systems, version control systems, bug trackers, databases, and visual modelling languages like UML and FMC. They are all paradigms or technologies to manage complexity, and if I give a student a toy teaching example of a SQL database, multi-module program, or UML diagram, then the student will be confused rather than enlightened. If the complexity is missing from the example, then the benefit of using complexity-mitigating technology is not obvious.
That even goes for comments! What good are comments in a textbook example, with explanatory text already left and right of the code listing?
If I had a teacher who could explain OOP to me, things would have been so much easier. Eventually, I managed to learn what I needed to learn. Some things are much, much harder to learn if you can’t ask a teacher multiple clarificatory question in quick succession. It would be even better if your teacher asked you a couple of questions to drill down on which part you didn’t understand.
Nowadays, I see many questions on Discord, IRC, and forums from people who are just starting out learning to program. It’s a vast difference between learning Unity3D when you are already a programmer who shipped software in C++ and wrote games in Java, and learning programming, C#, game design, level design, shaders, 3D modelling, and the Unity3D Engine in one go.
If somebody asks a confused question online, the first order of business is to establish whether they are an expert or a confused beginner. That can sound confusing and condescending, but I often fear if I give a straight answer to a confused question, I do more harm than good.
When somebody asks “How do I iterate over the pixels in a pygame surface?“, I can give the straight answer, or three advanced answers with different performance characteristics. You probably want to use numPy and cache the results during level loading. Maybe you can also use numPy if it’s only an occasional thing, and you can stomach the dozens of megabytes of native code dependencies. You probably want to use OpenGL with a GLSL fragment shader if you do the thing every frame. If perchance you want to do palette-swaps only, then you can use the pygame palette handing functions rather than iterating over pixels and doing a dict look-up each time. Iterating over all the pixels in a pygame surface is slow. You can probably get away with it on a 16x16 sprite, but not on a 1920x1080 screenshot.
That’s not even the worst of it! I see confused questions by people who think they found a bug in a library/framework/engine, but actually they just don’t understand their own code, or they don’t understand the programming language. I see confused questions by people who don’t know what problem they are actually encountering, who don’t know what to Google.
These people don’t need to be told to RTFM. Either they already read the manual, but they don’t understand it, or they don’t even know which manual, or what to look for. They can’t be told to RTFM, but they can’t be given straight answers either. The best thing you can do is to ask “You’re new to this, aren’t you?“ and point them to a more basic tutorial. Or, if your time is worthless, you can decide to tutor them one-on-one over the Internet.
All these problems can combine into the worst possible scenario: Somebody asks on StackOverflow/IRC/the mailing list/Slack/Discord, because their teacher is not available, or told them to learn to RTFM and figure it out independently. These people can be high school students too intimidated by their teachers to ask questions, university students who can’t be bothered to attend lectures or wait for office hours, or junior programmers who are trying to impress their boss.
Figuring things out is a useful skill to have, but it’s not something you should rely on in a high school class. If you’re a teacher, don’t punish students for asking questions! And don’t expect students to bother strangers on the Internet to do your job for you. The best thing you can do to get students to RTFM is to answer their questions when they get stuck, so they get a good idea of what to look for, which terms to search for, what to ask on IRC.
If you want to teach your pupils to RTFM, you should at least follow up with them and point them in the right direction in case they get stuck trying to look up the answer, or if they don’t understand the text in the manual. Of course you can assign reading, but for some reason, some of your pupils will take this to mean that you refuse to explain the topic, so the only recourse is to ask strangers online.
And then the student comes back next week and asks even more confused questions, now that the next assignment is due, impossible to complete without having understood last week’s topic.
Around a third of confused newbie questions I see are from students who would rather not ask their teachers, not even those who post whole homework assignments.
Some people want us to stop saying RTFM online, ever. They also want us to stop saying “You’re new to this, aren’t you?“ or “Please take a step back and think about what you are trying to accomplish with this“. They all are too condescending. I’m not just trying to shift the blame away from open source projects and programmer online communities. Confused online questions sometimes have offline causes. These causes cannot be hyperlinked, retroactively screenshotted, and posted to twitter.
For all the talk of rudeness online, many students would rather ask questions here than at school. Maybe the problem lies in the classroom.