You don't need to be an 'investor' to invest in Singletrack: 6 days left: 95% of target - Find out more
I have been a java programmer for over 16 years. The last 9 years were trader aligned in a fixed income finance role. I did my job as a programmer and was well regarded.
The issue I am facing now is that every time I go for a front office java dev job in London I end up being given an algorithmic based test. These range from traversing a red/black tree through to writing a bubble sort for a linkedlist.
In the whole time I have been programming, I have never had to do this stuff and having done Chemistry at uni and not CS it's all rather alien.
is this becoming the norm as it's frustrating to be rejected on the basis of a tech test performed by having to write code on paper, when you know that your previous experience will easily enable you to do the role.
keen to hear from others as to whether this is common across all industries or just investment banking jobs in London.
Thanks
Tell me about it. I've had some bastard hard tests on paper. One place, I thought I did pretty well but didn't get it - I told the agent and he sighed and told me not to worry - he'd sent dozens of candidates and they'd all failed.
I also sat a test once that was meant to be open book - without books or internet access.
Read up on some computer science, and keep trying - eventually you'll learn all the things they use for tests 🙂
In the last three years as a freelancer, I've never been asked to do a coding test.
Rachel
We test our devs. The complexity of the test depends on the level of the job they are applying for. You wouldn't get asked to do those tasks for a "graduate" position, but you might if algorithm design was key to the role you were applying for.
They are not "on paper" (we use Hackerank) and people can google as much as they need to etc. I was a bit sceptical when we started doing it. I now wouldn't employ anyone for a development role without seeing what they produce, its clear there are (i) CS graduates who can't do even basic problem solving code; (ii) Experienced developers with many years experience in a narrow niche who can't do much else (I'd see it as particularly important for someone who doesn't have a formal qualification in CS.); (iii) Several people who have become "out of date" with modern approaches/techniques, or who claim to be proficient in a language but actually are just using generic approaches not optimal for that language.
Its also a good way of seeing how much someone actually wants the job - up to 2 hrs doing a test is a reasonable commitment!
Now it could be that these are crazy companies to work for with weird recruitment approaches - or it could be that they know exactly what they need and you don't fit the bill.
Its also a good way of seeing how much someone actually wants the job - up to 2 hrs doing a test is a reasonable commitment!
I've been given a few tests to do at home. Wayyyy longer than 2 hours. OK, the better you are the quicker you're gonna get through them, but they've been in depth, to say the least.
I just find the practice of getting a candidate to write code on paper without internet access or an IDE really strange. It has no relevance to how you work in a real dev environment. The role was a BAU risk and p&l dev one, so not algorithm based as all of that is done using quant models.
The job spec just stated a very good grasp of multi threading was required. The test regarding writing a blocking queue algo was relevant, but a bubble sort algo just seemed a little random.
allthegear - Member
In the last three years as a freelancer, I've never been asked to do a coding test.Rachel
Lucky you!
My last test was Christmas Eve and the one before that was a .Net 1.1 test which I aced. Horrible company and role, though.
A bubble sort isn't a normal day to day need. But it's a pretty common 'play with the language' thing. Almost a next step from 'hello world'.
The paper test sound odd to me. Partly because it'd be tedious reviewing it. Maybe that was the purpose of the bubble sort: if that wasn't done right you needn't look any further.
Hope you find the perfect job soon.
I'd just like to add that I have also secured jobs by aceing tests 🙂
Oddly enough, I'm only an occasional hacker but I've written loads of bubble sorts for linked lists over the years, first time was sorting high score tables in a game in 6502 assembler circa 1982...
I tend to test folk by showing them code in an IDE and asking them to tell me what it does, then tell me what's wrong/could be better, work through it with me.
Seems a bit easier/fairer than asking them to code on the spot and you can tell if they know their way around code or not. Not a very in depth test of course mind.
Similarly to IA, we prefer to give people some flaky code which has some obvious and some rather subtle bugs in it, and get the candidates to talk through what it does and suggest improvements and see if they can see what is broken with it. Also like to hear how they would write the code themselves if starting from scratch, where the 'correct' approach would typically involve using various library functions etc rather than cooking your own half-backed solution. This tends to give us a much better feel for the candidates knowledge of the language than traditional 'write some code that does x' tests.
We've tried giving coding tests in the past (including bubble sorts, when we were after an algorithm developer with a CS degree - scarily most candidates did not know what a bubble sort was despite having the degree...). Overall candidates tend to either ace them, or fail abysmally, with no middle ground. Not sure they actually told us much though...
I invented the bubble sort algorithm when I was a kid, before I'd read about it.. 🙂
After seeing some crazy C++ code I'm thinking about giving tricky template questions to candidates and do ?*not* hire if they can solve them
Saw the above as a tweet the other day and it amuses me, seems appropriate here 😉
Do people actually use bubble sort in real life? Maybe the way to pass the test was to politely suggest a better alternative.
Do people actually use bubble sort in real life? Maybe the way to pass the test was to politely suggest a better alternative.
That too was my thought. What I am trying to deduce is how as a non CS grad do I ensure that I understand these CS principals without having to do a CS MSc?
My experience in finance has been very much about having a very good understanding of concurrency and how to utilise the api without writing your own code.
If I needed to be able to have a linked list impl that I could reverse I'd use the api as follows.
package linkedlist;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class LinkedListReverse {
public static void main(String[] args) {
List<Node> list = new LinkedList<>();
list.add(new Node(1));
list.add(new Node(2));
list.add(new Node(3));
list.add(new Node(4));
list.add(new Node(5));
list.add(new Node(6));
list.stream().forEach(node -> System.out.println(node.getId()));
//reverse
Collections.reverse(list);
list.stream().forEach(node -> System.out.println(node.getId()));
}
private static class Node {
private final int id;
public Node(int id) {
super();
this.id = id;
}
public int getId() {
return id;
}
}
}
Maybe I missing something here?
On the flip side, the new A level computing course states that all sorts of algorithms will be tested. Bubble sort, linear search, binary search, insertion sort etc. In 2 years time it'll be on the GCSE spec.
If your applying for a job that I'd expect to test that A level and in some cases GCSE knowledge can be recalled and applied.
think they will become more not less frequent...
http://www.wired.com/2015/04/hire-like-google/
you could google Lazlo Bock too.
think they will become more not less frequent...http://www.wired.com/2015/04/hire-like-google/ /p>
you could google Lazlo Bock too.
That was what a friend of mine said to me earlier. He says the banks have basically started using the same type of questions being used by Facebook and Google when hiring.
I understand from the PhD quant developer sat next to me that this book is good reading for that kind of test
http://www.amazon.co.uk/gp/product/098478280X
I understand from the PhD quant developer sat next to me that this book is good reading for that kind of test
That's reassuring as I ordered that earlier today 🙂
Thanks
Interesting, I've just ordered a copy...
I'm not a quant but I do have a PhD (and have interviewed for google, odd process) - TopCoder has a lot of good exercises of the sort you might get to try, and is quite good in that it forces you to do them against the clock/in a stressful situation.
and have interviewed for google
Did you get the reject T-shirt?
One of our Devs had one...
What annoys me is the idea that knowing all this complex geeky stuff off the top of your head is important. It's not. The job's about analysing the problem clearly enough so that the implementation is simple.
I was once asked what bit of code I was most proud of - and to show it if possible. The project I shared was extremely simple, nothing fancy in it at all. I explained that it was simple because of the way I'd analysed it removed the complexity. Got the job.
I'd use the api
I think the point of a test is to see how you solve a problem - and the api is actually someone else's solution to the problem, not yours!
I think the point of a test is to see how you solve a problem - and the api is actually someone else's solution to the problem, not yours!
I'd expect my developers to be able to recognise when they need to use a specific algorithm (such as a bubble sort), and go find a tried and tested API for one. I'd be more annoyed if they spent time and effort re-inventing the wheel on standard stuff, and increasing the potential for more bugs in business code.
Algorithm based tests are appropriate for development jobs that may require creation of new algorithms (cf Facebook backend, Google search, quants, etc) or for new grad hires, but not for most experienced business developer jobs. I'd rather set a [b]business[/b] problem and have the developer talk to me about their processes for designing, developing, and most importantly, testing the software to solve that problem. I'd also ask to see examples for code they have worked on and have them talk to me about that code with authority.
The job's about analysing the problem clearly enough [s]so that the implementation is simple[/s] that you get the right results on Stack Overflow.
The answer shouldn't matter. Realizing and explaining how the problem is solvable does. If you can express this quickly in Java, that it also shows a strong language competence too.
I'd be more annoyed if they spent time and effort re-inventing the wheel on standard stuff,
Depends on the question. If it's 'solve this example business problem' then yeah, using the API is dead right. If it's 'implement a bubble sort' and you just use the api, that's dead wrong 🙂
Thing is the cost of recruiting the wrong person in contract or perm is high in wasted / time / effort / delays etc.
With the tests, you do sometimes miss out on good (really good) guys, but the ones that you do get, usually are good too so it does cut out the guys who don't know their eggs as well as some good guys.
..so they are not perfect but they do help.
There has to be a balance though and some tests are overly long. One of my DevOps guys came up with an awesome test but it was the best part of a day's work and the candidates just didn't need to do it and walked in to roles down the road. We trimmed the test and it helps both of us.
It is seriously amazing how many candidates are not up to the mark though (not just java devs) and with agents not being able to weed them out the tests help.
Good luck!
I got made redundant from a long time programming job, a bit over 10 years ago. Went for a couple of interviews, one asked me to bring some of my work which was awkward; the other asked me to undertake a test both on site and multiple choice. Another one had an on site test (which I now recall was the Newton Raphson method, couldn't recall it at the time).
I don't think I got any of the jobs ( 🙁 ) - maybe too long in the same environment didn't help, maybe I just wasn't quick witted enough. Probably true. Eventually moved locations, and only then got a job freelance working in town, with folk that knew and trusted me..
Come and work at our place. Seems we'll take anyone as long as they can spell jaba.
I'd be more annoyed if they spent time and effort re-inventing the wheel on standard stuff, and increasing the potential for more bugs in business code.
That has been my argument for years now. I have seen smart devs implementing their own solutions when there is a perfectly good open source api that does the same thing.
The whole point of an api is so you don't go reinventing the wheel.
I also think that too much emphasis is put on the tech test. I have seen really smart guys join an org, only to then embark on a one man mission refactoring code to how they think it should be done. Most then get bored half way down the line, leave and then the place is left with 2 different solutions to support.
My theory is if you need a rocket scientist, then hire one, if you need someone to do BAU on a legacy system then you hire accordingly.
I have seen smart devs implementing their own solutions when there is a perfectly good open source api that does the same thing.
That's the meaning of the phrase "a good programmer is a lazy programmer".
I also think that too much emphasis is put on the tech test. I have seen really smart guys join an org, only to then embark on a one man mission refactoring code to how they think it should be done
Yeah.. a lot of geeks focus on the ideal technical solution, when what businesses need is the ideal business solution. Now, there are a lot of reasons why they very often overlap - but there are times when they don't.
Being able to spot this is why I am enjoying being a consultant at the moment.
[url= https://www.reddit.com/r/cscareerquestions/comments/20ahfq/heres_a_pretty_big_list_of_programming_interview/ ]the reddit interview question thread[/url]
That is freaky!! That is my mantra and I have never ever heard anyone else saying it. Such a true saying, but so few people actually get it."a good programmer is a lazy programmer".
I didn't invent it, I thought it was a well known phrase. It means you often spend twice the effort saving the effort, but the effort stays saved for the next ten years.
Thanks, but in all my years coding I have pretty much never needed to use any of that stuff. I know that's no excuse, but all seems to bloody pointless!the reddit interview question thread
That's not the point though - it's about solving a problem - those are just well known problems that have been studied. That's like saying you don't need to teach kids how to add because they can have calculators.
Yeah, fair point. Just feel like I have a mountain to climb to secure a role that I did without issue in my last firm. Maybe taking redundancy was not the smartest decision I made!That's not the point though - it's about solving a problem - those are just well known problems that have been studied. That's like saying you don't need to teach kids how to add because they can have calculators.
Yeah.. every time I get a stupidly over geeky interview, I just wonder what the place would be like to work in.. can't be good.
I'd rather someone talked to me and tried to figure out my intellect beyond the nerdy topics I can boss.
Traversing a red black tree is no harder than traversing any binary tree.
Being asked to implement a red black tree on the other hand, without reference, would be a mean thing to ask in an interview. The rules for rebalancing are tedious and I can't imagine ever wanting to memorise them.
I do think that any programmer should have a good grasp of algorithms and data structures. I do also know that barely any programmers do. The amount of stuff at work implemented with just arrays is astonishing. Every time I look at code I haven't seen before it makes me a little bit more sad.
Can you elaborate as I am struggling to understand why this is the case. For example as a java programmer I would have expected that knowing when to utilise a LinkedList over an ArrayList or why you should have an optimal hashing algo when using hashmap to ensure everything is not in a single bucket ... would be more important?I do think that any programmer should have a good grasp of algorithms and data structures. I do also know that barely any programmers do
I am not trying to be awkward, but just really trying to put all of this stuff into context for doing your day job.
For example as a [s]java[/s] programmer I would have expected that knowing when to utilise a LinkedList over an ArrayList or why you should have an optimal hashing algo when using hashmap to ensure everything is not in a single bucket
I've crossed out a bit. It's irrelevant what language you're using, but what you've just written highlights that you understand the data structures you're using.
I am struggling to understand why this is the case.
Would you not be pissed off if a colleague had written some code that you have to maintain that use an ArrayList instead of a HashMap?
I doubt the people hiring you really want you to know how you would implement a red black tree. They want you to demonstrate that you know the benefits of storing data in a binary tree, and further they want you to know that binary trees can become unbalanced, worst case resulting in list like performance and self balancing trees resolve these problems, with some small overhead for insertion. If they want you to implement it on paper on the spot then they might be hiring for a long time but I do think a grasp of why these things exist is important.
