views:

1042

answers:

11

My approach with designing a solution is to find the simplest way to achieve the result required. This usually means that I provide what is required and within the time frames requested. And fairly bug free. This is all good, and I have built a good reputation as a result.

The downside is this. I think I have limited my ability to tackle problems that are inherently more complex in nature and require a correspondingly more complex solution. This also means that I expose myself to less of the .NET Framework and to less sophisticated algorithms/data structures than others.

Any recommendations to help me tackle more complex scenarios with fitting solutions?

Current skill-set: .NET, C#, VB.NET, LINQ, ASP.NET (+MVC), SQL Server 2000/5 Current job: web dev for a high availability transactional website

+10  A: 

You should have side mini projects that are "stretch" projects which make you play with something a bit different. They help develop a set of skills you can add to your toolbelt, whether that be languages, frameworks, design techniques, or whatever. Just something that takes you out of your comfort zone.

Keith Nicholas
Good idea. I've been thinking along the lines of mocking, unit testing, automated UI testing and trying to approach framework design from a different perspective (possibly like the jQuery approach for starters). Thanks.
objektivs
+3  A: 

Depends on the type and complexity of problems you're presented as a developer. One way would be to use a more complex language or toolset.

For example, if you're solving business problems using MS Access, try solving, or at least thinking about how you'd solve them, in a .NET ans Sql Server.

rob_g
+3  A: 

I think even KISS can be over-applied. It's important to learn about complex techniques, but keep this learning separate from the actual work you're doing. Apply the simplest technique that works. Learning about more complex techniques will help you recognise potential problems/bottlenecks etc.

As you hint upon, some complex problems require complex solutions. The only real way to prepare yourself for this is to tackle complex problems in the safety of your free time when it doesn't matter if you get them wrong.

Can't remember who said it but:

"Most programmers can find a complex solution for a complex problem, but few can find a simple solution for a simple problem".

I think it's true that many programmers have a tendency to over-complicate things. Perhaps you're oversimplifying things, but it's probably the right end of the scale to start from.

Draemon
+3  A: 

I would find a complicated open source project and work on it in your spare time, this not only gives you the chance to work on a complex solution but can be very rewarding if you are into the open source thing. Or perhaps as others have already stated, make up projects with complicated solutions to exercise on.

Jeremy Reagan
I might try my hand at one of the .NET rules engines for starters. Thanks
objektivs
+2  A: 

You don't specify what your area of skill(s) is/are. Neither do you describe where your work comes from. So on that basis it's hard to give specific advice. But ...

May I suggest that you chose an Open Source Project that is a good fit with your skills and interests and take on an item from the ToDo list and run with it. The neat thing is not only will you find challenging problems, but also enhance your reputation through your contributions.

CyberED
I've updated my initial question with a few details. Not sure if it's enough to help, but the idea you suggest is a regularly occurring one. I think that I will find some noble OS project and give it a try, thanks.
objektivs
+3  A: 

become a ninja jedi!

and read!

Steven A. Lowe
+4  A: 

Find a mentor, or another programmer with a different programming background; meet regularly to review each other's code, discuss new things you've learned recently and projects you've been working on.

It's all very well getting involved with complex open source projects, but constructive feedback is probably going to help you advance and improve faster.

TimB
+2  A: 

Do some code-kata!

pmlarocque
There's a great to-consider list on this site.
objektivs
+1  A: 

Try to broaden your view by trying something completely unrelated and new.

I see you do mostly work with Microsoft technology and with Microsoft languages as well. There are so many more things out there that might teach you a thing or two.

My recommendation from personal experience is to learn about Lisp, Erlang or such functional languages and the philosophy behind them. Especially the shared nothing architecture of Erlang together with its unusual features like threading model and updating running applications might change the angle from which you look at your next project.

HS
+3  A: 

There are a great set of practice problems at projecteuler.net. Also Google "code kata".

objektivs
+1  A: 

Does this mean you've found that you can't tackle some problems due to their complexity and your lack of knowledge?

In my experience the simplest approach is not always the best. However, it's best to start by looking at the simple approach and seeing if it will solve the problem adequately.

So many projects over-engineered because x feature might be used in the future and then isn't. On the other hand, under-engineering can mean poor performance.

When the need arises you can re-factor what you have to improve or extend the solution.

Books I can recommend: 1) The design of everyday things 2) Design Patterns (The one I read was a c/c++ one but there are ones in the language of your choice). The good thing about design patterns is that they help you to see simple solutions to sometimes complex problems. A good understanding of basic design patterns will improve your ability as a programmer/designer.

Matt
Not really. More that I know I am solving problems in the here and now and not n4ecessarily giving thought to problems of the future. Some people are very good at looking at a problem and devising a solution that works now and can deal with likely future cases. Perhaps it is an experience thing...
objektivs