The problem it is combating is that it’s very hard to learn things by RTFM. You need to be pretty high on the Autism Spectrum to be able to assimilate C++ from the spec (“I know Kung Fu”… Neo). For the rest of us it’s a case of active repetition in order to reinforce learning – you need to be active for the learning to take place. You need to try something out and get a result and you wlil naturally learn from the experience. I remember learning French vocab at school by writing words in one column and the translation in a second column and covering one column with a piece of paper which I would move down one word at the time to stimulate recall. Horrible memory, but it worked!
If you read the small print on that site, the actual engine is available on GitHub (https://github.com/knatten/cppquiz). It may be practical to clone it and fill it up with Julia questions and have JuliaQuiz.org. And then anyone who thinks up a neat question could just muck in on GitHub.
I don’t mind doing it, although it might be better if some official Julia person registered juliaquiz.org.
However I’m not sure Julia would get as much benefit a C++. C++ contains a zillion vexing edge cases and a lot of unintuitive behaviour – most of the questions on that site have surprising answers. Modern languages have attempted to reduce the amount of surprise.
What think ye?
(*) Note: If you make three attempts at an answer it lets you view the solution, which contains a full explanation including relevant parts of the spec.
I am not a C++ wizard, but the five random examples I looked at all seemed to be asking about corner cases. If that’s the idea, I would prefer if Julia had as few weird corner cases as possible, instead of providing a quiz that drills you about them.
I may be weird, but I like learning from the manual. I am rereading the whole thing occasionally: first, because it keeps evolving, second, because things that I glossed over before click into place. I also like reading other people’s code, occasionally working through whole libraries. I learned a lot that way.
IMO Julia as a language has relatively few surprises, once you get types. The hard thing for me is making use of existing constructs in an idiomatic way when designing complex things.
That kind of reinforcement doesn’t pass the test of time. Especially for programmers, our minds are trained to place repetitions inside loops and change activity as soon as possible. In the era of information, memorizing things isn’t special anymore. Knowing where to find something online is more important. So the manual isn’t something to memorize, but something to navigate, using it more for reference than for actual learning.
That’s the key, but there are many ways to be active. Cloning cppquiz is the easy part. The hard part is to fill it with quality questions. When Discourse manages to aggregate enough such questions and if they don’t get lost among the rest of the posts (e.g. with some tag), we can think again about what is the best way for someone to get active with them, so as to increase their value. Meanwhile, a great way for active learning is to try writing some documentation in own words but to be read by other users, and post it here in Discourse for peer review.
@akis French vocab was a bad choice of example. Sorry, yes I am not talking about learning by rote, parrot fashion. I’m talking about assimilating new structure into the brain. And we do that by operating in this new environment. I’m currently reading Sutton’s book on Reinforcement Learning which motivated me to post.
I work as a maths tutor and the most effective way I have found is to work primarily with questions. Pose a question. Student thinking time. Hint. More thinking time. Then when the answer comes the brain is already in the right state to receive it.
The hard part is to fill it with quality questions. When Discourse manages to aggregate enough such questions and if they don’t get lost among the rest of the posts (e.g. with some tag), we can think again about what is the best way for someone to get active with them, so as to increase their value.
This is exactly the situation I’m concerned about. If there is no structure for such questions they will get lost over time.
Conversely if there is a suitable structure, it may well actively encourage contributions – and over time a valuable resource will emerge.
I totally agree – first collect questions then figure out what to do with them. But how to go about doing so?
How about a dedicated thread here?
Or maybe Stack Overflow? i.e. The “question” is: List questions/tasks which are good for learning. And then people can supply answers. Popular ones will bubble to the top.
Or just an ‘educational resource’ or ‘teaching’ or ‘example’ or ‘exercise’ tag…
Ordinarily I can assimilate programming constructs kind of “monkey see monkey do” style. But sometimes it’s just too much of a jump. I require artificial bite-size tasks of increasing complexity that familiarise me with the new concepts up to a point where I can apply them in a real situation.
I encountered this in Signals Processing and C++ (especially template metaprogramming) and I’m encountering it again in a little in Julia metaprogramming (although I’ve just found the wikibook to be a brilliant resource.
I do a fair amount of tutoring, basically training brains to assimilate new structure & ways of doing things. The key is usually to present a structured set of learning tasks of increasing complexity/difficulty.
I’m starting to think something c++quiz style might not be best (it really is a perfect fit for C++ with its countless edge cases).
How about something a little like https://projecteuler.net/ – only more consciously geared towards covering the various aspects of the language evenly (it’s quite possible to get through Project Euler only using 10% of what Python has to offer).
I’m surprised I’ve never seen a book that teaches in the way I would hope to learn. Maybe time to start knocking out a few pages on my wiki…
There are some nice questions here that would be useful to answer for Julia, e.g. CppQuiz.org - Question #25 is an example of a corner case that will happen in any language, and how to deal with it will depend on the choices made in the design of the language. I didn’t know the answer for C++, and I don’t know it for Julia