Scratch Resources

My kid loves Scratch (“the world’s largest free coding community for kids”), and I’d like to share the (free) Scratch learning resources that we’ve found the most helpful.

These are aimed towards kids who want to make video games in Scratch.

DigiPen Academy’s “Introduction to Game Design” lessons are a great starting point for someone with zero Scratch experience: https://www.youtube.com/playlist?list=PLMfv2cPTAcwr3IA8FnK78nn1c2LvangG0

After finishing that intro lesson, DigiPen Academy also has a more advanced game design series called “Basic Game Development Series”: https://www.youtube.com/playlist?list=PLMfv2cPTAcwpXtOEQeFsIsF3_QtVZ6UKn

After going through those, I recommend checking out YouTuber @griffpatch. He has a ton of great video series teaching all sorts of video game topics with Scratch.

“Empathy Driven Development” at Silicon Labs

I was recently invited to give my “Empathy Driven Development” talk at Silicon Labs for their annual Technical Symposium. This is an idea and a talk I developed at iRobot while trying to come up with a general list of software best practices. The idea grew and evolved over the years, and I’m pretty happy with where it’s at now.

TL;DR:

  1. As engineers, most of our job is communicating with other humans, including our future selves.
  2. Using empathy is an effective way to communicate better.
  3. Anyone can learn to have more empathy.
  4. Using empathy scales up very well.
  5. Profit.

I’m happy to be able to share a video recording of the talk: “Empathy Driven Development” on YouTube

I hope you can watch it and get something useful out of it.

Silicon Labs is a great company: I worked there twice, and enjoyed the work and the people both times. It was a lot of fun (virtually) connecting with many of my former colleagues again.

Thanks to everyone at Silicon Labs for putting on a great conference, and for letting me be a part of it.

Engineering Leadership and Management Books

I get the question “Can you recommend any books or other resources for learning more about engineering leadership or management?” often enough that I’ve decided to finally write something here that I can point people to.

Here are my top four* book recommendations, in order of recommended reading:

“The Manager’s Path” by Camille Fournier is my favorite overview of what different levels of engineering leadership and management look like. Mentor, tech lead, manager, director, etc. are all different roles with different responsibilities and this book gives you a good flavor of what each entails.

“Resilient Management” by Lara Hogan is an excellent book about the human side of engineering management. It describes how to support and grow your team and yourself.

“High Output Management” by Andy Grove is a classic book on effective engineering management. Grove covers a wide swath of management, leadership, and business topics. You might assume that a 1985 book from the CEO of a 100,000+ person company doesn’t have much to teach you, but you know what happens when you assume†.

My last recommendation is a twofer: Michael Lopp has written two books that cover, well, random parts of engineering leadership and management. I really like his storytelling style:

* Okay, five.

† The funny thing is that the “you know what happens when you assume” statement is, itself, an assumption!

‡ At least I think that’s funny.

Advice for Working From Home

Last week I had the privilege to speak with a class of Purdue electrical & computer engineering students about remote work. Like many universities Purdue has gone all-remote for the spring 2020 semester, and I was invited to share my work-from-home experiences from 5+ years of working full time remote. I’m a proud Purdue alum (BSEE 1999, MSECE 2002) and I hope my advice was at least a little helpful for the students.

Purdue posted a link to the full talk, including Q&A (which is not included here): https://www.youtube.com/watch?v=WHrjHkZEenU

Purdue also wrote a nice summary article here: https://engineering.purdue.edu/ECE/News/2020/ece-alumnus-delivers-virtual-talk-for-students

Read on for the rough transcript of my prepared remarks.

I do not speak for iRobot, heck, I barely speak for myself. I’m a stranger on the internet giving out advice: please take it all with a huge grain of salt. What I’ve been doing works for me, but I don’t know you, I don’t know your situation.

That said, I’ve worked for almost 20 years, and I’ve been working full time from home for 5 years. I’ll try to summarize what works for me as a full time remote/work-from-home employee. 

Let’s talk about the current situation.

These are unprecedented times. The word “unprecedented” will be worn out during 2020. It’s okay to be scared and anxious about your health, your family, the state of the world, your job prospects, everything. I’ve heard this called a once-a-century event.

It’s also okay to admit that and talk about it with the people around you. It’s okay to admit it affects your concentration and focus. It’s okay to admit you’re scared. Talking about it is a huge way to reclaim some of your mental health. I imagine that Purdue has mental health counseling available; people you can talk to who are professionals at listening and helping you deal with fear and anxiety and depression and stress. Take advantage of it!

Let’s talk about remote work or working from home.

I’m going to use the phrase “working from home” to mean doing job-work and studying and school work. School looks different from full-time-work jobs, but I’m going to try to give general guidance for work and school at home.

The phrase “we’re creatures of habit” is true. The key to successfully working from home is to set up a daily routine, and develop a habit of following that routine. What do I mean by a routine? I mean you plan to sit down at the same time in the same place every day, and do the same thing. As you develop a habit of following this routine your brain will actually help you by making it easier to follow that routine – we’re creatures of habit because our brain likes habit!

For example, for my work day: I get up, eat, shower, get dressed, make coffee, and go to my work desk in my home office by 8am. I actually tell my wife “I’m off to work!” as I walk up the stairs to help remind my brain that I’m doing from “I’m at home mode” to “I’m at work mode.”

I do this routine regardless of whether I’m feeling excited or bored, whether I feel like working or not. I do it every work day because I think of myself as a professional and it’s my job. Being a professional means showing up and doing the work every day, even if you don’t feel like it.

What does that look like for students? You’re probably watching lectures, doing homework, projects, and reading. I don’t know what a routine looks like for you. I don’t know what kind of time you have in your day. I don’t know what kinds of spaces you have in your home. I recommend you dedicate a part of your house to school. Maybe it’s a room, maybe it’s a desk. Whatever it is, if you can dedicate an area to school, and only do school work there, and don’t do school work elsewhere in your house, that will help your brain know “okay, I’m in the school space, time to work!” 

Furthermore, if you can set aside time every day for lectures, homework, etc. your brain will help you expect to be doing school work during those dedicated times.

Give a routine time to see if it works for you, then be flexible to keep what works and change what doesn’t work. Think of it like an experiment – some things will work and be easier than others, stick with those, discard the rest.

Maybe you have a separate space for watching lectures than doing homework. Maybe your schedule can’t be regular because of family or other reasons. That’s all fine – just try to set up some routine and habit as best you can!

Tips for sticking with a routine.

Some of these might work for you, some won’t – try it out if it sounds interesting, and feel free to ignore it otherwise.

Patience

Have patience with yourself and those around you. These are unprecedented times and you’re going to get frustrated and stressed – expect it, experience it, and know that it will get easier to work from home over time. You’re going to be building discipline and focus – those are muscles that get stronger over time. I promise you that if you stick with it’ll get easier.

Accountability

One method to help you stick to a routine is to be accountable to someone else for showing up and working. Share your routine with a friend, then tell each other how each day went. It’s much easier to do the work if you know your friend expects you to be there doing it.

Repeatability

Another tip is what Jerry Seinfeld does for writing: print out a big paper calendar and every day you stick to your routine, mark an X on the calendar. If you don’t stick to your routine, don’t mark it with an X. Seeing a string of X’s appear is motivational to some people.

Take Notes

When you are watching lecture videos or reading, take notes on paper. The harder your brain works at learning something, the more you remember it. If you passively sit there and listen as the professor drones on, you’re not going to remember anything. If you stop the video periodically and write down what you think you just heard, you’re going to know exactly how much (if anything) you just learned. And then you’ll be able to rewind and watch it again to learn what you missed.

Control

Focus on what you can control. To some extent, you can control where and how you work. You can control your attitude to some degree. It’s a bit trite, but it’s also true: try not to worry about what you can’t control. Focus on what you can influence or control. You can’t control your professor or how they lecture: but you can ask for what you need, and thank them for doing things that work for you to encourage them to continue it! 

This is an opportunity: Learn how to learn.

You have the rest of the semester to get better at learning while at home in a non-school environment. It’s an opportunity to learn how to learn! That skill is one of the most important skills you’ll need for the rest of your career.

Employers want people who can learn on their own. Technology will change enormously over your 40+ year careers – learn how to learn on your own now!

As a data point, when I took AI classes at Purdue in 2000, it was a known fact that neural networks were a dead end. Doing something like the robot mapping that Roomba does was a PhD thesis in 2010. In 2020 you get machine learning and robot mapping with a simple python command that’s taught to undergrads.

Learn how to learn new things now, because that’s a skill that will serve you well going forward.

Jobs, or lack thereof.

This is a stressful time to be looking for an internship or full time job. I’ve heard that companies are cancelling internships, retracting full time offers, and freezing hiring. Not all companies though! And hopefully this will pass as we flatten the curve – but it will absolutely take time!

If you lost an internship or can’t find a summer job and you want work-related experience – or you just want to build your resume – make the best of this summer by picking some project, no matter how small or silly, and do it. Build a small electronic gadget. Design a website. Pick a project that requires you to learn something to show yourself and employers that you can learn and follow through and complete a project on your own.


My prepared remarks ended there. I’ll close this blog post with words that a friend wrote while she was reviewing this post:

It takes time, energy, and effort to build good habits and routine in the best of times, and this is not the best of times. You will be stressed and frustrated from time to time, but if you keep at it you will also be effective, proud, and smarter in the long run. If you put in the time and effort now, you’ll enjoy the fruits of that labor for the rest of your career and life.   

And now to end this, I want to remind you as they say before takeoff, “Put on your own oxygen mask before helping those around you.” Stay safe. Stay healthy, physically and mentally. You will get through this.

Configuring Microsoft Sculpt Keyboard for Mac

I like the Microsoft Sculpt ergonomic keyboard, and here’s how I’ve configured it to work well on my Mac:

In System Preferences->Keyboard select “Modifier Keys…” and enter these settings – be sure you’ve selected “Microsoft Nano Transceiver” at the top:

Screen Shot 2016-03-22 at 9.25.03 AM

I’ve remapped Caps Lock to Escape using Seil because I’m a vim user, so you can ignore the Caps Lock setting if you actually use Caps Lock as Caps Lock.

Now the Sculpt keyboard’s Alt key is like the Apple key, the Windows key is like Alt/Option, and Control is unchanged.

Additionally, I wanted to use the Sculpt’s Home and End keys to actually go the the top and bottom (or start and end) of things, so I installed Karabiner and selected For PC Users->”Use PC Style Home/End #2″:

Screen Shot 2016-03-22 at 9.34.53 AM

I hope that works for you, too!

Announcing a New Embedded Software Site: Embedded.fm/blog

I’m excited to announce that Elecia White, Chris White, Andrei Chichak, and I have started collaborating on a new embedded software engineering blog over at Embedded.fm/blog.

It’s slightly related to the Embedded.fm podcast because it’s about embedded software and embedded systems, but most the content will be separate from the podcast.

Andrei and I will both be writing about getting started in embedded systems (using two completely different approaches), Elecia will be sharing excerpts from her upcoming book about taking apart toys, and Chris White will be talking about various projects. Hopefully there will also be entertaining embedded-ish rants.

Please stop by and check it out! I’ve had a blast reading pre-published stuff that will show up on the blog, and I hope that you’ll enjoy it too.

Why C Arrays Start at Zero: I Don’t Know.

Why do C arrays start at element zero? It’s probably not why you think.

Mike Hoye did a detailed investigation here: http://exple.tive.org/blarg/2013/10/22/citation-needed/

The TL;DR is that Hoye says most programmers think C has zero-indexed arrays because the creator of C chose zero for the run-time efficiency of pointer and array arithmetic. Hoye says this is wrong; he claims that C uses zero-indexed arrays because its predecessor BCPL used them, and that BCPL chose zero-indexed arrays for compile-time efficiency. (I’m not convinced by his technical arguments, by the way, but that’s beside the point I’d like to make.)

The history of zero-indexing is interesting if you enjoy reading about the history of programming languages. Otherwise it’s hardly notable.

Except.

Except you probably thought you knew why C arrays start at element zero. “Well, it’s because pointer and array math are efficient when starting at index zero.” If asked, you’d probably say it confidently, definitively, as a Fact with a Capital F. You might even be correct, but you’re only guessing.

Hoye goes on to say that programmers who think they know something as Fact without actually knowing it are living in a “mythology.” They’re fooling themselves and others.

The honest answer to “why zero?” should probably be “I don’t know.” Perhaps followed by, “I think it makes some pointer and array operations more efficient at the machine level, but I don’t know why Dennis Ritchie chose it when he created C.”

We don’t use the phrase “I don’t know” often enough. Maybe we’re afraid of being thought of as dumb or ignorant or more junior than we want to appear, or maybe we’re afraid of being found out as impostors.

Recognizing and admitting your ignorance is one of the fastest ways to learn. Recognize and admit when you don’t know something, at least to yourself.

Why did it take me 20 years of being a software engineer to realize how important this is?

I don’t know.


 

I wrote this piece for Embedded.fm (http://embedded.fm/blog/2016/2/9/why-c-arrays-start-at-zero) and am cross-posting it here.

Fred Brooks talk: “A Personal History of Computers”

I was lucky to see Fred Brooks give a fantastic talk called “A Personal History of Computers.” Dr. Brooks is legendary computer scientist and author of “The Mythical Man-Month,” which, if you’re in the computer industry in any capacity, you should read, think about, and then re-read at least once a year for the rest of your career. (His newer book, “The Design of Design,” looks promising as well, though I haven’t read it yet.)

Dr. Brooks is 84, and his highly entertaining and personal talk walked us through his history with computers, which is basically most of the history of computers. Here’s his abstract:

I fell in love with computers at age 13, in 1944 when Aiken (architect) and IBM (engineers) unveiled the Harvard Mark I, the first American automatic computer. A half-generation behind the pioneers, I have known many of them. So this abbreviated history is personal in two senses: it is primarily about the people rather than the technology, and it disproportionally emphasizes the parts I know personally.

And here’s a video of the same talk that he gave elsewhere: https://www.heidelberg-laureate-forum.org/video/lecture-a-personal-history-of-computers.html

I took two things away from the talk:

  1. Nothing ever changes.
  2. Everything changes all the time.

Nothing ever changes. Brooks discussed two works that he called the most important computer papers ever:

  1. “Preliminary discussion of the logical design of an electronic computing instrument,” a paper by Arthur Burks, Herman Goldstine, and John von Neumann.
  2. “As We May Think,” an essay by Vannevar Bush.

The von Neumann paper describes, in detail, how modern computers work. Bush’s essay describes, in detail, how modern networks and the internet works. They were written in 1946 and 1945, respectively. They were both so fundamentally brilliant, visionary, and practical that we haven’t been able to (or had to? or wanted to?) improve much on them in the last 70 years. Nothing ever changes.

And yet, everything changes all the time. Brooks spend his early career at IBM, which designed mainframe computers. Mainframes were physically huge and economically expensive, and were bought (or leased) and run by large companies, universities, and governments. At first mainframes were the only type of computer around. If you were a scientist or researcher who wanted to use The Computer (your company or university had at most One Computer, if you were lucky!), you had to use it according to how the high priests who controlled The Computer dictated. You had to share it with every other Department in your organization.

Minicomputers changed the sociology of the One Computer when they were introduced in the mid-1960’s. Minicomputers were smaller and cheaper than mainframes, and could be bought and run by mere Departments. Minicomputers changed the social and organizational dynamics of who could use The Computer; now each department or group could have their own computer to use as they liked! This quote in John Markoff’s new book “Machines of Loving Grace” sums it up well:

Computing was now sneaking out from behind the carefully maintained glass wall of the corporate data center and showing up in the corporate office supplies budget.

The microcomputer’s introduction in the 1980’s changed the sociology of computing again, this time making it possible for a person to have their own computer! “Personal computer” is a throwaway phrase in 2015, but when the personal computer was introduced it caused a massive change in how computing, and therefore work, was done.

Brooks said that now the sociology of computing is changing again as we have smart phones, watches, and other increasingly ubiquitous computing devices available.

And yet, nothing ever changes. At each transition point, Brooks said the companies that were successful in the current popular technology were too “fat, dumb, and happy” to reinvent their products or businesses to be successful in the new technology. They were “culturally not geared for” making the transition.

He didn’t use the words “disruption” or “disruptive innovation,” but what Brooks described was popularized as “The Innovators Dilemma” by Clayton Christensen in his book of the same name. Apparently each disruptive new era in the history of the computer came about in the same way as the previous ones.

It was great hearing about the history of computers from someone who had personally been there for most of it, and who knew many of the key players personally. I highly recommend watching the video (linked above) and reading “The Mythical Man Month,” as well as the von Neumann and Bush papers.

Business idea: Amazon Cloud Printing

Here’s a free business idea for Amazon: AMAZON CLOUD PRINTING.

It solves the problem of people who need a high quality printout without having to buy an expensive commercial printer or drive to a copy store, like an animal.

Here’s how it works:

  1. You request AMAZON CLOUD PRINTING online.
  2. An AMAZON DRONE flies an AMAZON LARGE COMMERCIAL PRINTER to your location.
    • Please open the window first, and then demolish the wall. It’s a big printer. You’ll have about 10 minutes to do this after submitting your AMAZON CLOUD PRINTING request. AMAZON CLOUD PRINTING is not responsible for damage or injury.
  3. The AMAZON DRONE waits for you to plug in the AMAZON LARGE COMMERCIAL PRINTER and load it with AMAZON COMMERCIAL PRINTER PAPER (not included).
  4. The AMAZON DRONE waits for you to unplug AMAZON ECHO, if present. AMAZON DRONE requires all of your attention. AMAZON DRONE is all you need.
  5. The AMAZON DRONE takes the file to print from you on an AMAZON USB THUMB DRIVE.
  6. The AMAZON DRONE prints the file on the AMAZON LARGE COMMERCIAL PRINTER.
  7. The AMAZON DRONE hands you the printout.
  8. You pay the AMAZON DRONE.
    • Cash only. No change given.
    • The AMAZON DRONE will count the money in front of you.
  9. The AMAZON DRONE then enters its WAIT-FOR-TIPPING mode.
    • It remains in this mode until you tip it, or until the INCENSED-DRONE-TIMEOUT is reached.
  10. Depending on the WAIT-FOR-TIPPING mode outcome, the AMAZON DRONE leaves with the AMAZON LARGE COMMERCIAL PRINTER using the original entry point, or a new one.

You’re welcome.