<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ilker.de</title>
	<atom:link href="http://ilker.de/feed" rel="self" type="application/rss+xml" />
	<link>http://ilker.de</link>
	<description>Creative Computing.</description>
	<lastBuildDate>Fri, 03 Feb 2012 13:10:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Polyglotism</title>
		<link>http://ilker.de/polyglotism</link>
		<comments>http://ilker.de/polyglotism#comments</comments>
		<pubDate>Fri, 03 Feb 2012 12:56:57 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Methods]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Gherkin]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Polyglot]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://ilker.de/?p=3239</guid>
		<description><![CDATA[There’s a lot of discussion going on around me these days about programming languages. Especially when it comes to learning new languages, I sense a sort of divide between two camps of thought. I’ll just name those groups “progressive” and “excessive” language [...]]]></description>
			<content:encoded><![CDATA[<p
>There’s a lot of discussion going on around me these days about programming languages. Especially when it comes to learning new languages, I sense a sort of divide between two camps of thought. I’ll just name those groups “progressive” and “excessive” language thinkers. <em
  >Progressive</em
  > is for the polyglot guys who are almost steadily learning new languages. <em
  >Excessive</em
  > is the contrary thought of learning one language to its ultimate extent up to a “zen” level, respectively.</p
><div id="multimate-maniac"
><h3
  >Multimate Maniac</h3
  ><p
  >You surely already have realized that there’s no mutual exclusiveness for <em
    >progressive</em
    > and <em
    >excessive</em
    > schools. However, in practice I often find myself in a debate between both. That’s primary reasoned in the fact that practitioners of both strategies tend to go overboard with it.</p
  ><p
  >The progressive language learners mostly pick a language or two and learn them for a given timebox, most often a year or so. They try to dive into the language concepts very fasts and practice their newly gained knowledge with pet projects, such as writing blog applications or other relatively small scaled software.</p
  ><p
  >The excessive language learners usually do some up-front evaluation of languages and paradigms for a certain time, ranging from a couple of weeks up to years. After having made up their mind, they explicitly choose one language and stick with that language for years. Their goal clearly is to fully utilize the language as well as the ecosystem surrounding it.</p
  ></div
><div id="being-progcessive"
><h3
  >Being Progcessive</h3
  ><p
  >I’m personally able to relate to both approaches. Nonetheless, I feel myself more comfortable with the progressive approach. I’m a firm believer of diversity and short feedback cycles. Hence, I like to pick a language and dive into it for a while (usually a couple of months). If I’m interested and find myself learning new perspectives &#8211; or if the language enables me to raise my productivity in some cases &#8211; I usually opt to stick with that language for a year or more.</p
  ><p
  >The great benefit I was experiencing in learning new languages certainly was to find new perspectives. Like different approaches to common solutions because the language supports different features. Like different program design because different idioms of modularity, objects and data structure design exist.</p
  ><p
  >In past years, I delved into <a href="http://en.wikipedia.org/wiki/Actionscript"
    >ActionScript</a
    >, <a href="http://en.wikipedia.org/wiki/PLSQL"
    >PL/SQL</a
    >, <a href="http://en.wikipedia.org/wiki/Javascript"
    >JavaScript</a
    >, <a href="http://en.wikipedia.org/wiki/PHP"
    >PHP</a
    >, <a href="http://en.wikipedia.org/wiki/C_Sharp_%28programming_language%29"
    >C#</a
    >, <a href="http://en.wikipedia.org/wiki/C_%28programming_language%29"
    >C</a
    >, <a href="http://en.wikipedia.org/wiki/Perl"
    >Perl</a
    >, <a href="http://en.wikipedia.org/wiki/BASIC"
    >BASIC</a
    >, <a href="http://en.wikipedia.org/wiki/Java_%28programming_language%29"
    >Java</a
    >, <a href="http://en.wikipedia.org/wiki/Processing_%28programming_language%29"
    >Processing</a
    > and <a href="http://en.wikipedia.org/wiki/Ruby_%28programming_language%29"
    >Ruby</a
    >. This year I’ll dig into <a href="http://en.wikipedia.org/wiki/Python_%28programming_language%29"
    >Python</a
    > and <a href="http://en.wikipedia.org/wiki/F_Sharp_%28programming_language%29"
    >F#</a
    >. However, there’s only a few where I safely would categorize my knowledge as <em
    >profound</em
    >, namely JavaScript and C#. That’s mainly because I was very excited about both languages in the beginning and the middle of the last decade (C# ~2003, Javascript ~2006). This mixed approach might well be entitled <em
    >progcessive</em
    >.</p
  ><p
  ><em
    >(BTW: I know, I’m not good at creating new words, but I wanted to give myself a try. That’s why I’m rather a computing linguist than a natural linguist ;-)).</em
    ></p
  ></div
><div id="one-language-rules-all"
><h3
  >One Language Rules All</h3
  ><p
  >Apart from all those programming languages in the field and the rise of language-orientation, I finally want to make a (personal) point on being a “polyglot programmer”. I believe that it’s a good thing for both your “resident” language skills and the languages you might explore and visit to be curious. Being a polyglot programmer not only broadens your “programming speech”, but enables you to reason better about your engineering tasks.</p
  ><p
  >Even for non-developers like testers, business analysts, scrum masters, product owners and managers, I <em
    >strongly</em
    > recommend them to learn a new programming language from time to time. Not necessarily the language they might be in contact with through development colleagues. Just the language they happen to find interesting or useful for their particular needs.</p
  ><p
  >However, from the past years of professional experience I had as developer, team lead, architect, scrum master and manager, I came to the conclusion a few years ago that there’s <em
    >one single language</em
    > (plus dialects) every professional in modern software engineering must learn.</p
  ><p
  >Yes, right. <em
    >Every Pro</em
    > in Software Development has to learn this essential language, which effectively is the language to rule them all: the <strong
    >customer language</strong
    >.</p
  ></div
><div id="wysiwyt:-what-you-say-is-what-you-think"
><h3
  >WYSIWYT: What You Say Is What You Think</h3
  ><p
  >If you want to succeed in creating software, the customer language is indispensible. This perspective has been in software development since the very first beginning. It started out with <em
    >requirements</em
    > encompassed with a <em
    >glossary</em
    >, it continued on with <em
    >use cases</em
    > and <em
    >scenarios</em
    >, up to <em
    >user stories</em
    > and <em
    >feature fares</em
    >.</p
  ><p
  >Even in a very technical sense, the customer language was always in focus. It started with <em
    >business routines</em
    > and <em
    >business modules</em
    >, was superceded then with the object-oriented <em
    >domain model</em
    > and there even has been improved with various principles such as the <em
    >ubiquituous language</em
    > from DDD.</p
  ><p
  >The goal of all those principles and methods is simple: <strong
    >understand your customer</strong
    >. or user. or both. <em
    >(Yes, there’s a difference between customer and user, but I won’t dig into that now).</em
    > The thing is: if you want to <em
    >understand</em
    > your customer, you need to <em
    >listen</em
    > to your customer. But listening ist not all. You need to <em
    >comprehend</em
    > what you’re <em
    >listening to</em
    >, you need to <em
    >ask questions</em
    > to what you’re listening to, you even need to <em
    >refine and improve</em
    > to what you’re listening to.</p
  ></div
><div id="language-and-translation"
><h3
  >Language and Translation</h3
  ><p
  >Admittedly, it’s not easy, often impossible, to learn the complete customer language and the underlying concepts and semantics of the domain in question. However, you don’t need to be a domain expert or customer whisperer to understand your customer. The key thing here is to <em
    >constantly care about the communication between you and your customer.</em
    ></p
  ><p
  >That being said, the’re so many techniques and methods who can help you to understand your customer and let him understand you. As a longterm XP practitioner, the customer test specifications always were in customer language stripped down to keywords and actions. This has evolved to a number of key practices to learn the language of your customer:</p
  ><ul
  ><li
    ><a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development"
      >Behavior-Driven-Development</a
      ></li
    ><li
    ><a href="http://en.wikipedia.org/wiki/Test-driven_development"
      >Test-Driven-Development</a
      ></li
    ><li
    ><a href="http://en.wikipedia.org/wiki/Specification_by_example"
      >Specification By Example</a
      ></li
    ></ul
  ><p
  >Honestly, learn at least one of the practices mentioned above and I guarantee you: you will understand your customer better than before. Even better, learn all of them and you will understand your customer as never ever before. Now, if there’s really only one single thing you absolutely need to know in the field, then you’d better choose learn and practice the <a href="https://github.com/cucumber/cucumber/wiki/Gherkin"
    >Gherkin</a
    > language.</p
  ><p
  >Be a polyglot. Learn new languages, new perspectives and new paradigms. Yet, first and foremost, learn the language of your customer and be sure to regularly practice it.</p
  ></div
>
]]></content:encoded>
			<wfw:commentRss>http://ilker.de/polyglotism/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile Manifesto and Skills Matter</title>
		<link>http://ilker.de/agile-manifesto-and-skills-matter</link>
		<comments>http://ilker.de/agile-manifesto-and-skills-matter#comments</comments>
		<pubDate>Mon, 30 Jan 2012 08:13:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Methods]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Principles]]></category>
		<category><![CDATA[Skills]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://ilker.de/?p=3215</guid>
		<description><![CDATA[It’s a very common thing these days to refer to the Agile Manifesto on various occasions. Let it be a speech, a discussion about modern software engineering methods or just an ordinary chat between developers.Ok, the manifesto is well-known. But how about [...]]]></description>
			<content:encoded><![CDATA[<p
>It’s a very common thing these days to refer to the <a href="http://agilemanifesto.org"
  >Agile Manifesto</a
  > on various occasions. Let it be a speech, a discussion about modern software engineering methods or just an ordinary chat between developers.</p
><p
>Ok, the manifesto is well-known. But how about the <a href="http://agilemanifesto.org/principles.html"
  >Agile Principles</a
  >? Are they known as broad as the manifesto is? I personally doubt that. Hence, it’s worth to have a few words about the principles, their role and how they relate to the manifesto at all.</p
><div id="values-need-actions"
><h3
  >Values Need Actions</h3
  ><p
  >First of all, the principles are very tightly bound to the manifesto itself. While the manifesto communicates agile <em
    >values</em
    >, the principles communicates the means of <em
    >actions</em
    > (practices) to embrace the values of the manifesto.</p
  ><p
  >Surprisingly, most people I’ve met in my career think that the principles were some “added sugar” to the manifesto, probably even have been added at a later stage. As far as I know, this was not the case. I’ve always had the principles present with the manifesto itself. Albeit the manifesto surely is being referenced a lot more.</p
  ></div
><div id="all-batteries-included"
><h3
  >All batteries included</h3
  ><p
  >The last few days I had a couple of discussions with colleagues, friends and other “agilists” around me. The topic was about engineering (programming) niveau. More precisely, it was about the culture of caring about your work and skills.</p
  ><p
  >In almost all of those conversations, I was referring to the <a href="http://agilemanifesto.org/principles.html"
    >Agile Principles</a
    >, especially one particular:</p
  ><blockquote
  ><p
    >Continuous attention to technical excellence and good design enhances agility.</p
    ></blockquote
  ><p
  >This principle puts a clear message: <strong
    >Skills Matter</strong
    >.</p
  ></div
><div id="excellent"
><h3
  >Excellent!</h3
  ><p
  >For me this principle is a clear indication that a skilled, continuously learning and passionate working person is <em
    >required</em
    > to make agility a success in a project or product engineering context. It clearly alerts us to maintain and extend our very core asset of skill, which in effect is the manifestation of capability through knowledge and experience.</p
  ><p
  >The great <a href="http://martinfowler.com/"
    >Martin Fowler</a
    > wrote about this principles a decade ago in an <a href="http://andrey.hristov.com/fht-stuttgart/The_Agile_Manifesto_SDMagazine.pdf"
    >Article on SE Magazine</a
    >:</p
  ><blockquote
  ><p
    >When many people look at agile development, they see reminders of the “quick and dirty” RAD (Rapid Application Development) efforts of the last decade. But, while agile development is similar to RAD in terms of speed and flexibility, there’s a big difference when it comes to technical cleanliness. Agile approaches emphasize quality of design, because design quality is essential to maintaining agility.</p
    ></blockquote
  ><p
  >Obviously, quality in design is easier achieved through technical cleanliness. Technical cleanliness is easier achieved with a steady motion to improve your technical capabilities and excellence.</p
  ></div
><div id="is-skilfulness-agile"
><h3
  >Is “Skilfulness” Agile?</h3
  ><p
  >There’s one very important question being around in agile practitioners mind for years now: Does skill relate to the <a href="http://agilemanifesto.org"
    >Agile Manifesto</a
    >? Or rephrased: Is skilfulness agile?</p
  ><p
  >Even the creators of the manifesto where rethinking this aspect over and over within the last years. I remember very well the thought-provoking article on <a href="http://www.exampler.com/blog/2007/05/16/six-years-later-what-the-agile-manifesto-left-out/"
    >dark spots of the manifesto</a
    > form the great <a href="http://www.exampler.com/about.html"
    >Brian Marick</a
    >. Among other values he explicitly mentioned that <strong
    >Skill as a Value</strong
    > has been left out in Agile Manifesto.</p
  ><p
  >I do agree with Brian in a sense that the requirement of skilfulness is being far undervalued in the whole agile universe. I’m a firm believer in continuous learning and improvement, especially when it comes to my very own capabilities and know-how.</p
  ></div
><div id="craftsmen-capability-care"
><h3
  >Craftsmen Capability Care</h3
  ><p
  >You may recall now that this is essentially the same song played by the wonderful <a href="http://www.objectmentor.com/omTeam/martin_r.html"
    >Uncle Bob</a
    > as well for years now. A few years ago he was that much fed up with the underestimation of engineering skills in everyday agile projects that he draw a line and crafted the <a href="http://manifesto.softwarecraftsmanship.org/"
    >Software Craftsmanship Manifesto</a
    >.</p
  ><p
  >It basically alerts us to take care and responsibility for what we do. It reminds us to craft software with honor and pride. It pushes us to strive for the best possible result. <em
    >It just raises the bar</em
    >.</p
  ><p
  >That’s what I’m doing in my job and life as well. Naturally, <a href="/die-kunst-der-software-entwicklung"
    >I signed the manifesto</a
    > and I’m living and promoting these values whenever I can.</p
  ></div
><div id="uninterested-unwilling-underachievers"
><h3
  >Uninterested Unwilling Underachievers</h3
  ><p
  >Consequently, it’s obvious to me, that <strong
    >skill is essential in agile engineering</strong
    >. Agreed, it’s essential anyway, not only limited to agile software development. Yet, for agile engineering, it’s even more a crucial factor to success. Being on an agile project requires you to constantly choose the path of improvement for your own skills.</p
  ><p
  >That being said, it’s <em
    >literally unacceptable</em
    > for me to tolerate individuals or opinions in agile projects, who are uninspired and uninterested in what they do and what the team does. In my whole professional life, I always tried to help people to get over that. However, if they’re not interested in <em
    >being professional</em
    > and <em
    >caring like a professional</em
    > and <em
    >acting like a professional</em
    > &#8211; then they should better get out of the way and let the professionals do their job.</p
  ><p
  >Being uninterested in ones own skills, in ones own work and in ones own perspective to creation is surely a sad thing. Whenever you happen to meet such individuals, please treat them like <em
    >adults</em
    > and take them <em
    >for serious</em
    > first. Talk with them, try to help them, try to engage them.</p
  ><p
  >If all that doesn’t help, there’s nothing more left than concentrating your efforts for other things or individuals and leave the underachievers behind you. This is a very important thing to help yourself in being constantly motivated for your continuous effort to improvement in a sustainable, well-balanced pace.</p
  ></div
><div id="theres-no-pill-for-skill"
><h3
  >There’s no Pill for Skill</h3
  ><p
  >Finally, I want you to remind that nobody says that your job is going to be easy. Nobody says you’ll earn money by fooling around. Nobody says that you’ll spend your life in kinder garden only. Keep in mind: your value is your values.</p
  ><p
  >There’s no Pill for Skill. Stand up, get up. Fight for your values, learn for your skills, accept your challenges. <strong
    ><a href="http://www.youtube.com/watch?v=cK8YSsjIaDs"
      >STFU! Get Up!</a
      ></strong
    ></p
  ></div
>
]]></content:encoded>
			<wfw:commentRss>http://ilker.de/agile-manifesto-and-skills-matter/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tool Me Under!</title>
		<link>http://ilker.de/tool-me-under</link>
		<comments>http://ilker.de/tool-me-under#comments</comments>
		<pubDate>Wed, 25 Jan 2012 07:49:53 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[CI]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[VCS]]></category>
		<category><![CDATA[VIM]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://ilker.de/?p=3195</guid>
		<description><![CDATA[Yes, it’s time for another blog about some misfits I happen to recognize in our software development world. This time it’s about tools and their glorification by those who actually should know better: the developers themselves.A tool is just a toolEverybody probably [...]]]></description>
			<content:encoded><![CDATA[<p
>Yes, it’s time for another blog about some misfits I happen to recognize in our software development world. This time it’s about tools and their glorification by those who actually should know better: the developers themselves.</p
><div id="a-tool-is-just-a-tool"
><h4
  >A tool is just a tool</h4
  ><p
  >Everybody probably knows it already, but I wanted to re-iterate that: A Tool is just a tool. Tools are very important these days for software development. Literally every developer needs his own set of tools. Plus, in professional software development, tools are an indispensable means to get things done.</p
  ><p
  >As for the developer perspective, it’s the IDE, the editor, the shell, the issuetracker, the CI-engine, the VCS and many more software making up the “tool chain”. However, even hardware can be counted a tool: It seems to be a big difference these days to use a MBP, a <em
    >&lt;insert brand name here&gt;</em
    > notebook, a desktop or even an IPad as primary development system.</p
  ></div
><div id="give-me-the-tool-you-fool"
><h4
  >Give me the tool, you fool</h4
  ><p
  >Lately, I got the impression that tools not only are important to us, but have become more important than they actually should be. Whenever a developer sets up a new box around me, he’s asking questions like</p
  ><ul
  ><li
    >what editor are you using?</li
    ><li
    >what shell is coolest?</li
    ><li
    >what plugins are shiny?</li
    ><li
    >what is hip, my hipster hippies?</li
    ></ul
  ><p
  >On one hand, I understand that it’s important to look out for improvements and make some research on it. On the other hand, I don’t get it why those questions are being asked.</p
  ><p
  >Even more, I don’t get that tool X and tool Y is being used “just because it gives you good geeky karma.” What’s that for an argument? Are you serious? Are you a developer cranking out some code or just a barbie doll looking out for fashion shoes? I don’t get it.</p
  ></div
><div id="tools-to-the-rescue"
><h4
  >Tools to the rescue</h4
  ><p
  >I think it’s a very good thing to look around what’s happening and evaluate new methods and tools. Nonetheless, I personally prefer to actually <em
    >use a tool</em
    > only if I obviously <em
    >need a tool</em
    > and then <em
    >value that tool</em
    > and eventually <em
    >compare that tool</em
    > with others in the field. For a few developers around me, I have the impression that the tool chain is just being chosen because it’s kind of hip and geeky.</p
  ><p
  >Take Resharper, VS Power Tools, Zsh, VIM, ST2, MBP, WebSharper, c9.io and whatever freaky tools might exist in this universe as an example. I personally use VIM for around 2 years now. I’m not even at 10% of what is possible with VIM. And this was and is a great lesson for me. Both positive and negative.</p
  ><p
  >On the other hand, I can’t (and don’t want) to miss Visual Studio and Resharper when it comes to serious .NET development. That’s cool and fine for me. I love those tools (for specific tasks). However, I wouldn’t ever touch a CSS or HTML file with VS. YMMV.</p
  ></div
><div id="tool-me-under"
><h3
  >Tool me under!</h3
  ><p
  >I’d like to encourage developers to <em
    >first use what they have</em
    > and <em
    >look around if existing tools can help</em
    > to improve, automate or simplify the task they’re actually need to get done. Once you see that your tool-chain limits you or leads you to inefficiency, the motivation for new tool evaluation is very well satisfied, Imho.</p
  ><p
  >Don’t just follow the white rabbit and cry out to be equipped like a <a href="http://en.wikipedia.org/wiki/Transformers"
    >transformer</a
    > just to edit a simple README file.</p
  ></div
>
]]></content:encoded>
			<wfw:commentRss>http://ilker.de/tool-me-under/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Leaving(NET)</title>
		<link>http://ilker.de/leaving-net</link>
		<comments>http://ilker.de/leaving-net#comments</comments>
		<pubDate>Tue, 24 Jan 2012 16:19:34 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Polyglot]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://ilker.de/?p=3173</guid>
		<description><![CDATA[Yesterday I blogged about my top 5 reasons why I like to stick with .NET technologies. Today I’m going to look at the flipside. I already mentioned that I’m quite technology-agnostic when it comes to software development. However, after many years in [...]]]></description>
			<content:encoded><![CDATA[<p
>Yesterday I blogged about my <a href="/not-leaving-net"
  >top 5 reasons why I like to stick with .NET technologies</a
  >. Today I’m going to look at the flipside. I already mentioned that I’m quite technology-agnostic when it comes to software development. However, after many years in the .NET ecosystem in different projects, I gained a lot of insights on how .NET projects are done.</p
><p
>Every working environment, literally every project has a different culture. Yet, there are similarities throughout projects. A few reasons for those similarities are similar technologies, similar tools and similar mindsets. That’s true for the .NET-related projects as well.</p
><p
>I want you to notice once more that I’m neither <em
  >leaving nor staying</em
  > with the .NET technologies. I have perfectly valid reasons to use .NET, Mono, and FSharp, and <em
  >I surely will use these <strong
    >cool .NET technologies</strong
    ></em
  >. However, I have good reasons to criticize some other aspects of the .NET ecosystems as well.</p
><p
>Although I mentioned it in yesterdays <a href="/not-leaving-net"
  >Top 5 reasons for using .NET</a
  > post, I want to emphasize once more, that the key to successful software engineering and successful software products is not the technology being used but the people being involved. Enough introduction.</p
><div id="top-5-reasons-to-leave-.net"
><h3
  >Top 5 reasons to leave .NET</h3
  ><p
  >Here’s my top 5 reasons why I look forward to look for alternative technologies.</p
  ><div id="nr.-5:-microsoft"
  ><h4
    >Nr. 5: Microsoft</h4
    ><p
    >Yes, you read correctly. <a href="http://www.microsoft.com"
      >Microsoft</a
      > has made it into my top five why I not like using .NET. The reason is dead simple. For many years, Microsoft left me as .NET developer think that .NET is the “new VB”, the new shiny 4GL platform where everything works with click &amp; run. Moreover, instead of advocating serious engineering, Microsoft just wanted to sell .NET and the new VS versions as <a href="http://en.wikipedia.org/wiki/Rapid_application_development"
      >RAD</a
      > engineering tools. They actively made me as the seriously engaged .NET developer think that I’m at one level with VBA Macros and SQLWindows.</p
    ><p
    >Second, the way Microsoft is supporting the .NET community is not focused on engineering, but focused on sales and marketing. That’s the impression I got from many years of active .NET community participation. I’m still a <a href="http://www.microsoft.com/germany/community/programme/clip.mspx"
      >CLIP</a
      > Member, by the way. To me, Microsoft prefers shows their appreciation to people that <em
      >promote and sell their products</em
      > instead of showing appreciation people that <em
      >utilize and improve their products</em
      >.</p
    ><p
    >This makes many .NET communities needlessly to be a sublte product and people marketing platform rather than a community of users and innovators.</p
    ><p
    ><em
      >I like to meet with developers, not with self-proclaimed heros or sales masters</em
      >.</p
    ></div
  ><div id="nr.-4:-homogenous-harmony"
  ><h4
    >Nr. 4: Homogenous Harmony</h4
    ><p
    >This topic is related to Micrsoft, but is not limited to Microsoft in .NET ecospace. It’s about what I call the fallacy of “homogenous harmony”. In professional .NET world, vendors try to lock you in with their products. You want a widget library? Take X. It plays very well with search library of vendor X, but not of vendor Y or vendor Z. This “Lock In, Feel Free”-Game is played over and over again, no matter what developer tool or library it is. Nearly all .NET vendors invest more in not supporting other vendor’s tools than in investing to coexist with them.</p
    ><p
    >This not only is depressing for the developer or a risk from strategic software product management point of view. No, the biggest negative impact is the active and effective lowering of innovation. This “unique partnership” strategy for developer tools leads to laziness and blindness for options.</p
    ><p
    >Developers just stick with that lock-in because they know that they have no other option. That’s the point where the developer as individual as well as the company is loosing innovation.</p
    ><p
    ><em
      >I prefer diversity over monotony</em
      >.</p
    ></div
  ><div id="nr.-3:-developer-productivity-tools"
  ><h4
    >Nr. 3: Developer Productivity Tools</h4
    ><p
    >Guess what, it goes on with the tool chain. I’ll start with TFS. Just to get it out of my way. TFS is the perfect example for a contradicting product. While it claims to be a “Developer Productivity Tool”, it’s straight forward just the opposite of that. It merely embraces process guidances, guidelines and protectivism, that’s it. Period.</p
    ><p
    >The same is true for other products in .NET Devland. I’ll pick the beloved Visual Studio as an example. The concept of all the fancy XML-, Resource-, Database-, Publish-, Webform-, HTML- and XYZ-Designers Visual Studio has is just to do one single thing: Hide complexity. Yes, you read correctly, complexity. You know what that means?</p
    ><p
    >That means that you as Visual Studio “Developer” don’t even get to know what you are doing. In the end, a developer doesn’t need to be a developer anymore. It’s just doing it because there’s the menu option to do it. It’s doing it because Intellisense says it’s possible. It’s doing it because there’s a wizard guiding to “Finish Unit Tests”.</p
    ><p
    >This effectively means that your gained productivity is sold for being treated like a dumb user who is trying to get a paragraph formatting fixed in <a href="http://en.wikipedia.org/wiki/Microsoft_Word"
      >Word</a
      >, instead of being treated as an engineer who is responsible of actually knowing what the hell he is doing with all those bits and files he’s juggling with.</p
    ><p
    ><em
      >I want to be taken for serious and not as dumb click-dummy</em
      >.</p
    ></div
  ><div id="nr.-2:-optimization-over-innovation"
  ><h4
    >Nr. 2: Optimization Over Innovation</h4
    ><p
    >First I thought this would be my number one, since the preceding arguments touch the fact (or lack, respectively) of innovation as well. In more than half of all my .NET projects, I perceived to live and deal with a culture where optimization is favored over innovation.</p
    ><p
    >To me, this is one of the biggest Anti-Patterns of agile and modern software engineering. Hence, It’s quite sad for me to realize that I happened to experience such a culture often. Interestingly, very often with .NET projects (of different sizes!).</p
    ><p
    >I think that most .NET-related projects are profit-oriented with the notion that everything what is related to software engineering is valued as a cost rather than an investment. In consequence, budget plans are being made, resources are planned upon tasks and money is correlated with time instead of feature.</p
    ><p
    >You might argue that this is just a characterization of enterprise projects and has very little to do with the technology being used. Very plausibe argument, indeed. Nonetheless it doesn’t reflect my experiences.</p
    ><p
    >For instance, I’ve had (very) large, enterprise-scale projects in PHP and C. For both of the projects, I’ve had plans and goals to achieve. However, in both projects I always had the chance to innovate prior to optimize. All my innovation efforts have been taken for serious, then evaluated and mostly adapted.</p
    ><p
    >On quite a number of my .NET projects, the contrary was the case. People were awarded when they could reduce cost and they were punished when they could expand market and turnover.</p
    ><p
    ><em
      >I prefer innovation over optimization (while I do optimize as well)</em
      >.</p
    ></div
  ><div id="nr.-1:-no-invest-to-interest"
  ><h4
    >Nr. 1: No Invest To Interest</h4
    ><p
    >Yes, my number one reason for preferring other technologies over .NET is the lack of “invest to interest”. As much as I am technology-agnostic, I haven’t seen so many developers not being interested in their job as I did in a large number of .NET projects I made. What a sad sentence this is. Yet, it perfectly describes my experiences so far.</p
    ><p
    >I’ve had one &#8211; <em
      >yes, one single</em
      > &#8211; .NET project so far where I had the genuine impression that every developer involved in that project was interested in what they actually are doing. <em
      >(Note: For the curious mind: parts of this project were codenamed after cuban cities.)</em
      ></p
    ><p
    >Even more, some of the uninspired developers were even advocated by project managers and Scrum Masters as “experienced, low-key and thoughtful” people. Just because they didn’t do anything.</p
    ><p
    >I’m well aware that this problem is not limited to .NET projects. There’s tons of projects in other languages where the same is true. Yet, I happen to had the experience that especially within .NET projects the number of uninteresed, unwilling, unimpressed and unimproved “software developers” is exceptionally large compared to those few developers who actually take their job and assignment for serious. I’m quite glad to say that in my current projects the majority of developers actually do care.</p
    ><p
    >The latter mentioned mostly are brave and very strong minded people. They mostly continue in a restless manner to improve whatever they can. It’s a very sad fact that mostly those few are being looked at as “disruptive elements” and troublemakers.</p
    ><p
    >This lack of “invest to interest”, again, is one of the biggest Anti-Patterns of modern software engineering. It inherently leads to a protective, non-progressive and disrespective working environment in which it is very hard to achieve any valuable result.</p
    ><p
    ><em
      >I prefer to work the best I possibly can instead of working just as much as is necessary</em
      >.</p
    ></div
  ></div
><div id="criticism-and-correlation"
><h3
  >Criticism and Correlation</h3
  ><p
  >As I already mentioned before, I’m well aware that most of the above arguments are not specific to .NET itself. It’s a valid criticism of mine to argue that there’s no concrete correlation between .NET as technology and the very “non-technology-related” statements I made. I do as well recognize .NET usage in indie game studios, movie and animation agencies and whatever ‘cool’ and ‘hipster’ startups and working environments there might be.</p
  ><p
  >Nonetheless, this list reflects my experiences I had so far on the majority of my .NET projects. I mostly gained the impression that the delusive culture of “professional engineering” in .NET ecospace is being aided and supported by the technology and the companies around that technology. This especially was the case where .NET and other .NET related products like TFS, various OR/M or Win/Webform-Libraries are being used to follow the “spirit of RAD”.</p
  ><p
  >On the other side, I had the chance to work on PHP, C, Java and JavaScript projects as well. For the vast majority of those non-.NET projects, I had a very different experience regarding the abovementioned perspectives. Especially my Nr. 1, 2 and 3 arguments were not as apparent and present as on almost all .NET projects I had so far.</p
  ><p
  >That all being said, I still have great respect for all .NET enthusiasts and community members. In fact, I even do admire a few of them for their professionalism, for their passion and for their brave and powerful way of promoting the positive things of .NET as a technology as well as of the .NET community itself.</p
  ><p
  >Moreover, I not only had a “perfect” .NET Project but also had a few .NET Projects where I met <em
    >very smart people</em
    >, learned <em
    >a lot of things</em
    > and had <em
    >a great time</em
    > building cool products with cool .NET technologies. I enjoyed .NET development very much and keep enjoying it.</p
  ></div
><div id="alternatives-and-advantages"
><h3
  >Alternatives and Advantages</h3
  ><p
  >I’m not sure whether any other comparably large and affecting technology would have significant advantages over .NET in the abovementioned points. Lately, I’ve been around the Java and Ruby communities and both are very different from eachother as well as different to the .NET community.</p
  ><p
  >Last year I learned Ruby. Not inside out, but fairly well. It was a great experience. Both from technical as well as from personal perspective. This year, I’ll most likely dig into Python, their related technologies and their communities. I’ll learn FSharp, a .NET-related language, as well.</p
  ><p
  >The message I want give to you, my dear reader, can be summarized quite easily: Take the chance and look beyond your known area. It surely will be of advantage for you. If you are a rubyist, look how the .NET way of events and UI binding works. If you are a .NET guy, look what advantages you can take away by experiencing how Rubyists deal with database migrations and testing. Either way, you can turn alternatives to advantages. And that’s what I’ll look after as well.</p
  ><p
  ><strong
    >Turn alternatives to advantages.</strong
    ></p
  ></div
>
]]></content:encoded>
			<wfw:commentRss>http://ilker.de/leaving-net/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>!Leaving.NET();</title>
		<link>http://ilker.de/not-leaving-net</link>
		<comments>http://ilker.de/not-leaving-net#comments</comments>
		<pubDate>Mon, 23 Jan 2012 15:05:29 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[FSharp]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Unity]]></category>

		<guid isPermaLink="false">http://ilker.de/?p=3161</guid>
		<description><![CDATA[The last couple of months I read a couple of blog posts from notable .NET engineers that they’re leaving the .NET ecospace for various reasons. Even people I know and respect very much are heading out for new technologies.While I perfectly understand [...]]]></description>
			<content:encoded><![CDATA[<p
>The last couple of months I read a couple of blog posts from <a href="http://7enn.com/2011/07/04/appreciating-the-power-of-a-true-community/"
  >notable .NET engineers</a
  > that they’re <a href="http://whatupdave.com/post/1170718843/leaving-net"
  >leaving the .NET ecospace</a
  > for <a href="http://hkarthik.me/blog/2011/11/11/my-reasons-for-leaving-net/"
  >various reasons</a
  >. Even people I know and respect very much are <a href="http://bjro.de/2011/11/15/at-the-crossroads/"
  >heading out for new technologies</a
  >.</p
><p
>While I perfectly understand some arguments of the abovementioned, I do have a slightly different view on this whole topic of technology switching. I personally believe that success is not a matter of technology but a matter of people. Whatever shiny Ruby, Node.js, Scala, C, Linux, OSX, iOS, Python, Android, PHP, WinRT, NaCl technology you’re using. <strong
  >It doesn’t matter</strong
  >. You can do crap and bullshit as well as shiny cheesy nifty things with <em
  >any Technology</em
  >.</p
><p
>Having this in mind, I want you to know that I’m pretty much a technology-agnostic person. I get my stuff done. With Linux, with Windows, with .NET, with Ruby &#8211; and even with things like paper and pencil.</p
><p
>I think many people leaving the .NET ecospace made very valid points. I respect them for their decision and I’m pretty sure they will do great stuff with other new technologies as well as they did with technologies they were using before. Yet, I lately got the impression that the topic was burdened a little with a “negative karma”. There might well have been destructive arguments or at least a notion of disrespectful, angry, harsh way of saying things.</p
><p
>This blog post is to add another, yet surely incomplete perspective on the .NET technology and the community surrounding it. It’s just about to signal a simple message: “Let’s think positive and look at eachother with respect”. That’s it.</p
><p
>Having said so much in front of a simple listing, I think it’s time to finally introduce you the list I’m talking about all the time. I made my mind about what I personally think is cool about the .NET technology. Surprisingly, I got many things I pretty much like about the .NET ecospace. I sorted them by “level of importance” (to me), picked the top five and just wrote a couple of words for my reasoning. So, here it is.</p
><div id="top-5-reasons-to-stick-with-.net"
><h3
  >Top 5 reasons to stick with .NET</h3
  ><p
  >Here are my top 5 reasons why using and working with .NET is fairly cool.</p
  ><div id="nr.-5:-microsoft"
  ><h4
    >Nr. 5: Microsoft</h4
    ><p
    >Yes, you read correctly. <a href="http://www.microsoft.com"
      >Microsoft</a
      > has made it into my top five why I like using .NET. The reason is dead simple. Microsoft “invented” it. Apart from Microsoft being bad at many other things, Microsoft did plenty of things right as well. One thing, obviously, is the .NET Framework itsef. The complete CLI, CLR, CTS and CIL make up an awesome managed execution environment with great capabilities.</p
    ><p
    >However, it’s not only the simple credit to creator here. Microsoft continued to develop and support the ecosystem with the DLR, with research, new languages and supplementary products. In the last years, Microsoft even opened itself a little more towards the OSS community and got more <a href="/open-source-and-open-minds"
      >open minded</a
      >.</p
    ><p
    >Yes, there’s a lot of things what Microsoft may have done far better. Yes, there’s some things what Microsoft should not have done at all. But, there’s as well a few things Microsoft did get right. And there’s a couple of things where Microsoft did an awesome job.</p
    ></div
  ><div id="nr.-4:-diversity-variety"
  ><h4
    >Nr. 4: Diversity &amp; Variety</h4
    ><p
    >Again, this might not be a very obvious argument at first place. Nonetheless, I find the .NET ecosystem to be surprisingly diverse. You meet a lot of different people with different mindsets, different skills and different areas of interest. From enterprise developers doing BI-SQL-Server stuff, web developers going crazy with ASP.NET MVC, desktop application developers up to game devs using XNA. A broad set of usages makes .NET attractive to me as well.</p
    ><p
    >Second, it’s not only the variety of usage, but the variety of people and cultures working with the technology. The fact, that in .NET Community a web nerd regularly meets up with the enterprise guy alongside with the powershell sysop is quite nice actually. Especially when you consider that the community sticks together and manages to handle and leverage this diversity.</p
    ></div
  ><div id="nr.-3:-c-csharp"
  ><h4
    >Nr. 3: C# (CSharp)</h4
    ><p
    >This one is obvious. From my top three ranking, the <a href="en.wikipedia.org/wiki/C_Sharp_(programming_language)"
      >CSharp</a
      > language is on bronze. C# is big step. As a language itself, as well as when it comes to .NET development. C# makes OO-design and OO-development much more comforatable than with many other languages. C# is a leading edge multi-paradigm programming language.</p
    ><p
    >One honorable, very high value of C# is the progress and development of the language itself. From version to version, C# got features which most of the time not only made sense, but were evolutionary as well. Generics, Linq, Lambda, Extension Methods, Dynamic and soon Async/Await. Comparing with other languages in the field, the C# lifeline reads pretty cool. And guess what: It’s even pretty cool to use all those features.</p
    ></div
  ><div id="nr.-2:-f-fsharp"
  ><h4
    >Nr. 2: F# (FSharp)</h4
    ><p
    >Ranking on second is FSharp. Yes, <a href="http://en.wikipedia.org/wiki/F_Sharp_%28programming_language%29"
      >FSharp</a
      >. <strong
      >FSharp is an awesome language</strong
      >. I’m very thankful that Microsoft Research did such a cool job and managed to develop a language favoring the functional programming paradigm. Combined with the big and diverse .NET Framework, FSharp not only is the new kid of the block here. FSharp is a shift in how functional languages will be used in everyday computing.</p
    ><p
    >I’m quite new to the FSharp game. Yet, I’m fascinated and thrilled of it. It makes me rethink on how to solve problems as well as see, how cool it can be to embed a functional language into the .NET ecosystem. FSharp will most likely change every aspect of the framework for the better. Although I haven’t learned the language to its full extent yet, I’m quite sure that C# and F# will be equal partners when it comes to develop great software.</p
    ><p
    >It might well be, that once I learned F#, I’ll want to learn other functional languages or styles as well. I might well be, that I might stick with C# or other imperative languages as well. It might well be, that I use both and enjoy both. Let’s see.</p
    ></div
  ><div id="nr.-1:-mono"
  ><h4
    >Nr. 1: Mono</h4
    ><p
    >The winner and the number one reason why working with .NET is cool, is: <strong
      ><a href="http://www.mono-project.com"
	>Mono</a
	></strong
      >.</p
    ><p
    >I can’t express in a few sentences what great gift Mono is for the .NET community, the .NET development and the .NET future. Mono made many things possible we all wouldn’t thought could be possible. Mono contributed solutions and products we all are using on a daily basis. Even more, Mono is even ahead of Microsoft in particular areas, such as CAAS or device targeting. Mono made Cecil, MonoTouch, MonoDroid and many other cool things like <a href="http://unity3d.com/"
      >Unity</a
      > possible.</p
    ><p
    >I’m working with Mono since around two years now. At the beginning of the last year, I decided to completely switch my personal .NET development to Mono. I even had a commercial project with Mono. During this time, I learned a lot about the .NET Framework, the class libraries, the Mono compiler and the “Monoid” way of software development. I’m very thankful for all what I have learned so far and I’m looking forward to learn more and contribute to the Mono and OSS comunity.</p
    ><p
    >Please, .NET developers, contribute to Mono.</p
    ><p
    >Please, .NET community, use and enhance Mono.</p
    ><p
    ><strong
      >Please, Mono, continue to be so awesome.</strong
      ></p
    ></div
  ></div
>
]]></content:encoded>
			<wfw:commentRss>http://ilker.de/not-leaving-net/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Quest Of The Test</title>
		<link>http://ilker.de/the-quest-of-the-test</link>
		<comments>http://ilker.de/the-quest-of-the-test#comments</comments>
		<pubDate>Sat, 21 Jan 2012 14:18:22 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Methods]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Brownfield]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Lambda-Kalkül]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://ilker.de/?p=2759</guid>
		<description><![CDATA[Today, I’m going to tell you something about “Test Implants”. Sounds a bit scary, but in fact it isn’t at all. I recently wrote about a technique on how you can improve brownfield code with tests. In fact, I showed that it’s [...]]]></description>
			<content:encoded><![CDATA[<p
>Today, I’m going to tell you something about <em
  >“Test Implants”</em
  >. Sounds a bit scary, but in fact it isn’t at all. I recently wrote about a <a href="/poor-mans-test-context-composition"
  >technique on how you can improve brownfield code with tests</a
  >. In fact, I showed that it’s surely possible to do some TDD on an existing codebase with the help of simple “Mixin Contexts”.</p
><p
>This time I’m going to share another technique which I found to be very helpful in brownfield engineering scenarios. Obviously, I named this technique “Test Implants”. Test Implants are no solution to “untestable” code, but help you to find out the parts which need to be addressed.</p
><p
>Effectively, every test implant I wrote made me rethink on how the code might be restructured to fit all requirements. For me, test implants are a simple, feasible way to get interaction tested without essentially restructuring the organization of the code. I personally use test implants for over a year now and found it very useful most of the time.</p
><p
>I’m going to show you test implants using a little fictional story. No intentions behind that, the story is just a cake with topping alongside the coffee. The title of the story, obviously, is <em
  >“The Quest Of The Test”</em
  >. Enough introduction, let’s just start.</p
><p
>I’m going to tell a little story about legacy code, bugs and testability. You, my dear reader, will be put right into the fabulous adventure of finding out what a test implant is. Enjoy.</p
><div id="a-typical-brownie"
><h3
  >A typical Brownie</h3
  ><p
  >It’s a regular, rainy Thursday morning, five past nine. As always, you’re a little late to work. You quickly pull of your coat while switching on your monitor and logging in with your left hand. It’s not that your password isn’t complex. It is fairly complex. It’s the virtuosity of your memorized typing of course that makes it possible to login single-handed.</p
  ><p
  >Once you’re seated, you see bad news in your inbox. “Bug in Chronograph!” says the title of the mail. What? <em
    >The</em
    > chronograph? The legacy code you just have become the official maintainer for?</p
  ><p
  >Justice has left this town. That’s for sure.</p
  ><p
  >Ok. Ok, ok. While you concentrate to breathe in regular intervals again, your brain starts to send plausible signals: “Get me a coffee. Then we’ll fix this bitcrap, buddy”. Aight! You put in a Nespresso “<a href="http://www.nespresso.com/ch/en/product/volluto"
    >Volluto</a
    >” for starters and hit the button. While the coffee machine is at your command, you open the Chronograph files. You happen to recall that it’s using <code
    >TimeServer</code
    >, an almighty third-party DLL. It contains classes and methods to fetch a global standard time from internet and translate it to local time.</p
  ><p
  >Bing! Coffee done! <em
    >“A morning with bugs and coffee. The usual suspects in my ordinary life.”</em
    > is the most original thing what you are able to tweet right now about your adventure. Ok. Social shit done as well. Start working. Now.</p
  ><p
  >Sources refreshed, project opened in Visual Studio, table light dimmed. You’re just rereading the code of Chronograph, which has been written in “ancient times”. Obviously without any unit tests at all:</p
  ><pre class="prettyprint lang-cs"
  ><code
    >public class Chronograph {
  private CultureInfo _culture = CultureInfo.InvariantCulture;

  public bool IsDirty { get; set; }

  public LocalTime SyncWith(TimeServer ts) {
    var localTime = new LocalTime();

    if (IsDirty) {
      TimeEntry te = ts.GetTime();
      te.Apply(_culture);
      localTime = te.ToLocalTime();
    } else {
      TimeEntry te = new TimeEntry(localTime);
      te.Apply(_culture);
      localTime = te.ToLocalTime();
    }

    return localTime;
  }
}
</code
    ></pre
  ><p
  >Hmm. This code smells to have bugs. You’re staring at it and think <em
    >“Oh my. Look at the dupes. Rookies.”</em
    > If you wouldn’t just slurp your coffee while browsing code, your left hand would be ready to serve a generous face-palm. Your excellent nose didn’t mislead you, as you soon realize while reading the bug report in Bugzilla:</p
  ><pre
  ><code
    >Bug Nr      : 0815
Title       : culture is not updated when clock is in sync with server
Component   : Time Sychronizer (Chronograph)
Description : While the local time is in sync with server, the culture needs to be &quot;updated&quot; regularly. It happens not to be the case. The time server API has a specific function to update a time entry with culture: TimeEntry.Ensure(CultureInfo). Use this function to keep culture up to date.
</code
    ></pre
  ><p
  >Good to know that a professional like you is taking care of this nifty bug. While browsing through TimeServer API, you realize that <code
    >TimeServer</code
    >, <code
    >TimeEntry</code
    > and <code
    >LocalTime</code
    > classes are all sealed. Without interfaces.</p
  ><p
  >Your mouse pointer moves the scrollbar slow. Very slow. You try to cheer up yourself: “An API style I’ve seen a hundred times at least. Nothing shocking so far.” You know the truth is different. You wished to stay at home today. Now you’re here. Right in front of this artfully crafted code. Not.</p
  ><p
  ><em
    >Riiing!</em
    > 10 AM! Stand-up time! “Come on, <a href="http://en.wikipedia.org/wiki/Marty_McFly"
    >McFly</a
    >, wake up!” is the flash of thought right after the alarm window popped up on your screen. Lock the box, put off the mug, off to 3rd floor! Since your department has moved last year from 3rd to 1st floor, these dailies happen to have the notion of helping the staff to burn calories. You hurry up to entrance. “Yeah. Right.” - all elevators blocked. Stairs, as always.</p
  ></div
><div id="tdd-is-en-vogue"
><h3
  >TDD is En Vogue</h3
  ><p
  >Arrived at 3rd floor you see all devs listening to the lead developer. You don’t like him, yeah. Nonetheless, this time it’s as if an important announcement is about to happen. “Will he retire?” is all what you can imagine to be a positive thing right now. However, surprise is ahead.</p
  ><blockquote
  ><p
    >From now on, the management and the entire organization will support and encourage to develop literally everything with TDD. No code will be put in production which is not TDD’d, no bug will be resolved without proper tests using test-first method. Period.</p
    ></blockquote
  ><p
  >It’s Christmas and Eastern altogether. Did he really say TDD? Yes, he did! Life is a roller-coaster. After having reached the grounds this morning, you’re now back on track. Finally TDD. All those arguments you had in kitchen, all those emails you wrote to colleagues with links to <a href="http://www.objectmentor.com/omTeam/martin_r.html"
    >Uncle Bob</a
    > and <a href="http://en.wikipedia.org/wiki/Kent_Beck"
    >Kent Beck</a
    >, all those code reviews and little wars about test frameworks and CI integration have come to an end. Whoohoo!</p
  ><p
  >Ok, great stuff! Finally your company is on the right path. Right after daily you hurry down to your desk again. Now let’s do some bug hunting! You start to examine the class signatures involved in that nasty bug again:</p
  ><pre class="prettyprint lang-cs"
  ><code
    >public sealed class TimeServer {
  public TimeEntry GetTime();
}

public sealed class TimeEntry {
  public TimeEntry(LocalTime lt);
  public void Apply(CultureInfo ci);
  public void Ensure(CultureInfo ci);
  public LocalTime ToLocalTime();
}

public sealed class LocalTime {
}
</code
    ></pre
  ><p
  >Wow. Sealed. The Dev who wrote this must have got a <a href="http://www.youtube.com/watch?v=AMD2TwRvuoU"
    >Kiss from a Rose</a
    >. Looking back at the original <code
    >Chronograph</code
    > class, it’s crystal-clear that the <code
    >else</code
    > branch needs to call <code
    >Ensure</code
    > instead of <code
    >Apply</code
    >. Pretty easy. But wait! How to write a test for this tiny typo? You look back into your digital toolbox: Only <a href="http://nunit.org/"
    >NUnit</a
    > and <a href="http://code.google.com/p/moq/"
    >Moq</a
    > available. Hmm. You stop for a minute and rephrase the question in your mind: <em
    >“How to write a sensible unit test beforehand to ensure that the bug is fixed right after you have just replaced a single word?”</em
    ></p
  ></div
><div id="the-quest-of-the-test"
><h3
  >The Quest Of The Test</h3
  ><p
  >You wouldn’t be a geek if you wouldn’t consider it as a duty to find an answer to this question. With years being in this business, you very surely know: There’s coders, there’s hero coders, and - there’s you. The metaphorical ant of all coders. You’ll sit here, with your coffee mug on your left, and take the quest. <a href="http://www.callofduty.com/"
    >Duty is calling</a
    >, comrade.</p
  ><p
  >First, you just do the regular easy stuff. That is, get NUnit referenced, build up a skeleton of the test class and write up your environment to be “ready to assert”. No minute later, you’re staring at this code fragment:</p
  ><pre class="prettyprint lang-cs"
  ><code
    >[TestFixture]
public class When_chrono_is_in_sync {
  [Test]
  public void Then_culture_is_ensured_with_time_entry() {
    var ensureWasCalled = false;

    var ts = new TimeServer();
    var chrono = new Chronograph();

    chrono.IsDirty = false;
    chrono.SyncWith(ts);

    Assert.IsTrue(ensureWasCalled);
  }
}
</code
    ></pre
  ><p
  >So far, so good. Now the kindergarten is over. Right now is the time to separate real men from boys. You need to find a <em
    >plausible</em
    > and <em
    >sensible</em
    > way to express the expectation, that <code
    >te.Ensure()</code
    > is being called instead of <code
    >te.Apply()</code
    >.</p
  ><p
  >It’s time for another coffee. Volluto doesn’t do any more. This exceptional situation cries for exceptional coffee. You put in the “<a href="http://www.nespresso.com/ch/en/product/roma"
    >Roma</a
    >” tab into the machine and let the mug do its job: awesome coffee storage. No milk. No sugar. Outlook off, Browser off, Tweetdeck off. You literally feel the scientific aura now.</p
  ><p
  >“Wait a minute…” you think. “… scientific? Science. Yes, science is a good catch right now. I need to express a function in order to put it under assertion.”. Express. A. Function.</p
  ><p
  ><strong
    >Eureka!</strong
    ></p
  ><p
  >That’s the key! You’ll go for a lambda expression. You need to define the function which actually calls the <code
    >Ensure</code
    > method and then assert its proper usage simply by checking whether this function has been called. That’s like implanting a lambda into the existing code. You quickly smash in some prototypical code to verify your solution path:</p
  ><pre class="prettyprint lang-cs"
  ><code
    >public static class TimeEntryImplant {
  public delegate void Ensure(CultureInfo culture);
}
</code
    ></pre
  ><p
  >That’s the delegate. Let’s weave that into <code
    >Chronograph</code
    > in order to be able to utilize it:</p
  ><pre class="prettyprint lang-cs"
  ><code
    >public class Chronograph {
  private CultureInfo _culture = CultureInfo.InvariantCulture;
  private TimeEntryImplant.Ensure _implant;

  internal Chronograph(TimeEntryImplant.Ensure implant) {
    _implant = implant;
  }

  // ...
}
</code
    ></pre
  ><p
  >And finally heading on to extend the test:</p
  ><pre class="prettyprint lang-cs"
  ><code
    >[TestFixture]
public class When_chrono_is_in_sync {
  [Test]
  public void Then_culture_is_ensured_with_time_entry() {
    var ensureWasCalled = false;

    TimeEntryImplant.Ensure implant =
      culture
        =&gt; ensureWasCalled = true;

    var ts = new TimeServer();
    var chrono = new Chronograph(implant);

    chrono.IsDirty = false;
    chrono.SyncWith(ts);

    Assert.IsTrue(ensureWasCalled);
  }
}
</code
    ></pre
  ><p
  >“Yeah, right.” Looks good so far. The strategy now is hacked in. You feel good, you feel confident. Nonetheless, you still feel the need to reiterate your solution path again. The pro is working here. Swiftly, almost gracefully, you stand up from your seat, followed by two elegant sidesteps towards the whiteboard. On a small space on the upper left corner you rewrite the essentials steps again:</p
  ><ol style="list-style-type: decimal;"
  ><li
    >Declare &amp; define expression containing the new functionality.</li
    ><li
    >Use the expression within assertion to get the test red.</li
    ><li
    >Implant the expression within class under test to get the test green.</li
    ></ol
  ></div
><div id="freddy-fredpecker"
><h3
  >Freddy Fredpecker</h3
  ><p
  >“Hey, hey, heeeeeeey!” you hear a dark, arrogant and unemotional voice on your back saying with low voice. It’s Fred, your “colleague”. No. Collegue is not the right word. Fred is an arrogant Egomaniac, who coincidentally happen to work at the same company as you do. To make it even worse, Fred is the self-proclaimed “Testing Expert” in your department. He actually hasn’t heard anything about <a href="https://github.com/machine/machine.specifications"
    >MSpec</a
    >, he writes “Unit Tests” with database usage and he is very keen to rigorously punish every developer with irony and sarcasm who is not obeying the almighty AAA-rule. Testing Expert, you know.</p
  ><p
  >You turn your back slowly and see him sitting on your desk. “What an ignorant, low-life piece of crap he is” you think as you see him tipping with his dirty fingers on your beloved <a href="http://shop.github.com/products/octocat-mug"
    >Octocat Mug</a
    > while swinging around in lay-back mode on your swivel-chair.</p
  ><p
  >“You seem to have a faible for testing, aren’t you? Buddy, realize testing is not about colors or expressions. I see…” Fred continues while having a glimpse at your test code, “… you’re trying to test something with lambda. Man, I knew you’re crazy. Like ‘<a href="http://en.wikipedia.org/wiki/I_Now_Pronounce_You_Chuck_and_Larry"
    >Adam Sandler-Crazy</a
    >’. But I didn’t knew you’re dumb as well. Like ‘<a href="http://en.wikipedia.org/wiki/Dumb_and_Dumber"
    >Jim Carrey-Dumb</a
    >’, y’know?” He harshly puts your mug back on your desk while moving his butt off your chair.</p
  ><p
  >“Fred,” you reply, “ehh… eh… well… em, you’re right. I’m just trying out something, y‘know? It’s wrong shit anyway, so don’t care about it. Well, y’know it’s hard for me as an ’average’ coder to get into this testing stuff. I’m experimenting a bit, that’s all.”.</p
  ><p
  >You know you need to get rid of him. Now. You put that ordinary, demotivated Looser-Look on your face and stare at Fred. Deranged. - “You better get a life, kid.” mouns Fred and slowly moves out of the door. You follow him, with a little, respectful distance, grab the knob of the door and close it silently.</p
  ></div
><div id="two-strikes-to-green"
><h3
  >Two Strikes To Green</h3
  ><p
  >“Phew… at least I got rid of this low life looser”. You quickly move back to your desk and grab the keyboard. You’re so close to the solution, only a few keystrokes away. The test is red. You know you could go green by just invoking <code
    >_ensure</code
    > function you injected through <code
    >Chronograph</code
    >s constructor.</p
  ><p
  >However, that’s not the idea of this game. The Idea is to ensure that the <em
    >real</em
    > <code
    >Ensure</code
    > method of <code
    >TimeEntry</code
    > has been called. You lean back for a minute, then decide to slowly hack in an extension method to <code
    >TimeEntryImplant</code
    >:</p
  ><pre class="prettyprint lang-cs"
  ><code
    >public static class TimeEntryImplant {
  public static void EnsureImplant(this TimeEntry entry, CultureInfo culture, Ensure implant) {
    (implant ?? entry.Ensure)(culture);
  }
}
</code
    ></pre
  ><p
  >Yep. You pause. Just staring at your code. It’s these little moments, these little seconds in your poor hacker life you’re loving to have. You made it. And it looks beautiful. You just got your very first <strong
    >test implant</strong
    >.</p
  ></div
><div id="grande-finale"
><h3
  >Grande Finale</h3
  ><p
  >Now let’s head on to the finishing move! It somehow amazes you that you’re able to switch back into rapid fire mode so easily after being in the ‘code monkey stares at code’-position. Rolling back with yout chair to your desk, you almost spilled your coffee on your beloved keyboard. Almost.</p
  ><p
  >Ok. Concentration. You already know it. Victory is only one single line away. With the heart of a winner, a generous and confident smile in your face, you open the <code
    >Chronograph</code
    > class and change the line you knew you needed to change from the beginning. You locate your enemy:</p
  ><pre class="prettyprint lang-cs"
  ><code
    >      te.Apply(_culture);
</code
    ></pre
  ><p
  >Squash this buggy line away and place in your implant:</p
  ><pre class="prettyprint lang-cs"
  ><code
    >      te.EnsureImplant(_culture, _implant);
</code
    ></pre
  ><p
  >Save. Run test. <em
    >This is the moment.</em
    > You stare with eager into test results window while your stuff compiles. You’re sweating, altough you haven’t moved your ass even an inch away from your computer.</p
  ><p
  >Ok, runner starting… testing… green!</p
  ><p
  ><strong
    >Victory!</strong
    ></p
  ><p
  >You lean back, grab your mug, sip a little bit, switch back to code to see the beauty of the complete <code
    >Chronograph</code
    > class:</p
  ><pre class="prettyprint lang-cs"
  ><code
    >public class Chronograph {
  private CultureInfo _culture = CultureInfo.InvariantCulture;
  private TimeEntryImplant.Ensure _implant;

  internal Chronograph(TimeEntryImplant.Ensure implant) {
    _implant = implant;
  }

  public bool IsDirty { get; set; }

  public LocalTime SyncWith(TimeServer ts) {
    var localTime = new LocalTime();

    if (IsDirty) {
      TimeEntry te = ts.GetTime();
      te.Apply(_culture);
      localTime = te.ToLocalTime();
    } else {
      TimeEntry te = new TimeEntry(localTime);
      te.EnsureImplant(_culture, _implant);
      localTime = te.ToLocalTime();
    }

    return localTime;
  }
}
</code
    ></pre
  ><p
  >You did it. You squashed the bug. TDD. Test-First. Brownfield. What a victory.</p
  ><p
  >After this tremendous win, you surely got excited enough from your <em
    >test implant</em
    > to tell all your mates about it. In your office, though IM, Facebook, Twitter and whatever medium you have ready. For hours and hours, you reiterate your journey.</p
  ><p
  >Through all this excitement, you even get your hands on other, similar pieces of code and try using the implant technique. It’s easy, it’s expressive, it just works.</p
  ><p
  >After all these exciting hours, you literally didn’t notice how fast time flew away. It’s 9 P.M and you’re still in office. “Oh shit, I’m supposed to meet with my honey at 10!”. You grab your jacket, lock your box, switch off lights and slowly move stairs down to basement. Time to leave with pride. With the ‘test implant’ feather in your cap you walk out of the office and step into the bus.</p
  ><p
  >An hour later you’re finally at the bar to meet your sweetheart. She steps in, beautiful as ever, smiles and quickly skirrs into your arms. This day can’t get better. She gives you a long, affectionate kiss - willing to stop at nothing.</p
  ><p
  >All of a sudden you stop the kiss, smile at her at your best and whisper: “I love you, hon…” while thinking… <strong
    >“OMG, I forgot to check-in!”</strong
    ></p
  ></div
>
]]></content:encoded>
			<wfw:commentRss>http://ilker.de/the-quest-of-the-test/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>C# Global &amp; Generic Type Alias</title>
		<link>http://ilker.de/c-global-generic-type-alias</link>
		<comments>http://ilker.de/c-global-generic-type-alias#comments</comments>
		<pubDate>Tue, 03 Jan 2012 14:21:27 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Alias]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Generics]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[OO]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Type]]></category>
		<category><![CDATA[Using]]></category>

		<guid isPermaLink="false">http://ilker.de/?p=3099</guid>
		<description><![CDATA[I want better aliases in C#. To be honest I miss this feature since .NET 2.0. I mean, it’s not a problem of .NET, but merely a problem of the C# language itself. To me, aliasing is a very important language feature. [...]]]></description>
			<content:encoded><![CDATA[<p
>I want better aliases in C#. To be honest I miss this feature since .NET 2.0. I mean, it’s not a problem of .NET, but merely a problem of the C# language itself. To me, aliasing is a very important language feature. In my opinion, it’s one of the three most undervalued language features: macros, aliases and comments.</p
><div id="global-type-alias"
><h3
  >Global Type Alias</h3
  ><p
  >First off, let me define what a global alias is for me. A global type alias is best described with the current aliasing feature in C#:</p
  ><pre class="prettyprint"
  ><code
    >using System;
using Dump = System.Diagnostics.Debug;

public class Writer {
  public Writer() {
    Dump.WriteLine(&quot;Writer!&quot;);
  }
}
</code
    ></pre
  ><p
  >The second line is a <a href="http://msdn.microsoft.com/en-us/library/sf0df423.aspx"
    >using alias</a
    >. It’s quite handy to avoid name clashes in your source file. And that’s the downside (for me) as well. In C#, it’s only possible to define type <a href="http://stackoverflow.com/questions/2590643/namespace-scoped-aliases-for-generic-types-in-c-sharp"
    >aliases on source code file level</a
    >. While it’s perfectly ok for resolving name clashes, it’s yet not enough for me in terms of sensible alias usage.</p
  ><p
  >From my perspective, a broader - even declarable - scope of a type alias would be very helpful. As a starting point, I’ll define a “global” type alias as an alias valid on assembly level.</p
  ><p
  >Global type aliasing can be very helpful. I miss it most for generic types, since they’re not only tend to be verbose but can be misleading as well. I mean, how often did you ask your inner self the famous three letters (WTF?) when seeing something like <code
    >ServiceResponse&lt;Dictionary&lt;long, List&lt;string&gt;&gt;&gt;</code
    >? Yes, sure you can alias it with <code
    >using RoadServiceResponse = ServiceResponse&lt;Dictionary&lt;long, List&lt;string&gt;&gt;&gt;</code
    >.</p
  ><p
  >Now would you want to define this alias in <em
    >every single file</em
    > where you process this mighty response object? Surely not. Redundancy is boring. However, if you’re using C#, you just have to. A widely scoped type alias is surely possible if you were using <a href="http://stackoverflow.com/questions/2480290/global-import-using-aliasing-in-net"
    >VB.NET with its Imports feature</a
    >.</p
  ></div
><div id="alias-open-types"
><h3
  >Alias Open Types</h3
  ><p
  >Lengthy and complicated naming is one reason. A second, even more demanding reason for global type aliases are the use of generic implementations or generic interface definitions. It may sound weird in first instance, so let’s see an example here:</p
  ><pre class="prettyprint"
  ><code
    >/* Assembly A: My 'cool' API :-) */
using System;
using System.Collections.Generic;

public interface IMetaData&lt;T&gt; {
  string Id { get; }
  T Data { get; }
}

public interface IRelationMap&lt;T, TKey, TValue&gt; 
  : IDictionary&lt;TKey, TValue&gt; {
  TValue GetRelated(T obj, TKey key);
  T RelateTo&lt;T&gt;(TKey key);
}

public interface IMetaInfo&lt;TSource, TData&gt; {
  IRelationMap&lt;TSource, string, IMetaData&lt;TData&gt;&gt; Properties { get; }
  TSource Object { get; }
  int ChannelId { get; }
}
</code
    ></pre
  ><p
  >A little unreadable for the generic types, but quite straight forward so far. Let’s implement <code
    >IMetaInfo</code
    >:</p
  ><pre class="prettyprint"
  ><code
    >/* Assembly B: My 'cool' Service :-) */
public class TextMetaInfo&lt;T&gt; 
  : IMetaInfo&lt;T, string&gt; {
  public IRelationMap&lt;T, string, IMetaData&lt;string&gt;&gt; Properties { get; set; }
  public T Object { get; set; }
  public int ChannelId { get; set; }
}
</code
    ></pre
  ><p
  >Doesn’t this look weird? Wouldn’t this one be a little more readable:</p
  ><pre class="prettyprint"
  ><code
    >using System;
using System.Collections.Generic;

using IMetaMap&lt;T&gt; = IRelationMap&lt;T, IDictionary&lt;string, IMetaData&lt;string&gt;&gt;;

public class TextMetaInfo&lt;T&gt; 
  : IMetaInfo&lt;T, string&gt; {
  public IMetaMap&lt;T&gt; Properties { get; set; }
  public T Object { get; set; }
  public int ChannelId { get; set; }
}
</code
    ></pre
  ><p
  >Sad enough that above code won’t compile. C# only accepts <a href="http://stackoverflow.com/questions/4936941/using-a-using-alias-class-with-generic-types"
    >aliases for closed types</a
    >.</p
  ><p
  >Yeah, you might think now that this is just nitpicking, since you surely might just derive to have naming done right:</p
  ><pre class="prettyprint"
  ><code
    >public interface IMetaMap&lt;T&gt; : IRelationMap&lt;T, IDictionary&lt;string, IMetaData&lt;string&gt;&gt; {}
</code
    ></pre
  ><p
  >Sorry to disappoint you here. “Fixing naming” by subclassing is just wrong. Despite of the bad smell you simply made it even worse since you now made it a lot harder to implement <code
    >IMetaInfo&lt;T, string&gt;</code
    >. If you were the consumer of <em
    >Assembly A</em
    > without any source code access, you lost anyway. If you actually have access to the sources of <em
    >Assembly A</em
    >, you end up in deciding whether to change the type signature of <code
    >IMetaInfo&lt;TSource, TData&gt;</code
    > just for naming. In consequence, other implementors need to change their implementations. Even callers need to recompile. For the sake of readability?</p
  ><p
  >Sorry, C#. You are doing a good job being a multi-paradigm (yet OO-colored) language. However, when it comes to aliasing, you could do better.</p
  ></div
>
]]></content:encoded>
			<wfw:commentRss>http://ilker.de/c-global-generic-type-alias/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alles agil, nichts stabil</title>
		<link>http://ilker.de/alles-agil-nichts-stabil</link>
		<comments>http://ilker.de/alles-agil-nichts-stabil#comments</comments>
		<pubDate>Sun, 01 Jan 2012 16:00:35 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Methods]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ALT.NET]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Kanban]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Prozess]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Craftsmanship]]></category>
		<category><![CDATA[Software-Entwicklung]]></category>
		<category><![CDATA[Unit Test]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://ilker.de/?p=2934</guid>
		<description><![CDATA[Dieser Artikel ist etwas besonderes. Normalerweise mache ich kein großes Aufsehen um meine Vorträge und Lesungen. Doch bei diesem mache ich eine Ausnahme, denn dieser Beitrag ist etwas besonderes. Mein Beitrag:Titel: Amigo Agilo: Alles Agil, Nichts StabilBeschreibung: Agil. Agil. Agil. Agil. Agil. [...]]]></description>
			<content:encoded><![CDATA[<p
>Dieser Artikel ist etwas besonderes. Normalerweise mache ich kein großes Aufsehen um meine Vorträge und Lesungen. Doch bei diesem mache ich eine Ausnahme, denn dieser Beitrag ist etwas besonderes. Mein Beitrag:</p
><div id="titel:-amigo-agilo:-alles-agil-nichts-stabil"
><h4
  >Titel: Amigo Agilo: Alles Agil, Nichts Stabil</h4
  ><p
  ><strong
    >Beschreibung:</strong
    > Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Stabil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Stabil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Stabil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Agil. Stabil. Agil. Agil. Agil. Agil. Agil. Agil.</p
  ></div
><div id="interesse-interesse"
><h4
  >Interesse? Interesse!</h4
  ><p
  >Ich möchte hiermit jeden, der Interesse an meinem Beitrag <strong
    >“Amigo Agilo: Alles Agil, Nichts Stabil”</strong
    > hat, um einen Gefallen bitten:</p
  ><p
  >Bitte schreibt mir hier einen Kommentar, twittert an <a href="http://www.twitter.com/ilkerde"
    >@ilkerde</a
    > oder <a href="http://www.twitter.com/amigoagilo"
    >@amigoagilo</a
    >, schlagt meinen Vortrag auf Konferenzen, Barcamps und User-Groups im Software-Entwicklungs- und Software-Management-Umfeld vor. Ich würde mich sehr freuen, diesen Beitrag einem breiten und interessierten Publikum vorzustellen.</p
  ><p
  >Jede aufrichtige und realistische Möglichkeit nehme ich dankend an. Ganz besonders würde es mich freuen, diesen Vortrag im Rahmen einer Konferenz oder eines UG-Treffens für Agile Methoden halten zu können. Das ist ja bei dem Thema ja recht naheliegend, oder?</p
  ><p
  >Bevor es zu irgendwelchen Mißverständnissen oder Rückfragen kommt: Der o.g. Titel sowie die ungewöhnliche Beschreibung dazu sind alles, was ich zum Beitrag schriftlich mitgeben kann und will. Die Beschreibung trifft den Vortragsinhalt ziemlich genau, denn es geht um das Wort “Agil” und dessen Bedeutung im Software-Entwicklungs- bzw. -Management-Umfeld.</p
  ><p
  >Die Dauer des Vortrages ist ca. 60 Minuten, es sind keine Voraussetzungen notwendig, außer ein gesundes Interesse zum Thema. In diesem Sinne:</p
  ><p
  ><strong
    >Alles Agil, Nichts Stabil.</strong
    ></p
  ><p
  >Ich freue mich auf Feedback, Meinungen und Anregungen. Danke.</p
  ></div
>
]]></content:encoded>
			<wfw:commentRss>http://ilker.de/alles-agil-nichts-stabil/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notizen eines Nerds 2011</title>
		<link>http://ilker.de/notizen-eines-nerds-2011</link>
		<comments>http://ilker.de/notizen-eines-nerds-2011#comments</comments>
		<pubDate>Sat, 31 Dec 2011 00:30:38 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Moleskine]]></category>
		<category><![CDATA[Nerd Notes]]></category>

		<guid isPermaLink="false">http://ilker.de/?p=2840</guid>
		<description><![CDATA[Hier sind meine Notizen eines Nerds für 2011. Viel Spaß!Notizen eines NerdsUX: Progressbar vs. WaitcursorCode Analysis NotesHardcore SoftwareALE MUC BrainstormingXP Secrets NotesTDD Talk NotesDie Modellverantwortung des ArchitektenCastle Of Variability &#38; EstimationBranching PatternsContext In Model Is EvilMenu State AnalysisPosh 4 Devs NotesMore Nerd NotesDer [...]]]></description>
			<content:encoded><![CDATA[<p
>Hier sind meine <em
  >Notizen eines Nerds</em
  > für 2011. Viel Spaß!</p
><div id="notizen-eines-nerds"
><h3
  >Notizen eines Nerds</h3
  ><ul
  ><li
    ><a href="/ux-progressbar-vs-waitcursor"
      >UX: Progressbar vs. Waitcursor</a
      ></li
    ><li
    ><a href="/code-analysis-notes"
      >Code Analysis Notes</a
      ></li
    ><li
    ><a href="/hardcore-software"
      >Hardcore Software</a
      ></li
    ><li
    ><a href="/ale-muc-brainstorming"
      >ALE MUC Brainstorming</a
      ></li
    ><li
    ><a href="/xp-secrets-notes"
      >XP Secrets Notes</a
      ></li
    ><li
    ><a href="/tdd-talk-notes"
      >TDD Talk Notes</a
      ></li
    ><li
    ><a href="/die-modellverantwortung-des-architekten"
      >Die Modellverantwortung des Architekten</a
      ></li
    ><li
    ><a href="/castle-of-variability-estimation"
      >Castle Of Variability &amp; Estimation</a
      ></li
    ><li
    ><a href="/branching-patterns"
      >Branching Patterns</a
      ></li
    ><li
    ><a href="/context-in-model-is-evil"
      >Context In Model Is Evil</a
      ></li
    ><li
    ><a href="/menu-state-analysis"
      >Menu State Analysis</a
      ></li
    ><li
    ><a href="/posh-4-devs-notes"
      >Posh 4 Devs Notes</a
      ></li
    ></ul
  ><div id="more-nerd-notes"
  ><h4
    >More Nerd Notes</h4
    ><p
    >Der aufmerksame Leser meines Blogs kennt sicherlich auch die “Vorjahres-Ausgabe” meiner Nerd-Notizen, nämlich die <a href="/notizen-eines-nerds-2010"
      >Notizen eines Nerds 2010</a
      >.</p
    ><p
    >Meine Notizen fertige ich in meinem kleinen <a href="www.moleskine.com"
      >Moleskine</a
      > an. Es passt in jede Hosentasche und ist bei mir (fast immer) griffbereit. Dann brauche ich nur noch einen Bleistift, interessante Themen und Ideen. Ab und zu klappt das auch.</p
    ><p
    >Mir hat mein kleines Notizbuch immens geholfen. Beim arbeiten, planen, begreifen, designen, reflektieren, lernen, denken und entspannen.</p
    ><p
    ><strong
      >Ich wünsche uns allen gemeinsam ein gesundes, frohes, glückliches und erfolgreiches Jahr 2012!</strong
      ></p
    ></div
  ></div
>
]]></content:encoded>
			<wfw:commentRss>http://ilker.de/notizen-eines-nerds-2011/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Posh 4 Devs Notes</title>
		<link>http://ilker.de/posh-4-devs-notes</link>
		<comments>http://ilker.de/posh-4-devs-notes#comments</comments>
		<pubDate>Sat, 31 Dec 2011 00:23:14 +0000</pubDate>
		<dc:creator>Ilker Cetinkaya</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Build]]></category>
		<category><![CDATA[Moleskine]]></category>
		<category><![CDATA[Nerd Notes]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://ilker.de/?p=3013</guid>
		<description><![CDATA[Notizen eines Nerds 11’12Eines der jüngeren Vorträge in meiner Vortragsliste ist der Beitrag Posh 4 Devs, auf gut Deutsch: Powershell für Entwickler. Ich habe den Vortrag schon halten dürfen und war froh über das positive Feedback.Gerade auch, weil ich die Powershell selbst [...]]]></description>
			<content:encoded><![CDATA[<div id="notizen-eines-nerds-1112"
><h4
  >Notizen eines Nerds 11’12</h4
  ><p
  >Eines der jüngeren Vorträge in meiner Vortragsliste ist der Beitrag <strong
    >Posh 4 Devs</strong
    >, auf gut Deutsch: Powershell für Entwickler. Ich habe den Vortrag schon halten dürfen und war froh über das positive Feedback.</p
  ><p
  >Gerade auch, weil ich die Powershell selbst nicht mehr <em
    >so intensiv</em
    > nutze, sondern eigentlich nur noch für Automatisierungen in meiner Arbeitsumgebung. Die Notiz zur Vortragsgestaltung sieht bei mir so aus:</p
  ><div class="figure"
  ><img src="/wp-content/uploads/2011/12/posh_4_devs_board.jpg" alt="Posh 4 Devs Notes"
     /><p class="caption"
    >Posh 4 Devs Notes</p
    ></div
  ></div
>
]]></content:encoded>
			<wfw:commentRss>http://ilker.de/posh-4-devs-notes/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

