Wednesday, April 4, 2007

Some handy Windows basics

The following little bag of Windows tricks is courtesy of readers who suggested that I cover some more Windows basics. Thanks to Raymond in Holland and other readers for their suggestions.

Opening a new browser window

I'm told that not everybody seems to be aware of the Shift+click trick. When you are reading a web page and you come across a link, say to http://www.emulators.com, and you wish to read that new page but not lose your spot on the current page, what I do is open the link in a new window. i.e. I create a second browser window to the linked page in.

The quickest way to do this in Internet Explorer is to hold the Shift key while you click on the link. That's it. Shift and click. The other way is to right click on the link and then click on Open in New Window. Either way, you get the link opening in a second window.

Remember, if you ever find yourself clicking on a link and then wishing you had saved your previous spot, just press the Backspace key to return to your original page, then use the Shift+click trick to open the link in a new window.

Deleting temporary files

I've mentioned that turning off System Restore can stop a lot of disk space from being wasted by preventing a lot of unnecessary temporary files from being created. But what do you do to clean up unneeded files already on your hard disk?

The easiest (but not the most thorough way) is to run the Disk Cleanup wizard. From the Start menu, click on Accessories, System Tools, then Disk Cleanup. You will need to do this for each hard disk partition (i.e. C:. D:. etc) on your PC's hard disk. Select a partition to clean up, for example C:, and click the OK button. After a few seconds, you will be presented with a list of possible methods to clean up disk space, as shown below:

Disk Cleanup Wizard

Typically it is OK to select all of the methods listed and then to click OK. This will then clean up the space on that hard disk partition. Repeat the processed for each drive letter.

This wizard will not free up all unneeded files on your hard disk, but is a very quick way to find many of them without having to poke around your hard disk much.

If you are feeling brave, you can manually clear out files in your personal Temp folder. In older versions of Windows, this is simply the C:\WINDOWS\TEMP folder. Quit all programs and then using the Explorer you can navigate into that folder and delete any files you find there.

On Windows 2000 and Windows XP, each user has a private Temp folder located in the Documents and Settings folder located on the boot partition. The quickest way to find your Temp folder is to bring up the Run dialog (Win+R), type CMD, and then type CD LOCAL*\TEMP. Now type del /s /q *.* to delete any remaining temporary files.

"Spring Loaded Folders" in Windows Explorer

A popular feature in Mac OS 9 (which sadly, was left out of Mac OS X) is a feature called spring loaded folders. This feature allows you to navigate into folders while dragging and dropping files without opening each folder in advance.

A similar such feature exists in the Windows Explorer when the Folders view is enabled. Let's say, for example, that you've opened the Windows Explorer by double clicking the My Computer icon. You navigate into your CD-ROM drive on drive F: by double clicking the F: icon. Now you wish to drag a picture file from the CD to the My Pictures folder on the hard disk. You click and start dragging, and then realize that you have not opened the My Pictures folder yet! In Windows XP, the My Pictures folder is nested inside the My Documents folder, which you have also not opened.

So what to do? Do NOT let go of the mouse button!!! If you do, you will end up randomly copying the file to whatever the mouse pointer happens to be hovering over. Instead, you can safely abort the drag operation by pressing the Esc key on your keyboard, then letting go of the mouse button.

But that would be be boring. The smart Windows user knows that if you drag and hover the mouse over a folder in Folder view, the folder will expand to show up the sub-folders. As shown in the partial screen shot below, I can drag and hover the mouse over the My Documents icon, and about one second later, the folder will expand to reveal that My Pictures folder.

drag and hover example

At this point I can safely drop the picture file into the My Pictures folder as I intended. Not quite spring loaded folders, but pretty close. By the way, this same trick works in Outlook and any other program that displays the "tree view" of folders.

And there you have it. Three very simple tricks that come in very handy when using Windows.

Free Mac OS Releases (and other useful tools!)

One of the critical items that are required to run an Apple Macintosh emulator is the Macintosh operating system itself (the Mac OS). This is true whether you're running SoftMac, or Fusion, or vMac, or Basilisk, or any other Macintosh computer emulator out there. There is of course Executor, but is not a Macintosh emulator, it is a Mac OS runtime for the PC, NOT the same thing.

Anyway, most Macintosh users who go to run Mac OS on their PC already have a Mac OS on their Mac, duh. However, perhaps you've lost the Mac OS startup disks that came with your Macintosh, perhaps you've got an old old versions of the System, or you've got too new a version (such as Mac OS 9) which is currently not supported by any of the above emulators. So you need to create a new startup disk.

You're in luck! A few years ago, as Apple decided to kill off 68000 based machines, they also went ahead and simply make the older 68000 compatible versions of Mac OS free. That's right, they just posted them to their FTP site. Right now, all Mac OS releases up to and included 7.5.5 can be freely downloaded from their FTP site, as well as the latest versions of various control panels, system extensions, and utilities such as the Drive Setup hard disk formatter.

Although the keep shuffling the files around on their FTP site, and recently dropped the links from their FTP site, the files are still there. You will simply need 3 tools on your Windows computer - an FTP client (or FTP enabled web browser such as Internet Explorer), a Mac archive unstuffer (such as Aladdin's Stuffit Expander), and a disk imaging utility to copy the expanded disk image to a real physical floppy disk.

The first part is easy. If you can read this, chances are your browser will work. Just to go Apple's mirror site: http://mirror.apple.com. Go ahead, try it. Did that work? Now click on either "FTP Access" or "HTTP Access". Click on Apple_Software_Updates. Then click on US since I'm using the U.S. English language releases of Mac OS as the example here, click on Macintosh, then click on System, then finally Older_System. I walked you through it instead of giving a direct link because you'll other interesting folders there along the way to play with later.

Now, if you absolutely have no Mac OS boot disk of any kind, I recommend the System 6.0.8 boot disks for three reasons. First, it's a 1.44M floppy disk image compatible with your PC's floppy disk drive. Second, it contains the Apple hard disk formatting utility which you need to "format" any hard disk image files you create for use with SoftMac. Once you get this done, and have a booting System 6 hard disk image, you can always upgrade it to System 7 later. Third, the system requires only two floppy disks in order to boot and install on a hard disk, less floppies that required by System 7.

So to go ahead and get your System 6.0.8 disk images, click on the System 6.0.x folder and download both the SSW_6.0.8-1.4MB_Disk1of2.sea.bin and SSW_6.0.8-1.4MB_Disk2of2.sea.bin files. These are binary images of self extracting files which uncompress to give you the actual disk images. Apple used to post the raw disk images directly for some stupid reason pulled them off just to make this process all that much more complicated. Argh!

Once you have the two disk images, you'll need Stuffit Expander to uncompress them. Fortunately the makers of Stuffit Expander for the Macintosh also make a Windows version. Simply go to http://www.aladdinsys.com/expander and download it, install it, and run it. Drag the two .bin files to the Stuffit Expander window. You'll end up with two new files, SYSTEM_S and SYSTEM_A which are the two disk images of the System 6.0.8 setup disks.

The final step is to copy these disk images to real floppy disks. If you're not running SoftMac 8.0 or Gemulator 8.0 or later (which contain built-in disk imaging functions), download our own Gemulator Explorer utility. Run it, click on "Non-DOS floppy in A:", then select the Write Image File To Physical Disk menu command. When the file selector comes up, select the SYSTEM_S file. That is your startup disk, which will boot System 6.0.8 and also includes the disk formatter utility, Apple HD SC Setup, as well as TeachText and the disk repair utility. Repeat the same process on a second floppy disk, using the SYSTEM_A disk image. There, you now have a complete set of System 6.0.8 installation disks!

If your particular Mac ROMs don't support System 6.0.8 or you want to upgrade to System 7, click on the System 7.0.x folder instead, and download the file System_7.0.1.smi.bin. As this file format is not expandable by the Windows version of Stuffit Expander, and since Apple decided to be dicks and remove the raw System 7 disk images, you'll need to expand this either on a real Macintosh computer or one the freshly installed System 6.0.8 installation.

You can of course always simply order a Mac OS 8 CD-ROM with your SoftMac purchase and save yourself a lot of hassle!

Other useful things to download from Apple's site:

  • from the Other_System folder, download MODE32_7.5.sea.bin. The MODE32 utility allows 24-bit dirty 68030 ROMs (Macintosh IIx, IIcx, and SE/30) to work with more than 8 megabytes of memory.

  • from the Utilities folder, you can download various versions of Drive Setup (the new name for the hard disk formatting utility), Disk Copy (the disk imaging tool for Mac OS), and Disk First Aid (the disk repair utility for Mac OS). These versions will be newer than what you get with System 6, although if you have a Mac OS 8.0, 8.1, or 8.5 CD-ROM, you should simply use the version on the CD-ROM.

You can also poke around the other directories and download things like updated Apple CD-ROM drivers, patches for ClarisWorks, and other useful things.

Update: SoftMac XP has disk imaging commands built right in. You can take a boot floppy disk image, transfer it to a real floppy, and have it booted up in a matter of minutes, all without leaving the emulator.

Overriding the minimum requirements of Mac OS Setup

As explained above, some versions of Mac OS too impose rather silly hardware requirements that are designed more help Apple avoid product support calls than to help Macintosh users. A well known example of this is Mac OS 8. In several places in Mac OS 8 code, there are intentional checks to make sure that the code is running on a 68040 Quadra type computer, despite the fact that the 68030 and 68040 chips are virtual clones of each other and Mac OS 8 runs just fine on 68030 machines! Why Apple chose to outdate its Macintosh II series and Macintosh LC series computers is beyond me, but for over 3 years now it's been documented on the web how to load Mac OS 8 on a 68030 machine. There is a utility called WishIWere which does this, and one of several pages that describes the trick is this one:

http://www.lowendmac.com/tech/8on030.shtml

Oddly enough, Apple has relaxed some of the requirements since Mac OS 8 was released, with certain utilities (such as Drive Setup) no longer doing these artificial tests. Whereas the Mac OS 8.0 version of Drive Setup will not run on 68030 machines, the version that bundles with Mac OS 8.1 and 8.5 does, as does the latest Drive Setup 1.9 release currently up on Apple's web site. I think they realized there were being jerks.

SoftMac users: SoftMac automatically supports the running of Mac OS 8 with 68030 Macintosh ROMs. You do not need to take any additional steps or install WishIWere to run Mac OS 8 provided that you are using at least 512K or larger Macintosh ROMs. In SoftMac 2000 8.0 we also added a fix that allows the Mac OS 8.0 version of Drive Setup to function correctly with the 68030 ROMs.

As far as Mac OS X, I have so far only heard rumors of people getting Mac OS X Public Beta to run on 64 meg PowerPC 604 based Macintosh computers. If someone would like to forward me more information about this, I will post the information here.

Overriding the minimum requirements of Windows Setup

Major major dirty little secret, something copied right out of Apple's playbook. Recent releases of Windows have a built in check in the SETUP program to prevent you from installing Windows on certain low end computers. Not because Windows won't run on those machines, but because Microsoft's marketing department has decided that Microsoft won't support those machines.

Windows 98 in particular raised the bar considerably, requiring a minimum of a 66 MHz 486 in order to install. Yes Windows 95 easily installed on 16, 20, 25, 33, and 50 MHz machines and even on older 386 machines. So why the sudden increase in hardware requirements?

Similarly, Windows Millennium now raises the bar even further, requiring no less than a 150 MHz Pentium based system. This is ridiculous! Windows 95, 98, and Millennium are all essentially the same operating system with the same kernel, and yet the requirements have been raised by a factor of 10. Why?

Apple pulled this same stunt with Mac OS 8, artificially raising the requirements to that of a 68040 based Mac, even through Mac OS 8 runs just fine on 68030 based machines! And with Mac OS X again, they're pulling the same stunt, claiming that a G3 or G4 processor is required, even though we've received reports from users running the Mac OS X beta just fine on 604 based systems. With Apple I can understand - they want to sell you the latest and greatest hardware and want to discourage people from using older machines.

But Microsoft is not a hardware company and doesn't make computers, so what is their motivation? As best as I can tell, it's strictly for product support reasons. They don't want to bother with those people running older slower machines because, gee, you might call up and complain that Windows is too slow!

I have heard that parts of the Windows 98 system depend on the a floating point co-processor being present and all Intel processors running at 66 MHz or faster are guaranteed to have an FPU present. This makes sense. But most 33 and 50 MHz 486 chips also have an FPU.

Fortunately, Microsoft does provide an override, documented vaguely in some beta releases of Windows. If when you run SETUP, you type "SETUP /nm" (the nm standing for No Minimum), it will not run the hardware check. It is using this switch that I've successfully installed Windows 98 and Windows 98 Second Edition on a number of 33 MHz 486 systems (yes, on my good old Dell machines as well) with no problems. And speed compared to Windows 95 isn't too bad, it's about the same.

With Millennium, I've installed it on a 16 megabyte 100 MHz Pentium system and it works just fine. That shoots down any rumors about Millennium requiring MMX technology (which does not exist in processors slower than 150 MHz) and again, as far as I can tell, it's mainly to shut up those customers who might complain about speed.

Millennium IS very slow at first, but once you disable the System Restore "feature", and once you limit the size of the disk cache, performance is only slightly worse on the 16 megabyte system than compared to using Windows 98.

When I get the chance I will test Millennium on a 486 to see if there are any Pentium specific dependencies. I'd love to hear from anyone that's already tried it.

Preparing for Windows XP - It is worth the upgrade!

After years of suffering, hundreds of millions of PC users around the world finally have a Windows upgrade to get excited about - Windows XP. Without any further delay, here are my Top Reasons to Upgrade to Windows XP:

It's Windows NT at a Windows 9x price ($99 upgrade) - While Windows NT has normally run about $300, XP will be sold at the usual Windows 9x prices - about $99 for an upgrade and $199 for a full version according to Amazon's price sheet. This also means that if Microsoft extends the same Windows 9x pricing to OEMs and system builders, you'll be able to buy a PC bundled with Windows XP for no extra cost than getting it with the horrible Windows Millennium.

ClearType - A technology Microsoft first showed about 2 or 3 years ago, it's finally in XP. Turn on ClearType and your text just becomes super smooth. ClearType is designed for LCD displays and takes advantage of the fact that an LCD display really has 3 physical pixels per screen pixel displayed and is thus able to render text at up to 3 times the clarity. I've used ClearType on my notebook computers and my desktops with the Silicon Graphics 1600SW displays, and what was already a clear display is even clearer. I can read a 7 point font from 2 or 3 feet away no problem. Remember those old Windows 3.1 line fonts? Ugh, how mankind has progressed in 10 years!

Hibernate works - From talking to other people, I am not the only person who has had trouble using the Suspend and Hibernate features in past releases of Windows. They just plain didn't work. Most of the time I'd hit the power button to wake up the machine and it would either reboot or do nothing. In Windows XP, Hibernate not only works, it is fast. A 256 megabyte PC hibernates in about 10 seconds. (hmmm, is that a benchmark?) It then takes all of another 10 seconds to wake it up (not including the time your PC's BIOS spends testing memory). Forget ever shutting down and restarting, it's so much quicker to just Hibernate the machine. For those not familiar with the feature, it is similar to Suspend or Sleep in earlier operating systems, but does not leave the machine powered on. All the RAM is dumped to hard disk and the PC does truly shut down. Then when you wake it up again, Windows XP simply loads in 10 seconds worth of saved memory and resumes from where you left off.

Automatic clock synchronization - Seems like a simple enough feature but why did it never appear before? Windows XP will now automatically sync up to the correct time using the Internet and do so on a daily basis. It is just a cool simple feature. I have my wall of flat screen monitors here on my desk and every single desktop is showing the same time and date to within a second of accuracy. Before, using Windows 98 or 2000, most of my PCs were several minutes out of sync with each other and I had a weekly ritual of setting the clocks on several dozen PCs around the office here.

Windows 9x system calls work - One of the big show stoppers with Windows 2000 was that it only implemented Windows NT system calls and not all Windows 95/98 system calls. This was one of the reasons many Windows 95 compatible programs broke on Windows NT and Windows 2000. In some cases, system calls did exist but didn't function, or were stubbed out. Even following Microsoft's guidelines to test for the availability of a given system call didn't work in all cases. As far as I can tell, XP implements everything from Windows 98.

Compatibility modes - To help with running older Windows apps, Windows XP now allows you to specify the compatibility mode to run for a certain application. This can be Windows 95, 98, NT, or 2000. This way an application that, for example, incorrectly detects the Windows version and can't handle a version 5.1, or incorrectly handles Windows NT system calls, can now be told that it's running on, for example, Windows 95. Way cool. This is what Windows 2000 was badly missing.

System Restore works - Not only can you FIND the option for disabling System Restore (it's right in the My Computer Properties dialog now), but you can also turn it on and off on an individual drive letter basis, and you can cleanse the hard disk of old restore files. All that horrible junk I outline above about turning off System Restore in Windows Millennium goes away!

Plug And Play works - Another Windows 95 feature that never quite worked before that truly seems to work now is Plug And Play. Out of about two dozen PCs that I have personally installed Windows XP on, I have only had two minor problems - my Sony VAIO palm computer required me to manually download the custom ATI video driver from Sony's web site in order to take advantage of the 1024x480 video mode, and my Gateway Solo notebook required that I download the modem driver from Gateway's web site. Other than that, every device on every computer (Dell, Gateway, Compaq, custom built, Pentium III, Athlon, Pentium 4, Transmeta Crusoe, Celeron, you name it) installed automatically.

Virtual Memory can be shut off - A feature that transferred over from Windows 9x. In the past, the Windows NT kernel has always required a swap file on hard disk. Even if you have 1 gigabyte of RAM in your PC, NT will still create a default 20 megabyte swap file, and usually much larger. This wastes disk space (as anything above 128 megabytes you can pretty much run without virtual memory) and on notebook computers causes unnecessary disk spin-ups and disk activity which waste battery power. With Windows XP, I can shut off the swap file. On my Gateway Solo notebook which has 288 megabytes of RAM, I've been running with no swap file for months and the machine stays nice and quite while the hard drive stays off.

Security - One of the biggest reasons there are so many denial of service attacks on the Internet is because of high speed cable modems and Windows 98. Back in 1998, Microsoft added a Web Publishing feature to Windows 98, to make it "easy" to publish files to the web and to web sites. What it really did under the hood was simply share out your entire hard disk over your Internet connection, leaving your PC wide open for hacker intrusion. With the popularity of DSL and cable modems, millions of people even today unknowingly share out their machines. While this threat has been known about for several years, the DSL and cable providers do a poor job of alerting their customers to this security threat. A great series of articles appears on the web site of Gibson Research about such attacks. Windows 95, 98, and Me simply do not have a lot of security. Anyone with a high speed Internet connection really should be running a form of Windows NT. Windows XP adds a built software firewall which is great for those people who don't spend the $150 on a hardware firewall.

Remote Desktop and Remote Assistance - These are just the coolest features and I didn't even know about them until a few weeks ago! Anyone who's ever used third party remote access software knows the benefit of being able to remotely log into and use a machine that's in another room. Or as in my case, you have a stack of 20 PCs next your office desk and don't wish to use 20 monitors or a 20-way monitor switcher. With Remote Desktop, you can log in to another Windows XP machine and have its desktop on your machine's desktop. Either overlapping or each running in full screen mode. This is not unlike using emulation software. This feature was called "Terminal Services" in past versions of Windows NT, but had limitations and was only available in the expensive Server Edition. In Windows XP, it is available in all editions, and not only are keyboard, video, and mouse movements sent over the wire, so is sound, and even local disk access. The Remote Assistance feature is similar, allowing both the remote and the local computer users to simultaneously interact on the same desktop.

Fast User Switching - This is redundant because what Microsoft advertises as a separate feature is really just a variation of Remote Desktop. With Fast User Switching, multiple users can log in to the same machine without logging out the other users. Simply press Windows+L to switch between users. Each user maintains their own desktop settings and files.

PCs to run Windows XP are cheap - Thanks in part to the Intel Pentium 4 fiasco, the AMD vs. Intel price war, the Dell vs. Gateway price war, the SDRAM vs. RDRAM war, a glut of all RAM, and a bad economy, the price of PCs has dropped ridiculously low this year. Two years ago you'd be happy to get a 400 MHz Pentium II machine with 64 megabytes of RAM for $3000. Last summer a 900 MHz PC with 128 megabytes of RAM ran you about $1600. Today, a 1+ GHz PC with 256 megabytes of RAM (OVERKILL FOR RUNNING WINDOWS XP) runs about $800. PCs have doubled in speed and halved in price each of the last few years. Even the lowest cost PCs, (such as 128 megabyte Celeron machines selling for $400 today) are adequate to run Windows XP Home Edition just fine. Bad economy and competition are good PC buyers.

Multi-processor support - Even a year ago, the thought of owning a dual processor PC was beyond the reach of most consumers. Just earlier this year, a dual processor Pentium III Xeon workstation from Dell cost over $6000. Today, a dual processor Athlon or Pentium 4 machine with 256 megabytes of RAM and 60 gig hard disk runs about $2500. Dirt cheap as far as dual-processor machines go. Windows XP supports dual processors in the Professional and Server Editions, just as Window NT always had, which opens a whole new door to people used to being stick with Window 95 and single processor. Dual processors means you can run two applications at once with no speed loss, and you also get faster performance from the Windows desktop since it can run on a separate processor from whatever application is trying to hog the CPU. Once you have two, you'll never want one processor again.

There you have it. Fourteen reasons why if you are running Windows 98 on a Pentium III today, you should upgrade to Windows XP.

Once you have Windows XP, you may be disoriented by the new look of the desktop. Don't worry, it's actually the same old desktop hiding underneath but with a few new tricks. I've put together a 60 minute Windows XP Tutorial to get your oriented. Whether you just took Windows XP out of the box, or you are still thinking about it, you should definitely read the 60 Minute Windows XP Tutorial.

Computer - Wikipedia, the free encyclopedia

A computer is a machine for manipulating data according to a list of instructions.

Computers take numerous physical forms. Early electronic computers were the size of a large room, consuming as much power as several hundred modern personal computers. [1] Today, computers can be made small enough to fit into a wrist watch and be powered from a watch battery. Society has come to recognize personal computers and their portable equivalent, the laptop computer, as icons of the information age; they are what most people think of as "a computer". However, the most common form of computer in use today is by far the embedded computer. Embedded computers are small, simple devices that are often used to control other devices—for example, they may be found in machines ranging from fighter aircraft to industrial robots, digital cameras, and even children's toys.

A computer in a wristwatch.
A computer in a wristwatch.

The ability to store and execute programs makes computers extremely versatile and distinguishes them from calculators. The Church–Turing thesis is a mathematical statement of this versatility: Any computer with a certain minimum capability is, in principle, capable of performing the same tasks that any other computer can perform. Therefore, computers with capability and complexity ranging from that of a personal digital assistant to a supercomputer are all able to perform the same computational tasks as long as time and storage capacity are not considerations.

Contents

[hide]

History of computing

Main article: History of computing
The Jacquard loom was one of the first programmable devices.
The Jacquard loom was one of the first programmable devices.

It is difficult to define any one device as the earliest computer. The very definition of a computer has changed and it is therefore impossible to identify the first computer. Many devices once called "computers" would no longer qualify as such by today's standards.

Originally, the term "computer" referred to a person who performed numerical calculations (a human computer), often with the aid of a mechanical calculating device. Examples of early mechanical computing devices included the abacus, the slide rule and arguably the astrolabe and the Antikythera mechanism (which dates from about 150-100 BC). The end of the Middle Ages saw a re-invigoration of European mathematics and engineering, and Wilhelm Schickard's 1623 device was the first of a number of mechanical calculators constructed by European engineers.

However, none of those devices fit the modern definition of a computer because they could not be programmed. In 1801, Joseph Marie Jacquard made an improvement to the textile loom that used a series of punched paper cards as a template to allow his loom to weave intricate patterns automatically. The resulting Jacquard loom was an important step in the development of computers because the use of punched cards to define woven patterns can be viewed as an early, albeit limited, form of programmability.

In 1837, Charles Babbage was the first to conceptualize and design a fully programmable mechanical computer that he called "The Analytical Engine".[2] Due to limited finance, and an inability to resist tinkering with the design, Babbage never actually built his Analytical Engine.

Large-scale automated data processing of punched cards was performed for the US Census in 1890 by tabulating machines designed by Herman Hollerith and manufactured by the Computing Tabulating Recording Corporation, which later became IBM. By the end of the 19th century a number of technologies that would later prove useful in the realization of practical computers had begun to appear: the punched card, boolean algebra, the vacuum tube (thermionic valve) and the teleprinter.

During the first half of the 20th century, many scientific computing needs were met by increasingly sophisticated analog computers, which used a direct mechanical or electrical model of the problem as a basis for computation. However, these were not programmable and generally lacked the versatility and accuracy of modern digital computers.

Defining characteristics of five first operative digital computers
Computer Shown working Binary Electronic Programmable Turing complete
Zuse Z3 May 1941 Yes No By punched film stock Yes (1998)
Atanasoff-Berry Computer Summer 1941 Yes Yes No No
Colossus December 1943 / January 1944 Yes Yes Partially, by rewiring No
Harvard Mark I/IBM ASCC 1944 No No By punched paper tape No
ENIAC 1944 No Yes Partially, by rewiring Yes
1948 No Yes By Function Table ROM Yes


A succession of steadily more powerful and flexible computing devices were constructed in the 1930s and 1940s, gradually adding the key features that are seen in modern computers. The use of digital electronics (largely invented by Claude Shannon in 1937) and more flexible programmability were vitally important steps, but defining one point along this road as "the first digital electronic computer" is difficult (Shannon 1940). Notable achievements include:

EDSAC was one of the first computers to implement the stored program (von Neumann) architecture.
EDSAC was one of the first computers to implement the stored program (von Neumann) architecture.
  • Konrad Zuse's electromechanical "Z machines". The Z3 (1941) was the first working machine featuring binary arithmetic, including floating point arithmetic and a measure of programmability. In 1998 the Z3 was proved to be Turing complete, therefore being the world's first operational computer.
  • The Atanasoff-Berry Computer (1941) which used vacuum tube based computation, binary numbers, and regenerative capacitor memory.
  • The secret British Colossus computer (1944), which had limited programmability but demonstrated that a device using thousands of tubes could be reasonably reliable and electronically reprogrammable. It was used for breaking German wartime codes.
  • The Harvard Mark I (1944), a large-scale electromechanical computer with limited programmability.
  • The US Army's Ballistics Research Laboratory ENIAC (1946), which used decimal arithmetic and was the first general purpose electronic computer, although it initially had an inflexible architecture which essentially required rewiring to change its programming.

Several developers of ENIAC, recognizing its flaws, came up with a far more flexible and elegant design, which came to be known as the stored program architecture or von Neumann architecture. This design was first formally described by John von Neumann in the paper "First Draft of a Report on the EDVAC", published in 1945. A number of projects to develop computers based on the stored program architecture commenced around this time, the first of these being completed in Great Britain. The first to be demonstrated working was the Manchester Small-Scale Experimental Machine (SSEM) or "Baby". However, the EDSAC, completed a year after SSEM, was perhaps the first practical implementation of the stored program design. Shortly thereafter, the machine originally described by von Neumann's paper—EDVAC—was completed but didn't see full-time use for an additional two years.

Nearly all modern computers implement some form of the stored program architecture, making it the single trait by which the word "computer" is now defined. By this standard, many earlier devices would no longer be called computers by today's definition, but are usually referred to as such in their historical context. While the technologies used in computers have changed dramatically since the first electronic, general-purpose computers of the 1940s, most still use the von Neumann architecture. The design made the universal computer a practical reality.

Microprocessors are miniaturized devices that often implement stored program CPUs.
Microprocessors are miniaturized devices that often implement stored program CPUs.

Vacuum tube-based computers were in use throughout the 1950s, but were largely replaced in the 1960s by transistor-based devices, which were smaller, faster, cheaper, used less power and were more reliable. These factors allowed computers to be produced on an unprecedented commercial scale. By the 1970s, the adoption of integrated circuit technology and the subsequent creation of microprocessors such as the Intel 4004 caused another leap in size, speed, cost and reliability. By the 1980s, computers had become sufficiently small and cheap to replace simple mechanical controls in domestic appliances such as washing machines. Around the same time, computers became widely accessible for personal use by individuals in the form of home computers and the now ubiquitous personal computer. In conjunction with the widespread growth of the Internet since the 1990s, personal computers are becoming as common as the television and the telephone and almost all modern electronic devices contain a computer of some kind.

Stored program architecture

The defining feature of modern computers which distinguishes them from all other machines is that they can be programmed. That is to say that a list of instructions (the program) can be given to the computer and it will store them and carry them out at some time in the future.

In most cases, computer instructions are simple: add one number to another, move some data from one location to another, send a message to some external device, etc. These instructions are read from the computer's memory and are generally carried out (executed) in the order they were given. However, there are usually specialized instructions to tell the computer to jump ahead or backwards to some other place in the program and to carry on executing from there. These are called "jump" instructions (or branches). Furthermore, jump instructions may be made to happen conditionally so that different sequences of instructions may be used depending on the result of some previous calculation or some external event. Many computers directly support subroutines by providing a type of jump that "remembers" the location it jumped from and another instruction to return to that point.

Program execution might be likened to reading a book. While a person will normally read each word and line in sequence, they may at times jump back to an earlier place in the text or skip sections that are not of interest. Similarly, a computer may sometimes go back and repeat the instructions in some section of the program over and over again until some internal condition is met. This is called the flow of control within the program and it is what allows the computer to perform tasks repeatedly without human intervention.

Comparatively, a person using a pocket calculator can perform a basic arithmetic operation such as adding two numbers with just a few button presses. But to add together all of the numbers from 1 to 1,000 would take thousands of button presses and a lot of time—with a near certainty of making a mistake. On the other hand, a computer may be programmed to do this with just a few simple instructions. For example:

        mov      #0,sum     ; set sum to 0
mov #1,num ; set num to 1
loop: add num,sum ; add num to sum
add #1,num ; add 1 to num
cmp num,#1000 ; compare num to 1000
ble loop ; if num <= 1000, go back to 'loop'
halt ; end of program. stop running

Once told to run this program, the computer will perform the repetitive addition task without further human intervention. It will almost never make a mistake and a modern PC can complete the task in about a millionth of a second.[3]

However, computers cannot "think" for themselves in the sense that they only solve problems in exactly the way they are programmed to. An intelligent human faced with the above addition task might soon realize that instead of actually adding up all the numbers one can simply use the equation

1+2+3+...+n = {{n(n+1)} \over 2}

and arrive at the correct answer (500,500) with little work. [4] In other words, a computer programmed to add up the numbers one by one as in the example above would do exactly that without regard to efficiency or alternative solutions.

Programs

A 1970s punched card containing one line from a FORTRAN program. The card reads: "Z(1) = Y + W(1)" and is labelled "PROJ039" for identification purposes.
A 1970s punched card containing one line from a FORTRAN program. The card reads: "Z(1) = Y + W(1)" and is labelled "PROJ039" for identification purposes.

In practical terms, a computer program might include anywhere from a dozen instructions to many millions of instructions for something like a word processor or a web browser. A typical modern computer can execute billions of instructions every second and nearly never make a mistake over years of operation.

Large computer programs may take teams of computer programmers years to write and the probability of the entire program having been written completely in the manner intended is unlikely. Errors in computer programs are called bugs. Sometimes bugs are benign and do not affect the usefulness of the program, in other cases they might cause the program to completely fail (crash), in yet other cases there may be subtle problems. Sometimes otherwise benign bugs may be used for malicious intent, creating a security exploit. Bugs are usually not the fault of the computer. Since computers merely execute the instructions they are given, bugs are nearly always the result of programmer error or an oversight made in the program's design. [5]

In most computers, individual instructions are stored as machine code with each instruction being given a unique number (its operation code or opcode for short). The command to add two numbers together would have one opcode, the command to multiply them would have a different opcode and so on. The simplest computers are able to perform any of a handful of different instructions, the more complex computers have several hundred to choose from—each with a unique numerical code. Since the computer's memory is able to store numbers, it can also store the instruction codes. This leads to the important fact that entire programs (which are just lists of instructions) can be represented as lists of numbers and can themselves be manipulated inside the computer just as if they were numeric data. The fundamental concept of storing programs in the computer's memory alongside the data they operate on is the crux of the von Neumann, or stored program, architecture. In some cases, a computer might store some or all of its program in memory that is kept separate from the data it operates on. This is called the Harvard architecture after the Harvard Mark I computer. Modern von Neumann computers display some traits of the Harvard architecture in their designs, such as in CPU caches.

While it is possible to write computer programs as long lists of numbers (machine language) and this technique was used with many early computers,[6] it is extremely tedious to do so in practice, especially for complicated programs. Instead, each basic instruction can be given a short name that is indicative of its function and easy to remember—a mnemonic such as ADD, SUB, MULT or JUMP. These mnemonics are collectively known as a computer's assembly language. Converting programs written in assembly language into something the computer can actually understand (machine language) is usually done by a computer program called an assembler. Machine languages and the assembly languages that represent them (collectively termed low-level programming languages) tend to be unique to a particular type of computer. This means that an ARM architecture computer (such as may be found in a PDA or a hand-held videogame) cannot understand the machine language of an Intel Pentium or the AMD Athlon 64 computer that might be in a PC.[7]

Though considerably easier than in machine language, writing long programs in assembly language is often difficult and error prone. Therefore, most complicated programs are written in more abstract high-level programming languages that are able to express the needs of the computer programmer more conveniently (and thereby help reduce programmer error). High level languages are usually "compiled" into machine language (or sometimes into assembly language and then into machine language) using another computer program called a compiler.[8] Since high level languages are more abstract than assembly language, it is possible to use different compilers to translate the same high level language program into the machine language of many different types of computer. This is part of the means by which software like video games may be made available for different computer architectures such as personal computers and various video game consoles.

The task of developing large software systems is an immense intellectual effort. It has proven, historically, to be very difficult to produce software with an acceptably high reliability, on a predictable schedule and budget. The academic and professional discipline of software engineering concentrates specifically on this problem.

Example

A traffic light showing red.
A traffic light showing red.

Suppose a computer is being employed to drive a traffic light. A simple stored program might say:

  1. Turn off all of the lights
  2. Turn on the red light
  3. Wait for sixty seconds
  4. Turn off the red light
  5. Turn on the green light
  6. Wait for sixty seconds
  7. Turn off the green light
  8. Turn on the amber light
  9. Wait for two seconds
  10. Turn off the amber light
  11. Jump to instruction number (2)

With this set of instructions, the computer would cycle the light continually through red, green, amber and back to red again until told to stop running the program.

However, suppose there is a simple on/off switch connected to the computer that is intended be used to make the light flash red while some maintenance operation is being performed. The program might then instruct the computer to:

  1. Turn off all of the lights
  2. Turn on the red light
  3. Wait for sixty seconds
  4. Turn off the red light
  5. Turn on the green light
  6. Wait for sixty seconds
  7. Turn off the green light
  8. Turn on the amber light
  9. Wait for two seconds
  10. Turn off the amber light
  11. If the maintenance switch is NOT turned on then jump to instruction number 2
  12. Turn on the red light
  13. Wait for one second
  14. Turn off the red light
  15. Wait for one second
  16. Jump to instruction number 11

In this manner, the computer is either running the instructions from number (2) to (11) over and over or it's running the instructions from (11) down to (16) over and over, depending on the position of the switch.[9]

How computers work

A general purpose computer has four main sections: the arithmetic and logic unit (ALU), the control unit, the memory, and the input and output devices (collectively termed I/O). These parts are interconnected by busses, often made of groups of wires.

The control unit, ALU, registers, and basic I/O (and often other hardware closely linked with these) are collectively known as a central processing unit (CPU). Early CPUs were comprised of many separate components but since the mid-1970s CPUs have typically been constructed on a single integrated circuit called a microprocessor.

Control unit

Main articles: CPU design and Control unit

The control unit (often called a control system or central controller) directs the various components of a computer. It reads and interprets (decodes) instructions in the program one by one. The control system decodes each instruction and turns it into a series of control signals that operate the other parts of the computer.[10] Control systems in advanced computers may change the order of some instructions so as to improve performance.

A key component common to all CPUs is the program counter, a special memory cell (a register) that keeps track of which location in memory the next instruction is to be read from.[11]

Diagram showing how a particular MIPS architecture instruction would be decoded by the control system.
Diagram showing how a particular MIPS architecture instruction would be decoded by the control system.

The control system's function is as follows—note that this is a simplified description and some of these steps may be performed concurrently or in a different order depending on the type of CPU:

  1. Read the code for the next instruction from the cell indicated by the program counter.
  2. Decode the numerical code for the instruction into a set of commands or signals for each of the other systems.
  3. Increment the program counter so it points to the next instruction.
  4. Read whatever data the instruction requires from cells in memory (or perhaps from an input device). The location of this required data is typically stored within the instruction code.
  5. Provide the necessary data to an ALU or register.
  6. If the instruction requires an ALU or specialized hardware to complete, instruct the hardware to perform the requested operation.
  7. Write the result from the ALU back to a memory location or to a register or perhaps an output device.
  8. Jump back to step (1).

Since the program counter is (conceptually) just another set of memory cells, it can be changed by calculations done in the ALU. Adding 100 to the program counter would cause the next instruction to be read from a place 100 locations further down the program. Instructions that modify the program counter are often known as "jumps" and allow for loops (instructions that are repeated by the computer) and often conditional instruction execution (both examples of control flow).

It is noticeable that the sequence of operations that the control unit goes through to process an instruction is in itself like a short computer program - and indeed, in some more complex CPU designs, there is another yet smaller computer called a microsequencer that runs a microcode program that causes all of these events to happen.

Arithmetic/logic unit (ALU)

Main article: Arithmetic logic unit

The ALU is capable of performing two classes of operations: arithmetic and logic.

The set of arithmetic operations that a particular ALU supports may be limited to adding and subtracting or might include multiplying or dividing, trigonometry functions (sine, cosine, etc) and square roots. Some can only operate on whole numbers (integers) whilst others use floating point to represent real numbers—albeit with limited precision. However, any computer that is capable of performing just the simplest operations can be programmed to break down the more complex operations into simple steps that it can perform. Therefore, any computer can be programmed to perform any arithmetic operation—although it will take more time to do so if its ALU does not directly support the operation. An ALU may also compare numbers and return boolean truth values (true or false) depending on whether one is equal to, greater than or less than the other ("is 64 greater than 65?").

Logic operations involve boolean logic: AND, OR, XOR and NOT. These can be useful both for creating complicated conditional statements and processing boolean logic.

Superscalar computers contain multiple ALUs so that they can process several instructions at the same time. Graphics processors and computers with SIMD and MIMD features often provide ALUs that can perform arithmetic on vectors and matrices.

Memory

Main article: Computer storage
Magnetic core memory was popular main memory for computers through the 1960s until it was completely replaced by semiconductor memory.
Magnetic core memory was popular main memory for computers through the 1960s until it was completely replaced by semiconductor memory.

A computer's memory may be viewed as a list of cells into which numbers may be placed or read. Each cell has a numbered "address" and can store a single number. The computer may be instructed to "put the number 123 into the cell numbered 1357" or to "add the number that is in cell 1357 to the number that is in cell 2468 and put the answer into cell 1595". The information stored in memory may represent practically anything. Letters, numbers, even computer instructions may be placed into memory with equal ease. Since the CPU does not differentiate between different types of information, it is up to the software to give significance to what the memory sees as nothing but a series of numbers.

In almost all modern computers, each memory cell is set up to store binary numbers in groups of eight bits (called a byte). Each byte is able to represent 256 different numbers; either from 0 to 255 or -128 to +127. To store larger numbers, several consecutive bytes may be used (typically, two, four or eight). When negative numbers are required, they are usually stored in two's complement notation. Other arrangements are possible, but are usually not seen outside of specialized applications or historical contexts. A computer may store any kind of information in memory as long as it can be somehow represented in numerical form. Modern computers have billions or even trillions of bytes of memory.

The CPU contains a special set of memory cells called registers that can be read and written to much more rapidly than the main memory area. There are typically between two and one hundred registers depending on the type of CPU. Registers are used for the most frequently needed data items to avoid having to access main memory every time data is needed. Since data is constantly being worked on, reducing the need to access main memory (which is often slow compared to the ALU and control units) greatly increases the computer's speed.

Computer main memory comes in two principal varieties: random access memory or RAM and read-only memory or ROM. RAM can be read and written to anytime the CPU commands it, but ROM is pre-loaded with data and software that never changes, so the CPU can only read from it. ROM is typically used to store the computer's initial start-up instructions. In general, the contents of RAM is erased when the power to the computer is turned off while ROM retains its data indefinitely. In a PC, the ROM contains a specialized program called the BIOS that orchestrates loading the computer's operating system from the hard disk drive into RAM whenever the computer is turned on or reset. In embedded computers, which frequently do not have disk drives, all of the software required to perform the task may be stored in ROM. Software that is stored in ROM is often called firmware because it is notionally more like hardware than software. Flash memory blurs the distinction between ROM and RAM by retaining data when turned off but being rewritable like RAM. However, flash memory is typically much slower than conventional ROM and RAM so its use is restricted to applications where high speeds are not required. [12]

In more sophisticated computers there may be one or more RAM cache memories which are slower than registers but faster than main memory. Generally computers with this sort of cache are designed to move frequently needed data into the cache automatically, often without the need for any intervention on the programmer's part.

Input/output (I/O)

Main article: Input/output
Hard disks are common I/O devices used with computers.
Hard disks are common I/O devices used with computers.

I/O is the means by which a computer receives information from the outside world and sends results back. Devices that provide input or output to the computer are called peripherals. On a typical personal computer, peripherals include inputs like the keyboard and mouse, and outputs such as the display and printer. Hard disks, floppy disks and optical discs serve as both inputs and outputs. Computer networking is another form of I/O.

Practically any device that can be made to interface digitally may be used as I/O. The computer in the Engine Control Unit of a modern automobile might read the position of the pedals and steering wheel, the output of the oxygen sensor and devices that monitor the speed of each wheel. The output devices include the various lights and gauges that the driver sees as well as the engine controls such as the spark ignition circuits and fuel injection systems. In a digital wristwatch, the computer reads the buttons and causes numbers and symbols to be shown on the liquid crystal display.

Often, I/O devices are complex computers in their own right with their own CPU and memory. A graphics processing unit might contain fifty or more tiny computers that perform the calculations necessary to display 3D graphics. Modern desktop computers contain many smaller computers that assist the main CPU in performing I/O.

Multitasking

Main article: Computer multitasking

While a computer may be viewed as running one gigantic program stored in its main memory, in some systems it is necessary to give the appearance of running several programs simultaneously. This is achieved by having the computer switch rapidly between running each program in turn. One means by which this is done is with a special signal called an interrupt which can periodically cause the computer to stop executing instructions where it was and do something else instead. By remembering where it was executing prior to the interrupt, the computer may return to that task later. If several programs are running "at the same time", then the interrupt generator may be causing several hundred interrupts per second, causing a program switch each time. Since modern computers typically execute instructions several orders of magnitude faster than human perception, many programs may seem to be running at the same time even though only one is ever executing in any given instant. This method of multitasking is sometimes termed "time-sharing" since each program is allocated a "slice" of time in turn.

Before the era of cheap computers, the principle use for multitasking was to allow many people to share the same computer.

Seemingly, multitasking would cause a computer that is switching between several programs to run more slowly - in direct proportion to the number of programs it is running. However, most programs spend much of their time waiting for slow input/output devices to complete their tasks. If a program is waiting for the user to click on the mouse or press a key on the keyboard, then it will not take a "time slice" until the event it is waiting for has occurred. This frees up time for other programs to execute so that many programs may be run at the same time without unacceptable speed loss.

Multiprocessing

Main article: Multiprocessing
Cray designed many supercomputers that used multiprocessing heavily.
Cray designed many supercomputers that used multiprocessing heavily.

Some computers may divide their work between one or more separate CPUs, creating a multiprocessing configuration. Traditionally, this technique was utilized only in large and powerful computers such as supercomputers, mainframe computers and servers. However, multiprocessor and multi-core (multiple CPUs on a single integrated circuit) personal and laptop computers have become widely available and are beginning to see increased usage in lower-end markets as a result.

Supercomputers in particular often have highly unique architectures that differ significantly from the basic stored-program architecture and from general purpose computers.[13] They often feature thousands of CPUs, customized high-speed interconnects, and specialized computing hardware. Such designs tend to be useful only for specialized tasks due to the large scale of program organization required to successfully utilize most of a the available resources at once. Supercomputers usually see usage in large-scale simulation, graphics rendering, and cryptography applications, as well as with other so-called "embarrassingly parallel" tasks.

Networking and the Internet

Main articles: Computer networking and Internet
Visualization of a portion of the routes on the Internet.
Visualization of a portion of the routes on the Internet.

Computers have been used to coordinate information in multiple locations since the 1950s, with the US military's SAGE system the first large-scale example of such a system, which led to a number of special-purpose commercial systems like Sabre.

In the 1970s, computer engineers at research institutions throughout the US began to link their computers together using telecommunications technology. This effort was funded by ARPA (now DARPA), and the computer network that it produced was called the ARPANET. The technologies that made the Arpanet possible spread and evolved. In time, the network spread beyond academic and military institutions and became known as the Internet. The emergence of networking involved a redefinition of the nature and boundaries of the computer. In the words of John Gage and Bill Joy (of Sun Microsystems), "the network is the computer". Computer operating systems and applications were modified to include the ability to define and access the resources of other computers on the network, such as peripheral devices, stored information, and the like, as extensions of the resources of an individual computer. Initially these facilities were available primarily to people working in high-tech environments, but in the 1990s the spread of applications like e-mail and the World Wide Web, combined with the development of cheap, fast networking technologies like Ethernet and ADSL saw computer networking become ubiquitous almost everywhere. In fact, the number of computers that are networked is growing phenomenally. A very large proportion of personal computers regularly connect to the Internet to communicate and receive information. "Wireless" networking, often utilizing mobile phone networks, has meant networking is becoming increasingly ubiquitous even in mobile computing environments.

Further topics

Hardware

The term hardware covers all of those parts of a computer that are tangible objects. Circuits, displays, power supplies, cables, keyboards, printers and mice are all hardware.

History of computing hardware
First Generation (Mechanical/Electromechanical) Calculators Antikythera mechanism, Difference Engine, Norden bombsight
Programmable Devices Jacquard loom, Analytical Engine, Harvard Mark I, Z3
Second Generation (Vacuum Tubes) Calculators Atanasoff-Berry Computer
Programmable Devices ENIAC, EDSAC, EDVAC, UNIVAC I
Third Generation (Discrete transistors and SSI, MSI, LSI Integrated circuits) Mainframes System/360, BUNCH
Minicomputer PDP-8, PDP-11, System/32, System/36
Fourth Generation (VLSI integrated circuits) Minicomputer VAX, AS/400
4-bit microcomputer Intel 4004, Intel 4040
8-bit microcomputer Intel 8008, Intel 8080, Motorola 6800, Motorola 6809, MOS Technology 6502, Zilog Z80
16-bit microcomputer 8088, Zilog Z8000, WDC 65816/65802
32-bit microcomputer 80386, Pentium, 68000, ARM architecture
64-bit microcomputer [14] x86-64, PowerPC, MIPS, SPARC
Embedded computer 8048, 8051
Personal computer Desktop computer, Home computer, Laptop computer, Personal digital assistant (PDA), Portable computer, Tablet computer, Wearable computer
Server class computer
Theoretical/experimental Quantum computer
Chemical computer
DNA computing
Optical computer
Other Hardware Topics
Peripheral device (Input/output) Input Mouse, Keyboard, Joystick, Image scanner
Output Monitor, Printer
Both Floppy disk drive, Hard disk, Optical disc drive, Teleprinter
Computer busses Short range RS-232, SCSI, PCI, USB
Long range (Computer networking) Ethernet, ATM, FDDI

Software

Software refers to parts of the computer that have no material form; programs, data, protocols, etc are all software. When software is stored in hardware that cannot easily be modified (such as BIOS ROM in an IBM PC compatible), it is sometimes termed firmware to indicate that it falls into an area of uncertainty between hardware and software.

Computer software
Operating system Unix/BSD UNIX System V, AIX, HP-UX, Solaris (SunOS), FreeBSD, NetBSD, IRIX
GNU/Linux List of Linux distributions, Comparison of Linux distributions
Microsoft Windows Windows 9x, Windows NT, Windows CE
DOS QDOS, PC-DOS, MS-DOS, FreeDOS
Mac OS Mac OS classic, Mac OS X
Embedded and real-time List of embedded operating systems
Experimental Amoeba, Oberon/Bluebottle, Plan 9 from Bell Labs
Library Multimedia DirectX, OpenGL, OpenAL
Programming library C standard library
Data Protocol TCP/IP, Kermit, FTP, HTTP, SMTP
File format HTML, XML, JPEG, MPEG, PNG
User interface Graphical user interface (WIMP) Microsoft Windows, GNOME, QNX Photon, CDE, GEM
Text user interface Command line interface, shells
Other
Application Office suite Word processing, Desktop publishing, Presentation program, Database management system, Scheduling & Time management, Spreadsheet, Accounting software
Internet Access Browser, E-mail client, Web server, Mail transfer agent, Instant messaging
Design and manufacturing Computer-aided design, Computer-aided manufacturing, Plant management, Robotic manufacturing, Supply chain management
Graphics Raster graphics editor, Vector graphics editor, 3D modeler, Animation editor, 3D computer graphics, Video editing, Image processing
Audio Digital audio editor, Audio playback, Mixing, Audio synthesis, Computer music
Software Engineering Compiler, Assembler, Interpreter, Debugger, Text Editor, Integrated development environment, Performance analysis, Revision control, Software configuration management
Educational Edutainment, Educational game, Serious game, Flight simulator
Games Strategy, Arcade, Puzzle, Simulation, First-person shooter, Platform, Massively multiplayer, Interactive fiction
Misc Artificial intelligence, Antivirus software, Malware scanner, Installer/Package management systems, File manager

Programming languages

Programming languages provide various ways of specifying programs for computers to run. Unlike natural languages, programming languages are designed to permit no ambiguity and to be concise. They are purely written languages and are often difficult to read aloud. They are generally either translated into machine language by a compiler or an assembler before being run, or translated directly at run time by an interpreter. Sometimes programs are executed by a hybrid method of the two techniques. There are thousands of different programming languages—some intended to be general purpose, others useful only for highly specialized applications.

Programming Languages
Lists of programming languages Timeline of programming languages, Categorical list of programming languages, Generational list of programming languages, Alphabetical list of programming languages, List of esoteric programming languages, Non-English-based programming languages
Commonly used Assembly languages ARM, MIPS, x86
Commonly used High level languages BASIC, C, C++, C#, COBOL, Fortran, Java, Lisp, Pascal
Commonly used Scripting languages JavaScript, Python, Ruby, PHP, Perl

Professions and organizations

As the use of computers has spread throughout society, there are an increasing number of careers involving computers. Following the theme of hardware, software and firmware, the brains of people who work in the industry are sometimes known irreverently as wetware or "meatware".

Computer-related professions
Hardware-related Electrical engineering, Electronics engineering, Computer engineering, Telecommunications engineering, Optical engineering, Nanoscale engineering
Software-related Human-computer interaction, Information technology, Software engineering, Scientific computing, Web design, Desktop publishing, Sound recording and reproduction

The need for computers to work well together and to be able to exchange information has spawned the need for many standards organizations, clubs and societies of both a formal and informal nature.

Organizations
Standards groups ANSI, IEC, IEEE, IETF, ISO, W3C
Professional Societies ACM, ACM Special Interest Groups, IET, IFIP
Free/Open source software groups Free Software Foundation, Mozilla Foundation, Apache Software Foundation

windows 98 image 1

windows 98 image 1
windows 98 starting up...

About Me

My photo
I like making funny videos! See my website @ http://www.fancyshowproductions.com/