To Degree or not to Degree

I often wonder if I were a young lad of college age today, whether I would have the gumption to forego college and pursue a programming career right out of high school. Ignoring the fact that my parents would have balked at such a plan, I think a bright kid, a promising idea and a 1-3 year window would be sufficient conditions for an experience as rewarding as pursuing a CS degree.

Such a path does not prevent a person from learning the information they would obtain from a CS program. A quick look around the internet and I’m quite certain I could cover most of my CS curriculum through Khan Academy, MIT OpenCourseWare and Stanford Engineering Everywhere, not to mention other learning resources such as GitHub or Wikipedia. I wasn’t able to find an equivalent resource for the Arthurian Legend course I took one summer, but my knowledge of Sir Lancelot’s and Guinevere’s love trysts never really helped me sling code.

It wasn’t until my first internship that I learned how to develop software in a real-world context. I didn’t even know source control or bug tracking software existed until that point. Opportunities to work in a team at school were contrived and did little to prepare me for real-world collaboration.

I have yet to experience a situation where it was necessary to write a sorting algorithm or implement a data structure from scratch. I must admit that it took a lecture from a professor before the light bulb went off in my head for implementing recursive functions. But though I’m a better programmer for understanding these concepts, couldn’t one just learn them from free online resources?

It will be quite a while before my kids are college-aged and it’s inevitable that the education landscape will be quite different at that point. But should either of my children seek to pursue a career in software, I would consider providing them the essentials for a year or two if they were serious about developing an idea they had. Depending on their potential college choices, such a path could end up being a lot cheaper. If their ideas fail they’re left with plenty of time to pursue other ideas and some real-world experience that many companies value more than academic credentials. If they succeed they can take their company public at $38/share for a cool valuation of a $100 billion and support me in my old age.

Related link: The Thiel Fellowship

(image by nicubunu)

(image by lumaxart)

ImproTech Paris-New York 2012

Last week, I took a vacation day to attend one day of workshops at NYU as part of  ImproTech 2012 Paris-New York That website descibes the event as:

The ImproTech Paris – NYC 2012 workshop is dedicated to the exploration of the links between musical improvisation and digital technologies.

Gathering researchers and artists from both research & creation scenes, it favors the idea of using digital intelligence as a source of continuous and sophisticated creation, in a complex interaction with live musicians, as opposed to mere decorative digital effects.

My academic training is as a composer; my Master’s degree was in Electronic/Computer Music, and this was an area where I did some (now very primitive) work. Every few years I pick that project back up and restart it based on what I’ve learned as a developer since the last time I worked on it, then get distracted by some other project and let it go into hibernation for a while again. I wasn’t able to get to either of the concerts or the second day of workshops, but the one day I did attend was a day well spent.

Some highlights for me:

George Lewis gave a brief keynote for the event, touching on a number of themes that would recur throughout the day, including a bit of history. His 1993 piece/software Voyager is a classic in the field, and the rest of the day found other presenters citing his work.

The French philosopher Pierre Saint Germier spent an hour discussing the queestion of whether it’s even possible for computers to improvise. He started the discussion from the ‘By Definition Objection’ — since all computers are able to do is deterministically execute the instructions they are programmed with, even in the presence of randomness, you cannot say that they are improvising. Eventually, he worked his way around to what he referred to as a ‘retreat position’ — maybe computers can’t replicate improvisation, but perhaps they can simulate it, “and maybe that’s good enough for you.” I’m also having a difficult time reconciling these arguments with the writings of others (like neuroscientist Sam Harris, who has developed a position that what we perceive as our own free will is an illusion that’s not compatible with the laws of physics).

After ruminating for a while, I’ve decided that retreat position is good enough for me, and I don’t accept that it’s much of a retreat, and that the whole argument depends too much on playing with definitions and semantics. Perhaps the most important lesson I learned is that I don’t think I’d make a great philosopher. Also: setting the tone for the rest of the day — even though the only technology his presentation depended on was a PDF slideshow on a USB drive, it took about 10 minutes for issues with the projector to be worked out.

Frédéric Bevilacqua and Norbert Schnell, both from IRCAM, showed work they’ve been doing with their “MO: Modular Musical Objects”  project, providing a gestural interface to sound production.

As part of their presentation, they trained the soccer ball shown in the above “Urban Musical Game” Vimeo clip with some new gesture/sound combinations, and tossed it out into the audience. For me, it raised a number of questions on the role of skill and virtuosity in systems like this. I’m not sure to what extent those questions are important, at least at this stage in the development of these systems. I was just proud that as the soccer ball made its way to me in the audience, I represented my 15-year old soccer playing son by using my head, not my hands on the ball.

After lunch, the presentations were more music than talk.

Violinist Mari Kimura demonstrated some of her recent work using an augmented violin system that’s been developed for her — sensors on her bow hand track its position and movement and that data is used inside patches running in Max. She emphasized several times how important it is for her as a violinist to not have additional pieces of hardware or controllers onstage with her — the easy answer to many of these issues would be to put a foot pedal or two on stage, but she refuses to do that. The hand-tracking system is a very elegant (and essentially invisible) solution to the problem. You can get a taste of it here:

Do check out more of her videos; I especially like one featuring a duet with the LEMUR guitarbot that I last saw on Pat Metheny’s Orchestrion tour.

Saxophonist Steve Lehman did a performance of his piece Manifold for Alto Sax and a trio of ‘virtual instrumentalists, running in Max/MSP. One of the things I’ve always liked about his music is his use of meter and tempo to create a wonderfully elastic sense of time, and that was very much present in this piece (modulo some technical problems he spoke about after the performance — even virtual players can have an off day). Here’s a different performance with two additional human performers from the International Contemporary Ensemble.

Steve Coleman (also on alto sax; I’ve been a huge fan of his writing and playing back to the late 80s) and Gilbert Nouno explained some details of a piece “Musical Arrythmias” for sax and electronics that they had performed at the opening night concert the previous night. I wish that I had been able to hear the piece in its entirety, because the fragments were compelling.

Jaime Oliver showed a computer vision based instrument developed as an exploration of the space and intersections between instrument design and composition. In his brief talk preceding his demo he outlined the idea of ‘Open Scores’, where the capabilites and limitations of a system define a space within which a set of musical possibilites may be explored and realized by the human performer who completes the piece by performing it. He showed some video of an earlier system called the Silent Drum:

…before doing a live demo of his more recent “MANO” instrument.

The MANO Controller consists of a black rectangular surface, which is sensed with a video camera. The computer algorithm analyzes the image obtained from the video camera, looking for hands and extracting from them the most relevant parameters, which are then used to control sound.

One of the most interesting features of the MANO Controller is that it recognizes from which side a hand is entering the rectangle and is able to classify it as a finger or as a hand and to interpolate between them. Any gesture then is classified in terms of the side where it originates (left, right, bottom) and in terms of its size (as a finger or a hand).

Since a different mapping can be assigned to each combination of side and size (eg. left-finger or bottom-hand) at any given moment there can be 6 different sound mappings. Furthermore, combinations of these (eg. left-finger AND bottom-hand) might lead to a new mapping altogether. The use of these classifications of side and size allow the composer to use them combinatorially, controlling the movement through the score. This allows the performer to change and interpolate between mappings through continuous gestures without the need of using buttons.

For each hand or finger, multiple parameters are obtained. Most parameters are interdependent, that is, if one parameter changes it usually changes another parameter as well. This is an important feature since it allows for organic behavior of sounds.

Finally, Robert Rowe form NYU’s Music and Audio Research Lab, whose facility hosted the workshop did a presentation discussing the MARL program and its faculty, all of which were extremely impressive. When the workshops were done, he offered to take anyone interested on a tour of the facility, an offer a few of us took him up on. I had no expectation that he’d remember, but 20 years ago or so I was touring the MIT Media Lab when considering doing PhD work there, and he took me on a similar tour of that facility (including showing me their first NeXT machine, which had just arrived).

A much better day than I would have had at the office.

Should Developers Design?

Two recent articles on Hacker News hit close to home for me. The first post linked to a goal-tracking app for iOS that received many positive comments for its very clean and intuitive user interface. The second post was a link to a blog post titled Don’t look for a UX guy, be a UX guy.

I also have a goal-tracking app for iOS, one that uses default iOS controls, basic fonts/color schemes and focuses on function over form. Guess which one I’m now using on my iPod?

UI/UX is hard to get right and seems mystical to us non-designers. My first instinct is to get code working and tack on the UI so it conforms to the implementation decisions I’ve made. But if empathy for users is the goal, this process is exactly backwards.

I certainly want to improve in this area, but the left side of my brain just doesn’t want to concede any ground to the right side. Why spend time learning design skills when I can learn a new programming language or new web framework?

One resource I have found helpful is Bootstrap from Twitter. Bootstrap provides a basic layout template along with several styled controls/icons to use for web development.

Also, at one time or another, I’ve seen the following books recommended for learning UI/UX:

Alas, these books still sit in my Amazon wish list unread. I really do want to get to them but first I need to finish that book on Erlang, continue experimenting with Backbone.js and …

Maybe I’ll just leave design to the experts.

(image by vaxzine)

Visualizing the Facebook IPO

The NY Times has published a great interactive graphic showing the Facebook IPO and how it compares to the IPOs of other tech companies. On their chartsnthings blog you can take a behind the scenes look at the design and thought process behind the interactive graphic.

The graphic was built in part by Amanda Cox of the NY Times. She gave a great talk at the Eyeo Festival in 2011 that shares some more of the insights into the process and science of data visualization. Also cool to see that Jeremy Ashkenas, the creator of CoffeeScript was also involved in the project.

Many of the tools used to assemble this and other interactive online visualizations can be found at the fantastic selection.datavisualization.ch.

The Economics of Android

If you haven’t already do yourself a favor and head over to asymco.com to catch Horace Deidu’s multi-post series on “The Economics of Android”. Horace and Dan Benjamin discuss the series during this week’s Critical Path podcast as well. Horace is a former analyst for Nokia and has been writing Asymco for a few years now. His analysis of the mobile industry and Apple’s place within it in particular has been featured in publications such as Bloomberg and Forbes.

I look forward to seeing how these numbers change as Apple is rumored to be dropping some Google services from iOS 6 and as Google’s competitors in search take advantage of the open-source Android OS for their own benefit.

Yes, Do Learn To Code!

My usual pre-work routine is to walk the dog (working at home, this is my counterpart to a commute), pour my first cup of coffee, and then curl up for a little while with Google Reader. I don’t know if it’s because I’ve selected feeds that are too closely aligned with my values and personal agenda, but it’s really rare that I’ll read a post that is just so wrong that it makes me angry. Jeff Atwood wrote a post like that: Please Don’t Learn To Code

To those who argue programming is an essential skill we should be teaching our children, right up there with reading, writing, and arithmetic: can you explain to me how Michael Bloomberg would be better at his day to day job of leading the largest city in the USA if he woke up one morning as a crack Java coder? It is obvious to me how being a skilled reader, a skilled writer, and at least high school level math are fundamental to performing the job of a politician. Or at any job, for that matter. But understanding variables and functions, pointers and recursion? I can’t see it.

Look, I love programming. I also believe programming is important … in the right context, for some people. But so are a lot of skills. I would no more urge everyone to learn programming than I would urge everyone to learn plumbing. That’d be ridiculous, right?

On the contrary: being able to think computationally and algorithmically should be a fundamental skill that’s possessed by modern humans, whether it’s a skill that they use on a professional basis in their lives or not. Every day I have to deal with a world full of people who show little or no ability to think clearly, and some level of being forced to develop some chunk of code to the point where it works correctly has to be a positive thing for people to know how to do, even if they never do it again.

When she was in graduate school, my wife had to take a class that required homework to be done in a spreadsheet. I did my best (and failed) to teach her how to use formulas and macros, but then I’d walk back into the room and see her summing columns with a calculator and typing the value into a cell.

Atwood is right that the goal of programming is to solve a problem, but he makes it sound like that’s a dirty thing, and the highest goal of a programmer is to duct tape together pre-existing modules and collect a check. Leaving aside the question of where those modules come from in the first place  (coded up by elves, I suppose) too often that approach leads to systems that are limited to the capabilities of those off the shelf modules and even more limited by the duct tape developers who lack the capability, imagination, time, or foresight to go beyond those limitations. We’ve made a lot of money over the years gutting and replacing these systems, and maybe even more building systems for clients whose in-house developers told them couldn’t be built at all.

I didn’t even intend to write software — I studied composition in college, and had to learn to write code in C for an electronic music class. It was only after I had enough experience as a developer that I was able to build tools that were a perfect solution to problems that I had as a composer and musician. Learning to program made me a better composer by teaching me a different fundamental modality of thinking, and being a composer has made me a better programmer. If you can successfully write a four voice fugue using common practice harmony, I can teach you to write bulletproof multithreaded code (here’s an article on one of my first real products that was a multithreaded DOS app that had at the time been running 24/7 for a decade).

I believe that everyone should learn to write a little code, and play an instrument, and make things out of wood, and tend a garden, and cook, and, yes, do a little plumbing, too. They shouldn’t learn these things because they’ll use them every day to earn a paycheck, they should learn them because it makes them better thinkers, and better able to take care of themselves. On top of that — if vast empires were being built on top of plumbing the way that they’re being built on software, I’d say that anyone who was happy to ignore it as a black art practiced by wizards was making a big mistake. The value of acquiring a new mode of thinking isn’t affected by the fact that most people won’t need to use pointers or recursion on a daily basis.

When my wife and I had our first child, my germ-phobic wife had a very  hard time with the pediatrician’s assurance that it was okay for our baby to put everything in his mouth, and that doing so was part of how he would learn about the world. I think that the way I learn things is by writing code about them. I don’t know if telling people to not explore that is being elitist, or condescending, or what, but it definitely strikes me as being very wrong.

Edit: There have been many many other similar responses to Atwood’s piece. I think that my favorite one is by Al Sweigart: A Modest Proposal: Please Don’t Learn to Code Because It Will Damage Your Tiny Brain

Edit 2: …or a much less snarky one that takes us back to the ancient Greeks from Vivek Haldar (always worth reading): Executable Thought

RubyMotion Brings Ruby to iOS

RubyMotion is a new development toolchain that allows you to build iOS apps using Ruby created by Laurent Sansonetti, a former Apple engineer and contributor to the MacRuby project. It has garnered a lot of attention the past few weeks and some detailed reviews have already been written:

The MacRuby project (which is an open-source project  supported by Apple) allows developers to create Mac OS X apps using ruby, however it doesn’t work with iOS. MacRuby relies on the Garbage Collected (GC) Objective-C runtime that isn’t available on iOS. With the introduction of ARC for iOS and Mac OS X Apple will likely drop support for the garbage collected (GC) runtime in a future version of Mac OS X and won’t bother to bring it to iOS. This move by Apple called into question the future of MacRuby for OS X and made the prospect of developing iOS apps using ruby look even more remote.

Enter RubyMotion. It takes a different approach than MacRuby and based on early results looks to be a good solution for rubyists looking to build iOS apps.  However, the lack of support for creating UI elements in Interface Builder, dependence on Apple’s developer tools and SDKs, and other risks are being called into question already as well. It will be interesting to see Apple’s reaction to RubyMotion, especially considering that Sansonetti is a former employee and MacRuby contributor. I’ve bought my copy and am hoping the project succeeds and finds its way back to OS X too.

BaaS Offerings Continue to Grow

The makers of Simplenote recently introduced their Backend as a Service (BaaS) offering called Simperium that looks to compete in an increasingly crowded space with services like CloudMineKinvey, and Parse and to some extent with iCloud for iOS and OS X only apps. So just how crowded is this space? Back in February, Kinvey published their own map of the BaaS ecosystem that highlights different tiers of the ecosystem and various relationships between them.

It will be interesting to see how this ecosystem develops through additional partnerships, acquisitions, rounds of funding, and killer apps that take advantage of a specific service. Another aspect to watch will be the pricing models. Simperium and Kinvey are free either at the moment or while in beta with CloudMine and Parse both taking a 3 tiered usage based pricing model.

BaaS offerings look to lower the barrier of entry for start ups and indie developers looking to build a multi-platform app or app with server side needs. With consumers using more mobile apps and devices these services should deliver an even better and more consistent experience and less frustration keeping their data synced between desktop, web, and mobile apps.

PHP Musings

Ran into an interesting, but thorough, rant the other day – PHP: A Fractal of Bad Design.  The part that grabbed me the most was the analogy at the beginning, which was all too perfect:

I can’t even say what’s wrong with PHP, because— okay. Imagine you have uh, a toolbox. A set of tools. Looks okay, standard stuff in there.

You pull out a screwdriver, and you see it’s one of those weird tri-headed things. Okay, well, that’s not very useful to you, but you guess it comes in handy sometimes.

You pull out the hammer, but to your dismay, it has the claw part on both sides. Still serviceable though, I mean, you can hit nails with the middle of the head holding it sideways.

You pull out the pliers, but they don’t have those serrated surfaces; it’s flat and smooth. That’s less useful, but it still turns bolts well enough, so whatever.

And on you go. Everything in the box is kind of weird and quirky, but maybe not enough to make it completely worthless. And there’s no clear problem with the set as a whole; it still has all the tools.

Now imagine you meet millions of carpenters using this toolbox who tell you “well hey what’s the problem with these tools? They’re all I’ve ever used and they work fine!” And the carpenters show you the houses they’ve built, where every room is a pentagon and the roof is upside-down. And you knock on the front door and it just collapses inwards and they all yell at you for breaking their door.

That’s what’s wrong with PHP.

That sums up my feelings fairly completely – there’s nothing that doesn’t actually get the job done; that, is, everything works; but it’s just all quirky and strange and inconsistent.  Further, a lot of the issues are mitigated with a good framework – I prefer Yii, myself, but I hear good things about CodeIgniter as well.

Still, the rant got me thinking.  Going through the full list, there seems to me that some of these could be fixed without too much breakage.   That is, that they’re strange behaviour in corner cases that you wouldn’t really do anyway, so what harm would come from changing the behaviour?

Others are more interesting in terms of breakage – function renaming for consistency, for example, or changing argument order in certain functions. Still, I wonder if there’s enough demand out there to create a “cleaner” version of PHP that fixes some of the glitches, even at the expense of backward compatibility.   How much could be done without breaking backward compatibility except in corner cases?

The Internet of Things and Big Data

I’ve been following the developments in the “Internet of Things” and Big Data / Open Data markets as new apps and tools are released and they look to be two exciting technologies on a collision course. With the advent of internet connected home appliances like Wattvision and Nest that provide real utility to the average home owner at reasonable prices along with crowd funded projects like Air Quality Egg or Twine we should see an explosion in the kinds and amount of useful and real-time or near real-time data that is available to anyone with a smartphone. Health metric or “quantitative self” tracking devices such as Fitbit, Jawbone Up, and the Pebble watch will fuel this data explosion as well.

Racing to manage and make sense of this new information are some exciting startups and tools like BuzzDataSilk, and Wolfram Alpha Pro. I’d expect to see an increasing number of smartphone and tablet apps developed to help mobile users make sense of and to also generate more data.

Will these internet connected devices rapidly supplant  our current range of “dumb” belongings just as smartphones quickly are dumb feature phones? Will the tools to manage it all be able to keep up? Interesting times ahead for sure.

Follow

Get every new post delivered to your Inbox.