Categories
Humor Process

How you deploy a container on Kubernetes

Photo: Tour guide pointing at insanely complex panel in insanely complex control room: “And this is how you deploy a container on Kubernetes”
Tap to see at full size.

It’s funny because it’s true.

[ Thanks to Guy Barrette for the find! ]

Categories
Hardware Process Programming

Building a lean and mean (and frugal!) Python development machine with Peppermint OS

I always keep an old computer or two around “just in case,” and it often turns out that they’re useful for all sorts of things. In an age when online access is a necessity and in a line of work where being able to put together a quick web page, application, or server is important, a spare computer — even one that’s a little bit backward by today’s standard — can be a handy resource.

Enter “tinymint,” a Compaq 610 laptop that Anitra got from her old workplace a couple of years back for $50. (You should be able to find a used one, or one with similar specs, for about $100.) We originally got it to give to her parents so that they’d have a half-decent machine on which to surf the web, but we’ve since replaced it with a Chromebook, which requires less maintenance. They gave the Compaq back to us, and I’ve since boosted its RAM to the maximum: A whopping 4 GB, which was pretty respectable in the Windows Vista era when it was manufactured.

Diagram showing the parts of the Compaq 610 laptop as viewed from the front and left sides.
An excerpt from the QuickSpecs manual for the Compaq 610.

In case you’re curious, here’s a quick rundown of the specs of my particular Compaq 610. Remember, this laptop is almost old enough to get its own YouTube account or Bat/Bar Mitzvah:

  • Chipset: Mobile Intel GME965 Express chipset with ICH8M, 800 MHz front side bus. This chipset is from around 2007.
  • Processor: Core 2 Duo T5870 (2.0 GHz, 2 MB L2 cache, 800 MHz FSB). This is better than the other options: The dual-core Celeron T1500 and the Celeron 560, both of which had the slower 533 MHz bus.
  • RAM: 4 GB. This is the maximum, which isn’t surprising for a 2009-era computer. 32-bit operating systems were the standard then (64-bit OSs were available, but at a premium), and they’re limited to accessing about 3 GB of memory. The machine originally had 2 GB, and I got replacement RAM from NewEgg for about $20.
  • Hard drive: 250 GB. Not all that different from what you’d get with the lowest-end MacBook Pro today.
  • Wireless networking: Intel PRO/Wireless 3945ABG wifi a/b/g
  • Wired networking: Marvell Yukon 88E8042 PCI-E Fast Ethernet Controller
  • Webcam: 2 megapixels, so it’s 1080p.
  • Other goodies marking it as a 2009-era computer:
    • A 56K modem! I don’t think I’ve had dial-up service since 2000. Even during those rare occasions when I need to send a fax, I do it through online fax services.
    • Separate 1/8″ mic and headphone jacks.
    • VGA output. Good thing I hung onto that Acer VGA monitor.

There were a few variants of this machine, and I’m a little surprised that this turned out to be one of the better ones — normally companies go with the bottom-of-the-line configurations, especially for computers whose primary purpose was probably producing cover sheets for TPS reports.

Desk with a Compaq 610 laptop on a wooden box, Acer VGA monitor on a stack of Smalltalk-80 books, an Apple wired keyboard and a Microsoft mouse.
Installing Peppermint Linux on the Compaq 610.

I like to think of “tinymint” as a Raspberry Pi with a built-in monitor, keyboard, and battery (although I need to pick up a replacement battery; this one no longer holds any charge). This means that it’s still got some years left in it, where it could function as a server, a runner of automated tasks, or as a budget Python programming machine.

I’m scheduled to teach an “Intro to programming with Python” course in July, and I may actually use this as my demo machine, just to show what’s possible even on a limited budget.

In order to get the most out of this machine, I replaced the Windows with something considerably more lightweight: Peppermint.

Peppermint is a Linux distribution based on Ubuntu, and it’s designed to run on systems with limited resources. To this end, it uses a desktop environment that’s a mix of LXDE’s lxsession session manager and Xfce’s panel and applications menu. Simply put, it’s not going to look as slick as commercial OSs or even other Linux distros, but it’ll be reasonably good-looking and run quite well.

Since Peppermint is a Linux distro, it has all the command-line goodness that a developer needs. I wanted to make “tinymint” a lean mean Python machine, so immediately after Peppermint finished installing, I installed Anaconda Individual Edition and Visual Studio Code, both of which installed and run without any issues.

I’m going to make regular use of “tinymint” and post the occasional report about my experiences with it. If you’re a developer with an older computer and a limited budget, you should look into Peppermint — you might find that it’s exactly what you need.

The current version is “Peppermint 10 Respin,” which came out in December. It’s based on Ubuntu 18.04 LTS, and if you want to know more about this release, check out their announcement.

Want to know more? Here are a couple of recent video reviews of Peppermint:

Categories
Humor Process

Agile theory and agile practice, explained with Phoebe and Joey from “Friends”

Thanks to Renoir Boulanger for the find!

Categories
Current Events Humor Process

Security threats, shown as the people from “Tiger King”

Categories
Deals Process Reading Material

“The Essentials of Modern Software Engineering“: A must-read book, free for a limited time!

The Essentials of Modern Software Engineering is an apt title for a book that helps you move from programming (writing code) to software development (the larger process, which includes requirements, design, testing, delivery, maintenance, and so on) to software engineering (bringing the discipline of engineering to software development, which involves repeatable, consistent processes, and a move to relying more on science than on craft). Better still, it’s a $60 book that’s now available for free right up to June 30th, 2020!

ACM logo

Who’s giving away this book?

The book is part of the digital library of the ACM — Association for Computing Machinery — one of the world’s first and largest professional groups devoted to computing. Founded in 1947, the ACM pre-dates the first time a thing we would consider to be a program was run on a thing we would consider to be a digital computer by a year! The ACM’s mission is to promote computing as an academic interest, science, and profession.

On Monday, March 30th, the ACM announced that they have opened their normally paywalled digital library to the public for the next three months as a way of supporting the computing community during the COVID-19 crisis. From now until June 30th, 2020, it will cost nothing to access the library or to download any number of electronic books from it. You can visit the library right now without having to log in.

Here’s the thing: the ACM is an organization run by academics, and you’ll see that as soon as you visit the library. Their books are more like university textbooks and less like “For loops for Dummies”. Still, there are a few books in the library that you’ll find useful even if you aren’t looking for works to cite for your Ph.D. dissertation. The Essentials of Modern Software Engineering is one of these books.

Why should you get this book?

Most books on development these days focus on what I call the mechanics of building software: the vocabulary and syntax of programming languages, how-tos from programming tools, frameworks, and libraries, and the technologies and techniques for getting a specific kind of functionality into the applications you’re writing.

Fewer books and even fewer courses cover the larger process of building software, such as design, development,  testing, evaluation, and maintenance. Software engineering is not programming: It’s the application of techniques borrowed from engineering to craft complete solutions, of which software is a part.

The Essentials of Modern Software Engineering provides a good introduction — or for those of us who took the course long ago, a good refresher — to the topic.

Who should read this book?

  • If you’re a computer science major: Software engineering is a key course in just about every university’s computer science degree program. This is because it’s part of a recommended standard computer science curriculum developed by the ACM and IEEE (Institute of Electrical and Electronics Engineers). The Essentials of Modern Software Engineering is one of the most up-to-date textbooks on the topic.
  • If you’re self-learning or in a code camp: Software engineering is one of those topics that gets missed in the code schools and courses, where the emphasis is on a specific programming language and technologies and not the larger topic of the software development process. The Essentials of Modern Software Engineering is essential supplementary ready for you.
  • If you’re a junior developer: Are you on your first job, or perhaps the first couple of years in your software development career? Think of The Essentials of Modern Software Engineering as a way of gauging prospective workplaces or the place where you’re working, as well as a guide for what you should be learning.
  • If you’re a senior developer: What a senior developer anyway? Well, if the number of developers doubles every five years as it has been since the ’90s, it stands to reason that half the developers out there have less than five years’ experience. If you have 5+ years’ experience as a developer, you’re a senior, and you should treat The Essentials of Modern Software Engineering as a checklist!
  • If you’re a non-technical manager of a development team or project: The Essentials of Modern Software Engineering is pretty layperson-friendly and quite readable. You should at least skim the book for an overview of what’s considered better ways to build and maintain software.
  • If you’re in hiring or recruiting: You should skim The Essentials of Modern Software Engineering to get a better feel for the software development process. You might also get some insight into the sort of skills and aptitudes that developers, especially senior ones, should have.

Get the book now while it’s free!

In case you were wondering, The Essentials of Modern Software Engineering currently has a five-star rating on Amazon. Yes, it’s from 7 reviewers, but 7 high-quality reviewers.

Categories
Humor Process

This is what having to deal with new tickets in the middle of a sprint feels like

The only thing worse is when you complete those additional tickets and all management does is exclaim “That little droid did it!”

Here’s the relevant clip from The Phantom Menace for context:

Categories
Process Programming

FizzBuzz Still Works

The Sorting Hat

I recently interviewed some programmers for a couple of available positions at CTS, the startup crazy enough to take me as its CTO. The interviews started with me giving the candidate a quick overview of the company and the software that we’re hiring people to implement, after which it would be the candidate’s turn to tell his or her story. With the introductions out of the way — usually at the ten- or fifteen-minute mark of the hour-long session, I ran each candidate through the now-infamous “FizzBuzz” programming test:

Write a program that prints out the numbers from 1 through 100, but…

  • For numbers that are multiples of 3, print “Fizz” instead of the number.
  • For numbers that are multiples of 5, print “Buzz” instead of the number
  • For numbers that are multiples of both 3 and 5, print “FizzBuzz” instead of the number.

That’s it!

This was the “sorting hat”: the interview took different tacks depending on whether the candidate could or couldn’t pass this test.

I asked each candidate to do the exercise in the programming language of their choice, with pen and paper rather than on a computer. By requiring them to use pen and paper rather than letting them use a computer, I prevented them from simply Googling a solution. It would also force them to actually think about the solution rather than simply go through the “type in some code / run it and see what happens / type in some more code” cycle. In exchange for taking away the ability for candidates to verify their code, I would be a little more forgiving than the compiler or interpreter, letting missing semicolons or similarly small errors slide.

The candidates sat at my desk and wrote out their code while I kept an eye on the time, with the intention of invoking the Mercy Rule at the ten-minute mark. They were free to ask any questions during the session; the most common was “Is there some sort of trick in the wording of the assignment?” (there isn’t), and the most unusual was “Do you think I should use a loop?”, which nearly made me end the interview right then and there. Had any of them asked to see what some sample output would look like, I would have shown them a text file containing the first 35 lines of output from a working FizzBuzz program.

The interviews concluded last week, after which we tallied the results: 40% of the candidates passed the FizzBuzz test. Worse still, I had to invoke the Mercy Rule for one candidate who hit the ten-minute mark without a solution.

The Legend of FizzBuzz

I was surprised to find that only one of the candidates had heard of FizzBuzz. I was under the impression that that it had worked its way into the developer world’s collective consciousness since Imran Ghory wrote about the test back in January 2007:

On occasion you meet a developer who seems like a solid programmer. They know their theory, they know their language. They can have a reasonable conversation about programming. But once it comes down to actually producing code they just don’t seem to be able to do it well.

You would probably think they’re a good developer if you’ld never seen them code. This is why you have to ask people to write code for you if you really want to see how good they are. It doesn’t matter if their CV looks great or they talk a great talk. If they can’t write code well you probably don’t want them on your team.

After a fair bit of trial and error I’ve come to discover that people who struggle to code don’t just struggle on big problems, or even smallish problems (i.e. write a implementation of a linked list). They struggle with tiny problems.

So I set out to develop questions that can identify this kind of developer and came up with a class of questions I call “FizzBuzz Questions” named after a game children often play (or are made to play) in schools in the UK.

Ghory’s post caught the attention of one of the bright lights of the Ruby and Hacker News community, Reg “Raganwald” Braithwaite. Reg wrote an article titled Don’t Overthink FizzBuzz, which in turn was read by 800-pound gorilla of tech blogging, Jeff “Coding Horror” Atwood.  It prompted Atwood to ask why many people who call themselves programmers can’t program. From there, FizzBuzz took on a life of its own — just do a search on the term “FizzBuzz”; there are now lots of blog entries on the topic (including this one now).

In Dave Fayram’s recent article on FizzBuzz (where he took it to strange new heights, using monoids), he observed that FizzBuzz incorporates elements that programs typically perform:

  1. Iterating over a group of entities,
  2. accumulating data about that group,
  3. providing a sane alternative if no data is available, and
  4. producing output that is meaningful to the user.
If you can’t write a program that does all of the above in its most basic form, you can’t program. It’s that simple. Needless to say, anyone who didn’t pass FizzBuzz didn’t pass the interview.

My FizzBuzz Solution

I can’t go fairly judge other programmers with FizzBuzz without going through the test myself. I implemented it in Ruby, my go-to language for hammering out quick solutions, and in the spirit of fairness to those I interviewed, I did it with pen and paper on the first day of the interviews (and confirmed it by entering and running it):

I consider myself a half-decent programmer, and I’m pleased that I could bang out this solution on paper in five minutes. My favourite candidates from our interviews also wrote up their solutions in about the same time.

A Forty Percent Pass Rate?!

Okay, the picture above shows a 33% pass rate. Close enough.

How is it that only 40% of the candidates could write FizzBuzz? Consider that:

  • All the candidates had some kind of college- or university-level computer programming education; many had computer science certificates or degrees.
  • The candidates had varying degrees of work experience, ranging from years to decades.
  • Each candidate could point to a sizeable, completed project on which they worked.
  • All the candidates came to us pre-screened by a recruiting company.

A whopping sixty percent of the candidates made it past these “filters” and still failed FizzBuzz, and I’m not sure how. I have some guesses:

  • Moving away from programming: Some of them may have started as developers initially, but over time, their work changed. They still hold some kind of programming-related title and their work still has something to do with the applications they were hired to develop, but these days, most of their job involves tasks outside the realm of actually writing code.
  • “Copy and paste, adjust to taste”-style programming: Also known as “Coding by Googling”,  this is when a developer writes applications by searching for code that’s similar to the problem that s/he’s trying to solve, copy-and-pastes it, and then tweaks it as needed. I get the feeling that a lot of client-side JavaScript is coded this way. This is one of the reasons I insisted that the FizzBuzz exercise be done on paper rather than with a computer.
  • Overspecialization: It could be that some candidates have simply been writing the same kind of program over and over, and now do their work “on autopilot”. I’ve heard that FizzBuzz is pretty good at catching this sort of developer unaware.

If you’re interviewing prospective developers, you may want to hit them with the FizzBuzz test and make them do it on paper or on a whiteboard. The test may be “old news” — Imran wrote about it at the start of 2007; that’s twenty internet years ago! — but apparently, it still works for sorting out people who just can’t code.

Be sure to read the follow-up article, Further Into FizzBuzz!