Of all there is to teach, teaching people to think is the hardest, but the most rewarding.
The good part of this profession is that I get to do it every day. If I had my druthers, I would have my guys go through Knuth and solve all the problems in there - unfortunately, we are not in the business of paid sabbaticals. So I do the next best - I train them to think on the job.
So here goes a typical conversation - the subject in question is one of developers "D" - a really smart kid, and soaks up stuff like a sponge. Again, paraphrased conversation, and I've added color, but the gist of it stays.
-------------------------------------------------------------------------
D> I'm trying to measure perf on this app - and TFTP (the perf monitoring tool that comes bundled with eclipse) is slowing down the app - so I don't know if performance problems are because of the app, or the tool I'm using to monitor it.
Me> You know the specific things that you want to track, right?
D> Yup
Me> Use AspectJ
D (4 hrs and some back and forth later)> Ok, got it working - this is good stuff! How does it work?
Me> It does byte code injection
D> Where can I learn more about it? Are there books?
Me> Decompile the damn thing
D> What?
Me> Decompile the generated binaries
D> Why?
Me> You'll see
D (1 hour later)> Wow, I get it!
-------------------------------------------------------------------------
For those whose head this went over, my apologies. But here are a few things that any decent developer should be doing..
The good part of this profession is that I get to do it every day. If I had my druthers, I would have my guys go through Knuth and solve all the problems in there - unfortunately, we are not in the business of paid sabbaticals. So I do the next best - I train them to think on the job.
So here goes a typical conversation - the subject in question is one of developers "D" - a really smart kid, and soaks up stuff like a sponge. Again, paraphrased conversation, and I've added color, but the gist of it stays.
-------------------------------------------------------------------------
D> I'm trying to measure perf on this app - and TFTP (the perf monitoring tool that comes bundled with eclipse) is slowing down the app - so I don't know if performance problems are because of the app, or the tool I'm using to monitor it.
Me> You know the specific things that you want to track, right?
D> Yup
Me> Use AspectJ
D (4 hrs and some back and forth later)> Ok, got it working - this is good stuff! How does it work?
Me> It does byte code injection
D> Where can I learn more about it? Are there books?
Me> Decompile the damn thing
D> What?
Me> Decompile the generated binaries
D> Why?
Me> You'll see
D (1 hour later)> Wow, I get it!
-------------------------------------------------------------------------
For those whose head this went over, my apologies. But here are a few things that any decent developer should be doing..
- If you use a framework, walk through its source - most stuff that we use today is open source anyway - Tomcat/JBOSS, Spring, Hibernate, Flex. There is no excuse for someone who's spent a year using a framework, and hasn't walked through its source.
- Know the concept of a control. Most folks trouble-shoot without creating a minimal representation of the problem. Basic science.
- Think and write down stuff before you code. A lot of developers are notoriously bad at abstract thinking and writing. Practice.
No comments:
Post a Comment