Nick Mudge Ignition Software Consulting & Development

I heard Microsoft bought Facebook for $240 million and looked into it and found that Microsoft didn't buy Facebook, it only made a $240 investment in it for 1.6 percent of the company, according to Associated Press, who reports that Facebook is worth $15 billion. Is something nuts here or did News Corp. get a spectacular deal for buying Intermix, which owns 53 percent of MySpace (but reports say it plans to buy out the rest) for only $580 million?

Facebook News Reports:

Microsoft buys Facebook slice
Microsoft Deal Values Facebook at $15B

MySpace News Reports:

News Corp.'s Place in MySpace
News Corp in $580m internet buy
News Corp. to Acquire Owner of MySpace.com

When did Wikipedia start? It started in 2001. It's come a long way. From 6,000 pages in 2001 to 8.29 million articles in 253 languages in 2007. In the entry about Wikipedia in Wikipedia I found this link to Wikipedia in 2001. Here's another one.

Recently I've been reading a great little book called The Little Schemer. The goal of the book is "to teach the reader to think recursively" and it uses Scheme to do it. I found out about it and was inspired by Douglas Crockford who has his webpage The Little JavaScripter.

Interesting how the concepts and methods of recursion are the same in different languages. I guess that's pretty obvious but it is interesting to see. In looking at Scheme I can't but think of Haskell's pattern matching and type system. Haskell makes recursion concise and elegant.

It became much more real to me recently why Haskell is good for parsing and maybe for writing compilers. Because I learned that a compiler is really a parsing problem, and a parsing problem is really a tree problem and a tree is really recursive. You take some text that is high level language and parse it into a tree. And you parse it some more, breaking it down into smaller and smaller pieces, closer to machine instructions. You get it to a point where you can replace the pieces in the tree with machine instructions (or assembly or something) and spit them out into a file in the correct order.

As an anonymous reader commented, writing compilers isn't tied to any specific programming languages, it's the programming logic that matters. It's interesting that such a high-level, abstract language like Haskell might be great for producing the most concrete, lowest-level code, machine code.

Steve Folta wrote on programming.reddit.com:

You take some text that is high level language and parse it into a tree. And you parse it some more, breaking it down into smaller and smaller pieces, closer to machine instructions. You get it to a point where you can replace the pieces in the tree with machine instructions (or assembly or something) and spit them out into a file in the correct order.
It's a wonderful dream. But where it differs from reality is that processors only have a finite number of registers. (In the case of x86, a ridiculously finite number of registers.) So a real code generator has to use some rather less beautifully recursive method of allocating those registers.

According to an article on Linux.com the New York Times has open sourced two projects that are used for its website. It also has an open source blog (open.nytimes.com) about the technology it uses.

This doesn't surprise me that much since it seems like a natural progression. For one, media companies, such as newspapers and magazine companies cannot just be publication or media companies to be anything on the web. They also need to be software companies. I can imagine media/publication companies skimping on software because they think it isn't their business. No, on the web, software is their business because publication on the web is intimately connected with software.

Open source is a very popular form of publication on the web. So doesn't it make sense if you are a publication/media company and you have good publishable content (your software) to publish it? I see other benefits in this as well, such as more communication and wider dissemination about features of your website, and the possible software improvement and feedback about your software/website.

A great example of software developed specifically for a Web media company and open sourced is memcached, which is a memory caching system that was developed for LiveJournal.com. It's now used by other big sites such as Flickr, Digg, Wikipedia and TypePad.

Update: I just actually fully read that Linux.com article. That's a *great* article.

Derek Gottfrid, New York Times senior software architect:

"We're no longer just a print company, we're a technology company. We need to express ourselves in technological terms. The best way to do that is to give the developers a voice."

Lately I've been spending time studying lower-level stuff.

It's interesting that you can tend to think at the level at which you are programming or studying.

When I was studying functional programming I was thinking in high-level terms of elegance; building small pieces of independent functionality that compose together to attack masses of data. Beautiful. That's really programming.

In low-level programming I think "How does this work?". For me low-level programming is really about how things work.

Recently I was doing some string manipulation in a higher language and I was wondering what I was really doing. How this string manipulation was really being done.

Have you ever written code and really wondered what it was really doing? You know and understand what it is doing at the level of the programming language, but what is really happening? Why, how? Is this really inefficient, does it matter? And efficiency aside, just in general interest, what is happening?

Ah yes, premature optimization is the root of all evil. Maybe learning assembly language is the greatest premature optimization. If so I'm guilty. That's like optimizing programs you don't even know about yet because when you write them you'll understand how to write them in a way that is efficient. Maybe so... It seems like it. Speculation, speculation. What do you think?

But for me, even though optimization is so nice and juicy, learning low-level, learning assembly, and even C, speed and optimization is secondary. I want to know what is really happening.

Why do I want to know what is really happening? It's the same reason I'm a programmer. Software is really neat and I want to know how it works and do it. Why are you a programmer?

I have a great book on C. It is called C Primer Plus. It explains C programming in great detail, in an easy and clear way. I feel like I'm learning C without having to program in it.

My biggest problem with C is that it is portable. C aims to be portable. That means there's these abstractions that hide details of what is going on. So off to assembly I go.

One of my high interests in software and programming and one of my goals is to understand the point where hardware turns into software. Right now, I'd say it is that point where a hardware designer designs an interface between his hardware and software programmers. From what I've been learning, I'd say this point is around the CPU, knowing the instruction set of a CPU and using it.

It's interesting that when you are writing software, you are writing it for an interpreter or a compiler. I've just started to get into assembly but it is apparent to me that you are really writing your code for a CPU, for hardware, and you're thinking of your hardware, and not so much your compiler or an interpreter.

I'd really like to write great high-level software, like functional programming, but write it for the hardware, via a compiler/interpreter. To know the compiler/interpreter so well that when I write my code I know what the compiler/interpreter will do with it, and in turn know what the hardware does with the results of the compiler/interpeter. I also know I don't want to be portable. What must one do to know one's compiler/interpeter and hardware so intimately to do this? Write one's own compiler/interpreter in assembly and C ?

Eric Raymond's famous words: "LISP is worth learning for the profound enlightenment experience you will have when you finally get it. That experience will make you a better programmer for the rest of your days, even if you never actually use LISP itself a lot."

I've heard echos of this applying to functional programming languages such as Haskell and OCaml.

In Joshua B. Smith's book Practical OCaml he says:
Using OCaml will also make you a better programmer. This may sound like snake oil sales pitch, but remember that programming is about algorithms and data structures. Learning a new programming language expands your understanding of these concepts, resulting in a a better programmer in you.

In the TV show Heroes, Hiro Nakamura searches for the sword that will return his powers and enable him to realized his full potential.

But, alas, he finds, as his father tells him, it is not the sword, it is the man.

Likwise, it is not the programming language, or programming environment or technology, it is the man.

Sure, some programming languages and technolgies are more suitable for things than others. But it is the man whose chooses his ways to meet his intentions, desires, and dreams.