Feed on
Posts
Comments

Kitties

I’ve been extremely busy lately and so haven’t had time to post as much as I’d like. I saw this video a little while back, and I thought, “Okay, cute.” Over time it’s grown on me, so I thought I’d share it with you all.

“An Engineer’s Guide to Cats”

There’s something about this video that when I watch it I have to say, “Hmm. This sounds like me,” except I haven’t been a cat owner in years. My apartment doesn’t allow pets. But I love cats. So this is an easy video to love. One part in it says, “Like most engineers, cats are pretty much willing to eat the same thing day, after day, after day,” and then follow it up with a little part where they’re making toast. This is so me. I eat a fairly restricted diet in the sense that I don’t mind eating the same selection of stuff for quite a while before I get bored with it and move on to something else.

I loved the “feline art” section of this video. The “post-modern cardboard deconstruction” bit is hilarious! :D The “corporal cuddling” part was precious. Awww, so cute! Makes me feel all warm and fuzzy inside.

The part about the “I’m-not-paying-any-attention-to-you game” was interesting, because I’ve “played” that game with women (but gosh, I didn’t know it had a name…). From my experience it doesn’t work out like in the video. If you play this game, the gal wins by default, because you’re just too uninteresting.

BTW, I found this video shortly after “An Engineer’s Guide”, and it’s pretty cool too. For an amateur he’s quite a performer and songwriter I’d say.

“The Mean Kitty Song”

The Joy of Squeak

I found this through The Weekly Squeak. Randal Schwartz demo’d the current Squeakland version of Squeak/EToys on Leo Laporte’s show, “The Lab” (video link). I just think it’s neat it’s getting some mainstream recognition.

Schwartz and Laporte gave a quick history of Smalltalk at the start, and they told it pretty accurately. For the uninitiated it may go by too quickly. Squeak’s heritage goes back to the Xerox PARC days of the 1970s, back when they were developing Smalltalk. Smalltalk was the system they developed to create an interactive computing environment for children. It was the first implementation of Alan Kay’s vision of a “computer as medium”. This is the system Steve Jobs saw that inspired Apple to create the Macintosh. Smalltalk is still used today in large firms, particularly major banks. Interesting how a system developed for kids would be put to such a serious use, eh? Well, that was the idea, though as Kay has said with a little regret about Smalltalk’s history, the kids were shoved to the side, and the “professionals” took it as their own. Schwartz said Smalltalk is used wherever you need to rapidly create or change “products or screens”. I take that to mean “software”, but who knows. If so, isn’t that what a lot of businesses need? I mean, what’s RAD all about if not this?

Just a quick note. Laporte said something that’s untrue. He said that the mouse was invented at PARC. It wasn’t. Douglas Engelbart invented the mouse before PARC was created. The Xerox team used it with the Alto computer and Smalltalk. Laporte was basically right when he said that the graphical user interface as we now know it, with mouse interaction, was invented in the Smalltalk system at PARC. More than that, the language used in it, also called Smalltalk, was the first well designed OO language. Other teams at PARC worked on such things as networking machines together using ethernet, exchanging e-mail, creating WYSIWYG displays, and laser printing, bringing it all together with what the Smalltalk team created. They really did create the future.

Schwartz and Laporte briefly talked about commercial Smalltalk environments, and how they’re still sold. Laporte added that it’s “expensive”. Somehow I wonder if that’s more perception than reality. What they don’t say is that Squeak at its heart is the same thing, and it’s free. They leave that for the audience to figure out.

What Schwartz shows is the version of Squeak that’s shipped on the XO Laptop. This version is the current one available from Squeakland. You can get it for Windows, Mac OS (7.6 or higher, and OS X), and Linux.

There are two editions of Squeak. There’s what I think is commonly called the “Squeakland version”, and then there’s the “Squeak.org version”. Squeakland is the one typically used for educational purposes. The Squeak.org version is the one typically used by professional developers, like those using the Seaside web framework. The main difference I think is in how they’re configured, what APIs are included, and how the main visual environment is set up.

What Schwartz shows is a typical EToys demo: “driving the car”. The first time most people see this demo they’re amazed, because they’ve never seen software run like this before. That was my reaction when I first saw Alan Kay do it at ETech 2003 (video link). Without running an app., Schwartz starts a project, grabs a brush from a “paint” panel, and selects a color. He draws a red car (top view) on the screen, just freehand. He then shows how it can be manipulated, and how it can be made to move by itself, just by a few mouse actions. Then, for the coup de grace, he draws a “steering wheel”, and links it to the car’s motion instructions, again using mouse actions, without stopping the car or any running program. It all happens in real time. He rotates the wheel and now he’s steering the car as it moves, all within the span of about a minute!

Smalltalk programmers have known this way of programming for years. It’s interactive. You’re able to change your code while it’s running. What’s cool about this is that through this model children can learn about programming with objects without it getting too hard, and it’s similar to the experience Smalltalkers get with the underlying environment.

With EToys it’s very easy to create objects. You just draw them on the screen. Each object also has a standard set of properties and behaviors that can be manipulated. More can be added by writing scripts, which involves writing a little Smalltalk code. There are some differences between programming in EToys and the underlying Smalltalk environment, which I won’t go into, but it’s okay. The way EToys does things reduces the complexity. The idea was to invite kids in, not to scare them away by making it too complicated. It introduces the idea that programs are simulations of models. The model is the interaction of objects–their relationships to each other. Each object is designed by the programmer to carry out certain behaviors in response to messages. What I think makes people excited when they see this is they realize that they can take what’s in their imagination and see it play out before them on the screen. That was always a joy for me as a teenager, though getting to that point, using the technologies I had available to me was sometimes a tough road.

EToys brings Smalltalk back to the vision that Alan Kay wanted for it all along, a computing environment that can be used by ”kids of all ages”. EToys provides an easy to use and program simulation environment. It’s fun for adults, too, though I don’t think it’s complete enough for all the things adults would want to do with a computer. For that, there’s the underlying Smalltalk system, which provides a powerful environment in which they can create their own programs/systems. Together it comes pretty close to Kay’s original Dynabook vision.

—Mark Miller, http://tekkie.wordpress.com

The 2nd edition of Squeak by Example is out now (h/t to The Weekly Squeak for this). Like the first edition, it’s a book released as a PDF under the Creative Commons Share-Alike license. You can also get a hardcopy edition of it for $20.10 USD. They also welcome donations. Another tidbit of news is that the first edition was downloaded 20,000 times. Cool!

I wrote about the first edition here, along with links to tutorials that I thought readers would find useful after perusing it and learning some basics.

Hi guys. Just FYI, a little more than a week ago I wrote a comment on one of Paul Murphy’s blog postings, called “The worst PC myth of all”. Murphy is a blogger on ZDNet. He liked my comment a lot, and he and I agreed to have it as a guest post on his blog, called “Managing L’Unix”. I changed it a bit for posting, but the message is the same. It showed up today, titled “The PC vision was lost from the get-go”.

Paul Murphy sees himself as an “agent of change” in IT systems, so he tends to talk mostly about his philosophy of infrastructure, and his own attempts at reforming it in businesses. I read his blog often, because I have gotten insights from him in the past, especially when he talks occasionally about software development/programming issues. In fact, one of his posts from a couple years ago inspired me to search for material on the internet related to something he talked about. This led to a feast of information, knowledge, and wisdom, which I have continued to explore and enjoy to this day.

—Mark Miller, http://tekkie.wordpress.com

Java: Let it be

Joshua Bloch, Chief Java Architect at Google, gave a talk entitled “The Closures Controversy” at Javapolis in December 2007. I found it online through reddit, and it intrigued me, because I think it illustrates a disconnect between what we as an industry are doing and the goals we have. Bloch also makes what I think is a reasonable argument for limiting Java.

Those of you who’ve read what I’ve written for a while might be surprised by that statement. I have been critical of the IT industry for not thinking in more powerful terms about programming/computing. I am not endorsing Java. After watching his talk I was prepared to lay into Bloch for not having higher ambitions for the language, but as I thought about it I realized that it’s unreasonable to expect a computing environment to be more than what it was designed for. It helps me see that Java has a shelf life. To expect more would mean trying to change it into something it’s not.

The appeal of Java

Bloch began his talk using Gosling’s ideas from his article The Feel of Java, published in IEEE Computer in 1997, as a touchstone for what Java ought to be like in the future:

It is a language for a job. Doing language research was an anti-goal [in the development of Java] . . . It is practical, not theoretical. It’s driven by what people need. Theory provides rigour, cleanliness, and cohesiveness. [Java had] no new ideas. It took ideas from existing languages and put them together. It maybe added a few new things, but that wasn’t the goal. And this is perhaps the most important slide in the whole talk. He said, ‘Don’t fix it until it chafes’, to keep it simple. Don’t put anything in the language just because it’s nice. Require several real instances before including any feature. In other words, ‘Just Say No, until threatened with bodily harm.’ He said Java feels hyped, playful, flexible, deterministic, non-threatening, and rich, and like I can just code.

Bloch continued from the article:

Java is a blue collar language. It’s not a PhD thesis. It’s a language for a job. Java feels familiar to many different programmers, because we preferred tried and tested things.

When Gosling said Java is “not theoretical”, he was comparing it to languages/VMs that are based on computer science theory, like Lisp, which is based on lambda calculus. By “practical” he meant the instrumentalist approach to design, which is that the feature set and the architecture the language/VM supports should handle current problems. Nothing more, nothing less. In my view this is short-sighted. It means that after acquiring and using the language to solve current problems you will run into problems the language wasn’t designed to handle, because new challenges arise. You will have to improvize within a structure that is ill-suited to the task, until whoever is in charge of the language adds new structures that handle the problem effectively. Wash, rinse, repeat. I have a feeling that this approach is a defense against languages whose designers add features willy-nilly without consideration for how it fits into the overall goal of the platform. Bloch points out that “theoretical” languages don’t have this problem, but he passes by it quickly.

Java was a swing in the other direction from languages like C/C++ that were said to “give you more than enough rope to hang yourself with”. I guess programmers “hung themselves” more often than not. C and C++ are powerful in the sense of allowing you to access the hardware directly inside of a language that gives you high-level structures. If you’re interested in doing anything more than building kernels, device drivers, or VMs/compilers, they’re pretty weak. Java rode a wave that was happening at the time it was introduced. C and C++ were the dominant languages. All sorts of projects were done in them, including applications. Java provided a productivity boost to project groups with this orientation by getting rid of many of the pitfalls of using C/C++ (buffer overruns, memory leaks, null or uninitialized pointer references, etc.), but in terms of building more abstract software like applications/environments with the power the language and the VM gave you, it wasn’t that different from C/C++. So in essence it played to the tastes of programmers of the time. It went for familiarity, but without having a particularly good technical reason for it. Java doesn’t allow direct access to the hardware. So why did the language designers feel it necessary to play “follow the leader” with C/C++ in terms of conventions and power? It was an easier sell to programmers. They like familiarity.

Java meets the programming culture where it is. As long as the culture is ignorant of the fact that the architecture it’s using is ill-suited to the task at hand, then technologists can convince themselves and others that problems which arise from using a limited architecture for large projects just go with the territory, and there’s nothing anyone can do about it. It’s about time we became more enlightened, but it’s going to take us admitting that despite our masterful technical skills we don’t know very much about why it is we do the things we do with computers, beyond the joy of solving puzzles. According to Alan Kay, and I think he’s right about this, it will take learning about and exposing ourselves to other things besides computers.

Quoting Kay, from The Early History of Smalltalk:

Should we even try to teach programming? I have met hundreds of programmers in the last 30 years and can see no discernible influence of programming on their general ability to think well or to take an enlightened stance on human knowledge. If anything, the opposite is true. Expert knowledge often remains rooted in the environments in which it was first learned–and most metaphorical extensions result in misleading analogies. A remarkable number of artists, scientists, philosophers are quite dull outside of their specialty (and one suspects within it as well). The first siren’s song we need to be wary of is the one that promises a connection between an interesting pursuit and interesting thoughts. The music is not in the piano, and it is possible to graduate Julliard without finding or feeling it.

I have also met a few people for whom computing provides an important new mataphor for thinking about human knowledge and reach. But something else was needed besides computing for enlightenment to happen.

Tools provide a path, a context, and almost an excuse for developing enlightenment, but no tool ever contained it or can dispense it.

The state of Java today

Bloch’s introduction felt like cheerleading for Gosling’s vision for Java, but then he got into what’s painful about it now. He talked about the Java community’s involvement in the design of Java, and the wisdom of its actions. “How are we doing today?”, Bloch asked the audience. He showed several examples of messy Java generics. It didn’t look that different from C++. The audience laughed. He said, “Not so well, unfortunately. This is how Java looks now.”

The way he described things made it sound like Sun “jumped the shark” with generics. He was more polite than to say this. He said generics per se were not a bad addition to the language, but their implementation allowed so much freedom that Java code is becoming incomprehensible even to people who have been working with the language for years.

Generics: An escape hatch

In my view generics are just an attempt to get out from under the limitations of Java’s strict type system. The same goes for generics in .Net.

Generics are the “managed code” world’s version of C++ templates. They are also called “parameterized types”. They give you some of the programming flexibility of a dynamic language. Statically typed versions of generic code get generated depending on what types are called for in statically typed code. What they don’t give you is the “get to the point” feel of programming in a powerful dynamic language, because you have to tell the compiler about how many types the generic code will accept, and in what form it will accept them, where type information needs to go in the generic code, and what form type information will take when data is returned from the routines you write. In other words, you have to give some metadata for your code so that the static type system can deal with it. I call it “overhead”, but that’s just me. What static type systems force you to do is talk about the data flow of your code. This isn’t so that humans can understand it (though with some discipline it’s possible to create readable code this way), but so that the compiler and runtime don’t have to figure out what the data flow will be when your code is executed. It’s really a form of optimization.

Bloch explored where the complexity that now bedevils Java comes from. He got into talking about feature creep. It’s not the number of features, it’s the permutations of feature interactions. “When you add a feature to an already rich language, you vastly increase its complexity,” he said.

The “quagmire” of closures

First, let me get a definition out of the way. A closure can be thought of as an anonymous function. It is not officially a method in any class. You can spontaneously create closures inline in your code and use them, in dynamic languages. You can pass them around from method to method, and they never lose their integrity. In the context of OOP it’s more aptly defined as an anonymous class that contains a single anonymous function, because in OOP languages closures are objects with methods of their own.

Bloch gave a brief explanation, which I think is correct: closures “enclose their environment”. They create references to whatever variables are used within them that are in scope range, at the time they are created. This is called “lexical scoping”. They also automatically return the value of whatever is the last expression evaluated within them. Bloch gives two reasons why closures are being considered for Java:

  • They facilitate fine-grained concurrency in fork-join frameworks. You can use anonymous classes with these frameworks, but they’re a pain right now. He said it’s important that programmers use fork-join frameworks because, “we have these multi-core machines, and in order to actually make use of these cores, we’re going to have to start using these parallel programming frameworks.”
  • Resource management - Always using try-finally blocks for resource management is painful and causes resource leaks, because programmers misapply the construct. Closures would help with this.

Even though he conceded these points, he clearly has disdain for closures. He used BGGA closures as his example. With the way they’ve been implemented, I’d have disdain for them, too. The hoops you have to jump through to make them work makes me glad I’m not using this implementation.

He said closures encourage an “exotic form of programming”, which is the use of higher-order functions: functions that take functions as parameters, and/or return functions. He jabs, “If you give someone a new toy, then they’ll play with it.” Ah, so higher-order functions are a “toy”. Mm-hmm… I’m tempted to say something impolite, but I won’t.

Bloch talked about closure semantics next, and how they’re different from normal Java semantics. He expressed concern throughout the rest of his talk that this would confuse Java programmers, and thereby create bugs. He has a point. Still, I don’t mind the idea of mixing computing models in a single environment (VM). I think there are advantages to this approach.

Some history: Where modern computing comes from

Code blocks (closures) in Squeak/Smalltalk work differently than normal Smalltalk code as well.

I’d venture to say that the reason closures have been put in Ruby, and are now being considered for Java, is that Smalltalk was the first OO language to use them. Even though I’m sure it’s largely forgotten now, there are some significant artifacts of computing that have come into common use because of the Smalltalk-80 system. The GUI you’re using now, “hibernation” on your PC, bit-blitting, and the MVC design pattern are a few other examples. Language and system designers have been mining Smalltalk features for years, and incorporating them into modern, though less powerful technologies.

In retrospect people within the Smalltalk community have pointed to some design flaws in it. They didn’t ruin it by any means, but it’s recognized that there’s room for improvement. In a conversation I was in on between Alan Kay and Bill Kerr, a blogger I’ve mentioned previously, Kay expressed muted regret about the inclusion of closures in Smalltalk, saying they broke the semantic simplicity of the language. I can see where he’s coming from. Closures introduce an element of functional programming into OOP. He desired a system that was purely OO, mainly for consistency so the language would be easier for beginners to learn. I haven’t gotten far enough along in my research to see what Kay would’ve suggested instead of closures. My understanding is he was heavily involved with the development of Smalltalk up until Smalltalk-76. Due to a schism that developed in the Smalltalk team, he gave up most of his involvement in it by the time Smalltalk-80 was in development. This is the version that ultimately was released to the public. “The professionals”, as Kay put it, took over and so some of the vision was lost. They turned the Smalltalk language into something that was friendly to them, not beginners.

Closures are something that anyone new to a dynamic OO language has had to learn about. They’re pretty painless to use in Smalltalk, in my opinion. They’re easy to create. Contrast this with closures in Java. Bloch referenced a post written by blogger Mark Mahieu, where he got some of the examples. Here are a couple of them, with equivalents in Smalltalk for clarity.

Java example #1:                          

static <A1, A2, R> {A1 => {A2 => R}} curry({A1, A2 => R} fn) {
   return {A1 a1 => {A2 a2 => fn.invoke(a1, a2)}};
}                          

Smalltalk equivalent:                          

curry := [:fn | [:a1 | [:a2 | fn value: a1 value: a2]]]
                           

Java example #2:                          

static <A1, A2, A3, R> {A2, A3 => R}
      partial({A1, A2, A3 => R} fn, A1 a1) {
   return {A2 a2, A3 a3 => fn.invoke(a1, a2, a3)};
}                          

Smalltalk equivalent:                          

partial := [:fn :a1 |
            [:a2 :a3 |
             fn value: a1 value: a2 value: a3]]

This is what I meant about “hoops”. The type information you have to supply for the Java closures detracts from the clarity of the code. It’s clunky. That’s for sure.

I’m not going to say anything about these structures (”curry” and “partial”) right now. If readers would like, I can write a post just on them, explaining how they work, and how they can be useful.

Bloch’s proposal

Bloch put forward a proposal, that rather than adding closures to the language, at least in the near future, that Java designers instead focus on creating concise structures (ie. add features) that implicitly create anonymous classes, to eliminate the verbosity (I guess this was his answer to the challenge of concurrency), handle resource allocation, and critical sections for threading. Basically it sounded like he favored the stylistic approaches that Microsoft has taken with .Net, with some differences.

He rejected out of hand the idea of adding library-defined control structures to the language, something made possible by closures, because it will encourage dialects. Squeak has a lot of library-defined control structures. I think they work quite well. They don’t change the fundamental rules of the language. Instead they expand its “vocabulary”. That is, they expand upon what you can do using the language’s existing structures. I understand this is hard to imagine in the context of Java, because most programmers are used to the idea that control structures are invariants in the language. Bloch would probably feel uncomfortable with this concept, but ask yourself which language is getting more cumbersome and complicated as time passes?

I think there is a fundamental contradiction in goals between what Bloch says he prefers about Java, and the growing problems of computing. He says that adding features to a language increases its complexity, and he makes a good case for that. Yet, how is Java going to solve new problems in the future? His answer is to add more features to the language. Granted they’re focused, and not open-ended to allow further expansion, but they’re still feature additions all the same. As is illustrated by Squeak, library-defined structures would actually help reduce the number of features in the language. Even though Squeak can do more things concisely than Java can, the feature set of the language is very small. As a point of comparison, Lisp’s language feature set is even smaller, yet it’s more capable of handling complex problems than Java. They accomplish this by taking what Java does as a built-in feature, and use message-passing (Squeak), closures (Squeak, Lisp, others), an extensive meta system (Squeak, Lisp, others), named functions (Lisp, Scheme), and macros (Lisp) instead.

Where Java sits

I agree with Bloch that if the intention of Java was to be a language that is “practical” (ie. is designed from the standpoint of instrumental reasoning), easy enough to use so “you can just code”, and doesn’t strain the ability of Java programmers to understand their code, then generics should’ve been scaled back, closures shouldn’t be added, and his suggestions for expansion should be considered. Unfortunately this also means that it’s going to get harder and harder to work with Java as time passes, because the demands placed on it will exceed its ability to deal with them. Maybe at that point people will pursue another “escape hatch”.

Struggling to transcend Java

I compliment the Java community on its efforts to build something better out of a limited platform. What some are trying out is the idea of a VM of VMs. That is, building a VM on top of the JVM. This creates a common computing environment that enables some interoperability between different computing models, while at the same time transcending some of the limitations of the JVM. From what I hear, it sounds like it’s been a struggle. Personally I think it would be wiser for the industry to start with something better–a “theoretical” language/VM–and then try to build on top of that. Our computing culture has a lot of resistance to this idea. Even the efforts of groups to build better language/VM architectures on top of the JVM seem to be regarded as curiosities by most practitioners. They get talked about, and get used by a relative few who recognize their power for real projects, but they’re ultimately dismissed by most developers as “impractical” for one reason or another.

It’s funny. Several years ago I talked with a friend about how slow Java was. His solution was to “throw more hardware at it” then. Some months back I told him about Groovy. He read up on it and dismissed it as too slow. Why not just “throw more hardware at it”? I didn’t hear that recommendation from him. I didn’t press the case for it, because I didn’t have a dog in the fight. I’m not part of the Java community. I figured if he didn’t want to pursue it, he either had a good reason for it, or it was just his loss. My inclination is to believe the latter. I guess by and large there’s not enough pain yet to motivate people to reach for something better.

—Mark Miller, http://tekkie.wordpress.com

Bill Kerr, a teacher/blogger I read regularly, wrote a post recently that I enjoyed immensely, called “What is maths?” He doesn’t answer the question, but what I like is he cites some other articles that talk about what math is not. They make it clear that a) we’re probably not being taught math completely in schools–even though we think we are, and b) our perception of what math is causes us to discredit it in our daily lives.

Ever since I was a teenager I heard the occasional adult who said, “I learned X, but I never used it.” We take the math skills what we learned for granted. By “math skills” I don’t just mean how to solve equations, but the mental skills we learned in order to solve equations but the mental perception that is acquired as a result of solving them. My guess is lots of people use those skills it in other aspects of their lives, but math doesn’t get the credit.

This is something I became concerned about when I wrote a post around a video M. J. McDermott produced about math education in the state of Washington. She said that high school students were not learning about higher math skills like algebra, and Trig., but instead were put into a focus on “everyday” math skills that people could use to solve arithmetic problems in their heads. I looked into this a little further and it sounded like this curriculum came out of the mindset of these people who say, “I learned quadratic equations in school, and I never used them again.” It sounded like they’ve just chucked those disciplines out, because hey, nobody’s going to use them in real life, right?

Kerr’s quotes make some really good arguments against what people think of as “math”. I’ll give a couple examples.

Kerr cites a math professor, Dr. Robert H. Lewis, who talks about the snide remarks he gets from some adults who complain they were taught quadratic equations, but never used them again–they were “useless”. His response is basically, “Yeah, so what?” He said it’s like saying, “You know, I can’t remember anymore what the name of Dick and Jane’s dog was. I’ve never used the fact that their names were Dick and Jane. Therefore you wasted my time when I was six years old.” He said the point was not to learn about Dick and Jane and their dog. The point was to learn to read.

A commenter to Kerr’s blog, named Maggie, cited another good example. Atheletes use weight training to develop their bodies for their sports, like football. Does weight training have anything to do with throwing a ball, catching a ball, or running it down the field dodging linemen? No. So what relevance does it have? Exactly. It has no direct relevance to the sport, but it’s a supportive activity that promotes better performance in the sport. She said, “Math is exercise for your brain.”

There’s a larger point to Kerr’s post that I don’t really cover here, but I think is worth exploring.

As for me, I think I got an OK math education in school (public school and college). A lot of it was pattern matching and symbol manipulation, but I didn’t have a good grasp for what was going on half the time. For the courses I took where I “got it”, I was grateful. I truly enjoyed the experience of delving into the math, understanding it, and exploring by myself how it applied to problems in the real world. In the other courses, I was able to do the symbol manipulation–go through the motions–but I didn’t have the foggiest notion as to why we were doing what we were doing. What did it mean? I felt like a dumb machine. This happened mostly in my college math courses. I could produce the correct answers on a test some of the time, but when it came time to apply the math concepts to a non-theoretical problem (outside of math coursework) I was as ignorant as I was before I took the classes that taught them. This is a frustration of a different sort. It’s not that I thought the math concepts I was taught were useless. It’s that I went through the course not truly learning the math the course was ostensibly supposed to teach. To all appearances though, I’d learned it to the school’s satisfaction.

I think I’ve ended up learning more about the aspects of math I didn’t learn in school from my work as a programmer. I can compare and contrast math forms that I can work with in programs with the math forms I saw in school that were purely theoretical. Some of them are similar, and some are different. What’s helped is seeing “math in action” in my programs, not just declarative symbols.

I think the math I learned in school helped me in my programming by driving home the notion that something that looks complex can be transformed into a simplified form by deconstructing it to its essential elements, without losing any of its meaning. The symbol manipulation skills really help, too. The set theory I learned in Discrete Structures (in college) has helped out a lot. In terms of direct relevance, that was the most relevant math course I’ve had.

Anyway, Bill Kerr asks some really good questions. Check out his post.

Edit 2/29/08: I made some corrections, because I realized that in the 2nd paragraph I had mischaracterized what is really learned in math. Kerr’s post delves into this more. I realized that instead of saying “math skills” that are acquired from the activity I should’ve said that the activity helps us gain a new mental perception, which allows us to form new ideas on how to see things.

—Mark Miller, http://tekkie.wordpress.com

I found this item on reddit. An entry in the GNU Smalltalk FAQ, under the heading “Does GNU Smalltalk run Seaside?” says that it will support Seaside in a release scheduled for March 8th. Now, the FAQ posting that says this is dated June 20, 2007. I’ve asked about this on reddit. Has the release date slipped any since then? Anyone know?

Anyway, this is good news. It gives those who want to use Seaside more options. GNU Smalltalk offers operating options that some find more convenient for what they’re trying to do. For example it offers good scripting support. Of course, I’m not sure if the scripting support will be compatible with Seaside. I guess we’ll see.

I used GNU Smalltalk a bit in college many years ago. It was the first implementation of Smalltalk I encountered. It was really my first exposure to OOP. We used its scripting support then–just the Smalltalk language. We were told about the Smalltalk system that was developed at Xerox, but we did not use the whole system with the GUI, browsers, workspaces, transcript windows, etc. It was very compatible with the “Unix way”. You wrote your code in vi, Emacs, whatever, and then ran it through the interpreter on the command line. The code we wrote looked similar to a file-out of Squeak code. The metadata was a little simpler. One oddity (I think) was if you wanted to print something out to the console you had to wrap it inside of an array and use its printNl method. For example:

#(’Hello world’) printNl

Yep, we even had to wrap strings. Even so I thoroughly enjoyed the experience at the time. Ah, memory lane. :)

Edit 2/27/08: I got a little more information. It turns out the FAQ posting about this on the GNU Smalltalk site originally said something vague about how “Seaside could be made to work with it”, but was updated just recently to say that this implementation will support Seaside on March 8th. So the release date is a firm one.

—Mark Miller, http://tekkie.wordpress.com

Presenting the XO Laptop

The XO went into production late last year, and I’ve been looking for interesting material on it to talk about here. David Pogue of the New York Times did a review of the XO last year, but I just found the video for it.

 

I think he does a really good job of presenting it in an approachable way. He mentions a “give one, get one” program that went on for a while, on into December as I recall. At first it was only going to go on for a few weeks, but it went for several. That’s encouraging. It must’ve been doing well. OLPC is not offering this anymore. You missed your chance. Maybe they’ll restart it again in the future. I think it’s a neat idea.

The feature that made me a bit giddy was where he said that with one keypress you can look at the source code for any program you’re running, and even change it. He also mentions that there are three programming environments on it (one of which is Squeak), but only talks about Python, which is what most of the software is written in. He notes that there’s also a ”restore” button that restores things back to its ”manufactured” state “in case you make a mess of things”. This could encourage programming all the more, because it takes away the risk that you could royally hose your computer so you can’t use it anymore.

Finally a computer that actually invites its users to become programmers. How long has it been since I’ve seen that in the U.S.? Only this laptop was not designed with kids in the U.S. in mind. It was designed for poor, deserving kids in developing nations. Apparently most kids in the U.S. don’t like the idea of programming, not even college students (I know the link is old, but nothing’s changed). It’s sad. Perhaps if CS programs at universities would re-think what they’re doing, take a look around them, and try something creative that really meant something to people we’d see interest return. Unfortunately too many think teaching CS means teaching Java. I pity the beginner who tries to pick that up. I think the XO is going in the right direction, because it gives users “something to chew on”, and it uses a language that is more flexible and powerful than Java. If only it was around when I was growing up.

Hi guys. I’m still very busy with other stuff right now. I’ve yearned to get back to my research, and sharing my findings on here. I’ve had to be patient and persistent. It’s going to be slow-going for a while.

I found this article on reddit, called Rental Car IT, by Neal Ford. It encapsulates what I think is going on in IT, in the large. That is, companies are unwittingly making their systems more complex, not less, and therefor less manageable as time passes, due to what he calls “accidental complexity”. The reason I’m covering this here is the mindset it illustrates in our industry applies just as well to the issues of software development.

Ford talks about customers he’s done business with, and how he tries to talk them into simplifying their systems. They seem to agree in principle with the idea, but when it comes down to making a decision they consistently choose the “less risky” option of buying off-the-shelf software, which ends up making their systems more complex and unweildy than they were before.

Ford also points out that customers frequently spend millions of dollars on pre-fabbed systems to solve simple IT problems.

He talks about something which has been a bone of contention for me. He describes an incident where he suggests to a senior IT guy that they talk to the users about what they want out of the system. The IT guy scoffs at the idea, saying the users should have no say in it, because, “We’ve tried talking to them–they don’t know what they want, so we have to define it for them.” Justin James talked about a related subject in a blog post called “Enterprise software is about data–not people”. I and Justin’s other readers had a good discussion on there about this. Ford says this attitude has the effect of creating cumbersome, complex systems that hinder important things like customer service. I agree users tend to not know what they want, but that doesn’t mean they should be totally ignored. All this attitude does is hinder productivity. The users are a part of the business operation. If a system is not working in a compatible fashion with the way they think and work, it creates inefficiency, because users are having to repeatedly take their minds off the real task they’re trying to accomplish so they can “deal with the machine”.

Some of the comments to Ford’s post were interesting, too. One said that it’s all about risk to the decision-makers, not to the company. If a project goes bad and they used a package from one of the major vendors, there are a lot of other people that can be blamed for the failure. Whereas if they try to develop the solution in-house and the project fails, then the IT executives themselves will be on the chopping block.

The sense I got from reading this is that increasingly enterprise IT development is being sequestered; moved, separated from the company, precisely because of past IT project failures. In other words, our ignorance about what we’re really doing is gradually discrediting IT development. People don’t want to take the risk anymore. I am reminded of a phrase which goes, “The biggest risk is not taking a risk at all.”

This attempt to remove risk and liability from internal IT is not necessarily serving companies well. What’s being missed is that a business’s computing systems should model the business. Companies such as the ones described in the article are attempting to fall back on an Industrial Age idea of solving a problem by acquiring standardized equipment (software systems) and making it interoperate with their existing equipment (software systems). In other words, take something that was designed by a group of engineers who have no idea what your business is about, and was designed with a particular purpose in mind, while at the same time it tries to allow some customization (it isn’t always flexible/generic enough to allow the customization you want), and attempt to make it model your business. Another name for it is “the data processing mindset”. Users are mere “operators” of this equipment, just as their industrial forebearers were. Their job is to learn how to operate it, and use it the way it was designed–without them in mind.

These businesses are trying to build their computing systems using Computer Engineering and Information Systems disciplines and infrastructure almost exclusively, avoiding what Computer Science and Software Engineering have to offer to the organization–sequestering it to the major software companies. They want to deal with pre-fabbed “boxes”, not code. The reason this doesn’t work well is they’re dealing with information, not widgets. They’re delivering a unique service, one where domain-specific information and semantics are key components. This is not a manufacturing process, and in the long run it cannot be dealt with effectively using this mindset.

—Mark Miller, http://tekkie.wordpress.com

I heard on the radio a couple days ago that CompUSA is going out of business. It’s been sold to a private equity company, and the plan is its stores will be gradually liquidated. This is not the end of the computer retail chain as a fixture in our society. Now there are Apple stores, but they’re really the only ones left. The main reason these exist though is because of the iPod and iPhone. MacBooks have been selling well, but I think the sales and profits of the iPod and its successors make the computer sales pale by comparison.

This isn’t to say that you can’t buy a PC at a store after CompUSA goes away, or that you’ll only be able to buy a Mac. You can still get PCs at Circuit City and Best Buy. PCs today are becoming media devices–consumer electronics. CompUSA tried to compete with these retailers by introducing consumer electronics into their stores, but I guess they weren’t as good at it. They were good for buying some electronics though. I bought a decent Canon digital camera from CompUSA for a really good price last year.

If you still want a techie/power user PC I’d recommend a mom and pop store. I think They’re still around. Or, get one at Dell or HP (mail order).

The PC business is definitely going through a transition. Somehow I think the future of the PC is your mobile phone…or maybe your TV. It will practically disappear. In some ways this makes sense, but until the I/O interface is figured out so that people can actually use it in a sophisticated way the prospect makes me cringe.

What was the PC revolution for, anyway? Was it just a way to digitize analog media?

This has been a question in the industry for a long time. In one of my previous posts I embedded a vintage episode of The Computer Chronicles on the Atari ST and Commodore Amiga. In it Gary Kildall made the comment that after buying 8-bit computers, “People have gone back to their VCRs”, and computer companies were needing something new to attract those customers back. Even then people saw computers as “media devices”, but it was more obvious they were something different from a phone or a TV. They were something you attached to a TV or monitor. What’s going on now is the maturation of the technology. Different media are being integrated together. It’ll be interactive, but centrally controlled. I suppose most people are looking forward to this future, but I’m not. Computing can be more than this if people have the vision to make it so.

—Mark Miller, http://tekkie.wordpress.com