<?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>IT Certification News &#187; IT</title>
	<atom:link href="http://www.itcertificationnews.com/category/it/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.itcertificationnews.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Fri, 03 Feb 2012 16:59:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>As Apple Invades the Business Sector, IT Certifications Are Being Replaced</title>
		<link>http://www.itcertificationnews.com/2012/02/03/as-apple-invades-the-business-sector-it-certifications-are-being-replaced/</link>
		<comments>http://www.itcertificationnews.com/2012/02/03/as-apple-invades-the-business-sector-it-certifications-are-being-replaced/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 16:54:36 +0000</pubDate>
		<dc:creator>Trevor Boland</dc:creator>
				<category><![CDATA[IT]]></category>

		<guid isPermaLink="false">http://www.itcertificationnews.com/?p=219</guid>
		<description><![CDATA[For as long as I can remember Windows and Linux based PC&#8217;s have been the staple of the technology and business sectors, while Apple has been geared towards the creative and artistic. Times change, however, and with the popularity of the iPhone and iPad, Apple is becoming a more prevelent name in the office. As [...]]]></description>
			<content:encoded><![CDATA[<p>For as long as I can remember Windows and Linux based PC&#8217;s have been the staple of the technology and business sectors, while Apple has been geared towards the creative and artistic.  Times change, however, and with the popularity of the iPhone and iPad, Apple is becoming a more prevelent name in the office.  As windows based systems are being pushed out the door, so are the certifications that used to equate to higher pay and hireability.  Premium pay for certification based jobs has dropped between 4.6% and 6.4% over the last two years, the highest loss being to those with database certifications.  So is there no hope for those attempting to prove their knowledge base but have a shortage of work experience?  Of course there is&#8230;Apple.<span id="more-219"></span></p>
<p>
Of course the question is, which Apple certifications are the best?  Well that depends on what you&#8217;re going for.  If you work for a company that is considering transitioning to a Mac based workforce, then get the <a href="http://training.apple.com/itpro/macinteg/exam">Mac Integration Basics Certification</a>.  This certification specializes in integrating a Mac machine into a Windows based network and confronting the issues that may present themselves during the process.  Or maybe you&#8217;re wanting to change jobs and you&#8217;re looking to be valuable to a company that has already made the shift.  Then go for the <a href="http://training.apple.com/certification/acmt">Apple Certified Macintosh Technician (ACMT) Certification</a>.  A ACMT certification shows prospective employers that you&#8217;re not going to get hired and start complaining about how compact and &#8220;busy&#8221; the inside of a Mac is.  You&#8217;ve seen it all before!.  You could also go with one of the three <a href="http://training.apple.com/certification/macosx">OS X Lion Certifications offered</a>.  </p>
<p>
Of course I&#8217;m not saying that the you should get an apple tattoo, build a shrine to Steve Jobs and start going to Starbucks.  As Ryan Faas points out in his <a href="http://www.cultofmac.com/144182/as-certified-it-pro-salaries-slide-apple-certifications-gain-value/">article</a> the Apple certifications are best as only part of your certification collection.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.itcertificationnews.com/2012/02/03/as-apple-invades-the-business-sector-it-certifications-are-being-replaced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java JAI Image-io jpeg2000 Memory Leak Fix</title>
		<link>http://www.itcertificationnews.com/2011/03/25/java-jai-image-io-jpeg2000-memory-leak-fix/</link>
		<comments>http://www.itcertificationnews.com/2011/03/25/java-jai-image-io-jpeg2000-memory-leak-fix/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 12:30:15 +0000</pubDate>
		<dc:creator>Mark Stephens</dc:creator>
				<category><![CDATA[IT]]></category>

		<guid isPermaLink="false">http://www.itcertificationnews.com/?p=175</guid>
		<description><![CDATA[One of our customers sent in a support request regarding a memory leak which was assigned to me to investigate. &#160;It actually turned out to be rather an interesting problem and provided a fix for a bug in Sun&#8217;s own code so read on for the full details and the patched jar. To hunt down [...]]]></description>
			<content:encoded><![CDATA[<p>One of our customers sent in a support request regarding a memory leak which was assigned to me to investigate. &nbsp;It actually turned out to be rather an interesting problem and provided a fix for a bug in Sun&#8217;s own code so read on for the full details and the patched jar.</p>
<p>To hunt down the bug, I used the excellent <a href="http://www.ej-technologies.com/products/jprofiler/overview.html" onclick="javascript:_gaq.push(['_trackEvent','outbound-article','www.ej-technologies.com']);">JProfiler</a> to see if it would give me a clue as to what was going on. Here is a screenshot.</p>
<p><span id="more-175"></span></p>
<p><a href="http://images.ientrymail.com/itcertificationnews/memoryLeak2.jpg"><img border="0" src="http://images.ientrymail.com/itcertificationnews/memoryLeak2.jpg" alt="JProfilier Screenshot" width="400" height="322" class="size-medium wp-image-1908 aligncenter" title="JAI Jpeg2000 Memory Leak"></a></p>
<p>It turned out that the leak was actually in one of Sun&#8217;s own JAI classes, which have not seen much development in recent years.&nbsp;The jpeg2000 image reader seemed to be holding on to some resources even when the reference to the J2KImageReader instance had been released in our code.&nbsp; In the screenshot you might be able to see there is 670 odd kilobytes and just over 15 thousand instances still referenced.&nbsp; I looked at the reference graph in JProfilier for some of the instances and ended going round in circles!</p>
<p>I decided that I would have to look at the jai-imageio code to see if there was something to be done.&nbsp; At this point I also realised that some of our <a href="http://www.jpedal.org/PDFblog/2011/03/java-images-what-is-happening-with-jai/">JAI links </a>where broken and that JAI seems to be pretty much forgotten about.</p>
<p>After having a look at the JAI image-io code I decided to use a pretty straight forward strategy to release the memory: set some object references to null somewhere along the line!&nbsp; The J2KImageReader class seemed to be the place to start.&nbsp; While having a look I realised that the J2KImageReader class did not implement a required dispose method.&nbsp; When we called dispose it was just calling the super implementation of dispose in the ImageReader class.&nbsp; This is an empty method with a comment saying that subclasses must implement their own dispose method.&nbsp; I created a dispose method, nulled out J2KImageReaders private object members, rebuilt the image-io jar and ta-da!</p>
<p><a href="http://images.ientrymail.com/itcertificationnews/noMemoryLeak21.jpg"><img src="http://images.ientrymail.com/itcertificationnews/noMemoryLeak21.jpg" alt="JProfilier screenshot" width="400" height="324" border="0" class="aligncenter size-medium wp-image-1910" title="Leak free"></a></p>
<p>No more memory leak!&nbsp; Which was pretty cool.&nbsp; The next part was a bit more difficult: commiting my change back to the jai-image-io repository, I faffed around for too long trying to see if this is still possible.&nbsp; In the end I gave up!&nbsp; I heard a rumour that the guy administrating the code does not work for Sun/Oracle any more, but if you have had any success comitting your changes to some of the old projects hosted on java-net then please drop me a line.</p>
<p>Anyway, if you are having the same problems with JAI, memory leaks and jpeg2000 I have added the image io jar rebuilt with my change to our website so you can <a href="http://www.jpedal.org/jai_imageio_idrsolutionsBuild.jar">download the jai image io jar</a> if required.</p>
<p>And if you work for Oracle, can you tell me where to send the patch?</p>
<p><a href="http://www.jpedal.org/PDFblog/2011/03/java-jai-image-io-jpeg2000-memory-leak-fix/">Comments</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itcertificationnews.com/2011/03/25/java-jai-image-io-jpeg2000-memory-leak-fix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developers: A New Kind Of IDE Arrives In Cloud9</title>
		<link>http://www.itcertificationnews.com/2011/03/11/developers-a-new-kind-of-ide-arrives-in-cloud9/</link>
		<comments>http://www.itcertificationnews.com/2011/03/11/developers-a-new-kind-of-ide-arrives-in-cloud9/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 13:30:36 +0000</pubDate>
		<dc:creator>Robert Scoble</dc:creator>
				<category><![CDATA[Benefits]]></category>
		<category><![CDATA[IT]]></category>

		<guid isPermaLink="false">http://www.itcertificationnews.com/?p=171</guid>
		<description><![CDATA[Programmers, you should check this out. Cloud9 IDE has the biggest innovation in IDEs since Microsoft brought us Visual Basic: everything runs on the cloud. It&#8217;s &#8220;development as a service.&#8221; What does that mean? Well, instead of coding in text files sitting on your computer, you code directly in the browser window. Here Rik Arends, [...]]]></description>
			<content:encoded><![CDATA[<p><iframe title="YouTube video player" src="http://www.youtube.com/embed/s88fuuzg5RE" allowfullscreen="" frameborder="0" height="255" width="400"></iframe></p>
<p>Programmers, you should check this out. <a href="http://cloud9ide.com/">Cloud9 IDE</a> has the biggest innovation in IDEs since Microsoft brought us Visual Basic: everything runs on the cloud. </p>
<p><span id="more-171"></span></p>
<p>It&#8217;s &#8220;development as a service.&#8221;</p>
<p>What does that mean? Well, instead of coding in text files sitting on your computer, you code directly in the browser window. Here Rik Arends, CTO, and Ruben Daniëls, CEO, <a href="http://www.youtube.com/watch?v=s88fuuzg5RE">show me how it works</a> and explains what it&#8217;s good for.</p>
<p>&#8220;It&#8217;s aimed at developers who want to use the new stuff,&#8221; they say.</p>
<p>What do you think? Will you build with it?</p>
<p><a href="http://scobleizer.com/2011/03/10/developers-a-new-kind-of-ide-arrives-in-cloud9/">Comments</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itcertificationnews.com/2011/03/11/developers-a-new-kind-of-ide-arrives-in-cloud9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving The Extensibility And Re-usability Of Your Code</title>
		<link>http://www.itcertificationnews.com/2011/02/04/improving-the-extensibility-and-re-usability-of-your-code/</link>
		<comments>http://www.itcertificationnews.com/2011/02/04/improving-the-extensibility-and-re-usability-of-your-code/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 13:30:25 +0000</pubDate>
		<dc:creator>Dean Michael Berris</dc:creator>
				<category><![CDATA[Benefits]]></category>
		<category><![CDATA[IT]]></category>

		<guid isPermaLink="false">http://www.itcertificationnews.com/?p=164</guid>
		<description><![CDATA[It’s no secret that I abhor Object Oriented Programming especially if it’s used to solve every problem that needs a computer program to solve. I don’t know what the guys thinking about OOP were drinking or smoking when they sought to sell it like the Kool Aid that it is. Having said that, I admit [...]]]></description>
			<content:encoded><![CDATA[<p>It’s no secret that I abhor Object Oriented Programming especially if it’s used to solve every problem that needs a computer program to solve. I don’t know what the guys thinking about OOP were drinking or smoking when they sought to sell it like the Kool Aid that it is. Having said that, I admit there are some good parts to OOP if you know what you’re doing which helps for writing component-based programs and for organization purposes. There was a time when I thought that C++ was an Object Oriented Programming Language and the more I use it the more I see that it’s really not meant to be just that. The problem with OOP in C++ is the same problem that OOP is sold on: OOP is rigid, is hierarchy-based, and relies on tight coupling. So what you ask is there after OOP?</p>
<p><span id="more-164"></span></p>
<p><span id="more-233"></span>Like most of the C++ programmers I know or have met, most of us have been taught that C++ is an Object Oriented Programming Language. I’d like to put an end to that now, and say that C++ supports the Object Oriented Programming Paradigm. Let me try and separate the paradigm from the programming language first.</p>
<p>Paradigms</p>
<p>A Paradigm is:</p>
<blockquote><p>From the 1960s onward, the word has referred to thought pattern in any&nbsp;scientific discipline or other&nbsp;epistemological context. The Merriam-Webster Online dictionary defines this usage as “a philosophical and theoretical framework of a scientific school or discipline within which theories, laws, and generalizations and the experiments performed in support of them are formulated;&nbsp;<em>broadly</em> : a philosophical or theoretical framework of any kind.”</p>
<p>– Wikipedia <a href="http://en.wikipedia.org/wiki/Paradigm" target="_blank">Entry on Paradigm</a>.</p>
</blockquote>
<p>The Wikipedia article on the matter describes it in a way that suggests that it is a way of thinking, of reasoning, and of formulating intellectual constructs. Therefore I submit, that the Object Oriented Programming Paradigm is merely one way of modeling solutions in terms of objects. Why is the distinction between the paradigm and the programming language required?</p>
<p>It’s funny us humans have a way of associating words with concepts. If you say something is an Object Oriented Programming Language, then it can’t be anything else right? But C++ is not that at all. C++ supports the same programming paradigm that C supports — which is the Imperative Paradigm — and the Object Oriented Paradigm as well as some concepts in the Functional Programming Paradigm. C++ has one powerful programming paradigm that it supports which not a lot of other programming languages support: the Generic Programming Paradigm.</p>
<p>So let’s start out first by showing that C++ is not just an object-oriented programming language. Let’s take one tenet of OOP and let’s implement the same using GP. Let’s try Inheritance first.</p>
<h3>Bucking Inheritance</h3>
<p>In C++, you can define a class which inherits from another class using four different types of inheritance (public, private, virtual, and protected). If you need to see how that’s done in C++, look <a href="http://www.cplusplus.com/doc/tutorial/inheritance/" target="_blank">here</a>. This is one of the three basic tenets of OOP, so how do you do it with GP? The answer may be surprising: you don’t.</p>
<p>In Generic Programming, inheritance is just an implementation detail of a type. What’s important in Generic Programming is not the type, but the characteristics or the requirements on the type. If you’re familiar with <a href="http://www.python.org/" target="_blank">Python</a> and <a href="http://en.wikipedia.org/wiki/Duck_typing" target="_blank">Duck Typing</a>, then you’ll understand how in GP you pretty much rely on the same thing:</p>
<blockquote>
<pre>template &lt;class Duck&gt;
void foo(Duck &amp; duck) {
&nbsp;&nbsp;// do something with duck here
&nbsp;&nbsp;quack(duck);
&nbsp;&nbsp;quack(duck);
&nbsp;&nbsp;kill(duck);
&nbsp;&nbsp;cook(duck);
&nbsp;&nbsp;eat(duck);
}</pre>
</blockquote>
<p>The way I put it up there, it really doesn’t matter what the type of `duck` is: what matters is that, for the function `foo` to compile, then there should be functions `quack`, `kill`, `cook`, and `eat` that take in a parameter of type `Duck`. What `foo` is doing is imposing requirements on the type `Duck`. We can then reason about the requirements on the types, rather than the ancestry of the type. This is what Concepts are. More specifically:</p>
<blockquote><p>A&nbsp;<em>concept</em> is a set of requirements (valid expressions, associated types, semantic invariants, complexity guarantees, etc.) that a type must fulfill to be correctly used as arguments in a call to a generic algorithm. In C++, concepts are represented by formal template parameters to function templates (generic algorithms). However, C++ has no explicit mechanism for representing concepts—template parameters are merely placeholders. By convention, these parameters are given names corresponding to the concept that is required, but a C++ compiler does not enforce compliance to the concept when the template parameter is bound to an actual type.</p>
<p>– <a href="http://www.boost.org/libs/concept_check" target="_blank">Boost.Concept_check</a></p>
</blockquote>
<p>So let me say that again, you can forget about using Inheritance in your C++ programs to model requirements on parameters to algorithms and use Generic Programming instead. This means you use Inheritance for other more useful means (that does include limited forms of re-use) than modeling an “is-a” relationship.</p>
<h3>Paralyzing Polymorphism</h3>
<p>Next up in my OOP hit list, I’ll take on polymorphism. Inheritance is not so interesting if all you’re doing is taking on the properties of the parent type (in C++’s case, you can multiple parents — and believe me, that’s a good thing, but that’s for another time). If you’re using Java you have at your disposal a very nice concept of the `interface`. This concept is very important, but at the same time very rigid in the light of OOP.</p>
<p>In C++ you have the “virtual” keyword where you describe a class’s member function to be a virtual function, so descendants of that type can override the functionality of the function and the proper dispatch can happen at runtime. This is a very powerful concept that a lot of software is already built upon. My point is that it’s not all the while pointless, it is perfect for situations where you need the kind of dispatch necessary. However, there is a different way of doing it at runtime.</p>
<p>Like the earlier point I was trying to make about Inheritance, GP doesn’t rely on structure or hierarchy of types to implement algorithms. The sad part about runtime polymorphism as implemented by the C++ virtual keyword is that it still relies on inheritance for the override to happen. Luckily, there’s a good alternate to this method that works just as well.</p>
<p>The problem the virtual keyword is trying to solve is that of runtime dispatch. If you think about it a little, all that is really necessary is to call the correct function based on the type of the parameter — or the type of the object for that matter. There are two ways of achieving this with GP:</p>
<ol>
<li><strong>Tag Dispatch</strong>. The common pattern for Tag Dispatch relies on performing static or compile-time checks for the type of the parameter, and calling the appropriate overload implementation for the actual function.</li>
<li><strong>Function Wrappers</strong>. The idea is you should be able to perform runtime dispatch based on criteria other than just the type of the object that hosts the virtual member.</li>
</ol>
<p>With Tag Dispatch, you can perform the wiring at compile-time reducing the need for runtime dispatch. If for example you already followed the advice of bucking inheritance for function parameters, you can then think about doing the dispatch based on the type of the parameter too:</p>
<blockquote>
<pre>template &lt;class Duck&gt;
void foo_impl(Duck &amp; duck, already_dead) {
  // no need to check if duck is alive nor kill it
  cook(duck);
  eat(duck);
}

template &lt;class Duck&gt;

void foo_impl(Duck &amp; duck, wild_and_dirty) {
  quack(duck); quack(duck);
  kill(duck);
  foo_impl(duck, already_dead());
}
template &lt;class Duck&gt;
void foo(Duck &amp; duck) {
  foo_impl(duck, typename Duck::tag());
}</pre>
</blockquote>
<p>This static dispatch is useful if you just had a lot of different duck types, and just place a nested type `tag` on each type that was either `already_dead` or `wild_and_dirty`. This saves you a virtual function call, or an if statement to check whether the type of the duck is a live one or a dead one. You can then see how building algorithms in this sense makes your functions more generic and more extensible — if you have a different specification based on a new tag, you just add that tag dispatch overload and you’re done with it.</p>
<p>With Function Wrappers, I’d point you to <a href="http://www.boost.org/libs/function" target="_blank">Boost.Function</a> and <a href="http://www.boost.org/libs/bind" target="_blank">Boost.Bind</a> — I’ll leave you to imagine a simple aggregate type that you can easily initialize with the correct function wrappers to specific implementations, which you then deal with in your algorithms.</p>
<h3>Edifying Encapsulation</h3>
<p>There’s nothing really bad with the concept of encapsulation, except that this usually means it’s time for the tightly coupled game. What I mean by this is you then have types that know about other types in a manner that usually it wasn’t intended to know. Think about it this way: Java used to have collections that only dealt with Object references — you had to cast them Object references into specific class references on your own. This is just bad design — think about the last time you had to write a container type that wasn’t really re-usable in a different context other than your application, and you’ll see why that feels wrong. Think about the way Python or Ruby deals with lists and you don’t know what the elements of the list are — and it’s too late to find a bug when you accidentally append a string to a list that was only meant to contain integers — and then you’d wonder why these are “modern” programming languages.</p>
<p>Contrast that to the way the STL containers work: containers have one implementation (well, except for the ugliness that is std::vector&lt;bool&gt;) and you supplied it with the type of the things it contains. That is a good way to think about encapsulation in GP. The point of encapsulation is that the algorithms that deals with a data type’s internal state is encapsulated in the implementation. Notice I didn’t say ‘type’ or ‘class’ and instead meant ‘implementation’ because if you look at the tag dispatch example above, you can totally implement an algorithm external to a class and still treat is as part of the implementation of a container.</p>
<p>What’s also good about the STL container implementations is that they define the concepts that each container models. This means anybody can then implement their own abstract data type and model the Associative Container concept that the STL provides, and then have their implementation suddenly usable where algorithms rely on an Associative Container. Notice that doesn’t mean anybody needs to derive from the same base — which removes all notions of coupling all together. In GP, even the weakest of coupling is too strong, and isolating the components and algorithms from the details of types is the whole idea.</p>
<h3>Outro</h3>
<p>This is the second day I’ve written something longer than a thousand words on the blog, and here I’m attacking one of the fundamental things that makes C++ totally misunderstood which is the assertion that C++ is an Object Oriented Programming Language. Others before me — and far more experienced than I am when it comes to developing things in C++ — have already read countless number of articles and books about the subject. The one that prodded me most and got me into more into the modern way of doing C++ is the one by <a href="http://www.moderncppdesign.com/" target="_blank">Andrei Alexandrescu</a> about (well, what else) <a onclick="return mugicPopWin(this,event);" oncontextmenu="mugicRightClick(this);" href="http://www.amazon.com/gp/product/0201704315?ie=UTF8&amp;tag=cs056-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201704315" target="_blank">Modern C++: Generic Programming and Design Patterns Applied</a>.</p>
<p>The next time you’re designing another C++ application or thinking of improving the extensibility and re-usability of your code, think about doing it in the modern C++ way and use Generic Programming instead of just boring all rigid Object Oriented Programming. I guarantee it will change the way you do C++ programming and how much cooler C++ programming can be.
</p>
<p><a href="http://cplusplus-soup.com/2010/11/22/life-after-oop/">Comments</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itcertificationnews.com/2011/02/04/improving-the-extensibility-and-re-usability-of-your-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developing Agile C++ Projects</title>
		<link>http://www.itcertificationnews.com/2011/01/21/developing-agile-c-projects/</link>
		<comments>http://www.itcertificationnews.com/2011/01/21/developing-agile-c-projects/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 13:30:07 +0000</pubDate>
		<dc:creator>Dean Michael Berris</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Maintenance]]></category>

		<guid isPermaLink="false">http://www.itcertificationnews.com/?p=161</guid>
		<description><![CDATA[I haven’t been writing much lately and that’s mostly because I’ve been ramping up work with a new client. That said, I’ve always wanted to write about how to do Agile Software Development with C++, but I didn’t have enough time or context to be able to do it. This current project has let me [...]]]></description>
			<content:encoded><![CDATA[<p>I haven’t been writing much lately and that’s mostly because I’ve been ramping up work with a new client. That said, I’ve always wanted to write about how to do Agile Software Development with C++, but I didn’t have enough time or context to be able to do it. This current project has let me look at how us C++ developers who work on different size projects do our work in an Agile manner. Here are a few points I’d like to share as I lay down some insights into how I’ve been doing Agile C++ Development for the past few years.</p>
<p><span id="more-161"></span>
<p>Before I dive into the points, let me just give a quick backgrounder on what Agile Software Development is. Notice I didn’t mention any specific methodology, and this is because being Agile is more a state of mind than a rigid set of practices — if anybody tells you otherwise, they might be misunderstanding the Agile Manifesto.</p>
<blockquote><p><strong>Manifesto for Agile Software Development</strong></p>
<p>We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:</p>
<p><em><strong>Individuals and interactions</strong></em> over <em>processes and tools</em></p>
<p><em><strong>Working software</strong></em> over <em>comprehensive documentation</em></p>
<p><em><strong>Customer collaboration</strong></em> over <em>contract negotiation</em></p>
<p><em><strong>Responding to change</strong></em> over <em>following a plan</em><br />
That is, while there is value in the items on the right, we value the items on the left more.</p>
<p>– <a href="http://agilemanifesto.org/" target="_blank">Agile Manifesto</a></p>
</blockquote>
<p>So what are the hallmarks of Agile Software Development? For one thing, the premium on:</p>
<ul>
<li><strong>Iterative Development</strong> — building software in a way that allows for quickly changing implementations over a period of time, and making sure that something gets delivered and iterated on.</li>
<li><strong>Testing</strong> — having tests to ensure that components of the system (and the system as a whole) works as specified.</li>
<li><strong>Welcoming Changes</strong> — instead of having lengthy planning, the solution is built to assume that anything at any given point later on can (and probably will) change.</li>
</ul>
<p>In the world of dynamic languages and object-oriented systems, is there a place for Agile development with C++? Well, of course the answer is yes!</p>
<p>Because Agile Software Development is a process or a “way of building software”, the tools you use aren’t largely affected — but the practices you follow might be affected. For example, instead of writing lengthy design documents, you’d rather write code and generate the design document out of the code; instead of writing specification documents, you actually write unit/integration/system-level/acceptance tests; instead of having planning sessions you have quick 5-minute meetings and more collaborative modes of development (pair-programming, for example). Now other languages have tons of tools that help with making these practices more in-grained in the development process — things like one-click unit-test runners and continuous testing environments (that build and run the tests as soon as changes are being made to the code for immediate feedback).</p>
<p>I for one have been following different practices in the various Agile C++ projects I’ve been involved in.</p>
<ul>
<li><strong>Test Driven Development</strong> — In any software I write now, I feel like fish out of water if I don’t write the tests first to define what I require from the component I’m writing. Having tests to verify both your specifications and implementation are actually sufficient saves you from the guesswork you otherwise have to go through when developing software. Having a deterministic and honest — even automated — way of making sure you’re understanding the specifications and implementing something acceptable is definitely the way to go in case you intend to make changes along the way.</li>
<li><strong>Active Code Review</strong> — In all the previous software projects I’ve been involved in, there is no sacred code and everything is subject to review (and improvement). This makes people care about the code they write and the design decisions they’re making. It also ensures that everybody is made involved in the process of developing and learning from the code that’s being developed.</li>
<li><strong>Pair Programming</strong> — I swear by the productivity improvement of pairing developers up to work on the same part of the system. The additional support and guidance you get from an additional set of eyes really affects the way I write code and the way I approach problems. The best part about pair programming is not the part where you’re writing code, but the part when you’re talking out the approach and the design decisions before writing — or while writing — any code.</li>
<li><strong>Brutal Retrospective</strong> — It’s important to stay honest when coding to see where the faults and issues are and be able to say what these are and how they should be addressed. There’s no point in sugar-coating the state of affairs especially when the success of a project is at stake. In other words, call it as you see it, and learn from the experience by making changes along the way.</li>
<li><strong>Measure Progress and Productivity</strong> — It’s great to be able to measure the actual productivity of a team and be able to adjust as you go along in the project. There are a lot of ways in which progress and productivity are measured, but the details don’t matter as much as the fact that measuring it matters. Do it however you like, but just make sure you’re measuring progress and productivity.</li>
</ul>
<p>Overall I’ve been in various roles in the Agile projects I’ve worked with in the past. Having a clear understanding of what your software needs to do and what the customer wants is key to the Agile process. The clarity yields happier customers and better software in the long run, and even improves developer productivity by being able to focus and iterate on the solution rather than trying to design it right at the start.</p>
<p>So have you been part of an Agile Software Development project lately with C++? How did you find it? Did I miss anything obvious above?</p>
<p><a href="http://cplusplus-soup.com/2010/12/14/agile-c-development/">Comments</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itcertificationnews.com/2011/01/21/developing-agile-c-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple Releases iOS And Mac Development Guides</title>
		<link>http://www.itcertificationnews.com/2010/12/23/apple-releases-ios-and-mac-development-guides/</link>
		<comments>http://www.itcertificationnews.com/2010/12/23/apple-releases-ios-and-mac-development-guides/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 13:30:17 +0000</pubDate>
		<dc:creator>Ritesh Reddy</dc:creator>
				<category><![CDATA[IT]]></category>

		<guid isPermaLink="false">http://www.itcertificationnews.com/?p=158</guid>
		<description><![CDATA[For all those Mac or iOS developers hard at work coding ceaselessly, lest Santa thinks you’ve been naughty here’s some good news! Santa’s coming early, bringing with him Apple’s latest offering of a bunch of iOS and Mac development books in the iBookstore for Free! The six developer guides may not appeal to non-coders, but [...]]]></description>
			<content:encoded><![CDATA[<p>For all those Mac or iOS developers hard at work coding ceaselessly, lest Santa thinks you’ve been naughty here’s some good news! Santa’s coming early, bringing with him <a href="http://www.apple.com/">Apple’s</a> latest offering of a bunch of iOS and Mac development books in the iBookstore for Free!</p>
<p><span id="more-158"></span></p>
<p>The six developer guides may not appeal to non-coders, but for those hard-core, full blown coders, choose between titles like iOS Human Interface Guidelines, Object Oriented Programming With Objective-C, or Cocoa Fundamentals Guide. Wait a minute, you don’t have to choose, they are all gratis. The other three titles are The Objective-C Programming Language, iOS Technology Overview, and its thrilling sequel iOS Application Programming Guide.</p>
<p>You’ll need to fire up <a href="http://www.apple.com/ipad/features/ibooks.html">iBooks</a> on your iPad or iPhone to get these books since Santa only climbs down these chimneys to drop off your presents. Apple says that these free books work best with the recently-released iBooks 1.2.</p>
<p><a href="http://brajeshwar.com/2010/free-apple-developer-guides-for-xmas/">Comments</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itcertificationnews.com/2010/12/23/apple-releases-ios-and-mac-development-guides/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cisco Straightens Out Security Certification Migration Path</title>
		<link>http://www.itcertificationnews.com/2010/10/29/cisco-straightens-out-security-certification-migration-path/</link>
		<comments>http://www.itcertificationnews.com/2010/10/29/cisco-straightens-out-security-certification-migration-path/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 12:30:38 +0000</pubDate>
		<dc:creator>Taylor Gillespie</dc:creator>
				<category><![CDATA[Certification]]></category>
		<category><![CDATA[IT]]></category>

		<guid isPermaLink="false">http://www.itcertificationnews.com/?p=151</guid>
		<description><![CDATA[As one of the leaders of the most sought-after information technology certifications in the industry, Cisco caused a lot of confusion when they recently restructured their certification programs. In an effort to simplify the whirlwind of letters and acronyms that one encounters when certifying with Cisco, they created a mass of confusion for those people [...]]]></description>
			<content:encoded><![CDATA[<p>As one of the leaders of the most sought-after information technology certifications in the industry, Cisco caused a lot of confusion when they recently restructured their certification programs. In an effort to simplify the whirlwind of letters and acronyms that one encounters when certifying with Cisco, they created a mass of confusion for those people currently working on getting certified under the old system and those that are currently certified but do not their options for re-certifying.<br />
<span id="more-151"></span><br />
Announcing on their Learning@Cisco web site, Cisco made changes to the certification program regarding Cisco Certified Security Professional (CCSP), a hot Cisco cert to get. The announcement end-of-lifed the CCSP as of April 2011 and then also they only recognize it until 2014, the 3 year active period. Security certification would, in the future, fall under the Cisco Certified Network Professional (CCNP) certification. Questions arose surrounding those people in the middle of their obtaining their CCSP certification and those with current active CCSP certs. Cisco had not made any indication about potential migration in their announcement, which left things in limbo. Well, it did not take them long to respond with a <a href="http://www.cisco.com/web/learning/le3/le2/le37/le54/ccsp_exam_cert_tool.html">CCSP Certification Tool</a> that helps prospects untangle the exam requirements, and lets them know where they stand in the certification process.</p>
<p>For those currently seeking the CCSP security certification through Cisco or for those that will need to re-certify in the future and need to know how they fit in the new security certification structure, Cisco has detailed the necessary migration path. They even provide a handy &#8220;CCSP Certification Tool&#8221; that helps ensure that your investment in your certification is not wasted.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itcertificationnews.com/2010/10/29/cisco-straightens-out-security-certification-migration-path/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Complement Your Certifications with Vendor-Neutral Certs</title>
		<link>http://www.itcertificationnews.com/2010/10/15/complement-your-certifications-with-vendor-neutral-certs/</link>
		<comments>http://www.itcertificationnews.com/2010/10/15/complement-your-certifications-with-vendor-neutral-certs/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 12:30:19 +0000</pubDate>
		<dc:creator>Taylor Gillespie</dc:creator>
				<category><![CDATA[Certification]]></category>
		<category><![CDATA[IT]]></category>

		<guid isPermaLink="false">http://www.itcertificationnews.com/?p=148</guid>
		<description><![CDATA[IT departments naturally normalize the technology infrastructure to exclusively utilize a vendor&#8217;s product line. The certification you chose will reflect that choice. In a Microsoft shop, an employee will seek Microsoft certification. If the shop focuses primarily on Cisco installations, then, a Cisco certification will be sought. Clearly, choosing a vendor-specific certification will benefit you [...]]]></description>
			<content:encoded><![CDATA[<p>IT departments naturally normalize the technology infrastructure to exclusively utilize a vendor&#8217;s product line. The certification you chose will reflect that choice. In a Microsoft shop, an employee will seek Microsoft certification. If the shop focuses primarily on Cisco installations, then, a Cisco certification will be sought.<br />
<span id="more-148"></span><br />
Clearly, choosing a vendor-specific certification will benefit you when the business is aligned with that vendor&#8217;s product; however, vendor-neutral certifications, that focus on a technology and not a product will put you at a true advantage at your current position and in the future. And for those people looking for employment, a vendor-neutral certification keeps your skills broad enough to fit the technical needs of many industries.</p>
<p>In its <a href="http://www.nxtbook.com/nxtbooks/mediatec/cm1209/#/26/OnePage">outlook for 2010</a>, CertMag quoted Fred Weiller of Learning@Cisco as saying, it &#8220;&#8230;matters how quickly you can react to different situations. Fewer people with broader knowledge can act faster.&#8221; Choosing a vendor-neutral certification means that you have more reusable knowledge that is not relegated to a specific company&#8217;s product. Vendor-neutral certifications are based on industry and international standards that not only means that the knowledge can be leveraged in more scenarios, but also that the acquired knowledge does not age into obsolescence  as quickly as a vendor-specific certification. Vendor-provided certifications have also been known to evangelize their technology to the point of bias. Vendor-neutrality disabuses the certification process from certain marketing encroachments. You can search on <a href="http://www.gocertify.com/certfinder.php">GoCertify</a> for vendor-neutral certifications. Consider the various certifications from CompTIA, Brainbench, or Certification Partners.</p>
<p>An information technology professional should never merely constrain his or her certifications to main technology vendor that their employer or industry uses, but should complement vendor-specific certifications with ones that are vendor-neutral. Having both makes you a more flexible IT professional who is able to adapt to the changing market-place. With the recent and predicted growth of IT in many diverse industries, being more well-rounded is invaluable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itcertificationnews.com/2010/10/15/complement-your-certifications-with-vendor-neutral-certs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

