Bryson Payne wrote:Wayne,
I've got lots of friends who have used Scratch with their children, and they loved it as a start. When their kids wanted to be able to do more than the block-style languages allowed, that's when they made the switch to Python or JavaScript.
I chose to use Python from the start with my children (starting at 2 and 4, now 5 and 7) - they would sit in my lap and come up with fun changes to the short programs I'd write, I'd help them find the keys to type in a change or two, then we'd watch the result.
I believe Python's turtle graphics offer as visually rich an experience as Scratch or Blockly, and kids love seeing the results immediately.
Plus, I love a good-old-fashioned text-based adventure, like the MadLibs app we build at the end of chapter 1 .
I think the important thing is finding something your kids enjoy, whichever path you take, and spending time with them at the computer, together.
Best wishes, and happy coding!
Bryson
Concepts that you might want to look into include emergent design, clean code, re-factoring, design principles like SOLID, DRY and SLAP, continuous integration, automated testing, and Test-Driven Development. When done properly, all these contribute to agility and the team's ability to effectively evolve the software as you learn more about the system that you are developing.
The best for analysis and design is the last responsible moment. This is one of the ideas that really differentiates agile teams from more traditional ones, and it's central to having an agile mindset.
.....Agile teams take a similar latest responsible moment approach to planning, too, which lets then have much more simple and flexible plans.
Take for example the oft-cited example of Fitnesse: They chose to defer the decision on using a database. This turned out to be a good choice on that project because they were able to defer the decision *away* altogether.