The mighty C# migration misconception

Posted by James on Saturday Feb 28, 2009 Under software

This is such a common problem now.

By this I mean how common it is for engineering colleagues to go diving into C#, thinking they already know the language inside out.

The familiar C++ style syntax, the convenience of intelisense and WYSIWYG style editors.

The smug, naive notion that they can add yet another language to their dusty resume and think how easy it was to pick up.

39654992v5_350x350_front

I remember a C++ programmer telling me… “You’ll never have trouble finding work again… now that you’re an established C++ programmer”. This kind of arrogance runs wild in the industry. Frankly I’d hang my head in shame if ever I felt this way. They honestly believe it’s the pinnacle of their education. C# being just a dumbed-down, high level, subset of C++. And they can happily hack their way through until ‘it just works’.

My companies tools set is literally littered with these kind of ‘applications’. Owners long since abandoned them, waiting for the next tech bandwagon to leap in front of. Illusions of grandeur clouding their every judgment,  as they salivate at scrambling one step higher up the ladder.

End users don’t seem to care. In fact they seem to encourage the rapid development of  these fisher-price, my first app, style tools. It’s only the next poor developer that has to come and wade through the buckets of misunderstood ideologies that feels this pain. Often it’s several iterations of developers later that someone who actually knows what they are doing gets burdened with the task of maintenance. At this point it’s been gang banged into such a state that starting from scratch would be so much easier.

If only they understood basic design patterns. I mean even basic MVC isn’t that hard is it?  No, no, no lets interwind the whole lot and celebrate doing it.

What will the next one be? WPF? It seems to be spreading like wildfire. I wonder how many of them right now are hacking their way through the API, expecting to be patted on the head for being the first to do so on their team.

Is it fear of being left behind? Tempted by the pretty lights?

I’m also learning new languages, but I’m reading as much literature as I can on the subject. Asking respected veterans for their opinions and advice on the matter. The creators of C# and WPF had certain design philosophies; things that didn’t work that they have improved from previous iterations. To not align with them and embrace their ideas, through sure ignorance is like pissing in the wind.

It should reflect badly on the developer in a review process, but it doesn’t. Why? Should the reviewers attitude be, to punish a pioneers efforts to learn new technologies? Perhaps, if they do so in such a cavalier fashion. Well, no manager/lead I’ve met would like to do that. Maybe they respect them enough to believe they’ll do it right way.

Most mangers have also abandoned such selfish and career fueling drives such as this however, so they often know very little about the subject matter. Content to allow their underlings to spread their and wings and allowing such practices to continue. Certainly at my work, C# is still (generally) a non-senior engineer skill.

nightmare-on-elm-street-freddy-headshot-smallSo how can someone with no knowledge of a technology effectively critique someone? It’s very difficult…

  1. Insist on courses and read lots books / online literature.
  2. Do not allow C++ programmers who “think they know”.
  3. Teach high level ideologies first, syntax later.
  4. Stay on top of your game. You need to at least know vocabulary if you don’t learn the technology.
  5. Hire experts and learn from them!

I’m certainly not an expert myself, but I know that just following these simple steps you could prevent the maintenance nightmare that I’ve recently inherited.

Again I hope this generates some discussion.

Tags : , , | 12 comments

Visual Assist is why I still use Visual Studio for C++

Posted by James on Saturday Feb 14, 2009 Under Uncategorized

Nothing earns you geek points more than using an editor like Vim or Emacs.  Frankly the contrary is also true if you stoop as low as using Visual Studio. I work with a number of people who look down their nose when they see me using VS.  With green text on black trying to look all retro, smug in the knowledge they are so much cooler than me.20040510-vim_colorscheme_nightwish

Ok I know, I’m probably fighting a losing battle here. As the likes of Vim and Emacs run on every platform known to man and they are very extenible. Everyone loves to hate M$ etc.

To give you a  bit of background; I used emacs for 14 months while working exclusively on HP Spark / Dec alpha machines in good old fashion UNIX. I wrote a few Lisp scripts for emacs, but nothing special. I did learn to love it and I found using VS afterwards almost like playing with a toy. No developer worth anything would ever consider using VS. You’d be laughed at by any level of unix / level programmer and quite rightly so.

Anyway, that was 8 years ago and things have changed. I still do a lot of C++ development, but I also do .NET languages such as C#.

Now the reason I can’t leave VS is ultimately Visual-Assist. I love it! To be without it I now feel disabled as a programmer.

Visual-Assist for all that don’t know is essentially ‘intelisense’ on steroids. It’s made by WholeTomatoe software and it’s fantastic.

mondoperspectivetransI often sit there being asked by my trendy friends where various code lives. They’ll have a class name, and simply want to look up the definition. I’d forgotten how brilliant Visual assist is with symbols. ALT+G on a symbol and it jumps straight to the code definition. Watching my Vim buddies work… well it’s regular expression followed by, calling grep or something like that. Vim doesn’t do any symbol parsing or anything, so if you’re looking for horribly generic fuction like Update(), you’d have a hell of a time finding it.

This having the symbols correctly parsed is so handy for refactoring too. Want to rename a class, no problem. It correctly scopes all changes so it’s infinitely better than a blind and brutal a reg-exp. Change a functions params? Visual Assist will change all calls to this and replace them correctly.

I have become so reliant on it, it shapes my want to learn other languages. Looking up APIs is a waste of time and is frankly tedious.

So is this a bad thing? Have I become simply lazy in my reliance on this tool? Or has my productivity increased so much that anything else seems like a waste? Maybe so.

Now I know I’ll be told that there exists a VIM plugin for visual studio, so I can have the best of both worlds. Well perhaps… But I guess that’s not my point. My point is without realising it, I’ve become so reliant on a tool that I can’t contunue without it. I draw a parrallel with mobile phones here as I belive it’s a good analogy.

Do you remember all your phone numbers now? No? Well of course mobiles phones remember them all for you. Has that made you worse as a telphonist? Perhaps? Would you feel crippled if you were faced with a phone with no numbers? Or have you accepted that it’s a the future and embrace being lazy and use the phones memory. Well I believe this is exactly the same as learning an API back to front. Relying on the compiler to find your syntax errors is simply way too old school now.

Anyway, I hope this generates some discussion. Please let me know your feelings on the matter I will be quite interested to hear peoples oppinions.

Tags : , , | 8 comments