|
750cm = 7.5m = ~8.2 yards. Given a height of ~3m per floor, that would give the 2.5 floors that I mentioned.
Perhaps you meant 75cm = ~29.5 inches?
If you have an important point to make, don't try to be subtle or clever. Use a pile driver. Hit the point once. Then come back and hit it again. Then hit it a third time - a tremendous whack.
--Winston Churchill
|
|
|
|
|
Daniel Pfeffer wrote: Perhaps you meant 75cm Whoa! Us guys really don't know metric
I wanna be a eunuchs developer! Pass me a bread knife!
|
|
|
|
|
You're a hiring manager. You are responsible for picking a candidate who will be in a long-term position with the company and who you know you will be able to mold/teach. Both candidates are friendly and willing to learn. But there's a slight challenge.
Candidate A writes extremely clean and readable code, follows SOLID principles, writes great unit tests, and overall has the software engineering side of things down, but he knows nothing about algorithms or data structures aside from just using what is provided in the standard libraries.
Candidate B knows all of the sorts, trees, and hashes like the back of his hand and is able to whiteboard them out no problem and answer all of your questions quickly under pressure. However, Candidate B has no experience with object-oriented design, SOLID principles, has a few demo apps which are only procedural in nature, and has never written a unit test in his/her life.
Both candidates are friendly and both seem like they have potential to learn.
Your firm uses object-oriented programming in either C# or Java and produces applications that must meet a efficiency standard and also meet OOP design guidelines.
Who do you hire and why?
|
|
|
|
|
Well what's the rest of the team like? Do we already have a "data structures and algorithms"-guy in this hypothetical sitation? If not, no amount of clean code is going to make the hypothetical application non-sh*t.
|
|
|
|
|
Also conversely, no amount of efficient algorithms and data structures is going to make that spaghetti code testable and maintainable in the future but clean code can allow replacement of algorithms or data structures with little effort
|
|
|
|
|
Sure. But it's just one guy, it's not like the entire code base is going to be spaghetti just because he's touching it. You can fix his style now, or you can fix his badly performing code now. Or later, but let's do it now. Which one you can actually do depends on the rest of the team.
|
|
|
|
|
True true. I'm just playing devil's advocate. Personally I think it would be rare to find two people with such a dichotomy in skill set. Having recently read Clean Code there was a real-life example of some spaghetti code that ended up effectively corrupting the entire code-base because people didn't have time or will to fix it.
But it also depends on what the product is. If the entire product and architecture depend on an algorithm then obviously the metrics change. A bad algorithm would be equivalent or worse to spaghetti code.
|
|
|
|
|
Clear code, readable and solid (not SOLID) code is very important.
I'd rather be phishing!
|
|
|
|
|
Since it is a long-term position, rather than a short-term or consultant position, I would choose the candidate that would be the best fit long-term. Not every candidate will know everything, if they did, then they'd probably get bored or want a raise and leave. To be the best long-term, I'd think they'd need to show a history of following through on their goals. Candidate A most likely does not have a B.S. programming degree as he/she does not know anything about algorithms and data structures. Candidate B obviously does and was on a learning path prepared from a university, rather than self study.
The 2 candidates both have a place in the industry, but my pick would be Candidate B, because he/she has proven themselves they follow through with their goals and obviously learned something and will continue to learn in the future. Also, I'd choose a candidate from an average to hard program as they have proven problem solving skills; which is what we do.
|
|
|
|
|
B.S. programming degrees vary a lot according to university, region etc...
Today there are many universities that tell all about OOP, SOLID principles etc and yet the teachers themselves don't know much about algorithms... so you cant assume one is self-taught and the other isn't.
|
|
|
|
|
I would take B. As you need efficiency, it may not be enough to use the common algorithms so he will help you there. As for the OO/SOLID/Unit test things - those are easy (relatively) to learn, while learning the secrets of algorithms can be more complicated and may need some affinity+. Be straight and tell him all your concerns and learn what he have to tell about, if he is convincingly ready to learn you probably have the winning hand...
Skipper: We'll fix it.
Alex: Fix it? How you gonna fix this?
Skipper: Grit, spit and a whole lotta duct tape.
|
|
|
|
|
Neither, because they are both figments of your imagination. If you ever do have the good fortune to meet such people in the future ensure that you breed with them.
|
|
|
|
|
I'm sorry but you aren't the right candidate at this time but would you care for a marriage with my daughter instead?
|
|
|
|
|
Candidate A appears to fit your requirement more closely. Whilst Candidate B has some great skills but has no proven coding ability. Given what you need B would require a longer learning curve to get up top speed. Further, how much of your work requires intimacy with and or creation of complex algorithms?
In any case, hire the one that fits best with the rest of your coders. Getting a good team culture going takes time and effort - bringing someone in who might disrupt that or not fit can be very damaging.
|
|
|
|
|
This looks to me a bit out reality. Like choice between car mechanic that can take engine apart and put it back blindfolded but has no idea how to drive and a perfect driver that can drift around town all day long but can't change a tire. They are two extremes unlikely to happen without anything in between.
But to answer your question I would hire the one that I enjoyed talking to more. The one that is friendlier and seems more team player as it would go a long farther way than any skill he has already.
--
"My software never has bugs. It just develops random features."
|
|
|
|
|
Candidate A.
You can teach algorithms. You can't teach extremely clean and readable code.
cheers
Chris Maunder
|
|
|
|
|
main(I,Il)
lOL*Il[];
{ FILE *L;
unsigned lO;
int Q,OL[' '^'0'],llO = EOF,
O=1,l=0,lll=O+O+O+l,OQ=056;
lOL*llL="%2x ";
(I != 1<<1&&(O1O(QI[0]),O10(1011-1010))),
((L = QLQ(Il[O],"r"))==0&&(O1O(QI[O],Il[O]),O10(O)));
lO = I-(O<<l<<O);
while (L-l,1)
{ QO0(Q = 0L;((Q &~(0x10-O))== l);
OL[Q++] = OlQ(L));
if (OL[0]==llO) break;
O1O("\0454x: ",lO);
if (I == (1<<1))
{ QO0(Q=Ol0(QI[O<<O<<1]);Q<Ol0(QI[0]);
Q++)O1O((OL[Q]!=llO)?llL:QI[lll],OL[Q]);
O1O(QI[lll]);{}
}
QO0 (Q=0L;Q<1<<1<<1<<1<<1;Q+=Q<0100)
{ (OL[Q]!=llO)?
((D(OL[Q])==0&&(*(OL+O1Q(Q-l))=OQ)),
OlO(OL[Q])):
OlO(1<<(1<<1<<1)<<1);
}
O1O(QI[01^10^9]);
lO+=Q+0+l;}
}
D(l) { return l>=' '&&l<='\~';
}
What are you trying to say?
In this present crisis, government is not the solution to our problem; government is the problem. ~ Ronald Reagan
|
|
|
|
|
cheers
Chris Maunder
|
|
|
|
|
Holy crap - is this your best work
|
|
|
|
|
I'd claim the opposite.
Algorithms require understanding.
Clean code only training.
|
|
|
|
|
Maybe we have different experiences
cheers
Chris Maunder
|
|
|
|
|
Well, they actually depend on each other. If you don't understand what you're doing, the code will certainly appear as unclean
|
|
|
|
|
Agreed, to add to that:
- Algorithms and data structures are topics easy to look up and teach.
- OO and SOLID concepts are somewhat abstract and open to interpretations, some people never get it, others take a long time to really understand how to leverage it. Much harder to teach.
- Clean and understandable code is on of the rarest trait to find. It's a gem and I would surely not waste it.
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson
Our heads are round so our thoughts can change direction - Francis Picabia
|
|
|
|
|
That's who I'd for, but I'd add that most basic data structures have already got perfectly good implementations. You don't normally need to know how a HashMap works inside, only what circumstances that you should use it for.
|
|
|
|
|
The one with the big t*ts.
Because ...
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|