EppsNet Archive: Programming

Teaching Computer Science: Applause

23 Sep 2014 /


We did an interactive exercise to write a simple program that prints numbers and the squares of the numbers — a for loop, basically. We went around the room with each student providing one element of the loop and me writing them on the whiteboard: for, open paren, int, i, equals, 1, semicolon, etc.

I thought it went very well. The timing was good and it was obvious that most of the class understood what was going on. When we got to a girl who’s usually ahead of everyone and knows all the answers, what we needed from her was “curly bracket” but what she actually said was “semicolon” and there was a collective groan from the rest of the class.

When the last student said “close curly bracket,” there was spontaneous applause, immediately, before I even wrote it on the board. It wasn’t like a concert at the high school auditorium where a piece ends and there’s a gap — “Is it over? Do we clap now?” It was like a classical concert with a high-brow audience that knows exactly when the piece ends and when to clap.

Teaching Computer Science: Asking for Help

15 Sep 2014 /

I’m not sure students are asking for help enough despite my repeated admonitions to do so.

On the first day of class, I said, “Ask for help early and often. If you ask for help when you’re in trouble, you waited too long. Ask for help when things are going well. That’s a good heuristic in this class and in other areas of life as well.”

Later I said, “Learn to distinguish between persistence and floundering. Persistence is good. Floundering is bad. Don’t flounder.”

Yesterday I said, “You may think, ‘Well, if I was a better programmer, I wouldn’t have to ask for help.’ That’s incorrect. As you get to be a better programmer, you’re given harder problems to work on. I’ve been programming for 30 years — almost — and I ask for help every day.”

Honestly I feel like a mental case repeating the same thing over and over and yet out of 34 students in the class, 12 didn’t turn in the first assignment, most apparently because even though they finished it, they didn’t know how to turn it in (via an upload link on the class website) and didn’t ask for help or couldn’t figure out how to locate Java files in a project directory and didn’t ask for help . . .

Teaching Computer Science

1 Sep 2014 /

Tomorrow is my first day as an AP Computer Science teacher at Corona del Mar High School. It’s a volunteer gig through the TEALS organization.

Only about 10 percent of U.S. high schools offer computer science classes and at most of those schools, it counts as an elective, like Home Ec or Wood Shop, not as a class that can be applied toward graduation like math or science.

The most popular AP exam in 2013 was US History — 439,552 students took the AP US History exam. Only 31,117 students took the AP Computer Science exam. That’s about the same number as the AP Art History exam. I don’t want to denigrate the study of art history, but given the ubiquity of computers and software and programming in daily life, the study of computer science seems more likely to enable a person to be self-supporting and to contribute to the common good.

I’ve heard people say that computer science should be taught in every high school in America. That may be a good idea, but no one ever says where all the qualified computer science teachers are supposed to come from. The TEALS vision is to put high-tech professionals like myself in schools to teach computer science and to teach teachers to teach computer science.

I’m happy to have the opportunity but I’m also scared, I might as well put that out there. What am I scared of? Like everything else, that I won’t perform to expectations and that I’ll be exposed as a phony.

Programmers Don’t Play Polo

16 Aug 2014 /

On the product page for a book on software development principles, Amazon showed me this:

Customers also viewed ...

The product on the right — is that a bug in the cross-selling algorithm? I’ve worked in software development for about 30 years and have never met one person interested in the game of polo . . .

This Kid Made an App That Exposes Sellout Politicians

8 Jul 2014 /



Yes, the algorithm is

if (isPolitician(x)) {
    x.sellout = true;

Thus spoke The Programmer.

3 Links

26 Jun 2014 /
  1. 9 Things Bruce Lee Taught Me About Programming
  2. What a coach can teach a teacher, 1975-2004: Reflections and reanalysis of John Wooden’s teaching practices
  3. Wolfram Programming Cloud Is Live!

“Not Knowing How to Code is Like Not Knowing a Basic Skill”

20 Jun 2014 /

9 Links

1 Mar 2014 /
  1. Data Structure Visualizations
  2. Good Tech Lead, Bad Tech Lead
  3. Google Java Style
  4. Guide to 12 Disruptive Technologies
  5. How to Write a Cover Letter
  6. The Landing Page Optimization Guide You Wish You Always Had
  7. Selendroid: Selenium for Android
  8. UX Axioms by Eric Dahl
  9. Yelp’s got style (and the guide to back it up)

A $15 Minimum Wage is Not Going to Help You

6 Dec 2013 /

Fast Food Workers Will Strike On Thursday In L.A. : LAist

Fast food workers staged a one-day strike for “living wages.” More specifically, they want the federal minimum wage to be raised from $7.25 an hour to $15.

Fast food

(Photo credit: H Dragon)

You want to make a living wage? I’ll tell you how to make a living wage. I’ve had a lot of jobs and this method has never failed me.

Here it is: Before accepting a job offer, you always ask yourself, “Does this job pay enough for me to live on?” And if the answer is no, then you don’t take that job.

If you want to earn $15 an hour, do what I do: get a job that pays $15 an hour. Who’s stopping you?

If no one’s willing to pay you $15 an hour, it’s because the skills, intelligence and motivation that you bring to the table don’t allow you to do anything that’s worth $15 an hour. You need to do something about that. You need to be able to deliver $15 of value to an employer. Figure that out.

Setting the minimum wage at $15 is not going to help you. If you set the price of something at more than it’s worth, people are not going to buy it.

Imagine this: My friend Paul Epps is a programmer. Let’s say we passed a Minimum Wage for Programmers law that says that programmers must be paid at least $200,000 a year. Is that good news for Epps?

No, it isn’t.

His boss calls all the programmers into a meeting and says, “Well, according to the new Minimum Wage for Programmers law, I can’t hire any of you for less than $200,000 per year. You know what that means?”

“We all get a big raise?” Epps suggests hopefully.

“No, it means you’re all fired. Get out of here.”

Or imagine this: We pass a Minimum Price for Restaurants law that says you can’t get a meal in restaurant unless you pay at least $15 for it. What will that do to sales of Quarter Pounders and Jumbo Jacks?

People will stop buying those things. Many restaurants serve meals for which customers are willing to pay $15, but a fast food burger isn’t worth $15, even with fries and a drink, so people will stop buying those things.

Fast Work

17 Nov 2013 /

A junior high school math teacher posted this on Facebook:


That makes perfect sense to me. Work gets done a lot faster if the results don’t have to be correct.

Thus spoke The Programmer.

Agile, ALM, and Agile 2.0 — Putting the Cart Before the Horse?

1 Aug 2013 /
Cart before horse

Speaking of selling chickens still in shells, an august panel of industry giants laid out their recent improvements and plans for ALM products (Application Lifecycle Management, for those not in the know). These guys dazzled the audience with how they’ve moved far beyond simple source code repositories and testing tools to a complete integration of all modern software practices. Quite a coup, indeed, since most real live software developers I’m seeing out there today still aren’t using the practices automated by the ALM tools. . . .

In other words, many software developers aren’t using practices such as test driven development or source version control. Yet here are HP, Microsoft, and IBM announcing new ALM tools that automate more advanced practice in areas not even in use in the first place. Unbelievable.

Engineering Humor

9 Mar 2013 /
Root beer

An engineer walks into a bar and orders 1.0E20 root beers.

Bartender: “That’s a root beer float.”

Engineer: “Make it a double.”

[HT: Scott Hanselman]

Victor Szalvay: Technical Debt for PMs

Posted by on 5 Mar 2013

HTML5 Date Tag

21 Dec 2012 /

I learned something interesting about the HTML5 date tag. Look at this calendar dropdown:

HTML5 date tag

Here is the sum total of code needed to make that happen in a Chrome browser:

  1. <input type="date" />

That’s it! No Javascript, no CSS. Programmers these days have it easy.

How to Lose Your Job : A Fictional Memoir (Part I)

4 Sep 2012 /

Because of the huge productivity differences between good programmers and bad programmers — 10x? 28x? More? — my biggest leverage point as a development manager is my ability to hire people.

At my last job, we had an HR Director named Lucy. In every one of our annual Employee Satisfaction Surveys, Lucy’s group had the lowest scores in the entire organization. Nobody liked or respected her.

She was, however, close with the CEO, which made that irrelevant.


Lucy’s friend Kathy Slauson runs the Slauson and Slauson recruiting agency, so that’s where we got our programming candidates, who were mostly terrible.

The Slauson agency doesn’t specialize in IT candidates, although they do have a “technical recruiter,” who unfortunately knows nothing about technology.

They don’t bring candidates in for in-person interviews. They take whatever candidates give them in the form of a résumé and they pass the résumés along to clients like me in hopes of being paid a fee.

  1. Candidates send résumés to Slauson.
  2. Slauson sends them to me.

What value does this add over candidates sending résumés directly to me? None.

Slauson doesn’t qualify candidates. They don’t map abilities and skills against the requirements of a position. They add no value to the process, and I had to screen all the résumés myself, the same as if I’d just bought them from a job board.

When I saw that Slauson was just going to throw résumés at me, I asked them to please add a short write-up, indicating why they thought each candidate was a good fit for the job.

What I got was write-ups like “Candidate is good with Technology X,” where Technology X is something I indicated as a job requirement.

When I asked “How did you assess that the candidate is good with Technology X?” they would tell me “We asked him.” Or “It’s on his résumé.”

In other words, “Candidate is good with Technology X” meant “Candidate states that he’s good with Technology X. Unverified.”


(If you’re wondering at this point why an HR department would funnel good money to a recruiting agency for doing nothing, go back and reread the part where I mention that Kathy Slauson is a personal friend of Lucy the HR Director.)

Money to burn

I said earlier that Slauson has a “technical recruiter.” She was in the office one afternoon and handed me a résumé.

“He doesn’t look like an ASP.NET programmer,” I said after looking it over, “which is what we’re looking for. For example, I don’t see any C# experience.”

“It’s right here,” she said, pointing at the résumé where it said this: C++.

If you’re not a programmer, you might say, well, easy mistake to make. C# (pronounced C-sharp, like a musical note) and C++ (pronounced C-plus-plus) are both programming languages containing the letter C followed by one or more symbols.

But whereas C# is the primary programming language for web development on the Microsoft platform, C++ is a lower-level language used for system development. Nobody does web development in C++.

Not surprisingly, a high percentage of Slauson’s candidates bit the dust in the initial phone screen with me, because the phone screen was their first encounter with someone whose programming knowledge was non-zero and could possibly tell a good programmer from a bad programmer.

According to Kathy Slauson, that was totally unacceptable. She thought that because she had an in with the HR department, we should be hiring every candidate she sent over, qualified or not, and paying her for the privilege, which is the way it worked before I arrived on the scene and screwed up the process.

Money and whiskey

She was always very polite to me in person, assuring me that she was doing her best to improve the quality of candidates, but behind the scenes, she was telling Lucy the HR Director that I shouldn’t be allowed to interview candidates anymore.

(That information was never supposed to reach me but it did.)

Think about that: we had a recruiter telling our HR Director that a manager shouldn’t be allowed to interview their candidates. (The fact that I no longer work there tells you which side of the issue Lucy came down on.)

Kathy also told Lucy that the candidates I was rejecting were perfectly good candidates because after I turned them down, they were being hired at other companies.

Imagine that!

Of course they were being hired at other companies. They were being hired by companies with lower hiring standards for programmers. The best thing that could happen with some of those candidates is for them to be hired by competing organizations.

Do you think Amazon or Google worry that candidates they turn down get hired somewhere else?

(No, I wasn’t trying to match hiring standards with Amazon or Google. I’m just saying that it wasn’t my goal to be the employer of last resort, or to be able to say, “If we don’t hire ’em, nobody’s gonna hire ’em!”)

Everyone I hired was an order of magnitude improvement over the people they replaced.

I like to work with talented people. I’m not trying to get rich and I don’t have a career path. I’m trying to learn and get better and contribute to my profession.

If you give me a job where I’m responsible for hiring people, I’m going to hire the best people available, and decline to be force-fed unqualified candidates by a friend of the HR Director.

To be continued . . .

It’s a Seller’s Job Market in IT Right Now, Especially for Agile

31 Aug 2012 /

I recently concluded a 3-month job search. As part of my networking, I met a number of unemployed people in other fields who were having trouble not only getting jobs, but even getting interviews.

I talked to a lot of people and averaged about an interview a day, including phone interviews, mostly for development manager jobs. For every development manager job, there are multiple development jobs, so if you’re a developer, your situation is even better than mine was.

I live in Southern California, but the demand is not just local. I had multiple contacts from companies outside the SoCal area that can’t find qualified candidates.

I’ve been working again for over two months, I no longer have an active résumé on job boards, and I still get emails and calls every day from recruiters all over the country.

Agile and Scrum are in demand

West to Chicago, East to Toledo

The situation with Agile and Scrum right now seems to be that a lot of people are putting it on their résumé but most of them are bluffing.

One hiring manager told me that he’d talked to three dozen candidates who claimed to know Scrum and only one (me) who actually knew it.

Another hiring manager asked me to describe the Scrum process, beginning with a product owner with an idea through the end of the first sprint. It’s a basic question, and when I finished, he thanked me for my answer. “You’d be surprised how many people I ask that question and the answer is a yard sale.”

Actually, you’d be surprised how little I’d be surprised by that.

One recruiter contacted me about a 3-month Scrum Master contract in Toledo, Ohio. A glance at my résumé will tell you that I’ve never worked outside Southern California, so on a list of people likely to take a 3-month contract in Toledo, Ohio, my name would be far, far from the top, but the difficulty of finding a qualified candidate to fill that job is such that the recruiter contacted me anyway.

If you really know Agile and/or Scrum right now, it’s a seller’s market.

Increase Code Coverage by One Percent

25 Jul 2012 /

Don’t kill yourself striving for 100% coverage of code with automated unit tests. But take a few minutes to increase your coverage by 1%.

Most likely, that means going from 0% to 1%. And that’s the biggest improvement of all.

The Game Blame Game

22 Jul 2012 /
Washington Bullets uniform

My boy is playing NBA 2K12 and points out that my Where’s Waldo shirt looks like the Washington Wizards (nee Bullets) throwback uniforms.

“Where’s John Wall-do?” he says.

Ha ha. I get my comeback opportunity a few minutes later when his game player passes to a teammate, who scores, but his player doesn’t get credit for an ssist.

“HOW CAN THAT BE ANYTHING BUT AN ASSIST FOR ME?!” he shouts in disbelief. “That’s bad programming.”

“Oh I doubt that,” I say. “The people who program video games are a lot smarter than the people who play them.”

Case Study: One Programmer is Better Than 80

25 May 2012 /

When I was working at the Boeing Company in the mid-1980s, one project with about 80 programmers was at risk of missing a critical deadline. The project was critical to Boeing, and so they moved most of the 80 people off that project and brought in one guy who finished all the coding and delivered the software on time. I didn’t work on that project, and I didn’t know the guy, but I heard the story from someone I trusted, and it struck me as credible.

Ruby on Rails for Rubes

28 Apr 2012 /
Ruby Tuesday

(Photo credit: matt hutchinson)

The biggest headache in software development is that most programmers can’t program and don’t want to learn anything.

I recently finished up a MOOC called Software Engineering for SaaS, offered by UC Berkeley through Coursera. For a modest investment of a few hours a week for five weeks, I learned some Ruby on Rails — a well-designed platform and a lot of fun to work with — as well as tools like GitHub, Cucumber, RSpec, SimpleCov and Heroku.

Over 50,000 students from 150 countries signed up for the class. According to a final email from the professors, about 10,000 students attempted at least one assignment or quiz. Or to look at another way, 80 percent of the students gave up without even trying.

Approximately 2,000 students, or 4 percent, completed all four of the assignments and the three quizzes.

One of the enrollees who gave up without trying is a former colleague of mine, an ASP.NET programmer, who threw in the towel when he realized he wasn’t going to be allowed to do the programming assignments in C#.

Evidently he read under Prerequisites: “Programming proficiency in an object-oriented programming language such as Java, C#, C++, Python, or Ruby” and missed the course description at the top of the page: “This course teaches the engineering fundamentals for long-lived software using the highly-productive Agile development method for Software as a Service (SaaS) using Ruby on Rails.”

“I’m not going to learn Ruby on Rails,” he said, as though it was a silly, irrelevant thing to suggest to a professional programmer, like learning a yo-yo trick.

Thus spoke The Programmer.

« Previous PageNext Page »