Showing posts from 2019

Post Processing: Watch Your Language, Jaron Lanier Fixes The Internet

Watch the rise and fall of your favorite programming languages, set to music: Popular Programming Languages 1965-2019.   The lead changed multiple times and the YouTube video ended with the top 3 languages being Python, Java, and Javascript.  Okay, C# came in 3rd if you don't consider Javascript a real programming language.

This was the work of a first year PhD student who mined data from GitHub repositories and historic national surveys.  It's not far from the TIOBE index I wrote about in a previous Post Processing which ranked the top 3 languages as Java, C, and Python.

There is yet another language survey done by Stack Overflow.  It polled its membership, and nearly 90,000 developers responded.  While 90,000 is a healthy sample size, keep in mind those polled still represent a closed environment.

Top 3 loved languages: Rust, Python, TypeScript.
Top 3 dreaded languages: VBA, Objective-C, Assembly
Top 3 languages programmers want to learn: Python, Javascript, Go

These result…

Bookshelf Classic: Beautiful Code

This book is what you get when you ask 38 top software developers "What is beautiful code?"  An open ended question, you get diverging answers such as a deep dive into a regular expression matcher from Brian Kernighan, an optimization of population counts from Henry S. Warren Jr. (for bit-heads, not sociologists), and a treatise on why code is better treated as an essay from Yukihiro "Matz" Matsumoto.

For this post though, I want to focus on Jon Bentley's contribution, curiously titled "The Most Beautiful Code I Never Wrote."  Elaborating, Bentley writes

In software, the most beautiful code, the most beautiful functions, and the most beautiful programs are sometimes, not there at all.

He then uses the Quicksort algorithm to illustrate his point, first reviewing the code, instrumenting it with counters, and optimizing it along the way.  But the pressing question he tries to answer is: "How many comparisons does Quicksort make, on average, for a ra…

Swift V Kotlin

Dropbox wrote a candid and insightful post titled The (not so) hidden cost of sharing code between iOS and Android. It's a common dream to have "one codebase to rule them all" but reality intruded, not only for DropBox, but on projects I have worked on as well.

Dropbox needed to support both Android and iOS devices, so instead of writing for each platform in Java and Objective C respectively, they labored to produce a layer of C++ code that worked for both.  But success was hard to come by, and in their own words:

By writing code in a non-standard fashion, we took on overhead that we would have not had to worry about had we stayed with the widely used platform defaults. This overhead ended up being more expensive than just writing the code twice.

I would add, from my own experience, that a "generic code layer" targets the lowest common denominator, and fails to take full advantage of native device features.  Add that Apple and Google are continuously improving t…

On The Road To macOS Catalina, Take The Scenic Route

I've upgraded to macOS Catalina and there's a lot to like.  There's also a lot to be concerned about, and I recommend only upgrading if you have a second machine running the older macOS Mojave.

Post Processing: Swift, Kotlin, Team Scaling Fallacy, Levandowski

When I wrote Programming Languages I've Loved and Hated, it came from the heart.  In contrast, the Tiobe Index ranks the languages from the head, and is based on hits from a search query.  As of August 2019, Java reigns at #1, followed by C, and then Python.  The rankings did not surprise me, and at least 2 of my favorite languages made it into the top 3.  C++ came in 4th.

Swift (iOS) and Kotlin (Android), being specialty languages for the mobile space, were further down the list.  Swift came in at #18, but Kotlin disappointed, coming in at #45. Nevertheless, as iOS and Android users grow,  the popularity of Swift and Kotlin will likely follow.

The name Swift is easy to fathom.  The language speeds up iOS development (compared to using Objective C), and it also runs respectably fast.  The Kotlin designation is rather opaque, but being a derivative of Java, Kotlin was named after an island near St. Petersburg under the mistaken assumption that Java was also named after an island, a…

LuldCalc For Android

LuldCalc is now available for Android.

Learn more about Limit Up Limit Down here:

See our privacy policy:

The app is now available on Google Play:

Bookshelf Classic: Design Patterns

This is an odd book.  It is a classic, yet among the least useful books in my library.  The authors Gamma, Helm, Johnson, and Vlissides, affectionately referred to as the "Gang Of Four," wrestled with Object-Oriented Programming (OOP) to produce a catalog of solutions.  Inspired by the pattern languages used in architecture -- notably by architect, design theorist, and professor, Christopher Alexander -- they worked to imbue software development with the same formality, benefits, and gravitas of the age-old discipline.

To some degree, the "Gang Of Four" succeeded. They explored and reinforced a working vocabulary regarding software design such as Model View Controller, Singleton, and Factory.  Unfortunately, they also promoted jargony and academic terms such as adapter which is better known as wrapper, observer for publisher/subscriber, and compositor and composition for formatting classes.

OOP, while still popular, is waning, yielding to both new styles such as f…

The 24x7 Trap

One Sunday morning, I noticed a US Postal truck driving like a DHL delivery van -- in a word, frantically.  Normally, my mail carrier is methodical, efficient, and friendly.  Apparently, he was delivering for Amazon.

I've read accounts where the drivers welcomed the extra work and the subsequent pay, but I've also read accounts where additional tools -- straps and dollies -- weren't provided to help with larger and heavier packages, making those drivers uninterested in the overtime.

On another Sunday morning, my bank branch was open, mainly because the bank across the street adopted Sunday hours.  Inside, the mood was somber and the air was stale.  The ventilation system was dialed back to account for fewer people.  Normally, the tellers were friendly and engaging, offering lollipops to customers with children.  Looking into the tellers' eyes, I could see they just hoped to make it through the day.

I never went back on a Sunday.  Fortunately, the extended hours at the…

LuldCalc version 1.1 Available

Version 1.1 is available for downloading at the app store.  The changes are cosmetic: contrast and readability have been improved, and the icon has a cleaner design.

More info about LuldCalc can be found here:

DIY: Hide The Mac Desktop

macOS Mojave introduced stacks to organize and clean up the desktop.  I like and use that feature, but sometimes, I want to go a little more minimalist and hide my desktop entirely.

Those who have bitten the Apple already know the commands to hide and show the desktop.

defaults write CreateDesktop -bool false && killall Finder

defaults write CreateDesktop -bool true && killall Finder

For the uninitiated, I will explain the commands and help you put them in a couple of scripts so you can hide and show the desktop at will.

First, you will need to launch the terminal app.  It lives in the Utilities folder, but you can also use Apple's Spotlight Search and type in "terminal"

Once you launch the terminal, you can type in the above commands and watch your desktop hide and reveal itself respectively.

The defaults command gives you access to the Mac OS user default settings.  You can read the value of CreateDesktop, or in th…

Programming Languages I've Loved and Hated

Upon encountering various programming languages during my career, some appealed to me instantly, while others left me cold.  I never really understood why, but perhaps by writing about them, I can discern a pattern.

PL/C: This was the first language I learned.  Structured, imperative, and procedural, PL/C was Cornell's teaching variant of PL/1, and the language shaped much of my thinking.  It was a good language, and I liked it, but it was also an academic language and one I would never see or use again.

Basic (IBM PC): It was hate at first sight.  The language relied on line numbers, needed GOTOs, and was interpreted. But it was early in the PC days and I had to use it if I wanted to do anything useful.  In time, Basic became a compiled language and eventually evolved into Visual Basic for Windows programmers.  But even then, the first version of Visual Basic did not directly support arrays, an omission that convinced me that Basic would forever be a dumbed-down language.

8088 Asse…

Post Processing: Hiring, Microsoft, Einstein, Google Fi, and Linux

I explored how tech hiring was broken in two previous posts: The Best Selling Tech Book On Amazon Is ... and Alternatives to the Whiteboard. An article from CNBC adds to the story.  Historically, the Google hiring process required six to nine months and 15 to 25 interviews, but learning the lesson of diminishing returns, Google has adopted the "Rule of Four."

In the post Git-Hub Hub-Bub, I wrote how Microsoft, under Nadella, is different and better than when it was under Ballmer.  Microsoft continues that trajectory as written in Bloomberg's The Most Valuable Company (for Now) Is Having a Nadellaissance.  Most telling is Nadella's mature reaction to a $1 trillion valuation: "... not meaningful" and any rejoicing about such an arbitrary milestone would mark "the beginning of the end."
The figurines Albert Einstein and Homer Simpson sat together on my shelf for a few years.  Every now and then, I wondered what they would say to each other if they ha…

Bookshelf Classic: More Programming Pearls

If you were to judge a book by its cover, you would, from the image of the keyboard, conclude this book is old.  If you were to judge this book by what's inside, you would conclude likewise because the examples are written in C and Awk.  But were you to look deeper, you would see that these are no ordinary pearls.

Jon Bentley wrote a regular column for the Association for Computing Machinery (ACM) and his essays were collected into two of books: "Programming Pearls" and "More Programming Pearls."   The first book focused on speed and efficiency, while the second book covered that and more, including debugging, I/O, and enlightening "Aha!" moments.

Because these essays were originally written for a monthly magazine, Bentley recommends taking it slow, reading one column per sitting, and trying the exercises.  Thankfully, he doesn't leave you hanging, and provides answers at the end of the book.  Chapters 5 thru 8 are the exception and can be read i…

LuldCalc Live at the App Store

LuldCalc is live at Apple's App Store.  Designed for traders and stock exchange operators, it calculates the upper and lower price bands given a stock's price.  Search "Luld" on your iPhone's App Store.
The tables here summarize the rules involved in the calculations.  More details can be found the luldplan website.

Apple requires a privacy policy for all its apps. Simply put, LuldCalc is a stand-alone calculator, does not collect personal information, and does not connect to the internet.

Privacy PolicyThis privacy notice discloses the privacy practices This privacy notice applies solely to information collected by this website. It will notify you of the following:

1. What personally identifiable information is collected from you through the website, how it is used and with whom it may be shared.
2. What choices are available to you regarding the use of your data.
3. The security procedures in place to protect the misuse of your information.

Estimates Are Not Deadlines

A friend posted this image, and naturally, I laughed.  I shared it with other friends, and they laughed too.  That this situation was so widely recognized, however, made it cause for crying rather than for laughing.

Stating the obvious, estimates are not deadlines, and buffers -- proper spacing between milestones -- are needed for good  project management.  In practice, this advice is lost, and the result is bad software.

Failure to implement buffers ignores the unexpected: people leave, requirements change, a show-stopping bug is found. Without buffers, one unexpected problem cascades to all the milestones downstream.

Some project managers play it "close to the vest."  They really do have buffers in the schedule, keep them a secret, and hope the developers continue to work hard to meet the original deadlines.  The hazard here is that the developers will make (unnecessary) compromises to meet them.

"Do we have time to add an extra field in the database record for faster…