• About
  • Colophon
  • Contact
  • @irvingruan
  • 2013-04-02

    The First Six Months

    Back in September of last year, I started my first real job, working as a software engineer at TuneIn. I came in with limited knowledge, experience, and a small toolbelt, not knowing whether I’d be ready, especially with such a talented and world class engineering team present. The technical challenges we face everyday are tough to solve. There are no predetermined and finely tuned test cases to write code against like we were conditioned to back in school. This was not a safe incubation chamber to write poor code in with the only punishment to be an arbitrary letter grade.

    This was different. This was the real world where bad code can mean many bugs, headaches, and revenue loss for the company.

    Being the youngest engineer at TuneIn, my peers stand as giants to me. I am constantly humbled by their experience, expertise, and breadth — as well as depth — of knowledge in their technical domains. However, due to the openness and the relative permeability of ideas across different engineering disciplines, I cannot help but be a sponge in this endless sea of knowledge. While my coding chops are by no means extraordinary, they have unquestionably taken gigantic leaps since I started working.

    I soon realized that it’s not just merely the act of doing that helps improve your craftsmanship, but doing it with people who are better than you at it that significantly helps you become great at your craft.

    Be open to learning. Be receptive to failing. Surround yourself with people who are better than you at your craft. The rest will naturally follow.

  • 2012-07-05

    Value of Destruction

    During the first year or so of my programming voyage, I bumped into many roadblocks. Some algorithms were broken, this method didn’t do everything that I wanted it to, that class needed refactoring, and other such hurdles were common. I was afraid to modify certain parts because I thought that that was the only way to do it, and if I changed or deleted it, I’d be wasting unnecessary time. But I always ended up with a better and more elegant solution when I just erased the darn thing and started over.

    It’s not always about fixing what’s broken. It’s about starting over and forging something better.

    I think the reason why I had this fear of deleting code and starting from scratch back in the day is because I thought only parts of my code were incorrect, and thus finding the erroneous portions and deleting them would do the trick. But, you see, that is the trick—find what’s broken, then fix it. But there’s a catch: previous code tends to cloud your perspective. Therefore, any headway you make is consequentially tethered by prior thinkware; past assumptions ultimately are not conducive to novelty. This is bad and you may very well end up at a worser place than you were already in. I cannot remember a time when destroying code and beginning anew hasn’t been beneficial.

    I’ll provide a personal anecdote: when I first started designing API, I wanted to make it as good as possible without ever touching it again. But as anybody with experience in architecting API can attest to, it’s not an easy task—in fact, it’s almost impossible to get it right the first time! You’re bound to scrap and rewrite much of it. But as a stubborn rookie, I was relucant to start over. However, once I overcame my pride and rewrote it, it turned out much better. I just had to admit to myself that it sucked and needed to be discarded. 

    So cast away the anchor of familiarity and don’t be afraid to start over from scratch once in a while. Ironically, you have more to gain than you have to lose.

  • 2012-07-03

    The Next 50 Years

    They will be scary. They will be crazy. They will be amazing.

    When you look at human technological progress up until the Renaissance, it really wasn’t all that impressive and glorious. Sure, there were some important milestones: inception of stone tools, the wheel, gunpowder, paper, and other raw materials. They, more or less, enabled the basic means such as transportation, resource management, and transfer of knowledge. But they weren’t giant leaps, relatively speaking. Agrarian societies were still prevalent and most of the world’s population did not live in cities.

    Progress was slow.

    However, things started to change around 1800. The Industrial Revolution happened. Many scholars argue that this pivotal period served as the point in history when mankind started witnessing the genesis of truly rapid growth. Vertical integration, the assembly line, and mass production of goods proved to be essential catalysts that skyrocketed the rate of manufacturing. Nearly the whole world was affected by this and many of our goods wouldn’t have existed had it not been for the inventions that were created during this significant time period.

    Fast forward to now—you’re most likely reading this on a computer, an iPad, or probably even a smartphone. Can you believe that’s even possible? A little electronic device that’s connected to a complex global network consisting of millions of machines—each (in)dependent of the other—all able to speak to one another thousands of miles away at blazing speeds via bursts of electric signals encoded as a series of 1s and 0s!

    Even as an engineer, I still find that mind-blowing.

    And come to think of it, the personal computer hasn’t even been around for half a decade yet. We live in a remarkable age in which doctors can pull up a patient’s information on a glass-interface aluminum slab, customers can pay for a cup of coffee with their smartphones, and people can control their thermostats over the Internet. Most people 50 years ago probably wouldn’t have seen this coming.

    Everything is changing. Education, medicine, software, design, entertainment, transportation, energy, and God else knows what. And they’re changing faster than we can keep up with them. Whether people of the future will call our age the Digital Revolution or not, I know that the next 50 years will be amazing.

  • 2012-06-26

    There is Nothing to Writing

    Ernest Hemingway:

    There is nothing to writing. All you do is sit down at a typewriter and bleed.

    Hemingway, while putting it frankly, certainly has it right. There is no magic way to do something—you just do. But that doesn’t always translate well in our minds. We will expend our energy in finding shortcuts to something before pursuing it instead of just diving in head first. It makes the undertaking appear more accessible. However, we mustn’t forget that 99.99% of the work still remains even after “eliminating” shortcuts.

    When I embark on new endeavors, I often joke to myself on how I’ll just “YouTube or Wikipedia it” to learn the material. It’s usually my ironic way of mentally preparing for the arduous journey of going down a rabbit hole. But think about it: wouldn’t it be great if we could just rapidly acquire skill and knowledge, like they do in The Matrix, without actually doing work? Imagine the time and energy it’d save!

    As of the year 2012, mastery, and even competency, of a craft requires thousands of hours of labor so there’s no getting around that. Shortcuts obviously make the learning easier, but be wary: do not misplace your objective of getting good at a craft with solely finding shortcuts. Instead, shortcuts ought to be treated as instruments of insight that you find during your journey. They only become problematic when they destroy, corrupt, or leave out nuggets of understanding and intuition. Because when they do, you’ll be spending unncessary time holing up gaps of understanding where your “shortcuts” unearthed in the first place.

    All you have to do is to just sit down with your craft and bleed.

  • 2012-06-11

    Apple’s Next Foray

    Among the many great items announced during today’s WWDC keynote, Passbook certainly caught my attention. In short, it’s an app that integrates with popular brands such as Target, Starbucks, Fandango, United Airlines, Amtrak, and several others.

    It’s a big slap in the face to not only the rare—if ever used—Google Wallet but Pay with Square.

    With over 200 million credit cards in its database, Apple knows that it has a noticeable advantage over popular competitors such as Amazon. And I doubt that those brands being initially rolled out with Passbook will be the only ones.

    Apple dominates digital music, movie, and app distribution. Payments, it seems, will be Apple’s next foray. It’s a relatively difficult industry to crack from what we’ve seen thus far, but this is a momentous step for the Cupertino giant—more so than we realize.

  • 2012-06-03

    The How and Why of Design

    I recently finished reading Frank Chimero’s The Shape of Design. The book is a well written treatise on design as a connection-creation engine, a view of designing that makers of things know to be inherently true, but have a difficult time materializing it into words.

    While I don’t want to crudely summarize Frank’s work, I do, however, want to stress one of the important principles that was extolled. 

    The How and Why

    The How is the means to execute your imagination into the tangible. It is the process that governs your craft. It is the implementation, the metalworking. It is the mode that, more often than not, consumes us when we’re making things. It’s in us to sweat the details inasmuch it makes us forget the Why, a pattern that’s often detrimental to the creative process.

    The Why is the purpose. It is the invisible spirit that guides us toward the end goal. It is the line on the horizon that we need to sit back and look at from time to time while driving on the road. As Frank clearly reiterates many times, craft ultimately needs purpose to take full form.

    In the end, design is merely a means to an end. But it is such an important means as it creates experiences for the audience. It develops a shared dialogue between the designer and the audience. But since it is a means, it is then, by consequence, an incredibly powerful tool that we can use to build a better world. Frank ends by noting:

    And if you look closely, and ignore the things that do not matter, what comes into focus is simply this: there is the world we live in and one that we imagine. It is by our movement and invention that we inch closer to the latter. The world shapes us, and we get to shape the world.

  • 2012-05-10

    Leveraging Happiness

    It’s commonly accepted by most people that the work you do validates your sense of happiness. Merriam-Webster defines “happiness” as:

    1. A state of well-being and contentment

    2. A pleasurable or satisfying experience

    (2) implies more emphemerality and is not an apt definition of what we think of when we internalize the notion of happiness. The organic definition of (1) seems be a more natural way of interpreting happiness and will serve as the informal definition for the purposes of this discussion.

    Even though happiness is inherently good, the problem with happiness, like most things in life, is that we’re always wanting more of it. This is epidemic to almost everybody. As incredibly competitive and curious mammals, we are always on voracious path of seeking more. For the most part, this is actually good: competition breeds innovation and curiosity permits us to be the wonderful explorers of ideas that we are. But when it comes to happiness, we have it all wrong.

    I propose an alternative outlook on the issue: be happy first, regardless of the output. You can do good work, but being truly happy enables you to do great work.

    The biological confirmation of this is dopamine. Dopamine is a neurotransmitter released by our brain that helps us feel happy—especially in reward-driven learning—but it also plays a key role in our cognitive abilities. By not letting external factors bring you down, a natural disposition towards being happy amplifies your brain’s ability to not only be more receptive towards learning new material, but facilitates your cognitive abilities in whatever you’re doing. This is why being happy is vital to maximizing our mental growth—before, during, and after any activity.1

    Even if the biological reasoning of this does not sound convincing, try to imagine yourself learning something while in an unhappy mood. You probably won’t be open to learning that much, will you?

    This is why we need to stop this backwards thinking that the output of our work, investments, and relationships sought to substantiate our sense of happiness. Disappointment is inevitable in everything and there’s no avoiding it. What we can do, however, is prepare and react to it in a positive way.

    I leave you with this quote from the retired American football coach, Lou Holtz:

    Life is ten percent what happens to you and ninety percent how you respond to it.

    Be appreciative and leverage your happiness as a utility. You’d be surprised by the great things you can achieve when you’re naturally happy.

     ___________________________________________________________

    • Source: Public Library of Science ↩

  • 2012-04-28

    Sunk Costs

    We often find ourselves disappointed by immediate results. If the returned investment in the nearest time window is bad enough, it can make us back out from the investment altogether. When we take out our money—or more valuably, our time—from an investment because we’re not seeing swift positive returns and then value our venture based on previously incurred costs that went into the labor, the problem essentially reduces down to the notion of sunk costs.

    In business, this isn’t usually the best value system to adhere to when executing future decisions. While it serves as a good indicator of what decisions to avoid making in the future, the temptation to completely bail out of a hefty business investment because of unsatisfying immediate feedback ought to be evaded since it can be extremely difficult to predict the market even as short as one month out.

    The same goes for any creative endeavor we pursue.

    When we take up a new hobby, we will initially suck at it. Once the frustration of failure begins to outweigh the longing for success, the mindset that we wasted all that time, energy, and money on an investment that did not yield immediate returns will start to settle in. This type of mentality is ultimately detrimental, if not parasitic, as it will affect future decision-making when considering new crafts. The pattern of people dropping trades, professions, and even ideas just because the feedback is not immediately good enough is more pervasive than we realize and more often than not, the concept of sunk costs viciously infects our value system at the tipping point in that process.

    As an example, I will provide a personal anecdote. There were many times during college when I was tempted to drop my major because I didn’t think I was good enough since the time I invested wasn’t yielding any positive results. I had no idea where this investment would take me, and the mindset that all the time I have investedhas gone to waste because the immediate results were unsatisfactory was ever present. But as I soon realized, immediate results do not always manifest themselves in tangible forms, such as grades or money. My immersion in my craft therefore gradually wired my brain to approach problems differently than before. Previous attempts at hard problems—while the endeavor thereof did not give me returns on time, sleep, or money—solidified a foundation of knowledge that eventually prepared me for solving harder problems. I went forward with this mentality hoping to leverage my initial and ongoing investment even though I did not always receive immediate positive feedback.

    But as most of us have or will learn, this is natural in nearly everything we do! I was “losing” my time, energy, and sleep. I was not acquiring anything except for theoretical knowledge as I was not good enough to earn money yet from this skill. Because of the immediate feedback, I wanted to quit. But like all things in life, we have to look further than the nearest time frame, even if we have no idea what it may bring. This is exactly why you feel incredibly happy when your investments work out, even if they took years to bear fruit.

    Don’t be discouraged by the immediate results if they are not positive, especially if the endeavor you’re undertaking is difficult. Most good investments incur costs before turning positive. The key is to recognize that natural valley in the slope of learning and stay the course. If the investment doesn’t incur any costs, then it probably isn’t worth it.

  • 2012-04-25

    Your Organic Bicycle is Still Powered by Gasoline

    After listening to the most recent episode of Roderick on the Line, I started thinking about how people, including myself, frequently tend to cry out on their little soapboxes: “screw the system”, “fight the man”, and other anti-establishment declarations. I don’t think we really know what we’re talking about when we say stuff like that. I don’t think we realize just how entrenched and complicated the systems we are attempting to fight really are.

    I’m a personal advocate of challenging the status quo. This sort of idealism operates as one of the main catalysts for change. For revolutions. For the betterment of mankind. But as a citizen—nay, human being—I’m civically obligated to participate in society: I pay my taxes, I buy my goods, and I work hard. Therefore, I ought to engage in a functional society that has the capacity to render similar services to me. The notion of communal reciprocation is imprinted on our DNA; we survive by cooperating with each other and contributing to the common good.

    But then there are those people who do nothing but “fight” the system. Or rather, they want to appear like they’re fighting the system. They refuse to pay taxes because it violates some core principle in their lofty sense of libertarian idealism. Or they don’t buy leather products because they say little Vietnamese kids make them. Or they are pro-green and refuse to purchase anything that does not adhere to the Rules of Environmental Friendliness. Okay, that’s good for them that they don’t buy into that lifestyle. But they still use the public roads and services that the rest of us are shouldering. They eat food, and that food must have been transported from somewhere using gasoline. And if they’re purchasing it from the local farmer’s market, don’t forget that the farmer must use gasoline to get his stuff to the dude who is super eco-conscious of everything he consumes.

    These systemic processes are always more complicated than just a + b = c.

    So, unless you’re completely self-sufficient and independent of the services and goods rendered by society—in which the rest of us are contributing to via our work, taxes, and time—don’t go espousing views of Fighting the Man. Don’t lecture others on the evil of taxes and how I should refuse to pay while you’re riding your Organic Bicycle™—which, might I add, was grown by either hardworking Americans or destitute Chinese children—on the roads we helped pay for. Don’t reprimand lawful citizens for not bringing reusable and compostable cups to Starbucks when you’re probably wearing cotton clothing manufactured by gasoline-powered machinery.

    I should note that I’m not limiting my thesis to tax-hating anarchists or eco-crazy fetishists. I, too, hate paying taxes. I’m also a proud proponent of clean energy and eco-friendly solutions. But I’m not going insofar to completely opt out from those systems and still play the same game that contradicts my views but it provides the benefits I seek. Because in the end, taking out small parts here and there from the system but keeping others will ultimately lead to the destruction thereof.

    You either fully participate in society or you don’t. There’s no middle ground: critiquing small parts of it and refusing to partake yet still reaping society’s goods all while fancying yourself as a Rebel is very hypocritical.

    The System is more entrenched and complicated than we’ll ever imagine. Instead of always fighting the system, start contributing to it. It’ll be good for you and the rest of humanity.

  • 2012-04-18

    The Cost of Creating Abstractions

    As a software engineer, I’m required to understand most, if not all, of the software stack. From high level source code down to—at least, hopefully—the assembly language level, the steps in-between should pose no threat to my understanding. However, as new software-based technologies emerge everyday (Ruby on Rails, Cocoa, Jekyll—just to name a few), the ladder of abstraction is getting bigger.

    This is a good and bad thing.

    The good thing is that these new abstractions have enabled us to create better tools and products for consumers and producers alike. It has made the labor of making stuff easier than ever before. And not to mention, it has nearly razed the barrier of entryway to coding for curious-minded individuals. The computer engineering world has seen its cake of abstractions raising, all the way from writing “code” with physical punch cards to assembly code to high level language to visual programming. What an evolution, I daresay! I probably would have shot myself in the foot if my first computer science class at my university was taught in x86 assembly.

    The bad thing is that these new abstractions create the illusion that the step of moving down the ladder is unimportant, unnecessary, and rather laborious. “If it works at this level, why do we need to go down one step to understand that level? Shouldn’t we just accept this as magic and move on?” Andy Matuschack makes a great point when he discusses feeding abstraction with understanding:

    Abstractions empower and accelerate. As usefully encapsulated nuggets of understanding, the creation of novel abstractions drives a field’s progress, but their invention is possible only with deep understanding of present ideas. So I declare: if we are to master a field, we must accept none of its abstractions as magic. Rather, we should yoke them as automations of what we already understand.

    A prime example of understanding what you’re working with is programming in the language C. Unlike other languages that have automatic garbage collection, C requires not only knowing when to use memory functions, like malloc and free, but why. A good knowledge of the latter doesn’t only make your C program less prone to memory leaks, but it also necessitates a more acute understanding of memory representation, segmentation faults, and a whole array of other core computer science problems.

    Like Andy mentioned, we run into obstacles when we fail to learn the foundations of the abstractions we’re working with. To be truly a great cook, one must not only accurately follow recipes, but understand why they’re fabricated as such.

    The cost, then, of creating new abstractions is that the next generation will likely ignore the underlying abstractions that serve as the building blocks for the present one they’re working with. This becomes complicated when something goes wrong and they’re unable to synthesize a solution because the problem stems from lower steps in the ladder of abstraction. Creating new abstractions then has the side effect of desensitizing previous ones, even the ones that occupy the foundations of the ladder. Instead of regarding them as instruments of magic, we should instead deconstruct them as processes we already ought to know.

    If you’re constantly working with abstractions, comprehending the composition of the different levels in the cake you’re working with will ultimately help you make a better cake. Andy provides us with motivation for confronting the abstraction problem:

    The goal is to provide a sandbox—not a syllabus—for experimentation and the formation of understanding. Understanding is marvelous because it’s so readily a feedback loop: we can use it to make more of it.

    If we are to build a ladder to the moon, we should be comfortable enough to climb back down to earth. Moving up the ladder of abstraction, then, is just as important as moving down. As the brilliant Bret Victor points out, we learn the most about a system not by understanding the individual layers, but by effortlessly transitioning between them.

→