Victus Spiritus


The Rejected

15 Dec 2010

The Tech Scene heats up in NYC, but leaves most applicants out in the Cold

Big tech companies are fiercely competing for talent, primarily experienced veterans. Angel and seed funding for tech startups in the NY metro area has also intensified over the past year, leading to more small companies seeking first through fiftieth employees.

The trend for tech company growth is happening throughout the nation, from startup capitals like Silicon Valley, NY, and Boston to smaller tech hubs like Boulder and Portland. There simply aren't enough experienced engineers to go around. Likewise many startups are getting angel and seed funding as more investors scramble to gain ownership of nascent businesses.

Yet rabid investors and competitive hiring aren't changing the nature of the job or startup market. The vast majority of applicants to attractive positions in startups or BigCos are rejected. Graduating from a top school used to be enough of an edge to scale the HR barrier and land that first technical interview, but graduates have become a commodity. Fail to give the approved answer and your application goes into the reject bin.

Advanced network programming and architectures can be learned on the job, through open source contributions, or with self guided projects outside of the classroom. There are more web docs and screen casts in your preferred language for your favorite framework than you have time to study. In addition code bases are changing so rapidly that interfaces and frameworks you learn today drastically evolve in just a few months. If the frameworks are not adapting to the shifting technology landscape^ they face obsolescence against attractive alternatives. Fortunately there's a big push in modern programming languages towards more human readable forms. Structure, syntax, and relationships go a long way to abstracting away details of complex object hierarchies**.

Specialization plus years of experience are on just about every job description. Job seekers which don't have several years of professionally scaling and optimizing relational (SQL) or document databases (Mongo, Redis, and Couch), or designing front end user interfaces for large successful sites need not apply. There are difficulties for even sharp companies which offer unique sample problems* on their job application landing pages, with no known optimal solution. A little research shows a handful of the best heuristic answers and I'm confident the folks in charge of hiring don't want urls to open source git repos.

I'll wrap up on a lighter note. Here's a blast from the past and my favorite rejection, the Rejected videos by Don Hertzfeldt that the post image was taken from.

*= I enjoy the challenging thought and implementation puzzles that people come up. Dropbox has a fun one with algorithm and code for squeezing as many rectangles into a container as possible (2d packing)

^= changing protocols (oauth, http, pubhubsubbub) require periodic interface updates. Utilizing cutting edge cloud services and hosts require knowledge of both their interface, features and limitations (read/write access times on virtual systems). For example datastore on the google app engine requires background processes to perform migrations, and disk access on shared file systems can be a serious bottleneck and rationale for running on bare metal physical systems.

** = ruby, python, perl and JavaScript are amazing glue languages. On the other end of the spectrum you'll have trouble beating c, c++, .net or jvm languages for execution speed. If you read some of my older method parameter lists in c++ you're likely to pull out some hair. They are bloated and chock full of line noise:

virtual LibCreatedObject * MyEyes( const LibArray< LibObjectType *> &my_list) const

Compare this to more elegant alternatives:



function my_eyes(my_list)

or for folks that are against polluting global namespace

var my_eyes = function(my_list)

where my_list has been declared earlier and object_types have been added to it. This looser organization requires more careful checking, but it's shocking how much line noise is removed and a blessing in how it makes the act of coding more enjoyable.

Static type systems require rigid attention to class definitions, while dynamic languages focus more on methods and interfaces.