So, You Want to Be a Coder?
Entering a Coding Career
Question: How do you define hardware?
ANSWER: IT’S THE PART OF A COMPUTER THAT YOU CAN KICK!
Congratulations! You made an excellent choice. You picked up and opened a book that I hope will introduce you to a career that is exciting and challenging. And well paid too!
When you think about writing code, you probably dream about designing an action-packed video game riddled with warriors, heroes, monsters, or trolls; building a robot that can walk the dog and take out the trash; or developing the machines that will put a human colony on Mars. Any one of these dreams is within your grasp if you decide that becoming a programmer is the right career for you.
Today, a large part of our world is built on code. From the first computers that could add and subtract numbers, to the code that directed the Philae lander to set down on a comet that was flying at eleven thousand miles per hour through space, the people who write computer code are the driving force behind new innovations around the world.
In our internet age, every company from food producers to sportswear manufacturers is a technical company. Businesses need websites to promote their products. Banks need new ways to protect their
customers’ business transactions. Governments need help organizing all the information that comes to them each day. And everyone wants their identities protected, their packages delivered fast, and their movies streaming without a glitch.
There are toy race cars that use artificial intelligence to compete without drivers! With no tracks and no one at the controls, these cars sense what your car is doing, think for themselves, and race against you. Anki cofounder and CEO Boris Sofman said about the Drive cars, “They sense the environment five hundred times per second. They have fifty megahertz computers inside of them. They understand where they are and they communicate.”1
What career links all of these needs? You guessed it! Coding. And because the demand for coders is growing fast, there aren’t enough talented, trained people to fill the need. That’s where you fit in. If this is the right career for you, the jobs are out there, waiting to be filled.
Five Traits You Need to Succeed as a Coder
Entering the world of coding begins with an understanding of what it takes to be a coder or computer programmer. As a coder, you should love to solve problems, revel in discovering new ways of doing things, and question everything. You must be a good listener and know how to manage your time. Here are a few important traits that every programmer needs.
If you look at a line of code and are scared because you don’t understand it, have courage! You aren’t alone. Like learning any new
language, you start with the basics and build on that knowledge until you can speak and write it fluently. Courage will help you put your fears aside and embrace the trial-and-error process essential to learning any new skill.
You are a creative being. If your creative side leans toward solving problems and looking at things in unique and different ways, programming might be right for you. When writing code, there are many different ways to solve a problem and get the job done. If you love to tackle problems and find solutions, you can use your talent to produce efficient, graceful, and easy-to-maintain programs.
In 1949, Popular Mechanics predicted, “Where a calculator like ENIAC today is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and perhaps weigh only one 1 1/2 tons.”2
What they couldn’t predict was the invention of the transistor and the integrated circuit, which both drastically shrunk the size of a computer.
Make no mistake. You must be able to think logically to work as a coder. Computers follow basic rules of logic in order to do their job, so good coders are logical thinkers. They approach each problem with one thought in mind: there is a solution; I just have to find it. To do that, they break a problem down into smaller pieces, and by following a set of programming rules, they build and rebuild their program until the problem is solved.
10xers is the name given to coding superstars. They know how to write excellent code fast! These superstars can write up to ten times the amount of code as their average coworkers.
Most programmers are engineers at heart. You need to be passionate about building things, taking things apart, questioning processes, and solving problems. Coders’ passion for discovery can leave others bewildered. But it is passion that keeps them working late into the night and on weekends while others play golf or stroll along the beach. Without passion, the process of learning and writing code could become overwhelming.
Patience is what is needed to overcome the difficulty of learning a computer language. If you aren’t patient, your desire to learn will quickly fade. Like learning to play a musical instrument or write a good story, patience is necessary for success. Even when passion fades and frustration sets in, patience will carry you through.
Computer, the Word
In 1613, the word computer entered the English lexicon. It was borrowed from the French word compute, which in turn was borrowed from the Latin word computare, which means “to count, sum up; to reckon.”
Originally, the word computer was used to describe a person who worked with numbers. Then, sometime in the late 1800s, machines began to do the number-crunching work faster and more accurately than any person. The word quickly moved from describing a person to describing a machine.
Charles Babbage (1791–1871), Father of Computing
Charles Babbage was born in England on December 26, 1791. When Charles was around eight years old, he became deathly ill with a fever. To aid in his recovery, his parents sent him to study in southern England, but his continuing poor health forced him to return home to be privately tutored.
Under the guidance of his tutors, Babbage studied many subjects, including continental mathematics and algebra. In 1811, he entered Trinity College. While at Trinity, he cofounded the Analytical Society, which promoted continental mathematics and worked to steer the college away from teaching Newtonian mathematics, which was the popular theory at the time.
In 1816, he was elected into the Royal Society of London, a society for those who contributed to the improvement of knowledge in mathematics, engineering science, and medical science. In 1820, he helped found the Royal Astronomical Society.
Babbage’s Difference Engine, invented in 1821, was the first machine that could perform simple mathematical tasks with speed and accuracy. With the help of government funding, he built the machine, and when it was finished, it became the first successful automatic calculator. Unfortunately, his funding ended in 1832, and a decade later, the government ended the project.
After the Difference Engine, Babbage devoted his time and his fortune to designing an even better machine, the Analytical Engine. This machine could perform not just
one mathematical task, but any kind of mathematical calculation. The Analytical Engine was never completed, but it had elements in common with today’s computers.
From 1828 to 1839, Babbage was the Lucasian Chair of Mathematics at the University of Cambridge. He helped establish the Royal Statistical Society and lobbied the government and influential members of society to invest in the study of mathematics and science.
Today, little remains of Babbage’s prototype computing machines. In 1991, the Science Museum in London finished construction of Difference Engine No. 2, using Babbage’s original designs. The device, on display at the museum, consists of four thousand parts and weighs over three metric tons.
Name: Kelly Clarke
Job: Software engineer, NASA Jet Propulsion Laboratory
When did you first become interested in writing computer code and decide to make it the focus of your career?
In the seventh grade. My homeroom classroom had computers in it—which was a new thing in the late 1980s. I was able to sign up for an elective course that taught Logo (a computer language), and I remember working on a program to write my name on the screen in cursive. Later, I chose to be bused across town to William C. Overfelt High School in San Jose because it had a magnet program using computers. I had to convince my parents to let
me go, but it turned out that the school had amazing teachers, some I’m still friends with today. I learned BASIC and Pascal. At UC Berkeley, I chose to major in computer science for my bachelor’s. I used Assembly, C, C++, and the like. I graduated in 1996 during the technology boom and then went to work for Hewlett-Packard.
What education/work path did you take to get to your current position at NASA?
I was working at Hewlett-Packard’s spin-off, Agilent Technologies, when, in 2000, my husband heard about a career fair at the Jet Propulsion Laboratory (JPL). A section manager at the laboratory circulated my résumé, and I got several interviews.
What helped me the most, besides the section manager passing out my résumé, was my answer to one question asked at the career fair: What is your favorite programming language? My answer was that it depended entirely on the task at hand. If it was a short little tool to solve a simple problem, using a shell [batch file script] or Perl is going to be easier. If it’s a large team effort for a large tool that would be maintained for years, C++ or Java would be easier.
Languages can be taught. The things that can’t be taught as easily are the ability to think and a person’s attitude.
What does an average workday look like for you?
At HP/Agilent, it was almost all software coding, with occasional meetings.
It has varied over my career at JPL. When I first started, I did a little bit of user support and troubleshooting, but most of my time was spent designing, coding, or talking to people about coding (from peer reviews to design reviews to testing to development techniques). Not long after I started, I became the cognizant engineer over the Mission Control and Analysis subsystem—which had many tools in it written in various languages. Being the cognizant engineer meant the buck stopped with me—I had to answer any and all questions about this area at any time.
However, I found over time I gravitated toward the operations side, actually using the software in the environments they were
designed for. I just found it more fun. As that happened, I did less coding and more figuring out what is actually needed by the end users and communicating that to the software developers.
Now I’m splitting my job between two hats, one is a manager, where I spend most of my time in meetings. Since it involves areas such as ground software test, integration, and deployment, there are lots of people I need to bring together, and technical and process items to work and evolve. The software is meant to be used by all of NASA’s robotic missions, not just JPL’s.
I’m leaving this manager role and transitioning to a role with the Europa mission. Europa is an icy moon of Jupiter which may harbor life. I’m leading the Europa ground-system software team and will be working with others to ensure we develop all the software here on Earth that we will need to communicate to and from the spacecraft and provide tools for the spacecraft team to analyze all the data it sends.
What was your involvement in the Cassini-Huygens mission?
I started working on Cassini-Huygens my first day at JPL in 2000. Cassini had already been launched in 1997, and at the end of December 2000, it flew by Jupiter. I also supported Cassini in July 2004 when it entered Saturn’s orbit. The Hugyen’s probe separated from Cassini on December 25, 2004, and Hugyen’s landed January 14, 2005.
Even though I supported those mission-critical activities, I did more behind-the-scenes support. I helped the mission’s test facilities out—Integration Test Laboratory—where command sequences were sent to be verified prior to going to the real spacecraft. I adapted software, wrote small software tools, hooked up existing tools, automated software. All of it centered on uplinking commands to the test spacecraft or downlinking data from it.
Explain the Mars Exploration Rover and your involvement with it.
I joined the Mars Exploration Rovers in 2003, after they had launched and were en route to Mars. They were named Spirit
and Opportunity. I worked to help ensure that the data could be seen from the spacecraft by all the team members.
When Spirit landed on January 4, 2004, I was working in the room right behind the cameras filming the event. We went through the “seven minutes of terror,” waiting for the spacecraft to land. It was intense! For the actual event, I went into the camera room and jumped up and down with the team, and came right back out to get back to work.
A few days before Opportunity was set to land, Spirit had an anomaly. I was on shift that night, when Spirit stopped talking back to Earth. It took some time, but we figured out that she wasn’t going to sleep, and she was wasting her battery. We were at risk of losing the mission. Eventually, the team managed to get her to a safe state from which she could be recovered.
Opportunity landed January 25, 2004. Each rover was supposed to last on Mars for ninety sols (ninety Martian days), which was their primary mission. It was thought that they may go a little longer, but eventually their solar panels would be covered in dust, and there would not be enough power to keep the instruments and the rovers themselves warm and alive (Mars is very cold!). Luckily, the Martian winds put dust on the solar panels, but they also take it off. This was a happy surprise to everyone. Spirit was stuck with wheel issues, and we could not get her into a good position for the solar arrays (sun and wind). She was last heard from on March 22, 2010—about six years longer than we expected her to work. Opportunity is still going today (May 1, 2015) with over four thousand sols on Mars and over a marathon in driving.
For Spirit and Opportunity, I did primarily operations—using the software others had created and running it, troubleshooting issues, even performing as a help desk for data- and software-related issues.
I stopped working on Spirit and Opportunity not long after ninety sols for a few reasons. The team had been working around the clock (twenty-four hours a day, seven days a week) for the entire ninety sols. The team went slowly to more human-friendly Earth hours. Our team worked around the clock on
Earth time; most other teams actually shifted with Mars time, which meant coming in about forty minutes later each day. So they needed fewer people. And I needed to get back to Cassini-Huygens because Cassini was soon to get to a mission-critical event—Saturn Orbit Insertion.
What part did you play in the Curiosity Rover mission?
I was very briefly back working on the still-going Spirit and Opportunity Rovers before I moved on to the Mars Science Laboratory—later renamed Curiosity. Curiosity was both an amazing rover and an amazing journey for me. One of the highlights of working on Curiosity for me was working in the teams that supported the building, launching, and landing of Curiosity.
For launch, I was in the room. I had to say, “Go” or “No go,” depending on if the ground software (software here on Earth) was ready for the launch or not. I gave the go. We had to watch our monitors until about T-30 seconds, when the person in charge gave the go-ahead for myself and others to run outside (we were at Kennedy Space Center in Florida) and watch the launch. Two persons waited until T-10 seconds. It was awesome to see something I’d worked closely with the past four years take off from our home planet! I thought I’d see nothing as cool as that launch on November 26, 2011.
I was wrong. Curiosity’s cruise to Mars was also a busy time. We practiced the landing on Mars many times, and not one of the practice landings for the team went perfectly right! I had multiple teams I had to oversee, including the team that ran the uplink/downlink software and the team that sent commands to Curiosity.
On landing night, August 5, 2012, Pacific Time about 10:30 PM, it was dramatic. The seven minutes of terror were way scarier for me than they had been on Spirit and Opportunity. The landing mechanisms had to be far different because of the size of Curiosity, and I had spent five years instead of five months working on the mission. I had worked to ensure everything possible had been done beforehand, but that night there were still items we had to do. We expected huge numbers of people to log in to watch—we got even more. Curiosity went beyond the
point of no return—she had landed, one way or another (success or crash) on Mars—we just didn’t know yet. I was ecstatic when we landed successfully! All the systems and teams I had helped set up worked perfectly, and we displayed the first black-and-white images of Curiosity—with wheels down on Mars—and even a plume from where the descent stage had safely crashed far away from the Rover. A highlight of my life.
All in all, an amazing journey. And it continues. Next stop: Europa!
What were the most exciting moments for you during your career at NASA?
1. Curiosity’s landing—I still get goose bumps thinking about it.
2. Spirit’s landing
3. Opportunity’s landing
4. Curiosity’s launch
5. Hugyen’s landing on Europa
What is it like for you as a female programmer in a male-dominated career?
I was surrounded by men in college. One of my classes had ninety-four of us for the main lecture, and only four of us were female.
At JPL, it’s been both ways. For example, on the rover missions, a good number of people building the rover (electrically) and the landing team were male. However, there were many females in ground software, and the planners and mission team for surface operations may have more females than males!
I’ve been in meetings that have been dominated by one gender—both ways. At JPL, being female has never been an issue. New hires and senior personnel, as well as males and females, are all listened to whenever anybody has an idea or concern. Everyone has the same goal: make this spacecraft work so the scientists can get their data and expand mankind’s knowledge of our universe.
What do you see in the future for computer programming, at NASA or in general?
The cybersecurity environment is changing the nature of the way we do business. Instead of adding security as an afterthought, security needs to be designed into the architecture of every software program from day zero.
Do you have any tips for kids who are interested in becoming programmers?
What programming languages you know sometimes matters and sometimes doesn’t. Now that search algorithms for résumés do pattern matching, having some experience with a particular language can help get your résumé into the right hands. In my opinion, critical thinking is more important than languages. For example, do you understand what design can meet the user’s need?
By far the most important skills are the hardest to teach: the ability to work well with others as partners on the same software program and listening to and understanding the customer’s needs. Also, seize opportunities to try out your programming in the real world with internships, summer jobs, or other opportunities. There are many areas and types of software engineering. It’s good to find out which kind you do or do not like when it’s applied to the real world before you enter it full-time. Enjoy what you do; do what you enjoy!
History of the Computer
50,000 BCE: The first evidence of counting can be dated all the way back to this year.
30,000 BCE: Evidence of recording numbers by putting notches on bone, ivory, or stone remains from as far back as this time.
300 BCE: People create what is now the oldest known abacus, called the Salamis Tablet. The abacus is a calculating tool that is still in use today.
150–100 BCE: Greeks create the Antikythera Mechanism, an ancient computer used to predict eclipses and planet positions.
1623: Wilhelm Schickard builds the first automatic, nonprogrammable calculator, which he calls the calculating clock.
1642: Frances Pascal invents a machine that can add, subtract, and carry digits.
1679: Gottfried Leibniz discovers binary arithmetic that shows that every number can be represented by using only 0s and 1s.
1820: Charles de Colmar invents the first reliable, commercially successful, mechanical calculating machine called the Arithometer.
1837: Charles Babbage designs the Analytical Engine, the first computer to use punch cards as memory.
1842: Ada Lovelace develops the first computer code, an algorithm, or list of instructions, to be processed by a machine.
1889: Herman Hollerith describes the first electric tabulating machine and proves that data can be encoded on punch cards and then counted and sorted electronically.
1903: Nikola Tesla patents electrical logic circuits called gates or switches.
1932: ROM-type storage media is introduced. Read-only memory is later used in the start-up process of a computer.
Konrad Zuse creates the Z1, the first binary digital computer controlled using punch tape.
Paul Eisler invents the printed circuit board, the precursor to today’s computer motherboard.
1937: John Atanasoff, with help from graduate student Clifford Berry, creates the first electronic digital computer, the Atanasoff–Berry computer (ABC), at Iowa State College.
1940: George Stibitz presents a complex calculator at Dartmouth College and demonstrates, for the first time, remote-access computing.
1943: Tommy Flowers develops the first electric programmable computer, named Colossus, to solve encrypted German messages during World War II.
1945: John von Neumann defines a stored-program computer. His idea of electronic storage of information transforms the development of the modern computer.
1946: Konrad Zuse writes the first algorithmic, or instruction list, programming language, called Plankalkül or Plan Calculus.
1947: On December 23, the transistor is born at Bell Laboratory. The transistor is an important invention of the electronic age.
1949: Maurice Wilkes assembles the first computer capable of storing and running a program from memory. He also creates the first library of short programs, called subroutines, and stores them on punched paper tapes.
1952: Alexander Douglas designs the first graphical-display computer game, which is a version of tic-tac-toe.
IBM sells its first mass-produced computer, the 650 Magnetic Drum Calculator. It sells 450 in one year.
1955: The Whirlwind machine is the first digital computer with real-time graphics and magnetic core RAM (random-access memory). Also, the first transistor computer is introduced. It is smaller, faster, and more reliable than previous computers.
1960: Two thousand computers are in use in the United States.
1962: Three Massachusetts Institute of Technology (MIT) students create SpaceWar!, the first shooter-style game for computers.
1967: Floppy disks are used to install programs and back up information.
Wally Feurzeig and Seymour Papert create Logo, the first programming language for children, designed to help solve simple problems through play.
1968: Hewlett Packard starts selling the HP 9100A, the first mass-marketed, desktop, personal computer.
1971: Intel introduces the first microprocessor.
The first email is sent.
The first speech-recognition program is introduced.
1975: Bill Gates and Paul Allen start Microsoft.
1975: IBM releases the first portable computer. It weighs fifty-five pounds, has a five-inch display, and has 64 KB of RAM.
1979: Over five hundred thousand computers are in use in the United States.
The Mother of All Demos
On December 9, 1968, Douglas Engelbart introduced a fully functioning online workstation at the Fall Joint Computer Conference in San Francisco. His ninety-minute presentation held one thousand computer experts spellbound!
He demonstrated new ideas like windows, menus, icons, graphics, shared-screen collaboration using audio and video, file linking, hypertext, object addressing, word processing with revision control and a real-time editor, and the computer mouse. This was the first time all of these fundamental elements of the modern computer were demonstrated to the public on a single system.
Engelbart’s demonstration influenced the design of the Xerox Alto in the 1970s, which in turn influenced the Apple Macintosh computers and the Microsoft Windows graphical user interface operating systems of the ‘80s and ‘90s. Almost fifty years later, Engelbart’s demonstration is still considered the most important event in computer history.
1981: The first US patent for a computer software program is approved.
1982: The first compact disk for storage is invented in Germany.
1983: Over ten million computers are in use in the United States.
1986: The first laptop computer, IBM’s PC Convertible, is announced. It weighs twelve pounds.
1994: IBM introduces the first notebook with a CD-ROM, the ThinkPad 775CD.
2007: Apple introduces the iPhone.
2010: Apple introduces the iPad.
2012: Raspberry Pi, a small, cheap, credit card–size computer that plugs into a monitor or television and uses a standard keyboard and mouse is introduced. It is designed to help teach computer programming in languages like Scratch and Python.
There are over 310 million personal computers in use in the United States.
Name: Karel the Dog
Job: Coding enthusiast and CodeHS mascot
When did you first become interested in helping kids learn to write code?
I got into coding at a very early age, when I learned to move. Then I saw I could help others do the same, and I’ve been helping ever since then. So it’s pretty much been my whole life!
How did you become the main character in a computer program?
You know, that’s a tough one. I was programmed in by someone else, maybe Jeremy or one of his friends? But it always makes me wonder if I’m the only one. Maybe we are all living in a simulation.
You and your friend Jeremy Keeshin, cofounder of CodeHS, go on road trips to teach kids how to write
code. How did you get started traveling, and why is it important to you?
We started traveling about two years ago. I think it’s really important to meet the different students and teachers who are learning coding with CodeHS. By visiting all the classrooms, we can really help out. And because I’m cute and cuddly, the kids get interested real fast.
Describe some of the schools you visit.
Schools are different in so many ways. There are big schools and small schools. There are different types of schools. There are city schools and rural schools and home schools. I think one of the things that varied a lot and was really interesting was the culture and feel of the school. Some are very strict, and some let you do whatever you want. There are lots of ways to run a school! But every school is filled with amazing kids who love to code!
What do you enjoy most about teaching kids to write code?
I think the most exciting part is when someone gets that aha moment when they solve a problem. They get all excited and call me over to their computers to see what they did. That’s an awesome, scratch-your-belly kind of moment for me.
You have a website, Karelthedog.com
, where you document your travels. Describe some of the places you’ve visited.
We’ve been to almost every single state in the United States now except for Alaska. And I can’t wait to go there, except I heard they have a lot of mosquitoes. I don’t like mosquitoes. My favorite places we visited are New York City and Little Rock, Arkansas. I really like going to see Mount Rushmore, as well as Old Faithful in Yellowstone National Park. I also like traveling from place to place in the van. During those days, I get all of Jeremy’s attention.
Is Writing Code Right for Me?
1. Do you like solving puzzles?
A. I love solving puzzles. I play with them on my computer or mobile phone every chance I get. I find great satisfaction in solving really hard ones.
B. I like puzzles and play with them once in a while. Sometimes I invite my friends to play with me. I enjoy the competition.
C. I only enjoy puzzles when I have a group of my friends playing with me.
2. When faced with a big homework assignment, I??.??.??.
A. Break the assignment into smaller pieces and focus on one segment at a time.
B. Do the fun parts first and finish the rest of the assignment as quickly as possible.
C. Feel overwhelmed by big assignments and sometimes struggle to get it all done.
3. Do you sweat the small stuff?
A. Sometimes I drive myself crazy, but I always notice even the smallest details.
B. I notice details, but I’m really more of a big-picture person.
C. Details? No, thanks—I don’t like to let little things weigh me down.
4. How important is accuracy to you?
A. I try to do things right the first time, but I always double-check my work, just in case.
B. I don’t mind going back and fixing my mistakes. Accuracy is important, but not at the expense of getting my ideas across.
C. I like to be accurate, but isn’t it overrated? Focusing too much on accuracy stifles my creativity.
5. You spend three days working on a project, and the first time you use what you made, it breaks. You??.??.??.
A. Analyze what went wrong and try again. Failure is the best teacher.
B. Restart the project from the beginning. Those three days were a waste!
C. Take the project to a group of friends and see if they can help.
6. Do you like working with computers?
A. Yes! I’m constantly on one.
B. Sometimes. I find them a useful tool.
C. I use them only when I have to.
7. How do you feel about spending hundreds of hours learning how to write a computer program?
A. I already have a list of the colleges with the best computer science programs. I can’t wait!
B. I would prefer to learn computer coding on my own or take a technical class.
C. I think it sounds tedious.
8. How do you interact with other people?
A. I like to work alone, but I understand the need to get along with others and work as a team.
B. I can work alone, but I’d rather work with others and build consensus.
C. I am happiest when I’m working with other people.
If you answered mostly As: Keep pursuing a career as a computer programmer.
If you answered mostly Bs: You could succeed as a programmer but keep an open mind about working in other areas of the computer sciences.
If you answered mostly Cs: Look into working in areas of computer science where you can use the computer but don’t have to write the software.