How to Ace a Startup Engineering Interview Part 1
stdout.heyzap.com
stdout.heyzap.com
It sounds like there is some personal history here. Is there?
*i don't have a relationship with hayzap and i've never worked for a CMS company.
As a soon-to-graduate who knows both Lisp and Haskell, I'm curious what exactly this means.
Relevance is one famous company that staffs world-class engineers and does EI[0]. They also write databases[1]. and languages[2].
[0] http://thinkrelevance.com/clients [1] http://www.datomic.com/ [2] Clojure
* He recommends CLRS for learning the basics of algorithms. This is like reading baby Rudin to learn about the basics of numbers.
* He edited his post 2-3 times because he can't identify whether Common Lisp is a purely functional language or not.
* He mentions that side projects don't need to be complex, then suggests "simple" iPhone apps or open source libraries. In practice, neither of these is "simple."
I am sure the engineering challenges at a very small, simple CMS site are truly mind boggling.
And you left out his earlier job, at a company which is known for significant "engineering challenges".
Wha???? You didn't even mention Haskell under pure functional languages, but listed three that aren't.
Also I'm tired of the "learn C" mantra. You don't need to know this language to understand pointers and their difference from references. Or the different approaches to memory management.
Clearly you haven't interviewed any Lispers. The concept is innate to cons cells and how they're constructed.
This close to the metal mindset is what makes C/C++ valuable for learning how code compiles to assembly, and understanding _how_ your program is executed.
"Improve your Theoretical knowledge" ...followed by... "Learn C"
I obviously have a completely different idea in mind when it comes to computer science theory than the author does.
int bsearch(int *values, size_t len, int term);
By the time we finish going through this exercise. I have a pretty good idea how they do with basic algorithms and indirection (pointers). In fact, pointers are a great way of testing a candidates ability to deal with indirection.
You can come up with simpler C pointer questions that also do not require tricks but this does the trick for me.
And yes, everybody gets binary search wrong, but that's okay. I learn a lot about a candidate when they are doing the exercise.
The comments here have corrected several problems with your understanding of functional languages, which leads one to believe that you have dabbled with them, but really don't know them all that well.
You are attempting to target a more experienced demographic of developer, but your article is catering to newbies. Masquerading as a guide to 'Ace a Startup Engineering Interview' is just salt in the wound.
We don't need any more guides on preparing for interviews. There are several good ones that exist, the advice that already abounds isn't going to expire anytime soon.
Maybe you should consider titling yourself software engineer or program developer until you've produced something that shows mastery to the world.
The issue with the phrase "data scientist" is that it is overused, is highly ambiguous in what people mean when they say it, and when someone identifies themselves as such does not communicate any clear lower bounds on expectations of relevant background and skill.
This is not an appropriate fora for getting into an argument about what formal training vs autodidactism (i have plenty of both) is sufficient for being a scientist of one sort or another.
I am open to hearing reasoning that isn't based upon institutional validation. There are many scientists whose work is not in the domains which they had formal training, eg Oded Schramm, Cosmo Shalizi. They could be considered amazing scientists, but surely they were scientists by intellectual inclination even before they did their great work, and likewise successfully defending their phd's didn't make them scientists, it merely gave them the title of doctor!
Calling oneself an engineer of software is misleading in my mind, because in many countries engineer is legal certification of reliability.
Calling myself a program developer would be a gross misrepresentation of what I do, so i do not call myself that. I solve hard problems and build better tools for solving hard problems.
As for showing mastery to the world, I care not, open source is great, but ability to self publicize, or have great open source projects, have absolutely no relationship with being a good computer scientist, though they work synergistically together in a wonderfully positive way.
At the end of the day, everything is some sort of social convention, and the folks who I respect would consider me a computer scientist, and thats good enough for me.
have a great rest of your day on the internet good sir.
Why burn all that learning time to get a startup job, probably with reduced salaries and equity that might amount to zero if it fails. This is thesame risk you will face with your own startup but the difference is that the upside or equity is bigger if your startup takes off and you are doing it with the one language you know.
Wow. That just made me feel old and sad. Wasn't it just a few years ago that everyone had to know C and C++?
I am sure there are exceptions or other reasons to this, but I feel that once the universities switched over to Java, C/C++ went on a big decline.
Though it's generally true that most of my friends prefer Java over C/C++. I might be different because I learned programming in high school and started with C.
Speed, timing, or control; and the first is less true that it has been.
Check out the hackernews discussion on the subject: http://news.ycombinator.com/item?id=4275140
We try to figure out how quickly a person can learn and be productive by giving a small problem in an area that the candidate is not strong at. We then give them the complete internet access and a development environment and ask them to write code for the problem. We also pick a problem that is highly relevant to the day to day work, not a theoretical one.