The Well-Rounded Developer

The Well-Rounded Developer

Should the role of a front-end developer be limited to only client-side technologies? I have asked myself this question a lot lately. I come from a background where, as a web developer, I typically work across the following development stack to design and build a product:

  • Design. Graphic design, page layout to how a page flows responsively across devices
  • Client-side code. HTML, CSS and JavaScript
  • Data. Flat data files, RESTful web services, relational DBs, noSQL DBs, …
  • Server-side code – PHP, .NET, Ruby, Lisp, Node.js, Python, …

Recently, I have moved into a position where I am focused on fewer core languages and technologies. As a result, I find myself thinking about the value of becoming an expert in one area of the stack. Is there more value in being an expert than being a well-rounded developer?

The upside to becoming an expert in one subject is that there is more time to devote to exploring every nook and cranny of that subject’s subculture. After all, web development is an art form. We are artists who should know our medium and our style. However, it is this very focus that often makes us lose sight of the broader picture. Programming is not about a particular technology or where it falls into the stack. Fundamentally it is about solving problems. An understanding of when to execute code on the server and at what point it’s best handled it in the browser allows a developer to come up with the most efficient solution to the problem.

Jiro, in Jiro dreams of Sushi, states that “Once you decide on your occupation, you must immerse yourself in your work. You have to fall in love with your work. Never complain about your job. You must dedicate your life to mastering your skill. That’s the secret of success and is the key to being regarded honorably.” Jiro’s skill is sushi. He dedicated his life to coming up with and mastering the techniques of making the best sushi. In order to accomplish this goal, Jiro had to master the art of finding the right seafood vendors, picking the best fish (tuna, octopus, shrimp), preparing the fish, making the rice and creating an experience for his customers. If there was a problem with any part of the cycle, the sushi would be sub-par. So it is with development. A problem, often caused by lack of knowledge, in any layer of the stack can create fragile dependencies, inefficient results or worse…buggy code.

I have heard it said that new tech moves too quickly for well-rounded developers to keep up. This is true in the sense that no one developer has the time to become THE expert in every language, framework and platform that exists today. For a new developer, it can be overwhelming to look at the options that exist and wonder where to begin. However, if we take a step back, we are able to see that this pace of innovation is actually the fuel that drives the well-rounded developer. I say this for two reasons:

  1. The fundamentals of programming have not changed.
  2. The new frameworks and tools allow us to stand on the shoulders of giants.

Concepts such as object-oriented programming, data models and design fundamentals stay relatively stable over time. There are many different implementations of these principals and the principals themselves are expanded upon and refined over time, but much of the knowledge is transferable between languages and platforms. Differences are found mostly in syntax and philosophies. While syntax varies greatly among languages, the ones that tend to gain the most support are derivatives of earlier high-level languages such as Fortran and C. So, a lot of syntax knowledge is transferable as well. While the creator’s philosophy of a particular language or framework can vary, there are a finite number of general philosophies in existence and code design patterns often transcend philosophies. As Solomon said: “What has been will be again, what has been done will be done again; there is nothing new under the sun.”

Programmers that have been working at their craft for a while often say that development is much easier now than it ever was. They are getting at the idea that we do not have to mess around with as much low level stuff as we used to. 30 years ago, programmers had to write device level drivers just to connect to a database or manage a network connection. Given the same amount of time today, we are able to create more feature-rich, complex applications because of the work that has been done by those that have come before us. Frameworks in any context (server-side and client-end) continue to build on this infrastructure and will only speed the pace at which we can develop amazing products.

All of this is good in a general sense, but the real time-consuming part of becoming a well-rounded developer is spent in honing the details of one’s craft. It is difficult to decide which framework is best suited for a project and even more tedious to learn all the exceptions and caveats that come with a particular language or framework. Because of this, community is a vital component to a well-rounded developer’s workflow. Pick ecosystems that have good community support. Find the best framework to use for a project from the discoveries that others have made. Share what you learn when you develop for a platform with others. And above all, build new things.

Privacy, Handles and Social

Remember back about 15 years ago when everybody’s online identity was private? Having a handle was the cool thing to do. The first handle I remember having was spam444. This was before spam was widely used as a term for junk email. I just thought it was a cool word because of its use in Monty Python and its utility as the perfect camping food. I used this handle mostly for AIM and IRC chat. A couple of years later, I moved to using the handle cron57, which is still in use today as one of my email addresses.

One of my favorite lines from the movie Hackers is when Joey says, “I need a handle, man. I don’t have an identity until I have a handle.” I think in the hacker and cracker communities (as well as online forums), individual’s identities are still wrapped up in their handle. However, over the last decade there has been a movement in the general population (especially among creative and self-employed professionals) nurture an online identity that reflects an individual’s true identity (or a portion thereof).

For instance, I own the domain stevezeidner.com, my Twitter username is @stevezeidner and my Facebook page can be found at http://www.facebook.com/stevezeidner.

I remember a lot of talk in the past about how important personal privacy is. However, reality has shown us that there are benefits to giving up some privacy. The large benefit that people have noticed recently is social on the web. It’s so easy now to stay in touch with acquaintances, collaborate on a project and keep a central address book. The problem now is that social media has turned into a bunch of disparate systems. Every popular social platform is a closed system with separate “namespacing” and logins. The login issue is one I think we will always have to deal with. The namespacing problem however is a much larger issue – it is already tough to namespace based on your given name if it is fairly common. We need some sort of “domain” separation (like email or jabber). Maybe it is time for another bearhug?

Anyway, what are your thoughts on the topic? Do you think giving up some privacy is worth the benefits gained? What do you think should be done about the namespacing issue?

Veridian Dynamics…Predicting the Future

Veridian Dynamics

So, you know that ABC show, Better off Ted? It’s based around a company, Veridian Dynamics, that makes cool products based on research in their labs. I’ve found this strange phenomenon happening where I watch an episode of Better off Ted and then a few days later find that the product they created has actually just been created in RL (real life).

OK, so maybe this doesn’t happen with every episode, but I’ll give you two examples:

  1. Season 1 Episode 2 – Phil and Lem (Veridian’s top two scientists) grow beef in the lab. The day after I watched this (not the day after the episode was released), I saw this article titled Scientists ‘grow’ meat in laboratory. Creepy.
  2. Season 1 Episode 13 – Veridian Dynamics introduces a face-scanning Internet search program. On Dec. 7th, 2009, Google introduced Google Goggles. While this software is initially intended for identifying places, it will also, once privacy concerns are worked out, identify faces in the near future and perform and Internet search on the person.

So, how is Better off Ted predicting the future? Do they have insider information in science and tech industries? I don’t know the answer, but if I see another scenario like the two above, I will have to believe that it is more than just coincidence.

Why host my own?

twitalytic

Social websites open the door for anyone to easily place their content online. This is great as it eases the barrier to entry, but think with me for a few minutes about the implications.

What if it goes down?

We have all seen Twitter’s growing pains over the past couple of years. As people are beginning to rely on Twitter more and more as a source of news, this becomes a bigger issue. It was interesting to watch a few weeks ago when one user’s (Cyxymu) Facebook, LiveJournal, Twitter and YouTube accounts were DDOSed and to see the effects on the various services. Twitter could not handle the load and was down the better part of the day. Facebook had some issues, but handled things better than Twitter (they isolated the attacks) while Google’s services didn’t take much of a hit at all (they have tons of servers and a nice redundant/self-healing network). A year ago, hardly anyone would have cared that Twitter was down, but now it is almost as if CNN went down.

Who owns my content?

That is a good question. Who owns your content when it is stored on a server that you don’t own. What would happen if Facebook went out of business tomorrow? Or Gmail? What would happen to all of your messages…all of your email? Sure, they may say that you own the content, but ultimately the control of it is in the hands of owners of the server where that content resides.

Finally….security

Of course, security is an issue that must be consider whether you are administering a server or somebody else is. MySpace is a great example of a network with very little concern for security. Accounts on that network were being compromised left and right. By the same token, Twitter can distribute a virus just as quickly as it can dispense the news. Security is always a concern when you have the control, but when you don’t, it is an even riskier issue.

Conclusion

There must be an answer to all of this madness. Well, I don’t think there is one elegant solution, but there certainly are options if you are comfortable with a *nix server.

  • Twitalytic – Gina Trapani of Lifehacker is working on a tool to keep a local copy of your tweets (and related tweets from your friends) and do interesting things with them. Things like statistics, matching responses with the original tweets, etc… I’m trying it out on my server at the moment, and while it is definitely still an “alpha” product, it looks very promising. I think the end goal of it is to eventually be a federated Twitter network….when Twitter goes down, the Twitalytic nodes can still communicate amongst themselves (using pubsubhubbub of course).
  • Fever – Fever is a feed reader that you run from your own server. Not only does it help you take control of the feeds you read, it also helps you read them more efficiently. I have not tried this yet as it is not free, but looks like an interesting option.

So, there you have it. My little rant on why you should host your own stuff. I don’t always follow my own advice, but it is something I have at least been thinking about lately. What are your thoughts or solutions to this problem? What apps do you use now to help you out until an ultimate solution is discovered?

The Incremental Web

So, this is not an original thought of mine, but I thought it was interesting anyway. I was listening to This Week in Google (TWiG) and the panel brought up an interesting article by Anil Dash that proposed the idea that online trends work because they are incremental and the learning curve is weekend-project sized. He brought up a couple of other points, but I thought those two were the most interesting.

Baby Steps…

If you think about it, it takes most people a long time to catch on to new technologies. Google in particular likes to change the interfaces to their products just enough to confuse people who are used to the “standard” interfaces for that product. Gmail for instance shifted the thinking of “folders” to “labels”. Labels offer the same functionality as folders and add more display options. The only difference in Gmail is that you would also have to “archive” a message to get it to leave the Inbox. Honestly, I like the fact that Google rethinks how things have always been done and attempts to make a simpler, more powerful interface.

But, getting back to incremental web technologies, RSS is one of these that is so simple, yet is an enabler, a building block that yields more interesting results as time goes on. An extension of the RSS protocol, pubsubhubbub now allows for a feed (or hub) to ping readers rather than the readers having to check periodically for updates from the feed. As the protocol extends and changes, so are other uses realized for the technology. Podcasts are just audio files with an RSS feed and a reader to check for new ones periodically. So, I wonder if iTunes will adopt the pubsubhubbub extension for more efficient updating?

Google Wave

Anyway, the whole point is that if all this technology came at once rather than the uses for it being built up over time, would it be usable, or would the learning curve be too steep for it to be adopted at all? This is the question I would ask about Google’s Wave. Are we at a point where we can understand how all of this technology can work together in the way that Google deems best? Wave is like a federated wiki for real-time communication. In addition to having a client and server piece, the really cool thing is that it is an open protocol. I guess we’ll find out how open people are to adopting it around Sep. 30th when the first 100,000 invites go out for Wave.

What about you?

So, how do you react to new technology? Are you overwhelmed by too much new tech (it is coming at us much faster in the past 5 years, then it every has before)? Or, do you love living in a world where things are changing and there is always something new to learn? Oh yeah, and will you be using Wave when it is available to the general public?

Creative or Technical?

I spend a lot of time on the computer. My job requires me to be in front of a computer for 8 hours a day. When I get home, in addition to online bill payments, blogging, catching up on news feeds, Twitter posts and Facebook, I often spend time working on web (or design or programming) projects here and there and watching online content (much more choice than TV). Besides all of the time-wasting stuff (ahem….Facebook), when it comes down to working on a computer, you can really take 2 very different approaches:

  1. Technical: Programming, development, IT/Network management, etc…
    – or –
  2. Creative: Graphic design, web design, video/photo editing, etc…

Technical

I’ve been interested in software and hardware and how they inter-operate for quite a while. I remember scouring the ticalc.org forums every day for new advances in assembly programming on the Texas Instruments graphing calculators. It was so amazing to me that someone had found a hole in every one of the TI graphic calculators to get around the limited Basic programming with its slow interpreter and be able to run machine code straight on the Z80 processor (or Motorolla 68000 in the newer models).

Once I was in college, I learned how a pipeline on a processor worked, how machine code was interpreted, and even how to write a compiler. Pretty cool stuff academically, but you would have to learn a lot more if you were going to go into any specific field relating to one of these topics.

In most work situations, the technical side of computers means software development (and this kind of work varies a lot depending on the language, platform and scale of the projects you work on) or IT kind of things like deploying servers/server clusters, security testing, network design or a support role.

Now, there can be a creative side to the technical as well. When designing a network, server room or even end-user protocols, there are always constraints (time, money, etc…). To get around these constraints and still achieve the desired results, you often have to get creative as an engineer and figure out a way to get the project finished with the given resources.

Creative

While I started out my career in a more technical role, recently I have been focusing more on the creative side of what computers can do. In particular, my focus has been on web design.

When juxtaposed to the black and white world of the technical/engineering, this right-brained creative culture seemed totally out of place to me at first. This was until I had a conversation about originality in creativity. For a long time, I strived to come up with unique designs and found myself falling way short or just having very few ideas that actually worked out. I heard from someone very knowledgeable that there are actually very, very few innovators in any particular field. These are the people that have established themselves as experts over many years of producing works that are recognized by many to be the best (original or not) among their competitors. It’s that whole thing that Pablo Picasso said: “Bad artists copy. Great artists steal.” My interpretation of this is to copy work, but make it your own. Sounds kind of counter-intuitive, but it’s all about totally acknowledging that there are many other people in your field who are better than you and who you can learn from and it’s OK to steal the ideas and innovations that they came up with because after all, there are very few people who truly innovate and even fewer who are recognized in their lifetime for the work they have done.

So, just as the technical side of computing must embrace some creativity, so the creative also has a lot of logic to it. There are many rules to follow (which I am still learning as I did not go to art school). Rules like complimentary colors, how to effectively use white space and what fonts to use when. I’ve found that a wonderful resource for learning how some of these rules are used in modern web design is Smashing Magazine. Another logical aspect of design (well, web design in particular) is that all designs eventually have to be turned into code, and if you want to make any changes to that code over time, it should be made to be quite organized and re-usable. Of course, CSS is often not logical because not all browsers interpret it in the same way, but that is another story for another day.

What are you?

What do you prefer? Do you like the technical or the creative side of things better? As you can see there is a lot of overlap and if you learn to embrace them both for what they are, you will not only have learned a new skill, you will have improved the one you already have.

Why you should pay attention to cloud computing.

Have you heard of cloud computing? Sure you have. Do you use Gmail? That’s cloud computing. Anytime data is stored somewhere “on the internet” or a computation is done without using your local computer…that’s cloud computing.

So, why should you care about this term that has popped up recently for describing a service that has been around in one form or another for quite a few years now? Well, it’s more than just a new word…it’s a way of thinking about how we store data, about what kind of computers we purchase in the future, about how we scale applications, it’s about having data centers and supercomputing clusters with usable interfaces in every home.

So, who offers cloud computing? One of the largest proponents of this revolutionary implementation of technology surprisingly has been Amazon. Yes, Amazon.com – that place that got started by selling books online. Why in the world would they be into the cloud computing business? Well, every company’s core competency is eventually trumped at some point by another business that can do the same thing faster and cheaper. So, while Amazon realizes that an online marketplace is a pretty good business right now, they also see that there will always be competition from the niche markets who can run their own store with better knowledge of their products and better ways to market them. While their algorithm for the mass online retail market has been pretty well optimized (like Walmart), Amazon realized that they have this huge, underutilized resource in the server farms used to run their marketplace. Processing power is always underutilized when what is really needed (and is also the least expensive) in a hosting environment is memory and disk space. Innovations in server virtualization (Xen in particular) made reselling this extra computing power all that simpler and more attractive for a business like Amazon that needed another business model to make them to stand out in the wild wild World Wide Web. Today, they really are the leaders and innovators in the world of cloud computing, offering cloud hosting, databases, storage, computing and more, all with an intuitive, consistent developer interface.

Of course, there are other plenty of other companies doing the whole cloud hosting thing. Scalable hosting in the cloud (only using the resources that you need when you need them) makes so much more sense than cramming a bunch of virtual server instances into finite slices on a single server. Companies like Media Temple, Rackspace, GoGrid and more are already doing this quite effectively at a reasonable price. So, this brings us back to the question of why you should care about cloud computing.

You should care because the obvious implementation in hosting is only the beginning of the application of this technology. Everything you are doing on your desktop at home today is going to be done better faster and cheaper online in 10 years (or less) and all the data and other content you generate will be accessible to you from anywhere at any time. This also means that it is (technically) accessible to anyone with some computer experience and a little ingenuity in their back pocket. Think about how much of your email, your banking info (online bill pay), your personal life (facebook) is stored online right now. Imagine the default storage of every piece of information being somewhere in the cloud.

But, don’t worry. In my opinion, security will never be what it should be, but I will never worry about it as much as the doomsday security experts tell me I need to worry. Why? Life is really too short to worry if someone will get a hold of my personal data. If you are transparent and have little to hide…sure we all have our bank acct. #’s and other sensitive information…but, if you are transparent about the rest of your life, you have very little to fear when cloud computing is unleashed in full force. Instead, you should enjoy the future benefits of being able to run all of the latest and greatest applications online without having to upgrade your computer every 3 weeks. You should appreciate the fact that the power grids won’t be totally overextended by adding more processing power to them, but rather by more efficiently using existing resources. You should be excited that you will soon be able to get unlimited Blu-Ray (or higher) quality content streamed to your TV at less cost because there is less overhead in the distribution.

Now, there are probably 30 more reasons that you should be excited about cloud computing…so, please let me know what they are. And while you’re at it, let me know how you are using cloud computing right now.

Top 10 Favorite Free Programs

Below is a list of my top 10 (free) programs (in no particular order) that I have found to be extremely useful over the years.

Top 10 Free Programs

  1. Evernote – I use this to keep track of all my notes. Personal things, work projects, etc… I’ve used it since its beginning when it looked a lot different than it does today. Evernote is a pretty good free alternative to MS One Note and its synchronization feature makes it so easy to use it on all of your computers. There are some small ads in the corner of the program, but they are non-intrusive. Mac, Mobile and Windows.
  2. X-Chat – I used to use mIRC back in my high school days and loved it as an IRC client, but X-Chat is free and open source and does most of the same stuff very well. Windows and Linux.
  3. GIMP – Ahh, the GIMP. Another piece of software that I’ve been using for a while. Despite what many people say, it is a great free (and again, OSS) alternative to Photoshop. IMHO, Photoshop is still better if you can afford it, but at free, you cannot beat the GIMP for features and I think usability as well. It is very simple and really just works for photo editing and web graphics. Linux, Mac, Windows.
  4. Digsby – Digsby is my command center for IM, Gmail, Twitter, Facebook and LinkedIn. What more can I say…it rocks and gets more stable with each version. Linux, Mac and Windows.
  5. FileZilla – The only FTP client I have used in a long time. It’s open source and has both a client and server version of the software. I have mostly used the client. It has all the features of the non-free clients except for directory synchronization. The resume feature is great for large uploads or downloads. Linux, Mac, Windows.
  6. VLC – I have talked about Video Lan Client before, but it has a soft spot in my heart. It can play back multimedia files that other plays (ahem, Windows Media, Quicktime) can’t…plus it’s also open source and constantly being developed. Linux, Mac and Windows
  7. Celtx – If you have ever done any script writing, you probably know how expensive the gold standard of script programs, Final Draft, can be. Celtx aims to be a good free open source replacement and does a pretty good job. I love the synchronization to their server so you can work from multiple computers, but they are soon making this a paid service =(. Linux, Mac, Windows.
  8. Faststone Capture – I take screen grabs all of the time for my website work. Faststone Capture makes this really easy – I usually use the adjustable size capture window. It’s no longer free, but I’ve included a link to the last free version of the software which still works great for everything I need. Windows only.
  9. CamStudio – Another screen capture program, but this one is for video. It’s a nice alternative to Camtasia – certainly not as full featured, but works very well for free. Oh yeah, they have made a codec that looks very nice and produced small (file size) files. Windows only.
  10. Look@LAN – I guess this is now called Fing and is currently command line only, but it is a great network scanning tool. I often use it to track down a particular computer on the network. Linux, Mac and Windows.

There are many other useful programs out there. Those are just a few that I use on a pretty regular basis that are all free. What free software do you get great enjoyment from?

2009 Predictions

Here are a few things that I think will happen next year.

  1. Netbooks sales will continue to rise and may overtake notebook sales (at least for one month in ’09).
  2. 2007 and 2008 were years of huge online video growth. 2009 will be a year of trying to figure out how to better monetize this media platform and how to stand out among the crowd (hint: dense, quality content will win out).
  3. We are going to see more Hulu knockoffs that will fail for lack of good content
  4. This whole Twitter/microblogging thing still won’t be figured out.
  5. The US will officially be out of its economic “recession”, but not until the 4th quarter.
  6. Styles from the early 90’s will be back in vogue.
  7. 2009 will be the year of the thinker and the innovator. We will see more creativity as unemployment rises and people have more time on their hands to come up with the “next big thing”.

This is a very short list, so please add to it. What do you think will happen next year and what are you looking forward to doing differently yourself in 09?

Movie Ideas

Back when we started Wide Open Mind one goal we had was to become more familiar with using the gear, editing and being on camera. Well, I think it’s time to start using some of this experience that we’ve gained to make a short film (I know, I’ve been talking about this for a while, but I want to at least start the writing process). I’m just in the idea phase at the moment which is what I need your help with. Once I settle on an idea that has potential, I’ll flesh out some of the details in an outline and then start writing. Here are a few ideas for just general themes:

  • Hacker movie (in the vein of Antitrust or possibly based off of something like “Little Brother” or Scroogled)
  • Story based on my life growing up (our family had some unique experiences which might be interesting if embellished)
  • I have a few short monologues written already (Soul Safari) with a story around them that could be turned into a brief (10-15 minutes) sci-fi flick
  • A story driven mostly by character development (think Garden State/Sideways). I have a few ideas for characters, but I’d like to hear what you think are interesting personalities in people to see onscreen.

What thoughts or ideas do you have for a film? Any thoughts on the very general themes I’ve presented above?