Wednesday, December 13, 2006

MCPD: Enterprise Applications Developer

As you may noticed I am mostly engaged in Microsoft technology. So yesterday I set myself a new target on my way to becoming a software-architect. I want to certifie as a "Microsoft Certified Professional Developer: Enterprise Applications Developer" - one of the new certification tracks for .NET framework 2.0 and Visual Studio 2005.

To get the certifications I have to pass five exams:

Foundation
1) Exam 70-536 TS: Microsoft .NET Framework 2.0 - Application Development Foundation
This exam covers the topics I am just dealing with in the C# tutorials so I map this to my definition of things a software-developer must know (at least if he uses c#).

MCTS Credentials
The next part consists of three exams to get the Microsoft Certified Technology Specialist (MCTS) credentials:
2) Exam 70–528: TS: Microsoft .NET Framework 2.0 - Web-Based Client Development
3) Exam 70-526: TS: Microsoft .NET Framework 2.0 - Windows-Based Client Development
4) Exam 70–529: TS: Microsoft .NET Framework 2.0 - Distributed Application Development
This exams still cover topics for a software-developer.

MCPD: Enterprise Applications Developer Exam
This is the final exam and this exam covers topics of a software-engineer, therefore climbing the ladder up for becoming a software-architect.
5) Exam 70–549: PRO: Designing and Developing Enterprise Applications by Using the Microsoft .NET Framework

So this is the "achievements roadmap" which can be mapped to the C#-learning roadmap.
For now...let's go for 70-536!

Thursday, December 07, 2006

Mock Objects Rock!

As a support of my C# studies I started a "real-life" private project in C# (budget-planning tool). My plan is to apply the "lessons learned" in that project to get a real feeling for it as soon I am ready with the specific lesson. Also sometimes the "lessons learned" may seem to be violently pressed into my solution, its all about the academic value.
For supporting the refactoring which will occure by the constant change of the code I installed NUnit again. After completing the NUnit Quickstart on Nunit.org I studied the article Test-Driven Development in Dotnet by Peter Provost which gives a little deeper insight in NUnit.

In the second half of the article a method for testing user interfaces in a Model-View/Controller environment is introduced by also introducing Mock Objects. That example really hit me. So I quickly downloaded http://sourceforge.net/projects/dotnetmock/ and tried the example. It's great how the mock-objects simulates the view in that example, and by just passing a View-Interface to the model you can exchange the mock-view with a real winform or webform.

The example is based on an idea of the article The Humble Dialog Box and reading Martin Fowler's Mocks Aren't Stubs article will complete the introduction to mock objects and testing.

A really important topic for software-developing, imho. Also i recognized how my code quality improved by using the TDD approach (keyword "Tell Don't Ask" Principle!).

Thursday, November 30, 2006

Roadmap for learning C#

Finally I finished the first C# tutorial and refreshed my knowledge. I also arranged a programm of tutorials for my advancement in c#:

First Step: Pass through some C# tutorials with ascending degree of difficulty
Beginner
http://www.functionx.com/vcsharp/csharp/Lesson01.htm
http://www.devhood.com/training_modules/
http://www.csharp-station.com/tutorial.aspx
Advanced
http://csharpcomputing.com/Tutorials/TOC.htm
http://samples.gotdotnet.com/quickstart/
Pro
http://www.geocities.com/jeff_louie/OOP/oop.htm


Second Step: Get familiar with the dotnet-framework.
Code simple examples with the most important namespaces of the dotnet-framework.


Overview of the most important .NET Framework namespaces.



Third Step: Continuous reading of .NET coding articles
Here are some good sources:
http://www.codeproject.com/csharp/
http://www.codersource.net/codersource_dot_net.html
http://www.developerfusion.co.uk/csharp
http://www.csharphelp.com/
http://www.example-code.com/csharp/default.asp
http://www.codeguru.com/csharp/
http://www.mastercsharp.com/
Most important: MSDN Patterns & Practices Site!


Fourth Step: Get familiar with the new concepts of .NET Framework 2.0
Windows Presentation Foundation (WPF)
Windows Workflow Foundation (WWF)
Windows Communication Foundation (WCF)


So this is the C#-roadmap for for the next time. Of course this studies will be accompanied by the other knowledge-areas (Architect, Engineer and Project-Management). So I am not afraid not to know what to do in the next time.

Concerning Java - at the moment I am concentrating my efforts on C# and not on refreshing my Java knowledge. This is a personal decision that I set my personal focal point there. In my opinion, a software architect should know both languages. I just decided to start with C#.

Thursday, November 23, 2006

What a Software-Architect must know...

Concerning my progress (in the area of coding): I am still working through the first C# tutorial. Just finished lection 16: Delegates and Events. I got stuck to this topic a bit, because the tutorial only scratches the surface of this important topic. So I intensified my studies on that subject which took a bit more time.

Sometimes I ask myself, why am I so slow? The answer is, there is so much to learn additional to learning to code. Currently I read a general basic book about software-architecture (in german): Effektive Software-Architekturen (Effective Software-Architectures) written by Dr. Gernot Starke. A great book in my opinion for a starter like me. Among other things the book proposes a way how an architecture is iteratively developed:

A) Collect information about similar problem/solutions
B) Develop a basic system idea

C) Iteration Cycle
1) Identify influencing factors and boundary conditions for the architecture
2) Identify projectrisks
3) Develop solution-strategies

Ongoing: Documentate your architecture!

Also I really love listening to and watching the many existing podcasts and webcasts. There are MSDN Webcast-Videos, MSDN Podcasts and the MSDN Arcast-Shows with Ron Jacobs. There is also the Software Engineering Radio a non-microsoft podcasts that I ran across lately founded by Markus Voelter. These are great for a long car ride or as a listening lecture for the evening, thus keeping track of the current technologies!

Knowing about the most important technologies is one point of a long list what a software architect should know. The SEI (Software Engineering Instiute) of the Carnegy Mellon Institute has made an interesting study about "The Duties, Skills, and Knowledge of Software Architects".
I think the list and proposals fit well to my separation in architecture, engineer, developer and project-manager!

Tuesday, November 14, 2006

Current Software Architectural Concepts

As a preparation for the job interviews I studied the current most important concepts of software-architecture. I identified three important concepts which I will focus on:

  1. Service Oriented Architecture (SOA)
  2. Model Driven Architecture (MDA)
  3. Event Driven Architecture (EDA)
There are plenty of ressources where these concepts are described, so I will just give a very short summary.

Service Oriented Architecture
SOA is a management concept which leads to a flexible IT Infrastructure which is driven by business needs. The core idea is to provide the whole enterprise functionality as an amount of different independent services.
The main goal of a SOA is the construction of an IT infrastructure which is geared to business processes. Changing business processes need a flexible IT which can adapt to these changes. To enable this flexibility the reusability of functionality and support of distributed systems are other goals of a SOA.

Model Driven Architecture
The MDA tries to automatically generate code via models. The models can be defined in UML so they can be developed in cooperation with the customers. Software changes should only be made in the models, not in the code.


Event Driven Architecture
Components in an EDA communicate via events. Because events are a special kind of message the EDA makes use of a message oriented communication via message channels and the publish-subscribe integration pattern.




Tuesday, November 07, 2006

Drawing for a New Job

My Wacom grafic tablet has finally arrived and I started my drawing lessons. After training circles, lines and boxes I drawed some first elements which you can admire here. It's a start and it's really fun! But you would not believe how difficult it can be to draw a nice round circle.

Look how the hatched areas give the impression of a three dimensional ball.

My Latte Machiato glass. To draw an ellipse is really really tricky!


This Painting is called: "The Lamp - still burning".

The C# tutorials have to wait at the moment, because I have to prepare for two upcoming job interviews in the next two weeks.

Please keep your fingers crossed for me!

Sunday, October 29, 2006

Excursion: Game Development

The internet…there is distraction everywhere. I don’t know how it really began. Perhaps when a colleague introduced me to Line Rider. A 1.5 MB big Macromedia game. Simple idea but it's so great!

Then…was it accidentally that I discovered XNA while browsing the sites for learning C#?. Game development in C# with XNA Game Studio Express which is based on Visual Studio Express 2005. It was like a revelation! Although my first XNA Game by following the tutorial wasn’t much more than a screensaver, it is nevertheless the first step.

And then...the same colleague introduced me to blender, an open-source software program for 3D modelling and rendering. The first tutorial wasn’t real fun (building a stupid table) but the example of Gus in the Wiki-book really impressed me.

Rendered Image of the Walking Gus

So I will try some 3D modelling…don’t games need 3D modells?But to become a 3D-Modeller you need to be an artist. You cannot model what you cannot draw! Since some time I possess a book “Learning to draw”. So yesterday I downloaded different graphics software (there are two kinds: raster and vector based) for examination: Corel Draw, Gimp, Macromedia Freehand, Paint.NET (written in C# and open source!) and of course Photoshop. I know…I should begin with drawing on plain old paper to train my skills but I made a compromise: Yesterday I ordered a used Wacom Graphire3 for only 49,90 Euro.

My new Wacom Graphire Tablet

So, isn’t it great when hobby and profession complement one another?

Sunday, October 22, 2006

Looking for C# Tutorials

Looking for a more structured approach

Just looking for code snippets and testing them seems not to be the right way for me. I want a more structured approach. The code snippets and all that blogs of C# Developers (e.g. MSDN Blogs) seem to address more experienced developers. So I have to establish a knowledge basis first. My first idea was to study the .NET Framework documentation and to learn about each namespace as if it were chapters of a book. Not very motivating.So I looked for C# Tutorials on the internet. And boy, there are many! I consider the advancement from one lection to the next as very satisfactory and therefore motivating. Very good different .NET Quickstarts can be found on the official Microsoft community site GotDotNet. But in my current situation I am looking for more “guided” tutorials in C#.

C# Tutorials

One tutorial which must not be taken too seriously can be found at csharphelp.com. You don’t need an IDE for that tutorial, just plain notepad and the command line. The four short lessons are partially a bit ironic and the last lesson ends with an interop example with a C Library.The first really good C# tutorial I found was the tutorial Visual C# Fundamentals on the website FunctionX. In 24 very detailed lessons the basics of the C# language and even some basics of information technology like data structures and object oriented programming are explained.So the FunctionX tutorial is the tutorial I will start with. I will publish a complete list of recommendable C# tutorials later.

Sunday, October 15, 2006

Snippet Compiler vs. Visual Studio 2005 Express Edition

Coding with Snippet Compiler

While looking for a lightweight C# Editor to refresh my C# knowledge, I stumbled across the tool Snippet Compiler written by Jeff Key. The tool needs less than 2 MB of hard disk space besides the installation of the dotnet framework. Installing is easy: just copy the files in a directory.

The Development Environment of Snippet Compiler

The editor itself is very nice. It resembles the visual studio editor, with a very limited intellisense function but without the overhead of a whole project structure. So it’s great for the quick writing or testing of code snippets. Of course there is not built-in C# documentation so you have to use the documentation of the .NET framework.All in all it’s a very nice tool and definitely better than using notepad and csc.exe!



Visual Studio 2005 Express Edition

So I started looking for C# Snippets to refresh my C# Knowledge. I checked the german site http://www.dotnet-snippets.de/. There you can look for different code snippets via tag keywords. So I randomly selected one code snippet (ReadFromClipboard), copied and pasted it and after adding the right using directive it worked! Great, my first step in becoming a really good C# Developer…While examining the site a bit more I noticed the announcement of a Snippet Contest which ends on December 15th. The best code snippet will win a Windows Vista Ultimate Version. What a boost to my motivation! So I will try to submit an own code snippet in December.An important hint on the site was the proposal of the editor which should be used: Visual Studio 2005 Express Edition. As it is provided by Microsoft for free, I downloaded the software. With 50 MB to download and 100 MB space on the hard disk it is definitely larger than the snippet compiler. But it is worth the space!

The Development Environment of Visual Studio Express 2005

As a bloody beginner I don’t notice the differences to the full version of Visual Studio, so I am really happy about it. At that point when I discover the limitations of the express version I certainly will already be at least an advanced C# developer. So this version is great for me at the moment.Besides: I also downloaded MS SQL Server 2005 Express Edition. I guess I will need it later for sure!

Sunday, October 08, 2006

Disciplines of a Software Architect

There are four terms (or perhaps roles) which come in my mind concerning my "learning-path" in the future:

  1. Software-Developer
  2. Software-Engineer
  3. Software-Architect
  4. IT Project-Manager

I think elements of all terms are important for becoming a good software-architect. You must be able to code e.g. to create prototypes, so you must be a good developer.Software Development today is an engineering discipline in which for example design patterns are used. A good software-architect shoul in my opinion also be a good software-engineer.Architectural patterns describe approved solutions for designing software at a higher level than design patterns. For sure a very important point to work as a software-architect. And last but not least a software-architect should know things about project management. For example should he have knowledge about risc management to evaluate the different possible architectural solutions.

Of course I have to enlighten these roles more in the future. The upper paragraph is a first shot to describe the possible roles of a software-architect and will be enhanced in the future. But I think the contents of my studies will allways fit in one of these four roles and bit by bit it will become apparent what these roles really mean and in what way they are different.

Sunday, October 01, 2006

The First Step

This is my first blog entry (not counting the german entry above). This blog will accompany my way in becoming a hopefully really good software-architect. I hope this blog will motivate myself to go that way. And hopefully during this way my english will improve (thanks to leo the online dictionary in advance: http://dict.leo.org/).
First of all some short information about me:I am a 29 year old computer scientist. In 2003 I made my degree as graduate computer scientiest (Diplom-Informatiker (FH)) at an university of applied science (Fachhochschule) in germany with telecommunication as a focal point.

In my first job I developed applications in ASP and later ASP.NET with a MS SQL Server Database. Because I was the most "experienced" developer in the company I had no other presettings how to develop .NET applications than my own understanding. At least I visited a short 3-day training in development of ASP.NET applications and learned some things about component oriented development. But to be honest - the application wasn't really big and nevertheless the architecture was not really good.
Although I liked "hacking" code in that small company I took up another job in a really big telecommunication company in summer 2004. One reason was some more money, but the main reason was my desire to learn more about professional software development.

Now after somewhat more than 2 years I have to admit that I didn't reached my goal in that company. I learned some things about project management in large enterprises but not very much about professional software development. Since all the time I didn't wrote one single line of code - at least I should have continued coding as a private hobby. But I didn't, shame on me!

So this is the background story. This time I will keep my target in sight and do the right things to become a software architect and develop really good software. There are three important steps to do:

  1. Start studying the art of IT architecture.
  2. Find a job where I can work together with really good developers, engineers or architects.
  3. Document my progress in this blog.