The attitudes and habits that distinguish the women as members of a profession might not be obvious to all viewers of the movie. Margot Lee Shetterly tells the story more fully than the movie could in her book (“Hidden Figures: The American Dream and the Untold Story of the Black Women Mathematicians Who Helped Win the Space Race”).
Of course, Mary Jackson, Katherine Goble Johnson, and Dorothy Vaughan (the heroines in this story) are honest. However, ethical conduct in professional life means more than choosing not to lie, steal, and cheat.
Professional people take responsibility for their own learning. They continue learning throughout their lives. They help colleagues, especially junior colleagues, advance. They share their enthusiasm and their special knowledge and skills with their communities. They stand by their work. They defend their own work. They do not wait for directions, but exercise initiative. They anticipate problems. They make their product as good as it possibly can be.
The book tells a story that begins during the Second World War. The women calculated the magnitudes of forces that affected airplanes in flight. Row upon row of human calculators entered numbers one at a time into calculators by hand. When jet engines replaced propellers and piston engines, they adapted. When the nation called upon their laboratory to help develop spacecraft, they added to their repertoire of mathematical methods. They foresaw the rapid development of computers and the end of the old ways of generating tables of numbers. The women organized their own courses. They taught themselves and one another. The human computers learned to use electronic computers.
Appreciative of the opportunities that they had found, they volunteered in churches and scout troops and other organizations. They spoke about the rewards that the engineering profession offers. They encouraged young people to invest themselves in work that offers great challenges and great rewards.
They asked “what if?” and developed a solution for what appeared to be an improbable mishap years before the same kind of accident crippled the Apollo 13 spacecraft.
Junior members of a team, when they choose to claim professional status, can defend their work confidently against challenges from higher ranking colleagues. The junior member is the expert in her own domain. In this story, a courageous defense not only demonstrates the integrity of one woman’s work but also reveals errors in the data that she had been given, and so improves the whole team’s output.
The movie’s makers tell the story in compressed time. As the director pointed out in a conversation with the Wall Street Journal, movie-goers are willing to watch a mathematician calculate for 30 seconds, but not for 3 days. Because they work in a visual medium, movie-makers prefer action. People run between buildings. Rockets hurtle through the sky.
On most days, most engineers do not run or fly. Engineers check and re-check, test, validate, and patiently make progress through the accumulation of many small improvements. Discipline, attention to detail, and perseverance also characterize professional conduct.
Read the Software Engineering Code of Ethics to learn more about how to be a responsible and professional person. Although written for software engineers, the principles are relevant in other professions too. What is your calling?
]]>In 1959, Dutch pioneer of computer science Edsger Dijkstra published an algorithm that now routes e-mail and gives directions to drivers in GPS-equipped cars. Many beginning students of computer science study his beautiful algorithm.
When we take to the highway in a car
or send encouraging words through the Internet,
when UPS carries a package far,
there is a choice wherever roads or wires have met.
Our map is points and lines, junctions and roads,
a start, an end, and places to visit in between.
Until we express our methods in codes,
we have but forks beyond which nothing can be seen.
Each piece of our puzzle is a segment.
We must calculate distances to where they meet.
Every piece of measured road can cement
a link in a network that we will all complete.
Computers can add, copy, or compare.
They hold instructions and data in memory.
Programs, like human lives, have junctions where
paths divide and which branch we choose makes our story.
Point and node and vertex label the same.
Edge or arc, either word can name a connection.
At each node remember from where we came.
Sites we visited make a valued collection.
From home to home no distance is reckoned.
Other distances appear impossibly great.
From first stop at home go to the second.
Each step we add to our path is direct and straight.
Our paths will cross and some places we’ll see twice.
Distances that once looked big shrink when we return.
Finding just the one way does not suffice,
a bonus and a surprise in how much we learn.
Legs of our journey combine and connect.
Organize data, then test and set in order.
See a plan at the end when we reflect.
Every step and turn in the maze moved us closer.
In the 1980s, soon after Apple, IBM, and other companies made personal computers practical, fictional heroes in movies like WarGames and Star Trek IV: The Voyage Home discovered the power of smaller computers. In the Star Trek story, the crew of the starship Enterprise traveled back in time to the 1980s. They landed in San Francisco. Scotty, the ship’s chief engineer, needed a computer. He found an early model of the Apple Macintosh. He mistook the mouse for a microphone. Movie-goers laughed when they saw him try to talk to the computer.
We no longer see toggle switches and spinning reels of magnetic tape on the front faces of our computers. Thin liquid crystal displays have replaced hot, bulky cathode ray tubes. Twenty years ago, we copied software from floppy disks. Ten years ago, we purchased software on CD-ROMS. Now we fetch new software from the Internet. The form and appearance of our computers have changed. The physical features of our computers do not define them.
]]>An algorithm is the sequence of arithmetic and logical operations that lead to the solution of a problem. Computer scientists measure the complexity of an algorithm by comparing the number of instructions that a computer executes in running the algorithm to completion with the size of the input given to the algorithm. If the complexity of a problem is very great, then a practical solution might remain out of reach even to the computer scientist who was an algorithm for the solution of the problem.
Here to illustrate the meaning of computational complexity are two problems:
You can find a name in a directory by repeatedly dividing the book in half.
The number of times we must divide a number by two until we reduce it to one is the logarithm base 2 of that number (rounded up). The function grows slowly. You will have to look at no more than 5 pages to find a name in a directory that contains 32 pages. You will have to look at no more than 6 pages in a 64 page directory, 10 pages in a 1000 page directory, 20 pages in a million page directory, and only 30 pages in a billion page book. Imagine even a billion billion trillion pages—checking 100 pages will get you to the page you want. The complexity of this algorithm (called binary search) is low.
You can answer the hiker’s question by computing the weight of every possible combination of items that the hiker might pack and then checking each sum against the 42 pounds that the hiker wants to carry. Although simple to describe, the algorithm has high complexity. The number of possible combinations (that is, the number of subsets of all items) is an exponential function of the number of items. Add one item to the hiker’s collection of gear and you double the number of subsets that you must consider.
(I will fib just a tiny bit in my next calculations because I want to establish a symmetry between this and the previous problem. If you are curious and clever, perhaps you can explain why you would write 31 where I have written 32.)
You must consider 32 combinations if you have 5 items, but 64 combinations if you have 6 items. If you are choosing items from a set of 10 items, you will have to consider 1024 combinations. The number of combinations rises to a million if you have 20 items and to more than a billion if you have 30 items. If the hiker has stored 100 items in his closet, you will have to examine a billion billion trillion possible combinations.
You know that computers are fast. How fast? Can we compute a billion billion trillion sums in the time that God has given us on earth? Industry has increased the speed of computers at a rapid pace and promises continued improvements. How much gain in speed will we need to answer the hiker’s question? Suppose that a genie gave you such a powerful computer. What will you do if a second hiker presents you with 200 pieces of camping gear?
Many problems resemble the hiker’s problem in the following ways:
Stephen Cook and Leonid Levin produced evidence that suggests that solutions to problem’s like the hiker’s problem are forever unattainable. They showed that an efficient solution to one problem in the set would allow an efficient solution to any of the others. Why should this knowledge strengthen our belief that each problem is intrinsically complex?
]]>A programmer can direct a computer to repeat a series of arithmetic operations until some logical condition is satisfied. If the programmer fails to specify the terminating condition correctly, the computer will continue executing the instructions forever.
Will a given program complete its work in finite time?
Before anyone had built a computer, Alan Turing proved the impossibility of writing a program to answer that question. He supposed that a program-checking program could be written and then showed that a logical contradiction followed when he imagined using the program to check itself.
There are, of course, programs that check other programs for misspellings, unbalanced parentheses, and other kinds of errors. However, while it is possible to recognize an infinite loop in some programs, it is not possible to write a program that will reliably tell us whether or not any program that we give it contains an infinite loop.
]]>When the registrar’s office publishes the list of courses that the college offers, the office lists the courses in numerical order within departments that it lists alphabetically. Sorting is the key to efficient searches. Students can find the number of seats available in a course or the number of the classroom in which the class will meet quickly because the registrar has listed the courses in order.
An organization can save money by sorting newsletters by the zip codes of the members to which it wants to send the newsletters. The United States Postal Service charges less for postage when the organization sorts mail before bringing it to the post office.
We will study methods of searching and sorting because the solutions to many of the problems that clients present to software engineers require searching through data and/or sorting data. A large fraction of
Our examination of searching and sorting algorithms will lead us to a deeper understanding of challenges that are common to many kinds of programming problems. Of course, people who have never studied computer science know how to find the smallest element in a collection, find a matching value in a list, and order objects in set from smallest to largest. Searching and sorting are easy. However, specifying the steps taken in a search or sort is hard. Computer scientists can describe the procedures precisely.
Why program a computer to perform a task that people can do by hand? People can sort short lists by hand. Computers become indispensable when the number or length of the lists to be sorted become very large.
We study two algorithms for searching and three algorithms for sorting in our first course. If you continue your study of computer science, you will encounter other searching and sorting algorithms. By showing you several algorithms, we are making the point that you will often have a choice of methods for solving a given problem. A good computer scientist finds the solution to an assigned problem. A better computer scientist recognizes choices, selects the best alternative from among those several methods, and can give reasons for preferring one method over another.
]]>The smallness of electronic devices should impress us. The coordination of human beings in the development of software should impress us more.
Computer scientists seek ways of describing problems and methods for their solution concisely and unambiguously. Programmers must always write for at least two audiences. On the one hand, they write for a machine. On the other hand, they write for human teammates and clients. The contrast between the needs of human readers and the machine’s limitations challenges software engineers.
Sophisticated mathematics, clever codes, and inventiveness of individual programmers should impress us. Successful communication among diverse developers and their clients should impress us more.
]]>
We might, for example, invite our colleagues to sponsor open houses in their departments or to announce that visitors are welcome in the department’s classes on one afternoon per week or month. Two professors who are teaching different courses in the same term might choose to each visit the other’s class. The visitor could participate in discussion, present a lesson, or help evaluate students’ presentations. Let students see as many professors “in action” (even for just one hour) as possible.
This program could help students discover interests that they did not know they have. It will make them more fully aware of the resources that the college has made available to them. Departments might choose to use this program to recruit students. Students might use the kinds of opportunities that I am proposing to “test drive” professors. They could see what excites a professor, what special experiences a professor has to share, and how a professor engages with students. The proposed activities require little commitment and entail little risk.
We will want to look for ways to reward members of the faculty for creating additional opportunities and to credit students who take advantage of those opportunities.
]]>