6 ms·
Disclaimer: I'm posting this under a new dummy account because I don't want this to be seen as feedback from my company. We didn't interview you, but I'm a seni
by honestfeedback 12y ago
Disclaimer: I'm posting this under a new dummy account because I don't want this to be seen as feedback from my company. We didn't interview you, but I'm a senior manager and I want to help w/o implicitly dragging my team into it. (The key word is also "help"; I'm not trying to belittle you, just give my honest assessment of this project, quick as it was to create.)
tl;dr: I agree with the assessment that this doesn't look like the kind of code I'd expect of a senior developer.
The biggest issue from my POV is that you pull in a _lot_ of heavy-weight frameworks and implicit dependencies for what could be a really simple app. To actually examine the application logic of your submission, I have to flip through dozens of auto-generated PHP files, Javascript module wrappers, and empty directories.
Sometimes, calling yourself a "senior" engineer means doing less, not more. The layers of indirection, framework code, and build toolchain applied here make it harder to follow what your code is actually doing. Coupled with a lack of unit tests, it seems impossible to verify in any short amount of time that it actually works as promised.
Even with all that MVC goodness, the separation of concerns on the client isn't great. There's a mix of display logic and app state visible in lots of places. (IMHO game.js is the worst offender here, as the entire game state and DOM rendering are mixed pretty indiscriminately.)
Finally, asking a reviewer to run a bunch of code from an untrusted repo via 'sudo' is pretty much a giant red flag for me. A simple JS+PHP webapp shouldn't require me to do anything as root on my machine. (I'm also not familiar with Composer, but my brief skimming of the homepage, it seems like the whole point is to not require system-wide installation of dependencies, so the sudo bit is especially weird.)
It looks functional, and if you were interviewing specifically at a shop that used these frameworks and tools, it might not be so bad. If asked to review this without that context, though, I would give similar feedback to what you received.
- notaio 12y agoSo using abstraction is not something a senior does ? It seems to me like the contrary. The more experience I have the more I like to abstract things instead of making them from scratch. But even so it seems a bit heavy of judgement to disqualify me with such strong word over this choice.
- wfunction 12y agoA more important principle than "abstract everything away" is "write only what you need". You don't always need abstraction.
- recursive 12y agoThe message you are responding to never mentioned abstraction. You did not address any of the (multiple) issues it did raise.
- arnorhs 12y ago(this is probably not going to be a very popular answer here, since most people enjoy making things abstract, and feel like they're creating value) Making things too abstract, too early, is usually a bad sign. In most cases, the most most specific and straight forward solution to a problem is the best one. There's definitely cases where you're simplifying things by making them more abstract and reusable (but making something reusable before you need to reuse it is a waste of time) -- another good case is where you're using the principle of separation of concerns. I think when I started developing I made everything very abstract, b/c all the books you read would also tell you that was a good thing. It's not. Until you need to, at least.
- dhotson 12y agoYep, it's that balance between abstraction and indirection. Abstraction can be a great tool, but it comes with the cost of added indirection. You want to aim for the sweet spot in the middle somewhere.
- zeroxfe 12y agoAbstraction is good. Gratuitous abstraction is bad. Experienced engineers can make that distinction.
- itripn 12y agoAlso, please do not confuse abstraction with reuse. "abstracting things" has nothing to do with "making them from scratch". You're definitely conflating two things inappropriately there. I can write reusable code that has absolutely no abstraction in it, and I can write code based on an abstraction that is completely un-re-usable.
- deleted 12y ago[deleted]
- rnd33 12y agoIt all depends on what they asked for. Did they ask for an example of how to structure "real"-sized web-application? Because otherwise this could have been seen as a bit of overkill for something where perhaps a hundred lines of Javascript, one sql table (or some other storage) and two backend routes (post score, get scores) would have been enough.
- Ryel 12y agoI'm not the OP but I really appreciate your answer. Thank you for taking the time. What is the "right" amount of time/effort to put into a "job-application" project like this?
- notduncansmith 12y agoAs much as they give you, minus a few hours. Give the impression that you can meet/beat deadlines, but be sure to utilize as much time as you can and deliver something that's of the calibre they're expecting. For example, if they give you 3 days for a project as simple as this, they probably expect something production-ready: polished, cross-browser tested, responsive, etc. Deliver exactly that in under 72 hours and you should be fine.
- notaio 12y agoFYI I had no timeline attached to this test, but who ask candidates to work 3days on something before being hired ?? If its what they expected from me I would have straight refused.
- notaio 12y agoComposer is package management for PHP. Just like Gem or NPM. IMO such a test can be interesting to assess the ability of a developer to organize his logic and architect an application, but using it to evaluate the ability to produce "production ready" applications is my opinion missing the point as it's in the former that you can see the core ability of a developer while the later just requires time investment and tedious grunt work tasks. Witch is why I chose to concentrate on what matters.
- ugh123 12y agoNo, just stop. Listen to what the parent says here. You made it hard for anyone to review your code because of all the framework misdirection. He/she also reports on your liberal mixing of ui and game state code in javascript which points to lack of understanding of MVC, or separation-of-concerns in general. If you want to respond, respond to those items, not excuses <- denotes junior-level mentality.
- notaio 12y agoThere, I posted a response, it was due. Why the dummy account ?
- mahesh_gkumar 12y agoI wish all companies who ask their candidates to solve a coding exercise give honest feedback like this after the end of the interview. Most times its just the canned 'Sorry you are not a fit' or the response the OP got.
- Jemaclus 12y agoIf I gave this level of feedback for every candidate I talked to, I'd never get real work done. I think there's also the idea that we don't want to burn any bridges or upset you. It's easier and safer to say "You're not a fit" than to say "Your code isn't good enough, and here are all the problems we found with it." If you take that poorly, then it stresses everyone out, and I'm at risk of getting irate emails from whoever. Furthermore, I don't want you to be badmouthing our company because you think your code is the shit and we disagree. I think the best way to get feedback on a rejected code sample is to give your code to an objective third party and ask their opinion, like OP did here.
- bmm6o 12y agoFor every 1 candidate who would take it as constructive criticism, there are 19 that would react hostilely or think it was the next step of an ongoing debate. Read some of notaio's responses in this thread and remember that he started this discussion with the express purpose of soliciting feedback.
- msantos 12y agoYour great feedback takes me back to something I've heard in a conference sometime ago. These are not the speakers exact words but nearly.. ... unless the role and the job post clearly state a particular framework as pre-requisite, resorting to frameworks in an attempt to impress interviewers when applying to a senior role is the worse thing you could do. i.e. just because you know your way around Photoshop that doesn't make you a designer, it makes you a Photoshop operator. The same logic applies to coders who are too focus around frameworks. They are not necessarily good programmers.
- notaio 12y agoIn the "Angular, Ember and friends era", not using a front-end framework show exactly that I don't use frameworks for the sake of it.
- notaio 12y agoHere is what I would have replied to the reviewer should he have asked: - The choice of using a Laravel back end was an informed decision to emulate as close as possible what would be my workflow on a real life app. Beside as opposed to front-end framework it has almost no cost attached and makes the back-end more maintainable and agile - Laravel is an amazingly clean framework. Finally the assessment of the basic PHP knowledge such as using PDO to connect MYSQL had already be made on paper test so there was no point repeating this there. - The JS is certainly not perfect, game.js could use some refactoring, but my intent was not to make a production ready app but to show that I know how to write proper and maintainable vanilla JS. Given more time I would have addressed those details (which BTW are not the real issue in that code). Also you'll notice that I chose NOT to use a framework there as it was not needed. Again this was an informed decision. - Sudo: I was worried that whom ever would try to install the app bumped into permission issues so I tried to make easier to install. I should have made a note of that. So point taken here. As for composer, I wouldn't want to work with any company that use PHP everyday and don't know what composer is.
- bjourne 12y agoIf you don't think this guy has the skill of a senior developer, you're either reading hacker news to much or haven't done any interviewing at all. You're right about your criticism of course, his memory game implementation is crap in many, many ways. But in the grand scheme of things, it's details. Most developers in the real world wouldn't be able at all to put it together in javascript in only two days (i've worked with people who wouldn't have been able to do it in two months). Hell, a large minority of developers can't solve the FizzBuzz test so disqualifying this guy for using to many dependencies and requiring sudo is silly.