Thursday, September 19, 2013

On Learning

Summer term is over.  What was supposed to be a peaceful break between terms has is also very nearly over.  Of course I'm using the term "break" here pretty loosely here to mean working only 40 hours/week.   Oh well, I will take what I can get. 

The class I took this summer (Advanced Computer Architecture) was actually quite easy, by nature of its format: it consisted of reading technical articles, then talking about them.  Pretty hard to mess that up.  However, It was also made to be far less interesting than it cold have been.  Had the lectures been forums to discuss the materials we had just read, it could have been very interesting.  Instead, the classes were little more than the professor summarizing what we had read the day before and going into no greater detail than the papers already had.  This meant that many students (myself included, at times) tuned out during a lot of the lectures, and attendance as a result was abysmal.  This was really quite a shame because the material itself was fascinating, but the repetition inherent in the lectures meant that I was bored to the point of apathy by many of the 2.5 hour long monotonic recitation sessions.

With that out of the way, and with the beginning of the end of school squarely in my sights, it's reflection time.  Specifically, I have been thinking a lot about learning and education.  My relationship with learning has changed in the past three years, and I am still coming to terms with how it is now different.

There is no way not to sound arrogant here but isn't my goal. With that said, prior to going into engineering, school was never difficult for me.  Even going to a "good" school, the quantity of material covered was so small and the pace was so slow that learning it all was effortless.   In high school, I was not challenged by any of my classes.  Just showing up and paying attention was enough to graduate near the top of my class, and I did not study at home. The teachers covered the same topics so many times by the point we were tested on them that studying was not necessary.

My bachelors degree was marginally more challenging than high school, yet still easy enough for me to graduate with honors without trying too hard.  There main difference between high school and college was just that there was more material to cover in college; the skills to be successful are identical to those in high school: reading comprehension and the ability to write an essay.   In other words, skills I learned middle school language arts.  In my experience, if you can read a few articles/webpages/etc, pull out a some key sentences, and write a basic 5-paragraph intro-point1-point2-point3-summary persuasive paper, you can get through basically any humanities class.  Note that essay writing entails being familiar with English grammar, something that seems more rare every passing year... but that's another story.

The main point here is that college was only harder than high school for me because of quantity, not because the material was more difficult to comprehend:  It's still the same formula: extract, synthesize, express.  The subject matter changed, as did the quantity of work, but the process I followed to be successful did not. 

Everything changed in engineering school.  It's hard for me to say if this was because I was engineering classes specifically, or simply because I was not in humanities classes, but the formula I had trusted me entire academic life didn't work anymore.  I found myself awkwardly attempting to "study" for the first time in my life, and it didn't just take one pass over the material for me to understand it, sometimes it felt like hundreds.  I couldn't manage my time at all because I never knew when I would hit the next roadblock, and getting past these roadblocks took anywhere between 2 minutes and 23 hours. Everything was new to me.  I was walking into tests with a firm grasp on only a fraction of the material for the first time in my life, and it was terrifying.  Each time I completed a class, it felt like it would be the last time I could pull it off-- that now I was really in the deep end. 

It took me years to figure out what was going on-- why engineering school was so hard for me-- but now I think I understand.  I mentioned earlier that prior to engineering, the method for success never changed, only the subject matter did.  However in engineering, the main thing you should take away is new methods, and thus the skill that makes you successful is the ability to learn new methods.  Programming, as an example, is a process/skill/method that follows general guidelines much like essay writing, and just as a skilled essayist can write on a variety of topics, a programmer can create programs using a variety of languages, structures, and methodologies.  Debugging is another example: someone skilled at debugging in general can apply the skills to digital electronics, analog circuits, software, etc.  Maybe it's just me, but learning "how" is just a lot more difficult than learning "what".  

All my life people have been telling me that education is important, and all my life I had enjoyed learning (or doing what I thought was learning) because it was easy and people admired me for being successful at it.  But I would now argue that up to only recently, I was only really amassing information, I wasn't really learning.  I was gathering information, then doing things I already knew how to do with it: writing papers, giving speeches, taking tests.  I was getting book-smart. I was gaining knowledge, sure, but I wasn't learning how to do anything I didn't already know how to do.  

Now that I recognize what was happening, and I am getting more comfortable with learning how to learn new methods, skills, and processes, I don't want to stop.  I jump at the opportunity to pick up new skills not just because it will make me a more competitive employee, but because I actually enjoy the process of figuring out how to do something truly new to me.  I am picking my new projects and endeavors intentionally to include the necessity to do things I don't know how to, specifically so that I can learn something new.

Unfortunately, this is happening with only one term of school left.  As terrifying as going through engineering school has been, I am equally terrified now for it to end because I know that my rate of learning is going to fall drastically or stop completely once I am out of school and working 9-5 with a family at home.  I know that going forward, I will likely never again have the amount of time to dedicate to learning as I have in the past three years.  There are seminars and talks happening all over town.  There are resources like Coursera that are posting new content daily.  There are so many opportunities to learn now, and I am trying to come to terms with the fact that not only can I not learn it all, but with the amount I will have on my plate going forward, I may be lucky to learn any of it.  

O cruel fate, to turn fear into ambition, and bestow me the ability to learn but not the time required to do so.

Sunday, August 4, 2013

Spring Term Update

In an ongoing effort to bring everything back up to date, here’s an abridged summary of Spring 2013.

I knew it would be a crazy term far before it even began.  I am pretty sure that a first baby in the middle of ANY term would make things interesting.  But don’t think for a moment that things were only hectic after Amelia arrived.  I now know that the obstacle course that ends in parenthood (or perhaps begins with it) is a maze of constant decisions, multiple doctor appointments each week, absurd amounts of planning (for something which is largely unpredictable), more decisions, emotions, a few more decisions, a hearty amount of unfounded fears, and did I mention that there are decisions to be made every waking minute?  If it sounds like this is still a sore point it is because hands down, having to make decisions (especially between two unfavorable options, as is so often the case) is my least favorite aspect of adulthood.

Academically, I knew what I was getting myself into, which was both good and bad.  The good news was that there would be few surprises: I knew both of my professors and I knew that both classes would be useful, interesting, and fun.  The bad news was that the last term that I took courses from both Faust and Kravitz simultaneously the workload was incredibly heavy.

Amelia was born on April 18th, which I think was during week 3.  School hadn’t really reached full speed at that point, so most of what I remember from that period was a flurry of pre-delivery preparations (read: decisions) as well as an odd feeling of impending dadhood.  Because Amelia was breach, there was no choice but to perform a C-section, so in one of the strangest phone calls of our lives, Beth and I “scheduled” a baby for Thursday, April 18th.  I can’t tell the entire delivery story here, but suffice it to say the entire experience was completely unreal.  After hours of waiting pre-surgery, Amelia was out within about 5 or 10 minutes. The next 5(?) days in the hospital were also surreal, which was very likely due to the dizzying lack of restful sleep that comes with adjusting to a wake-up-every-two-hours schedule combined with the shock of a completely life-altering change.

Then I had to go back to school.  The way everything worked out, I miraculously missed almost no content in my classes, and though my professors were more than willing to offer accommodations, I don’t think I ended up needing any.

Before I knew it, finals were upon me.  My project for SystemVerilog was among the most insane projects I’ve ever done, and I am still shocked that we even pulled it off.  There were two groups of three and we decided to work together on one massive final project—we were going to synthesize a working Nintendo GameBoy, all inside an FPGA.  It was a large project, but the fact that someone had already written a working adaptation in Verilog (called FPGABoy), our task focused more around translation and verification.  My group was responsible for primarily the CPU of the system.  After weeks of struggling to even get the FPGABoy project to even open and run, we started to have doubts about the project.  The other group had run into similar issues, and by the time my group was really in the thick of it, they had dropped the idea of working with the FPGABoy codebase entirely.

We struggled and struggled, and after weeks of work we had the project somewhat running, and almost able to get the GameBoy to run in simulation—and that was after many extremely serious bugs were found and had been fixed.  We so doubted the functionality of FPGABoy after seeing the kind of errors that were present in the code that we did some research, and found (on the FPGABoy page) a message stating that the project was non-functional (which was printed in bold text).  A pretty major oversight on our part, and at that point we quickly decided to abandon the idea of getting the system working and focus only on the CPU itself, which was still a very large task.

Though FPGABoy didn’t work, the CPU used in it had been formally verified, and had actually been manufactured using the code we had access to, so we knew it had to work.  However, the project was tens of thousands of lines of code, and to make matters worse, it had been machine-translated from VHDL to Verilog—so while it was functionally identical, it was—simply put—not human readable.  Nearly every operation was on a single bit, and the code was just generally a complete clusterfuck.  Despite (or perhaps because of) the weeks of work we had poured into understanding this project, we knew that regardless of how long we continued to work on it, we could not finish it.

The turning point came less than 24 hours before the project was due, when the three of us—broken and beaten—looked at each other and decided we needed a change of plans. We had nothing to show for the 100+ hours we had dumped into getting the project working.   We started a new final project completely from scratch and didn’t look back.  We worked furiously through most of the night, hopped up on soda and panic, stopping only to eat shitty McDonalds food so we had sustenance to function.  It’s all still a blur.  The next day, we somehow had a project on our hands that rivaled the quality of most others in the class, yet was completed in literally one huge hack session that started less than a day prior.

I still don’t know how it all happened, but somehow I survived.  I built a (sort of) functional Skittles-sorting machine for my other class, but I actually still have plans to work on it, so I will have to wait until later to post anything about that.