Without trying to be arrogant (just confident), I'm sort of a multi-talented guy. My skills are very diverse and mostly acquired as the need presented itself. In the past 11 years I have been confronted many, many, many different challenges and so far have always been able to resolve them.
Over the past years I've done many different things, as that's what being self-employed is all about. I have done sales (my least evolved skill); I have writing a lot of documentation and specifications; I have written my share of code; I have done hands-on support; I have managed development teams, both local and abroad; I have done general management; I have done project management; I have taught Crystal Reports classes; You name it, I've done it!
I think what separates me from the masses is that I'm an information junkie. I adore doing research on a topic and then putting it into practice. There's nothing more satisfying than being faced with a seemingly impossible challenge, and being able to find, model and implement an appropriate solution. Even if it means working with whatever is at hand, even if that is out-dated. The more restrictions and the more limitations, the more I get motivated.
I chose to pursue a freelance career because I felt squeezed into roles that didn't challenge me anymore. What I really want to do is Software Development, and lots of it! The classic waterfall methodology, Agile Programming, Test Driven Development, to me it all comes down to: ASSES, MODEL, BUILD.
ASSES
Assessing is a very general term. To me, in this context, it means both listening and learning. Learning about the job to be done, the posed limitations, the required techniques and the minimum required out-come. No good software can come from incomplete or even lack of information. Intense communication and information gathering before getting started, is a -if not THE - crucial factor for success.
There are many techniques and methodologies out there that neatly determine how to assess functional and technical requirements. I, however, tend to trust my instinct and experience and chose a method that I think suits the customer and the situation. To me, the methodology is irrelevant. I can adapt to or initiate based on standard methods or common sense.
MODEL
During this stage, functional requirements get turned into technical specifications, guidelines and a database model if applicable. Once you know, what should be built and what boundaries are there to take into account, the real brain-gymnastics begin
As all software engineers, I prefer to start coding with accurate and above all suitable documentation in place. Depending on the complexity of the project at hand and the time available (we need to stay realistic), modeling can be very diverse. Some large applications, can be modeled on a single A4 sheet by means of a diagram along with some remarks, other seemingly small projects require full blown proof-of-concept projects and end up with serious documents as technical specs. As with many things, “less is more” is applicable here.
Over time I have learned that there are still situations, where companies are stuck with applications that have had no serious modeling and documentation. Eventually those applications become unused and tend to die out. Until that day, they become maintenance pains that no one want to touch. This can become a threat in case those applications are critical to a companies daily business. Reviving those projects is hard but not always impossible, I've successfully done it a couple of times.
BUILD
Even though I have been schooled as a Pascal, C and Java programmer, I have been hooked on Microsoft Technologies since long. It all started when I did my first internship at age 17. Upon entrance and was handed the floppies of Visual Studio 4 and was asked to implement print support using MFC/C++ for a management training application (simulator. Even though the assignment was dull once I got my head around the concept and figured out the right implementation, it gave me a chance to look over the shoulders of some pretty smart C++ magicians. I knew then, that THAT was going to be me!
Along the road I have developed Java Applets (remember those?), ActiveX controls, PocketPC applications (on those bulky iPaqs), browser toolbars (also see www.findsi.com), truckloads of classic ASP pages and libraries (some still in use!), various of COM components using VB4+ or C++ … and the last few years many pretty cool .NET applications.
Being involved in web development mostly, I have gotten acquainted with most applicable techniques and tools, to name but a few:
- .NET 1.1, 2.0, 3.5;
- C#;
- VB.NET;
- Javascript / jQuery;
- Windows;
- IIS;
- SQL Server;
- Visual Studio;
- SEO;
- HTML, XML, XHTML;
- CSS;
- Web Services & SOAP;
- WCF;
- REST;
- ASP.NET;
- AJAX & JSON;
- MVC;
- Subversion;
- LLBLGen Pro;
- Cocoa (touch);
- Microsoft Enterprise Library;
There's probably more that I forgot to mention. I'll add things over time, whenever I learn new technologies (or remember them).