Category Archives: Computing

Articles about computers and the IT industry.

Pro is not a useful label

Here is goes again. Apple announces new MacBook Pros (or there are rumours about a new Mac mini pro) and the hoards pile on it saying it’s not a “Pro” machine. But what does that actually mean?

Traditionally the label “pro” is short for professional and is used to describe people who make their living using the tool. Sadly that definition is so ridiculously broad that it’s not terribly useful. What does a video editor, a writer, a 3D modeller and a software developer have in common?

Nothing.

Some need a fast CPU, others lots of memory, or storage or ports or GPU. Others just like the “best.”

And that’s the problem. We have to stop fixating on it being short for “professional.” It’s a marketing term, nothing more. It doesn’t mean anything beyond “expensive.” Just because it’s missing a feature that you’ve grown accustomed to does not mean that it’s not usable by professionals. Maybe it makes it unusable by you but that’s not the same thing at all.

If you work on a computer, buy the one the best meets your current and anticipated future needs. Whether that’s a MacBook or a Mac Pro, a Mac mini or an iMac Pro, even a Windows PC, the name doesn’t matter.

And if none of the computers in Apple’s current line up meet your requirements, that might legitimately be a problem. But, it’s not a new problem — Apple has had a relatively limited range since at least the late 90’s — and that still has nothing to do with the name.

iOS 11

As I’ve done for the last few years, here are a few quick thoughts about today’s new iOS release, version 11.

I’ve been using the iPad version since the beginning of August and the iPhone version for only a couple of week but I think I have reasonable picture of what you’re going to see. 

Good

  • Multi-app support on the iPad. Wow! It’s quite different. You might need to give it a while before you get used to it. I also found that I needed to rearrange my dock so that apps I use to multitask are quickly available
  • “Swipe up on the iPad keyboard to get symbol characters.” Such a time saver
  • The voice synthesis of Siri is way better. But I agree with Gruber, if I could have dedicated engineering resources to Siri that wouldn’t have been where I would put them
  • iCloud sync for Photos. No more training each device to receognise each person!
  • Lots of nice, minor changes. The “Now playing” lock screen widget, the “play” button at the top of playlists/albums in the music app
  • Control Center is improved (but see first item in the “ugly” section below)

Bad

  • I’m guessing this has something to do with the iPhone X, but the one 3D Touch gesture I used all the time was the hard-press on the left side of the screen to trigger the app switcher. That’s gone in iOS 11. This is going to take a lot of getting used to
  • It won’t work on older devices. I get the “why” but it always sucks when they get left behind

Ugly

  • Why did the WiFi button is Control Center change to be “disconnect” rather than “switch off”?!
  • Not sure about some of the animations, especially on iPhone. 

What do you know?

How do you interview people for developer and technical jobs? This is an enduring question, and one with many angry factions.

It’s too big a subject to tackle in its entirety and I have no intention of trying. Instead, I want to talk about one aspect: should you ask Computer Science questions or not?

In one corner are the people who argue that you never need to implement a linked list or write Quick Sort in real life, so asking you to do that in an interview is unreasonable and excludes good candidates. They argue that there are more important things to consider, such as the use of applications frameworks or design or working with other people.

In the other are those who say that algorithms are a fundamental part of writing software and, while you may not need to write a Quick Sort, you do need to understand it and to be able to explain it.

The first group calls the second elitist. The second calls the first naive. Who’s right?

Of course, I come at this with my own bias. I have a Computer Science degree but I did it some time ago and don’t have perfect recall on this stuff. Ask me the Big O notation for Quick Sort and I’ll understand the question and maybe make a stab at the answer, but I’m not going to pretend I’m 100% sure.

There are two main angles I want to consider: the intent of the interviewer; and the knowledge a developer actually needs to do the job.

Let’s start with the former.

So, your interviewer asks you to implement a linked list on a whiteboard. Why? What are they hoping to find out about you?

If the answer is… well, the answer, then I’m very firmly with the “you don’t need to know this stuff” crowd. People tend to want a specific answer when either they want a cookie cutter computer science graduate or they wouldn’t understand the answer.

Alternatively they might be trying to see how you think; how you’d start with a simple solution and build up; how you’d test it. In these cases, the answer is less important than how you got there.

Another thing to consider is that, as an interviewer, you want to get the most information in the least amount of time. Starting with a “real” business problem might require too much context to be explained before you could really start. But the candidate hopefully already know what a linked list does, even if they’ve never had to write one.

Of course, sat in a conference room with a stranger it’s very hard to tell which of the two camps your interviewer falls into (and practically impossible if they’re on the phone).

So that’s pretty inconclusive. There are good reasons to ask but you can’t tell whether that’s the case for your interviewer.

So how about job requirements?

This angle is easier. Most jobs don’t require standard algorithms that you’d come across in a computer science or software engineering degree. A knowledge of user interface frameworks probably is more useful for many projects.

But what about the rest? There are jobs where knowing algorithms is important. On projects where low-level or performance intensive code is required understanding the fundamentals can be important. Maybe you’ll be writing a game or something with very low latency requirements or an engine that processes vast amounts of data.

In my last project I deliberately avoided using the system provided Quick Sort and implemented my own Heap Sort. I may not have been able to tell you the Big O notation for heap sort and quick sort, but I do know that quick sorts’ Achilles heel is that it works poorly on already sorted data. (It’s only fair to note that they didn’t ask me about algorithms when I interviewed for that position. In fact, they didn’t ask me much of anything! That’s a long story for another time.)

I’m not saying that you need a Computer Science degree to know those things. I’m not saying that the project would have failed without that background (though the fact that someone knew saved tens of thousands of pounds in hardware costs). And, most importantly, I’m not saying that the kinds of projects that you do are anything like mine. I am saying that the people who say this stuff isn’t useful or important are wrong.

So what do we conclude?

Well, firstly, and most importantly, no one size fits all. Your interview process needs to be tuned for the kinds of position you’re trying to fill.

Secondly, if the only questions are about linked lists and sort algorithms, that’s a big red flag. These aren’t the only interesting subjects for any job. If you’re not at least asked about how you work in teams, you should be worried.

Finally, having said all that, you can’t escape from the fact that programming is about algorithms. According to Wikipedia:

Programming involves activities such as analysis, developing understanding, generating algorithms

You should be expected to understand and to be able to explain algorithms.

But you should also understand team work, several programming languages, relevant frameworks, user interface design, source control, your IDE, the Unix command line, security, Linux, web servers, leadership and management, the film that the line “pop quiz, hotshot” comes from and know the correct answers to “tabs or spaces?” Developing software is hard and has many facets.

Focusing on any one aspect to the exclusion of others is a mistake. And that’s true both for you as an individual and you as an employer.

Nintendo Switch

This was all set to be a story of how much the whole family were enjoying the Nintendo Switch. While that’s true, there’s another side. We’ll get to that but let’s start with the good stuff.

Long story short: after just over a week, we’re all getting a lot out of it. The games are fun, even my three year old gets a kick driving Princess Peach around what looks like Sugar Rush from Wreck-It Ralph.

I should probably qualify our enthusiasm. I’ve never owned a games console before. I play Real Racing 3 and Monument Valley on my iPad; I have played Worms (a lot) and various others going back to Bomb Jack on my Sinclair Spectrum. I’m not on the same page as the people comparing frame rates and polygons per second unfavourably with the Xbox and PS4.

What I do care about are fun games, preferably multiplayer — sat around the TV rather than online — that can be played by all ages without requiring much effort to get started.

We’ve mostly played Mario Kart connected to the TV, using the steering wheel accessory, in two player mode. I was tempted to get a couple more joycons so all four of us could play together until I saw how much they cost!

Overall it Just Works. Even a software update was quick and simple. (Top tip: when setting it up, do it handheld rather than docked with the TV. That way you can enter your Wifi and account passwords with the touchscreen keyboard.) The graphics are beautiful (probably more a function of Nintendo’s designers than hardware prowess) and the sound adds to the experience, in contrast to many iOS games where it’s irritating or distracting.

Away from the TV, the screen size is great for handheld play though the console is a little thick and heavy compared with an iPad. I found that it’s a little too small to comfortably play multi-user but it does work and when the TV is in use it’s good enough. Maybe that’s to be expected but you can’t blame me for thoroughly play testing it!

For the first week problems I saw were largely quibbles or recent launch issues.

In the “quibbles” column is the little door that covers the cartridge slot. While the rest of the console feels well made, the door feel loose and cheap. Worse, if you pull out the cartridge without first quitting the game it complains, just like a Mac does when you yank a USB drive out. Since Nintendo have control over both the hardware and software you’d think there might be a better solution.

Also, the dock is, if not wrong, then at least a bit odd. It’s the same height of the console itself which means that when you put the machine in it, the top sticks out by a couple of centimetres. It’s not broken since it’s fully functional, it just doesn’t seem very elegant.

Under “recent launch” I’d put some of the pairing issues I’ve seen with the joycons, especially when trying to use the sticks separately in Mario Kart. I’m hoping, presuming, that this is a fixable software glitch.

As I hinted at in the first paragraph, in the second week things took a turn for the worse. I fired up ARMS but couldn’t start it.

After a while debugging, I figured out that the L button on the left joycon no longer worked. I was pretty relaxed about it initially, assuming it was a software glitch that could be fixed by some combination of fiddling around and searching the internet.

I tried re-pairing the joycons. Disconnecting and reconnecting. Restarting the Switch. Checking for software updates. I tried resetting the Switch back to Factory Defaults. Nothing.

Scouring the internet, I found that this was quite a common problem with early units and that people were having to return them. This sucked.

As I hate call centres, I fired off a quick email to support. In hindsight this was the wrong approach. It took nearly a week for them to respond and when they did they said it would cost £35 to repair. Not only was this poor service but it goes against consumer protection laws!

I picked up the phone and called support, girding myself for a long call and a fight. Neither materialised, thankfully.

The call was picked up straight away and was answered by someone not religiously following a script. She connected the dots to my email and, after prompting, explained that the email meant that if I’d dropped the joycon and broke it that way I might have to pay; it was CYA text masquerading as the main message.

Then she volunteered that, so soon after purchase, I might be better just returning to the retailer. (I knew that this was the correct process but I had still been hoping that you could control-alt-delete the joycon and magically get it working again without sending it anywhere. Anyway, it’s good that I didn’t have to press for this.)

Amazon, of course, had no difficulty accepting a return. However they did have a problem sending a replacement unit, indeed they contacted me to say they had no idea when they would get any in stock.

The perils of being an early adaptor of an in-demand product I guess.

This whole experience has also shown an odd shortcoming in the software that I’d not previously noticed: there is no way to back up your game progress. The Switch is internet enabled (obviously) and is quite insistent that you create a Nintendo account, but nothing gets saved to the cloud.

The Switch also has an SD card slot but there’s no way to copy state over, just screenshots as far as I can tell. (Maybe I’m too old but I’m not sure I get the importance of game screen shots. Why is there a hardware button dedicated to it?!)

As of yesterday, there’s a happy ending to my first few weeks with the device. Amazon got a new batch of Switches in stock sooner than they were expecting so, until I get around to returning the original unit, we currently have two machines.

We spent a while last night, er, testing the new joycons with ARMS and I can confirm that they work as expected. This morning we combined the joycons from the new console with the working one from the old and had a three-player game of Mario Kart. This pushes me ever so closer to buying that second set of joycons…

So despite the problems, we all still like it. That, I think, says a lot.

WWDC 2017

I thought I’d jot a few notes about next weeks WWDC, Apple’s major developer conference. Full disclosure: I’ve not been following the rumour sites very closely this year. I’ve not even done as much iOS development since WWDC 2016 as I have for the last few, so what follows is just a wish list. It’s based on neither leaks nor an in depth knowledge of failings of the current developer tools.

Hardware

WWDC is normally a time for software announcement but so much of Apple’s hardware is currently stale that it would be disappointing if nothing is updated before September.

Pretty much every Mac and iPad Pro could do with an refresh. We know not to expect a Mac Pro update, but anything else would be fair game. An update to last years MacBook Pros would be a decent indication that the “Pro” market is still a segment that Apple wishes to serve.

Personally I’m not currently in the market for new hardware, but good and frequent updates would show that my platform of choice will remain viable.

Development tools

In the last year I’ve written an Apple TV app and a small Mac app. The former I used as a exercise in learning Swift. What I found was that I liked the language but hated the tools.

Xcode is just less stable, slower and less complete when using Swift. I also picked a time where open source projects were transitioning from Swift 2 to 3, so not all projects worked together nicely. (I ended up using no third-party libraries for just this reason.)

Based on this experience, when I wanted the Mac app to be something I put together super-quickly, I chose Objective-C instead. I missed Swift-the-language but I appreciated the return of a usable Xcode. Call me a Luddite, but on balance I think I preferred boring but stable. (I also used Cocoa Bindings which feels much more natural in a language like Objective C.)

So my wish is simple: a Swift development environment that’s as smooth, fast and complete as when coding in Objective-C.

iCloud

Despite the negative press, iCloud has mostly worked well for me. Famous last words. Last year, Apple fixed my last core complaint: that it wasn’t possible to share CloudKit records between users. I’ve not seen many apps that use it yet, though.

What’s left?

Firstly: storage sizes. It feels that the amount of space you get isn’t very generous. The 5Gb “free” space just isn’t enough. You should be able to back up all your iOS devices. And the storage tiers should probably be cheaper or give you more space for the same money.

Secondly: I love iCloud Photos. Take a photo on my iPhone, have it instantly appear on my Apple TV. Download my DSLR pictures to my iPad, have them available on my Mac without any extra work. What’s not to like? Well, each device has its own database of Faces and other metadata. I should get the same results for the same search term on all devices.

Thirdly: more Continuity. The main thing I’d like to see is continuity between the various Music apps. Start listening to a playlist on your iPad, pick it up on your iPhone when you leave home or on your Apple TV when you want to share it more widely.

Mac

I upgraded my personal Mac to Sierra but my work computer is still on El Capitan. Day to day I notice very little difference.

This sounds like a bad thing but, actually, it’s not. I broadly like 10.11. It’s stable and fast for me. I think for the next version I’d just like them to finish what they started.

Does Siri on the Mac feel finished to anyone? What about all the extras in iOS Messages that never made it to the Mac? The web (and Chrome) are always advancing, so there’s always work to be done on Safari.

There is a feeling of stagnation on the Mac but maybe that’s inevitable at this stage of development. Do we really need major annual updates any more? I wasn’t convinced this cadence is useful or sustainable when they announced it. I’m still not sure.

iOS

As a younger platform, iOS clearly has more room for growth than macOS, but with a decades development much of the low hanging fruit has already been picked.

Overall, I’m fairly happy with iOS on the iPhone. Sure, there are tweaks. How about being able to configure the Control Centre? Or change the default apps from the Apple-supplied version? (For what it’s worth, I prefer Safari to Chrome and would probably stick with Mail.app, but competition would be good.)

But the iPad… so much of what was added in iOS 9 still feels unfinished. I love side-by-side apps but I hate having to switch between those apps. I often also want to switch the two running apps, but there’s no simple way that I’ve found.

Ultimately this is similar to the macOS situation: refinement and finishing what’s already there. I don’t think we need a revolution this year.

Apple TV

Some progress, any progress, here would be good. I like my Apple TV but it’s not cheap compared with the competition and the App Store is not exactly vibrant. Some of the recommended apps, for example, are still the same launch titles. Not good for two years later. (I hesitate to conclude that traffic in the App Store is low based on downloads of my own app… but it is a data point that suggests so.)

Is it a games machine? If so, why do Apple only sell one controller? Is it for TV? Then where (in the U.K.) are the ITV and Channel 4 apps? Where is Amazon Video? As the industry moves to 4K, why is it only HD?

Apple seem not to know what to do with it, so my wish would be some statement of intent.

Overall

The funny thing is, desipite using both the Mac and iOS devices all day, every day, I’m pretty happy overall. Maybe it just indicates a lack of imagination on my part but my vote for this year would be simple, incremental updates.

Virtual Assistants

Virtual assistants are all the rage now, in the press if not in not people’s lives.

I am not claiming to do a thorough, like for like comparison. What follows is my subjective, personal experience. Your usage patterns, successes and failures may be different to mine, but I think my conclusions should broadly hold. We’ll see.

I’m comparing an Amazon Echo, an iPhone 6S and the Google app on that same iPhone. I know I’m not using Google Now in its native environment. That was unavoidable and may hobble it. You should bare that in mind if you use Android.

So this Sunday we were going to go to IKEA. It’s a Sunday and the opening hours are shorter than the rest of the week, but which ones?

“Alexa, Ikea Croydon opening hours today.”

Two things about this. First, I don’t really use a conversational style with my computers. That works in the adverts but I try to keep my interactions with inanimate objects short.

Second, none of the three systems had any real trouble understanding what I said. They may have difficulty understanding what I meant but the words themselves posed no problem. If you’ve used voice recognition software any time in the last twenty years this is amazing. (This is not to say that any are 100% accurate, just that the standard is very high and fairly consistent.)

Anyway, while Alexa completely understood the words I asked it, it wasn’t able to get an answer. It didn’t even punt it to Google or Bing.

Siri did better. It thought “Ikea Croydon” was ambiguous and asked me to confirm its guess (it had it right) and then spoke the correct answer.

Google Now went straight to the answer, though it only showed it on screen and didn’t speak it.

Of the three responses, I’d put Siri first and Alexa last. I think speaking the responses makes it more useful, even though I had to say exactly which IKEA I was going to and Google guessed correctly. Reasonable people could argue that Google’s response was better.

Next I asked for the weather: “What’s the weather in Croydon in Fahrenheit.” The catch is the ‘in Fahrenheit’ part, since I normally work in metric. Both Siri and Google Now got it right. Apple’s agent remembered my preference for Imperial measures for the current session, so immediately asking for another city gave the answer in Fahrenheit but later in the day it reverted to the correct measure.

Alexa wasn’t quite as good. It got the right weather but kept the default units. I won’t make the argument that this is another reason for people to give up Imperial measures.

Finally I asked all three whether there had been any problems reported on the Northern Line, the nearest line on the London Underground to my house.

Siri and Google both went to a search engine for the answer, just showing a list of sites that might have the answer but not actually showing the results.

Alexa doesn’t natively know the answer but it has an extensive directory of “skills” that you can add. I used one called “Tube Status.”

It can answer the question but you have to talk to it in a specific way. “Alexa, are there any problems reported on the Northern Line” fails. Instead you have to say, “Alexa, ask Tube Status about the Northern Line.” The “ask Tube Status about” bit is critical; without it, it doesn’t work.

In this case, Alexa comes first but with some caveats. Google and Apple come joint last. This is odd as both companies have the transit data available in their respective Maps app, but they’re currently not surfacing it to their voice assistants.

That experience is actually a pretty good overall summary. Alexa can do a lot, possibly more than either Siri or Google Now, but it’s not so good at understanding what you’re asking without help. Google has its vast trove of data to virtual hand and uses it to make clever inferences about what you mean rather than what you asked. Siri tries to have more of a personality and otherwise falls somewhere between the two. In some areas the fact that it has less data than Google is a feature (privacy!) but that can limit its options.

I have a hard time saying one is better than the other. They’re all flawed, they all got some stuff right and wrong. It’s early days and rather than showing one is better than the others, it really shows differing priorities. Amazon emphasises its API, Apple its privacy, Google its data. They’re all right. An ideal system would have all of those. And in the future they probably will.