450 karma · joined May 9, 2010
Not being able to come up with KMP on a whiteboard in an interview hasn't kept me from playing no small part in producing millions in revenue for companies.
Especially outrageous is all of the companies that think they need to ask these questions, when the day to day work is essentially mundane CRUD type stuff.
You might not see any movement in a house... but maybe there's a bouncer asleep in there after working all night.
Much better to see that the family announced they were spending the day at the beach.
From my perspective we're coming full circle back to client/server desktop apps... only instead of C++, we're doing it with js inside a browser container... I've done ActiveX controls and Flash components... It's not that much of a stretch.
In the neighboring programming-language kingdoms, taking out the trash is a straightforward affair, very similar to the way we described it in English up above. As is the case in Java, data objects are nouns, and functions are verbs. But unlike in Javaland, citizens of other kingdoms may mix and match nouns and verbs however they please, in whatever way makes sense for conducting their business.
For instance, in the neighboring realms of C-land, JavaScript-land, Perl-land and Ruby-land, someone might model taking out the garbage as a series of actions — that is to say, verbs, or functions. Then if they apply the actions to the appropriate objects, in the appropriate order (get the trash, carry it outside, dump it in the can, etc.), the garbage-disposal task will complete successfully, with no superfluous escorts or chaperones required for any of the steps.
There's rarely any need in these kingdoms to create wrapper nouns to swaddle the verbs. They don't have GarbageDisposalStrategy nouns, nor GarbageDisposalDestinationLocator nouns for finding your way to the garage, nor PostGarbageActionCallback nouns for putting you back on your couch. They just write the verbs to operate on the nouns lying around, and then have a master verb, take_out_garbage(), that springs the subtasks to action in just the right order.
Twice now, I've been faced with a metric crap-ton of Java source files for reading / writing to a device.
Anything you could possibly imagine, gets defined as a class. There's dozens of classes, and more SLOC than I can count.. Meanwhile, an equivalent C program comes in at 2k SLOC, and 4 files.
You().Can('not').Do(any(thing)).Concise().In(java())!
When I was primarily doing C++, I gradually switched to generic programming once visual studio supported STL... And then when I started using Perl I found I didn't need to write classes at all.
Reminds me of this Paul Graham quote: "This practice is not only common, but institutionalized. For example, in the OO world you hear a good deal about "patterns". I wonder if these patterns are not sometimes evidence of case (c), the human compiler, at work. When I see patterns in my programs, I consider it a sign of trouble. The shape of a program should reflect only the problem it needs to solve. Any other regularity in the code is a sign, to me at least, that I'm using abstractions that aren't powerful enough-- often that I'm generating by hand the expansions of some macro that I need to write."
I had never thought of it like that before, but it makes so much sense and explains so many things...
Like why google is willing to pay 1-2 million per developer... But half of the bay area companies on careers.stackoverflow don't offer relocation.
For Real Productivity, Less is Truly More: http://blogs.hbr.org/schwartz/2010/05/for-real-productivity-...
.
I don't expect 'managers' to understand this... Mythical Man Month is nearing on 40 years old, and apparently the current crop of tech leaders haven't bothered to read it.
Two takeaways:
1) You don't really have any power. You need to lead by example and empower other people rather than command. 2) The personality required to establish a project is often different than the personalities required to keep it going.
Odds are you will definitely lose that personal connection as you go from working for "the owner" to working for a manager that reports to a VP that reports to the CEO that reports to the Board that reports to the shareholders.
But what I've seen in a lot of these "leaving" posts isn't quite that... It's more of a "the king has no clothes" epiphany: They go to work at a place thinking it's a thing-in-itself then wake up one day and realize how the sausage is being made.
So GOOG isn't a post-grad research lab: It's a company that sells ads. So GS isn't the equivalent of a fee only financial planner.
They never were more than that.. only the people involved thought they were something more.
I was always impressed with the feature set on fogbugz, but never had a real need to use it:
http://www.fogcreek.com/fogbugz/features/project-management....
My timekeeping needs were satisfied by toggle: https://www.toggl.com/
But it sounds like you need/want a lot more than that. I've encountered quite a few freelancers that like freshbooks.
I used to work on downloadable desktop apps, and we always played to the lowest common denominator. It ended up being a big weight around our neck when we wanted to do something 'cooler' but a little more resource intensive. I think we supported Windows 95 even after Microsoft stopped... simply because so many end users were still running it.
Another example: We have a "lesser" brand of mobile phone now, and I notice angry birds is frustrating to play on it... Even though it's perfectly acceptable on an old 8Gb iPod touch I had. Sure, they could spend a lot of resources on it to make it better, but that's likely to be a poor usage of resources.
You definitely need to hit the sweet spot of the performance bell curve, though.
This. I'm reminded of the post by Rob about his startup acquisition... The interviewers were asking him why he didn't rewrite a site written in classic ASP to node.js/mongo... Completely missing the point that the code behind the button made absolutely no difference in the sale or functionality of the product.
Wait... Is he still talking about the facebook lawsuit?
I agree with your point, and posted that job ad in support of it: To disqualify someone because they are using C#/.NET is arbitrary and stupid, and apparently came from engineering.
What was more bizarre, to me, was that most of the companies never bothered to look at my sample code or projects... and a few in fact said they didn't care what I had done (and proceeded to ask me edge-case algorithms stuff).
What was most off-putting, was the incredible amount of time involved in jumping through the hurdles. I only did this with a few companies, but after you add up: customize resume / cover letter + initial/hr screen + solve this screening coding problem + initial tech screen + anywhere up to 3 more tech screens + solve this more substantial take-home problem + onsite interviews... You're looking at a substantial amount of time.
Does anyone remember when Monster.com had that super-bowl commercial? -- When I grow up, I want to climb my way into middle management!
Exhibit: The "starving artist" vs the "slimeball lawyer".
Following the crowds is rarely worth the effort, whether it's the popular-kids crowd, or the brogrammers.