Computer Programming Are Hard

An email I just got from Amazon:

I hope this e-mail finds you well. Thank you very much for patiently waiting for my answer.

I’ve been checking regularly with our technical team on their progress with resolving the age range issue. It appears the issue is more complex than expected and we’re still working hard to get a solution for you.

I wanted to send you a quick e-mail to let you know the findings so far:

Since Amazon uses certain characters to classify books according to their content, it tends to be quite limited when it comes to character recognition. In the case of “Safe Is Not An Option,” although our platform gave you the chance to set the age ranges as 8 (min) and 18+ (max), the website is not displaying the (+) symbol because this character is generally used to determine when a book is of mature content or not. Since the book is targeted to people that are 8 and up, the system is finding a contradiction due the title being categorized as children’s, while being also set as an adult book because of the ’18+’.

We are aware indeed that what you wished to communicate is that the book was written for all people starting at age 8; even so, due to legal and international marketplace matters, the store has determined that the ‘+’ sign next to the ’18’ number makes reference exclusively to adult or erotica content, which results in a classification restriction. Due to this, the website removes the ‘+’ sign automatically and replaces it with the single ’18’ number to make your book fall within the appropriate ranges for children and adults.

We are still working to find a way to have the ‘8 – 18+’ displayed on your book’s page. Still, if by any chance the platform was unable to digest that entry, what I’d recommend to do is leave the age ranges as they are, and within the book’s description, you may clarify that the book is indeed intended for people aged 8 and up. I’ll let you know how everything goes!

I hope this information helps explain clearly the situation; I’m very sorry for how long this is taking, but I greatly appreciate your understanding!

I’ll be in touch again with an update as soon as possible.

Thanks again for your patience.

I’m kind of amazed that I’m the first person in Kindle history who wanted to show that a book could be enjoyed by children of all ages.

[Afternoon update]

I’ve at least updated the book description to say that it’s suitable for all ages.

27 thoughts on “Computer Programming Are Hard”

      1. Well, I guess I shouldn’t be surprised. Sounds like a developer came up with the UI design, and didn’t think everything through. It’s a common problem, but no less frustrating for that.

  1. That’s funny.

    You certainly aren’t the only one with this problem. Cosmos (the book by Carl Sagan) is listed as ages 8-12 which is inappropriately truncated to an even greater extent than your book is.

  2. This is exactly what to expect from programmers. Even worse, the database structure is often wrong for what is intended requiring the programmer to fix it in code which is not where it can be fixed. It may look ok to the user but that’s only because they have no idea what crap is going on under the hood.

    ‘Solutions’ that screw things up are common because the majority of programmers don’t understand decoupling. Once a guy told me not to write a routine because he’d already written it and I should use his. It was such a tangled mess that it brought his whole project into the little utility I was writing. He deserved to be involved with making it work so I did. After wasting a day I ended up writing it the next day as I intended from the first. Never in my life have I handed off a function that wasn’t self complete but others do it all the time.

    Most programmers that promote ‘gotoless’ programming, for example, don’t understand the issue which has nothing to do with the branch and everything to do with multiple labels/landings. I had an argument years ago with some really smart folks designing a language. They just didn’t get it. They had no idea that including the kitchen sink is the opposite of a good language (yet still they leave out essential elements.)

    For almost a decade I enjoyed working in a team with members coming and going. Never again. Life is too short and I’m to old (and feeble.) Lessons I learned decades ago never seem to reach the next. The same mistakes get repeated again and again.

    Never change an interface because it breaks things. Code should work forever. If you need something new, write new stuff.

    1. I’ve been writing code since Ford was President, and you’re right, it seems like each new programmer has to learn the same lessons (if they’re able) as their predecessors. I think part of that is the mistaken idea that something new has to be better than something old, and each new language or OS is somehow no longer bound by Von Neumann. The biggest and most useful thing I learned as a programmer early on was, “don’t trust”. Don’t trust documentation (usually outdated), don’t trust the values returned by functions, don’t trust the data you get as input to the function you write, and don’t trust the user to only do what you tell him to do. I’ve seen very very few new programmers that think to add even the minimum of error checking in their code, they implicitly trust that everything will work the way they’re told. Scary.

      1. Young programmers, no matter how bright, just seem to believe whatever they read. That’s lack of experience. You do check boundary conditions but you don’t put error traps everywhere because it introduces bugs (usually of the infinite loop; lock up the computer type) and hides the source of the error.

        1. That depends on the way you handle the error. Some errors need to be “find and bail out” whereas others are just “find, log and move on”. I’ve never written an error handler that got into an infinite loop, though, and unless you’re reporting an error in a recursive call I’m not sure how that would happen normally. Of course, the amount and type of error checking is something that varies from system to system, and experience tells you how much to do. It should always be in the back of your mind as a developer to at least be suspicious of input data, and of function returns.

          1. Ok, usually an error in a error trap results in a stack crash rather than an infinite loop but it sticks in my mind (about a decade or more ago) that it did happen a few times when some guy read a book and decided every routine would get a standard handler he wrote. The project had over a million lines of code before we did that so you can imagine the mess.

      2. BTW, the compiler I’m using now brags that it has 1500+ keywords. As if that were a good thing. It would be better if it had less than 100. Much less if I defined it.

        1. Don’t get me started on language and library complexity. I’ve seen this happen to two tools, and I’m seeing it happen again with another. When I started using Unix, we had workstations that ran X Window 10.4. Very simple, cross-computer windowing system, the documentation fit into a 1 inch thick notebook. Once Sun, HP, Apollo, and others got done with version 11, the documentation took notebooks, and added huge complexity to the system. The same thing happened to C++, it started out as some object-oriented extensions to C, and in a few years ballooned into this behemoth. I went to a lecture by Scott Meyers, and he said that the C++ standard at the time could be interpreted in two very different ways in some places, and the compilers that generated different code would both be “compliant.” There were so many things added to the language as well, that made compiler writers pull their hair on how to implement them. I’m seeing the same thing happen to Java, with each version there are more capabilities added to the language, not all of which are required by every programmer. Arguably these extensions are useful, but oftentimes it’s to make writing more convenient, rather than being an absolute necessity, regardless of how bloated the language itself becomes. Just look at all the j**** libraries there are, too, that all have to be included just to make something simple work.

          Rrrrr, see, this is why I said “don’t get me started”…

          1. The good news is lifetime free upgrades. I had that with Lattice C before the company went belly up. I bought this compiler over a year ago to write something for linux. My linux box broke and they’ve upgraded the compiler since then. I’ve borrowed a windows laptop, downloaded both windows and linux upgrades and my old linux code compiles fine on this windows machine.

            Didn’t really expect that.

  3. My guess: it doesn’t really matter, as long as Amazon’s algorithms are doing the right thing as far as classifying your book correctly for search or promotional purposes. I wouldn’t want a bad algorithm to affect your sales. But once a human arrives at the the book’s entry on Amazon, I don’t think you have anything to worry about, since human readers can figure out who the book is for from the description.

  4. Age 8 and up?

    Do you really mean to exclude the Vice President from reading your book . . . (ba-doom boom)

  5. The program logic seems obvious and simple to this programmer. A single character is absolutely the wrong trigger to identify “mature” content. “18+” or “21+” aren’t any better unless taken in context of the whole age range. The correct logic looks at the lower end of the age range, which is a separate database field if some earlier programmer didn’t mess up. If the range is stored as a single field in the format
    ((\n+)-)?(\n+\+?)
    which would fit “8-18+” or “18+”, the situation can still be easily salvaged. If the age range is stored along with other data in a text blob, time to defenestrate (literally “de-window”) an earlier designer.

    1. The problem is they are trying to store two pieces of info in one field. Probably because the db guy says we’re not changing the schema, but the programmer is still responsible to make it work.

      1. I’m making an educated guess that they can’t update the database schema without taking the whole system down for maintenance, a result of the database having grown HUGE with use.

          1. That’s assuming the old code was written properly of course. It could reference the fields ordinally rather than by actual field name. Never do that experience says.

  6. A spot check of random Kindle titles looks like most authors don’t specify an age range. Can you just go back and select “none” in both menus?

    (Why is there a “upper age range” for any book?)

    1. The upper age range is useful for children’s books. Two year olds like books which won’t appeal to five year olds.

      1. They’re very good in general, but little oversights like that make me reluctant to put all my faith in their “cloud”. To me “clouds” are wispy, tenuous, fragile things that go away without warning…

  7. I guess I’m lucky, since my two Kindle-published short stories (and the in-progress novella I’m basing on one of them) are too violent to be for kids.

Comments are closed.