What's hot ? (and I mean really ...) - scroll down for more
1).  Code Templating - advanced usage of delegates & generics: my slides & demos are available for download! CodeProject article is also available.

2).  My series "TDD in the eyes of a simpleminded" is in progress(including code!): preface, part1, part2, Q&A 1, Manual Stub .vs. Mock Stub

3).  TDD Workshop: SeeCompass v0.1 and v0.2 are out.
# Saturday, April 28, 2007

Thank God, some may say, that bananas are still way too expensive to replace human developers with apes; Well, at least by Uri Kalish in his Why Software Engineers Should Care About the Price of Bananas. Let's face it, we have too many "chumps" out there, lurking to make a few extra bucks by faking it really well. But every once in a while, the sun is shining in glorious colors and you meet a really talented developer whom you think will be a great addition to your team. You ask her logical questions, she shoot right back with pearly answers; You ask her to design something and bang, she nails it; You ask her to juggle with code a bit and it is all sweet. She has analytic mind and just enough experience. Total Package.

This leaves you with the one thing, the only thing, that really matters - how can you tell whether or not she will use her analytic mind to solve your team's problems instead of introducing more complicated ones while trying?

I came to the conclusion that the only way to know how skilled a developer is, is by letting her solve a very simple problem and shoot more problems to the air while she solves it. Skilled developers will be able to break things into smaller chunks and solve them in a SIMPLE manner. When I say simple, I mean it, it will be so simple taht even a chump will be able to read it. Then they will move on to the next problem and solve it in the same SIMPLE way they did before. Then they'll tell you how to sew the all thing into one wonderful solution. It's actually pretty straightforward, simple things are easier to combine, but only a few folks out there knows how to "break & build" in a graceful, simple manner.

I look way back to my first days with .Net and OOP and I can honestly say that I did it all wrong(although it looked damn right at the time). If you looked at the code, it was elegant, in its own way, it was "sophisticated"(interfaces, events, a few Design Patterns) but it wasn't right. It wasn't SIMPLE. I had too many classes with too many (wrong) responsibilities, some of them contained quite a few God Methods and they were in no way testable. I had a great amount of green words(aka comments) to explain why things "needed" to be complex.

So for the developers among you - read, talk, write, teach and most importantly practice. Continue to improve your skills by breaking tasks into smaller chunks and keep making them green-free. If you spend more lines on documentation, you're on the wrong direction. Invest time in breaking responsibilities to different classes(class should have a very narrow responsibility) and take the time to think about your API. I'm playing quite a lot lately(Fluent Interfaces, Creating a decent API for client side script registration) with method names and the benefit I see in it is huge. readable API requires almost no documentation at all. Adding testable code to the equation and you're definitely on the right track.

For those of you out there that interview people - if you think this is it and you finally found someone - let him\her solve a few problems and focus about how simple is it to read the code, to refactor it, to extend it. How much documentation is required to explain the solution to the rest of your team?


What do you look for when interviewing skilled developers?

Posted by Oren Ellenbogen 
28/04/2007 11:38, Israel time UTC+03:00,     Comments [6]  |  Related posts:
What makes great Interviews

Sunday, April 29, 2007 2:41:01 AM (Jerusalem Standard Time, UTC+02:00)
"But every once in a while ... you meet a really talented developer whom you think will be a great addition to your team. You ask her logical questions, she shoot right back with pearly answers;"

She?!
Sunday, April 29, 2007 7:54:33 AM (Jerusalem Standard Time, UTC+02:00)
Yep, she.
There are talented female developers out there as well.
I did not want to sound sexist and wrote "he" like the rest of my posts but it doesn't really matter anyway.
Tuesday, May 01, 2007 12:14:17 PM (Jerusalem Standard Time, UTC+02:00)
Oren,
Firstable, I liked the 'she' using by you, I agree with you in that point.
Secondly, What about your famous CodeAgent, that had been written so 'complex' to understand (events that were calling one to another, design patterns, interfaces, etc...), did you throw this way of developing away?

What leaded you to think tha opposite way?
Wednesday, May 02, 2007 7:50:11 AM (Jerusalem Standard Time, UTC+02:00)
@Eran -
Hold on, I don't want to make the wrong impression. Using Deisgn Patterns, interfaces, events and legitamate OOP solution is CRUCIAL in order to create simple solutions. The trick is to use them wisely and in the right places. In the code I've talked about, I used them in the wrong way; I've combined everything together rather to split responsibilities into the right domains. It was what I call a "beautiful mess", it looked very elegant on the surface but not very understandable, maintainable nor extendable and all the great things that are really important(actually, they are the only thing that is imporatnt).

About CodeAgent - the engine itself was highly complicated so, looking back, I'm not so pleased with the solution I gave their either. I guess that in 6 months from now, I'll look at the code I'm writing now and see many flaws I could do better. I hope so anyway.

"did you throw this way of developing away?" - do you mean generating code?
Yea, since then I've discovered ActiveRecord,NHibernate,Windsor that replaces my need to generate code. As I've talked about in one of my previous posts a few weeks ago - I really appreciate the time I've invested in it, it made me realize better what I really looking and upgrate my Architecture skills.

"What leaded you to think tha opposite way?"
The need for simpler solutions. Instead of generating X DAL classes, I can use only one ORM and I'm done. Less code = less responsiblities, more powerful solution, faster improvements rate (ActiveRecord & Nhibernate progress much faster then my CodeAgent) and more standard solutions. The generating of solution skeleton and the UI layer was nice but it was helpful for the type of solutions we developed back then at SQLink. Now I don't need it that much.

All in all - I learned quite a lot about many aspects of my design skills and solutions writing in the process of writing CodeAgent. I think that I understand things better now because of it.
Saturday, May 26, 2007 1:44:18 AM (Jerusalem Standard Time, UTC+02:00)
Hi Oren :)

I very much agree with the simplicity attitude. However, let me throw in some additional parameters to consider before adding a new programmer to a team:

1. Is she "fire and forget" ? Other words - how much do you need to lead her or check after her till she get the job fully done.
2. Speed: assuming she is a "fire and forget" - how fast is she ?
3. Will she fit in (socially) ?

AY
AY
Tuesday, June 05, 2007 10:41:38 PM (Jerusalem Standard Time, UTC+02:00)
You are right about 1&3 but about 2 - it's very hard to tell.
I think it's too hard to grasp, in 2 hours, if she's going to progress fast enough. Anyway, you're trying to see if she will fit in, if so - I don't care that she's a little slower than I expected (unless it's drastic, of course).

Thanks for your points.
Comments are closed.