I would have accepted an answer as simple as "The value of 'this' depends on how the method is called" or even "The value of 'this' confuses me because it's often not what I expect."
It was a disaster. We may as well not have asked the question at all. Nobody seemed to even be aware of anything about it.
You have it backwards. It would have been a disaster if you didn't ask the question and hired someone who doesn't know basic JS fundamentals.
Your welcome btw...have fun :/
And I'm always amazed by the amount of developers that just do not understand how it works, and bind every possible methods.
The most important skills I bring to any project are a lot higher-level than the details of a particular language. I haven't made my career on one language or platform, but dozens of them. For the details, I work with reference material handy. After a month, I probably have a good grasp of whatever I'm working with. A year after that project, I probably don't, but I could bring it back easily.
In certain team environments, I avoid 'this' because the programmer who is looking at this file next may not understand it's proper usage.
The ECMAScript committe are taking steps to make "this" more useful, but the current semantic is so insane that I don't it's particularly surprising that people who aren't language lawyers don't understand it.
I would ask if you by "method" mean function defined on an object. If so, this refers to the method's object. If not, this can take on 5 values. In the global scope it is the global object; in a constructor it is the newly created object; in a function (not defined on an object - and also goes for functions defined within methods defined on objects) it is the global object; in a method (defined on object) it is the object, and finally it can be set explicitly with functions like call and apply.
How did I do? (Serious question. I think my answer is good, but I also struggle with a serious form of imposter syndrome.)
It's really tricky, and I often have to .bind functions after I've noticed they're not working.
Off course, disaster is an understatement. All three questions where the demise of 100% of our interviewees. We ended up hiring a sql programmer and teaching him what he needed to know.
If anyone wants to look at one of my sites, I'd be curious how I stand as a developer.
edit: I am a frontend tech lead (not even in SV!!) and my most junior engineer will answer the question correctly. I can't even fathom how one could contribute to a non-toy app without knowing this.
Since this is for a junior position, conceivably an applicant could be a recent CS grad with no formal JS training, and hacked some projects on a side or job. And thus never by happenstance run into this issue, even if he read it somewhere sometime.
You can run into this problem by doing something as basic as using it in a click handler if you don't know that it's there.
I have trouble understanding how someone would call himself a JS developer and not knowing it.
I'm not at all a JS developer (even though lately I've been knees deep in nodeJS code) and most of my experience is away from the browser, but even I knew this. I was responsible for hiring at a previous company and I did see some people passing as Senior SQL developers without knowing how to do a join correctly, but I always passed it as a local thing (culture here is as long as you graduated you don't need to learn anything new) but not in other more competitive places.
My job and side projects are mostly web sites that require knowledge about how to architecture software but I very rarely write complex algorithms.
If something comes up where I need to optimize something I can usually spend some time Googling for some insights on how to improve it, but it's been 15+ years since I've written a sort algo. The idea of being forced to come up to a solution to an unknown problem on the spot makes me feel inadequate.
When interviewing engineers at my last gig, we tried to find people who will "get things done", which in turn depends a lot on your specific job role. For a good majority of the software dev positions we had, getting things done didn't require in-depth knowledge of arcane data structures or algorithms. We just needed the candidates to be smart, and ideally have some experience in what they were being hired for.
So for say an iOS dev position, we would pick the candidate who had released two apps on his own but maybe didn't know much about say red-black trees, vs. the candidate who knew all his CS theory but hadn't yet written a single line of iOS code. We also valued good communication skills, and what Linus refers to as "good taste".
However, we did have a few roles (machine vision, big data, etc) where algorithmic knowledge was essential to getting things done. And for these roles, we always favored candidates who had excellent math & algorithmic chops.
So it depends. I think the problem really is that most interviewers run all candidates through an identical "favorite list of questions", regardless of what the role is. This is quite unfortunate.
Sorry this isn't directed at you, but I view that phrase on the same level as "changing the world".
"Getting work done" is essentially what we're hiring people for right? As long as you can get done what you were hired to do, it shouldn't matter whether you suck at algorithms, are not a "ninja", don't fit "culturally", and whatever other weird things companies look for in candidates. It's as prosaic as it gets, and IMO it's the absolute correct metric to use.
It's as different as it gets from "changing the world", which honestly very few companies are actually doing, and is hence a source of irritation for me as well.
I go back and forth on this. I do machine learning/backend large scale engineering stuff. I have typically found that very rarely do companies actually really grill me on these things. It is mostly computer science theory (a.k.a algorithms/data structures). It used to annoy me a bit especially many questions have embedded tricks that make them dramatically easier. E.g. checking the validity of a BST is as simple as checking that the invariant left subtree is smaller than the root and right subtree is larger than the root is maintained. How you choose to implement that might trip you up, even if you stumble upon the fact that recursion is necessary and key.
On the other hand, once you intensively go through the process of studying these problems. You become aware of how incredibly rich the field of practical usage is. For example, order statistics can be efficiently organized using a rank tree. These are clever tricks that it is nice to have floating about in memory. Because they help you know what to google for.
I've been to a couple interviews lately and this has been the first time (in my career) that I have been tested (with time constraints too, mind you). I was either pointed to a whiteboard, or sat in a room with nothing but a couple sheets of blank (unruled) paper, a non-erasable pen, and a list of ~10 algorithms questions with a few to be implemented and their running time, and memory footprint to be explained.
I was not prepared, at all.
I have been developing software for about 17 years. Do you have any idea how many times in my career I have been asked to write a heap sort, a trie, or create a power set? Never. So, I had forgotten some of the specifics of how to implement them. Let alone on paper. A quick note... My handwriting is atrocious. I'm 41 and I am extremely embarrassed as to how bad it is. I can play classical guitar, but I screw up everything I write or attempt to draw. I thought it was a dyslexia thing or something, but I don't seem to have enough of the symptoms for that. That's pretty much why I liked using a computer when I was younger; I could fix my mistakes. So, needless to say, when I am asked to write stuff down I kind of freak out.
Anyway, there is a reason I have reference materials and the Internet. If I don't remember the specifics of something, I go look it up. I know what a lot of data structures and algorithms are, but I just don't bother memorizing all their specifics. I know what to look for. I read the description and can decide what the best thing to do is. Sure, I remember the basics of the major algorithms and data structures, and some of their their Big O characteristics. Implementing these isn't really what I do on just about any given day.
So, what have I been doing about it? I've been spending the last couple weeks going back over the "Algorithms" book (http://algs4.cs.princeton.edu/home/) and grabbed all the videos from the Coursera courses on the same book/topic.
I admit it's all my fault. I have written a lot of very successful applications over my career. These have fulfilled requirements for power generation, real estate, healthcare, search engine, and marketing companies. Using higher level abstractions (like using an OO language) with industry tested APIs for sorting, lists, trees etc.. kind of makes you push that stuff to the side because for 95% of the development, that kind of low level detail is just not necessary.
Now, of course, this really depends also on what type of development you do. Sure, if you are writing a lot of C code, you may need to manually write these structures. Or, if you are writing low level code (game event loops, collision detection, file system stuff, you know) that needs to run as optimally as possible, sure. A lot of us write applications that take in data, and spew it back out. Heck, a lot of developers are forced to write just a hell of a lot of SQL queries and they'll never see a data structure beyond a class file, an array list, and a result set.
Again, I am attempting to better myself now. I don't know how long it will be before I can answer some of the more crazy questions I have been asked though.
TL;DR I was not prepared, at all.
The problem is that there is a belief in the industry that 15-30 minutes of technical interviewing tells more about a candidate than that person's entire career history. I have seen no actual data to support this belief.
I think someone who has a history of having built successful applications is far more likely to be qualified than someone who happens to have a good memory for algorithmic solutions and performs well under the stress of an interview situation.
This interviewing approach may make sense for entry level candidates who have nothing more to show than what they have learned in their CS classes but applying it to an experienced professional is simply brain-dead.
Actually, this is only true when there is no social proof. Once you have people who can vouch for your successful application building prowess in some form or the other, you will find interviewing to be dramatically easier.
"Never memorize something that you can look up."
To be clear, I have an enormous amount of respect for people who enjoy the design aspects. Writing CSS, using Photoshop, etc., requires a lot of skill. My point is simply that there is a divide among those front-end developers who are drawn toward programming and those who are drawn toward layout and design.
This might make the expectations of a front-end development position much clearer, allowing for a simpler interview process.
If you don't know CSS, HTML and DOM very well, then you're probably going to be over-engineering your front-end apps.
It's definitely a tricky area of development, that's for sure; pitfalls and subtleties abound.
They are non-Turing-Complete programming languages, and part of that is having limited control structures. "Design patterns" aren't a language feature, have nothing to do with being a programming language (architecture has design patterns -- in fact, that's where the term comes from), and CSS and HTML both have design patterns (and piles of books describing them.)
There's already a distinction commonly made between "front-end developers" vs "designers". What more do you think is needed?
Hiring managers knowing the difference...
Wrong! CSS is in fact a turing-complete language. :) I know it sounds weird, but it's true. Turing-completeness can be formally proved for CSS.
Where's the proof?
I am aware of a supposed proof that CSS3+HTML5 is Turing complete (but it relies on specified user interactions that aren't part of the defined execution of semantics of either language), but I've never heard of one CSS itself.
Anyway it seems you are quite familiar with the topic, and I believe you heard all the recent buzz around rule110 etc. But a lot of people don't know about this interesting fact yet.
In Canada, there's a very strict definition for engineer. If you don't have an engineering degree from an accredited university, and a professional designation, you cannot call yourself an engineer. They take it very seriously since it's a regulated profession.
Obviously everyone is free to draw their own lines (outside of Canada at least).
I always thought an engineer was someone who puts scientific or mathematical theory into practice and to solve technical problems. I'm ok with someone giving themselves the title of engineer if they do that for a living. On the other hand, they should not call themselves a "Professional Engineer" without the proper accreditation.
They also drive locomotives, for some reason.
100% agree. In the US I don't think it's as strict as Canada (may be wrong) but I know one has to take an FE to be called one. People in the software field, however, running around themselves engineers are more often than not, not putting any theories into practice but instead using the tools that actual software engineers (those that create software packages/tools/languages/compilers etc) make, essentially making them a journeyman of sorts.
I studied computer engineering and have no desire to take the FE exam, as being licensed is almost entirely useless in my field. As far as the difference between "engineers" and CS majors, at my school basically the only difference is math requirements, and how math is used in the higher level classes. In ECPE (computer/electrical) we differentiate ourselves from CS by studying circuits, systems, physics which are very calculus-intensive. The area where it crosses over into CS is when you get into computer architecture, digital design, assembly, which is like programming, but due to being so close to the hardware level (working with raw digital logic) it ends up being more math intensive than most high level programming.
Next thing we'll see front-end doctors?
And then there's http://prezi.com/piifihs2ohet/test-driven-css/.
There are only two hard things in Computer Science: cache invalidation and naming things.
CSS (as JSSS) originally did have control structures, and they're coming back as SASS/LESS. CSS is being "modernized" as it were, and so questions about the language are very important to ensure developers are maturing in light of current trends. We're now talking about CSS variables in Standards.
HTML and CSS fall dead center between "the two hardest things in computer science": How do we name these files for inclusion via AJAX? How do we develop CSS abstractions and class-based architectures? What about LESS/SASS (since no one should really be writing raw CSS anyway)?
There are only two hard things in Computer Science:
cache invalidation, naming things, and off-by-one errors.
False dichotomy. How about a smart person who knows a lot about X and is creative and logical? They do exist.
I feel like many interviewers want to categorize someone in to one of those two categories from the outset - "this person already knows a lot about XYZ, therefore, I'd rather look for a smart person who doesn't know XYZ and teach them". Sounds crazy writing it out, but it's the impression I got years ago interviewing. It's also the impression I get from friends of mine who have interviewed in the more recent few months.
The problem here is that firms tend to prefer giving "engineering interview problems" to everyone, and do not want to segment interview questions by position.
I think I see what she did there..
I remember coming across this other "Learn Front-end" list: https://github.com/dypsilon/frontend-dev-bookmarks on HN a little while ago and thought it was a great example of just how scattered Web-FE education still is. Everyone has their own favorite "book" and there's no K&R that you just pick up and read.
That one sentence pretty much addressed all of your questions and concerns. So instead on hacking the apparent process, read that sentence again and get it. This is pretty much an absolute truth in almost any industry for almost any skill. It's especially true in tech because:
- "X" will be different in 2 years anyway.
- "X" will be VERY different in 4 years.
- Well funded companies want long-term talent.
- Start-ups seeking their place want long-term talent.
- Companies with long-term vision want long-term talent.
- A jack of all trades is usually better than a master of one.
- If it's so complicated to learn, it's too complicated to use.
When we bring someone in for an interview, we generally already have a pretty good idea of their technical skill level. Part of the filtering process is asking to see their work, either code samples or a portfolio. For frontend engineers it is especially easy to see their work since you can load it up in the browser, inspect, interact with the console, etc.
If we are impressed by their work, the interview is 90% making sure they are a good personality fit, 10% making sure the work we looked at was actually theirs. We probably end up asking slightly more frontend-specific questions than the author experienced, but probably not much.
We find that this process generally works quite well, but a few people that we gave offers to did tell us they were surprised because they felt they had bombed the interview, assuming that since we didn't get into a lot of nitty gritty technical stuff or ask them to write code on a whiteboard, that we had already decided we weren't going to hire them.
> How well do you think you work with other fellow developers?
> Given a choice, would you rather work alone or in tandem with someone?
What are the "correct" answers to these? Or more specifically, in your opinion what are the "wrong" answers?
On the first, the problem I see is one of self-reporting. We have seen developers self-report a 9 on something, only for us to determine later based on the interview that they were more like a 5. We didn't put value on either of these numbers, because both were relative - the "9" was presumably relative to his previous job environment, and the "5" was relative to ours. (At another company the person could've been a "2", for example.) Fact is, it doesn't really matter - we were just looking to see if the person can add value, regardless of whether they were a 5 or a 10.
On the latter two: we have had "loners" crank out incredible bits of code on their own, and "team people" do the same as part of a larger group. We have also seen people switch between the two "personality types" based on context - the specific project, their team mates for the project, and so on.
So we prefer not to ask these types of questions as we don't seem to get any relevant information out of them, but perhaps we're missing something, and so I'm curious as to what your motivations are.
In any kind of engineering role, not just front-end, having domain experience/expertise certainly helps you be more productive from the get go. In a previous company we hired developers with good CS chops but no iOS experience to build our iPhone app - they picked it up, but it took a couple of years and numerous rewrites to get an awesome product. Thats a huge opportunity cost. You'll end up with a better product right off the bat if you hire an expert, especially with technologies which have a ton of quirks and nuances.
So why wouldn't you want to hire a front-end expert? In a lot of smaller companies flexibility can trump expertise - having an engineer who is smart and can work across the entire stack is essential in smaller teams. That doesn't mean they won't be primarily doing front-end development, but its helpful if they know their way around the back-end to some extent without hand-holding from other engineers. A good candidate needs to be smart enough to quickly pickup new tools and techniques, and it is important to determine this in the interview process.
My question is why didn't you leave the interview upon seeing it was a waste of time?
Also, they flew me up there, so what was I gonna do?
Interviewees always forget to figure out why they interviewer and company is asking these questions or requiring particular knowledge. Next time just ask them!
I don't really worry about functions like these until a need arises, and when it does (and I don't know how to do it), I learn until I do.
This is an absurd way to recruit front-end talent and partially explains the so-called talent crunch.
Slow buggy ugly WORKING RELEASED product is a much-much better than ideal clean and effective thing not yet ready for release for a few years in row.
The point isn't that I'm a unicorn, but that good developers can exist outside of code challenges.
People like me, that are self-taught and work super hard in order to improve our craft...we're not appreciated enough.
Everyone wants a rockstar, forgetting that drummers and bass players add a lot of value.
I struggled with the first question. They asked me if I was interested in a non-dev job because apparently they liked my personality and thought I may be a good cultural fit. It struck me as odd that they liked me enough to inquire if I'm interested in other positions, but only gave me one chance to show them I could be a frontend candidate and the sole interview question wasn't even frontend oriented.
So I'd pose the question back to you -- did you provide them a portfolio or any code samples that would have made the front-end questions redundant?
If they had, then maybe I'd agree with you, but it seemed like many of them were just going through the motions. It seemed like they interview people all the time.
I bet you hit the nail on the head.
At my current job, I've had weeks where I've been on an interview loop every day. At that point, I'm not going to spend much time looking at your github code in depth beforehand each day. Especially when it's a candidate whose area of expertise isn't the same as mine, so I wouldn't know what to look for. Ideally we'd be better able to match interviewers with interviewees, but if we had enough people to be doing that, we wouldn't be in the mad hiring rush that ends up with a developer doing five interviews in a single week around career-fair season. ;)
(My last job was a much smaller company where each hire was weighed a lot more, and we absolutely would've looked at all that stuff there.)
However, I always start off asking about a specific project from the candidate's resume, usually the one that I think sounds most interesting to me. Depending on how long they take to explain it, or how interested they seem to be in explaining it, I'll follow up with a more open-ended question of what their most interesting or challenging project was -- if you can sell me on that project, it's just as big an influence on me me as the coding or design question that I'd also ask.
But I have coworkers who don't ask about other projects like that, which I think kinda sucks.
When I do interviews, I want to know that you can program, but I care more about whether or not I can work with you.
I will say that when interviewing for previous jobs in the past (at smaller companies), I got asked a lot more front-end questions. Maybe it's just a big company problem.
Big companies, even famous ones, have moved so far beyond their scrappy "gotta survive" days that they have become quite lost in their bureaucracy and arrogance.
Good breadth, no one gets bounced for not knowing a couple of the answers, great way to get a larger picture of what the candidate knows (or doesn't!).
Designers-turned-JSers tend not to do so well on data structures and bits and bytes.
After the five questions, I move to HTML/CSS questions: inline vs. block, what does float really do, the display property, valid values for display besides "none", visibility: hidden vs display: none, position, absolute vs. relative (with relative offset parent questions thrown in).
For the JS portion, I ask scoping, closures, global object, the values of "this" based on calling context.
I like front-end engineers who are also, y'know, engineers. I like working with people who I can say "that distributed system has performance characteristics akin to a hashtable" and they know what I mean.
At the same time, I've come across far too many developers who assume "front-end" only meant HTML, CSS, and jQuery.
So whenever I've coached technical hiring managers who have no experience with front-end development, I'd tell them to go right ahead and ask questions on general programming logic. Even if the candidate's verbal answer is incorrect, the thought process behind trying to answer it can be helpful.
FYI, the type of phone screen questions I would ask are:
+ Why is a doctype significant? (HTML)
+ What is the box model? (CSS)
(You'd be surprised at how many purported front-end engineers get these wrong.)
These were accompanied by general programming logic questions. They all designed to assess the developer's ability to communicate and explain, and not the developer's technical skill. For that, I looked at code samples and the results of a take-home code exercise. And the specificity and difficulty of the questions would depend on the stage of the interview and level of candidate's experience. The "What is the value of 'this' in a method?" question is a great one too.
I won't be able to get a job based on algorithm/standard CS interview questions.
If I see that you mentioned design experience and Backbone in your job posting and then you quiz me on Rails and database queries I'm going to feel like I'm attending amateur hour.
However, if you state that data structures, algorithms and all that other great CS stuff is fair game in the job posting or the follow-up emails – then go ahead.
Don't envy the front-end developer. At this point we have to be prepared for anything.
Google's publicly available prep material reinforces this third point, even if they don't say it explicitly. They recommend books, point you toward places where you can learn the concepts, and tell you if you fail once, try again in a few months.
I've also had good experiences though--I liked one where I had to build certain UI components and get my code evaluated in real-time.
Trying to judge people with questions like this seems like a misguided endeavor. Yes, it's probably valuable to know that bitshifting is roughly equivalent to *2 and /2. But that's more like trivia - the chances you'll actually use that in real life is really low. I've had to work with people that think bitshifting is an appropriate optimization for division/multiplication by even numbers. I then have to explain overflows, underflows, and the fact that the compiler will compile it to shifts if appropriate anyway, so don't sacrifice readability in the name of micro-optimization.
That generally sucks when you're interviewed by assholes who have no idea that the specific platform that you might work on requires.
Consider most front-end engineers ALSO to be designers, and I'd suspect thats where I would drive the interview. I would wish the same treatment.
Also lol that the interview questions are basically EITHER memorizing formulas and remembering why something was that way or trying to cram down a solution on the whiteboard in the little time you have.
The latter is more admirable, but depends on the situation at hand. 5 minutes, white board, using your fingers as eraser.
Assholes, no. They're human beings with blindspots. Just like 100% of the rest of us out there.
While I term myself as more of a frontend developer currently, I also know CSS pretty well (I sometimes fix bugs the UI team can't figure out), and I am currently transitioning to doing some backend work at my current job as well.
All developers should strive to be full stack, and designers should strive to know code more, but realistically speaking, not everyone is there yet of course, so you have to focus on developing the talent or hiring it.
And then of course there's the 3rd dimension to full stack which is DevOps.
If you're just starting out you need people who can do all 3, even if they're kinda mediocre at some of the parts. But when you grow, and your product starts maturing, you need expertise in all areas to really have a polished product. Otherwise, you're going to be stuck with something that either has a really polished front-end but a dog-slow and unreliable backend or vice-versa.
My frontend experience going into this interview was almost entirely jQuery, with the exception of one 2 month freelance project where I had a crash course in AngularJS.
I was asked a ton of technical frontend questions, and I was able to answer them at a conceptual level but not from experience. I got the job, and I think what was important was my broader experience as a programmer, not the answers to specific frontend questions.
I think because of this, companies are just being realistic when they interview for frontend positions based on general programming knowledge and experience. Maybe in 5 years they will drill down more, as the pool of expert frontenders expands.
My immediate idea is to derive a graph where nodes are actors and an edge between 2 actors means they've been in 1 or more films together. I believe the shortest path between them and Bacon could then be found by breadth-first search.
It looks like that graph would be quite slow to derive though - my naive pseudocode being something like:
for bucket in hashtable:
for actor in bucket:
if actor not in graph, add a node for actor
for other_actor in bucket (up to actor):
add an edge between other_actor and actor
Instead, your graph should comprise movies and actors as vertices (edge = actor was in a given movie), and to get the Bacon number you just halve the distance in this graph.
So you code would look like
for bucket in hashtable:
add node for bucket
for actor in bucket:
if actor not in graph, add a node for actor
add an edge between actor and bucket
add an edge between bucket and actor
This image from Norvig's AI may help explain it better than the wiki page: http://www.massey.ac.nz/~a159302/lesson3/fig03_17.gif
A good friend recently interviewed at multiple well known and respected internet companies for an Android position. This guy is perhaps a global authority on Android. Technical questions were of the computer science type, and did little to illustrate the substance of value the companies were actually trying to hire for.
Rather than take the time to understand whether he really, really knew Android, they wanted to see if he could traverse nodes in a tree. Two companies even asked the exact same non-Android specific question.
I have had the exact same experience with the author of the article regarding a total absence of actual front-end related questions, though. Not sure how to feel about not getting those gigs.
Another one that popped up in an interview was sub-string matching, which I bombed, but after learning Boyer-Moore-Horspool I have a much greater understanding of efficiently designing algorithms. It is the algorithm some browsers use under the hood for String.prototype.indexOf . Here's that code, https://gist.github.com/derek/8035740.
I don't expect from a front-end engineer to just drop random jQuery plugins on top of each others.
It is interesting that the company I ended up at-- while they did ask some standard algorithm and 'how do you think' type questions-- there were also many questions probing my front-end skills, including some quick JS coding problems. The interview just felt SO different than anything else.
Thanks for posting this!
Having said that, I'm surprised there was only one CSS question, and the suggestion to combine questions with front-end specific knowledge might be a good way to ease into the interview.
So, perhaps this can get you started.
I plan on getting a copy of: http://www.amazon.com/Cracking-Coding-Interview-Programming-... too.
How does the referenced jquery statement represent basic CS principles? OOP? Definitely not that.
1) Make these two discs sit next to eCh other. What other ways you could do that? Why each way bad/good for what?
2) center this. Other ways? Bad/good about each?
The engineers were like anywhere else-- and a fair proportion of them were very good-- but there are just a lot of arrogant people in the managerial ranks of the Valley. After you get an offer and you get to the negotiation phase, most Bay Area firms try to lowball you because-- even if you're from an objectively better place like NYC or Austin-- obviously everyone wants the privilege of working in California. (Expensive housing even in the suburbs, nightmarish traffic, and the most aggressive homeless population in the U.S. Where do I sign up?)
Then there was one silly game company (which, presumably unrelatedly, is now being sued) that wanted me to sign a full NDA just to do a coding test. Not an NDA over the material of the test (which I would have signed) but one that included a one-year non-solicit covering all employees of that firm.
I could be generalizing negative experiences, but it seems to be like they didn't prepare for your interview (recognizing that you were a front-end engineer) because of that obnoxious (and completely false) assumption that, if you were any good, you'd already be in the Bay Area. Obviously they had enough interest to take time out of their day, but not enough to prepare.
In New York, there are a lot of startups that are of low quality; but the arrogance of Silicon Valley is unparalleled. Wall Street's reputation would have you expecting it to be worse but, by and large, it's not.
I have seen sort of the opposite, though -- if you are experienced, you likely have a family and there is no way in hell you are moving to the Bay Area.