www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - D Learning Resources

reply Morgan McDermott <morganmcdermott gmail.com> writes:
Repost from DSource <http://www.dsource.org/forums/viewtopic.php?p=12007>

As a newbie to this great language, one of my biggest challenges in 
learning D is finding learning resources. I've gotten to the point now 
where I generally use digitalmars.com/d/ as a starting point for any 
questions, and the NewsGroup has been a great help, but starting out 
with D seems much harder than it is with other languages due to the 
scarcity of tutorials (alongside the absence of books ^_~).

Without a C-like programming background, I'm sure that learning D would 
have been even harder, as most of the ''basics'' are described in terms 
of how they are implemented in D, obviously targeting a more experienced 
crowd. Besides the absence of learning-materials themselves, the other 
challenge that comes up is having a good starting point for finding 
other resources. Things are too spread out - it would be very hard for 
someone new to programming to quickly develop a good understanding of D 
from just one D-website. Here at DSource there is a large (in comparison 
with other sites) number of tutorials, but few feel very complete, and 
the target audience seems to change from tutorial to tutorial.

I would like to suggest that a project be undertaken by D-programmers to 
create a centralized tutorial and example resource. A good way to 
segment this out might be:

#####-----------------------------------------------#######

Basics: (covers basic types, operators, flow control, functions, arrays etc)
-Basic D for the programming novice
-From (your programming language here) to D.

Intermediate: (Mix of intermediate general-programming and D-specific 
topics)
-Intermediate Programming from a D perspective
-What's different in D and why (modules, scope etc)
-Good-Coding practices

Intermediate How-To for common tasks
-Database Interaction
-Compile a D Project
-Filesystem interaction

Advanced: (Smaller section, geared towards harnessing the "true" power of D)
-Advanced D Features
-Tips & Tricks
-Security

Links: (Other D-Programming References)
-NewsGroup
-Digitalmars

#####-----------------------------------------------#######

What's best about this project is that not only writers could contribute 
- that is, there are enough D-tutorials out there written by authors who 
would probably let you Borg-assimilate their tutorials into this 
reference that we already have a pretty good starting point.

I think that the best tutorials would function as a series up to a point 
- that is, readers are led through learning D in a coherent series of 
steps. Learning Intermediate Programming tutorials should expect 
knowledge covered in Basics, and the How-To section of tutorials should 
expect only the knowledge covered in the Learning Intermediate 
Programming tutorials.

With this in mind, I don't suggest working from the "Basics" upwards 
towards "Advanced" linearly; there are many people who would only like 
to write about certain aspects of D. However, letting people run around 
and write tutorials with no knowledge of the tutorials that lead up to 
theirs would result in a resource that lacks good cohesion, flow, and 
certainly would suffer from the absence of a tangible learning-path.

A solution to this would be to simply create an outline of what you want 
readers to know at which point. For instance, you might decide that once 
a reader reaches the "Intermediate Tutorials", you want them to know x, 
y, and z. Once a tutorial-writer figures out where his tutorial fits 
into the grand scheme, he would then be able to know exactly what the 
reader should already know, and target that audience specifically.

As a plan of action, I propose two distinct steps:
1) Have the D community produce an outline (like my ad-hoc one above), 
sectioned into distinct 'steps' of learning. Broad how-to areas might 
want to be separated into the knowledge required to use that how-to 
properly.
2) Get tutorials and articles flowing! Gather up willing writers from 
the D-community and start making the tutorials needed. Assimilate the 
spread out D-tutorials on the web (only for those authors who permit it, 
of course). This step is an ongoing process - as people write tutorials, 
they can add them into the structure where they fit, and eventually a 
fully fleshed-out, coherent, and easy to use D learning resource will 
result.
Nov 29 2006
next sibling parent Ary Manzana <ary esperanto.org.ar> writes:
Morgan McDermott escribió:
 Repost from DSource <http://www.dsource.org/forums/viewtopic.php?p=12007>
 
 As a newbie to this great language, one of my biggest challenges in 
 learning D is finding learning resources. I've gotten to the point now 
 where I generally use digitalmars.com/d/ as a starting point for any 
 questions, and the NewsGroup has been a great help, but starting out 
 with D seems much harder than it is with other languages due to the 
 scarcity of tutorials (alongside the absence of books ^_~).
 
 Without a C-like programming background, I'm sure that learning D would 
 have been even harder, as most of the ''basics'' are described in terms 
 of how they are implemented in D, obviously targeting a more experienced 
 crowd. Besides the absence of learning-materials themselves, the other 
 challenge that comes up is having a good starting point for finding 
 other resources. Things are too spread out - it would be very hard for 
 someone new to programming to quickly develop a good understanding of D 
 from just one D-website. Here at DSource there is a large (in comparison 
 with other sites) number of tutorials, but few feel very complete, and 
 the target audience seems to change from tutorial to tutorial.
 
 I would like to suggest that a project be undertaken by D-programmers to 
 create a centralized tutorial and example resource. A good way to 
 segment this out might be:
 
 #####-----------------------------------------------#######
 
 Basics: (covers basic types, operators, flow control, functions, arrays 
 etc)
 -Basic D for the programming novice
 -From (your programming language here) to D.
 
 Intermediate: (Mix of intermediate general-programming and D-specific 
 topics)
 -Intermediate Programming from a D perspective
 -What's different in D and why (modules, scope etc)
 -Good-Coding practices
 
 Intermediate How-To for common tasks
 -Database Interaction
 -Compile a D Project
 -Filesystem interaction
 
 Advanced: (Smaller section, geared towards harnessing the "true" power 
 of D)
 -Advanced D Features
 -Tips & Tricks
 -Security
 
 Links: (Other D-Programming References)
 -NewsGroup
 -Digitalmars
 
 #####-----------------------------------------------#######
 
 What's best about this project is that not only writers could contribute 
 - that is, there are enough D-tutorials out there written by authors who 
 would probably let you Borg-assimilate their tutorials into this 
 reference that we already have a pretty good starting point.
 
 I think that the best tutorials would function as a series up to a point 
 - that is, readers are led through learning D in a coherent series of 
 steps. Learning Intermediate Programming tutorials should expect 
 knowledge covered in Basics, and the How-To section of tutorials should 
 expect only the knowledge covered in the Learning Intermediate 
 Programming tutorials.
 
 With this in mind, I don't suggest working from the "Basics" upwards 
 towards "Advanced" linearly; there are many people who would only like 
 to write about certain aspects of D. However, letting people run around 
 and write tutorials with no knowledge of the tutorials that lead up to 
 theirs would result in a resource that lacks good cohesion, flow, and 
 certainly would suffer from the absence of a tangible learning-path.
 
 A solution to this would be to simply create an outline of what you want 
 readers to know at which point. For instance, you might decide that once 
 a reader reaches the "Intermediate Tutorials", you want them to know x, 
 y, and z. Once a tutorial-writer figures out where his tutorial fits 
 into the grand scheme, he would then be able to know exactly what the 
 reader should already know, and target that audience specifically.
 
 As a plan of action, I propose two distinct steps:
 1) Have the D community produce an outline (like my ad-hoc one above), 
 sectioned into distinct 'steps' of learning. Broad how-to areas might 
 want to be separated into the knowledge required to use that how-to 
 properly.
 2) Get tutorials and articles flowing! Gather up willing writers from 
 the D-community and start making the tutorials needed. Assimilate the 
 spread out D-tutorials on the web (only for those authors who permit it, 
 of course). This step is an ongoing process - as people write tutorials, 
 they can add them into the structure where they fit, and eventually a 
 fully fleshed-out, coherent, and easy to use D learning resource will 
 result.

Great idea! In almost every programming language page there is a tutorial with a fantastic table of contents. Take for example Python. I know nothing about Pyhton, but I guess I'll be able to learn it reading this: http://docs.python.org/tut/tut.html Maybe we can make that kind of tutorial using a (maybe private) Wiki, until everything is done, and then lock the contents.
Nov 29 2006
prev sibling next sibling parent reply Wolven <ra wolven.net> writes:
Great suggestion Morgan!

As a "non-C" programmer I would LOVE to have some tutorials starting with the
BASICS (including the basic concepts) of D.  Then being able to progress to the
intermediate and advanced stages with explanations of the concepts and concrete
REAL WORLD example code would be nice.  ("Hello World" as a programming example
is
unbelievably lame.  In fact, it's worse than lame, it's completely meaningless.)

As Morgan said, much of the information available seems to assume that the
reader
is already familiar with C++ concepts AND IS a long time C\C++ programmer that
can
readily recognize the shorthand C like syntax...  which I don't.  Obviously that
assumption perfectly fits many of the people posting on here, but it doesn't do
much for winning converts from other programming backgrounds.  Then again, maybe
the D developers aren't interested in attracting newbie or non C programmers. 
But
I suspect it's more a matter of time and priorities.  That, and the simple fact
that most programmers are the worlds WORST teachers.  They simply don't know how
to communicate with\translate for mere mortals...   :)
Nov 29 2006
parent Mike Parker <aldacron71 yahoo.com> writes:
Wolven wrote:
 
 As Morgan said, much of the information available seems to assume that the
reader
 is already familiar with C++ concepts AND IS a long time C\C++ programmer that
can
 readily recognize the shorthand C like syntax...  which I don't.  Obviously
that
 assumption perfectly fits many of the people posting on here, but it doesn't do
 much for winning converts from other programming backgrounds.  Then again,
maybe
 the D developers aren't interested in attracting newbie or non C programmers. 
But
 I suspect it's more a matter of time and priorities.  That, and the simple fact
 that most programmers are the worlds WORST teachers.  They simply don't know
how
 to communicate with\translate for mere mortals...   :)

D has been in 'development mode' for a few years now. Of course D developers are interested in *one day* attracting newbies and non-C programmers, but I think there hasn't been a focus on that yet because D hasn't really been newbie-friendly. By that I mean that the spec has been in fluctuation, plus it requires use of command line tools and debugging techniques that might not be immediately obvious to newbies. I don't think it's reasonable to expect someone with little or no experience to be able to come in and learn a developing language like D, nor do I think it's reasonable to expect early adopters to invest the time and effort to create the amount of documentation that would be required to teach such users. Early adopters of any tech are nearly always those who have related experience, otherwise the learning curve is too steep. That said, there have been people with little experience who were able to pick up D quite readily through perseverence and sheer force of will. And if you look at the documentation for the projects at DSource, you will find that some of it was written with the newbie in mind. Still, the focus of most of the existing D tutorials and documentation has assumed readers have some experience because their target audience is early adopters. The goal has been to help other early adopters get up to speed quickly and focus on building the tools and libraries the community needs to move forward. The DMD 1.0 release will shift that focus from the early adopters to the world-at-large. So you can't really fault the community for not being newbie-friendly yet or for making certain assumptions about current D users. Now that 1.0 has a definite release date, there will certainly be more effort to target less experienced users, even non-programmers. I have plans toward that end myself on my DBlog. I'm involved in two other library projects that take priority, though, with little enough time to work on those as it is. I'm sure most of the active D community is in a similar boat.
Nov 30 2006
prev sibling next sibling parent Tyler Knott <tywebmail mailcity.com> writes:
The tutorial section at DSource.org (which currently seems to be down) 
already works somewhat like this.  It's a Wiki so anyone can edit and 
add new tutorials (for easy collaboration) and they are 
double-categorized (by difficulty and language feature) so it's easy for 
to find relevant tutorials.
Nov 29 2006
prev sibling next sibling parent reply Lutger <lutger.blijdestijn gmail.com> writes:
Morgan McDermott wrote:
 Repost from DSource <http://www.dsource.org/forums/viewtopic.php?p=12007>
 
 As a newbie to this great language, one of my biggest challenges in 
 learning D is finding learning resources. I've gotten to the point now 
 where I generally use digitalmars.com/d/ as a starting point for any 
 questions, and the NewsGroup has been a great help, but starting out 
 with D seems much harder than it is with other languages due to the 
 scarcity of tutorials (alongside the absence of books ^_~).

Hi, have you found the wikibook 'a beginner's guide to D'? Here is the link: http://en.wikibooks.org/wiki/A_Beginner%27s_Guide_to_D Perhaps this is the kind of project that you have in mind.
Nov 30 2006
parent reply Morgan McDermott <morganmcdermott gmail.com> writes:
Lutger wrote:
 Morgan McDermott wrote:
 Repost from DSource <http://www.dsource.org/forums/viewtopic.php?p=12007>

 As a newbie to this great language, one of my biggest challenges in 
 learning D is finding learning resources. I've gotten to the point now 
 where I generally use digitalmars.com/d/ as a starting point for any 
 questions, and the NewsGroup has been a great help, but starting out 
 with D seems much harder than it is with other languages due to the 
 scarcity of tutorials (alongside the absence of books ^_~).

Hi, have you found the wikibook 'a beginner's guide to D'? Here is the link: http://en.wikibooks.org/wiki/A_Beginner%27s_Guide_to_D Perhaps this is the kind of project that you have in mind.

I just stumbled upon this gem a few nights ago. My goal is to offer a linear learning path similar to what a book would offer, combined with the flexibility of a free-form learning resource. That is - guide people along the path of D-Basics or Intermediate-Programming in a straight-forward manner, but also offer how-to and syntax resources that function in the traditional free-form "web navigation" style. Thanks for the link =).
Nov 30 2006
parent Jesse Phillips <Jesse.K.Phillips+Digitalmars gmail.com> writes:
I think the book might be better then categorizing it in basic, 
intermediate, advanced. The reason I state this is given a new 
programmer. They will want to start from the beginning (basics), until 
they reach the level they feel they can stop. Now take a program from 
another language, they have some skill level, may know a lot about their 
native language (where they're coming from) or not a whole lot. When 
they look at the book they'll be looking for the headings that indicate 
D specific ideas, and avoid sections with the concepts they already know.

Your proposal sounds like it would be a great change for the dsource 
tutorial section.

Morgan McDermott wrote:
 Lutger wrote:
 Morgan McDermott wrote:
 Repost from DSource 
 <http://www.dsource.org/forums/viewtopic.php?p=12007>

 As a newbie to this great language, one of my biggest challenges in 
 learning D is finding learning resources. I've gotten to the point 
 now where I generally use digitalmars.com/d/ as a starting point for 
 any questions, and the NewsGroup has been a great help, but starting 
 out with D seems much harder than it is with other languages due to 
 the scarcity of tutorials (alongside the absence of books ^_~).

Hi, have you found the wikibook 'a beginner's guide to D'? Here is the link: http://en.wikibooks.org/wiki/A_Beginner%27s_Guide_to_D Perhaps this is the kind of project that you have in mind.

I just stumbled upon this gem a few nights ago. My goal is to offer a linear learning path similar to what a book would offer, combined with the flexibility of a free-form learning resource. That is - guide people along the path of D-Basics or Intermediate-Programming in a straight-forward manner, but also offer how-to and syntax resources that function in the traditional free-form "web navigation" style. Thanks for the link =).

Nov 30 2006
prev sibling next sibling parent reply Morgan McDermott <morganmcdermott gmail.com> writes:
  I'm always startled by the overwhelming response from the NewsGroup :).

Ary:
  I've now received multiple comments stating how the Python Docs are 
fantastic, so I'm going to have to spend some time figuring out why and 
how they're so wonderful. I'm not so big a fan of locking the contents 
after everything is complete, however; versioning might be nice, but 
hopefully this tutorial project will keep on growing at a steady rate, 
covering the new, popular API's, and not just the core-features of D. 
Maybe I'm missing something - are you suggesting that we lock it for 
security purposes, or consistency, or... something else?

  Thanks for the link and idea.

Wolven:
  I have a few C books targeting new programmers, and it seems that a 
lot of what is taught there would need to be taught in order to 
understand D programming as well. I assume that a lot of thought and 
effort went into the sequencing and overall structure of these books, so 
they might provide a good starting point for the Basics arena (rewritten 
and condensed, of course).

Tyler:
  Thank you for the information about the DSource.org Tutorials project. 
Brad has suggested that this project be a reorganization of the existing 
Tutorials project, and, if the current managers are interested, I'd be 
excited to have such a nice starting point.

Mike:
  Thank you very much for your insight into why D hasn't been presented 
in a "Newbie-Friendly" way to the world. It seems like you have a great 
amount of knowledge about the D Community and an instinctive command of 
the English language... I would certainly like to like to incorporate 
any D tutorials that you might make into the project, if you're at all 
interested =).
Nov 30 2006
next sibling parent Pierre Rouleau <prouleau impathnetworks.com> writes:
Morgan McDermott wrote:
  I'm always startled by the overwhelming response from the NewsGroup :).
 
 Ary:
  I've now received multiple comments stating how the Python Docs are 
 fantastic, so I'm going to have to spend some time figuring out why and 
 how they're so wonderful. 

Might I suggest the following: Python documentation: - is updated along with each version of the language: the documentation is part of the release, just as Python is. - is versionned: each version of Python has it's own set of documentation, the old ones are still accessible. - is centralized. Although you can find lots of tutorials and explanations all over the web, you can find precice, concice description of everything in the Python web site. - Each document gets contribution from the entire Python community but each document has an *editor*. Fred L. Drake and AMK have been doing a tremendous jobs (and they *are* programmers). I agree with people that state that Python's documentation is great. In fact the entire Python project is very well managed. I also like the concept of PEP (Python Enhacement Proposals) that are similar to RFCs. I understand that D is still under development and I'm sure things will continue to evolve for the best.
Nov 30 2006
prev sibling parent Daniel Keep <daniel.keep+lists gmail.com> writes:
One thing I just thought of that you should think about looking at:

   Dive into Python: http://diveintopython.org/

If it wasn't for that book, I would still think Python was a silly 
little language with no practical use.  I went through the official 
Python docs *three times*.  It wasn't until I read that book that it 
finally clicked.

I've wanted to write something similar for D a few times, but don't 
really know where to start or what to write.

	-- Daniel
Nov 30 2006
prev sibling parent Morgan McDermott <morganmcdermott gmail.com> writes:
Jesse:
	I completely agree that there has to be some way for already 
experienced programmers to easily learn D without sifting through all of 
the programming basics. How they should be able to do this I'm not sure, 
  but it is a need we have to address.

	Thanks a lot for the reminder =).

Daniel:
	This is the perfect type of suggestion to set us out on the right foot 
- if we can look at what works and reproduce it, then it will save us 
time and agony and will result in a better resource.

	Thanks for the link!
Dec 01 2006