Basics

What is programming?

Programming is the process of writing instructions that somehow explain to a computer how to perform particular tasks.

What basic terms describe programs and programmers?

A computer program is a description of the instructions you want a computer to follow. A library is pre-packaged code that you can use in your own programs. The word software is used to refer to computer programs, while hardware refers to the physical devices that make up a computer. Programming is often also called coding and programmers called coders. Programming is just one part of software development, the process of creating computer software.

Why would I want to learn programming?

For us, one of the best parts of knowing how to write computer programs is that it's a lot of fun to create things! We assume that you are familiar with the many kinds of software that can run on a computer. Have you ever had an idea for an improvement to software you use every day, or had a completely new idea? Well, without programming ability, chances are that you will never be able to implement these ideas, be they for games, utilities, or anything else. Have you ever found a bug in OpenSource software and wanted to fix it yourself immediately? Learning to code will enable you to do this.

Even people who seldom or rarely write programs can find programming ability valuable. The mental processes that you develop in learning to program will prepare you very well for all aspects of math and science, as well as general logical thinking. A lot of us think that programming should be added to school curricula as early as possible, supplementing the other subjects used to hone "general thinking skills."

What are computer languages?

The natural electronic forms in which computers store information and instructions are not very natural for people to use. As a result, there are many kinds of human readable languages used when developing software. The name for a particular document in a computer language is source code.

What tools do I need to start programing?

You'll need some of the following:

To begin developing software, Windows users will tend to need to buy or download any of the above tools that they want. Users of Linux and other Unix clones will generally have some of these tools for some languages installed, but will probably still end up downloading tools for new languages and upgrading their existing development software to newer versions. We have information on getting these tools for languages that we recommend you learn at LearnProgramming.

What is a "hacker"?

According to popular media, you might think that a hacker is somebody who breaks into computer systems through his expert technical knowledge, steals money, and plots to take over the world. However, the word "hacker" as used by people "in the know" actually refers to a programmer who simply likes to hack (program) code. The "right" term for people who break into computer systems and perform other illegal acts via computer is "cracker."

A cracker is also somebody who breaks protection off of games and applications illegally. These terms are all overused...

The etymological history of the word "hacker" has its origins at the famous Massachusetts Institute of Technology, or MIT. It was used to describe a student who spent his or her time pursuing recreational activities rather than striving to get straight A's. The person described in the latter part of the previous sentence was known around campus as a "tool." Computer programming was just one of the activities hackers spent their time pursuing.

Languages

What are the differences between the hundreds of programming language in wide use today?

A lot of people call programming language choice "subjective" and say that you should therefore just choose the language with which you feel the most "comfortable." There may be some validity to this idea, but there are certainly many objective factors to consider when choosing a programming language, including:

In summary, most languages really will allow you to write any sort of program that you want. However, differences in the above qualities can dramatically influence how long it takes you to create working software meeting your standards in these languages.

What is the difference between "programming languages" and "scripting languages"?

There really isn't any sensible difference. You can write programs with scripting languages, so why deny that they're programming languages? When people call something a "scripting language," they generally mean that it's intended to be used for "small" tasks where execution speed doesn't matter, often running inside another program.

What is the difference between "interpreted languages" and "compiled languages"?

There really isn't one. A language would have to be designed very oddly for it to be impossible to compile or interpret it. Pick almost any programming language and you'll find both compilers and interpreters for it. There are languages that only have compiling or interpreting implementations at the moment, but this isn't an inherent property of these languages. Some languages are much more suited to one method or the other, though. This is what people will generally mean when they use these terms, though it's hard to give an exact definition of what falls into which category. See also the definitions of an interpreter vs. a compiler under the question, "What tools do I need to start programming?"

Is writing HTML code programming?

No, it isn't. Computer programs describe computations. They give step-by-step instructions on exactly how to do something, exactly describe a result by specifying some of its properties, or do something similar. HTML is a markup language; it describes how something should look, not how to make it look that way. Explaining in a water-proof way what the exact difference is can be tricky, but we think you'll understand if you know both HTML and a traditional programming language.

Are "object-oriented languages" and "functional languages" two separate categories?

Nope. People who say this seem to be confusing ObjectOrientedLanguages with ImperativeLanguages. See Objective Caml for a popular language that is both functional and object-oriented.

What is the relationship between JavaScript and Java?

In no way are JavaScript and Java related, except in their names, and even this relationship is tenuous: JavaScript was originally named LiveScript. It was created by Netscape to allow web pages to control Java applets but evolved into a tool for making tiny programs on websites like drop-down menus, pop-up windows, and other flashy things, while Java was created by Sun and is a general purpose programming language. Java is not limited to just the Internet, but small applets are seen on many websites. Java is also quite popular in designing applications for the PalmOS devices. It is said that JavaScript was just given a name similar to Java so that Netscape could gain popularity for the language. Java is a significantly more complex language than JavaScript.

Operating systems

What is an operating system?

An operating system (OS) is a collection of software that creates a good environment for running all sorts of other programs in a safe and cooperative way. Some people define an OS simply as "the software on your computer that you cannot avoid." You're running an OS now on your computer to be viewing this.

What kinds of interfaces do OS's have?

What are some common operating systems?

Note: GNU/Linux is practically a subset of UNIX, which exceeds it in many places. The "definition" of UNIX hinges on POSIX compliance-- a guiding force in the development of the Linux kernel and the GNU Operating System. So saying GNU/Linux is NOT UNIX is correct, albeit only on a technicality. For all practical purposes, Linux, *BSD, Darwin, SunOS, etc.-- they're all the same type of operating system: UNIX.

Why would I want to choose an OS based on OpenSource?

What better way to learn programming than to have the source code to all of the sofware you use every day available to you? Choosing an OpenSource operating system like LinuxOs or another UnixOs gives you just this. There is a lot of OpenSource philosophy explaining why it encourages more people to make better software, but you can just take our word for it that OpenSource systems are much easier for programmers to support. It's not possible for vendors to hide the details of using their systems when the source code to them is available.

Independent of general reasons, you can just look at what software is available today. Most development tools available for closed OS's like WindowsOs are proprietary, while most for GnuLinuxOs are free. Maybe you like paying for software and dealing with bizarre licensing schemes for software you have paid for, but we sure don't.

Tools

What is a shell account?

Unix-like operating systems generally allow authorized users to connect to them and use their CommandLineInterfaces over the Internet. Machines that allow this are often called shell servers, and your user account on one of them is called a shell account. A well-maintained shell server can be a great place to do software development. The server's administrators can keep the development tools and environments up to date, freeing you from these concerns. Shell accounts probably won't work very well for developing graphical programs, though. A shell is a program that provides a CommandLineInterface on a Unix based or similar system. You can have several shell programs installed on one machine. A shell account gives you the ability to have remote access to a shell. We have a list of ShellProviders.

ProgrammingFaq (last edited 2003-11-30 15:00:33 by olin)