Monday, 25 February 2013

The Perils of Application Development. Part 3: The End


There were now five groups in the company. Admin, composed of two women, looked after personnel, and payable and billable accounts. The sales group consisted of two men: one of whom worked on developing new clientele and the other who worked on our current account. John, assigned to the current account, spent his days on the telephone with the clients in Michigan going over their requirements and promising delivery dates. However, he never discussed his agreements with me. It would have been useful to know what our clients were expecting and what John was promising them, but the only conversations I had with him were in our weekly status update meetings with the president, Peter. John would present his Gantt charts and I would update Peter on the progress my group was making, but there was no relationship between John’s charts and my reports. The third group was operations support. This was the team of people who input the raw data into the database and who ran the applications to produce catalogues. I worked closely with the head of operations, Tom. In fact the only area of cooperation and coordination in the company was between Tom’s and my groups. There was the group working on a CD version of our software, headed by Greg; and there was my group writing the computer code that made everything work. The Quality Assurance woman was still there, supervised by and reporting to no one. My group did our own QA.

It should be apparent to anyone reading the above description that this was a company in deep trouble. The sales group was contributing nothing to the daily operations. Greg’s CD group was isolated, apparently by choice, from the rest of the company. The QA position was less than useless. The only ones producing any actual work were my group and operations support. Our client had already paid a million dollar advance and the company was burning through that fairly quickly. By November, I was aiming to have a version of the software able to stand up to rigorous testing on the client’s part by mid-January. Except for the long promised bug-free database loading package—which was not actually critical to our success—the application was taking shape as a robust and easily customizable application. Almost all of the previous work in the frontend had been scrapped and replaced by code that was efficient, easily maintainable, and user friendly. Fortunately, for my part, Charles’ code to which I had been entrusted was well-designed and thought-out, meaning I had to make very few changes and my previous work in documenting it made that work even less time-consuming, leaving me free for supervisory activities.

In my last piece I mentioned the battle between a member of my team and the CD development group. They recovered from the set-back of the initial disastrous release of their CD and worked their way back into Peter’s good graces. Charm worked. But the failure of my team member to produce the database loading code he had promised months before was beginning to wear thin. I looked at his code on a weekend when he wasn’t there and concluded that any other member of my team could take over his work and complete it, possibly within a week of taking it on. It was just a matter of time now before I approached Peter with the idea of letting my employee go, but, with Christmas approaching I was reluctant to take that step right away. If Peter asked, I was also going to recommend that we did not need the person occupying the QA position.

The first week of December, Peter threw a Christmas party for the staff. It was a Friday. I thought it significant that no member of the CD development team attended. Once again, they were giving the rest of the company the finger. We had a good time and I was delighted to meet family members of my team. The Tuesday following as I readied for my weekly 10:00 am meeting with John and Peter, John told me that Peter had to postpone the meeting until 4:00. I thought nothing of it, but then, as 3:30 arrived and passed, John appeared to be getting agitated and was pacing inside his office, glancing frequently at his watch. At about five minute to four John appeared in his coat and said he’d have to skip the meeting; he had something important to attend to. I felt relief that I’d finally be able to have a private talk with Peter about some of my concerns. At four as I went towards Peter’s office, the personnel director stopped me and said Peter was busy and she’d let me know when he could see me. Odd, but okay. Five or ten minutes later she fetched me.

Peter began by telling me that he had decided to merge the two development groups into one. That made sense to me; the CD development group had been performing poorly and had made it clear they had no respect for either the company or Peter. I knew I could take over that aspect of the software and get it on track. But, Peter went on, in his experience he could not have one former manager working for another and Greg was staying. I went cold, knowing what was coming. Before I knew it Peter was talking about the severance package he had prepared for me. It was generous—double what the law required—plus he offered to keep me on salary until the end of January and told me that he had lined up an opportunity for me with the now-separate consulting branch of the company. In other words, depending on the start date in the new situation, I could be earning a double salary for while on top of the severance pay. But, I really wasn’t listening to any of that. I was going over in my mind what Greg had just pulled off with his audacious duplicity.

When Peter finished his speech he invited me to call him names. “I don’t want to call you names, Peter,” I said quietly. “I just think that you have been getting bad advice and are making a mistake. And, when you realize it two or three months from now, give me a call.” I left his office and the nervous woman in charge of personnel accompanied me to my desk and watched as I removed my personal items and then she escorted me to my car. She gave me a hug and wished me luck. When I got out onto the street I called my wife on my cell phone and said, “I think I just got fired.”

I did go to work for the new owner of the consulting branch (and had a double income for about three weeks), but I continued to mentor my group, frequently having coffee with them, and they invited me back to the various going-away parties as they each moved on. It was a bit less than the two months until I got the call from the old company asking me to help them out. I agreed to work on contract at $100 an hour on a piecemeal basis. Over the next two years or so I put in 10 hours or so a month at $100/hour; not a bad second income. By chance I ran into Peter on the street about a week after he had fired me. When he saw me he looked as though he wanted to run away, but I really had nothing against him. I asked him who else he had let go and he told me the two people who I had been going to talk to him about. “Well, I agree with you there,” I told him. The new owner then took me for a coffee about two months after my fateful meeting with Peter and told me that he had just let Peter go. As for Greg and company: once Peter was out of the way, they stole the software the company had been working on and set up their own competing business. I had been tempted to tell Peter that December evening in his office that Greg would never rest until he occupied Peter’s office, but I always had a problem with people who try to get ahead by “tattling” on others. So, I had bitten my tongue and went on to earn almost double what Peter had been paying me. Still, I would rather have continued with the team I had built producing slick, tough, and error-free code.

Saturday, 23 February 2013

The Perils of Application Development. Part 2: Building the new team.


Some six months after I had moved into application development I, essentially, had a clean slate. The two who had originally developed the product were gone: one quit; one I fired. I had no database manager and my frontend team had been reduced to one woman on maternity leave and one mid-level programmer who had promised to deliver a bug-free database loading program. I wrote bug-free code, so I thought it reasonable to expect the same from other programmers. You define the goals of a routine and make sure that those goals are achieved and nothing else. You do it by limiting the scope of your variables and procedures to make certain that there are no unexpected side effects.  Yes, it is possible to make a careless mistake, but that’s what testing is for—to catch those mistakes before the code is put into production. I never understood the policy of throwing hastily written code into production mode and expecting the paying users to do the debugging for you. Well, that might work for Microsoft, but it didn’t work for me in my little shop. The six-week bug-free special was not as bug-free as one would hope, and, as debugging continued, the six weeks turned into six months.

Meanwhile, I had a team to assemble. First, I hired a database manager. I found a woman with twenty years’ experience as a database developer and manager. In the interview she seemed well-grounded and professional—just what I wanted. I was nervous, though, about her salary expectations, thinking that with her background she’d be asking for a minimum of $75,000 and possibly pushing into the $80,000 range. I could have jumped for joy when she said firmly that she could not possibly consider anything less than $50,000. I kept a poker face however, and told her gravely that I thought we might be able to meet that.

The programming position was more difficult to fill in that there were simply so many applicants who thought that they qualified. You can’t fake data management experience, but, when it comes to writing code, anyone who put two lines of code together without crashing the system thought they were more than qualified. I received over two hundred applications. On my first pass, I set aside all those who clearly did not meet the basic qualifications in my ad. Those who said, in effect, “I know I’m not qualified, but I learn fast.” That doesn’t work when you have more than a hundred applicants who do meet the basic qualifications. I then winnowed out all the ones with glaring spelling and grammatical errors from the remainder; a programmer has to pay attention to details. If he can’t be bothered to spell-check his resume, then I don’t want him on my team. That still left about 30 that I carefully reviewed. Those I sorted into two piles: those I was definitely interested in talking to, and those I would take a second look at. I gave the ones in the first pile to the personnel manager and asked her to arrange for interviews.

Greg, who headed the CD development team, was interested as he was keeping his eye open for possible talent as well. I listened to his comments and considered them, but I kept in mind that it was my team I was building, not his. One of the people I interviewed was a mathematician from China. However, his accent was so thick that I could not understand a word he said. Besides I was more interested in finding someone with more practical than theoretical experience. Greg gave me a hard time about my rejection of that candidate, pointing out that he had a PhD in math and would be able to develop algorithms that could transform our product. Maybe he could, but how could I work with someone I could not communicate with? One candidate talked himself out of a position by stating up front that he expected to be earning $75,000 after six months with the company. Mid-level programmers, like him, were earning in the $40,000 - $50,000 range at the time. As a senior programmer and project manager I wasn’t making $75,000.

I finally narrowed my choice down to two people. One was a recent emigrant from Russia with the equivalent of a Master’s degree in engineering and had worked for the St. Petersburg water works for a couple of years. Her English was very clear and understandable and she had just completed a six month course in mid-level programming, especially in the languages I was looking for: FoxPro and C.  She presented as a composed professional. The other also was just completing a six month course similar to the one the Russian woman had followed. This one’s prior experience was working in a car dealership, so she had some familiarity with the material in our catalogues, giving her a leg up on other similarly qualified candidates. I talked the situation over with Greg who suggested that I hire both of them on an initial three-month trial basis at a much lower initial salary than someone with their experience warranted, promising a salary review at the conclusion of a successful three months. It turned out that both were winners and were kept on with a substantial salary boast at the end of the three months.

When my other programmer returned from maternity leave, my team was complete. The fact that I had one male and four women working for me caused comments in other quarters about “Ron’s harem,” but they were all exceptional programmers. I set up a routine with a regular staff meeting every Friday morning at which I supplied muffins and coffee. I would pass on any news or directions I had and then we’d do a round table, reviewing each person’s progress and discussing any problems they had encountered. I have worked in some groups where competition between employees made such meetings unworkable, but, with the group I had, it worked brilliantly. Everyone in the group was anxious to help any other member experiencing difficulties. I would add a theme to each meeting, such as bringing in the personnel director to speak about the company’s vacation policies. One day I unexpectantly discovered that three of them spoke fluent Russian; my database manager was Polish and the woman who had been on maternity leave was from Bulgaria. So, now they could bond through jokes and comments that were private to their group. They planned in their secret language to surprise me with a Russian-style cake on my birthday. (Eastern European pastries have much less sugar content than their North American counterparts; the cake was wonderful.)

One thing I did not tolerate was my lone male’s constant harping on the subject of the CD development group. Greg had expanded his group to five people. They acted as a group, always together. They arrived together in the mornings, often not until 11:00 am and left together, rarely staying past 2:00 pm. They spent their time closeted together in an office apparently playing games. Their showed distain and contempt for everyone else in the company. My approach was to let them hang themselves while my group carried themselves like professionals and delivered results. Complaining about them was not professional. I would listen patiently to my employee, but was careful to neither agree nor disagree; nor to give him any encouragement.

A problem with my approach was that Greg was being fed a constant stream of gossip about the fact that members of my team were complaining about him. He asked me to meet with him and told me he wanted such talk stopped. I assured him that it was only one disgruntled employee and that I would speak to him. It did no good; the complaining and the gossip continued and Greg held me responsible. I was not going to stoop to playing games with him. I told him I had spoken to the person involved and that was as far as my involvement was going to go and suggested that he should speak to his source about getting her facts straight about who was saying what. We left it at that. But, the divide between the two groups was apparent and when Greg’s group delivered their long-promised CD, I silently cheered when Peter, the president, furiously complained that it didn’t work and that the client was livid.

Next: The End

Friday, 22 February 2013

The Perils of Application Development. Part 1: I fire my boss


In the mid-1990’s I was working for a small company that had both a consulting wing and an application development wing. I had begun in the consulting wing when I was purchased from another company along with a contract I had been working on. The contact ended and the new company had trouble finding something of a more or less permanent nature for me, resulting in my working on a patch-work of small projects. Then the departing director of personnel suggested I might fit into the application development group as a C programmer.  Finally something I could get my teeth into after months of writing proposals and doing short-term studies.

Application development had a product that had been many years in the making. What it was was a car-part catalogue generator. What’s the point of that, you might be wondering? Well, the after-sales automotive industry is huge. Car parts wear out and break. Joe’s corner garage needs to be able to identify, order, and have delivered a vital part as quickly as possible while an anxious owner paces the showroom floor. Our application maintained a database of automotive parts that could be accessed by year, make, model, manufacturer, whatever. You need a spring-clip for the front right caliper brake on a 1999 Chevrolet Impala? A quick look in a catalogue index, a few pages turns, and there’s the list of manufacturers of that part, complete with part numbers and pertinent order information. At one time garages specializing in car repairs had banks of such catalogues for reference. Interactive applications were still pretty much in the future at the time. The Internet was still too slow and crude and CDs were expensive and applications for them relatively undeveloped. The result: we prepared catalogues that were intended for print. The fact that we could assemble a catalogue of all steering assembly parts for all GM models from 1950 to 1995 quickly and have the catalogue ready for print within minutes was our market advantage.

For years the team had limped along with one major client, but now a new one was considering coming on board. While they weighed their options and contract details were hammered out, the backend catalogue production code was handed over to me. In the middle of everything sat the database of parts and catalogue templates and definitions. There was a database manager who handled that. The front end was the interface that operators used to both enter the raw data and to define and layout catalogues as required.  After they were done my programs took over, taking their instructions to layout and prepare the catalogue for print, turning their instructions into code that a printer application, like Interleaf, could understand and populating it with the required data.  My result was a coded document ready to be sent to a PostScript-enabled printer. So, while the sales people worked on the contract, I worked my way through the existing code, creating flowcharts to enable quick reference to the logical structure of the code.

The company was, at the time, going through a major restructuring. That’s business-speak for “trouble.” Middle managers were leaving both voluntarily and less so. Verging on bankruptcy, it was dependant on the new catalogue production contract to keep afloat. The company was purchased and split in half; the consulting wing becoming a new company with management promoted from within, the new owner taking a hands-on approach, and the application development wing staying with the now-former owner, Peter, who assumed the role of company president. Where there had been half a dozen layers of management between me and Peter, there were now two layers: a project manager and the senior developer. The senior developer, Charles, had designed and written the backend code that I was now the owner of. Charles’ friend, Steve, had designed the database and was now appointed project manager. There were three junior programmers assigned to the frontend code. Charles’ wife, Sue, was in charge of Quality Assurance. There was also a network manager and a small team of operators whose job it was to input the data and the parameters required for each catalogue.

Just as the contract was approved a new project manager appeared on the scene. I had worked for George in a previous company, though I had had little contact with him. He was a loudly gregarious fellow. The project I worked with him on before had been a disastrous failure, costing millions that were flushed down the toilet despite George’s repeated proclamations of, “Don’t worry; be happy!” To celebrate the winning of the new contract that was going to put the company back in the black, George threw a dinner party at a local restaurant for the entire development team. We arrived to find a bottle of wine on the table before each couple. George ordered pre-dinner drinks, and kept up a steady flow of new bottles of wine as they were emptied; there were after dinner drinks, all with great fanfare. Two days later George disappeared from the company. Apparently spending a couple of thousand dollars on a dinner was not within a near bankrupt company’s operations and policy guidelines.

So, Charles took over as project manager and we got down to work. I enjoyed it and established a good working relationship with the rest of the team, especially with Charles. He was a patient and enthusiastic teacher; however, there was a fair bit of tension between him and Steve who rarely showed up for work. When he did show up, they bickered about the directions to take to address different problems as they arose. When the network manager walked, Charles hired an old friend of his to take over network management. However, she was fired (I never knew why) after about a month. Charles was very bitter about that. Charles then hired someone to work on the development of a CD-based application of the product. Greg, an apparently charming fellow, branched out on his own, hiring two friends to help with the development of the CD. It soon became clear that we were two separate groups; one preparing a paper-oriented product, then other a CD. Greg had no use for Steve, thinking him as a promoter of obsolete methodologies, and spoke disparagingly of Charles and his approach behind his back. For some reason Greg seemed to like me and once confided he felt as if he were a spider weaving an elaborate web within the company.

Though I loved my day-to-day work—solving application problems and seeing my code work evolve—I was uneasy about a couple of things. One was the constant bickering between the two managers in charge of the direction we were going: Charles and Steve. Another was the disconcerting discovery that the database itself was filled with buggy and unpredictable code. Time after time I’d run a new routine that aborted on a fatal error only to discover, on analysis, that the problem was not with my code, but with data that was not in the format that the specifications said it was. Steve didn’t seem to care that it was his haphazard work that was threatening the integrity of the entire project. He had apparently once worked with a well-known database designer—which he would remind us of whenever problems surfaced due to his carelessness. Then there was the constant stream of snide negative remarks about our work flowing from Greg and his group.

A case in point: a few months into the project, the clients wanted a demonstration of our work to date. A half dozen of them arrived from Detroit to be squired around Ottawa and finally introduced to a walk-through of our product. Charles and his wife spent days preparing for the demonstration, carefully marking out a path that they could follow to avoid the known bugs and pitfalls. The clients left satisfied, never knowing that they had just been subjected to a dog and pony show that worked only because of sleight-of-hand and mirrors.

And then Charles, for reasons that were never clear to me, quit and our “paper” group was left leaderless. Greg encouraged me to step up and take over. Peter seemed to have no difficulty with my assumption of a management role and, in fact, praised me in a company meeting for stepping forward when someone was needed to take the helm. I worked with the frontend folks to tailor the product to meet the requirements of the new client while I made the appropriate adjustments in the backend code. We were starting to make progress after a few months of what had been flailing while Charles and Steve fought their battles. The frontend programmer I had most faith in left on maternity leave and then our most junior member left to take an opportunity in the USA. I was left with one, apparently competent but highly neurotic, programmer who offered me a deal: if I gave permission he’d work at home for six weeks and return with a new database loading engine that would eliminate all the errors that Steve had let creep into the works. I agreed.

So now my problem was that whatever adjustments the current database needed I was dependant on Steve—who was never at work. I spoke with Greg about the situation and he suggested the path I subsequently followed: I communicated with Steve through email. I would lay out the requirements for what I needed and ask him when he thought he could deliver. He’d give me a date that, once reached, I would ask him for a progress report. He would then claim he did not know what I was talking about. I’d lay it out again and ask for a new delivery date. And so it went for a few weeks until I had a solid paper trail of his accepting then denying work assignments. I approached the personnel director who opened up Steve’s file. I was surprised to find out that a year before, just before sales had discovered the possibility of a new client, he had been put on a month’s probation for similar reasons. As the new situation developed he had been offered a bribe in the form of project management on the condition that he clean up his act. It had not been working out, which is why George had been hired briefly before his sudden departure. Personnel agreed with me that it was now time for Steve to go. We worked out the approach we would take, asked Steve to come to a meeting in the personnel director’s office, and I fired him. He had gone from being my boss to my escorting him off the premises in less than a year.

Next: Building a new team

Thursday, 14 February 2013

Arthritis, The Honeymooners, and witchcraft


The other night I had one of those nights. I woke about 2:30 my hands on fire from arthritis. I searched the house for some industrial strength pain killers and settled in front of the TV set sipping a glass of fruit juice waiting for the pain relief to take hold. Cruising, looking for something halfway interesting, I discovered an episode of The Honeymooners. I expect that no one under the age of 50 will know what I am referring to. The Honeymooners was the 1950’s televised. It starred Jackie Gleason a well-known variety show host and actor playing a New York City bus driver, Ralph Kramden. He and his wife, Alice, played by Audrey Meadows, lived in a one-bedroom tenement apartment. Ralph and Alice’s best friends, Ed and Trixie Norton, played by Art Carney and Joyce Randolph, lived in the same building. Ed was a New York City sewer inspector.

The set was almost always the Kramden’s multipurpose kitchen-living room-dining room. The sink was an open fixture, much like a laundry tub; they had no refrigerator—they made do with an ice box (as did my family until I was about 5 years old); the walls were drab; in order to communicate with the Norton’s they opened the window and shouted (they did not have a telephone). In other words, the set reflected the life style of working class city dwellers just following the end of the Second World War. The Kramden’s did not own a television set, though the Norton’s did. (We got our first set when I was about 5.) News was often delivered by telegram; neither woman worked outside the home (ditto for the women in our neighbourhood).
Impressively, as almost all television shows in the 1950’s, the series was broadcast live in front of an audience. One camera in a fixed position framed the entire set. The actors entered, said their lines, and exited. They could not afford a flub, second take, or a pause while they regained their composure. What they did was what the audience got.

But, what about the stories? Mostly, they were quaint compared to today’s sophisticated productions. Many of the actors were from vaudeville where staged pieces were set up in order to deliver a one-line zinger.  Slapstick was a frequent tool. Loud and brash pretty well covers it. And, Jackie Gleason, as Ralph Kramden, delivered in full vaudevillian style. His character was loud, given to exaggerated gestures, filled with maniacal energy. The other characters were his foils. His long-suffering wife, Alice, was a paragon of patience and forbearance. She waited out his rants and grandiose get-rich-quick schemes to deliver a devastating riposte to which he could reply only with threats. “To the moon, Alice! Bam! Zoom! To the moon!” was a frequent threat, sometimes complete with a wound-up fist and delivery. Alice never blinked, knowing he would never actually deliver on the promise.

The episode I watched involved the news that Alice’s mother was arriving for a visit. Ralph blustered, threatened, and finally stomped off in a childish tantrum to spend the night with Ed and Trixie. In the end it turns out to be Ralph’s mother who is visiting and, of course, he completely turns around, becoming a sweetly loving little boy in vivid contrast to the spoiled ranting bully when he thought it was his mother-in-law who was on the way.

The threat of domestic violence was, in the 1950’s, a comedic device. It was never acted out on The Honeymooners, but, it was, from time to time, in another popular 1950’s TV series: I Love Lucy. Lucille Ball played an immature, manipulative, and scheming girl-woman, Lucy Ricardo, married to Cuban band leader, Ricky Ricardo, played by Lucille’s real-life husband and Cuban band leader, Desi Arnez. Ricky could be petulant and demanding, but, there was no doubt who was the boss in their household. Stories often involved Lucy trying to get around Ricky’s possessive condescending paternalism, frequently ending with Lucy being hoist by her own petard. I have a clear memory of one episode ending with Ricky putting Lucy across his knees and spanking her, as one would a child in those days, while she kicked and wailed like a two-year-old. I also recall not being shocked; in my memory that happened with enough frequency that it was not an isolated incident.

I can think back to when I was a kid when expressions like “female driver” were a sneering putdown. It was a given that women were weak, could not handle machinery, could not hunt or fish, or play hockey; nor could they handle business. My female classmates in elementary school could look forward to being airline stewardesses, office secretaries, nurses, or school teachers, but only until they managed to snare a husband. Girls took home economics; boys took woodworking shop. Our elementary school had separate entrances for boys and girls and one wouldn’t even dream of entering the building by the door designated for the opposite sex; the shame would have made life unlivable.

It is intriguing, looking back at history, to discern where this idea that women are weak vessels in need of male guidance and protection developed. Certainly it did not exist in peasant society where often women took a dominate role in home and village life. Where we find male dominance is in the upper classes, both secular and religious. In Europe the dominant philosophical underpinnings of the ruling classes were derived from Rome and the remnants of its authority. But, even there, in ancient Rome women played a powerful role, reinforced by the cult of Mithras. I hate to pin things on Christianity—it’s just too easy and too glib, and generalizations often miss very important details, contributing factors, and exceptions—but, Christianity sprang from the same roots as two other very male-centric religions that formed in the mid-East (Judaism and Islam). The story of the spread of Christianity throughout Europe often involved the incorporation or subjection of the already existing “pagan” religions which tended to be female-dominated. Some have characterized the persecution of witchcraft as a misogynist campaign, but I sometimes suspect that our image of witches being burned at the stake has been strongly influenced by Hollywood and is glossing over the fact that many “witches” (“heretics” is probably a more accurate term) were male and that public burning was only one of many different ways that enemies of the church were disposed of. At that, the picture of a bonfire being made around the feet of the victim is misleading. Often the fire was arranged so that the victim actually suffocated long before any flames reached them, if at all. And, more so, many victims were strangled before the fire was lit. All this is an aside, as history is so much more complicated and interesting than the simple stories that the media have fed us.

To prevent this from becoming the length of a book, or treatise, I’m going to jump ahead and say that what we were seeing on television in the 1950’s was the final stages of the waning power of the male-dominated church in Western social mores. It was becoming a bad joke, full of bluster, threats, childish tantrums, and a barely suppressed violence. Male figures in television of the 1960’s were often weak and incompetent; the women were the bedrock of family and social life. Archie Bunker, in the early 70’s, could only mock and hold parodies of political positions, but had no real power of his own. Even the so-called liberated son-in-law Mike Stivik, was, when pushed, as chauvinistic as Archie in his relationship with his wife. The difference is that Mike’s wife, Gloria, finally freed herself from the marriage and set out on a voyage of self-discovery. Archie’s wife, Edith, on the other hand, had no such opportunity, except for brief tentative skirmishes, dying before discovering that she was more than simply the butt of her husband’s jokes and scorn.

In short, you can learn a lot from watching television at 3:00 am.