More women in computer science

That post about the Top 3 female computer scientists was more controversial, than i had thought. Maybe i shouldn’t have included Culver. Nevertheless i got an extended list of women from the comments. Thanks for your feedback!

Together with Alan Kay Adele Goldberg developed the Smalltalk programming system and was on the front of object-oriented programming. She currently works at her startup, developing intranet knowledge management software.

Monica LamMonica Lam is a professor at Stanford and an author of the third edition of the Dragon book. She supposably is one of the Top 50 most cited computer scientists. One of her current projects at moka5 is a portable image for secure computing called LivePC.

Radia Perlman invented the spanning tree algorithm for efficient and robust network routing. She is active in network and security research at Sun. (interview)

Together with Chuck Moore Elizabeth Rather developed and promoted the Forth programming language.

Barbara Liskov was the first women to get a Phd in computer science in the US. She currently works at the Programming Methodology Group at MIT.

Hedy LamarrHere comes the only women who isn’t really a computer scientist. Hedy Lamarr invented the concept of frequency hopping, leading to CDMA. Read her story! She flew from her first husband and became an actress. She shocked the audience with a nude scene and later got a star on Hollywood Walk of Fame.

Irene Greif had a key role in the development of Lotus. She “brought a more user-friendly perspective to the field, bringing social scientists and computer scientists together for the first time“.

Pat Selinger built the first practical relational database at IBM. She innovated at cost-based query optimization for relational databases.

I didn’t include women like Rebecca Wirfs-Brock. They are programmers or hackers, but not computer scientists.

Published in: on September 7, 2007 at 3:48 pm  Comments (5)  

Advice on writing a thesis

There is another Andreas out there and he wrote a nice post on How to write a thesis. He knows, because he just wrote his Master Thesis on the social dynamics of the Ubuntu open source community.

His advice is quite open, like “Be overly pedagogical!” or “Hack the data!”. Enjoy!

Published in: on September 7, 2007 at 8:08 am  Leave a Comment  

Top 3 female computer scientists

Computer science needs more women, but it’s not as there haven’t been some already. I proudly present the three most important female computer scientists.

Ada LovelaceIn 1815, a time when women were discouraged to participate in science, Ada Lovelace was born as the daughter of the poetic Lord Byron. Her mother got her homeschooled in math and science. When she was 27, she translated an article about Babbages Analytical Engine and added a description to compute Bernoulli numbers with it. The Right Honourable Augusta Ada, Countess of Lovelace wrote the first program in history.

Ten years later the “Enchantress of Numbers”, as Babbage called her, died from cancer. She envisioned the use of computers back then. Maybe Babbage could have promoted his machines through her writing skills, if she had lived longer. The computer revolution could have taken place a hundred years earlier.

A hundred years later a women called Grace Murray Hopper joined the US Navy. There she worked on some early computers and created the term “debugging”, when they found a moth in the computer relays. Shortly leaving the army she helped to build the first commercial computer, the UNIVAC. The Cobol programming language is mainly based on her philosophy to use english instead of machine language. “Amazing Grace”, as she was called sometimes, was a good presenter, often getting standing ovations after lectures.

Leah Culver planning her laptop etchingThen there is Leah Culver. Well, Leah didn’t make an important contribution to computer science apart from getting a degree. She just had this cool idea to laser-etch her laptop and got declared the sexiest geek of 2006, what gives me the possibility to catch you with a sexy picture.

The first women to win the Turing Award (the Nobel prize of computer science) is Frances Allen. “Fran” is a pioneer in the field of optimzing compilers. Her current title is IBM Fellow Emerita, “a position at IBM, which doesn’t require or allow any useful work, in terms of strategies in the company’s current business.”

Do you agree with my placement? Whom would you put at place four and five?

Update: more women in computer science

Published in: on September 6, 2007 at 3:04 pm  Comments (19)  

About the most important problem in computer science

This blog was founded to collect answers to one question. Richard Hamming asked it in his speech “You and your research”. His talk was more general, but it is a really good question and i applied it to my field.

What are most important problems in computer science?

I sent out lots of email to famous and not so famous people. You can read all replies on their own, but this is my try to summarize them all. I don’t think i’ll get much more responses to the emails, i sent for now.

The big problem is complexity. Computers are a bicycle for your mindA Computer is like a bicycle for our minds, so we can tackle more complex problems. The tools to these problems naturally are complex, so users get easily confused. The results are buggy programs, distressed users and wierd interfaces. “In spite of great advances, programming is still too difficult and machines are still too hard to use“, Kernighan wrote.

Prof. Tichy maps out the goal like this:

When everybody doesn’t just use a PC, but commands it […]. Only then computer science has fullfilled its potential, which is to free humanity from tiresome, boring, error-prone and dangerous work.

There are some really annoying problems on the way to simplicity. Prof. Adleman mentioned the famous P=NP problem. Joe Armstrong remarked that we don’t really know how to store and how to find things. For Prof. McCarthy the tangible path is “getting interactive provers for showing that programs meet their specifications and formalizing common sense knowledge and reasoning in mathematical logic“, thus improving our mind tools.

It’s not easy to discover how the computer can work for us. If we have figured this out, we need to “make everything as simple as possible, but not simpler” (Einstein), because “simplicity is the ultimate sophistication” (da Vinci).

We’re still working on operating systems, compilers, languages and algorithms, because haven’t got them right so far.

As a student of computer science i want to find my personal attack vector to the big problem, but how to find that? Philip Greenspun presented a nice thought experiment: The Fantasy Research Lab

Do you miss anyones reply? Tell me! I’ll try to contact them. Also write me your own answer!

Published in: on September 5, 2007 at 11:11 am  Comments (8)  

Read also: Good Math, Bad Math

Everybody gets a Niche in the blogosphere. With me in the computer science Niche is Good Math, Bad Math by Mark Chu-Carroll. He blogs for two reasons:

  1. To ramble about the beauty of mathematics, and try to share enthusiasm for the subject.
  2. To track down the bozos who use bad math to lie, distort reality, and in general support bad arguments; demonstrate their errors and their dishonesty; and generally mock them.

The “bozos” are mostly christian creationists and he really isn’t nice to them. On the other hand he just points out factual and logical errors.

I especially recommend his posts in “good math” category. He posts for example about graph theory, fractals and built a little programming language on the π-calculus.

Way to go, Mark!

Published in: on September 4, 2007 at 11:11 am  Comments (1)  

How to study computer science

“What school teaches computer science right?”, someone asked on programming.reddit.

My university is one of the best here in Germany according to the CHE rating. We’re officially elite, yet, this doesn’t guarantee a good education. It is possible get a degree and have no clue about programming, math and science at the end.

The question was primarily about the programming languages used, i.e. do the lectures use languages other than Java/C++. The right thing, as implied by the author and the community, would be to teach cool languages like Ruby, Haskell, Erlang and Scheme.

Does the choice of programming language influence the quality of education? No. Learning Java and C++ is a good thing, since most of the software is written with those, but a teacher, who uses Java/C++ for everything, even when it is inappropriate, shows a lack of wisdom for me. Trying to explain Functional Programming with Java is funny at best.

Unfortunatelly it is unlikely that you learn any cool language in any school. As with most things, you have to do that on your own. A university can only give you resources and opportunities. Everybody knows that lectures and pen&paper tests are the worst way to educate.

What you do with your time is your responsibility. Here is my list (mostly scooped from w-g), what you should do or learn:

  1. Programming paradigms – imperative, object-oriented and functional programming. Try to learn a language for every category. Example: C (procedural), Java (object-oriented) and Haskell (functional). If you know every style, you will program much better, especially when you use multi-paradigm languages, like Python, C++ or Scala. Addons are Assembler, Prolog and Forth.
  2. Algorithms and data structures – Complexity theory, optimizations, searching, sorting, cryptography, AI, graphics. Dig deep to the hardware level and learn about instruction sets, caches and architectures. Compilers and operating systems are the high end topics here.
  3. Abstract background knowledge – quite theoretical. Lots of math, formal verification aka model checking, Turing machines, lambda calculus and type theory.
  4. The human side – project management, design patterns, UI design, psychology. You will have to deal with people, who think very different than you. Managers, customers and co-wokers may not be “into computers” like you are.
  5. Practice – with the Open Source movement, you have a wealth of projects, who would like to get a hand or two. You’ll learn to deal with people and foreign source code. You’ll also gain familiarity with some tools like version control, IDEs and wikis.
  6. Creativity – don’t forget to do other things. Music, design, drama or whatever you like. Your brain has two sides and not both are for logic. Creativity and outside the box thinking can be learned and nurtured.
  7. Personality feats – university is a good place to develop yourself. Learn to work with discipline, to stay healthy and fit and to be social! Train good habits and starve the bad ones! Read a lot!

The choice of the university is mostly important for the piece of paper you get at the end. The education you get depends on you.

Published in: on September 3, 2007 at 8:59 am  Comments (25)  

Dealing with complexity

Mark Chu-Carroll has a really cool blog. If he doesn’t blog, he works for Google. Here is his answer to my Hamming question:

I’ll do my best to answer. By necessity, I’ve got to be a bit vague, because I don’t want to give away any google secrets.

First, I need to draw one important distinction. Computer science is too broad – there are lots of different areas, and I don’t think I can pick exactly one of them that’s clearly more important than the others. So I’ll arbitrarily pick the one that I know best: software engineering.

So – what are the most important problems in software engineering? I’d answer “dealing with complexity”. Software is frighteningly complex, and becoming moreso by the day. The editor that I use for programming has reached more than 2 million lines of code – I don’t think that there’s any person in the world who actually understands the whole thing. And that’s just a programming tool! Imagine the complexity of the things we build with it! Software is now built by groups of people, and no one person can understand all of the details. It’s built for hardware that people can barely program themselves (if they can do it at all!). It’s built to run scattered around huge numbers of machines around a network (the mail client where I’m writing this is running partly on my computer, partly on a web server at google, and partly in a mail database server.)

What do I do? I’m a toolbuilder. I make tools to help software engineers deal with complexity. Over the last few years, I’ve worked on SCM systems – which are tools that help groups of engineers deal with the complexity of working together. I’ve worked on programming environments – which are tools that help individual programmers deal with the complexity of understanding systems. And I’ve worked on build tools – which are tools that help deal with the complexity of assembling a large system from many small parts.

So what I do is a small part of trying to solve the biggest problems in software engineering. I don’t want to sound too egotistical – it is a *very* small part of a *very* big problem, but it’s the part that’s interested me from the first time I saw a computer, and I’m very proud to be contributing to it, even in a tiny way.

Working on the tools really isn’t a prominent job, but important none the less. Researchers may write prototypes and evaluate them for papers, but it needs more people to make real, useable programs out of that. When the programs are written we need even more people to maintain, adapt and debug those programs.

Published in: on September 2, 2007 at 2:51 pm  Comments (5)  

Where do you want to go today?

Now i’m through my list of 69 people to ask the Hamming question: What are the most important problems in computer science? Some were famous Turing Award winners (the Nobel prize of computer science) and some were mere mortals.

Not everybody has an email address published and i sent one snail mail. You can read the 11 replies i got so far. 38 are still unanswered, which gives me a good reply rate of 22%.

The question is where to go from here?

  1. Wrap up and close down – the purpose was to collect the answers and that’s probably done now. Time to switch off the lights.
  2. Continue – get more people on the list, send more emails, send snail mail, where no email address can be found.
  3. Embrace and extend – Widen the purpose and grow.

I’ve decided to go the third way, since i’m still motivated. This blog will now feature more general computer science topics. I made some changes to the user interface according to all the tips you can find on the web.

The direction of this blog is a little unclear now. I’ll nail it down over time, but now is a good point to let my readers (Yes, both of you!) comment on this. Where would you like this blog to go? What would you like to read about computer science?

Published in: on September 1, 2007 at 8:12 am  Comments (6)  

How to find and how to store?

For readers of programming.reddit at least, it’s clear that Erlang is gaining momentum. Erlang is a programming language + virtual machine environment for extremely concurrent and fault tolerant software. It was built for the telecommunication branche and the lead scientist is Joe Armstrong.

Nice to hear you quoting Hamming – I often ask students the same questions!

The most important things:

  • how to store things
  • how to find things

By store I mean store forever – things like backup and syncing systems should not exist and are a consequence of a broken storage paradigm.

Once we have stored things we need to find them.

We need to understand how to make systems that run forever and evolve with time.

Am I working with these? – Yes and no. I keep coming back to them, then get stuck and work on something else, then go back to them.

Published in: on August 28, 2007 at 9:25 am  Leave a Comment  

The A in RSA

The RSA algorithm for public-key encryption is used practically whenever a secure connection must be established. The A in RSA is Leonard Adleman. He recieved the Turing Award for this work. He is also doing lots of rather theoretical stuff with DNA.

His reply to the Hamming question is:

Your question is a good one and to give a complete answer would require more time than I currently have; so I will just provide a brief remark:

  1. NP≟P (or some varient of it) is the most important open problem in CS. It is also on the short list of most important open problems in mathematic (see the Cole prize).
  2. I don’t work on it for 2 reasons. First, I did work on it for a few years as a youth, I had a few ideas worth (I thought) writing down (see “Time Space and Randomness” by moi), but ultimately I came to the conclusion that the problem was not “ripe” – ready to be solved. A few more decades (at least) of research would be required. It is for this reason that I changed my research to work on Fermat’s Last Theorem instead. My intuition suggested that, after 3 centuries, the problem was ripe. When Andrew Wiles proved FLT a few years ago, my consolation prize was to know that at least my intuition was correct.

Adleman is the first to respond with the P=NP problem. Is the P≟NP problem more a prestige problem than a theoretical one? Whether the result is useful depends on the answer. So we don’t know how important it is.

Published in: on August 26, 2007 at 7:41 pm  Comments (1)