Random Thoughts of a Scatterbrain.
 Sunday, February 05, 2006

The Problem with Ordinary

2/5/2006 3:44:03 PM (Eastern Standard Time, UTC-05:00)

I came across a very good article by Ian Thomsen on SI.com discussing Shawn Marion's "frustration" towards his role in Phoenix.

Marion is averaging career-highs of 21.4 points and 11.9 rebounds, well on his way to a fifth-straight year of producing at least 19 and 9. Those are enormous numbers for a small forward, yet Marion believes he could do more if asked.

"You can improve anything you want during the summer, but if you don't get to work on it during a game, it just goes away and you go back to doing whatever it is they want you to do,'' says Marion, 27. "That's one thing I don't like. It's frustrating for me because I can do so many other things on the floor and I don't get the opportunity. I'm limited to doing certain things, and that sucks.''

Context must be introduced before this train of thought gets carried away. Is Marion demanding a greater role in the Suns' offense? No. "We're in winning situation,'' says Marion. "You don't get bleep in this league unless you win; I learned that a long time ago. I've been around people who say it's all about them, but they're wrong -- it's a team thing.''

What he's trying to say is that he isn't as impressed with his numbers as everybody else seems to be. He knows they could be gaudier.

"When I'm in the summer, playing pickup and working on my game, I'm working on pick-and-roll, handling the ball, doing all that kind of stuff -- but I don't do that here and it just really goes away,'' he says. "I do everything in the summer. I play '1' [point guard] through '5' [center]. I'm a pretty good passer, but I don't get the assists because I don't have the ball.''

I think I'm in the same boat with Marion, on some level.  Recently, I've just been so frustrated by the type of work that I'm doing at my company.  But it's not just a temporary issue; I just don't see that the company is dynamic and innovative enough to really land the type of contracts that I want to work on.  I've been fortunate that the last 1/2 of the previous year, we were able to have quite a bit of freedom in terms of execution, but if the current project I'm on is any indication, then it's not a good sign.

Understand, that like Marion, it's not really an issue of selfishness; of course I want to help my managers, my sales guys, and my company succeed.  Rather it's the fact that I work hard to become good at what I do.  I'm continually improving my software engineering IQ by consuming information through books, weblogs, magazines, and webcasts.  I make a real effort to refine my technique and learn new technologies.  Like Marion, I'm willing to take a hit for the team (I'm travelling to CT on a weekly basis at the moment, which isn't too pleasant, and doing some grunt work).  But it's frustrating because I know I could do so much more in the right environment. 

It's frustrating because I could help the company even more if the leadership could create/find the right opportunities. It's frustrating because I work on understanding design principles, software engineering practices, new tools, and other aspects of building applications/software, but all of that goes to naught due to the nature of the work I do (heavy in volume, yet light on the factors that interest me).  It's frustrating because I always want to take a step forward in terms of professional development; I don't want to stagnate.

Bah!  Just more bitching and moaning career-wise I guess.

 Thursday, February 02, 2006

A Little Introspection

2/2/2006 7:32:09 PM (Eastern Standard Time, UTC-05:00)

I've always had a hard time figuring out what I want to do with my life. From a career perspective, I've always had a hard time defining what interests me because, to be honest, everything, interests me. Well, let me clarify that, everything technical, from a software perspective, interests me. From BizTalk to DHTML to .Net to software design, I want to learn it and I want to explore it.

For the most part, I'm not even particularly interested in mastering "it"; I'm just curious about how things work and what things do. Reaching a level of mastery with any of the technologies I work with is purely happenstance and a byproduct of my repeated experience with it (not that I've mastered any of the technologies I work with, but I think I'm certainly above average in most areas).

I think that, even beyond that aspect, I'm fascinated by refining and improving my technique.

The act of building a typical house is fairly standardized these days. For the most part, there's very little innovation and challenge in building houses because most houses are built from the same mold. Whether you build a 2000 square foot house or a 5000 square foot house, whether you build a house with brick face or a house with siding, whether you build a house with three bedrooms or a house with four bedrooms, the act and practice of building a typical house remains pretty standard for the most part. In fact, many companies have capitalized on this fact by building house "factories" which kind of lay out a house's frame and various bits and all of the core pieces of the frame are shipped on one or two flatbed trucks, partially assembled.

For the contractors that build these houses, there's very little challenge; there's very little knowledge gained after constructing such a house. The entire design process has already been thought out and the difficulties taken care of ahead of time. All that's left, really, is to do the manual labor.  At the end of the day, this is what most builders do because it's what pays the bills and that's good enough.

For a comparatively small set of contractors/architects, there are clients that demand houses that are different. What different means is up for interpretation. It may mean building a house on a site that makes it extremely challenging to build a sound foundation. It may mean constructing shapes that typically aren't constructed in cookie cutter houses. It may mean integrating systems (networking, electrical, software control, etc.) in ways that have never been integrated before. It may mean building with materials that typically aren't used due to lack of exposure and knowledge. It may mean utilizing untested and undocumented methods to accomplish what would otherwise be impossible. Whatever the definition, this class of builders/architects are driven by a different desire. They're not so much driven by the bottom line (making a highly profitable business) as they are by the chance to innovate (even if this term is used in a relative sense), the chance to try something new, and the chance to improve the understanding of techniques and tools that may otherwise be foreign.  If these individuals are successfull, financially, that's just the icing on the cake.

That's me in a nutshell :-)

In my consulting days the last few years, I've seen both sides of the coin. I've worked places where the work was so cookie cutter and boring, that I started to look for new positions even just a few weeks into the job. I've been in at least two organizations that were so creatively stifling and just not a developer friendly environment that I ended up just being so frustrated and a little drained each day I had to be there.  On the flip side, I've had positions that offered me opportunities (although not consistent) to build some really awesome solutions.  I've had positions where I've been given free reign to do some really creative work (both visually, programmatically, and design wise).

I think what I'm seeking, nowadays, is the ability to do the latter, but on a much more consistent basis; I want to feel like I'm doing something interesting and challenging every day that I wake up. I want to work where I'm expected and given the opportunity to learn ideas, concepts, constructs, techniques, technologies, processes, frameworks, and practices that would otherwise be considered unimportant to deadlines. I want to work with people that are as geeky (or even more so) than I am.  Certainly, I understand that the bottom line (dollars wise) is important, but I want to work where there's a fair balance between the that and taking some risks.

This morning, I was handed two printouts of lists of incentives from Handbook of Human Performance Technology (quite a hefty, but seemingly interesting book). The lists are broken down into monetary and non-monetary incentives. Reading through these lists, I could immediately tell what this superior was trying to point out to me. I identify very well with the items listed in the non-monetary list, including:

  • Choice of project,
  • Flexible schedule,
  • Informality,
  • Nature of work,
  • Type of community,
  • Type of organization,
  • Mentoring,
  • Participation in professional conferences,
  • Support for personal development,
  • Training materials,
  • Job aids and documentation,
  • Type of furniture,
  • Freedom to innovate,
  • Dynamic leadership,
  • Entrepreneurial support,
  • Membership in elite team,
  • Patents

On the other hand, I find far fewer items that I can identify with in the complementary list. Things like:

  • Overtime payment,
  • Weekend payment,
  • Clothing allowance,
  • Sick leave,
  • Club membership,
  • Expense account,
  • Medial insurance,
  • Stock bonus

Just don't concern me at all. I'll gladly work weekends, holidays, 16 hour days, etc. so long as the work is interesting to me. To confirm this, simply ask my wife, who oft complains about this and claims that my company is screwing me somehow. But I never think about projects that are interesting in those terms. I frequently work unbilled hours that I don't even count when I'm deep into something I'm interested in.

Well, I'm not totally agnostic of the monetary incentives. If that were the case, I'd be doing my PhD right now on my way to being a professor or a high school math/science teacher. I certainly believe in receiving a competitive, market salary and a fair bonus plan.

This last bit is the reason why I think I'm starting to fall out of love with my current job. Whereas in the early-mid portions of the last year, I've been able to do some fairly nifty work and work alongside some really good people, the last few months and the outlook at my current company seems bleak for doing the type of innovative and interesting work is waning. For the past year, I've made sacrifices (perhaps selfishly from the perspective of my wife) in terms of my salary for the opportunity to do cool things, work with people that I like, and work at a site close to home. But I'm just not feeling the love these days.

There's a good passage from this printout that I received this morning that kind of sums up my current situation to a T.

Adequacy is the condition of being sufficient for a given purpose. It is a relative concept: what is adequate for one individual or group may not suffice for another. There are two aspects of the adequacy of an incentive system: it should enable the employee to maintain a standard of living typically associated with the job, and it should be comparable to incentive systems associated with other jobs available to the employee.

The first aspect of adequacy deals with the cost of living at an expected level of quality of life. When the same level of salary does not tempt a computer programmer from Columbus to move to San Jose, it is probably because the salary does not fully compensate the increased cost of living in California. Similarly, a newspaper publisher must provide greater salary or allowances (including housing) to successfully induce an Indianapolis reporter to move to Tokyo. In many developing nations (and among such professions as teaching and nursing in developed nations), inadequate salary is the major obstacle to recruiting and retention of talented individuals.

I'm actually more interested in the second aspect, but unfortunately, the printout left that page out :-S I'm currently making a long journey each week from my home in New Jersey to a client site in Connecticut. It's not that the commute is that bad, really, it's that there's no incentive for me to do so. It's not even a matter of being short sighted; even in the long run, there's no incentive for me to do this because of the nature of my company, especially when the work is so boring and grinding (even worse considering that the environment isn't developer friendly).

So that's that. I think I may be leaving my current company, the longest tenure I've had with any company, in the next few weeks for either an opportunity to do more interesting work or at least make more money doing more driveling work :-) Just a little thinking that I had to get off my brain and put in writing.  As Nader would say, we shall see.

 Tuesday, January 31, 2006

Random DevTools Entry: #003

1/31/2006 7:21:43 PM (Eastern Standard Time, UTC-05:00)

DHTML Edition.

Came across an awesome listing of DHTML resources today via weblogs.asp.net.

Just a short snippet:

  • 3 Column Holy Grail.  For good reason, clean, search engine optimized CSS layouts have been hot in the web design space for quite a while.  I really got into it when I was working at Factiva.  Up until that point, I didn't even know that such techniques existed.  Well it seems like someone has finally pulled it all together into one super clear layout.  I marvel in the simplicity...
  • Qooxdoo.  Wow.  I am blown away by what's capable with this library.  Definitely worth a look, particularly the windowing capabilities.  The last two web based projects I've built have used custom windowing libraries which are definitely not as well developed as these libraries are.  Now I'm salivating to build something cool with it :-)
  • dp.SyntaxHighlighter.  I've actually been thinking of writing just this!  Amazing stuff, really.  At the moment, I'm mostly using an external tool to colorize my code and pasting it as HTML...this looks like a much better solution.
  • DOM-Drag.  Looks good.  Last DHTML front end project I was on, I spent way too much time making drag-drop work.  However, the performance does seem a tiny bit laggy on some of the demos.
  • Nifty Corners.  Looks interesting...people seem to like the rounded corners look...I've always been too damn lazy to make rounded corners :-)
  • moo.fx.  This library looks great...very performant and easy to use.
  • script.aculo.us.  A more heavyweight and full featured effects library.
  • Behavior.  I'm really digging this one...check out how clean the demo pages are.  Very nice.

And there's also a boatload of AJAX libraries listed as well...way too many, I'd say.

But I digress.  Some of these libraries just make me giddy.  But I'm weird like that.

Random Links

1/31/2006 7:08:12 AM (Eastern Standard Time, UTC-05:00)

It's always interesting to see how people end up on this site.

That's one of the neat things about dasBlog...I'm always giddy when I see some new referrals :-)  Every once in a while, I'll get a few referrals from a handful of bloggers over at weblogs.asp.net.

For a while, I spent quite a bit of time over at weblogs.asp.net.  Not so much these days as my projects have picked up, but I've had some interesting discussions with some of the guys over there.

Stop by WAN if you get bored; there's certainly interesting bits here and there.

 Monday, January 30, 2006

Happy Chinese New Year!

1/30/2006 2:45:28 PM (Eastern Standard Time, UTC-05:00)

Yay!

I celebrated over the weekend with hotpot at my mother's significant other's house.  It was great...I love hotpot!  But so damn tired from my drive home from Connecticut the night before (I live in Jersey, but currently working in CT).

As we were eating, my sister relayed an amusing story to me regarding my Amazon.com reviews.  Apparently, one of her friends had come across my review for the Microsoft Natural Ergo 4000 keyboard while searching for a new keyboard.  As relayed to me by my sister, this friend became quite excited and called/emailed/messaged my sister and started asking if she had a brother in North Brunswick.  Funny how small the world is I guess.

Even more interesting, this morning, I got an email from someone who had read my review on the same keyboard and wanted to know if my opinion had changed since owning it.  Of course, I replied to this woman and told her that the 4000 is a fabulous <<in that nasal, metrosexual tone>> keyboard.

 Wednesday, January 25, 2006

Yet Another Bookmark

1/25/2006 8:49:09 AM (Eastern Standard Time, UTC-05:00)

I going to have to take a look at this Composite UI Application Block from Microsoft's patterns and practices group.

It actually looks very similar (at least from a 10k foot view) to the architecture/design implemented by Omar Al Zabir in a writeup over at CodeProject.

I admit, I've never been much of a WinForms guy, as development of Windows clients has never really interested me (partially because of what a pain in the ass it is to work with WinForms compared to WebForms (XHTML markup just makes more sense for UI layout and presentation, at least in my opinion)), but I think it's probably worth my time to take a good look.

 Monday, January 23, 2006

On Enterprise Library

1/23/2006 8:33:28 PM (Eastern Standard Time, UTC-05:00)

Having been a consultant for the last few years, I've been in many organizations, seen many application architectures, and met many developers.  What saddens me is that far too few developers/consultants in the Microsoft space are digging the Patterns & Practices group in Microsoft.  To a large extent, I think this issue is directly tied to how "easy" Microsoft has made the .Net development process.  Certainly, it's quite easy to learn .Net, especially with the visual designers and drag-and-drop controls, but to write an enterprise application involves quite a bit more than building some of the samples out of a book and calling it a day.

I've consistently found that companies will continue to roll their own data access layers simply out of ignorance.  Ignorance of the Enterprise Library, which is designed to be pretty much plug and play in so far as providing some infrastructure to common application needs.  The case for Enterprise Library is fairly straight forward, in my opinion, but I'm amazed that so few developers I've come across actually know what it is and how to properly utilize (or even at least offer some alternatives (I myself prefer log4net for logging, but it's generally tougher to get companies to use open source projects vs. Microsoft products)).  But even aside from Enterprise Library, there are a number of great solutions to the common problem of data acccess, including NHibernate and EntitySpaces (formerly dOOdads).  While certainly, uptake and acceptance of third party solutions should expectedly be low, there's no reason why developers are not utilizing Enterprise library, aside from ignorance, NBH (Not Built Here) syndrome, and arrogance ("I can do it better").  This isn't to say that there is never the case for rolling your own solution, but you better make damn sure that you can come up with a convincing argument other than the three just listed.

On a more fundamental level, while .Net is generally considered a far more productive framework to utilize, as compared to Java or unmanaged code, it is also  a lazier lanaguage that requires the developer to know less about architecture and designing software solutions.  Combined with Microsoft's history with classic ASP and VB6, you end up with a lot of ".Net developers" who continue to write VB6 style applications and only use classes to demarcate the boundaries for a function set.  There is a tremendous lack of understanding of object oriented programming concepts in almost every single organization I've worked with (with the lone exception being Factiva, where two of the developers in my group were really top notch).  Seriously, ask some developers what the C# keywords abstract, virtual, and interface mean and you are guaranteed to get either looks of bewilderment or some off the wall answers.

This frustrates me to no end; my mind simply cannot handle this type of development.  I've always been fond of the saying: "Never wrestle with pigs.  You both get dirty, and the pig likes it."  I feel an obligation to myself and, more importantly, to an organization that's paying for my services, to introduce standard practices, design patterns, solutions, and libraries where appropriate.  I think this has gotten me into trouble on more than one occassion, including my current situation.  I mean, 12 months ago, the idea of unit tests (as in NUnit) were lost on me.  I didn't really understand the value of writing these tests and how to properly utilize them.  I still do not feel that I'm solid on the latter, but I've definitely come to appreciate the value of unit tests and using a test driven approach to implementing code.  I simply cannot write un-tested code nowadays as I find it inefficient and unprofessional.  And yet, clients neither understand nor appreciate what it means to take a test driven approach.  Instead, this type of development is actually discouraged as the front-loaded work is typically very far from the UI (at the class library level), which means that the business people and managers don't feel progress.  I mean, I can feel it in their eyes when they look at me and wonder what I've been doing and why I haven't hacked together that WinForm yet.

Seriously, is there something wrong with me?  Am I just being snobbish about this?  I like to think not, as I openly admit that I myself underestimated the value and power of a test driven approach just 12-14 months ago and I've since undertaken the task of adopting it as SOP.  But the thing is, very few developers, at least that I've worked with, take the initiative to learn technologies and software engineering practices beyond learning the base .Net framework.  Mind you, I'm not talking about small time consultants with small companies.  I'm taking about $150+/hr consultants working for multi-billion dollar companies.  But then again, a lot of these consultants are not really in consulting positions; more accurately, they are really staff supplements, which typically puts them into a weaker position in terms of affecting change (myself included; this is what I really hate about so called consulting gigs, no one really wants to consult you on anything, they just want you to sit your ass down and write some code....now).

Enough ranting I guess.  Understand that I'm not trying to come across as elitist in any sense; I simply expect developers to remain active in learning their discipline.  I expect architects and consultants to understand the technologies in the relevant solution space before sending the devlopers off to write the code.  I simply expect people to be educated and open to ideas, especially people in a technical lead role.  In any case, Enterprise Library for .Net 2.0 is upon us.  I'm actually fairly excited to put it to use and see how the team has improved upon the existing library.  It's worth checking out Tom Hollander's blog (Microsoft's product manager for Enterprise Library (Yes, it's a full time project within Microsoft staffed by real life Microsoft employees)) for some of the dirt on the new features and changes in Enterprise Library for .Net 2.0.

On a closing note, I'd just like to make an observation.  It always amazes me when I see people's desks with stacks of books that were obviously never touched.  It's as if some developers think that they can learn by osmosis...keep that C# book close enough, and some of that info might just magically seep into your brain.  I only wish it were so easy.

 Saturday, January 21, 2006

Impressive

1/21/2006 11:18:48 AM (Eastern Standard Time, UTC-05:00)

Perhaps even that is too weak a word.

Omar Al Zabir demonstrates an amazing breadth and depth of understanding of many technologies in addition to sound software engineering and design concepts.

He has a great writeup at CodeProject.  That just blows me away in the elegance of the design and the way that he's able to have such a deep grasp of so many of the technologies that are relevant.

 Thursday, January 19, 2006

Now We're Getting Somewhere (Part 2)

1/19/2006 1:58:59 PM (Eastern Standard Time, UTC-05:00)

A higher order of abstraction.  That's the answer.

What is the value in such a thing?  With each level of abstraction that is added, you free up resources to work on higher order concepts.  You free up the mind to work on the grand scheme.  It wasn't until humams had sufficiently advanced agricultural technology that abstracted away the process of creating food, that the human race was able to go about it's business, doing bigger and better things.

It's the ultimate layer of abstraction.  You go to the grocery store and pick up a head of lettuce or to 7-11 and pick up a bag of chips...you are almost oblivious to the enormity of the concept.  Our ancestors even one hundred years ago would be amazed at the convenience that we have today.

Obviously, this abstraction could never have occurred without the right tools and technologies in place.  Without the combustion engine, we'd still be tilling plots of land using horses and oxen.   But if every person that wanted a combustion engine had to build his/her own, then that would also lead us nowhere.

Few of the managers in IT departments and business people ever think about building solutions in this light.  They want ten people working to build engines on demand instead of investing in a small shop, equipped with high quality tools, to build only engines.  People are mired in immediate needs and completing low order thoughts. 

I need a tomato in three months.  You better start growing one today.

There are of course, at several ways to deal with this problem.  The simplest solution is to say "Well, if it pays the bills, I'll go dig a whole and plant that tomato seed".  A more sophisticated approach would be to say "Well, I bet she'll want more tomatoes down the line, so I'll dig ten holes and grow ten plants".  And even beyond that, you may start to get the big picture: "If I invest in machinery to dig these holes and plant the tomatos for me..."

The problem is in that initial investment.  Few people have the foresight to see beyond it.  Even if it'll take an extra month just to build that infrastructure, once it's in place, I can gaurantee you 100 tomatoes every month.  I can even plant different tomatoes if you please, since most tomatoes have the same requirements.  And even if you get sick of tomatoes and you want peppers now, with the machinery in place, I can switch to peppers if that suits your tastes.

 Tuesday, January 17, 2006

Random DevTools Entry: #002

1/17/2006 7:12:17 PM (Eastern Standard Time, UTC-05:00)

Just one entry for today.

I was looking around for a free XPath expression tester online.  Surprisingly, it took me at least 20 minutes to find a free one.  Altova XMLSpy Home Edition, while free, does not include an XPath evaluator (it's an add-on in the professional edition).

However, I did find Dimitre Novatchev's excellent (though ugly as hell) XPath Visualizer.

Great tool (although the UI is ugly)!  And you just can't argue with free :-)

RSS 2.0 Atom 1.0 CDF