www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Online D course on coursera/udacity/etc?

reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
Hello,


Online courses are becoming quite popular. A D course on one of the 
up-and-coming online course sites would be great. If anyone would want 
to do such a course (e.g. derived from TDPL), chime in here with ideas.


Thanks,

Andrei
Mar 18 2013
next sibling parent Samuel Lampa <samuel.lampa gmail.com> writes:
On 03/19/2013 02:52 AM, Andrei Alexandrescu wrote:
 Online courses are becoming quite popular. A D course on one of the 
 up-and-coming online course sites would be great. If anyone would want 
 to do such a course (e.g. derived from TDPL), chime in here with ideas.
Ah, Yes, would be really useful to get us newbies going! :) // Samuel
Mar 19 2013
prev sibling next sibling parent reply "Adam Wilson" <flyboynw gmail.com> writes:
On Mon, 18 Mar 2013 18:52:42 -0700, Andrei Alexandrescu  
<SeeWebsiteForEmail erdani.org> wrote:

 Hello,


 Online courses are becoming quite popular. A D course on one of the  
 up-and-coming online course sites would be great. If anyone would want  
 to do such a course (e.g. derived from TDPL), chime in here with ideas.


 Thanks,

 Andrei
We looked into doing something like this for one of our products. And got a few interesting takeaways from it. First off, doing anything of the quality that a site like Coursera is likely to accept requires a pretty substantial up-front investment. You need access to a soundstage, HD camera, audio mixing gear, and an assortment of lights for the "talking head" portions of the videos that are usually present. Even if you choose to eschew the talking head portions completely you still need access to a sound-isolated booth and audio mixing gear. This wasn't a major problem for us (you can rent these things just about anywhere in North America/Europe), so it wasn't the reason we decided not to. I'd also point out that this really requires a trained voice-actor with knowledge of how to modulate their voice to sound correct in audio. Voice-Over work is most definitely NOT something just anyone can do. Unless the community has someone with the needed skills in this area, you'd be well advised to hire it out for a few K$. Having a good voice will make ALL the difference in whether or not people can even stand to listen through a single video segment. We (Prospective Software) happen to have someone with the required skills on staff already, so that wasn't the reason we decided against either. The reason we decided not to essentially boils down to the inherent properties of video. First, video is linear. And second, video is not searchable. Given that programming is both highly non-linear and highly context-sensitive, these two properties make video a less than ideal method for teaching languages. That's not to say it can't be done, our order to better understand what he is selling (and just what the heck those programmers were saying!). However, the content was very basic, and was not really meant as anything other than a jumping off point for experimentation. And even to cover the basics took something like 40hrs of video. It took the marketing guy 40 hours to complete roughly 8 hours of video due to the constant rewinding and reloading of other videos he needed to remind himself. Now the marketing guy has no programming background, but that said, languages are contextual, and you always have to rewind to remember what the the presenter is referencing from two videos ago. There was also another reason. We couldn't find a single company in our space (broadly defined as programmer tools) that used videos as their primary teaching method. If they had any videos at all, they tended to be feature-specific usage demonstrations. What were the companies we looked at pushing as the best way to learn their software? Documentation. Which I define as searchable documents that encourage hands-on experimentation. Also of note is that their documentation tends to be well organized, easily searchable, includes high amounts of detail, and most importantly, is well written. Given the costs associated with video production, and the inherent difficulties of teaching programming via video. I would say that D would get a MUCH better ROI on improving the available documentation. Consider for a moment that video can only answer the questions that the scripter forsees, how then is the new users supposed to continue learning beyond what the videos teach? There is yet another factor to be considered. Producing video is a very laborious process. And once it is produced, it cannot be changed without being re-shot and reedited. Given the high rate-of-change that D has been experiencing, the chances of the video become obsolete quickly are very high, even when constrained to the basics. Essentially, every bug fix becomes another potential video re-shot. This was another factor we faced since we are planning for (roughly) quarterly feature releases. My personal opinion is that D is nowhere near ready for videos. The documentation itself is very thin and what there is tends to be either out-of-date, poorly-written, light on details, or some combination thereof. Without searchable docs to back-up what it shown in the videos, there is a good chance that you'll just confuse people. However, I am sure that their are counter arguments, and I am not intending to disuade, only comment on our experiences. We have another product in development for a completely different market (Aftermarket Automotive CRM) that we intend on developing over 100 hours of video training for, because it happens to work well in that market. -- Adam Wilson IRC: LightBender Project Coordinator The Horizon Project http://www.thehorizonproject.org/
Mar 19 2013
parent reply "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
On Tue, Mar 19, 2013 at 12:15:02PM -0700, Adam Wilson wrote:
 On Mon, 18 Mar 2013 18:52:42 -0700, Andrei Alexandrescu
 <SeeWebsiteForEmail erdani.org> wrote:
[...]
Online courses are becoming quite popular. A D course on one of
the up-and-coming online course sites would be great. If anyone
would want to do such a course (e.g. derived from TDPL), chime in
here with ideas.
[...]
 We looked into doing something like this for one of our products.
 And got a few interesting takeaways from it.
 First off, doing anything of the quality that a site like Coursera
 is likely to accept requires a pretty substantial up-front
 investment. You need access to a soundstage, HD camera, audio mixing
 gear, and an assortment of lights for the "talking head" portions of
 the videos that are usually present. Even if you choose to eschew
 the talking head portions completely you still need access to a
 sound-isolated booth and audio mixing gear. This wasn't a major
 problem for us (you can rent these things just about anywhere in
 North America/Europe), so it wasn't the reason we decided not to.
I agree that doing a full-scale online video course for D is probably not a good idea at the moment. However, that does not preclude having a text-based course, which is much easier to produce and keep up-to-date. Although video is nice to have, I don't see it as essential. In fact, I tend to avoid video courses, because (1) it takes a lot of time to watch the videos (reading is much more efficient); (2) it's difficult to go through a video piecemeal (you lose the train of thought of the speaker), whereas you can pause while reading whenever you like and resume later; (3) reading permits highly-nonlinear consumption of materials: you can put the current page on hold, click on a link to more details about something you didn't quite understand, read that first, then come back, etc.. (4) Written material is searchable. I contend that a text-based course is *not* the same as documentation. Documentation is intended for reference: to look up something when you already know what you're looking for. A *course*, OTOH, is for learning: you need some guidance to grasp the basic principles and concepts before the documentation is useful to you. Sorta like a tutorial, but more thorough, and with interspersed activities like quizzes, small programming projects, etc.. Depending on how you structure it, you can do a lot without needing to shoot/maintain videos. T -- Life is unfair. Ask too much from it, and it may decide you don't deserve what you have now either.
Mar 19 2013
next sibling parent "Adam Wilson" <flyboynw gmail.com> writes:
On Tue, 19 Mar 2013 12:40:55 -0700, H. S. Teoh <hsteoh quickfur.ath.cx>  
wrote:

 On Tue, Mar 19, 2013 at 12:15:02PM -0700, Adam Wilson wrote:
 On Mon, 18 Mar 2013 18:52:42 -0700, Andrei Alexandrescu
 <SeeWebsiteForEmail erdani.org> wrote:
[...]
Online courses are becoming quite popular. A D course on one of
the up-and-coming online course sites would be great. If anyone
would want to do such a course (e.g. derived from TDPL), chime in
here with ideas.
[...]
 We looked into doing something like this for one of our products.
 And got a few interesting takeaways from it.
 First off, doing anything of the quality that a site like Coursera
 is likely to accept requires a pretty substantial up-front
 investment. You need access to a soundstage, HD camera, audio mixing
 gear, and an assortment of lights for the "talking head" portions of
 the videos that are usually present. Even if you choose to eschew
 the talking head portions completely you still need access to a
 sound-isolated booth and audio mixing gear. This wasn't a major
 problem for us (you can rent these things just about anywhere in
 North America/Europe), so it wasn't the reason we decided not to.
I agree that doing a full-scale online video course for D is probably not a good idea at the moment. However, that does not preclude having a text-based course, which is much easier to produce and keep up-to-date. Although video is nice to have, I don't see it as essential. In fact, I tend to avoid video courses, because (1) it takes a lot of time to watch the videos (reading is much more efficient); (2) it's difficult to go through a video piecemeal (you lose the train of thought of the speaker), whereas you can pause while reading whenever you like and resume later; (3) reading permits highly-nonlinear consumption of materials: you can put the current page on hold, click on a link to more details about something you didn't quite understand, read that first, then come back, etc.. (4) Written material is searchable. I contend that a text-based course is *not* the same as documentation. Documentation is intended for reference: to look up something when you already know what you're looking for. A *course*, OTOH, is for learning: you need some guidance to grasp the basic principles and concepts before the documentation is useful to you. Sorta like a tutorial, but more thorough, and with interspersed activities like quizzes, small programming projects, etc.. Depending on how you structure it, you can do a lot without needing to shoot/maintain videos. T
Agreed. I was using Documentation in a broader than usual sense here, but that is the general idea that I was trying to get across. We need to work on the written stuff before we considering videos as that's where the payoff is. -- Adam Wilson IRC: LightBender Project Coordinator The Horizon Project http://www.thehorizonproject.org/
Mar 19 2013
prev sibling parent Jacob Carlborg <doob me.com> writes:
On 2013-03-19 20:40, H. S. Teoh wrote:

 I agree that doing a full-scale online video course for D is probably
 not a good idea at the moment.

 However, that does not preclude having a text-based course, which is
 much easier to produce and keep up-to-date. Although video is nice to
 have, I don't see it as essential. In fact, I tend to avoid video
 courses, because (1) it takes a lot of time to watch the videos (reading
 is much more efficient); (2) it's difficult to go through a video
 piecemeal (you lose the train of thought of the speaker), whereas you
 can pause while reading whenever you like and resume later; (3) reading
 permits highly-nonlinear consumption of materials: you can put the
 current page on hold, click on a link to more details about something
 you didn't quite understand, read that first, then come back, etc.. (4)
 Written material is searchable.

 I contend that a text-based course is *not* the same as documentation.
 Documentation is intended for reference: to look up something when you
 already know what you're looking for. A *course*, OTOH, is for learning:
 you need some guidance to grasp the basic principles and concepts before
 the documentation is useful to you. Sorta like a tutorial, but more
 thorough, and with interspersed activities like quizzes, small
 programming projects, etc..

 Depending on how you structure it, you can do a lot without needing to
 shoot/maintain videos.
I really like Railscasts in the Ruby on Rails world. But these are screen casts with tips and tricks for when you already know Rails. These casts are around 10-15 min so the length is never a problem. It's a great way to find out new things/plugins in the Rails world. -- /Jacob Carlborg
Mar 20 2013
prev sibling next sibling parent "Chris Cain" <clcain uncg.edu> writes:
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!
Mar 20 2013
prev sibling parent reply "Alan" <geouke gmail.com> writes:
On Tuesday, 19 March 2013 at 01:52:35 UTC, Andrei Alexandrescu 
wrote:
 Hello,


 Online courses are becoming quite popular. A D course on one of 
 the up-and-coming online course sites would be great. If anyone 
 would want to do such a course (e.g. derived from TDPL), chime 
 in here with ideas.


 Thanks,

 Andrei
I personally do not learn very well from video courses (which is not true of everyone). I will say generally though that I would agree with the movement to provide more D tutorials with examples. I really wanted to use GtkD for example (I know it is an extension for the language, not part of it), but the only Python, etc. For someone like me who does not have much experience writing a GUI, learning from the core documentation is like feeling around in the dark. Another example would be a tutorial on using D for numerical or scientific computing. Fortran, Python, C, and C++ all have great tutorials with examples of elegant numerical code written by talented programmers. I primarily do numerical work in Fortran and Python. I do not use C because it can be overly complicated to do certain things and I do not use C++ because writing in it feels like walking through a messy room and tripping over misplaced objects. I appreciate that D seems to solve both of these issues. I would be happy to generate some numerical examples in D as best I could if someone out there would use them. My suggestion would be more text-tutorials with plenty of examples aimed towards niche programmers. Alan
Mar 20 2013
parent Jacob Carlborg <doob me.com> writes:
On 2013-03-21 02:52, Alan wrote:

 I really wanted to use GtkD for example (I know it is an extension for
 the language, not part of it), but the only tutorials I could find with

 does not have much experience writing a GUI, learning from the core
 documentation is like feeling around in the dark.
I can understand that. In DWT you need to create the event loop yourself. How should a user know that by only reading the API reference. -- /Jacob Carlborg
Mar 21 2013