A Developer’s Love Hate Relationship with Design

One of my fav podcasts on Design

One of my fav podcasts on Design

There’s a reason why front end frameworks like Bootstrap and Zurb Foundation were embraced with open arms by developers all around the world. It allowed us, design clueless devs, to get something passable up in a very short period of time. But really, we all know deep down it’s a temporary fix till the web designer shows up.

I think instinctively, we all have an innate feel for something that is either pretty or ugly. We might not be able to vocalise exactly what aspects of the subject is breathtakingly beautiful or unceremoniously ugly, but we know it to be true all the same. So begins my quest to plug this knowledge gap on what constitutes good design and how can I implement it?

In my search to find the right vocabulary to articulate such feels, I went on a binge reading spree. The one book that probably sticks out the most is Design of Everyday Things. It’s a pretty good book and it made me so much more acutely aware of my physical space.

After books, I ventured on to online resources and there’s a shit ton of information out there. As a developer, I appreciated posts targeted specifically at me such as Design For Developers and Design for Developers. Yes — they both go by the same name. There are also courses such as Hack Design.

In addition to books and online resources, I came across a series of documentaries made by Gary Hustwit. They are Helvetica, Objectified and Urbanized. I haven’t watched them yet but I’ve heard good things about Helvetica. Objectified was referred to me by hackdesign.org. I’m probably gonna marathon all three this weekend.

Which leaves us with our last medium — audio. With that, there can be no doubt which podcast reigns supreme. 99% Invisible is one of my favourite podcasts — the other being Radiolab but you knew that already.

Design is often championed as one leg in a 3 legged stool with the other two being dev and marketing/sales. Strangely enough, it’s still the most neglected of the 3. More so in SE Asia where I am from. This dearth of awareness as to what constitutes good design and the importance of good design, has led me and some other fine folks to organise Design 101 for Web & Mobile Product Owners, Managers and Developers. It’s a one day crash course in design aimed not only at devs but anyone who works with web and mobile related products.

Hopefully I’ll start to see the light soon — my eyes can’t take anymore of my bad designs. If this isn’t scratching your own itch, I don’t know what is.

To Learn, Must One Always Be In A State Of Discomfort?

Mind the Knowledge Gap

Mind the Knowledge Gap

I’ve been coding Django apps for about 2 years now. I can initiate a server running Arch Linux, get it up and running and deploy my Django app in a couple of hours. I code using Vim. I use zsh as my default terminal. I know enough unix commands to perform the usual sed/ack/grep (or Ag if you’ve downloaded Silver Searcher). Conceptually, I can explain most web development concepts (although I stil have trouble understanding exactly what a reverse proxy does). In two years, I’ve also had to learn HTML/CSS/Javascript. It’s kinda taken for granted that and self-respected web developer would auto-learn that along the way. Understanding the subtleties of Git (merge vs. rebase) and how to use it (git flow) is also one of those ‘taken for granted’ knowledge grabs. My Python isn’t the most elegant, but give me a couple rounds of refactoring, I would have spotted and corrected most of the low hanging fruit ‘mistakes’.

There were a couple of months I felt my rate of learning wasn’t improving as quickly as before. I had become somewhat comfortable in the daily routine. This didn’t last long of course. Recently, I had to build a realtime map app for one of my products,  TripEvent. To do so, I had to use gevent-socketio. Diving into this triggered a whole chain of questions that exposed my lack of understanding about what really goes on under the bonnet.

I’ve relied heavily on my pattern recognition skills (and slavish hours just practicing, building) but there is not escaping the fact that some key computer concepts still eludes me. For example: when a user lands on my website, this generates a GET request that is processed by my reverse proxy (nginx in my case) which is somehow handed off to uwsgi which then hits my django app which finally hits my database (postgres). Is this all happening on 1 process? What happens when there are 2 requests at the same time? How does tweaking my nginx worker settings affect this? How this Python’s GIL come into play? How is multi-threading or multi-processing con-currency relevant? In the context of Python, how does gevent and its greenlets overcome this? I think you guys can see where I’m getting at.

Why is it that there isn’t any resource that explains such concepts from a web developer’s point of view? Especially one that doesn’t have formal computer science training. I imagine there must be many more people like me out there, all self taught, all wondering what really goes on under the bonnet! The information as always, is all out there. It’s piecing it together and make it conceptually sound in the context of my job (web developer) that’s hard.

I am in a major state of discomfort but this is forcing to learn and read more and ultimately plug the missing knowledge gaps. I think one always needs to be in a slight state of discomfort to improve. To be comfortable and not have questions gnawing at the back of your brain is a submission that you’ve not doing anything interest or new.

Software is a Young Buck

nom nom nom

Browsing reddit and came across this comment on this post:

Computer programmer…

We are in the “pre-industrial” era of software development, and even the best of us aren’t very good at it

Think about it..

Mechanical engineering is hundreds of years old

Architecture is older

Software starts at roughly 1950

We have a long way to go

When a new bridge, building or airplane is designed, everybody knows it will almost certainly work correctly

Major software projects frequently crash and burn and are abandoned

Those that succeed are filled with bugs

Software is NOT a rigorous engineering discipline

..and yes..I have been programming since 1972 and I know a bit about software

So we have the following forces at work now:

What does this all mean? Simply, software is here and if you want to remain relevant in tomorrow’s economy, you gotta learn the language.

Programmers and Music

On the internet, no one knows you’re a dog

Randomly came across this comment by Zed Shaw. The whole thread is worth a read. It’s about a parent having a go at her son for spending all day long playing the guitar. Tough love.

Linguistic skills. Music is a language, and so is programming. But, they’re both sort of fake languages that are fairly small when compared to a human language. This ability to learn and apply small made up languages gives musicians an edge when learning to code. Programmers will typically learn 4-6 languages during their career, and if they want to stay sharp they might have to learn that many a year. A musician might never learn more than just one notation, but this ability to learn a sort of fake language helps them with learning programming.

I’ve been noticing a high correlation between programmers and music ever since I started coding 2 years back. Besides Zed Shaw, other prominent programmers/musicians:

  • Derek Sivers of the CD Baby fame is a self taught programmer
  • Adrian Holovaty of the Django fame. Here is him playing Super Mario. His latest startup, Soundslice is really pretty (and useful too)

A cursory search on Google turns up this post: http://skeptics.stackexchange.com/questions/1570/are-programmers-likely-to-be-musicians

I think one of the closest similarities between programming and playing music is instant gratification. You write some code, refresh/compile, and you see the results immediately. Same with music, you play a riff or a chord, you get feedback instantly. The feedback loop is there to see and the more time you spend at it, the better you get. Once you start seeing improvement, you get addicted. It’s the same psychology behind self-efficacy — the feeling that you’re making good use of your time.

Games will be the death of you

https://i0.wp.com/upload.wikimedia.org/wikipedia/en/0/03/Aybabtu.pngSaw this post on hackernews and the top comment reads:

Giving up video games in my 20s.
If I hadn’t done that, I’d still be stuck in front of a game somewhere.
Those things will eat your life.

 

Games. A huge part of my life revolved around games. I’ve played them all and to some extent, got mostly good enough to pwn noobs in game. As any gamer can tell you, pwning someone, AI or human, is a very addictive feeling. To pwn someone, you need the best gear, the highest EXP, the most organized guild and so on and so forth. It’s a perfectly designed feedback loop.

 

This is my EU League of Legends profile. I’ve clocked about 800 games in 2010 when it first launched. The average length of a game is about an hour so thats 800 hours or 33 days worth of time I spent on that game that year alone. That is also the last game in which I’ve dropped serious time commitment on. Having said that, I have an 80 Engineer in GW2 and a 80(11) Monk in D3 but those were attained casually over many many weeks. Before LoL, I’ve spent countless hours on the Civilisation series, Warcraft 3 (I was ranked on the ladder), Counterstrike (back when AWP had zero recoil)  and so much more.

 

I think playing games in moderation is fine. Nothing like blowing off steam in pub games in TF2 after a long day. Couple of frags bound to make you feel better. However, like most others, I took gaming seriously. Which self respecting gamer didn’t?

 

Looking back now, getting off the hardcore gaming routine must surely be the best thing I ever did.

 

Apple and Patents

The internet has been abuzz on Apple’s recent patent war. My stance on this has always been that as a public listed company, Apple owes a fiduciary duty to maximise returns to its stakeholder and wielding the patent sword is just one of the many tools powerful companies have at their employ. Don’t blame the player, blame the (broken) game.

We can debate the merits and flaws of the existing patent system but that’s well covered. Perhaps, a more interesting question to ask is why has Apple taken such an provocative stance when it could have chosen to adopt a defensive posture instead?

When you have a company that’s built around a product visionary, and when many people are dependent on this person, the stakes are incredibly high. I imagine, as part of a ‘risk reduction strategy’, that the C-Suite executives have been planning for a scenario where Steve Jobs might no longer be with the company, be it for natural causes or not. Deepening the moats through patent protection is a good method to stall while they scramble to find the next Steve Jobs. Paul Graham said that he spoke to someone ‘high level’ at Apple and asked if there’s any more ground breaking products in the pipeline — the answer was: noI suspect that a side result of this is that Apple will start using it’s massive cash reserve and go on an acquisition spree to try and find the next product visionary.

Faced with such a predicament, the most rationale decision management can make is to protect the company’s interests at all cost and milk the cow for all it’s worth while they can. Apple has at most 2 -3 cycles of products ahead of them that have been in planning for many years now. After which I imagine, they are going to plateau and their growth numbers are going to decline. They are going to be cruising at a steady state, reaping the harvest sown by Steve Jobs. So bring on the patent wars, Apple has a fort to defend.

Opportunity Cost of Higher Education and National Service

This article resounds with me a lot. Imagine I didn’t have my NS obligations and skipped university. Instead, I spent those 5 years learning and building products. At 8 hours a day, I would have clocked about 10,000 hours in programming and product knowledge. What a powerful experience and skillset that would be now. The best part is, I would have spent exactly $0 dollars in that time.

Right now, I would be reaping the benefits of that knowledge instead of starting from near ground zero. When I think about the the opportunity costs and the compounded effects of that, I get seriously depressed.

National Service is not just 2.5 years (at least it was during my time) of my life, it’s 2.5 years and whatever compounded wealth I would have gained otherwise.

Well, I guess that’s the price one has to pay for semi-reliable MRT services these days.

http://www.economist.com/blogs/schumpeter/2011/04/higher-education_bubble_0

For those of you thinking of going to uni, why not check this out instead instead? http://techcrunch.com/2012/05/10/dev-boot-camp-is-a-ruby-success