My (long) note to the creator of Sierra

I’ve spent the evening trading e-mail with the creator of Sierra. Please forgive the lack of context, but I’m posting my last reply, since I think it sums up my thoughts on the language well.

Ok, I’ll shift my focus from Sierra as implemented to your stated higher level goals for the purposes of trying to illuminate my points.

As background I skimmed EWD340, not having read it in 20 years, and a couple of Milner’s papers contemporary to the IFIP paper since I don’t have a copy of that handy at the moment. You weren’t specific on Dr. Hoare’s work, but I’m relatively familiar with a large portion of it.

I think it’s somewhat disingenuous to talk of a real-time bug checker, since the vast majority of bugs that are hard to find belong to the second class of programming faults described by EWD, those that there is no proof of mechanical recognition. Indeed, even though his specific example ( loop completion, now a subset of fixed point determination) is a much better understood problem, it is not deterministically possible to predict the outcome (the halting problem). Nor are you correct in your assertion that one has to wait until compile-time for existing languages to find bugs. Static analysis can and has been integrated into IDEs (Kleidermacher; 10.1109/THS.2008.4534479).

I can’t address the specific 1986 paper from Milner, but as a general situation, it appears that he was interested in formal abstractions of what code does as opposed to natural language programming per se. Since the problem of natural language programming is itself a composition of natural language processing (an open problem) and automatic proof building (also an open problem), I going to assume that you intend to approach the problem of correct code from the perspective of formal abstraction. In that case, it’s pointless to talk about the Algol derivative languages since much more modern pure languages are at our disposal. Haskell (which implements Hindley-Milner type inference) would be a much better launching point, but I think many of the problems you seek to solve are non-issues in Haskell. The difficulty of programming in Haskell stems from the need to express human thought as a formalism.

This leads to your interest in cutting C in half. Haskell accomplishes this by removing much of the overhead of Algol derived languages, but the result isn’t human readable.

Fibbonacci in Haskell:
fib n = fibs (0,1) !! n
where fibs (a,b) = a : fibs (b,a+b)

This is neither easy to read, nor immediately intuitive (though admittedly it would be hard to have a significant logic bug in this code).

Sierra as it exists today isn’t a level above existing code since it doesn’t significantly vary from C. That example I sent earlier is neither terser or more readable than the equivalent C code. Nor does much in your existing specification show progress towards more intelligible code. While I understand that this represents a first step, it is essentially a step *backwards*. “var” was implemented and discarded by Wirth in Pascal. Operator overloading (+ as addition and concatenate) was tried and discarded in C++. “y@myPixel” is neither better nor worse than myPixel.y, but having both is confusing and neither implies that y is a property of MyPixel.

Many languages have obviated the need for C pointers and direct memory management (see Java, Haskell, etc). In fact, it is possible to have a reasonable garbage collector for C (Boehm, Spertus, WG21/N2310=07-0170). Nor is verboseness particularly a problem (EWD said as much in ’72), human communication is terribly verbose with low S/N and lots of redundancy to make up for it. Nor do I think there is a compelling case that interactivity can improve the situation.

You speak of “higher up” than “traditional languages”, but the truth is that you still seem to be generating a 3GL language without even addressing the existence of domain-specific and constraint based languages (4GL and 5GL respectively). Indeed most new language development seems to be integrating 3-5GL into comprehensive systems. Frameworks like Hadoop have us programming across large-scale distributed systems, They’ve abstracted away the idea of a single execution thread or even a single computer, and they hide the network/memory/latency issues in ways that I don’t think you’ve even considered.

I just saw a blurb about “Julia” (http://julialang.org/), which appears to be an attempt to be most things to most programmers. I don’t know anything beyond the press release, but frankly they at least are hitting all the right notes.

And I think this is the fundamental problem with your pitch for Sierra (here and during the last 3 years). Your approach and materials seem to have ignored the last 25 years of programming language research and development. Whether the end product is compelling or not is impossible to judge because what I can see of it today doesn’t seem well informed. I took the time to read some of the trials and tribulations you seem to have suffered in trying to bring Sierra to market, and while I feel for your struggle, I wonder if you ever had competent technical advice. Your existing demo tackles the problem from the wrong level. You’re taking a bottom-up approach to developing Sierra (which is appropriate), but there doesn’t seem to be a top-down roadmap for the language. I have asserted that you seem to have moved backward from C, and without seeing where you’re going I have no way of assessing otherwise. General assertions that there are higher-level, fuzzy logic components in the future have the ring of SHRDLU (Winograd, MIT AI Technical Report 235, February 1971). It’s 40 years later, and I don’t think we’ve made much progress with that project either.

So maybe that’s my advice to you. Get a roadmap together. Let’s see a architecture overview for Sierra. Let investors (Kickstarter and VC) know that you’re aware of what has been tried, and have concrete ways to do better. At this point, it’s not about the code, it’s about the path.

Hosting changes

Things are a changin’ at Knot.

I’ve started the ball rolling at moving the server infrastructure to a web-hosting provider.
It looks to me like most/all of the functions we still depend on can be much more economically handled be an external hosting company. There’s the additional benefit that I’ll be less involved in routine maintenance and security. It should also cut costs by about 10x-12x.

WordPress instances and custom (sub-)domains should still be supported, along with e-mail and forwarding.

If anyone who uses our server or services is worried about the transition, please contact me and I’ll review your needs and try to address them.

Sierra, again.

OK, there are other things I meant to post, but I ran across the latest update on the Sierra language Kickstarter, and I really need to comment. First the update:

Update #1: Sierra to Objective C
Posted 5 days ago
I have decided that the project will first translate into Objective C
rather than having Sierra translating into C
so that software development for the iPhone and iPad can
be accelerated by 10X for each programmer and it will reduce bugs
by at least 50%.
So the funding for this project will focus on having Sierra translating
into Objective C.
Please everyone who currently codes in Objective C add your input
to the design of the Sierra language.
Blake

<rant>
Oh my fracking lord! I don’t even have words for this.

I think it’s basically programming 101 that any superset of C allows for the inclusion of C. Any C-preprocessor that generates C will perforce work with any superset of C. That’s the bit that anyone with a passing familiarity with C/C-front/C++/Obj-C/Turbo-C/Tiny-C/etc. would know.

But to compound the idiocy (and that’s what we have here), the idea that Obj-C programmers would be 10x faster because of SYNTAX improvement is absurd. The majority of ideas in Sierra don’t even really make sense in the context of Objective-C.

Additionally, Sierra doesn’t even begin to address any aspect of iOS programming. Objective-C might be the language, but all the heavy lifting (and therefore the bugs) stem from the iOS frameworks. Creating new/better frameworks might be a worthy goal, but is thisthe project, or the person to undertake that task? If someone came up with a DWIM-framwork, that might make us 10x faster, maybe. I’d be skeptical even then. Heck, most iOS/MacOS programmers would be more efficient if all the existing frameworks actually worked exactly as documented.

Finally, will someone tell this guy that declaring yourself associated with the iPhone/iPad does not automatically make your idea better? This needs to go away. Now.
</rant>

You can see my previous posts on Sierra: here and here.

Who knows Best?

I was thinking about what’s wrong with Sierra (see my previous post), and I realized that it mostly sounded like someone asked a CS100 student for a list of things they disliked about C. This immediately led me to consider if that’s ever a good idea. Should we ever ask users — especially novice users — about how to improve a product. While my initial reaction is, “definitely not”; my second reaction is more considered. There are times and places where the opinion of experienced users is deficient — they don’t expect anything but what their used to getting. But the danger with novices is that they make short-sighted decisions based on an incomplete understanding of the problem.

It’s moments like these that I ponder the recent success of Apple. Apparently, a couple of people (Jobs & Ive) guided them to the top of the gadget industry based on their insights. It appears to me, what you really need is the input of a few people with very good “taste”. Jobs had great taste in gadgets. Ives has great design taste. To design a new programming language, I’d want the input of people with great programming taste. I have ideas of who I’d ask among my friends, but I wouldn’t go on my tastes. I’m too ingrained in the C/Objective-C camp to be of any use to anyone in terms of new paradigms in programming.

My background and experience tell me that design by committee, or worse design by focus-group, does not produce great solutions. At best, “design by mob”, produces large and possibly diverse solutions. A quick look at most open-source projects/fork-fests shows the results of such efforts.

Any design effort requires two things: great insight and clear leadership. A sufficient amount of one can make up for a minor lack in the other, but eventually both need to be there.

Sierra programming language

I ran across the Sierra Programming Language yesterday on Kickstarter. First, I thought it was odd seeing an open source programming language looking for funding. Most of these projects seemed to move forwards pet projects for some programmer or another. The inventor makes some pretty bold claims (5x-6x faster programming). Then looking at it, a couple of things struck me (roughly in order of realization):

  • the inventor was initially trained in Pascal
  • he also has never seen C-front
  • why is it compiled on Google App Engine?
  • it’s case-sensitive *and* in-sensitive — because that’s easier?
  • it’s a mess — there are multiple semantic meanings to a given syntactic phrase.
  • this throws encapsulation out the window and calls it a feature
  • position matters [forehead smack], see Cobol for why this sucks
  • thinks variable aliasing is such a good idea — it’s a first-class concept

So, I now know why this project needs funding. The inventor is not a compiler person, and no self-respecting PL person would do this unless it was a job. There is a more fundamental problem at work here — the inventor thinks that the difficulty with programming is syntax. But that couldn’t be further from the truth. Some small percentage of people probably hate the rigidity of programming languages (which Sierra does little to address), it’s that most hate the lack of intelligence on the part of the computer. People want to express themselves ambiguously, and have the computer make intelligent decisions about what they really mean. Sierra thinks people want to write:

loop from 1 thru 100
write currentloop
end loop

when really they want to say is:

show all the numbers from 1 to a hundred

The first example is syntactic sugar, the second requires a system to make at least one intelligent decision (“numbers” really means “integers”), and possibly more (ie. what does “show” mean?).

Truth be told, even with significant AI involved, some people would have trouble programming. It’s just doesn’t seem to be in their nature. But even for those who have the inclination to program, Sierra doesn’t make many improvements over other languages that are already available. It mostly seems to be a mish-mash of some OK features with some known bad ones, all in the name of making C (!?!) easier.

No amount of syntax change is going to make programming faster, easier, or better, especially when it throws out features that make accessing using existing code easier (lexical scoping, independent compilation, etc). Amusingly enough, this project is apparently being written in Python — a language that is significantly nicer than the one being proposed.

Unboxing: XMachines Lorei 3D Printer

Here’s a quick post just to show the unboxing video for our new 3D printer, an XMachines Lorei.

It arrived in a pretty large box, much bigger than I expected.  Here’s a photo, with a spool of filament next to it (the spool is 8″ in diameter).

XMachines Lorei 3D Printer shipping box
XMachines Lorei 3D Printer shipping box

Ok, here’s the unboxing videos, no editing, and not really any commentary.  I’m just posting these to get them out there as fast as possible.

 

 

I’ll add posts with the assembly process later today.

iFit SD card format

Gleaned from posts at: http://www.triathlontrainingblog.com/post/ifit-workout-cards/, and analysis of the demo SD card files available here: http://www.fitnessblowout.com/bnew/ifitLive/supportSDSampleDownloads.html

Note: use a small (1GB or less SD card)

A workout is comprised of a number of binary records.

First 2 bytes of the file indicate the number of records in the workout

 

 

Each record has the following format:

Key records:

0C 14 E0 – 2nd value sets time initial time (20 minutes)

06 22 00 D8 – 2nd value sets initial speed (3.4)

08 46 B2 – 2nd value sets initial incline (7.0)

Minimal Windows 7 (for VM templates)

I keep a small micro-SD card with a bunch ISOs and VM templates for ready use (using a niftyDrive). As a result I need a minimal Windows 7 install that I can use as a VM template.

The goal: Windows 7 fully patched, with Bitdefender and Chrome installed.

Here’s the steps I used to create mine:

Install a full Windows 7
Install Windows AIK
Install BuClean Suite
Run 7Customizer in BuClean
Chose to use customize from a Windows 7 SP1 iso (could have used a CD/DVD as well).