Some amusing out-takes:

People waste a lot of time on various communications modalities. Today software doesn’t know which calls or e-mails are important to you. We’ve all been in meetings where peoples’ cell phones ring. We’ve all gone to our e-mail and found lots of unusual, unwanted e-mail that wastes our time. I have been offered many university degrees in that spam e-mail. (Laughter.) I don’t know if they’re targeting me or if other people are being offered those as well. The most interesting ones, they said that for dollars a month they would pay all my legal bills. (Laughter, applause.) That one, I know they didn’t mean it to come to me probably. (Laughter.)

Another good story about that is just this weekend my wife and I were sleeping in a little bit. Our 7-year old came in and woke us up and said, “You’ve got to come, you’ve got to come.” And we said, “No, no, no, it’s still 7 o’clock, why don’t you go back and keep doing what you were doing?” And she said, “Well, I was using the computer and it’s amazing.” And I said, “Well, keep using it.” (Laughter.) And she said, “No, no, no, we won, we won money, dad.” (Laughter.) And I didn’t want to say something flip, like, “Hey, we don’t need more money.” (Laughter, applause.) So I got up and, of course, it was one of those come-on type things, and there’s my 7-year old who thinks she’s won some amazing contest, and I’m trying to explain to her about it’s just somebody trying to get her to go to that website and all that.

Joel Spolsky talks about Microsoft Program Managers (2nd post):

Ah, polo shirts and khaki pants. I miss Redmond. Where else can you go to the Gap on Sunday, come back to work the next day, and find twelve other program managers wearing the exact same thing you just bought?

I used to say that Program Managers who do not have the respect of developers are not going to be effective because they won’t get anything done. In my day on the Excel team the developers ate untechnical program managers for breakfast. It sounds from your anecdotes that you’ve seen some teams with the worst of both worlds: weak program managers and weak developers.

The truth is that the Program Management gene and the Software Development gene are mutually exclusive. The perfect program manager is a software developer with user empathy, organizational skills, and the people skills of a sorority leader — and there just aren’t enough of those to keep 45 buildings under control. At some point someone decided that coding was an expendable skill for this job, and, guess what? Who interviews potential program managers at Microsoft? Other program managers. Remember A’s hires A’s but B’s hires C’s?

Typing types

by Zef Hemel

I’m going to post this because many people are asking for it on the net and we needed it aswell. For our project we need to serialize objects to XML and deserialize them later on. The compact framework (which is the version that runs on Pocket PCs) does not support this. However, the guys at OpenNetCf have created the Smart Device Framework, a free library that does include the XmlSerializer (“Proof”).

A couple of days ago we heard a plea from the open source to make Java open source. Now IBM, one of driving forces behind Java (they developed most of J2EE), urges Sun to open up Java aswell:

IBM has sent an open letter to Sun Microsystems, urging the company to make Java technology open source, CNET News.com learned late Wednesday.

In a letter sent by Rod Smith, IBM’s vice president of emerging technology, IBM offered to work with Sun to create a project that would shepherd development of Java through an open-source development model. If implemented, portions of Sun’s most valuable software asset–Java–would be freely available, and contributors ranging from volunteer programmers to large corporations would submit changes to the Java software.

“Sun’s strong commitment to open-source Java would speed the development of a first-class and compatible open-source Java implementation to the benefit of our customers and our industry,” Smith wrote to Rob Gingell, a Sun vice president. “We are firmly convinced the open-source community would rally around this effort.”

Under the offer, IBM would provide technical resources and code for the open-source Java implementation, while Sun would provide documentation and tests around the Java specifications, which Sun controls. IBM is heavily invested in Java, and the company’s Java-based products have significant market share.

On eWeek we read that Sun agreed to talk to IBM:

Sun officials planned to meet with IBM as early as Thursday to discuss the merits of whether the company should work with IBM on an independent project to create an open-source implementation of Java.

According to Sun, the company is in agreement with IBM’s letter in many ways—and over the last two years Sun has made “significant” Java contributions to open source through The Apache Group; portions of the XML processing engine, through the Web Pack contribution last year; and the Java 2 Enterprise Edition processing engine known as Tomcat. “Sun is closely evaluating the effectiveness of the process,” a Sun spokesperson said.

“Why is everyone in such a rush?”, that’s what Peter Norvig asks himself:

Researchers (Hayes, Bloom) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music. In another genre, the Beatles seemed to burst onto the scene, appearing on the Ed Sullivan show in 1964. But they had been playing since 1957, and while they had mass appeal early on, their first great critical success, Sgt. Peppers, was released in 1967. Samuel Johnson thought it took longer than ten years: “Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.” And Chaucer complained “the lyf so short, the craft so long to lerne.”

This is his recipe for programming success:

  • Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in ten years.
  • Talk to other programmers; read other programs. This is more important than any book or training course.
  • Program. The best kind of learning is learning by doing. To put it more technically, “the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve.” (p. 366) and “the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors.” (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.
  • If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don’t enjoy school, you can (with some dedication) get similar experience on the job. In any case, book learning alone won’t be enough. “Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter” says Eric Raymond, author of The New Hacker’s Dictionary. One of the best programmers I ever hired had only a High School degree; he’s produced a lot of great software, has his own news group, and through stock options is no doubt much richer than I’ll ever be.
  • Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you’re the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you’re the worst, you learn what the masters do, and you learn what they don’t like to do (because they make you do it for them).
  • Work on projects after other programmers. Be involved in understanding a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain it after you.
  • Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).
  • Remember that there is a “computer” in “computer science”. Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk. (Answers here.)
  • Get involved in a language standardization effort. It could be the ANSI C++ committee, or it could be deciding if your local coding style will have 2 or 4 space indentation levels. Either way, you learn about what other people like in a language, how deeply they feel so, and perhaps even a little about why they feel so.
  • Have the good sense to get off the language standardization effort as quickly as possible.

Windows/.NET branding

by Zef Hemel

Jon Udell interviews David Treadwell, general manager of the .NET Platform Developer Division:

We asked David Treadwell, Microsoft’s general manager of the .Net Platform Developer Division, to comment on key issues that arose while researching .Net’s performance. Treadwell’s answers were surprisingly frank and shed light on Microsoft’s Longhorn future.

Next Page »