Sunday, January 11, 2015

Software Development Heuristics

While my core strength is C#,  I've worked in so many languages and on various levels  (of the stack) that I've picked up many tools,  paradigms,  best practices, and  other bits of knowledge and experience.

I'm not sure if I would be considered a full-stack developer,  generalist or something else, but whatever you call, I've found that these bits of knowledge are what really makes a difference, especially when tackling new problems or issues. Particularly when things come together such as:

  • Experience and confidence in searching for existing solutions
  • Ability to evaluate choices and utilize the appropriate frameworks, because of similar situations in other languages or projects such that you can foresee future issues or outcomes
  • And most of all when small bits a pieces of information literally come together and leads you to an elegant new solution either by guiding your thought process or in an actual AHA! moment (I do a lot of the former; have had some of the latter, usually after thinking about a problem all day and just when I'm about to fall asleep)
You could call it experience but I think it's a bit different:
  • Being really good at one specific thing would not yield this result
  • It's more like being decently or really good at one or a few things BUT also have a some knowledge of a bit of everything else, which guides you in analyzing new problems, AND the ability to look further when needed to evaluate potential solutions or ideas

I suppose it would be more of an entrepreneurial mindset as that's where innovations come from: very often it's taking multiple existing ideas and putting them together and then adding something else.

For me particularly, it started by learning different languages and programming approaches from functional programming, to MVC/MVVM, JSON syntax, Java anonymous classes, etc.

Coupled with constantly being faced with similar issues and needing similar solutions, those experiences led to learning design patterns. And other experiences led to my explorations in testing and mocking frameworks.

But all along the way you may collect these bits of knowledge, which you may quickly forget the specifics because of non-use, but at least the general ideas and key concepts remain, and that makes a huge difference. They are what I would call heuristics.

They guide you when analyzing problems because you now know what is possible and you have more options to choose from. More importantly, you can quickly evaluate new and similar options and your past experiences will produce questions that should be answered. Or something like, Hmm... MVC might be useful here; I'm a bit fuzzy on it but I should look into this instead of just going ahead and start writing code.

A lot of times now when given a new problem, I find myself thinking at this higher level: I need to do  A,  B,  C.  What tools should I use to best accomplish these or where should start looking for the most appropriate solution? Do I write my own code or can I not reinvent most of the wheel?

I guess it's not restricted to programmers and is basically what you would call an expert: you know things and you can  put them together to come to conclusions in a variety of new situations.

My broad background helps me look for solutions in some creative places or when given something new,  a general framework of questions to figure out what to do.

And I guess it's also a productivity thing too: you are basically building on previous knowledge,  so you don't have to start from scratch each time. This makes you a much more efficient and versatile developer.

No comments:

Post a Comment