870 karma · joined October 20, 2011
atxjclark@gmail.com
github.com/j-clark
linkedin.com/in/joshua-clark-0b7a6436/
Come pair with me at mobi!
We're seeking talented, full-stack software engineers that are smart and get things done. We're most excited about finding seniors, but all experience levels are welcome. We're looking for candidates in, or willing to relocate to, Austin, TX.
mobi is a B2B mobile fleet logisitics solution. We help companies with mobile fleets service their customers better and faster by optimizing service routes and analyzing GPS data. This means we also help save fuel, tires and brake pads to keep the world a little bit more green.
Our tech stack contains a non-trivial amount of all of the following technologies: Java (Spring/MyBatis/Hibernate) Ruby (Sinatra and maybe Padrino or Rails soon) JavaScript (AngularJS/jQuery) SQL (T-SQL and maybe Postgres or Mongo soon)
We're not dogmatic about the tech we use. We believe strongly in using the tool that helps us accomplish the task in the best and fastest way possible.
We don't expect you to be familiar with all of the technologies we use. There is a very strong learning culture at mobi. Therefore we do expect you to be willing (nay, excited) to learn about the tech we use that you don't know and to teach us about the tech you use that we don't know. We also expect you to be comfortable with test driving the code you write, with a pair, the large majority of the time. Of course, working in pairs doesn't always make sense, nor does TDD, and we're comfortable with those exceptions.
mobi offers competitive salary; competitive ping pong tournaments; free soda, snacks and beer; unlimited time off as needed; great views from our downtown office; monthly company get-togethers to celebrate our accomplishments
If you're interested, my personal email is in my profile. Here's an explanation of roughly what kind of interview process you could expect: https://news.ycombinator.com/item?id=5441267
Writing the code in an "unusual" language, would net big bonus points, though. I get tired of seeing the same solutions in Java and Python.
First of all, our tech stack looks like this:
Java/Spring(MVC)/MyBatis/Hibernate/etc
Ruby/Sinatra/ActiveRecord/etc
JavaScript/Angular/etc
A bit of SQL (MS)
We look for candidates of all skill levels who have experience with any "systems" programming language (Java/C/C++/C#) and any scripting language (Ruby/Python/JS).
Once we've found a candidate that has any level of experience with both a scripting and systems language, we send them a small coding project. The coding project is very easy. Any experienced programmer would be able to solve it in about an hour. We tell the candidates to solve the problem in any programming language and that the goal is to show off problem solving, testing and design skills.
Once we've received the code, we review it for the above stated qualities with an emphasis on clean, readable and well-tested code. We're not too hard on these code reviews, we just want to try to eliminate obviously poor fits. People who write no tests are immediately eliminated. Hugely over-architected solution? Eliminated. Code is bad enough the person might not actual be able to program? You get the idea.
Once the person has passed this stage, they come in for an in-person interview. They are asked to bring their laptop. When they arrive, the dev manager will show the candidate to the room where they will be interviewed, talk a bit and then come get two developers for a coding interview.
The coding interview is somewhat on a per-candidate basis, but fundamentally the two interviewers will review the code beforehand and find places for improvement. Improvements might be refactorings to make the code cleaner or new features if the code is particularly well-written. We first have the candidate give us a code walk-through and explain what's happening, thought processes, etc. Then one of the interviewers will pair with the candidate for a while and switch out with the other interviewer after a while.
The whole process thus far is an attempt to, as closely as possible, simulate what it would be like to work with this person on a real task. No writing quick sort on the white board. Writing code, at a computer, with an IDE as a pair. Google stuff, whatever your normal workflow is. We just want to know what it's like to work with you.
After the pairing part of the interview, we do a more informal group interview with the rest of the team. We're currently 7 people counting the development manager, a scrummaster/QA and a PM/QA. So the group isn't too big. This is an opportunity for more high-level and philosophical questions. "Why do you want to work here?", "Anything in particular you dislike about Java?". Maybe if they're more senior, I'll have them explain OOP to our designer to see how well they can mentor. At the end of this section, we open it up for questions from the candidate.
So far we've had particularly good success with 1) not wasting our time with people who can't code, can't test their code or are poor at designing the structure of their code; 2) finding good cultural fits - if someone doesn't like pair programming or TDD, we'll be able to figure that out as part of the interview; 3) not arbitrarily eliminating people because they didn't study their CS textbook ahead of time or aren't comfortable writing syntactically correct code on a whiteboard.
|A popular [quick sort] optimization is to end with an insertion sort
What's so hard to test about this? If your quick sort code and your insertion sort code aren't all shoved into one function, you just test them separately.https://github.com/pcottle/learnGitBranching/tree/master/lib
I found Ember to try too hard to be Rails when JavaScript is not Ruby. If you've got experience with Rails, Ember would probably be familiar enough that bending JavaScript into that model would be okay. But I think Angular is more geared toward the strengths of JavaScript (and away from its weaknesses).
It's also a different kind of framework. Rails is so popular that it's understandable for frameworks to want to follow along that model. But Angular takes a completely different approach, trying to extend HTML. Because of this, Angular apps are incredibly readable. Our UI guy who isn't an engineer was able to look at the HTML and understand exactly what the app was doing.
I also found Angular to be easier to piecewise convert an existing project, since any arbitrary element can be your entire Angular app. This might be possible with Ember, also, but I wasn't able to easily figure out how since the documentation is weaker than Angular's.
The biggest problem I had with Angular and our current infrastructure was using the patterns introduced by require.js since Angular has its own opinions about dependency management.
That's gets the whole line including carriage return when nothing is highlighted. You could also cmd+L (expand selection to line) and then cmd+C if you already had something selected.
I vastly prefer open office where developers work in frequently rotated pairs, with separate pairs close enough to talk as necessary. It's a little bit harder this way, but I've found that it leads to higher quality software, higher diversity of knowledge and it's just made me a better programmer (and a better Vim user and a better Unix command line user, etc). I hope I don't ever have to take another job where I'm not forced to both teach and learn from all of my coworkers directly.
If you don't care about fashion, it doesn't matter, though
Does plus or pre/postfix increment have higher precedence?
Probably increment.
Does prefix or postfix have higher precedence?
They're probably the same -> evaluate from left-to-right.
Code is equivalent to num1++ + num2;
But the examples like "what is the difference between substring() and substr()", "What is the lowest cross-browser increment that [setInterval()/setTimeout()] can accurately use" is just trivia and is boring. I have determined by experience that 9007199254740995
(which is 2^53+3) is the smallest not representable
integer in Javascript.
Here's something to drop in your browser console as an amusing illustration of this 9007199254740994 ===
(9007199254740995 - 1)
and 9007199254740995 ===
(9007199254740995 - 1)As for the other problem, I'm confused about why that's the only thing not working. Are you running any other extensions that could be conflicting?
[1] http://code.google.com/p/chromium/issues/detail?id=103281