Online D course on coursera/udacity/etc?
Chris Cain
clcain at uncg.edu
Wed Mar 20 08:40:23 PDT 2013
The format that I found the most powerful to learn a new language
or concept goes like this:
1. Gather a set of problems
2. Introduce a few new concepts while considering the effect of
those concepts on your problems
3. Use new concepts to solve that set of problems
4. Iteratively improve the usage of those concepts in each
problem until "perfection" is reached. Essentially, revisit a
"sufficiently difficult" problem (trivial problems are boring to
revisit) several times doing it better (by some metric) each time.
More recently for me, 1 seems less necessary as I've learned over
time to make the connections needed for 2 without specific
problems in mind. However, for someone learning this stuff for
the first time, having a well chosen set of problems (1) is
_exceptionally_ valuable.
Now, these steps might seem "obvious", but I've found that the
majority of "bad" videos or classes that claim to teach something
in Computer Science fail to follow them in some way. Often I find
courses withhold the problems until after you've gone through the
material OR give you too many problems to consider at once which
doesn't allow you to really consider the impact of your approach
to each of the problems. Generally ~3 non-trivial problems is the
best number to consider at any one point in time.
If a D language course were created, I think the absolute BEST
way to gain some viewership is to teach _problem solving_ (which
is a major niche for beginner/intermediate students of
programming and has immense value for even expert programmers)
using D. Look up some of the many programming problems in various
programming competitions and teach people how to solve them and
how the thinking process goes for them, and teach them the best
way to utilize D for the task.
This is how I learned most of the programming languages I know
and it allows me to get up to speed on the various idioms of the
languages and how everything helps (or hinders) in non-trivial
situations. It'd be even better if the course taught you the
meta-learning skills needed to replicate the experience of the
course for other languages (though that might be exceptionally
difficult to teach in a single course).
For the format of the course:
Provide an introduction to the course, how it will work, etc.
Show the student how to set up the programming environment
necessary to complete the course (including teaching a proper
workflow for Programming in D which should show how to use the
docs effectively). Personally, I love using Sublime Text 2 for
programming, but Notepad++ is free and it treated me very well
for a long time while learning D for the first time.
Build each section a course somewhat like this:
1. Provide 3 non-trivial problems up front and give input/output
combinations (for D, you could use a unittest block that runs
your solution on a few inputs and verifies they return correct
information)
2. Give ~1-1.5 hours of short video segments (~10-15 minutes
each) teaching problem solving skills necessary to solve the
problems while showing off the syntax, semantics, idioms, and
standard library of D. Encourage the student to either think
through or work through the problem set themselves as they go
through the videos, but do not provide the actual solution to the
problems during the videos.
3. Have the students submit their homework problems and have them
run on a variety of inputs that aren't necessarily known by the
student.
4. Allow the student unlimited resubmissions of the homework
problems that test the code for brevity (don't include short
identifiers, though) and speed. Maybe put up a scoreboard that
allows everyone to see how their code ranks. Maybe give a tiny
bit of extra credit to the best 20%. It'd be really nice if,
after the course ends, there was a way to download and view the
best submissions for each problem.
For the final problem solving section, provide a series of
challenging problems that use techniques learned in the previous
sections. Amped up varations of previous problems might be
acceptable, but something new and interesting would be better
since many people might have redone the previous problems enough
times to be bored by a simple "variation".
As a bonus, link to a few good tutorials on git and good git
practices. Then show the workflow needed to contribute to DMD
and/or Phobos. Maybe we can interest enough students to help fix
more bugs and get even more pull requests this way!
More information about the Digitalmars-d
mailing list