==The WikiTextBook on Computer Programming==
Computer programming is the art of writing useful, maintainable, and extensible instructions which can be interpreted by a computing system to perform a hopefully meaningful task that makes life and work more enjoyable and productive for the users of the computing system. Programming a computer can be done in one of several different languages, ranging from machine code to high level langauges.
===Choosing a programming language===
The general trade off between languages is speed vs ease of coding. Writing in machine code, usually through an [[programming:Assembly|assembly language]] but conceivably through a hex editor, can result in the creation of the fastest and most compact program possible, but only if you want to donate years of your life span to creating the program, assuming it will be moderatly complex and you will not be calling code from other higher languages (which you must do if you write a windows program). Assembly language has very exact [[programming:syntax|syntax]] that gets as little done as possible per command, since each command generally corresponds to one or two processor [[programming:opcodes|opcodes]]. High level languages generally have commands that can correspond to dozens of [[programming:opcodes|opcodes]] which can greatly speed up coding, but you have to depend on a compiler to figure how to turn those commands into the fastest running set of opcodes. They tend to do a good job, depending upon the compiler, but they don't do a perfect job, so it will be a little slower. Generally but not always, the easier it is to code, the slower your program will be compiled.
===The popular programming languages===
The most used programming languages are probably C or C++. They are both very similar so if you learn one, you can easily learn the other, but C has a more exact syntax and is faster while C++ allows for more flexibility but will compile more slowly. The difference in speed today isn't very great but it is still an issue, but since the two languages can be mixed on most compilers that isn't a problem.
The second most used are probably Java or Basic. C and C++ compile into an executable that is run directly by the processor. Java and Basic are normally interpreted, so they do not run directly by the processor and for that reason are inherently slow, although several techniques have been used to improve their performance considerably.
Java can be run on many systems relatively unchanged, but the price paid for it is speed. It is slow, but since it can be run on anything it can be used on webpages. Its [[programming:structure|structure]] and [[programming:syntax|syntax]] is similar to C++ so if you know C++ you can easily learn Java.
Basic (or Visual Basic or QBasic) is very easy to program with. It is also slow, but it is still used for many things today in Windows programming just because it is easy.
Assembly is not used that much today, but learning it will greatly help you understand how a computer works and how to better structure high level code. Plus, if you really need speed on a couple often used routines in your program, you can and should use assembly to write them.
Another distinction must be made between [[programming:scripting|scripting]] languages and [[programming:highlevel|very-high-level]] languages and other languages. Scripting languages, like [[programming:Perl|Perl]], [[programming:Python|Python]] and [[programming:Ruby|Ruby]] are interpreted languages that have been designed for speed and ease of coding in performing short tasks, often offering elastic syntax and allowing to shrink complex tasks in just a dozen lines of code. They have been successfully implemented to solve day-to-day problems and not to build up complex, monolithic applications, although there are exceptions (Python-based applications like MayaVi or Zope are a notable example).
[[Currently in Programming|What's New?]]
[[Concepts in Programming|Concepts]]
[[Assembly in Programming|Assembly]]
[[C in Programming|C]]
[[Cpp in Programming|C++]]
[[Java in Programming|Java]]
[[Basic in Programming|Basic]]
[[D in Programming|D]]
[[Delphi in Programming|Delphi]]
[[Pascal in Programming|Pascal]]
[[Python in Programming|Python/Jython]]
[[PHP in Programming|PHP]]
[[Perl in Programming|Perl]]
[[Lisp in Programming|Lisp/Scheme]]
[[Prolog in Programming|Prolog]]
[[Ruby in Programming|Ruby]]
[[SQL in Programming|SQL]]
General Algorithms and Techniques
[[AI in Programming|AI]]
[[Applications in Programming|Applications]]
[[Database Programming in Programming|Databases]]
[[Drivers in Programming|Drivers]]
[[Games in Programming|Games]]
[[2D in Games in Programming|2D]]
[[3D in Games in Programming|3D]]
[[Side Scrolling in Games in Programming|Side Scrolling]]
[[Networks in Programming|Internet & Networking]]
[[Multimedia in Programming|Multimedia]]
[[OS in Programming|OS]]
[[OS Programming in Programming|OS Programming]]
[[DOS Programming in Programming|DOS]]
[[Linux Programming in Programming|Linux]]
[[MacOS Programming in Programming|MacOS]]
[[Windows Programming in Programming|Windows]]
[[Allegro in Programming|Allegro]]
[[DirectX in Programming|DirectX]]
[[FreeType in Programming|FreeType2]]
[[IJG in Programming|IJG JPEG Library]]
[[LibPng in Programming|LibPng]]
[[OpenGL in Programming|OpenGL]]
[[RTF in Programming|Rich Text Format]]
[[Programming Authoring Tools|Authoring Tools]]<br>
[[Programming Authoring Guidelines|Authoring Guidelines]]
'''Old: Will be Deleted Very Soon after old stuff (not much) has been transfered'''<br>
'''Soon deletion of the old pages will be requested'''
General Algorithms and Techniques
[[programming:Side Scrolling|Side Scrolling]]
[[programming:networks|Internet & Networking]]
[[programming:Programming an OS|Programming an OS]]
[[programming:IJG JPEG Library|IJG JPEG Library]]
[[programming:RTF|Rich Text Format]]