

In today's world, computers control many things and perform many useful tasks in processing data, creating images, etc. They must have a common language that allows them and their instruments to interact. Note that this analogy works even for a small group of musicians playing together.

And, we can also play it on a variety of different instruments - including keyboards and synthesizers, etc. The amazing thing is that, 400 years later, we can pretty much re-create what Beethoven had in mind when he wrote the piece. So, he is the programmer, or software engineer, but he also had and needed extensive knowledge about the software and environment for which he was programming.

In this analogy, I think the musical notation is the oldest form of programming language that ever existed. Beethoven had to know and understand what each instrument and musician could do before he put any notes on the staff. His job is to ensure that everybody stays in balance and to manage transitions from one mood to another. He/she has the entire score so he can see what each instrument and section must play. But they have help - the musicians themselves who interpret the music (score). What is the hardware in this case? It is the instruments themselves. Let's change the focus: Think of a symphonic orchestra. I started when we used punched cards to program an 8K memory machine. Why do we put labels on people and their activities? I was trained as an ME, but I got a lot of experience with computers that includes both hardware and software. That's what enables them to work so well together.įirst, I will ask this question: How many software engineers does it take to change a lightbulb? Answer: They can't do it it's a hardware problem! Ha Ha! I'm sure the software engineers have a similar "gotcha" about hardware engineers. In the engineering field you will find that hardware engineers know a certain amount of software engineering, and software engineers know a certain amount about hardware engineering. The bottom line is, in going to college for both types of engineering degrees (hardware and software), you take classes that overlap both majors.

Folks will say designing hardware is also an art form in some ways, but I think more people will consider imagination playing a larger part in the development of algorithms than hardware. However, there is also an abstract component of imagination and creativity that is a benefit to an aspiring software engineer. The software engineer also needs to learn and understand advanced concepts in math, many of them the same as those for a hardware engineer. The hardware engineer needs to learn and understand advanced concepts in physics, chemistry, and many aspects of math (calculus, logic, probability and statistics, etc.) to have a foundation to build their design skills on. The engineering team, consisting of hardware and software engineers (and others, like manufacturing engineers for instance) are typically given a set of requirements, and they focus their designs to meet those requirements. It's important to note that they work together in most cases, to ensure the hardware and software will run together in the most efficient and problem-free manner possible. A software engineer harnesses the machine and directs it to do what the programmer needs it to do, to accomplish a particular objective (which hopefully meets customer needs). In my opinion, a hardware engineer designs an electronic machine with many possible intelligent capabilities. Hmmm, lots of interesting perspectives to the question.
