Ok, so there is no doubt that it is difficult to become a software architect and extremely difficult to become a good one. I read people talking about experience is key, but what about the experience gathered.
I am developing all the time, and I would class my self as a CAN DO developer who is improving each job that comes. My issue is my inquisitiveness, in that I might have done something once before, but then I think:
“Hmm ok, but if I do it this way, or If I use this pattern or this method or this technology it will be better | it will be faster OR it will be quite cool to try even if I am unsure of the outcome!”
I have found it extremely stressful, rewarding, tiresome and fulfilling to work for myself, but in the process I have come across so many different ways to, well, SKIN A CAT. Lets think about Object Relational Mappings ORM, now when you get to this juncture what do you choose:
- Create your own, writing it by hand.
- Well this sounds fun, but unless you are planning on working with a small data store you have quite a task ahead of you.
- Create a dynamic one through reflection
- This is one approach recommended by the Patterns of Enterprise Architecture By Martin Fowler
- Create a Code Generation Policy.
- Now if you combine the following then you will both learn and have an extremely useful tool in which to create your ORM for present and future projects.:
- Point 1 above
- A code generation tool e.g. Code Smith
- Some time to learn the syntax of the Code Generator
- Using a Sub Framework for the ORM e.g. NHibernate, NetTiers, CLSA etc…
- Again you would combine this point with a code generator, or you could create by hand. Would get tedious and prone to human error though
- Use ADO.NET
- Another option which is recommended by Martin Fowler. ADO.NET is an extremely powerful way to work with Disconnected Data.
- Use LINQ to SQL
- Great tool, although I have read that its future is uncertain and the focus will be directed on the ADO.NET Entity Framework. I love the delayed execution and also the PIPES and FILTERS pattern.
- Use the ADO.NET Entity Framework
- From my initial exposure, I have found this to be quite amazing. My first exposure to it has been coupled with ASP.NET Dynamic Data.
So off the top of my head there are 7 points which can also me combined in some cases and these will handle how you communicate to your Data store, quite commonly a database. BUT WHICH TO USE. From a risk assessment standpoint, I think it obvious to say that 5, 6 and 7 are the least risk, as in they are tried and tested frameworks from Microsoft themselves with powerful wizards and very little setup and do not require that high a level of knowledge of programming to start using. Using 4 and 3 together come in next with 1 and 2 bringing the most risk, BUT if you choose 1 or 2 combined with 3 then of course you have the ability to build a complete tailored approach to your Domain Model or SOA. I am not sure if risk is the correct word, may be complexity and the requirement of experience. I think that is a better point.
Another point is Test Driven Development. Purists would say that you should write a test before you create the object which you want to test. I am find with this, but what if the underlying technology you are getting into is new and you are still un aware of its capabilities. What do you test, I would need to write some code to see its functionality first and then see where I am at with it. Once I have an idea of what I can do, then I will then know what to test, so definitely a research stage when pursuing the bleeding edge.
I would love to find out about testing TSQL, as ,my work leads down that route often and sometimes I get stuck with a problem which requires a query that to me, is a head ache. Ok I want everything from table A and even if it does not exists in Table B with a sub query for the conditional count yada yada yada which involves 5+ tables with complex query parameters. Then you have the Stored procedures, the scalar, table functions, views, indexes etc….
I think my point with this post is the level of learning that you can get drawn into when you dig deep enough, I feel it is like you get to the edge of a cliff, and you are peering over, then all of a sudden WHOOSH, you get blown off the edge and you are surrounded with hoards of material, tutorials, reviews, white papers, books, videos, Do’s, Don’ts, Design, Discussions, Difference of opinions etc….
One thing that is always in the back of my head at the minute is I read a quote from Bjarne Strousup where he says he teaches you how to program and as a by product you learn the language. I love this quote as it tells me that I can now apply my programming in other languages, and guess what I DO! What a rant! Right I am signing off. I found the following image which I thought was extremely good!
SOURCE: http://niksilver.com/
Cheers,
Andrew