By now, you should know about useful resources where you can find information you need. And you have trained yourself to think logically and to visualize your ideas. So, should you start picking a programming language now?
Nope! It is still a bit too soon, although it doesn’t hurt to look around a bit. No, you need to build up your knowledge first and decide on which platform you would actually want to start developing.
To begin, you could decide to start developing on mainframe systems. Mainframes have been in use by large organizations and often require specialized personnel to operate them. Learning to use these systems is difficult since you can’t easily buy one to train at home. These are the Behemoths of computing, the Goliaths in a world full of dwarves. And some of them are quite antique and have already been in use for decades.
This is also where computing meets archeology since mainframes need to be extremely strict in backward compatibility. The systems of today might still be running software that was created 30 years ago.
Modern mainframes can run multiple operating systems using virtualization so it is possible to install Windows or Linux inside such virtual machine. But there are several operating systems that have been created to run on mainframes and most of them are very similar to Unix. IBM actually supports Linux on their mainframes. So learning to work with mainframes isn’t that difficult anymore. But in this field, you need to have good skills to manage a mainframe system.
Mainframes are still very popular in large financial organisations like banks because they’re made to handle huge amounts of data.
A second group of computers would be the Supercomputers. Here too we would be dealing with specialized hardware that require well-trained experts to handle it. With modern supercomputers you’re actually dealing with a machine that contains thousands of processors that will run instructions parallel to speed up their calculations. These machines are created to make a huge amount of calculations, where mainframes were made to handle huge amounts of data.
Supercomputers are especially useful in environments where you need to make complex calculations. For example, for weather forecasts and molecular modeling, a supercomputer happens to be an excellent tool.
They also make extremely powerful chess engines!
Supercomputers used to have proprietary operating systems but are also moving towards using Linux. Since Linux is an open-source operating system, it has become a very popular choice too.
Home Computers and Apple
About four decades ago, most computers were still mainframes or supercomputers. Having a computer at home was not considered very useful since computers were quite difficult to use and needed experts to handle them. So, not many people considered the option to start building cheaper models for people to use at home, except for a few hobbyists who liked to tinker with electronics.
When Apple was founded by Jobs, Wozniak and Wayne in 1976, no one really expected that the computer they had designed would become so popular. And while the first Apple I kits were still hand-build by Wozniak, it didn’t take long before this inexpensive machine became popular and encouraged other companies to also design similar, cheap computers. Brands like Commodore, Atari and Sinclair suddenly became well-known names even though these systems were far less powerful than the average smartwatch of today. There was a rise in people who started buying computers to use at home, for games and educational purposes. And the first computer magazines started to be sold in bookstores and various other places. And some of these systems also found a nice place in various offices, automating all kinds of things people needed to automate, like their bookkeeping and letter-writing.
Home computers are rare these days and Apple has turned into a variant of the personal computer and into some smart devices.
The Personal Computer started about 3 decades ago as the answer of IBM to the popularity of the Apple computers and the many Home Computers. In 1981 the first IBM PC was created but it took a few years before it started getting momentum on the computer market.
IBM mostly targeted small offices but also tried to get access to the Home Computer market, at which they succeeded. Of course, it did help that many other manufacturers started creating machines that were compatible with the IBM PC and that IBM allowed these manufacturers to do so. Apple did not allow any copycats and their prices were much higher than these new PC’s, thus Apple lost a huge market share in the end.
The Home computer did compete against the PC too, but with 640 KB of RAM versus the 64 or 128 KB that most Home Computers had, it was clear that the PC had the upper hand. Although Atari did last quite long against the PC but that was also because Atari had become popular as a video editing computer. Apple had more specialized in desktop publishing. The PC just became a more generic device.
The PC is still used today and most developers will develop software for the PC. The modern PC can also be used as a server for web pages, databases or files and is thus a very versatile device. Today’s choices in operating systems for the PC would be Windows or Linux although there are a few other alternatives. (FreeBSD and OpenSolaris, for example.)
The PC is an inexpensive yet very powerful device that has many uses. This is definitely something to learn more about.
Laptops, Netbooks, Apple and servers
A simple PC can be set up to serve as a server. With either Windows Server software or Linux, you could turn a PC into a web server to host a web site. Or change it into a database server so your data gets stored in a very optimized way. Or use it as a file server, although people tend to use more specialized NAS disks for this.
Apple has also seen the advantage that the PC has and is trying to become as versatile as the PC is. But with Apple you would limit yourself to their own operating system while the PC can use various different ones. Still, it is possible to install a different operating system on your Apple computer but this isn’t a popular option since Apple computers are generally more expensive than PC’s.
Laptops and Netbooks are limited versions of the PC. In general, a PC could be used 24/7/365 to run continuously without a keyboard, mouse or monitor. I myself am using such a PC as my web server! But laptops and netbooks have been created to serve a user and use batteries so the user does not need to be connected to some wall through wires.
Laptops are excellent devices if you want to develop software and don’t have a fixed desk to work from. You can take them with you wherever you go and thus you could write code while you’re in the bus or train. Well, the lack of Internet might be a problem but they make good tools for travelling developers.
Netbooks are generally smaller versions of laptops. They’re often not powerful enough for the bigger development systems but they can still be useful for maintaining existing code.
You would generally not use servers to develop software but they are very useful for test environments and to allow distribution of your software projects. They can also be used for your version control system that you use to keep track of all changes that you’re making in your code.
And Apple systems are also very useful if you’re developing for IOS devices or are doing visual designs and graphics. Apple has always been popular amongst graphic designers and for desktop publishing.
Tablets, mobile phones and Smartwatches
Today, technology is becoming smaller and smaller. The result is that you can now wear a device on your wrist that is more powerful than the PC was 20 years ago! These devices aren’t generally useful to use for development but they are a good platform to target for your own development.
The main choices you have here are Android and IOS, where IOS tends to be slightly more secure but where it is also harder to get your apps published. There’s also Windows Mobile, the Blackberry and various proprietary systems but they’re generally not that popular.
When developing for these devices you will have to keep all the limitations and extra’s in mind. You are dealing with a device that has limited resources but also a large amount of functions. Things like WiFi, GPS, Bluetooth and often two build-in camera’s are very common in these devices. And you can actually make phone calls with these things too in many cases! Thus it is a very interesting target for developers, although you need a lot of customers if you want to make profits since the prices for apps are generally quite low and the App Market also takes a percentage.
If you fail to make a good app then developing for these devices isn’t very effective.
The Raspberry Pi is technically just a very small PC that can run Linux. The modern version can even run a special version of Windows 10.
The Raspberry Pi is an interesting device if you want to do some hardware prototyping. It is also popular for various home automation projects although it is mostly used by hobbyists.
With Python or C++ (or other programming languages) you can easily write applications that listen to WiFi for incoming commands to turn off the lights, turn on the coffee maker and bread machine and manage all other electronics in your house. You can also connect a hard disk to the USB port and turn it into a simple file server. Or even a simple web server.
Commercially, there isn’t that much use for these devices except for prototyping. Still, the low cost of the Raspberry Pi does open up various uses, even for commercial purposes. It can be used for 3D printers, for example. It has been used with a simple keyboard and monitor to make cheap computers. And there’s a large commercial market for add-ons to the Raspberry Pi, including add-ons for commercial usage.
It might not take long for the Raspberry Pi to find a place in the Commercial World.
Embedded software, Atmel and the Arduino
Currently, the Atmel ATTiny85 happens to be my favorite platform as target for my projects. Basically, you are actually writing applications at the processor-level and not for a whole machine. This is basically when you start working with Arduino boards and similar things.
There is a whole market of programmable processors with additional programming hardware and generally a simplified C compiler so you can write code that gets stored directly inside a processor. This processor would then become part of your own electronic soldering and most likely on a board of your own design and will do basically anything that you have programmed.
These processors are very popular to create tiny robots, to drive LED lights and sound devices and much, much more. This is also a very challenging thing to do because you’re not just programming a processor but you also have to build the whole machine around it.
You need knowledge of electronics and preferably you have the tools and knowledge to make containers for your electronic experiments. Having your own 3D printer would be very useful but then you’d need more skills in 3D graphic design. And learning to work with electronics isn’t easy too, since it differs a lot from programming. It involves a lot of math since you have to make calculations for voltage and current in your project.
These calculations for electronics can be simple. Say, you have a 5 volt battery, a white LED light and some wire. You can connect this but chances are that the LED will burn out because it gets too much current so you have to add a resistor. But to know which resistor you need, you need to know the formula and some other information to pick the right resistor. Well, you have your resources so I have no doubt that you would be able to find that answer.
But imagine how complex it becomes when you have multiple LEDs, a speaker and some other electronic components!
So, make your choice!
So I’ve mentioned several targets that developers can pick for their development. When I worked at IBM, mainframes were my target. Before, it was the Home Computer and afterwards it became the PC. I’m also familiar with Apple, laptops, netbooks, mobile devices and tablets, the Raspberry Pi and a lot of Arduino stuff, including the programming of a plain ATTiny85 processor. (And soon the raw ATMega328 processor.) I’ve seen a lot of it and in my experience, you have to pick one environment first and become familiar with it.
In operating systems, you best start with both Linux and Windows. Linux has more environments where it can be used, including mainframes and small devices like the Raspberry Pi. And technically, Android is a Linux distribution too. So, becoming familiar with Linux is important.
However, most offices and companies use Windows for their computers and Windows is also popular as web server. You should make sure you are familiar with Windows too.
If you want to develop for Apple devices then you will also need to add OS X and IOS to your knowledge base, although OS X is similar to Unix, and thus Linux.
So, it would be best to learn to use both Windows and Linux with a focus on the command line shells, the installation and uninstaling of software and the installation and upgrading of both operating systems. The most practical solution would be to install Windows on your PC and then use a virtual machine to run Linux within your Windows environment.
The biggest problem with Linux are actually the various distributions that are out there. The use of virtual machines would allow you to experiment with multiple distributions on a single PC.
But you will also have to pick some hardware as your development target! And mainframes and supercomputers will be difficult targets for someone with no experience. You need proper training before they would let you work with those things!
So, targets are the desktop computer, meaning building desktop applications. Or the web server with web applications. Or databases on a database server. Or smart devices like tablets and mobile phones. And if you know about electronics you can consider to do prototyping with the Arduino or Raspberry Pi to create a new device to put on the market!
If you try to target all this hardware at the same time, you will only make things very hard for yourself. However, there is a programming language that should be supported by all these hardware systems and whatever operating system they’re using. And that language is called ANSI C. Or ISO C. Or Standard C.
But more about C in a next post! First, you need to pick a target and become familiar with it! Build up your knowledge of your target.