# Australian Vocational Education and Training/ICAB4225A Automate processes

From the official document:
    This unit defines the competency required to automate solutions by using basic scripting processes and application-specific scripting options.
What does that mean? Good question! Read on and find out (or you can also read more on the National Training Information Systems Official document for ICAB4225A)
This unit forms part of the following qualifications:

## How this unit will help you:

It's one thing to plug-in someone else's Javascript into your site without having to understand too much about it, but if you want to solve unique problems yourself using a computer programming language then you will need to learn some of the foundations of computer programming.
This unit aims to get you started demonstrating the the process of writing computer-recipe's (a.k.a. algorithm's) using the tools of the trade:
* sequence - the order that you put your instructions in (e.g. First, put one teaspoon of coffee in the cup, next fill the cup 3/4 full with boiling water, next add 5ml of milk)
* selection - choosing between different options depending on a condition (e.g. IF person takes sugar THEN add one teaspoon of sugar to cup)
* repetition - repeating some of your statements (e.g. WHILE colour is not uniform DO stir coffee with teaspoon)
Given a problem that you understand, this unit asks you to demonstrate the process of
* describing a solution to the problem (a.k.a. an algorithm that uses sequence, selection and repetition) on paper first using a tool such as flowchart's or psuedocode,
* Testing and reviewing your algorithm on paper for mistakes (perhaps in a group),
* Translating your algorithm into the scripting language that you are using for your solution (Javascript, PHP, ASP) to create your script,
* debugging your script for errors on the computer and identifying any problems that you may not have thought of previously (e.g. "Gee, I didn't think about the case where the user might put a negative number for the number of sugars in their coffee!!")
* Creating technical documentation for other programmers who might have to work on your code, as well as user documentation to help people use your program.

## Ideas for learning the required skills
### Describing the Solution

* Lep's Lair has a good introduction to programming
* There's an description of pseudocode at California's Polytechnic State University
* The online book: How to Design Programs has some chapters on developing a program plan, along with exercises and solutions.

### Translating to a Scripting Language

You can design an algorithm to run in any programming environment, but to really understand how it works it's best to implement your design (and debug the results). For web development this might mean using JavaScript or PHP. For a game developer you might use Python. Depending on your goals, here are some tutorials which cover programming basics...

#### JavaScript

* JavaScript basics on HTML goodies. A 10 part introduction to using client side scripting on a web page which gives some good real-world examples of manipulating the DOM with JavaScript.
* the JavaScript tutorial on Tizag - more structured (but less interesting IMO)
* the JavaScript learning center. A nice balance between the two with an interesting 'try it here' interface for exprimenting online.
* a JavaScript DHTML tutorial. Starts with the basics and moves on to advanced techniques for manipulating web pages.
* the JavaScript 1.5 and above tutorial.

#### PHP

* A ground-up approach to PHP on Tizag - just right for learning programming constructs
* W3Schools also has an introduction to PHP
* PHP Tutorial for web based applications on w3resource

#### Python

* the exercises and answers for a python course taught at Indiana University. The first four weeks are particularly good for students of process automation.
* the downloadable openbook: How to think Like a Computer Scientist - also available in Java, C++ and Logo versions.
* a Bite of Python - all the usual intro to programming stuff, plus a good section on program design (ch 11: problem solving)

### Documentation

Read through the w:Software_documentation software documentation article on wikipedia

## Ideas for demonstrating this unit

TODO: link to Javascript, PHP form + DB handling. Algorithm Challenges may help.

## Grading

If you are demonstrating this unit as part of a formal course, you might find that the unit is graded (meaning you can not only demonstrate your competence, but can also gain a credit or distinction). If this is the case, here are some ideas for possible credit/distinction activities that you can discuss with your facilitator:

## Notes and discrepancies

* Element 1 seems to simply provide conditions for the algorithm that the learner develops (or really, it just defines what an algorithm is: it needs to solve the problem, taking account of all possibilities, and it must end.)
* Element 2 seems to be implied by 3?
* This unit doesn't seem to require learner to create the solution? But rather, to use an algorithm to describe and then implement a solution...