What REAL "Computer People" Need To Know About Computers A great deal of fundamental understanding about computers has been mostly lost from our world today. Computers are so complicated and work so reliably nowadays that many of the finer aspects of computing are now little more than dim memories in the minds of some older hackers, or little-read publications gathering dust in libraries somewhere. People often try to get away with knowing as little as they can, and while they might be able to get away with that, it's distressing how many people who believe themselves to be knowledgeable about computers are actually unaware of some highly fundamental concepts. I'm not calling myself highly knowledgeable. I'm just a human, and like any other human, there's only a limited amount of information my poor tiny brain can hold. But I am someone who recognizes the value of deep learning. You've heard the saying "A little knowledge is a dangerous thing." It really can be true. Part of the problem is the way people continue to equate a college or university degree with an "education". While formalized learning can be valuable, the reality is that an education program which is packaged into a 4-year schedule is much too short to provide a deep knowledge of all the things computer people need to know. The real way for someone to learn is to learn and do at the same time. Studying any subject in a classroom is an extremely limiting activity; studying by actually doing something remains a far more effective means of learning. The things that computer people really need to know are things which they can (and should) learn on an ongoing basis throughout their careers, instead of trying to cram them all into a formal program which purports to prepare students for the real world. In this esssay, I'll attempt to touch on the basic things that a computer person need to know to really be knowledgeable about their field. Some people may disagree with me on some of these points, and that's fine; I don't know everything, and like anyone else, I have my own way of seeing things. As I see it, here are some of the most important things that every "computer person" needs to know before they can really claim to be wizards in their subject. It's often surprising how many so-called computer people know almost nothing about electronics. The computer field has shifted significantly; it used to be that computer science and electrical engineering were hardly separable. Today, computer science is mostly about software, and people who major in "computer science" in college or university study subjects far removed from the physical world. While this allows you to write software, the simple fact is that all that software still runs on a physical machine. To understand how a computer really works, you can't get away from the physical. You need to know electronics to be a computer guru. "Electronics" is, of course, a big field, and not all of it is applicable to computers, but most of it is. Obviously you need to know about semiconductor processing and manufacturing. You need to know both analog and digital electronics, since both are used in computers. You need to be able to design power supplies. You need to know about radio and wireless electronics, since wireless network connections are ubiquitous today, and even before that, packet radio systems had been used with computers for many years; you need to know about antennas and RF circuits. You need to know how display technology works, for CRT, LCD, and plasma systems, and be able to create systems using these technologies. You also need to know about designing programmable circuits in software using Verilog and VHDL, as well as how to make an FPGA from scratch; for that matter, you need to know how to make every applicable type of IC, including CPUs, memory chips, and other logic chips. You also need to know about the signal-processing field associated with electrical signals, meaning you need to know how to do Fourier and Laplace transforms. You need to be able to solder. Carrying this notion forward, it's also helpful to have some grounding in physics. Although the field of "electrical engineering" duplicates most of the electricity and magnetism field of physics, it's often also helpful to know about more general physics concepts like heat, light, and sound. All of these topics have important applications in computers: Heat dissipation is critical in today's fast-running CPUs, and light and sound are emitted by a computer's monitor and speakers, so it's worth knowing how to work with those light and sound waves. You need to know music theory and acoustics, since music and other types of sound are used extensively with computers today. Another important fundamental science is chemistry. Chemistry is closely related to physics, being mainly about the structure and functionality of matter at the atomic and molecular level. Indeed, when people talk about the behavior of electrons in semiconductors, it's impossible to say whether they're talking physics or chemistry; it's really both. The basics of chemistry are encompassed by the field of physics, but there are also more specialized aspects of chemistry. Many of these don't relate very much to computers, but to truly understand computers, you do need to know (for example) the chemistry associated with chemicals like phthalocyanine, which is used as a dye for CD-Rs, or the different phosphor chemicals that are used in the screens of CRT displays. You should have be familiar with these aspects of chemistry to be a computer person, but you can probably do without much of the more specialized knowledge. The other broad field of science is biology. As of this writing, biology still has very little application in the computer field. That's changing, however, as the relatively new field of "bioinformatics" (a combination of computer science and biology) is becoming more significant. Also, if the Gibsonian vision of computer systems plugged directly into the nervous system ever becomes a widespread reality, life sciences will start to become extremely important to the computer field, especially neurology. For now, however, the computer guru can probably get by without a thorough knowledge of biology. Besides electrical engineering, more traditional fields of engineering, especially mechanical engineering, are also helpful. Some parts of computers still use moving parts, and you need to know how to make old-fashioned machines, the kind that clank and hiss and move around. People sometimes fantasize about a virtual world in which all physical things are left behind and we exist in nothing but a reality composed of imagination, but that world ain't here yet, and until it is, we'll still need machines that move. While on the topic of physical science and engineering, it's worth adding that you need to be able to draw. You don't have to be able to draw artistically (although it helps), but you do need to be capable of drafting. A lot of engineers shy away from drafting because it's often incredibly tedious work, but the simple fact is that engineers need to be able to draw what they create. Before something ever hits the machine shop or fabrication plant to become reality, it's visualized on a computer screen in some CAD program. You need to be able to make your creations visible in a drawing before they become real. You can pass your drafting work onto someone else (indeed, many engineers do, which is why drafting is a viable career), but if you do, you're not using a critical skill. Speaking of drafting, you also need to know machining. The ability to create any shape of part out of plastic or metal by using a machine shop of lathes, saws, drills, and similar tools is something of a niche art, yet it's critical to many of the machines that exist in our everyday lives. If you can turn a diagram into a physical part, you've got a valuable skill that is applicable to many, many fields, including computing. There's not much silicon or coding wizardry involved in making computer cases, just good old-fashioned shop work. All of this has focused on the physical aspects of computers. These are vital things to know because they are all necessary for the creation of computers, but once the computer itself is built, it needs software to run, and software is such an enormous beast that you could easily study it the rest of your life and still have only scratched the surface of it. This is why software is so fascinating to many people: You can lose yourself in it forever. It goes without saying that the computer person needs to understand software. You can't know everything about it, but you should learn what you can if you intend to be knowledgeable about computers. First of all, of course, you need to know how to program. You should be multilingual. You need to know all the major languages: C, Fortran, BASIC, Pascal, assembly language and machine language for major processor architectures, Perl, LISP, Java, and Python. And those are just the major languages. You need to know all the major operating systems: MS-DOS, all versions of Windows, all the major flavors of *nix, OS/2, BeOS, and CP/M. That means you need to know all the commands and function calls that exist in these OSes. You need to know databases. You need to know SQL, of course, as well as all the theory that goes into creating and maintaining a functional database. You need to know artificial intelligence (AI). You need to know about neural networks. You need to know how to write programs that can think like people. You need to be able to write a program that can pass the Turing test. You need to know the purpose of every byte in every computer program that exists in the world. There is (and probably always will be) some disagreement about how much math computer people should know. There are many highly skilled and proficient computer techs who can't even do basic algebra. On the other end of the scale, there are several aspects of computer science which involve math that makes calculus look like child's play. Like software, math goes on forever. Nobody can know everything about math. So much has been studied and written about it in the history of humanity that you cannot absorb it all in one lifetime. Depending on what field(s) of computers you intend to specialize in, you might not need to know that much math, though, so a decent general principle is probably to try and learn what math you can, but don't make math a huge priority. If you know arithmetic, algebra, and calculus, you've got a pretty good grounding. And finally, bringing things back from the theoretical into the real world, you need to know how computers relate to the world. The fact is that the shape of computer hardware and software has been significantly affected by the human factors of culture, psychology, economics, politics, and law; in return, the computer has also impacted these fields. The truly computer-aware must recognize how the computer changes the world and the human existence, and what the realities of everyday life mean for the computer. You don't need to know everything about psychology or economics, but you do need to know enough to understand what they mean for the computer, and for you as a computer person. It may sound like I'm saying you need to know everything. Well, I'm not saying you need to know everything; indeed, I must acknowledge that it's not possible for a person to know everything. What you must realize, however, is that one of the things that makes computers so fascinating, important, and ubiquitous in the world today is how many applications they have in human life. Because computers are so versatile and important, they affect (and are affected by) many, many different things. To truly understand how computers work and what they do, you need to understand those things. You can be a pretty good computer person without knowing a lot of these things. You can be a great network administrator, for example, without knowing more than 8th grade math. But computers are mostly about information, and people who like computers are usually people who like lots of information. It behooves these people to learn a lot, because the more you know, the more you know.