Programming

=Introduction= toc

// This module is intended to introduce students with the syntax and rules behind coding and programming in a variety of languages. The programming techniques and concepts learned in this module can be used for a variety of applications including the high performance computing module, robotics projects, cnc applications, and many others. //

media type="youtube" key="tVWlU24quUk" width="425" height="350"
 * Introductory Video**

How to use a computer
 * Knowledge Requirements**

= = =Background and Definitions=

// This section includes all the information that one must be familiar with before they start the module itself. This may include other modules, random science subjects, historical background, or anything else you can think of. Any terms or concepts or abbreviations used in the module that the readers may not be familiar with should be defined here. //
 * Green/Yellow/Red tabs to indicate difficulty level*

__Wiki Definitions__

 * [|Computer programming]** (often shortened to **programming** or **coding**) is the process of [|designing], writing, [|testing], [|debugging], and maintaining the [|source code] of [|computer programs]. This source code is written in one or more [|programming languages] (such as [|Java], [|C++], [|C#], [|Python], etc.). The purpose of programming is to create a set of instructions that computers use to perform specific operations or to exhibit desired behaviors. The process of writing source code often requires expertise in many different subjects, including knowledge of the application domain, specialized [|algorithms] and [|formal logic].

__Basics__

 * **[|Reliability]**: how often the results of a program are correct. This depends on conceptual correctness of algorithms, and minimization of programming mistakes, such as mistakes in resource management (e.g., [|buffer overflows] and [|race conditions]) and logic errors (such as division by zero or [|off-by-one errors]).
 * **[|Robustness]**: how well a program anticipates problems not due to programmer error. This includes situations such as incorrect, inappropriate or corrupt data, unavailability of needed resources such as memory, operating system services and network connections, and user error.
 * **[|Usability]**: the [|ergonomics] of a program: the ease with which a person can use the program for its intended purpose, or in some cases even unanticipated purposes. Such issues can make or break its success even regardless of other issues. This involves a wide range of textual, graphical and sometimes hardware elements that improve the clarity, intuitiveness, cohesiveness and completeness of a program's user interface.
 * **[|Portability]**: the range of [|computer hardware] and [|operating system] platforms on which the [|source code] of a program can be [|compiled]/[|interpreted] and run. This depends on differences in the programming facilities provided by the different platforms, including hardware and operating system resources, expected behaviour of the hardware and operating system, and availability of platform specific compilers (and sometimes libraries) for the language of the source code.
 * **[|Maintainability]**: the ease with which a program can be modified by its present or future developers in order to make improvements or customizations, fix [|bugs] and [|security holes], or adapt it to new environments. Good practices during initial development make the difference in this regard. This quality may not be directly apparent to the end user but it can significantly affect the fate of a program over the long term.
 * **[|Efficiency]**/**[|performance]**: the amount of system resources a program consumes (processor time, memory space, slow devices such as disks, network bandwidth and to some extent even user interaction): the less, the better. This also includes correct disposal of some resources, such as cleaning up [|temporary files] and lack of [|memory leaks].

__History__


=Resources=

// This is a section where you can post external resources related to the module. This may be online discussion boards or physical locations like the maker bench. Store and website information that module related equipment and tools can be purchased can also be found in this section. //


 * W3Schools -** This was my go-to website while I was in school. It has been an amazing experience learning programming from W3Schools. They start from the basics, stick to basics and even the complex explanations on the website are pretty easy to understand. In short, it’s a perfect place to start learning programming.
 * Try Ruby –** Got 15 minutes? Go, give Ruby a chance in those 15 minutes. The on-the-fly editor helps you learn Ruby in no time. At least it will introduce you to Ruby very quickly.
 * Code School –** This is another one stop website for those who want to learn programming. They are loaded with video based tutorials and on-the-fly coding tools that help you understand programming even when you know nothing about it.
 * Try Bloc -** Another great member and teacher in the Ruby community.
 * Codecademy -** Another site that is loaded with amazing and helpful information. It has been appreciated by its users and I know that it is worth it. One of the rare, interactive ways to pickup JavaScript.
 * jQuery Air -** This tool helps you learn jQuery in the browser itself. This tool will help you learn jQuery in the most practical way. Don’t miss it.
 * Hackety -** Well, they won’t actually teach you how to hack, but they will teach you how to program.
 * TeamTreeHouse -** Team Tree House has received praise from around the planet and the Internet community for the amazing work they have been doing. Try them if you are beginning to learn any new programming language.
 * PHP Know How –** You didn’t think I’d forget about PHP did you? PHP is the language that WordPress relies on to function.
 * Lifehacker’s Learn to Code -** Lifehacker has compiled an amazing article that teaches you the basics of coding. This article is a great starting point for anyone that wants to learn more about programming.

__**Getting Started:**__

HPC Basics. Hello World Manual.

MPI Example Programs.
__**Linux commands:**__ [] or []

__**Shell scripts**__ (in order of difficulty to understand; increasing)**:** The wiki: []

[] [] [] []

=Related Projects=

// Instructables, youtube videos, tutorials and anything else that is similar to the module at hand should be posted here. Related projects should provide additional methods for solving problems, give people ideas for new modules, and supplement module learning with fun, hands-on exercises. //

=Arduino= Arduino can be programmed in Java Script to accomplish a wide variety of tasks. A number of sensors and other input devices can send signals to the microprocessor, which then interprets a program to command a number of output devices, such as motors, speakers, or LED's to behave in a certain way. Arduino projects can use very simple to very complex programs so it is a great platform for anyone from beginner to expert.

=High Performance Computing = The Saguaro HPC cluster at Arizona State University primarily uses the programming languages C and Fortran. Although the uses of the HPC are more complex than average programming applications, simple programs can be run to introduce new users to parallel processing.

= = =Inspiring Ideas and Applications=

=News and Events=

// This section will exist to ensure that the module stays as updated and relevant as possible. Any news or scientific breakthroughs related to module subject matter can be found here. //

=Outreach=

= = =Notes=

// in this section any collaborators can keep track of their progress, questions/problems they may be having, or anything else that may be going on during the modules development. This is an area where mentors will be able to provide feedback and students may ask questions. Each response should be dated and kept in chronological order, it may be the only part of the module in chronological order and may end up being a valuable resource to keep track of the process //

= = =Collaborators=

// Logan Van Engelhoven //

= = = = =Knowledge Assessments=

*interactive quizzes*
= =