<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Uri Lavi : Peopleware</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx</link><description>Tags: Peopleware</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Management Tips - A Hebrew Podcast on Management and Leadership</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2012/07/02/management-tips-a-hebrew-podcast-on-management-and-leadership.aspx</link><pubDate>Tue, 03 Jul 2012 01:02:02 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1141238</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=1141238</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2012/07/02/management-tips-a-hebrew-podcast-on-management-and-leadership.aspx#comments</comments><description>As &lt;a href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2012/05/03/giving-a-talk-on-fostering-software-craftsmanship-building-successful-teams.aspx"&gt;promised&lt;/a&gt;, today we &lt;a href="http://il.linkedin.com/pub/lior-cohen/2/207/a04"&gt;(Lior Cohen&lt;/a&gt; and I)  have announced our &lt;a href="http://www.mngttips.com/"&gt;new podcast in Hebrew on Management and Leadership&lt;/a&gt;.
&lt;p&gt;In this podcast we will try to provide tips, tools and best practices from our experience as well as from the experience of other prominent leaders in the Israeli work space. I believe there are many tales about managers and management. Without going into too much details, we believe that management is a skill you need to grow slowly and gradually (the same way as you grow your technology skills for example). It is a long way to go... A well skilled manager works hard every day to &amp;quot;clean&amp;quot; the way for his team members in order to allow &lt;strong&gt;THEM&lt;/strong&gt; to do what they know best (like delivering software for example).&lt;/p&gt;
&lt;p&gt;My hope that this podcast will help everybody, who wants to learn and to grow these skills.&lt;br /&gt;My personal believe is that this podcast isn&amp;#39;t only for managers.&lt;br /&gt;Since one of the keys of good management is creating a highly gelled and efficient environment - I hope that others will contribute (and listen) as well.&lt;/p&gt;
&lt;p&gt;I will be happy to hear you feedbacks (or questions or management dilemmas).&lt;/p&gt;
&lt;p&gt;You can find the podcast here:&lt;a href="http://www.mngttips.com"&gt; www.mngttips.com&lt;/a&gt;. &lt;/p&gt;
&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1141238" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Recording/default.aspx">Recording</category></item><item><title>Giving a talk on Fostering Software Craftsmanship (Building Successful Teams)</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2012/05/03/giving-a-talk-on-fostering-software-craftsmanship-building-successful-teams.aspx</link><pubDate>Thu, 03 May 2012 12:10:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1081419</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=1081419</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2012/05/03/giving-a-talk-on-fostering-software-craftsmanship-building-successful-teams.aspx#comments</comments><description>&lt;p&gt;I will be giving a talk on Fostering Software Craftsmanship (Building Successful Teams) on&lt;a href="http://www.facebook.com/events/395140600531340" title="Hub TA - Software Craftsmanship Uri Lavi" target="_blank"&gt; May the 7th at the Hub Tel - Aviv&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;During the last years I&amp;#39;ve been asked several times on the topics of the talk. Since the session is usually about an hour and so, needless to say that I am only scratching the surface. There is definitely more into that. I only provoke initial thoughts on our profession both from a personal and a team view perspectives.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I will be more than pleaced if you continue to be in touch, reaching for questions, suggestions or taking more personal involvement in the Software Craftsmanship community (&lt;a href="http://www.linkedin.com/groups?gid=2578449" title="SCISR - Linkedin" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://israel.softwarecraftsmanship.org/" title="SCISR" target="_blank"&gt;here&lt;/a&gt;) &lt;/p&gt;&lt;p&gt;In addition, in the following days I will announce a new podcast that I intend to record.&lt;/p&gt;&lt;p&gt;This podcast will be connected to some topics I am mentioning in the talk, but obviously will deal with more broader issues and more deeply.&lt;br /&gt;I&amp;#39;ll post the details soon!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1081419" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Software+Craftsmanship/default.aspx">Software Craftsmanship</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Recording/default.aspx">Recording</category></item><item><title>What should I learn in my CS degree?</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2011/02/25/what-should-i-learn-in-my-cs-degree.aspx</link><pubDate>Fri, 25 Feb 2011 19:40:15 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:795703</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=795703</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2011/02/25/what-should-i-learn-in-my-cs-degree.aspx#comments</comments><description>
&lt;p&gt;My strongest believe is that everyone who devotes his life to Software Engineering, should have a CS degree.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/uri_lavi/CS_Degree.Graduating.PNG" style="WIDTH:193px;DISPLAY:inline;HEIGHT:170px;" height="170" alt="Graduation" width="193" /&gt;&lt;/p&gt;
&lt;p&gt;Why? Well, it&amp;#39;s a different question, so I would postpone my answer for now.
&lt;br /&gt;
Instead, in the following post I would like to emphasize the subjects (and hence the tools) one should acquire during his studies.&lt;/p&gt;
&lt;p&gt;These tools are essential in creating a &amp;quot;shared&amp;quot; language between us the engineers.
&lt;br /&gt;
These tools are essential in being the solid ground of our day to day &lt;span style="LINE-HEIGHT:115%;FONT-FAMILY:&amp;#39;Tahoma&amp;#39;,&amp;#39;sans-serif&amp;#39;;FONT-SIZE:10.5pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:HE;"&gt;architectural&lt;/span&gt; and lingual abstractions.
&lt;br /&gt;
These tools are essential in being the means of our research capabilities, logical deduction, advantages and disadvantages of each method we apply and etc...&lt;/p&gt;
&lt;p&gt;In my opinion, those are the topics one should concentrate on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Data_structure" target="_blank" title="Data Structure - Wikipedia"&gt;Data Structures&lt;/a&gt; - Any course that involves Data Structures, from basic to more complex Data Structures.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Algorithm" target="_blank" title="Algorithm - Wikipedia"&gt;Algorithms&lt;/a&gt; - Graph Algorithms, Dynamic Algorithms, Greeding Algorithms, Aproximate Algorithms, Computational Geometry and etc...&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Operating_system" target="_blank" title="OS - Wikipedia"&gt;Operating Systems&lt;/a&gt; - Everything that involves Operating Systems from theory to practice. If there is a lab on OS, take it!
&lt;br /&gt;
The importance of understanding the bits and bytes of the biggest abstraction we work against every day is priceless.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Artificial_intelligence" target="_blank" title="Artificial Intelligence - Wikipedia"&gt;Artifical Intelligence&lt;/a&gt; - Searching techniques, Logic deduction, Decision tees, Learning technique such as Markov Chains, Neural Networks, Bayesian Networks and etc...&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0262692201?ie=UTF8&amp;amp;tag=urilavblo-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0262692201" target="_blank" title="Structure and Interpretation of Computer Programs Book - Amazon Link"&gt;Programming Languages&lt;/a&gt; - No, it isn&amp;#39;t &amp;quot;Programming in Java&amp;quot;; These courses involve the principles of Software Languages, which are crucial for identifying the right tools for the job.
&lt;br /&gt;
Imperative and Declarative Languages; OOP, AOP, Functional and Logical Languages; The more principles you learn (and the more languages you see) the more you will understand how to apply these languages and when.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, I recommend taking a few &amp;quot;narrowing&amp;quot; courses, courses that are deepening your expertise in a specific field.
&lt;br /&gt;
Some examples are: Natural Language Processing, Computer Vision or Distribute Programming.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s worth noting that, in my opinion, practical principles of &amp;quot;constructing&amp;quot; software should be learned differently.
&lt;br /&gt;
Those skills are better acquired by enrolling into an &lt;a href="http://goo.gl/chQI" target="_blank" title="Mentorship/Apprenticeship Program - SCIL"&gt;apprenticeship program&lt;/a&gt;, by reading classical books and essays, by rubbing elbows with others or by deliberately practicing.&lt;/p&gt;
&lt;p&gt;If you are interested in such practical experience, please apply for the &lt;a href="http://goo.gl/chQI" target="_blank" title="Mentorship/Apprenticeship Program - SCIL"&gt;Mentorship/Apprenticeship&lt;/a&gt; program we enrolled in our &lt;a href="http://www.linkedin.com/groups?gid=2578449" target="_blank" title="Software Craftsmanship in Israel Group"&gt;Software Craftsmanship Group&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=795703" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category></item><item><title>One small step for a man, one giant leap for mankind</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2011/01/05/one-small-step-for-a-man-one-giant-leap-for-mankind.aspx</link><pubDate>Thu, 06 Jan 2011 01:54:55 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:763337</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=763337</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2011/01/05/one-small-step-for-a-man-one-giant-leap-for-mankind.aspx#comments</comments><description>
&lt;p&gt;Lately I had a lot of thoughts about how to introduce a change within an organization.&lt;/p&gt;
&lt;p&gt;For a while now I am giving some talks about leading a software development team, focusing each time on a different facet, such as: Quality, Architecture, Recruitment Process and etc...
&lt;br /&gt;
(I have combined some of those thoughts into a short lecture, which I entitled &lt;a href="http://www.iltechtalks.org.il/home/talks/fosteringsoftwarecraftsmanship" target="_blank" title="Fostering Software Craftsmanship (or How to Build Successful Teams)"&gt;Fostering Software Craftsmanship (Building Successful Teams)&lt;/a&gt; and it is given as a part of the &lt;a href="http://www.iltechtalks.org.il/" target="_blank" title="IL Tech Talks"&gt;IL Tech Talks&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;But here is a &lt;strong&gt;phenomena&lt;/strong&gt;, I encounter each time.&lt;/p&gt;
&lt;p&gt;Most of the audience understand the importance of the concepts, &lt;strong&gt;but really struggle with introducing them to their organization&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/teflon/2896848546/" target="_blank" title="Warning"&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/uri_lavi/OneSmallStepToManOneGiantLeapToMankind.Warning.PNG" style="WIDTH:240px;DISPLAY:inline;HEIGHT:225px;" height="225" alt="Warning" width="240" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="TEXT-ALIGN:left;"&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Writing Unit Tests will lengthen my development time!&lt;/li&gt;
&lt;li&gt;How much time should I &amp;quot;reserve&amp;quot; for doing Refactoring?&lt;/li&gt;
&lt;li&gt;How do I explain to my manager that Refactoring is important?&lt;/li&gt;
&lt;li&gt;Code Reviews are difficult, because people have different tastes!&lt;/li&gt;
&lt;li&gt;Code Reviews are taking too long! We will not be given the time to do it, ever!&lt;/li&gt;
&lt;li&gt;Continuous Integration will take a few weeks to accomplish. I won&amp;#39;t be given any time to do it in the near feature!&lt;/li&gt;
&lt;li&gt;Those concepts are great, but the time to do them should be allocated by the management.&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am sure we all heard those sayings. Heck, we even have given those once! (No... Not really :) )
&lt;br /&gt;
Though I have a lot to say and comment about each and every one of the above statements - there are some broader aspects I must cover first.&lt;/p&gt;
&lt;p&gt;We all hate changes, don&amp;#39;t we? Doing Unit Tests, investing our time in Refactoring (or Builds) - those are just an extra activities that we have never done (or done correctly).
&lt;br /&gt;
One should really invest his own time in order to polish those activities and doing so is just recognizing that we need to change. As humans, we find it extremely difficult to accept changes.
&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/Jack_Welch" target="_blank" title="Jack Welch"&gt;Jack Welch&lt;/a&gt; understood it perfectly, but nevertheless he succeeded to introduce a lot of changes to GE. &lt;a href="http://books.google.com/books?id=mhxTakHN--4C&amp;amp;pg=PA17&amp;amp;lpg=PA17&amp;amp;dq=jack+welch+embrace+the+change&amp;amp;source=bl&amp;amp;ots=PswysecCuq&amp;amp;sig=jfnCsdEelw3niIuXREopftC7viw&amp;amp;hl=en&amp;amp;ei=TR4iTYWHD5KL4gaOmrCGAg&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=2&amp;amp;sqi=2&amp;amp;ved=0CBwQ6AEwAQ#v=onepage&amp;amp;q=jack%20welch%20embrace%20the%20change&amp;amp;f=false" target="_blank" title="Jack Welch and the GE Way"&gt;Jack Welch found the change to be exciting, daring and imaginative&lt;/a&gt;.
&lt;br /&gt;
GE success can be rooted to its ability to change and to change fast.&lt;/p&gt;
&lt;p&gt;However, applying change in the simplest way doesn&amp;#39;t work.
&lt;br /&gt;
We cannot accept the change all at once. &lt;strong style="COLOR:#009500;FONT-SIZE:120%;"&gt;Evolution takes its time&lt;/strong&gt;; Therefore, in order to accept the change we also should adapt &lt;strong&gt;one step after another&lt;/strong&gt;.
&lt;br /&gt;
(It&amp;#39;s really like Refactoring Steps: One small change at a time, compile and test).&lt;/p&gt;
&lt;p&gt;Sometimes it takes &lt;strong&gt;&lt;span style="FONT-SIZE:120%;"&gt;&lt;span style="COLOR:#d90000;"&gt;&lt;strong&gt;&lt;span style="FONT-SIZE:120%;"&gt;years&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt; to introduce all those concepts to your teams:
&lt;br /&gt;
Start by a simple task, like code conventions or source control layout, then teach unit tests and invest in teaching &lt;a href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2011/01/03/code-smells.aspx" target="_blank" title="Code Smells"&gt;code smells&lt;/a&gt;, continue by applying rigor &lt;a href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2010/09/30/effective-code-review-a-presentation.aspx" target="_blank" title="Effective Code Reviews"&gt;Code Reviews&lt;/a&gt; and etc... and etc...&lt;/p&gt;
&lt;p&gt;Doing everything in one big bang just doesn&amp;#39;t work. I have seen several teams that got introduced to Scrum or TDD in a matter of weeks. Those are big changes to somebody who didn&amp;#39;t evolve to the &amp;quot;right&amp;quot; point. Needless to say that the failures that those teams experienced were so discouraging that till now some of those Software Engineers hate TDD and claim that Unit Tests (even not TDD) are plain waste of their time.&lt;/p&gt;
&lt;p&gt;You shouldn&amp;#39;t be surprised that applying all the great concepts to your organization will take years.
&lt;br /&gt;
One step after another; One small step for a Software Engineer, one giant leap for an Organization.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.nasaimages.org/luna/servlet/detail/nasaNAS~9~9~59354~163200:" target="_blank" title="NASA Images"&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/uri_lavi/OneSmallStepToManOneGiantLeapToMankind.Moon.jpg" style="WIDTH:300px;DISPLAY:inline;HEIGHT:294px;" height="294" alt="Close-up of Astronaut&amp;#39;s Foot on Lunar Surface" width="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=763337" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category></item><item><title>Software Craftsmanship - Meeting 4</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2010/11/05/software-craftsmanship-meeting-4.aspx</link><pubDate>Fri, 05 Nov 2010 13:25:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:737355</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=737355</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2010/11/05/software-craftsmanship-meeting-4.aspx#comments</comments><description>&lt;p&gt;
   Boy, I had so much fun during our 4th meeting...
&lt;/p&gt;
&lt;p&gt;
   There were more than 80 people, deeply concerned about our profession and eager to learn best patterns &amp;amp; practices.
   &lt;br /&gt;
   In the first part we had 3 lectures: &lt;b&gt;Code Reviews&lt;/b&gt; (Tools &amp;amp; Processes) - &lt;a href="http://il.linkedin.com/in/rantav" target="_blank" title="Ran Tavory: LinkedIn Profile"&gt;Ran Tavory&lt;/a&gt; , &lt;b&gt;Structure 101&lt;/b&gt; - &lt;a href="http://il.linkedin.com/pub/eran-harel/4/4a3/234" target="_blank" title="Eran Harel: LinkedIn Profile"&gt;Eran Harel&lt;/a&gt; and &lt;b&gt;Legacy
   Code &amp;amp; Unit Tests&lt;/b&gt; - &lt;a href="http://il.linkedin.com/in/urilavi" target="_blank" title="Me: LinkedIn Profile"&gt;Uri Lavi.&lt;/a&gt;
   &lt;br /&gt;
   In the second part &lt;a href="http://il.linkedin.com/in/avivbenyosef" target="_blank" title="Aviv Ben-Yosef: LinkedIn Profile"&gt;Aviv
   Ben-Yosef&lt;/a&gt; &amp;amp; &lt;a href="http://il.linkedin.com/pub/yoni-tsafir/4/514/799" target="_blank" title="Yoni Tsafir: LinkedIn Profile"&gt;Yoni Tsafir&lt;/a&gt; demonstrated pair programming (Randori Style) while solving the &lt;a href="http://codingdojo.org/cgi-bin/wiki.pl?KataBowling" target="_blank" title="Bowling Kata"&gt;&lt;b&gt;Bowling Kata&lt;/b&gt;&lt;/a&gt; exercise.
&lt;/p&gt;
&lt;p&gt;
   Watching this great audience was very satisfying and I received a lot of positive feedback, that will also improve our next sessions.
&lt;/p&gt;
&lt;p&gt;
   During the meeting I have also introduced the &lt;b&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2010/10/18/mentorship-apprenticeship-program.aspx" target="_blank" title="Israeli Mentorship/Apprenticeship Program"&gt;Mentorship/Apprenticeship&lt;/a&gt;&lt;/b&gt; program.
   &lt;br /&gt;
   Today, a few weeks after the meeting, I can proudly say that I mentor &lt;span style="text-decoration:underline;"&gt;two&lt;/span&gt; great
   apprentices.
   &lt;br /&gt;
   Though we only started the process, I expect that the mentorship program &lt;b&gt;will&lt;/b&gt; bring the change to our community and
   will create more professionals and software craftsmen.
&lt;/p&gt;
&lt;p&gt;
   Below you can find the lectures and the source code of the Kata:
&lt;/p&gt;
&lt;p&gt;
   &lt;iframe src="http://player.vimeo.com/video/16368286?portrait=0" width="889" frameborder="0" height="500"&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;iframe src="http://player.vimeo.com/video/16383227?portrait=0" width="889" frameborder="0" height="500"&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;iframe src="http://player.vimeo.com/video/16393693?portrait=0" width="889" frameborder="0" height="500"&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;

&lt;iframe src="http://player.vimeo.com/video/16443162?portrait=0" width="889" frameborder="0" height="500"&gt;&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;
The Bowling Kata source code in &lt;span&gt;Java&lt;/span&gt;.
&lt;br /&gt;
The Game &lt;span&gt;class&lt;/span&gt;:
&lt;br /&gt;
&lt;script src="https://gist.github.com/659272.js?file=Game.java"&gt;&lt;/script&gt;
&lt;br /&gt;
The Game &lt;span&gt;tests&lt;/span&gt;:
&lt;br /&gt;
&lt;script src="https://gist.github.com/659272.js?file=GameTest.java"&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=737355" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Refactoring/default.aspx">Refactoring</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/VIDEO/default.aspx">VIDEO</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Software+Craftsmanship/default.aspx">Software Craftsmanship</category></item><item><title>The Importance of Mentorship</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2010/10/02/the-importance-of-mentorship.aspx</link><pubDate>Sat, 02 Oct 2010 23:13:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:717738</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=717738</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2010/10/02/the-importance-of-mentorship.aspx#comments</comments><description>&lt;p&gt;It&amp;#39;s hard to become a professional. It&amp;#39;s even harder to become a &lt;strong&gt;professional Software Engineer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Last week, during a small management conference I bumped into an old friend of mine, who I didn&amp;#39;t see for a couple of years. Being a leader of a software engineering group, he was frustrated and worried:&lt;/p&gt;
&lt;blockquote style="MARGIN-RIGHT:0px;" dir="ltr"&gt;
&lt;p&gt;&amp;quot;I have a group of 20 people, working hard to meet harsh deadlines. The project has just started, but most of the software engineers are already not pleased. There are junior developers that consider themselves as senior developers, there are senior developers that consider themselves as team leaders and there is &lt;span style="TEXT-DECORATION:none;"&gt;no&lt;/span&gt; uniform professional knowledge. All of these are affecting the product&amp;#39;s quality and really hurting our work.&amp;quot;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Although there are many &lt;span style="TEXT-DECORATION:none;"&gt;ways&lt;/span&gt; to shape &lt;a title="Peopleware" href="http://www.amazon.com/gp/product/0932633439?ie=UTF8&amp;amp;tag=urilavblo-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0932633439" target="_blank"&gt;cohesive and gelled teams&lt;/a&gt;, there is one important notion that just lately received its attention: &lt;strong&gt;Mentoring&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a title="Mentoring a Team" href="http://www.flickr.com/photos/dirkhansen/3235465927/" target="_blank"&gt;&lt;img style="TEXT-ALIGN:center;WIDTH:240px;DISPLAY:block;HEIGHT:180px;MARGIN-LEFT:auto;MARGIN-RIGHT:auto;" alt="Mentoring a Team" src="http://blogs.microsoft.co.il/blogs/uri_lavi/Mentoring.CoachAndTeam.PNG" width="240" height="180" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;professional life&lt;/strong&gt; of a &lt;strong&gt;Software Engineer&lt;/strong&gt; is rather &lt;strong&gt;sporadic&lt;/strong&gt;. &lt;br /&gt;Most of us are &lt;strong&gt;drifted with the stream&lt;/strong&gt;. The lifecycle is pretty much the same; You find a job, &lt;a title="Keyboard\Code Monkeys" href="http://www.youtube.com/watch?v=Eq3CuMDXaPs" target="_blank"&gt;you receive features or requirements to implement, you code, you debug and then you move on&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But, have you ever felt that &lt;strong&gt;if mentored by a true professional&lt;/strong&gt; you would succeed more? &lt;br /&gt;You would know deeper. You would decide better. You would have better choices of your career paths. &lt;br /&gt;I reckon that most of us did feel the same...&lt;/p&gt;
&lt;p&gt;Moreover, good mentors, not only promote individuals, but usually create &lt;a title="How will you find your next job" href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/12/19/how-will-you-find-your-next-job.aspx" target="_blank"&gt;around themselves a great environment&lt;/a&gt; (and therefore great teams). &lt;br /&gt;&lt;strong&gt;Excellence drives excellence&lt;/strong&gt; and professional excellence usually directs all the team members to &lt;strong&gt;shared ownership, partnership and targets&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;However, it is hard to find a true professional and it is even harder to find a true professional that knows &lt;strong&gt;how to mentor&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;There are a lot of parameters that shape a mentor, but no doubt the first virtue will be experience: &lt;strong&gt;Experience of successes, experience of failures and experience of crisis-es&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Those are true &lt;a title="Software Craftsmanship in Israel Group" href="http://www.linkedin.com/groups?gid=2578449" target="_blank"&gt;Software Craftsman&lt;/a&gt;, that &lt;a title="Deliberate Practice" href="http://www.infoq.com/presentations/poppendieck-deliberate-practice-in-software-development" target="_blank"&gt;spent their days and nights in polishing their skills&lt;/a&gt;. &lt;br /&gt;And being &lt;a title="Software Craftsmanship Manifesto" href="http://manifesto.softwarecraftsmanship.org/" target="_blank"&gt;masters in building and managing software&lt;/a&gt;, they can teach you a lot: &lt;a title="Painless Functional Specifications" href="http://www.joelonsoftware.com/articles/fog0000000036.html" target="_blank"&gt;How to write good requirements&lt;/a&gt;, how to architect, how to design, &lt;a title="The Cult Programmer" href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/06/12/Cult-Programmer.aspx" target="_blank"&gt;how to produce clean code&lt;/a&gt;, how to build software, how to ship software, &lt;a title="Fostering Software Craftsmanship" href="http://www.iltechtalks.org.il/home/talks/fosteringsoftwarecraftsmanship" target="_blank"&gt;how to manage technological teams&lt;/a&gt;, how to receive better technological decisions and etc... and etc...&lt;/p&gt;
&lt;p&gt;There is much more to say about mentoring. I will dedicate a few posts in the future, to describe what are, in my opinion, the virtues and the ways to do it well. However in the meanwhile, I would like to take up the glove I have thrown in this post... On our next &lt;a title="Software Craftsmanship in Israel Group" href="http://www.linkedin.com/groups?gid=2578449" target="_blank"&gt;Software Craftsmanship Meetup&lt;/a&gt;, I will enroll a &lt;strong&gt;Mentorship program&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A Mentorship program will allow &lt;strong&gt;Mentees to find an appropriate Mentors&lt;/strong&gt;. &lt;br /&gt;The mentorship period will be for at least &lt;strong&gt;4 months&lt;/strong&gt; (IMHO, it should be more than 4 months, but let&amp;#39;s start with that period). &lt;br /&gt;During the mentorship period both the Mentees and the Mentors are committed to each other. &lt;br /&gt;They will meet for at least 2 hours each week in order to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Provide Technical Guidance and Feedback.&lt;/li&gt;
&lt;li&gt;Provide Reading Sources.&lt;/li&gt;
&lt;li&gt;Review and Build Carree Paths.&lt;/li&gt;
&lt;li&gt;Hold Code Reads, Code Reviews and Pairing.&lt;/li&gt;
&lt;li&gt;Do Architecture and Design Reviews.&lt;/li&gt;
&lt;li&gt;Review Management Decisions and Advise Management Dilemmas&lt;/li&gt;
&lt;li&gt;Etc. . .&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a title="Samurai - A total Devotion to the Occupation" href="http://www.flickr.com/photos/roberto8080/3852496552/" target="_blank"&gt;&lt;img style="TEXT-ALIGN:center;WIDTH:128px;DISPLAY:block;HEIGHT:250px;MARGIN-LEFT:auto;MARGIN-RIGHT:auto;" alt="Samurai - A total Devotion to the Occupation" src="http://blogs.microsoft.co.il/blogs/uri_lavi/Mentorship.Samurai.PNG" width="128" height="250" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you are not coming to the 4th Software Craftsmanship meetup, but still want to participate you are most welcome to &lt;strong&gt;contact me via the blog&lt;/strong&gt;.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=717738" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Software+Craftsmanship/default.aspx">Software Craftsmanship</category></item><item><title>A Round Table</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2010/09/27/a-round-table.aspx</link><pubDate>Tue, 28 Sep 2010 02:28:43 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:716865</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=716865</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2010/09/27/a-round-table.aspx#comments</comments><description>
&lt;p&gt;Here is an interesting thing about &lt;strong&gt;Partnership and Shared Ownership&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Once creating such an atmosphere within your team (company) you are &lt;strong&gt;on the road to success&lt;/strong&gt;.
&lt;br /&gt;
Everybody works together in order to accomplish the shared targets: Product Managers, Engineering, QA, Market Managers and etc...&lt;/p&gt;
&lt;p&gt;Usually, small teams and small companies are characterized by the &amp;quot;Partnership and Shared Ownership&amp;quot; DNA.&lt;/p&gt;
&lt;p&gt;But when they grow, rest assure that slowly but surely the Partnership and the Shared Ownership notion will dissipate.
&lt;br /&gt;
Once reaching &lt;a href="http://www.commonsenseadvice.com/human_cortex_dunbar.html" target="_blank" title="Human Cortex - 150 rule"&gt;~150&lt;/a&gt; people it is almost impossible to share the same values as you did before. (And in my humble opinion, it happens much much before 150)&lt;/p&gt;
&lt;p&gt;Ah, but then a miracle happens...&lt;/p&gt;
&lt;p&gt;Some &amp;quot;smart&amp;quot; manager gets a wonderful idea how to revive the sense of Partnership and Shared Ownership.
&lt;br /&gt;
He suggests to have a &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Round_Table" target="_blank" title="A Round Table"&gt;round table&lt;/a&gt;&amp;quot; with the President\CEO\Group Manager.&lt;/p&gt;
&lt;p style="TEXT-ALIGN:left;"&gt;&lt;a href="http://en.wikipedia.org/wiki/File:King_Arthur_and_the_Knights_of_the_Round_Table.jpg" target="_blank" title="King Arthur and the Knights of the Round Table"&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/uri_lavi/RoundTable.KingArthur.PNG" style="WIDTH:311px;DISPLAY:inline;HEIGHT:270px;" height="270" alt="King Arthur and the Knights of the Round Table" width="311" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Indeed, the President cannot meet each and every employee, but he can share a sense of equality as the King Arthur did with his knights.
&lt;br /&gt;
Let&amp;#39;s have a bunch of employees sitting together, discussing their important values, tasks and views with his majesty.&lt;/p&gt;
&lt;p&gt;Alas, I have been there; Allow me, then, to elaborate regarding what really happens around this table:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Either most of the employees are not familiar with each other or are not familiar enough in order to speak from the heart.&lt;/li&gt;
&lt;li&gt;Therefore, most of the time, the employees will introduce themselves and their projects/tasks without touching the really painful issues.&lt;/li&gt;
&lt;li&gt;The rest of the time, the President will summarize &lt;strong&gt;his&lt;/strong&gt; activities and &lt;strong&gt;his&lt;/strong&gt; &amp;quot;successful decisions and directions&amp;quot;.&lt;/li&gt;
&lt;li&gt;And then... Well, then the meeting will be over. (But at least the President will be happy. After all, such a &amp;quot;convenient&amp;quot; audience is very hard to find...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are only two recipes to succeed in creating the Partnership and Shared Ownership atmosphere.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Involve &amp;amp; Trust&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/shivaj/2079666354/" target="_blank" title="Involvement &amp;amp; Trust"&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/uri_lavi/RoundTable.Trust.PNG" style="WIDTH:163px;DISPLAY:inline;HEIGHT:123px;" height="123" alt="Involvement &amp;amp; Trust" width="163" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You &lt;strong&gt;involve your employees&lt;/strong&gt;, &lt;strong&gt;they involve their employees&lt;/strong&gt; and so on... and so on... You spend your time &lt;strong&gt;explaining the roadmap&lt;/strong&gt;, &lt;strong&gt;emphasizing values&lt;/strong&gt;, &lt;strong&gt;motivating&lt;/strong&gt; and &lt;strong&gt;also hearing&lt;/strong&gt; what your people have to say. &lt;strong&gt;You verify that you follow what you preach&lt;/strong&gt;; You incorporate your employees suggestions and opinions. You also give an attribution as your employees should be acknowledged if they have provided a good idea. And you &lt;strong&gt;provide a &amp;quot;safety net&amp;quot;&lt;/strong&gt;. Your employees should know that they have a strong figure standing behind them; &lt;strong&gt;You don&amp;#39;t blame, you don&amp;#39;t share your disappointments - you support and foster&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;But sometimes, the round table idea sneaks into the small companies.&lt;/p&gt;
&lt;p&gt;When it happens, it signals that the problem is even worse; If a manager feels that there is a need to have a round table in a small company, it means that he &lt;strong&gt;doesn&amp;#39;t have the time&lt;/strong&gt; to bestow the values on his employees. His hope is to do the &lt;strong&gt;minimal&lt;/strong&gt; effort, bringing everybody in &amp;quot;one take&amp;quot; to the table, in order to &amp;quot;motivate&amp;quot;. Though the employees will feel more comfortable with each other in a small company, it just emphasizes the miscommunication and the mistrust that is going on. Clearly, this is not a best management...&lt;/p&gt;
&lt;p&gt;Dear manager: Involve &amp;amp; Trust... And do it &lt;strong style="COLOR:#008000;"&gt;personally&lt;/strong&gt;!&lt;/p&gt;
&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=716865" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category></item><item><title>Who Cares? (Software Craftsmanship - Meeting 2)</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2010/07/25/who-cares-software-craftsmanship-meeting-2.aspx</link><pubDate>Mon, 26 Jul 2010 00:15:19 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:683275</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=683275</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2010/07/25/who-cares-software-craftsmanship-meeting-2.aspx#comments</comments><description>
&lt;p&gt;I dare to say &lt;strong&gt;&lt;span style="TEXT-DECORATION:underline;"&gt;WE DO... WE CARE&lt;/span&gt;&lt;/strong&gt; !!!
&lt;br /&gt;
This Wednesday (on 21.07.2010) we had a &lt;a href="http://events.linkedin.com/2nd-Meeting-Software-Craftsmanship/pub/348376" target="_blank" title="2nd Software Craftsmanship Meeting RSVP"&gt;second Software Craftsmanship meeting&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;More than &lt;strong&gt;50&lt;/strong&gt; &amp;quot;hungry&amp;quot; software craftsmen came to share their knowledge and practice their software skills.
&lt;br /&gt;
We reviewed bad code, identified &lt;a href="http://en.wikipedia.org/wiki/Code_smell" target="_blank" title="Code Smells"&gt;Code Smells&lt;/a&gt; and suggested how to improve it.&lt;/p&gt;
&lt;p&gt;It is well known that the best way to communicate between Software Professionals is to write and read code &lt;strong&gt;together&lt;/strong&gt;. Therefore we &lt;strong&gt;&lt;span style="TEXT-DECORATION:underline;"&gt;WROTE&lt;/span&gt;&lt;/strong&gt; code in &lt;a href="http://codingdojo.org/" target="_blank" title="Dojo Style"&gt;Dojo Style&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I am really excited to see such a community that truly cares about its craft.&lt;/p&gt;
&lt;p&gt;If you thought there are none like you, think again...
&lt;br /&gt;
It doesn&amp;#39;t make any difference what type of technology you are using; There are solid Software Principles that are universal and a &lt;a href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/06/12/Cult-Programmer.aspx" target="_blank" title="Cult Programmer"&gt;technology is just one of the tools you should know how to apply&lt;/a&gt;.
&lt;br /&gt;
It&amp;#39;s really up to us...&lt;/p&gt;
&lt;p&gt;If you are for clean, maintainable and readable code, professionalism (&lt;a href="http://en.wikipedia.org/wiki/Software_craftsmanship" target="_blank" title="Software Craftsmanship Wiki"&gt;craftsmanship over crap&lt;/a&gt;, [also &lt;a href="http://manifesto.softwarecraftsmanship.org/" target="_blank" title="Software Craftsmanship Manifesto"&gt;here&lt;/a&gt;]) and thorough knowledge, then your place is with us.
&lt;br /&gt;
Join our &lt;a href="http://www.linkedin.com/groups?gid=2578449" target="_blank" title="LinkedIn: Software Craftsmanship in Israel Group"&gt;group&lt;/a&gt;, come to our sessions (every ~1.5 months), share your knowledge and resharpen your skills.&lt;/p&gt;
&lt;p&gt;Here are the slides from the meeting.
&lt;br /&gt;&lt;/p&gt;
&lt;div style="WIDTH:425px;" id="__ss_4807795"&gt;&lt;strong style="MARGIN:12px 0px 4px;DISPLAY:block;"&gt;&lt;a href="http://www.slideshare.net/urilavi/software-craftsmanship-2" title="Software Craftsmanship - 2nd Meeting"&gt;Software Craftsmanship - 2nd Meeting&lt;/a&gt;&lt;/strong&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=softwarecraftsmanship-2-100721143919-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=software-craftsmanship-2" /&gt;&lt;param name="wmode" /&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=softwarecraftsmanship-2-100721143919-phpapp01&amp;amp;rel=0&amp;amp;stripped_title=software-craftsmanship-2" name="__sse4807795" allowscriptaccess="always" height="355" width="425" allowfullscreen="true" type="application/x-shockwave-flash" /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;In addition, you can also find below, &lt;span style="TEXT-DECORATION:underline;"&gt;my&lt;/span&gt; suggestion to the Roman Numeral exercise we did.
&lt;br /&gt;
(Actually, I can refactor the solution even further, but in the real world scenario I think such a solution will be an overkill).&lt;/p&gt;
&lt;div style="BORDER-BOTTOM:silver 1px solid;TEXT-ALIGN:left;BORDER-LEFT:silver 1px solid;PADDING-BOTTOM:4px;LINE-HEIGHT:12pt;BACKGROUND-COLOR:#f4f4f4;MARGIN:20px 0px 10px;PADDING-LEFT:4px;WIDTH:97.5%;PADDING-RIGHT:4px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;MAX-HEIGHT:200px;FONT-SIZE:8pt;OVERFLOW:auto;BORDER-TOP:silver 1px solid;CURSOR:text;BORDER-RIGHT:silver 1px solid;PADDING-TOP:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id="codeSnippet"&gt;
&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;ShortRomanNumeral&lt;/span&gt;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
{
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;internal&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;struct&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; Value { get; set; }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; Presentation { get; set; }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; MinShortRomanValue = 0;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; MaxShortRomanValue = 3999;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; zeroRomanPresentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;Nulla&amp;quot;&lt;/span&gt;;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;[] shortRomanMappers = 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 1000,  Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;M&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;()Value = 900,   Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;CM&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 500,   Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;D&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 400,   Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;CD&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 100,   Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;C&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 90,    Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;XC&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 50,    Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;L&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 40,    Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;XL&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 10,    Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;X&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 9,     Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;IX&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 5,     Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;V&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;()Value = 4,     Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;IV&amp;quot;&lt;/span&gt;},
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt;(){Value = 1,     Presentation = &lt;span style="COLOR:#006080;"&gt;&amp;quot;I&amp;quot;&lt;/span&gt;}
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    };
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;value&lt;/span&gt;;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;readonly&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; presentation;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;ShortRomanNumeral&lt;/span&gt;(&lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;value&lt;/span&gt;)
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="COLOR:#0000ff;"&gt;value&lt;/span&gt; &amp;lt; MinShortRomanValue || &lt;span style="COLOR:#0000ff;"&gt;value&lt;/span&gt; &amp;gt; MaxShortRomanValue)
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
            &lt;span style="COLOR:#0000ff;"&gt;throw&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;ArgumentException&lt;/span&gt;();
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;else&lt;/span&gt;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
            &lt;span style="COLOR:#0000ff;"&gt;this&lt;/span&gt;.&lt;span style="COLOR:#0000ff;"&gt;value&lt;/span&gt; = &lt;span style="COLOR:#0000ff;"&gt;value&lt;/span&gt;;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
            presentation = CalculateRomanPresentation();
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; CalculateRomanPresentation()
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;if&lt;/span&gt; (&lt;span style="COLOR:#0000ff;"&gt;value&lt;/span&gt; &amp;gt; 0)
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
            &lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; NonZeroRomanPresentation();
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; zeroRomanPresentation;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; NonZeroRomanPresentation()
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; currentValue = &lt;span style="COLOR:#0000ff;"&gt;value&lt;/span&gt;;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#338c7e;"&gt;StringBuilder&lt;/span&gt; presentation = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;StringBuilder&lt;/span&gt;();
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="COLOR:#338c7e;"&gt;RomanMapper&lt;/span&gt; romanMapper &lt;span style="COLOR:#0000ff;"&gt;in&lt;/span&gt; shortRomanMappers)
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
            &lt;span style="COLOR:#0000ff;"&gt;while&lt;/span&gt; (currentValue - romanMapper.Value &amp;gt;= 0)
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
            {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
                currentValue -= romanMapper.Value;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
                presentation.Append(romanMapper.Presentation);
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
            }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
       &lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; presentation.ToString();
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; ToString()
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    {
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
        &lt;span style="COLOR:#0000ff;"&gt;return&lt;/span&gt; presentation;
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    }
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, Courier, Monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And here are the Unit Tests:&lt;/p&gt;
&lt;div style="BORDER-BOTTOM:silver 1px solid;TEXT-ALIGN:left;BORDER-LEFT:silver 1px solid;PADDING-BOTTOM:4px;LINE-HEIGHT:12pt;BACKGROUND-COLOR:#f4f4f4;MARGIN:20px 0px 10px;PADDING-LEFT:4px;WIDTH:97.5%;PADDING-RIGHT:4px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;MAX-HEIGHT:200px;FONT-SIZE:8pt;OVERFLOW:auto;BORDER-TOP:silver 1px solid;CURSOR:text;BORDER-RIGHT:silver 1px solid;PADDING-TOP:4px;" id="codeSnippetWrapper"&gt;
&lt;div style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id="codeSnippet"&gt;
&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(0, &lt;span style="COLOR:#006080;"&gt;&amp;quot;Nulla&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(1, &lt;span style="COLOR:#006080;"&gt;&amp;quot;I&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(2, &lt;span style="COLOR:#006080;"&gt;&amp;quot;II&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(3, &lt;span style="COLOR:#006080;"&gt;&amp;quot;III&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(4, &lt;span style="COLOR:#006080;"&gt;&amp;quot;IV&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(5, &lt;span style="COLOR:#006080;"&gt;&amp;quot;V&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(6, &lt;span style="COLOR:#006080;"&gt;&amp;quot;VI&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(8, &lt;span style="COLOR:#006080;"&gt;&amp;quot;VIII&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(9, &lt;span style="COLOR:#006080;"&gt;&amp;quot;IX&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(10, &lt;span style="COLOR:#006080;"&gt;&amp;quot;X&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(17, &lt;span style="COLOR:#006080;"&gt;&amp;quot;XVII&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(23, &lt;span style="COLOR:#006080;"&gt;&amp;quot;XXIII&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(47, &lt;span style="COLOR:#006080;"&gt;&amp;quot;XLVII&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(89, &lt;span style="COLOR:#006080;"&gt;&amp;quot;LXXXIX&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(3999, &lt;span style="COLOR:#006080;"&gt;&amp;quot;MMMCMXCIX&amp;quot;&lt;/span&gt;)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; ToString_OfANumber_ReturnsRomanPresentation(&lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; number, &lt;span style="COLOR:#0000ff;"&gt;string&lt;/span&gt; romanPresentation)
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
{
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#338c7e;"&gt;Assert&lt;/span&gt;.AreEqual(romanPresentation, &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;ShortRomanNumeral&lt;/span&gt;(number).ToString());
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
}
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(-1)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(-2)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[ExpectedException(&lt;span style="COLOR:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#338c7e;"&gt;ArgumentException&lt;/span&gt;))]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; ToString_OfANegativeNumber_ThrowsArgumentException(&lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; number)
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
{
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;ShortRomanNumeral&lt;/span&gt;(number);
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
}
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
 
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(4000)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[&lt;span style="COLOR:#338c7e;"&gt;TestCase&lt;/span&gt;(5000)]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
[ExpectedException(&lt;span style="COLOR:#0000ff;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:#338c7e;"&gt;ArgumentException&lt;/span&gt;))]
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
&lt;span style="COLOR:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;void&lt;/span&gt; ToString_OfANumberGreaterThan3999_ThrowsArgumentException(&lt;span style="COLOR:#0000ff;"&gt;int&lt;/span&gt; number)
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
{
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
    &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#338c7e;"&gt;ShortRomanNumeral&lt;/span&gt;(number);
&lt;/pre&gt;

&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:white;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;"&gt;
}
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=683275" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Software+Craftsmanship/default.aspx">Software Craftsmanship</category></item><item><title>How will you find your next job?</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/12/19/how-will-you-find-your-next-job.aspx</link><pubDate>Sun, 20 Dec 2009 00:39:14 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:473165</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=473165</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/12/19/how-will-you-find-your-next-job.aspx#comments</comments><description>
&lt;p&gt;So, &lt;em&gt;you have decided to move on&lt;/em&gt;...&lt;/p&gt;
&lt;p&gt;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...&lt;/p&gt;
&lt;p&gt;&lt;em&gt;After a while&lt;/em&gt;...
&lt;br /&gt;
You have been called to an interview...and another one... and another one...&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Weeks later&lt;/em&gt;...
&lt;br /&gt;
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 &amp;quot;animals&amp;quot; and changing groups/places has its effect.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hey&lt;/strong&gt;, but did you stop to think for a moment &lt;strong&gt;whether the next place is going to be a better one&lt;/strong&gt;? After all, that&amp;#39;s the purpose of you moving on, isn&amp;#39;t it?&lt;/p&gt;
&lt;p&gt;Many posts are dealing with how to hire the best of the bests Software Engineers (and I am not an &lt;a href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/04/12/the-hunt-for-software-engineer.aspx" target="_blank" title="The Hunt for a Software Engineer"&gt;exception&lt;/a&gt;), but this post is dedicated to the searchers themselves.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="TEXT-DECORATION:underline;"&gt;Here, how you will find your next job:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;div style="FONT-SIZE:smaller;"&gt;A disclaimer:
&lt;br /&gt;
-There are many ways to evaluate a company; I am focusing on more technological/professional evaluations using social media.
&lt;br /&gt;
-Below is a short list of criteria, followed by my explanations of why those criteria identify a better company.&lt;/div&gt;
&lt;p&gt;&lt;span style="TEXT-DECORATION:underline;"&gt;Learn the company&amp;#39;s executives bio:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Who are its managers (Company&amp;#39;s Web Site)?&lt;/li&gt;
&lt;li&gt;Were are they mentioned (&lt;a href="http://www.google.com/" target="_blank" title="Google"&gt;Google&lt;/a&gt;, &lt;a href="http://www.techcrunch.com/" target="_blank" title="Techcrunch"&gt;Techcrunch&lt;/a&gt;)?&lt;/li&gt;
&lt;li style="LIST-STYLE-TYPE:none;"&gt;
&lt;ul&gt;
&lt;li&gt;How often are they mentioned?&lt;/li&gt;
&lt;li&gt;Do they mention their technologies/products vision in a clear way?&lt;/li&gt;
&lt;li&gt;Can you identify a company&amp;#39;s future roadmap?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="TEXT-DECORATION:none;"&gt;&lt;span style="TEXT-DECORATION:underline;"&gt;Search for the company&amp;#39;s profile (If not available, search for employees profiles):&lt;/span&gt; (&lt;a href="http://www.linkedin.com/" target="_blank" title="Linkedin"&gt;Linkedin&lt;/a&gt;, &lt;a href="http://www.facebook.com/" target="_blank" title="Facebook"&gt;Facebook&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Look for the current and former employees, are you familiar with any?&lt;/li&gt;
&lt;li&gt;Look for the current employees profiles:&lt;/li&gt;
&lt;li style="LIST-STYLE-TYPE:none;"&gt;
&lt;ul&gt;
&lt;li&gt;What is their average experience?&lt;/li&gt;
&lt;li&gt;Do they have any professional blogs? If yes, then:&lt;/li&gt;
&lt;li style="LIST-STYLE-TYPE:none;"&gt;
&lt;ul&gt;
&lt;li&gt;Do they deal with Software Architecture and/or Design?&lt;/li&gt;
&lt;li&gt;Do they discuss innovative ideas in terms of Software Engineering or Software Management?&lt;/li&gt;
&lt;li&gt;Do they contain any posts explaining company&amp;#39;s software application development decisions?&lt;/li&gt;
&lt;li&gt;Do they emphasize/teach how things are being done inside their company?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Does any of the employees lecture (occasionally or regularly) on Software Engineering topics? (Given that the company isn&amp;#39;t a professional training company)&lt;/li&gt;
&lt;li&gt;Does any of the employees contribute to an open source? ( &lt;a href="http://www.linkedin.com/" target="_blank" title="Linkedin"&gt;Linkedin&lt;/a&gt;, &lt;a href="http://www.google.com/" target="_blank" title="Google"&gt;Google&lt;/a&gt;, &lt;a href="http://www.codeproject.com/" target="_blank" title="The Code Project"&gt;Codeproject&lt;/a&gt;, &lt;a href="http://www.codeplex.com/" target="_blank" title="CodePlex"&gt;Codeplex&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Does any of the employees attend (occasionally or regularly) any professional conventions (&lt;a href="http://www.linkedin.com/static?key=application_directory&amp;amp;trk=hb_side_apps" target="_blank" title="Linked Events"&gt;Linkedin Events&lt;/a&gt;, &lt;a href="http://www.linkedin.com/" target="_blank" title="Linked Groups"&gt;Linkedin Groups&lt;/a&gt;, &lt;a href="http://groups.google.com/" target="_blank" title="Google Groups"&gt;Google Groups&lt;/a&gt;, &lt;a href="http://twitter.com/" target="_blank" title="Twitter"&gt;Twitter&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="TEXT-DECORATION:underline;"&gt;Search for the company&amp;#39;s additional activities:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Does the company support an open source? (&lt;a href="http://www.linkedin.com/" target="_blank" title="Linkedin"&gt;Linkedin&lt;/a&gt;, &lt;a href="http://www.google.com/" target="_blank" title="Google"&gt;Google&lt;/a&gt;, &lt;a href="http://www.codeproject.com/" target="_blank" title="Code Project"&gt;Codeproject&lt;/a&gt;, &lt;a href="http://www.codeplex.com/" target="_blank" title="Codeplex"&gt;Codeplex&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Does the company contribute to an open source? (&lt;a href="http://www.linkedin.com/" target="_blank" title="Linkedin"&gt;Linkedin&lt;/a&gt;, &lt;a href="http://www.google.com/" target="_blank" title="Google"&gt;Google&lt;/a&gt;, &lt;a href="http://www.codeproject.com/" target="_blank" title="Code Project"&gt;Codeproject&lt;/a&gt;, &lt;a href="http://www.codeplex.com/" target="_blank" title="Codeplex"&gt;Codeplex&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Does the company support any professional event?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And here is why, in my opinion, the above criteria will help you to identify the better companies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;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: &lt;a href="http://www.joelonsoftware.com/" target="_blank" title="JoelOnSoftware"&gt;joelonsoftware&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Though this is expected, clear definition of the technologies/products with consistent and proven history of achievements, symbolizes higher success of the company&amp;#39;s roadmap (and future).&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Good Engineers, in their turn, usually blog or tweet about their professional experience.&lt;/li&gt;
&lt;li&gt;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: &lt;a href="http://www.amazon.com/gp/product/0131857258?ie=UTF8&amp;amp;tag=urilavblo-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0131857258" target="_blank" title="Agile Principles, Patterns, and Practices in C#"&gt;S.O.L.I.D&lt;/a&gt; principles, &lt;a href="http://www.amazon.com/gp/product/0321146530?ie=UTF8&amp;amp;tag=urilavblo-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321146530" target="_blank" title="Test Driven Development: By Example"&gt;Test Driven Development&lt;/a&gt; (TDD), &lt;a href="http://www.amazon.com/gp/product/1933988274?ie=UTF8&amp;amp;tag=urilavblo-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=1933988274" target="_blank" title="The Art of Unit Testing: With Examples in .Net"&gt;Unit Testing&lt;/a&gt;, &lt;a href="http://www.amazon.com/gp/product/0974514047?ie=UTF8&amp;amp;tag=urilavblo-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0974514047" target="_blank" title="Ship it! A Practical Guide to Successful Software Projects"&gt;Continuous Integration&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis" target="_blank" title="Static Code Analysis Tools"&gt;Static Code Analysis&lt;/a&gt; (also &lt;a href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/06/12/Cult-Programmer.aspx" target="_blank" title="A Cult Programmer"&gt;here&lt;/a&gt;). Those are the signs of people who care about high quality products!&lt;/li&gt;
&lt;li&gt;The best Engineers contribute to an open source. They spend their spare time coding and &lt;a href="http://manifesto.softwarecraftsmanship.org/" target="_blank" title="Software Craftsmanship Manifesto"&gt;refining their professional knowledge&lt;/a&gt; (also &lt;a href="http://www.linkedin.com/groups?gid=2578449" target="_blank" title="Software Craftsmanship in Israel"&gt;here&lt;/a&gt;). Not only they enhance themselves, but they also contribute a great deal to others (that&amp;#39;s the beauty of the open source). Be sure, they will also contribute to your knowledge and skills when working with them.&lt;/li&gt;
&lt;li&gt;Thus, being technologically thirsty, those Engineers will attend professional conventions and events and eventually will drive their companies to support such activities.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=473165" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/DEV/default.aspx">DEV</category></item><item><title>A Cult Programmer</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/06/12/Cult-Programmer.aspx</link><pubDate>Fri, 12 Jun 2009 22:01:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:336175</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=336175</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/06/12/Cult-Programmer.aspx#comments</comments><description>&lt;p&gt;Last week, while conducting interviews for a Senior Software Engineer position, a candidate asked me a “red alert” question. A few moments after starting the interview and explaining the position, the candidate squeezed the following:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“What is the current .NET framework you are using and are you planning to move to .NET 4.0?”&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I bet you wonder… Is it really a “red alert” question?&lt;/p&gt;
&lt;p&gt;Allow me to elaborate. The candidate’s real motivation was to percept &lt;strong&gt;how technological&lt;/strong&gt; is the company that interviews him. If the company is stuck in .NET 1.X or it isn’t planning to move forward with Microsoft’s future plans, it just not technological enough.&lt;/p&gt;
&lt;p&gt;What alerts me is the idea that the specific version of framework used by the software is a measure to the software’s quality and not using a specific technology necessarily means something bad. Maybe the company utilizes the best practices of Software Development by applying: Analysis, Architecture &amp;amp; Design, Automatic Unit Testing, Static Code Analysis, Code Coverage, Integration Tests, Automatic Tests, Automatic Builds, Code Reviews, Peer Programming and etc… Maybe the company stands for writing &lt;strong&gt;quality&lt;/strong&gt; software by applying the Object Oriented Principles like &lt;a href="http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design)" target="_blank"&gt;GRASP&lt;/a&gt; (loose coupling / high cohesion), &lt;a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)" target="_blank"&gt;Design Patterns&lt;/a&gt;, &lt;a href="http://blog.objectmentor.com/articles/2008/04/08/clean-code-whew" target="_blank"&gt;SOLID&lt;/a&gt; and etc… &lt;br /&gt;Maybe somebody forgot that a good quality software doesn’t mean necessary&amp;nbsp;using the &lt;span style="COLOR:#0000ff;"&gt;dynamic&lt;/span&gt; keyword?&lt;/p&gt;
&lt;p&gt;Allow me to emphasis. Technology is important! Choosing the &lt;strong&gt;right&lt;/strong&gt; technology for the &lt;strong&gt;specific&lt;/strong&gt; requirements of your application is important! &lt;br /&gt;However, a technology is not the key factor in the software’s success. &lt;br /&gt;It reminds me a good &lt;a href="http://www.joelonsoftware.com/articles/fog0000000339.html" target="_blank"&gt;article&lt;/a&gt; discussing the technology leaps, by &lt;a href="http://www.joelonsoftware.com/" target="_blank"&gt;Joel Spolsky&lt;/a&gt;. Jumping from technology to technology seems to be just a plain “Fire and Motion”.&lt;/p&gt;
&lt;p&gt;If you are asked whether you are planning to move towards .NET X.X, just ask the candidate to explain, why (or what) in his opinion moving to .NET X.X will contribute to your application. Most of the time, as in my case, the answer will be quit generic: “It’s just a better technology”. This clearly, as explained above, doesn’t stand! Such a candidate is being marked often as a cult programmer. A Cult Programmer is a programmer who seems to compensate &lt;a href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/04/12/the-hunt-for-software-engineer.aspx" target="_blank"&gt;sound Software Engineering skills&lt;/a&gt; solely with a specific technology evolution.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=336175" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Var{i-able;}</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/05/28/var-keyword-variable-declaration.aspx</link><pubDate>Thu, 28 May 2009 20:48:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:308683</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=308683</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/05/28/var-keyword-variable-declaration.aspx#comments</comments><description>&lt;p&gt;Here is a scoop; The good software engineer&amp;nbsp;is lazy!&amp;nbsp; &lt;br /&gt;You don’t believe me? Then ask yourself this: If a good software engineer was not lazy why would he: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automate processes? &lt;/li&gt;
&lt;li&gt;Reuse a function instead of duplicating its code? &lt;/li&gt;
&lt;li&gt;Explicitly name a function for its behavior instead of naming a function F1 and providing a non descriptive (and possibly long) documentation? &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Yet, here is another scoop; The bad software engineer&amp;nbsp;is lazy too! &lt;br /&gt;While&amp;nbsp;this statement clearly isn’t a shock to you, it immediately pop-ups the question: &lt;br /&gt;&lt;/p&gt;
&lt;blockquote&gt;What is&amp;nbsp;the difference? &lt;/blockquote&gt;
&lt;p&gt;The difference is that a &lt;strong&gt;good software engineer is lazy in a constructive way&lt;/strong&gt; (which allows to build reusable software and automated processes) &lt;strong&gt;while a bad software engineer is lazy in a destructive way&lt;/strong&gt; (which destroys any chance for a reusable software and dooms you for long hours of struggling&amp;nbsp;to understand and fix the bad code).&lt;/p&gt;
&lt;p&gt;And here is a short example: &lt;br /&gt;The &lt;font color="#0000ff"&gt;var&lt;/font&gt; keyword allows implicitly typed &lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;font color="#ff8000"&gt;i&lt;/font&gt;&lt;font color="#800000"&gt;able&lt;/font&gt; declaration. &lt;br /&gt;To tell the truth,&lt;strong&gt; it doesn’t allow&amp;nbsp;to be a bad lazy software engineer! &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why bad? Take a look at the code below: &lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id="codeSnippet"&gt;&lt;span style="COLOR:#0000ff;"&gt;var&lt;/span&gt; database = DatabaseFactory.CreateDatabase();&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;What is the meaning (meaning = type) of the database object in this context? Do I really need to guess that? Does somebody expect me to go to its definition to find out?&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;&lt;pre style="BORDER-BOTTOM-STYLE:none;TEXT-ALIGN:left;PADDING-BOTTOM:0px;LINE-HEIGHT:12pt;BORDER-RIGHT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;MARGIN:0em;PADDING-LEFT:0px;WIDTH:100%;PADDING-RIGHT:0px;FONT-FAMILY:&amp;#39;Courier New&amp;#39;, courier, monospace;DIRECTION:ltr;BORDER-TOP-STYLE:none;COLOR:black;FONT-SIZE:8pt;BORDER-LEFT-STYLE:none;OVERFLOW:visible;PADDING-TOP:0px;" id="codeSnippet"&gt;&lt;span style="COLOR:#008000;"&gt;//...&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR:#0000ff;"&gt;foreach&lt;/span&gt;(var observingStore &lt;span style="COLOR:#0000ff;"&gt;in&lt;/span&gt; wareHouse.Stores)&lt;br /&gt;{&lt;br /&gt; &lt;span style="COLOR:#008000;"&gt;//...&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="COLOR:#008000;"&gt;//...&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;What is the meaning of the observingStore object in this context? Was it named observingStore due to its implementation of the &lt;a href="http://en.wikipedia.org/wiki/Observer_pattern" target="_blank"&gt;Observer&lt;/a&gt; pattern (which implements IObserver), or is it just an object name of a Store, ObserverStore or even ArgicultureStore&amp;nbsp;class type?&lt;/p&gt;
&lt;p&gt;Remember, you want to be lazy in a constructive way; You want to read those lines of code without wondering. You want to immediately&amp;nbsp;grasp&amp;nbsp;the meaning (types) of the objects you are dealing with, without switching the context and jumping to a different location just to refresh your memory. &lt;/p&gt;
&lt;p&gt;The &lt;font color="#0000ff"&gt;var&lt;/font&gt; keyword was introduced for one and one purpose only; To allow usage of &lt;a href="http://msdn.microsoft.com/en-us/library/bb397696.aspx" target="_blank"&gt;anonymous types&lt;/a&gt;. Therefore, this is the only place you should use it! &lt;strong&gt;Unless you are a bad lazy software engineer&lt;/strong&gt; (which clearly is not the case :) ) you will follow the rule!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=308683" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Refactoring/default.aspx">Refactoring</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Dude, I blew up the Demo!</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/04/24/dude-i-blew-up-the-demo.aspx</link><pubDate>Fri, 24 Apr 2009 19:52:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:274703</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=274703</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/04/24/dude-i-blew-up-the-demo.aspx#comments</comments><description>&lt;p&gt;I am sure, we are &lt;strong&gt;ALL&lt;/strong&gt; familiar with the situation:&lt;/p&gt;
&lt;p&gt;Morning… The sun is shining, the birds are chirping… You are sitting in front of your computer, sipping a delicious cup of coffee. Then, in the corner of your eye, you spot movement; your VP Marketing approaches you with a big smile on his face:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Jonathan”, he says, “Just got important news, we have a big opportunity! We have been requested to demonstrate our super complex web analysis capabilities to a huge potential client. Could we build a quick demo?”&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You sigh and start coding… &lt;/p&gt;
&lt;p&gt;You don&amp;#39;t sleep neither eat; you copy and paste; you code; you build and execute and after stressful (but, yes, enjoyable) five days you provide a top-notch Demo. &lt;/p&gt;
&lt;p&gt;The new “toy” becomes the hottest news in the office. &lt;br /&gt;It’s cool, it&amp;#39;s fast, it&amp;#39;s colorful and it demonstrates an innovative functionality and thinking! &lt;/p&gt;
&lt;p&gt;The VP Marketing is in heaven; he presents the demo to the client and gets an enthusiastic response.&amp;nbsp; &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Jonathan”, his eyes are gleaming, “They are excited! They just need a small feature - export to excel, to evaluate it a little bit more.” &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You return to the operating table and add some “quick &amp;amp; dirty” code to export the analysis to excel.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Jonathan”, your VP Marketing, “Great work! Could you also add a small feature of notification by email?”&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;A few days later…&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Jonathan, Well done!, Could you also add…”&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;A year later, you find yourself &lt;font color="#ff0000"&gt;maintaining&lt;/font&gt; the demo and cursing that cheerful morning you had agreed to develop the goddamned application! &lt;/p&gt;
&lt;p&gt;If you ask your VP Marketing what happened, he will honestly say:&amp;nbsp; &lt;strong&gt;“Dude, I blew up the demo!”&lt;/strong&gt; Remember the &lt;a href="http://www.youtube.com/watch?v=nG7zCxDz9x8" target="_blank"&gt;Honey, I blew up the kid!&lt;/a&gt;? Your VP Marketing, &amp;quot;accidentally&amp;quot;, blew up your five days old “child” into a giant “monster”.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;It’s common for a small-mid size companies to turn their “demo” applications into production ones. The “time to market” is crucial; once the demo was introduced successfully, the features are added patches over patches resulting in a &lt;a href="http://msmvps.com/blogs/peterritchie/archive/2009/01/27/house-of-cards-design-anti-pattern.aspx" target="_blank"&gt;House of Cards AntiPattern&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;font color="#008000"&gt;House of Cards&lt;/font&gt; &lt;font color="#008000"&gt;AntiPattern&lt;/font&gt; – a continuous patch (card) over patch (card) which is done in order to correct a bug or to add a focused feature without design or refactoring considerations.&lt;/p&gt;
&lt;p&gt;&lt;font color="#008000"&gt;Even in a small demo application, there is a place for a careful examination of the developed features&lt;/font&gt;. You can make assumptions; you can &lt;a title="Separate Domain from Presentation" href="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/04/16/separate-domain-from-presentation-part-i.aspx" target="_blank"&gt;speed-up the UI development&lt;/a&gt;, but you need to design the &lt;strong&gt;core&lt;/strong&gt; features, as you develop the production code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Separate the Domain from the Presentation, using &lt;a href="http://en.wikipedia.org/wiki/Model_View_Presenter" target="_blank"&gt;MVP&lt;/a&gt; pattern for example. &lt;/li&gt;
&lt;li&gt;Use &lt;a href="http://en.wikipedia.org/wiki/Facade_pattern" target="_blank"&gt;Façades&lt;/a&gt; to shadow the BL. &lt;/li&gt;
&lt;li&gt;Provide a well organized BL. (Don’t try to address all the future possibilities and requirements. Just provide good object oriented basis). &lt;/li&gt;
&lt;li&gt;Don’t duplicate code, don’t provide lengthy and hard to read methods. &lt;/li&gt;
&lt;li&gt;Provide Unit Tests and test the BL as much as possible. &lt;/li&gt;
&lt;li&gt;Deal with “considerable”exceptional situations (It’s OK to decide not to deal with uncommon demo scenarios). &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Notice, it is perfectly fine to make assumptions and to apply some limitations during the demo development. However, building the demo correctly will ease the move to the production, even if a certain feature is redesigned or redeveloped. &lt;br /&gt;Undoubtedly, it will ease the development of any additional “demo” features for more potential clients.&lt;/p&gt;
&lt;p&gt;As for the managers, try to remember; unless you want to make excuses for &lt;font color="#ff0000"&gt;unmaintainable&lt;/font&gt; and &lt;font color="#ff0000"&gt;hard to change code&lt;/font&gt;, you need to allow your development teams to work a little bit longer, just to produce a better demo!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=274703" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Anti-Patterns/default.aspx">Anti-Patterns</category></item><item><title>The Hunt for a Software Engineer</title><link>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/04/12/the-hunt-for-software-engineer.aspx</link><pubDate>Mon, 13 Apr 2009 03:25:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:268044</guid><dc:creator>Uri Lavi</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/uri_lavi/rsscomments.aspx?PostID=268044</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/uri_lavi/archive/2009/04/12/the-hunt-for-software-engineer.aspx#comments</comments><description>&lt;font size="2"&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;This week I had interesting discussions regarding hiring and interviewing professional personnel. &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;The reason it was so interesting, is the fact that the discussions were raised simultaneously by two friends of mine, each from his unique point of view.&lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;David is a R&amp;amp;D Manager who leads successfully a complicated software project written in .NET technologies.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;David tries to hire a Software Engineer with specific experience in Smart Clients and Complicated Servers applications but without any success.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;David complaints that most of the candidates he meets have a superficial knowledge and don’t meet his expectations.&lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;Daniel is a talented Software Engineer whose major experience is in ASP.NET, willing to change his place of work. Daniel is a very dedicated person; he attends almost each and every summit he can on .NET technologies. He also reads quite a lot of blogs and articles in order to enhance his knowledge.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;Daniel had already attended more than dozen interviews, most of which he failed because he was unable to solve some “tricky” (according to his words) questions. &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;By “tricky”, he gives an example of: “Given a uniformly distributed function between 0 to 1 write a function that generates unique numbers from 1 to N in complexity of O(…) and …” and that’s there he loses his nerve.&lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;“What the hack”, he says to me, “The company even doesn’t deal with any statistical or mathematical computations, all it does is pretty standard enterprise application; retrieve, show and update”. &lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;On the one hand it is ridiculous that Daniel cannot pass interviews, but on the other hand it is also true that we lack good Software Engineers. &lt;/font&gt;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;But wait, could it be that the problem is within our industry (or us)? &lt;/font&gt;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&lt;font size="3" face="Calibri"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;font size="3" face="Calibri"&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;Understanding that there is a need to hire a new Software Engineer mostly comes too late (in the project’s schedule).&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;As a consequence, due to time constraints, there is no time to train the new employee. Therefore the employee must meet very rigorous requirements.&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;In order to ensure those requirements (that vary a lot from company to company, based on their line of business), the interviewer tries to infer candidate’s competence using one of the following tools: &lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-list:Ignore;"&gt;o&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;Ask domain specific question, based on the interviewer’s (or his company) experience or immediate needs.&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 1in;mso-list:l0 level2 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-list:Ignore;"&gt;o&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;Ask “quiz” questions, question that can be solved using some tweaking.&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt 0.5in;" class="MsoNoSpacing"&gt;The interviewer forgets &lt;a title="Peopleware" href="http://www.amazon.com/Peopleware-Productive-Projects-Teams-Second/dp/0932633439" target="_blank"&gt;Peopleware&lt;/a&gt; which clarifies: “Major problems of our work are not so much &lt;b&gt;technological as sociological&lt;/b&gt; in nature.” Failing to answer a tweaking (“a-ha”) question isn’t a virtue you would like to judge on.&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;Finally, candidates that somehow meet the requirements are being hired, which deepens and narrows their experience in the long running term.&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;A good candidate doesn’t need to know how to tweak a domain specific problem within an hour. Moreover, a good candidate doesn’t need to be a specialist in Smart Clients applications.&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;Don’t get me wrong, if such a candidate appears during the interviewing process I will gladly hire him (if I need such a skill for long term).&lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;However, if your projects and recourses are planed correctly, you can loosen your requirements a bit. &lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;I have always believed that a Software Engineer should be as versatile as possible and therefore the minimum bare requirement I seek is a &lt;b&gt;&lt;i&gt;very strong&lt;/i&gt;&lt;/b&gt; software engineering background.&lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;In my opinion, a Software Engineer must understand in different “tools of trade”. He needs to know why it is better to apply this pattern or that pattern, when it is suitable to use Smart Client applications and when it is not, how to build good infrastructure and clean software and etc… etc… &lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;Having good software engineering skills, doesn’t mean you don’t need to specialize vertically in a specific field.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;With the correct mentoring and coaching, candidate’s experience in several disciplines he chooses, will evolve with years (and this can be a whole another post) and I even expect it to happen. &lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;And that’s how, my conversations with David and Daniel this week ended by discussing how do I find this bare minimum in the candidates, using technology questions and without any tricky (“a-ha”) approaches (of course there are also non technology question that I ask during the interview in order to review candidate’s soft skills).&lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;Here are the virtues that I try to pursue during an interview:&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;A candidate must show a strong understanding of Software Engineering principles&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;A candidate must be able to learn and evolve with the time.&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;A candidate must have a &lt;b&gt;passion&lt;/b&gt; for the trade.&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;The last virtue is extremely important; how many people do you know that work in the hi-tech industry, just because it &lt;strong&gt;seems&lt;/strong&gt; to be “a shiny, nice place”? You probably met such people in the past when they complained to you not to discuss any work issues during the lunch time.&lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;And here is the basic skeleton of the interview:&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&amp;nbsp;&lt;/p&gt;&lt;u&gt;Previous Experience&lt;/u&gt; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;I ask the candidate to choose an example from his previous work and to explain its design.&lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;I expect the following:&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;Problem explanation – clear and concise explanation of the domain problem.&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l0 level1 lfo1;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;Solution explanation – short conceptual model or class diagram explaining the solution, including alternatives that were considered, technological pitfalls that were overcome and etc…&lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;It’s amazing to see that many candidates don’t know how to communicate simple technological problems, don’t know what they really tried to solve in the first place and why the solution was chosen the way it was.&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&amp;nbsp;&lt;/p&gt;&lt;u&gt;Design &lt;/u&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;I ask a design question from a well known domain. &lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;A well known domain helps to remove obstacles when introducing to the candidate some domain specific logic that might come from the interviewer company’s experience. &lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;An example of such a question will be: &lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;“Please design the MSN Messenger” or “Please design the Linkedin service” &lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;During the interview I add more and more constraints to the question. &lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;I also provide some leads that may (or not) help to solve the question.&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;I expect the following:&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 37.5pt;mso-list:l1 level1 lfo2;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;An ability to adjust the design with each added constraint. &lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 37.5pt;mso-list:l1 level1 lfo2;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;An ability to learn from my leads and to change the solutions accordingly.&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 37.5pt;mso-list:l1 level1 lfo2;" class="MsoNoSpacing"&gt;&amp;nbsp;&lt;/p&gt;&lt;u&gt;Technology Questions&lt;/u&gt; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;No tricks here, no “a-ha” questions\answers.&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;I really don’t want the candidate to go back home following an interview with me and suddenly to have the “a-ha” answer for the question I asked. &lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;I just try to reveal how deep the candidate understands the “tools of trade” (based on his experience). &lt;/p&gt;&amp;nbsp; 
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;Here are a few examples:&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l2 level1 lfo3;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;What is the difference between class and struct?&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt 0.5in;" class="MsoNoSpacing"&gt;The question yields in 70% (there are still people that don’t know the difference?) a correct answer that a class is a reference type sitting on the heap and a struct is a value type sitting on the stack.&lt;/p&gt;
&lt;p style="TEXT-INDENT:0.5in;MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;But, wait, what does &lt;b&gt;it really mean&lt;/b&gt;? &lt;/p&gt;
&lt;p style="TEXT-INDENT:0.5in;MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;How that helps &lt;b&gt;you&lt;/b&gt; to build better software in .NET technologies?&lt;/p&gt;
&lt;p style="TEXT-INDENT:0.5in;MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;(Here is a quick hint: in .NET everything is a struct or a class. Basic int is a struct; why is that?)&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l2 level1 lfo3;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;What is the difference between a thread and a process?&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt 0.5in;" class="MsoNoSpacing"&gt;The question drives a broad discussion over why and when we need threads, what are the synchronization methods available in .NET framework, what are their pros and cons and etc…&lt;/p&gt;
&lt;p style="TEXT-INDENT:-0.25in;MARGIN:0in 0in 0pt 0.5in;mso-list:l2 level1 lfo3;" class="MsoNoSpacing"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;·&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;How do you retrieve a record from a Database?&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt 0.5in;" class="MsoNoSpacing"&gt;This question also drives a broad discussion about connected and disconnected modes, dataset\datatable, typed dataset\datatable, XML, ORM, optimistic and pessimistic locks and etc…&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="MARGIN:0in 0in 0pt;" class="MsoNoSpacing"&gt;By adding more and more constraints on the questions asked I evaluate how deeply the candidate knows his “tools of trade”. He doesn’t need to know &lt;b&gt;all&lt;/b&gt; the answers, but you will see; a passionate Software Engineer will know quite a few things under the hood and even if he won’t know, he will try to figure it out, discussing with you all the possibilities and alternatives.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=268044" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/uri_lavi/archive/tags/Peopleware/default.aspx">Peopleware</category></item></channel></rss>