I do not own a desktop computer and have not for nearly seven years. Before that, my primary computer was a Dell desktop that my parents bought me as a college graduation present that I augmented with a small notebook computer (at a time when such small laptops were just a novelty). 

Even without a desktop computer, my life is full of peripheral devices. Laptops these days are so powerful that most can easily accommodate an additional monitor (if not two), and working in this way usually requires a detached keyboard and mouse. 

Today, my mouse’s batteries died. Unlike my keyboard, which is solar powered, my mouse runs on rechargeable batteries, and I often forget to recharge them. When I do, I’m left with just my laptop’s trackpad and a sense of frustration. 

Perhaps because I’m in a more forgiving mood today, or I’ve had the proper amount of coffee, my knee-jerk reaction was less frustration and more general amazement at the pace of technology. The mouse is a perfect example. 

In 1964, Douglas Engelbart (an Oregon State University graduate!), developed the first public prototype of a mouse. Pictured below, the mouse was a crude thing, just a wooden box with two wheels to manage direction in a linear plane. While other mouse-like devices had been created, they were mostly military inventions and so out of the public light. Engelbart’s device was the first publicly patented mouse, and was decades ahead of its time.

Engelbart holding the first mouse

In fact, it was so far ahead of its time that Mr. Engelbart never saw a dime for his creation. The patent expired before such peripherals became widely used. This was before the common operating system patterns that we see today (applications with windows and a cursor to manage a graphical interface); illustrating the vision of our early computer pioneers. 

Amazingly, while the technology behind the mouse has advanced (mine uses an infrared laser that a sensor uses to track motion as opposed to a wheel or ball), the basic functionality remains. Instead of moving to different patterns of touch devices or even virtual reality, the vast majority of personal computer users find themselves shackled to a mouse to move a cursor through virtual space. 

This notion is one that I’ve encountered countless times in the realm of technology. Yes, most American citizens now have the computational equivalent of super-computers in our pockets. Yes, those devices connect us to more people than at any other point in history. Yet what do we do with these devices? By and large, we use them to communicate and find information.

Is this process better than 25 years ago? Absolutely. Is the paradigm somehow vastly different? No – the problems remain the same, as do the solutions. It’s the medium that we use to get to those solutions that has become different. 

This is not to say that such advances are trivial or not worth our adoration. I love my mouse. Much like I love a bridge can improve my commute from 30 minutes to 20. These are significant and worthwhile changes. But it’s a good reminder that while things change (and change at a rapid pace), they often remain the same. 

This summer, I’ll wrap up a computer science degree from Oregon State University. The experience has been rewarding, difficult, and incredibly eye-opening.

After the first quarter at OSU, I was not sure that the program was for me. While learning C++ was a nice wrinkle, the “Introduction to Programming” courses that served as my welcome were underwhelming. In hindsight, this perspective makes sense as someone that was coming in with years of experience managing and delivering web projects for large clients with large expectations. Learning the structure of for loops, classes, and a brief dalliance into recursion was not really what I had signed up for. However, after the fourth quarter I was trying to plot a path to continue my education far beyond the 15 courses that were required to get another bachelor’s.

It wasn’t the fact that OSU continued to underwhelm that drove me to look beyond the program – quite the opposite. OSU provided a window into a world that I didn’t know existed. It’s fair to say that two years ago I did not know what a computer science degree entailed or what it prepared you for. Two years later and I can’t imagine a world where I don’t continue to explore the field.

Unfortunately, my options in Seattle are oddly limited as someone that is not particularly interested in a Ph.D. While the University of Washington has a fantastic graduate program, they lack a terminal Master’s degree. Their Professional Master’s Program is intriguing, but lacks the sort of depth I’m interested in and is prohibitively expensive at just under $40,000. The University of Seattle also has some interesting options, but again the cost is shocking. This time clocking in at just over $40,000. Other options in Seattle are more certificate based, and after watching the bootcamp bubble over the last several years these were not at all attractive. 

Ultimately, my quandary was and is somewhat related to the unusual way in which my B.S. in CS was delivered. The OSU program is focused on delivering the core computer science curriculum, with nearly no electives and therefore little opportunity to dive more deeply into a specific area of study. It’s rather rare to see someone with a B.S. in CS and an M.S. in CS in part because a terminal Master’s degree is typically the realm of people coming from a scientific or engineering background without a computer science focus. These individuals use an M.S. in CS to fill gaps, rather than augment existing knowledge. In my case, I’m looking for both. 

After exploring my options in Seattle, it was clear that my best path was online. In 2014, Georgia Tech (Georgia Institute of Technology), began delivering a relatively unique program. Comprised of 30 classes (10 of which are needed to graduate) the program provides a path to a Georgia Tech M.S. in CS at $7,000. The courses themselves vary greatly, but the program excels in its machine learning and artificial intelligence offerings, which is exactly what I was interested in studying.

There are other online M.S. programs from reputable schools such as Stanford, UT Austin, University of Illinois at Urbana-Champaign. Some of these programs fall prey to the same issues that brick and mortar programs face – specifically exorbitant prices that feel like money grabs from students with corporate backing. Others, like UT Austin, are so new that it’s hard to jump on the bandwagon. In the end, Georgia Tech (which is in the top ten graduate programs for computer science) hit so many of the sweet spots for me personally that it was hard not to go with what has quickly become the gold standard for an online M.S. in CS.

After hemming and hawing for several months, I applied to Georgia Tech and anxiously waited. Two months later, I got my acceptance letter the day before my 32nd birthday. And now….. it’s out of the frying pan and into the fire.

Before I dive in, I should note that this post was written as LexBlog hits its fifteenth birthday. It’s been my pleasure to work in the Seattle offices at LexBlog for over 6 years. So much of that pleasure stems from truly enjoying the people that work here and overcoming the challenges we face on a regular basis. Here’s to another fifteen for a great company of great people. 

There’s a line in Fight Club that I love that comes to mind when thinking about my favorite memories at LexBlog:

You met me at a very strange time in my life.


Continue Reading Overcoming the Trough of Sorrow

I rarely look at C while at the office. In many ways, it’s a language of a bygone era, especially when you’re talking about web application development. Sure, we take advantage of C every day, but write in it? Never. 

However, I’ve become fairly proficient in it these past two years and have grown to appreciate the language for what it is: Blazing fast and fine-tuned for several specific use-cases. Unlike JavaScript (my language of choice while at work), C does not come with dozens of associated frameworks that come and go on a moment’s notice. It also doesn’t split its time between the hard logic of an application and managing the user interface. In many ways, C runs the world of computers around us without us even knowing.

The story behind C is the most interesting part of the language. Written in the late 60’s and launched into production around 1972/1973, C was born from necessity. In the late 60’s, Dennis Ritchie and Ken Thompson decided to write an operating system for the PDP-11, Unix (pictured above – it’s the size of a huge refrigerator and it’s processing power isn’t even close to the power of my phone).

Continue Reading Give Me A Language That Doesn’t Change – A Brief History of C

I have a great fondness for journalism. The industry, the people, the organizations — it’s all fascinating and vitally important. My political and philosophical leanings lead me to believe that the tradition of having an independent and empowered Fourth Estate is key to a functioning democracy.  Even in the absence of my politics and philosophies, reading the news is fun. I enjoy reading about the experiences of people I’ve never met going to places I’ve never been. How odd.

So to hear that the profession is dying, shrinking, or changing for the worse, and to listen to the narrative get increasingly louder is cause for some concern.

Continue Reading The Changing Winds of Journalism

I’m over halfway through Oregon State University’s post-bacc computer science program. It’s a (mildly) grueling gauntlet of 15 courses, made more grueling by the fact that I’ve been working full-time and taking two-courses a quarter (with an exception made for this past summer when only one course was on the docket to give me some time to get married 🙂 ). To-date, I’ve taken, or am currently taking, the following courses (in no particular order):

  • Introduction to Computer Science I
  • Introduction to Computer Science II
  • Discrete Structures in Computer Science
  • Data Structures 
  • Web Development 
  • Introduction to Databases
  • Computer Architecture & Assembly Language
  • Analysis of Algorithms
  • Operating Systems (currently in progress)
  • Software Engineering I (currently in progress)

Continue Reading Over Halfway Through Oregon State’s Post-Bacc Computer Science Program

Another week of reading, lectures, and confused Googling and skimming through videos is in the bag. This week was all about NP-complete. It has been fun to experience an “aha!” moment in each course I’ve taken so far, and this was an especially fun one. In large part, because seeking answers to these questions is seemingly beyond the reach of computers (in a reasonable time).

We’re accustomed to computers being incredibly fast. So accustomed that we forget just how fast they are. They’re really fast. I’m writing this on a 4-year old computer. It has a 2.5 GHz Intel Core i7 processor. That number equates to how many cycles the system clock of this computer runs in a second. So 2,500,000,000 cycles in one second. The version of the CPU  running on this machine is quite powerful. It should execute around 9 instructions per cycle for a single core in the processor and there are 4 total cores running.

This all adds up to a lot of numbers and those numbers represent commands that we expect the computer to execute for us so that we can….. I dunno….. watch videos of cute cats.

Continue Reading Understanding NP-complete.

I should note that I continue to remain positive about the direction of the Gutenberg project (the new WordPress editor, coming to you as of WordPress 5.0). My feelings on this are numerous and expansive, but the long and short of it is that I believe WordPress core needs a major shakeup to help the community (re)develop focus and draw in engaged and effective technical participants. Gutenberg represents a wonderful opportunity to do that as it brings a new paradigm to the core editor (and likely elsewhere as the foundational technology expands into other areas of site management) and has the potential to draw in a new wave of web developers.

That said, the introduction of Gutenberg into core has been an interesting thing to watch. From afar, the concerns of the Accessibility Team seem to clearly show the divisions between WordPress as an open source project (WordPress.org) and as a commercial one (WordPress.com):

Continue Reading Trials and Tribulations with Gutenberg

Having just finished my midterm in Analysis of Algorithms (yes, the class is as dry as it sounds), my brain is still sharp on a few topics; one of them being dynamic programming, which I mentioned in my last post. In that post, wherein I tried to find motivation for forcing myself to relearn calculus, I used the classic example of trying to calculate the nth term of the Fibonacci sequence.

I thought it would be helpful to see this example running with some real code. Below, we have a JavaScript function – fibRecursive – that takes an integer as a parameter. This integer represents the term that we want from the Fibonacci sequence. For example, a call to the function like so fibRecursive(6) would return 8. 

Continue Reading A Short Story About Dynamic Programming

This is a question that is plaguing me at the moment as I force myself to relearn calculus for Analysis of Algorithms at Oregon State University. In moments like this, where the concepts are abstract and I need to learn even more abstract concepts so I can understand the first class of abstract ideas, motivation is key.

Why does this matter? I’ve been working in the industry for over five years and never needed this knowledge before, why now?

Well, the short answer is that you don’t need this body of knowledge to develop a wide range of applications and features to applications. In my world, many of the concerns that common sorting, searching, and general optimization algorithms address are not real concerns because they’ve been abstracted to parts of the language or framework. I’m able to do my job because someone else has figured out how to do other parts of my job that normally would need to be created from scratch. So while learning merge sort and analyzing its complexity is a fun exercise, I’ll not be writing it from scratch anytime soon.

Continue Reading Why Study Algorithms?