Free Shooting Introduction

In the effort to promote responsible gun ownership and rights awareness, I make the following open offer to any resident or visitor in the Metro DC area:

If you have never shot a gun and would like to try, I am willing to take you shooting free of charge. I will provide the firearms, ammunition, eye/ear protection and I will cover your range fees. I guarantee if you are on the fence about gun ownership and usage, you will not be at the end of the session. You will have fun and learn a little in the process.

I do my introductions in Northern Virginia. Evenings or on the weekends at your convenience with minimal prior arrangements. Contact me for details and to schedule your free introduction!

If you are in the Chesapeake/Hampton Roads area, Brian, an NRA instructor in Virginia Beach, is willing to do the same if you're in the area on a Sunday afternoon or Monday evening. Drop him a note to make the arrangements.

5 people have learned to shoot! Would you like to be next?

Monday, March 30, 2009

"Make It Faster. See You in a Week."

Those title words are words I owe my career to.

I mentioned yesterday that I learned more in a semester of high school computer science that I did in college or professional development put together. This is not an exaggeration. The foundation that set me on the professional path I wound up on I owe to one David Scott, mathematics and computer science teacher at Pauline Johnson CVS in my hometown.

In Canada when I was growing up, we took five years of high school, not four like here. That has since changed but back then, we had a Grade 13. This final year was used to get the credits needed to get into university by high school students. Note I said university. College is not the same thing. So many kids would do their university entrance courses over Grade 12 and 13 so as to not overburden themselves.

In my fifth year, I decided to take Computer Science. This course was only offered once per year and was limited in enrollment. The prerequisites were steep. You had to have taken three years of computer courses leading up to it. Introduction to Computers and basic and advanced computer programming courses. Plus, the teacher for the advanced programming course had to agree that you'd be a good student for the course. In that area, I had no difficulties.

Besides that, the course itself was legendary. Prior year students glowed about it. You had to take it if you were serious about computers. They wouldn't say why though other than you got to see and do really neat stuff. That should have been my first warning but I took their advice and signed up.

Back then, they used a networked version of Unix called QNX (still made today) on custom Unisys hardware. We programmed in interpreted Pascal. This was my first introduction to the Unix command line, I might add.

We entered the course and the thirty odd of us spent the first two weeks getting back into programming mode with simple exercises. Since it had been nearly a year since advanced programming, this was necessary. This was simply to warm us up. Then the course really got started with us feeling pretty cocky since we were acing the quizzes we had been given.

Such ignorance is the stock in trade of 17 and 18 year olds.

Mr. Scott stood at the front of the room and announced our first assignment. We would work in teams of four. It was simple pass or fail, another unique aspect of this course. You would succeed or fail as a team and it was up to you to divide and manage the work. Then he laid the ground rules for this assignment and all that would follow.

We were free to ask him any questions about the assignment. We could request clarification, details and/or bounce ideas for solutions off him. But at no time would he provide anything but hints and he would not say if our ideas were correct or not. That was up to us to discover on our own. He would also provide no sample code. It was up to us to use the knowledge of our previous coursework to come up with solutions. We were free to implement the solutions any way we wished as long as it used Pascal and was documented in the manual that was available in the class (and only available in the class).

With the rules explained, I embarked on what was the toughest semester of my life. Ever.

Our first assignment was simple. He handed out a list of 30 names and addresses and told us where the file was on the network so we could copy it. He then stated our assignment was to sort this list of names alphabetically, last name first from A-Z. We nodded expectantly.

Then he said, "See you in a week." followed by silence.

Imagine a classroom of high school students sitting there waiting for more and nothing more coming. Someone piped up asking what he meant. He repeated his instructions and referred to the rules. What were we waiting for?

We had no idea how to proceed. Any questions on how to do this were vague reference to remember how to read files and do comparisons. It was up to us to apply them. Pass or fail was simple. Run the program from our terminal in front of him outputing the sorted list to a file or screen. 100 or 0. There was no middle ground.

I can honestly say the first two days in our groups were spent doing the 1990 equivalent of "WTF do we do now?!?". Then we picked at it a piece at a time. Opening the file, reading it, loading it into an array. Then looping over the array, figuring out how to do string comparisons. Then the brilliant idea on swapping data between positions and writing the new list back out. Bloody brilliant and elegant.

It was the hardest week of my scholastic career. But we persevered and at long last, believing in our brillance.

We had invented the Bubble Sort.

Understand, we had no knowledge of algorithms. We did by trial-and-error and much brain sweat and learned what is commonly available in any basic computer science textbook. But we didn't know that then, Mr. Scott wasn't telling us and not that it would have helped because such texts were nowhere to be found in our school library. Trust me, I knew the science and computer section inside and out. Besides, we looked.

Evaluation day came and with great relief and pride, we demonstrated our incredible achievement. We glowed with pride as we described our slick technique of copying the array contents internally. He simply smiled and gave us a pass for our successful run. In the end, everyone passed and all breathed a sigh of relief.

We then spent a day analyzing our solutions. Turns out, all of us had come up with the same thing. I guess we weren't so brilliant after all. It was also the first time I learned the term "bubble sort" and we went through how it worked on the chalkboard as well as its history in computing.

Still, we were immensely proud of ourselves. From nothing we had managed to solve this difficult problem. We deserved some credit.

Then Mr. Scott turned to the class and gave us the look we would soon learn to fear. Then he uttered those deadly words, "Make it faster. See you in a week.".

Jaws hung open, mine included.

Make it faster? How?!? The rules still applied and any queries for specifics were vaguely rebuffed. We were stuck.

That next week made the first look like a cakewalk.

Evaluation day came again. We had to demonstrate the speed increase empirically. We did. We were stunningly proud of our achievement. We had passed two for two.

We had invented the Improved Bubble Sort.

Another day was spent analyzing changes we had made to the sort to reduce the number of comparisons and keep the "bubbling up" of elements (where the sort gets its name from) to a minimum. This time, a couple of teams failed. They hadn't grasped the nature of what they were dealing with.

Then he stood there again at the end of it and did it again, "Change the sort technique. See you in a week.".

I thought torture wasn't permitted in high school but I'd argue for some that they were in the middle of some form of new torture at the hands of this man. There was near pandemonium at that point.

It was at this time I learned why the course enrollment was limited and why it was only offered once per year. People starting dropping it like flies with the realization that if they continued, they would fail and blow their averages. They actually expected half the students who took it to drop the course. So it wasn't surprising that the work groups began to shrink and reshuffle. You had a month when I was in high school to drop a course without penalty. After that, you got an "F" on your report card even if you did drop it voluntarily later. The mad scramble was on since such a situation could ruin your mid-term grades and prevent you from getting into university. Enrollment was limited because only the hardcore, the intelligent and/or the simply masochistic would continue to volunteer for what was the high school equivalent of Chinese water torture and its attendant risks.

In the end, our third assignment was completed successfully.

We had invented the Shell Sort.

On it went. For nearly two months, it was one period of pain and discovery after another. Through much mental anguish and sheer will, I was learning the fundamentals of computer algorithms. By having to play computer, I was becoming a computer programmer. I heard the words "See you in a week." in my nightmares.

At the end of those two months, only twelve of us remained. Including a fellow student I would wind up taking computer programming with in college and commute with for several years. The others dropped the course or were failing out. To this day, it remains but a blur. Snapshots of memory and frantic activity. Only then at the end of that first section of the course did Mr. Scott's steady facade begin to crumble and he explained why he had done what he had done. He explained that a programming language was merely a tool. It wasn't the purpose of the course to teach us to be proficient with it. Instead, he was teaching us to think.

I have never, ever forgotten those words. Because that is exactly what he had done. Sure, the algorithms were simple but they weren't the point. He was teaching us to think about how to solve problems. How to approach them and implement solutions. Once we knew the solution, we could create a working solution using any tool available.

We were being taught how to think.

We all have teachers were remember with fondness or thank later for doing something that helped us learn. David Scott taught me how to learn. He taught me how to think about how solve problems. The programming aspects were secondary. I knew those cold.

But no book could have taught me what he taught me in that semester of Computer Science. It was profound. Even nearly twenty years later, I have told this story to fellow junior programmers and urged them to learn how to think. So many are focused on the language that they've never learned the skills of being a successful computer programmer. It has everything to do with how you approach problems. The language is merely a tool.

That is a lesson that Mr. Scott taught me and I have never forgotten.

My final project for the semester was writing an e-mail system. It even worked. But by then it was easy. I had survived the Crucible and carried its lessons with me into college.

Before that happened, we led our high school to win the regional programming contest and place in the top half at the provincial finals. We were the first school in the history of our city to ever do that. I was the team captain and Mr. Scott was our tutor for that.

The plaque for that achievement still hangs outside the math office at my old high school to this day I believe.

After that, college wasn't even challenging. The only things of value I learned was SQL, systems analysis and some mainframe programming. Only took fifteen years for that last bit of knowledge to be useful.

Everthing else on how I approach and solve problems I owe to one Mr. David Scott. I went back and visited him a few years after I graduated and thanked him in person for teaching me how to think. As great teachers often do, he thought nothing of it and felt we were being overly kind. He didn't feel he had done anything special.

I disagree.

If you're a student at Pauline Johnson CVS and Mr. Scott is still teaching math there, shake his hand for me. Tell him the team captain from the computer programming challenge in the early 1990s that was first to go to the provincial finals thanks him. Check the plaque, he'll be able to figure out who it is. Ask him about teaching the Bubble Sort and see if it brings back memories of QNX and Icon computers. Don't worry if you don't know what these are, they were before your time. But he'll know.

Then thank him for me. He deserves it for a job well done.

2 comments:

Bob S. said...

I had the same experience in high school with a gentleman named Leon Neal.

Mr. Neal (never anything else) was the one who taught us how to think through problems, how to solve problems, how to think.

Decades later, I still use those lessons and thanked him repeatedly.

Those few students who are blessed with teachers like Mr. Scott and Mr. Neal remember them fondly. We may not have liked them at the time but quickly came to appreciate them.

It amazes me that so few teachers are like such gems.

Thanks for the great story, it brought back fond memories.

Timothy A. said...

I wish I had teachers like that when I was in school. I knew there was something more than regergitating text books and lectures.