How to Pass an Interview with Me

I do a lot of interviews. I mean, seriously, a lot of interviews. One a day is getting to be pretty normal.

I’ve read before Jeff Atwood’s classic “The Non-Programming Programmer,” and it’s still disturbingly valid, half a decade later: A very large percentage of the phone screens and in-person interviews I do are dismal, epic failures: The person can’t code, and, more significantly, doesn’t realize how poor their coding skills are.

Our dev shop is populated by really capable people. We get stuff done. Our flagship product has two and a half million lines of code in it — and growing — and there are a raft of satellite products orbiting not far from its gravitational well. And it’s not large because it’s wasteful; it’s large because that’s the smallest we could make it and still do what it needs to do.

And what that means is that if you want to join our staff, you have to know what you’re doing. We don’t have time to hand-hold. You need to be able to make stuff on your own. If you can’t deal with a business person giving you some abstract requirements and saying, “I need this in a month,” you’re not going to last. (Yes, we’re Agile, and we do plan better than that quote might imply, but a lot of stuff really boils down to, “Here’s a rough idea, go build it.”)

When you bomb out of our interviews, you’re actually doing yourself a favor. I know it seems like we’re being mean, but I swear we aren’t. In our initial interviews with you, we give you programming problems. Easy problems. These are all things that should have been homework in your Freshman or Sophomore year of college.

And any one of our current employees can do these problems in about five minutes. Literally. We’ve had phone screens that ran 15 minutes total. The reason we give these easy problems is because the real work is way harder. You’re never going to last in a two-million-line codebase full of graph algorithms and complex data structures if you can’t count letters in a string. We know this because we used to have weaker interviews, and people bombed out hard during the first month of employment afterward.

So here’s the deal. If you want to work for us, here are the critical parts:

Continue reading

Comments Off on How to Pass an Interview with Me

Filed under Programming

MayJuneJuly

The latest: We’re expecting! The due date is the middle of February. First ultrasound looks good. Robin’s pretty sick a lot of the time, but there’s only a month left in the first trimester, and we’re hoping the nausea settles down after the first trimester like it did with Alan. She’s a lot sicker this time, and thinks that maybe that means we have a girl. Hard to say, but we’ll find out!

Alan keeps growing. He’s at the just-shy-of-terrible-twos now and exerting his independence by means of tantrum. (Lord help you if you want to change his diaper, or if you leave the room without his permission.) We took him to the zoo for the first time last weekend, and he was far more interested in the carousel than the animals. Ah, well. He recently learned that he can stack his alphabet blocks into towers, which has been highly entertaining to watch. Still no speech yet except for going “nyaah” when he sees a cat (it’s his “meow”), but with any luck, he’ll at least figure out “Mommy” and “Daddy” soon. He certainly knows what we’re saying, and nods (and waves his arms) and shakes his head (and waves his arms) to indicate “yes” and “no.”

What’s new in Smile-land? Back in April, I started rewriting the interpreter in C. It was never going to be fast enough in C#, and I always knew a C or C++ port would be necessary. I rejected C++ after a few attempts (more thoughts on that below). So far — well, I have a garbage collector and a working String object and a bunch of unit tests and that’s about it for the last three months. I only get an hour here or there at best to work on it. But Ben recently challenged me to have a minimally-usable interpreter by Christmas, and that’s put a little more fire under my butt to do something about it.

On C++

I rejected C++ because C++ is C++.

Continue reading

Comments Off on MayJuneJuly

Filed under Personal, Programming

Well, that was fast

Blink

You blink, and six months go by. That’s what having kids is like, apparently. I could swear we were just gearing up for Thanksgiving, and now it’s spring and the daffodils are springing up. I just realized how long it’s been since I’ve even seen some of my closest friends. I used to joke about asking “What year is it?” And now, well, that question is starting to seem more legitimate every day.

But haven’t got a lot of news, really. Lots of time spent at work, and a business trip to California. Saw my sister and brother-in-law out there, and their little girl. Worked on the house a bit during the cold months: We have a proper ladder to the garage attic now, and the garage is not exactly clean but cleaner than it used to be. Spent some of the time going to doctors for my injured foot. And Alan’s growing fast; he’s at nearly 18 months now and running around like a lunatic. Kid’s cute as a button, and my wife and I couldn’t be more pleased.

Got a little bit of work done on SpaceMonger’s scanner, but nothing really notable. I’d like to get the core scanner 64-bit compatible and change how it shares data between threads; that’ll improve both performance and stability, and early experiments with it have been promising, but again, time just slips away from me.

Smile

I’ve made a handful of commits to the Smile interpreter. It consumes a lot of my driving-to-work and standing-in-the-shower brain cells. The interpreter is slow as heck (s’what I get for writing it in C#), but the performance can be fixed over time (or a better interpreter can be written). More importantly, it works, and is really quite unlike any programming language I’ve ever used, and I’ve used quite a lot of them. Smile reads simply, a little like a mash between BASIC and JavaScript and Ruby, but it’s actually Lisp and Smalltalk under the hood: Stupid-crazy powerful. I can do things in one line of code in it that would have required large whole programs in C. I don’t have macros or continuations yet (and you have no idea how much I want both of those), but I still can’t get over the fact that it works. This bizarre idea I had fifteen years ago that you could add an object-oriented syntax translation layer on top of Lisp to de-Lisp-ify it actually works, and not only looks good but feels good.

I own smile-lang.org, and I’ve been thinking about possibly publishing the interpreter there for download. I have some (hidden) documentation there right now. I want the interpreter to be open-source — I’ll probably host it on Github, and the source is under an Apache license — but I’m still nervous about sharing a work-in-progress. Things still change in it as I work on it, and as we found the other day, some programs from last year wouldn’t work under the latest interpreter. Many would, but a few were quite busted.

It’s a tough question for me: Share it, and let people complain that stuff is incomplete and some stuff doesn’t work; or keep it private until it’s more polished?

So I’m opening up comments on this posting, because after a year of working on Smile, I really can’t decide about sharing it. If you have a thought over the next month or so, feel free to write a comment, as long as it’s constructive. If the crowd leans toward sharing, I’ll do that; and if not, well, I’ll keep muddling along as I have been until the code’s pretty solid in, say, 2017.

Anyway, that’s that. It’s late, and I’m tired. And yes, 9:30 PM is apparently now late. You see what having kids does to you?

Comments Off on Well, that was fast

Filed under Personal, Smile

When you’re Smiling

Every once in a while, I go back and reread the Reddit thread where they were first talking about Smile. Each time I read it, it’s a reminder of what I’m up against. There are a lot of interesting notions about what’s good in a programming language; everybody has their own pet feature: It has to be as fast as C! It has to allow infinite threads! It has to be 100% type-safe! It has to be type-inferring! It has to be designed for building web services! Did you see how X implemented generics!? And you’d better not leave out Intellisense!!!

It reminds me of back in the ’90s when I worked with this lady who was convinced that client-server would take over the world — by which she meant custom apps running on PCs talking to mainframes. Our worldviews and past experiences skew our expectations toward what we want, and the future often doesn’t play out the way we hope or expect.

(This is gonna be a long post, and I’m going to talk a lot about Smile, including some philosophy and history, a deep-dive into the core syntax, and a bunch of additional examples at the end. I feel like writing a bit on one of my favorite topics. Don’t feel obligated to read the whole thing.)

Continue reading

Comments Off on When you’re Smiling

Filed under Smile

ASP.NET WebForms Without The Suck

Time to Ruffle Some Feathers

ASP.NET MVC gets all the notoriety these days in the Microsoft web-programming world. ASP.NET WebForms is kind of the ugly stepchild, sitting in the back corner, mostly neglected. “Did you see WebForms last week? He was awful, just awful,” say the voices at the party. “But MVC! MVC is sooo elegant. And so smart! Did you hear she was given early admission at Dartmouth?”

Now, I’ve been coding for thirty years, and I’ve seen a lot of technologies, languages, and environments come and go. And Microsoft is a major, major offender in this category: They have a tendency of building these big, awful, overarching frameworks that make the U.S. Federal Government look under-managed, and then they drop them as soon as the Next Big Thing comes along. MFC was a horrendous mishmash of bad ideas that all managed to somehow end up in one ball of code. COM was a fever-driven acid nightmare that the computer industry has thankfully mostly wakened from. And VB — do I really even need to explain why VB is bad?

Which brings us to ASP.NET. Now I know that the original goal with it was to bring the VB WinForms programmers to the web and get them the heck off of the junky VB/C++/COM conglomerations that were killing Microsoft’s own abilities to fix issues in Windows itself. To that end, they came up with some clever abstractions that made the web sort-of vaguely smell like Windows programming for programmers who weren’t really clever enough or willing enough to get with the future.

And if you were offended by that last sentence, then you can stop reading right now, because this article is not for you.

Continue reading

Comments Off on ASP.NET WebForms Without The Suck

Filed under Programming

And that was a year

Alan

My son turns one year old tomorrow. Boggles the mind. Feels like he was born yesterday, or last week or something. This should explain pretty well where I’ve been lately. He’s a cute kid, and incredibly photogenic and well-behaved. My wife and I are really lucky.

But, yes, he’s turning one, and my wife wishes he was still a cuddly tiny ball of joy, and instead he’s now a giggling toddler. This weekend, we’ll have everybody and their brother’s uncle’s cousin’s nephew’s former roommate dropping by for his birthday party. Gifts have already started filling the hall, and I’m getting this weird feeling that I don’t own the house anymore, even though my name’s on the mortgage. The place is gonna be a madhouse, but the kidlet’s gonna have an incredible first birthday party.

SpaceMonger

Sales of SpaceMonger 3 are continuing nicely, courtesy of my friends at EdgeRunner. It’s really nice to be able to sit back and think about the algorithms instead of the business model. Some time between SM 3.0 and whatever the next really major version is (3.5? 4.0? I’ll leave that to EdgeRunner’s branding gurus), I’d really like to rebuild SM’s scanner from the ground up. The original design was decent, but I’ve had a better model in my head for years that would make its already-quick scanning even faster. The new design uses crazy stuff like lock-free queues, and functors as messages, and sector-ordered scanning to avoid head seeks, and would be awesome, and that would open up a lot of interesting possibilities for the future for things like persistent scans and automatic background scans — if I could find the time to code all that.

Continue reading

Comments Off on And that was a year

Filed under Personal, Smile

It’s baa-aack…!

Some of the more astute of you may have noticed that www.sixty-five.cc no longer points to www.sixty-five.cc — that’s because thanks to popular demand, SpaceMonger is coming back!

Can I get a w00t from the audience? 🙂

SpaceMonger is back: Because even when it wasn’t for sale anymore, we all couldn’t stop using it, myself included!

I have partnered with the good folks at EdgeRunner to help bring SM back into existence, to help modernize SM’s code and bring this much-needed tool back to the public. We’ve been working together for a year now to bring it back, to make it all snazzy and Modern-looking and to add some desirable new functionality too.

(EdgeRunner is only a year or two old, but it’s a spinoff company from Stardock, and the companies share a number of the same principal people, so it has a lot more talented and experienced personnel than you might expect by its age. They know what they’re doing, and it’s been quite enjoyable working with them.)

I’m both doing some of the coding as well as supervising their devs in this project, and they’ll be handling sales, marketing, and support, which is good, because I never liked any of those parts of running my own business: I get to focus on algorithms and efficiency and functionality, which is what I always cared about most, and they’re working hard on everything else.

The release date isn’t quite firmed up yet, but the beta is coming soon, so if you’d like to see all we’ve been doing for the last year, feel free to sign up to give the beta a try!

 

Comments Off on It’s baa-aack…!

Filed under Technology

Continuation

I’m quite overdue for a status update, so here we go.

I spent most of July with a busted ankle. Crutches are fun, I tells ya. That helps sum up the whole lotta nothin’ I did this month. It’s a really bad sprain I got late June, and it took many weeks and many doctors, and it’s still not fully healed yet, but at least I’m not on the crutches anymore.

Oh, you want to know more about Smile, right. Y’all come here to find out what I’ve been coding, not for personal stuff. So let’s talk about Smile.

The language grammar is now fully implemented in the interpreter, and a number of bugs in the methods on the core objects have been fixed. It has a REPL now, which makes experimenting and testing much easier.

Continue reading

Comments Off on Continuation

Filed under Smile

Uniconundrum

I really want to get the Unicode support in Smile right. I really do.

The unfortunate thing is that it seems there’s no consensus on what “right” looks like. Some people argue that UTF-8 is the right answer, some argue that UTF-16 is the right answer, some argue that UCS-4 is the right answer, and if you ask a hundred people, you get a hundred different answers as to what’s right.

Y’all are complicatin’ my life ‘cuz ya can’t agree on nothin’, I tells ya what.

Continue reading

Comments Off on Uniconundrum

Filed under Smile

Let there be Unicode

So a few weeks ago, I was reading this essay by Ramsey Nasser. I’ve debated back and forth several times as to whether Smile should keep its strings and identifiers as 8-bit characters, or whether they should be upgraded to full Unicode. It’s a tough question.

On the one hand, I’m trying to build a language that will be able to grow well with the needs of the future, and the future argues for Unicode. There are a lot of people out there, and not all of them speak English. Or read or write English. As Nasser notes, Arabic is poorly supported by, well, everything, and there’s only a few bajillion people out there speaking Arabic. (It so happens that Arabic is possibly a pathologically-bad worst case for programming language support, too, since it’s a proportional cursive writing system and not fixed-with, with concepts like initial, medial, and final forms, instead of a single letterform per phoneme, and for the icing on the cake, it writes in the dead opposite direction of most other languages on planet Earth.) And beyond Arabic there’s Chinese and Russian and Devanagari and Japanese and a thousand others, and a really good future-proof programming language ought to be able to support all that in a very natural, native kind of way.

Continue reading

Comments Off on Let there be Unicode

Filed under Smile