# IT Fundamentals/Software Development

This lesson introduces software development concepts.

## Objectives and Skills

Objectives and skills for the software development portion of IT Fundamentals certification include:
* Compare and contrast programming language categories.
** Interpreted
*** Scripting languages
*** Scripted languages
*** Markup languages
** Compiled programming languages
** Query languages
** Assembly language
* Explain the purpose and use of programming concepts.
** Identifiers
*** Variables
*** Constants
** Containers
*** Arrays
*** Vectors
** Functions
** Objects
*** Properties
*** Attributes
*** Methods
* Compare and contrast fundamental data types and their characteristics.
** Char
** Strings
** Numbers
*** Integers
*** Floats
** Boolean
* Given a scenario, use programming organizational techniques and interpret logic.
** Organizational techniques
*** Pseudocode concepts
*** Flow-chart concepts
**** Sequence
** Logic components
*** Branching
*** Looping

## Readings

* Wikipedia: Programming language
* Wikipedia: Structured programming

## Multimedia

* YouTube: Programming Language Categories
* YouTube: Programming Concepts
* YouTube: Data Types
* YouTube: Programming Organizational Techniques & Interpreting Logic
* YouTube: Chapter 15 - IT Fundamentals+ (FC0-U61) Developing and Implementing Software

## Activities

* Complete an interactive programming tutorial.
** Code.org: Classic Maze
** Flowgorithm: Tutorial
* Compare compiled and interpreted programming languages.
** C++
*** Review Programming Fundamentals/Introduction/C++ and complete the activity using Repl.it.
*** In the output window, run the ls command to list files in the current folder. Note the main.cpp file.
*** Run the program. Notice the two-step process of compiling main.cpp and then running main.
*** In the output window, run the ls command to list files in the current folder. Note both the main.cpp and main files.
** Java
*** Review Programming Fundamentals/Introduction/Java and complete the activity using Repl.it.
*** In the output window, run the ls command to list files in the current folder. Note the Main.java file.
*** Run the program. Notice the two-step process of compiling Main.java and then running Main.
*** In the output window, run the ls command to list files in the current folder. Note both the Main.java and Main.class files.
** Python
*** Review Programming Fundamentals/Introduction/Python3 and complete the activity using Repl.it.
*** In the output window, select Help and shortcuts (question mark), Workspace shortcuts, and then Open shell. Run the ls command to list files in the current folder. Note the main.py file.
*** Run the program. Notice the single-step process of running (interpreting) main.py.
*** In the shell window, run the ls command to list files in the current folder. Note only the main.py file.
* Compare programming languages.
** Review Wikibooks: Computer Programming/Hello world. Compare source code examples for Assembly language, C++, HTML, Java, JavaScript, PowerShell, Python, SQL, and any other languages that interest you.
** Categorize each of these languages as compiled, interpreted, scripted, markup, query, or assembly language. Note the differences in coding style and intended purpose.
* Compare data types.
** Review Data Types and complete the activity using Repl.it.
** Note the characteristics for integer, floating-point, character, string, and Boolean values.
** Consider different uses for each variable type. Provide examples for when you could and could not use each type.
* Research and compare each of the following programming concepts.
** variables and constants
** arrays and vectors
** functions and subroutines
* Research object-oriented programming.
** Review Object-Oriented Programming/Introduction.
** Note the differences between objects, classes, properties, attributes, and methods.

## Lesson Summary
### Programming Language Categories

* A programming language is a formal language which comprises a set of instructions that produce various kinds of output.
* An implementation of a programming language provides a way to write programs in that language and execute them on one or more configurations of hardware and software. There are, broadly, two approaches to programming language implementation: compilation and interpretation.
* A compiled language is a programming language whose implementations are typically compilers (translators that generate machine code from source code). Compiled languages include C++ and Java.
* An interpreted language is a type of programming language for which most of its implementations execute instructions directly and freely, without previously compiling a program into machine-language instructions. Interpreted languages include JavaScript, Perl, and Python.
* Programs that are executed directly on the hardware usually run much faster than those that are interpreted in software.
* A scripting or script language is a programming language for a special run-time environment that automates the execution of tasks. The tasks could alternatively be executed one-by-one by a human operator. Scripting languages are often interpreted (rather than compiled). Scripting languages include Perl, PowerShell, and Python.
* A markup language is a system for annotating a document in a way that is syntactically distinguishable from the text, meaning when the document is processed for display, the markup language is not shown, and is only used to format the text. Markup languages include HTML.
* Query languages are used to make queries in databases and information systems. Query languages include SQL.
* Assembly language is any low-level programming language in which there is a very strong correspondence between the instructions in the language and the architecture's machine code instructions. Each assembly language is specific to a particular computer architecture and sometimes to an operating system.

### Programming Concepts

* Identifiers are tokens or symbols which name language entities. Some of the kinds of entities an identifier might denote include variables, constants, types, labels, subroutines, and packages.
* A variable is a storage address (identified by a memory address) paired with an associated symbolic name, which contains some known or unknown quantity of information referred to as a value. In imperative programming languages, values can generally be accessed or changed at any time.
* A constant is a value that cannot be altered by the program during normal execution. When associated with an identifier, a constant is said to be "named," although the terms "constant" and "named constant" are often used interchangeably.
* A container is a data type whose instances are collections of other objects. Examples include arrays and vectors.
* An array is a data structure consisting of a collection of elements (values or variables), each identified by at least one array index or key.
* A vector is an array of object references. For example a multidimensional array may be implemented as an array of arrays.
* A subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed. In different programming languages, a subroutine may be called a procedure, a function, a routine, a method, or a subprogram.
* Some programming languages distinguish between functions or function subprograms, which provide an explicit return value to the calling program, and subroutines or procedures, which do not.
* In object-oriented programming, object refers to a particular instance of a class, where the object can be a combination of variables, functions, and data structures.
* An attribute defines a property of an object. For example, an object might have a color attribute.
* A method is a procedure or function associated with an object. It is something the object does, such as move.
* A property is a special sort of class member, intermediate in functionality between an attribute and a method. It provides a callable interface to access an attribute, allowing a property to perform data validation for the attribute or be read-only.

### Data Types

A data type is an attribute of data which tells the compiler or interpreter how the programmer intends to use the data.
* A char is a character. Examples of characters include letters, numerical digits, common punctuation marks, and whitespace.
* A string is a sequences of characters, either as a literal constant or as some kind of variable. Examples include "Hello" and "world!" Note that "12345" with quotes is a string rather than a numeric value.
* An integer represents some range of mathematical whole numbers, values that may be represented without a fractional component. Examples include 1, 234, -5, and 0.
* A float represents some range of mathematical real numbers, expressed with decimal points and a limited number of significant digits. Examples include 1.23, 3.14159, -2.71828 and 0.0
* Most programming languages support floats with either seven significant digits (four bytes) or 15 significant digits (eight bytes). Eight-byte floating-point values are often referred to as double precision, or just double.
* A Boolean represents one of two possible values (usually denoted true and false) which is intended to represent the two truth values of logic and Boolean algebra. The actual stored values are typically either 0 and 1 (false, true) or 0 and -1 (false, true), depending on the given programming language.

### Program Structure

* Structured programming is a programming paradigm aimed at improving the clarity, quality, and development time of a computer program by making extensive use of the structured control flow constructs of selection (if/then/else) and repetition (while and for), block structures, and subroutines.
* Pseudocode (false or fake code) is an informal high-level description of the operating principle of a computer program or other algorithm. It uses the structural conventions of a normal programming language, but is intended for human reading rather than machine reading.
* A flowchart is a type of diagram that represents a workflow or process. A flowchart can also be defined as a diagrammatic representation of an algorithm, a step-by-step approach to solving a task.
* In structured programming, the ordered sequencing of successive commands is considered one of the basic control structures, alongside iteration, recursion and choice.
* Logical comparisons are made using logical operators:
** equal (==)
** less than (<)
** greater than (>)
** less than or equal (<=)
** greater than or equal (>=)
** not equal (!=)
** and (&&)
** or (||)
** not (!)
* A branch is an instruction in a computer program that can cause a computer to begin executing a different instruction sequence and thus deviate from its default behavior of executing instructions in order. Branch instructions are used to implement control flow in program loops and conditionals (i.e., executing a particular sequence of instructions only if certain conditions are satisfied).
* A loop is a sequence of statements which is specified once but which may be carried out several times in succession. The code "inside" the loop (the body of the loop) is obeyed a specified number of times, or once for each of a collection of items, or until some condition is met, or indefinitely.

## Tips
### Data portability

    Make sure the end user is able to export and back up their user data, especially if stored in a closed environment.

## Key Terms
### DLL (Dynamic Link Layer)

    Microsoft's implementation of the shared library concept in the Microsoft Windows operating system.

### TLS (Thread Local Storage)

    A computer programming method that uses static or global memory local to a thread.

## Assessments

* Flashcards: Quizlet: IT Fundamentals - Software Development
* Quiz: Quizlet: IT Fundamentals - Software Development

## See Also

* Programming Fundamentals