Programming

Programmers instruct computers to perform tasks and create games, software, and websites. They can even control physical objects like cameras and robots through harnessing the power of code.

> many of the core challenges in the quest to harness artificial intelligence to automate computer programming, but entirely miss the point of why we need to learn to code. As Cynthia [Solomon] remarked more than 30 years ago, "debugging is the great educational opportunity of the 21st Century." Marcus and Davis do observe that "a good programmer understands, deeply, a problem that needs to be solved, and then creates an architecture for solving a problem that’s never been solved before." The true value of learning to code is that it engages children in the rigors and discipline of problem-solving. For must learners, computation is a "thing to think with", not an end in and of itself. --Walter Bender IAEP May 2016 commenting on [|New Yorker article]

There are a number of web sites and applications to help you learn to program in an interesting and fun-filled environment. Mobile apps
 * [|Scratch] - program your own interactive stories, games, and animations — and share your creations with others in the online community. Learn to think creatively, reason systematically, and work collaboratively — essential skills for life in the 21st century.
 * [|Kodable] (iPad app) - Programming fundamentals and logic lessons for kids. The fuzz family crash landed on Smeeborg and they need your help navigating the Technomazes. Use drag and drop commands to direct your fuzz through the colorful lighted maze. Don’t get lost, or your fuzz might not be too happy.
 * [|Kodable] - (about $7, basic activities with free download ) - basic skills needed for learning to program
 * [|Preparing Kids to Code - Apps for all Ages] - several apps that are great introductions to programming - varying difficulty, some free.
 * [|Kodu Game Lab] - create games on the PC and XBox via a simple visual programming language. Kodu can be used to teach creativity, problem solving, storytelling, as well as programming. Anyone can use Kodu to make a game with no design or programming skills.

Introductory programming uses logic and problem solving skills as well as critical thinking skills. All it takes is a bit of practice. The key components to any program are:
 * Sequence of events
 * Conditional statements, ex: “If this, then that will happen.”

Algorithms. Programs. Functions. Input. Output. Scope. Feedback loop. Flow chart. Actions. Decisions.

Program. Language. Programming / writing. Testing. Syntax. Errors. Documentation. Comments. Data. Program structures. Variables. Built-in functions. Arguments.

Logic. Relational operators. And. Or. Not. Conditional statements. If then else. Loops. For. While. Initialize.


 * Loops - repeating set of commands up to a certain number of times in order to complete the maze.

[|Computer science] is fun and interesting
 * block languages like Scratch, Kodu and Alice (see [|block programming languages]
 * turtle graphics - LOGO or TouchDevelop or Small Basic
 * languages like Visual Basic that are more friendly than the semi colon and curly brace languages
 * get creative, show friends
 * applications that change the world

No introduction to programming would be complete without some tips
 * [|5 mistakes of student developers] - talking about them and learning to avoid them is part of building good habits and critical thinking

Meet a Programmer
 * Ada King, Countess of Lovelace - a 19th-century mathematician is considered by many to be the first computer programmer

[|Project CS Girls] organization aimed to cultivate a love for technology and computer science in girls and encourage them to pursue their interests and careers in these fields. We believe that nurturing an interest in science, math, and technology during the critical middle school period will help them to better see themselves as the future leaders of tomorrow. We aim to do this through a unique idea - the nation's largest computer science competition for middle school girls. ProjectCSGIRLS is run by high school and college students from around the country who are incredibly passionate about computer science and technology.

> **This is programming?** [|Scratch] (video 1:37) - overview of Scratch and programming. [|Scratch] is free program from the MIT Media Lab. Learners of any age create games, tell stories, make animations, and much more. Scratch is entirely web-based.

The video shows an example of basic programming in Scratch. The result is an animated cat cartoon. The program is created by arranging blocks of special purpose program instructions. The steps in the Engineering Design Process are useful for learning about programming.
 * In the Scratch program example, the cat dances. What do you want the computer to do? What will the user of your program do?
 * There are lots of tools listed. Find out what each one does. The blocks cause some actions. Linking them together results in action on the screen. What does the computer know how to do? Can you find ways to use what the computer knows how to do?
 * The cat moved backward and forward. This looks like dancing when there is music to go with the movement.: What order does the computer need to do steps? Do you have to tell the computer to repeat steps?
 * Making the cat move forward and back several times automatically looks like dancing. Changing the color of the cat was interesting, too. Does it work when all the steps are in order? Do you need to rearrange the steps?
 * Once the cat can dance, add an interaction so that the cat dances when the users clicks on the cat sprite. What would make this program better? Can you add more jobs for the computer to do?


 * That's engineering**

> program, code, robots, control, software, websites, internet, Worldwide Web, interaction, sprite
 * Engineering ideas**

Here are some challenges for you to work on...
 * Do It**
 * complete the challenges in the [|DIY n00b]
 * [|learn to program] - online, type command to direct dog on screen
 * using one of these apps, work through the examples and write some programs. [|Preparing Kids to Code - Apps for all Ages] - several apps that are great introductions to programming - varying difficulty, some free.
 * [|Code.org’s own tutorials] (videos) - learn basic sequencing, repeat loops, and if-then statements from Mark Zuckerberg, Bill Gates, and Angry Birds.
 * Take some [|self-guided tutorials] that anybody can do, on a browser, tablet, or smartphone. Try the unplugged tutorials without computers. No experience needed.


 * News, updates**
 * [|Play-i] (http://play-i.com) is making computer science education accessible and fun for children ages 5+. Bo & Yana are robots that bring the magic of programming to children everywhere.
 * [|Why Programming Teaches So Much More Than Technical Skills] - subject mastery, systems thinking, collaboration, passion


 * Learn more...**
 * [|Computer Lanugages for Kids]
 * [|DIY n00b], [|How to train your robot], [|Scratch]
 * [|15 Reasons Why We Should Be Teaching Our Kids To Code]
 * [|learn to program] - online, type command to direct dog on screen
 * [|requirements for programming] - a passion for the work, a deep need to probe the mysterious space between human thoughts and what a machine can understand; between human desires and how machines might satisfy them; a high tolerance for failure.
 * [|Probabilistic Programming for Advancing Machine Learning] - The days where a computer program was just a set of instructions has long since passed. The future is computing based on models, queries and fact sets -- way beyond the scope of e4k. Careers in computer engineering are changing dramatically.
 * [|Girls Who Code] - works to educate, inspire, and equip high school girls with the skills and resources to pursue opportunities in computing fields.
 * [|Three Free iPad Apps That Teach Kids to Program -]Daisy the Dinosaur, Cargo Bot play to learn some principles of logic and programming. The object of the game is to program a robot to complete increasingly complex sequences of tasks. Kodable introduces logic and programming through a simple visual interface.
 * [|Preparing Kids to Code - Apps for all Ages] - several apps that are great introductions to programming - varying difficulty, some free.


 * [|Introduction to C Programming] - open textbook

..r2