This post, as many are on this blog, is inspired by a post on the forums. A user (Banished_Outlaw) asked some questions about Scheme, and one of his concerns was that he wanted to learn the language before school started, thinking ahead of U Waterloo. Though Professor Prabhakar Ragde (PR) warns against attempting to learn something new and unfamiliar on your own:
I don’t know why you guys insist on learning on your own (possibly poorly or incorrectly, without any help) what you’re going to learn in a couple of months in a classroom. You’ll just get bored, start skipping lectures, miss important material, and get lower marks.
His point has some validity — learning the wrong way can be a bad thing and can set you back a bit. But is the problem really with trying to learn the material before starting class? What’s different about learning from a teacher than learning from a book or an online tutorial? The greatest advantage of being in class is that you have the structure and guidance of someone there. You can talk it over with the instructor and get some help.
The problem with learning on your own is that you have less indication of when you’re wrong, and one can’t even be sure that the source is giving you the correct information in the first place. But can you be sure about that in class as well? Some instructors might have preferences towards non-standard notation or syntax or approaches. The differences are often minor, and it doesn’t take much to figure out, but if the person already knew the alternative, or even had seen it (perhaps in an online tutorial before class), it could save a student from stumbling over trivial things like syntax variations.
Granted, this example isn’t to big of a deal, but it gets the point across. You can’t be closed-minded when learning. Knowledge can’t be a bad thing for you — it’s what you do with that knowledge that determines it’s usefulness. PR brings up another good point — he doesn’t want to see students learning in the wrong way:
What I don’t need is someone who skips my lectures because they’ve read the first chapter of SICP [...] and the night before each assignment is due writes out some sloppy R5RS code with no comments. Or, when using C, calls a library function instead of writing the code I want, thinking that the point is to get a working program instead of getting exercise in a particular technique.
I think this is the student’s responsibility — post-secondary studies are to teach students the profession, not to teach learning or study habits. It’s up to each individual student to decide what he/she is going to learn, and how they’re going to do it. Going to class and talking to their professor is the best way to find out what is expected. Grades could be assigned for specific approaches, techniques, or even style of coding. At the very least, that’s the type of material one would be expected to be familiar with in time for the tests.
Though the counterpoint is that I’ve skipped a lot of classes, and I’m at the top of my class. At times I didn’t go to class because I knew what to do, and usually had already done it. Usually I went and sat through the lectures (only half-minded, though). The usual outcome: “I already knew it”.
I won’t say you shouldn’t go to class, but you can’t rely on just that. My point is that learning cannot harm you. You have to be responsible, and if you’re in college you should know enough to make your own decisions about going to class or not! Having exposure to something before you take a class for it, in my opinion, is actually beneficial. At the worst it gives you a chance to see the differences in ways it can be taught, and usually you’ll have all the core skills down so you can focus on really understanding them and grasping the more complex concepts or paying attention to other details, like design standards of the language, rather than being mired in the syntax and basic library functions.
Don’t let knowledge get in your way – learn as much of it as you can. This summer, take up Python!
This article was written by (Anthony) Aziz. I’m an active member of the CompSci.ca community. I maintain my own website and blog and enjoy programming as a hobby and education (hopefully career, soon). If you haven’t already checked out the forums, I encourage anyone who reads this blog to do so, and also join us in the irc room (#compsci.ca on irc.afternet.org, or use the online chat page).
It might be interesting to point out that University of Waterloo is making the switch from Java to Scheme, at least in part, because of this issue. Even the basics of Java require a lot of overhead in basics, syntax, etc. In contrast, by focusing on a small subset of Scheme, most of the class is put at a similar starting point, perhaps making the lessons more balanced for more students.
There are certainly arguments for and against uncharted learning.
Reply to comment
I agree. Java has a lot of that overhead. But starting out with Visual Basic (which is probably the simplest for a new student to get something running), doesn’t do a student any good either. I imagine Scheme is a good middle ground, though I’ve never used it. It has simple syntax to begin with, and you don’t have to deal with a lot of the crap that languages like Java or C bring.
Other good languages that come to mind are Python, Ruby (or so I’ve heard – never tried), and even Turing! I first started in Turing, and if taught properly, it can be as good as a learning environment as any, at least for the first while.
Reply to comment
Great article. And I almost totally agree. There’s only one thing: “Learning cannot harm you”. There are exceptions. Learning bad habits, like a wrong spelling(e.g. “your” instead of “you’re”), learning too much instead of sleeping
Reply to comment
That’d be more of “forming” a bad habit. Learning is just taking in and (possibly) understanding some new information. Holding information cannot harm you, like I said, it’s what you do with it, or allow yourself to do because of it, that would harm you (like staying up too late reading a programming book – you know you’ve done it).
And I’m not taking into account learning tramatizing things does to the mind or soul – I’m not a psychiatrist (or a good speller).
Reply to comment
I can’t help but be reminded of early school. Everyone here probably had the same experience – read the entire book the first week, never open it again, waste the entire rest of the year because you did what you were supposedly supposed to be doing, and have the teachers angry that they couldn’t “teach” you anything. What fun!
Reply to comment
I do not think it is fair to say that Professor Prabhakar Ragde “warns against attempting to learn something new and unfamiliar on your own.” He is rather warning against following the common trend of students who learns things on their own only to get better marks in specific courses. I would be quite offended if someone told me to not enjoy the pleasure of finding things out, because I might get them wrong. I am sure your nearest research department would be too.
So as a self-learner, I agree that “learning cannot harm you.” Personally, I spend my time studying subjects that I find fascinating (e.g. programming language implementation and low-level bit twiddling). I don’t care if these things will be any useful to me. In other words, I learn to satisfy my own curiosity, not for necessity.
And oh, Python rocks!
Reply to comment
I see what you’re saying – and I’m the same way. Before I started my first year of college, when I got my books, I started going through the Visual Basic textbook, so I could get a little bit of a background. I’ll admit – even with the text book they were telling us to use, the course didn’t follow the same structure and didn’t teach the same things.
Had I relied solely on the book, sure, I would’ve known some Visual Basic, but I wouldn’t have learned what the course wanted me to. Even if it’s just to get better marks – the only reason most people want better marks is so the do better in the course. Usually, they chose the course, which means they have a reason for being in it. Ideally, one would learn just for the sake of learning, but preparing yourself for the course so you do better isn’t, IMO, a bad thing. Of course, if you rely on your self-taught skills, you could be in trouble.
Oh, Python rocks, rolls, flys and so much more. It’s quiet amazing how quick one becomes obsessed with it, like I’ve been a Python junkie for years rather than a few months
Reply to comment
In defense of learning yourself, if you end up with a really useless professor it may end up being extremely worthwhile to have learned some of the concepts yourself, or at least start to develop an understanding of some of them.
Good article by the way, very interesting.
Reply to comment
To distill out something i think you were hinting at here, Aziz, it may be helpful, if one is going to learn on their own, to dedicate that energy to learning a language their upcoming class(es) will not be using.
The underlying concepts will be useful, but it will still be necessary to learn the specifics in class.
Reply to comment
That wasn’t my main point, though it is a good one. I don’t think that there’s any adverse effect to learning a language before you’re supposed to be taught it in class – as long as you realise you might not already know it, and take the in-class lessons as seriously as your personal explorations.
Wtd’s idea is good though. If your beginning in computer programming, getting in touch with other languages helps define certain aspects of programming, and the specific features of a program. If you see how the same concept is implemented differently in separate languages, it can give you a better overall understanding.
Reply to comment
I would personally rather have more students trying to get ahead on the material in any of my courses. It leads to more interesting discussions in the classroom, and I think students get more out of a lecture if they know something about the lecture content.
My main reason for writing is that I was bothered by the comments regarding skipping classes, and the effect that “reading ahead” has on skipping classes.
I think that it is my responsibility as a teacher to add value to the course material in my lectures. If students are skipping because they don’t think it helps them learn the course material, then it is at least partially my failing as an instructor.
Don’t get me wrong. There are plenty of students who skip lectures who would really benefit from attending. There are lots of things that happen in lecture that will help you understand the instructor’s emphasis, and even if that information doesn’t help you get a higher mark, it will most likely save you time studying or doing assignments.
I’m also realistic. I can’t give a lecture that will appeal to all the different learning styles, backgrounds, and attention spans in the room, so I think there will always be some students that skip classes. My goal is to create lectures that are compelling enough to get students to come to class without any trickery (required attendance, pop quizzes, or the like).
So, I say go for it. Learn whatever language or concepts you find interesting, and then use your courses to fill in the gaps and relearn parts you didn’t quite get. And even when you are excelling in a course, go see your instructor when you have questions. It is always fun to talk with students who want to know more than what is in the course.
Python definitely rocks! (That’s why we teach it in our first-year courses at the University of Toronto.)
Reply to comment
You’d like me as one of your students, and I think I’d like you as a prof if you made your lessons interesting (and you teach Python, bonus).
Karen added another perspective to my point. I had many teachers that just didn’t provide enough content or new concepts for me to have a good classroom experience. It’s not entirely their fault, though, they had to make sure the rest of the class was keeping up. I mostly blame the school curriculm and the other students, but I do think that the teacher’s should’ve pressed a little harder from the beginning.
Reply to comment
I too was bothered by the ’skipping classes caused by reading ahead’ remark. Students should be encouraged to study at their own pace, and if that means they can read ahead then that is a good thing. It doesn’t and shouldn’t mean that they will be more inclined to skip classes. Any student motivated enough to spend their own time reading ahead is hardly likely to be inclined to skip classes, particularly if attendance in those classes resulted in consolidation of their learning.
Reply to comment
[...] recently came across a guest post on the CompSci.ca blog that discussed the merits of learning, or exposing yourself to material before it is studied in [...]
“Any student motivated enough to spend their own time reading ahead is hardly likely to be inclined to skip classes”
One would think so, but sometimes you get really lazy and would rather play some Counter-Strike. But that is the fault of slacker friends and slacker attitude, not the extra learning.
Reply to comment
I’ve been interested in this topic for years, both before I read psychology and social anthropology at University and afterwards.
My Grandfather was a very bright man but like many in his generation, left school at 14 or so. During his career in business, he learned about Sanskrit, Shakespeare, Kant and had an fascination with language and reason that left a great impression on me.
I’ve always believed in learning for its own sake, and most of my education reflects this.
When I went to University, i wanted to be a psychologist, so the course was obviously right for me. I think I would have studied psychology regardless however, since I’m passionate about understanding the human (and my own) condition.
The SEO company I work for is run by a friend from University and both of us now focus on pragmatic learning – things that will one day make us more money.
One day, when I’ve earned enough, I’ll use the time the money can represent to study things for the sake of it again.
Reply to comment