Sunday, December 20, 2009

Software Craftsmanship in Israel

During the last weeks I was busy working on formulating a new user group for Software Professionals.

I am very pleased to invite you to join the group: " Software Craftsmanship in Israel ".

My aim is to discuss and promote software professional skills, through series of articles, posts and monthly meetings. There are plenty of issues to discuss; Education in a technology (explosive) era, Software skills refinement (katas), Agile processes and methods (Refactoring, xUnit Frameworks and Patterns, TDD ...) and of course, Architecture Styles and Design (Selecting the appropriate tools for the requirements).

You are most welcome to join the group!

(Your suggestions and comments will be also highly appreciated.)

Saturday, December 19, 2009

How will you find your next job?

(Cross post from IRefactor)

So, you have decided to move on...

You have updated your CV and sent it to your friends... Then you sent it to a couple of recruitment companies... Then you sent it to all known recruitment companies...

After a while...
You have been called to an interview...and another one... and another one...

Weeks later...
You got a proposal(s) and you have decided to accept the job: The compensations are a little bit better than the existing ones. The issues are the same; After all you are paid to develop more or less according to your experience. Yet, you are pretty much excited about the change; You are going to work with new people and make new collaborations. Though minor, it cannot be dismissed, after all we are social "animals" and changing groups/places has its effect.

Hey, but did you stop to think for a moment whether the next place is going to be a better one? After all, that's the purpose of you moving on, isn't it?

Many posts are dealing with how to hire the best of the bests Software Engineers (and I am not an exception), but this post is dedicated to the searchers themselves.

Here, how you will find your next job:
A disclaimer:
-There are many ways to evaluate a company; I am focusing on more technological/professional evaluations using social media.
-Below is a short list of criteria, followed by my explanations of why those criteria identify a better company.

Learn the company's executives bio:
  • Who are its managers (Company's Web Site)?
  • Were are they mentioned (Google, Techcrunch)?

    • How often are they mentioned?
    • Do they mention their technologies/products vision in a clear way?
    • Can you identify a company's future roadmap?
Search for the company's profile (If not available, search for employees profiles): (Linkedin, Facebook)

  • Look for the current and former employees, are you familiar with any?
  • Look for the current employees profiles:

    • What is their average experience?
    • Do they have any professional blogs? If yes, then:

      • Do they deal with Software Architecture and/or Design?
      • Do they discuss innovative ideas in terms of Software Engineering or Software Management?
      • Do they contain any posts explaining company's software application development decisions?
      • Do they emphasize/teach how things are being done inside their company?

    • Does any of the employees lecture (occasionally or regularly) on Software Engineering topics? (Given that the company isn't a professional training company)
    • Does any of the employees contribute to an open source? ( Linkedin, Google, Codeproject, Codeplex)
    • Does any of the employees attend (occasionally or regularly) any professional conventions (Linkedin Events, Linkedin Groups, Google Groups, Twitter)

Search for the company's additional activities:

And here is why, in my opinion, the above criteria will help you to identify the better companies:
  • Good executives will create a lot of buzz around their company, either by being cited by others or by expressing themselves through press, articles, blogs or tweets (A good example is: Joel Spolsky and his columns here: joelonsoftware).
  • Though this is expected, clear definition of the technologies/products with consistent and proven history of achievements, symbolizes higher success of the company's roadmap (and future).
  • Moreover, such executives, usually create a supportive climate where Software Engineers thrive. In such a climate, Software Engineers are driven by mutual success in terms of products and technologies.
  • Good Engineers, in their turn, usually blog or tweet about their professional experience.
  • Real good Engineers not only discuss a specific technology, but also discuss much wider aspects like Architecture, Design and Software Management. You will have a lot of fun learning and working with such, especially if you spot the following concepts in their posts: S.O.L.I.D principles, Test Driven Development (TDD), Unit Testing, Continuous Integration and Static Code Analysis (also here). Those are the signs of people who care about high quality products!
  • The best Engineers contribute to an open source. They spend their spare time coding and refining their professional knowledge (also here). Not only they enhance themselves, but they also contribute a great deal to others (that's the beauty of the open source). Be sure, they will also contribute to your knowledge and skills when working with them.
  • Thus, being technologically thirsty, those Engineers will attend professional conventions and events and eventually will drive their companies to support such activities.

Remember, it may seem like a long and tedious investigation, but it pays back, if you really aim to find a great place to work in.

Friday, December 4, 2009

Experts Days - 2009

This week we concluded the Experts Days.

The sessions were effectively organized (by Eyal Vardi from E4D), the audience was amazing and the atmosphere was energizing .

Here are the headlines of my sessions:

I. What's new in .NET 4.0 and VS 2010:

The main focus was to emphasize the most important (in my opinion) upcoming features.

Here they are:

  • Task Parallel Library, PLINQ and Coordination Data Structures
  • Code Contracts
  • Reaction (Rx) Framework
  • Managed Extensibility Framework (MEF)
  • Dynamic Language Runtime (DLR - and especially F#)

Also, we reviewed a lot of other upcoming features in .NET 4.0 and Visual Studio 2010 (IDE).

For those, willing to have a deeper look, here is a recommended book.

II. What's new in ADO.NET 4.0

The main focus was to discuss many improvements to the Entity Framework.

In my opinion the newly added capabilities finally bridge the framework to be a handy ORM tool.

Here are the main features we reviewed:

  • Model First Development
  • POCO, Self Tracking Entities and T4 support
  • Code Only
  • Lazy Load
  • IObjectSet and virtual SaveChanges

We also delved into WCF Data Services (previously ADO.NET Data Services) with the current and upcoming features.

We saw how easy it is to break"data silos" using RESTful interfaces.

The main upcoming features are:
  • Support of a JSON format
  • BLOB Streams improvements (Media resource and Media link)
  • Query enhancements, like: projection, row count & inline count
  • Server Driven pages (i.e. server throttling)
  • Feed customizations
A good book to enhance the knowledge can be found here.

Last, but not least, we discussed the Velocity project identifying what are the architecture decisions that should be made in order to utilize a distributed cache.

III. Design Patterns

We made a walkthrough through the catalog of design patterns, like: GRASP and GoF. Utilizing an example, which was given in the class, we applied GRASP "decomposition" patterns to identify main entities and then used GoF "composition" patterns to allow those entities to communicate together in order to meet their requirements.

Finally, we reviewed S.O.L.I.D principles.

It definitely was fun !!!