<?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>Coding Notes &#187; Review</title>
	<atom:link href="http://codingnotes.alephcipher.com/tag/review/feed/" rel="self" type="application/rss+xml" />
	<link>http://codingnotes.alephcipher.com</link>
	<description>Notes on Software Engineering, Development and other things Computer Science related.</description>
	<lastBuildDate>Sun, 11 Jul 2010 02:16:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Clean Code, A review</title>
		<link>http://codingnotes.alephcipher.com/blog/clean-code-a-review/</link>
		<comments>http://codingnotes.alephcipher.com/blog/clean-code-a-review/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 13:56:19 +0000</pubDate>
		<dc:creator>legit</dc:creator>
				<category><![CDATA[Book Reviews]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[Book Review]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[clean code]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Martin]]></category>
		<category><![CDATA[method]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Robert]]></category>
		<category><![CDATA[Robert C. Martin]]></category>
		<category><![CDATA[Robert Martin]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://codingnotes.alephcipher.com/?p=52</guid>
		<description><![CDATA[A few months ago I was working on some code that someone else had written.  I was trying to add a feature into a class and couldn&#8217;t seem to figure out how the class worked, and thus couldn&#8217;t figure out where or how to implement my addition.  After reviewing the code for a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://codingnotes.alephcipher.com/wp-content/uploads/2010/02/cleancode-225x300.jpg" alt="" width="225" height="300" class="alignleft size-medium wp-image-56">A few months ago I was working on some code that someone else had written.  I was trying to add a feature into a class and couldn&#8217;t seem to figure out how the class worked, and thus couldn&#8217;t figure out where or how to implement my addition.  After reviewing the code for a while I started to understand what was going on in the code and had a good enough understanding of it to then implement my new feature.  The problem was since I then understood what the code was doing and how it worked I also felt compelled to restructure it, perhaps in a more logical order, or just change it so that it would be easier to understand later on.  My problem was that after thinking about a new way to structure that class I wasn&#8217;t really certain about why that would be a better alternative, it just seemed better.  So after wondering why it seemed like a good idea I decided to do some research into how to write &#8220;better&#8221; code, and why &#8220;better&#8221; code is &#8220;better&#8221;.  My research ended pretty quickly as I remembered a few of my workmates talking about the book &#8220;Clean Code&#8221; a while back and how it discussed what makes &#8220;better&#8221; code.  So I went to my local bookstore, picked up a copy, and started reading it.</p>
<p><u>Clean Code: A Handbook of Agile Software Craftsmanship</u> was written by Robert C. Martin who has previously published books (which I have not read) on software engineering.  He opens up <u>Clean Code</u> with the classic &#8220;WTF&#8221; comic of software quality, you know, the one that describes good code as code that produces the least &#8220;WTF&#8217;s per minute&#8221;.  This is a really good example, since, that is exactly the kind of experience that got me to pick up the book.  Martins purpose for the book is to present ideas on how to clean up code, and reduce the &#8220;WTF&#8217;s/Minute&#8221;, and make it easier for others and you to understand and modify later on.  The first thing that Martin discusses is the problem of bad code, what it is, how it happens, and what the long term results are (maintenance, lots of maintenance).  He then quickly transitions into a discussion of what clean code is, he asked several senior and well recognized software engineers what clean code is, and then lists their responses to get things started.  After a brief overview of what clean code is, its off to the races, in depth analysis of clean code techniques and plenty of code examples to go along with it.</p>
<p>	By far this book is not a quick read, or at least it shouldn&#8217;t be, most of the code examples that Martin gives are given first in the difficult code to understand context and then cleaned up into a clean code example.  This method of actually showing the before and after code samples, if actually read and understood, gives immense meaning to the ideas that Martin gives on how to produce clean code.  That being said, it is because of these code samples that this book is a bit of a slower read.  Martin also encourages his readers to take the time to understand the code changes, warning that by not doing so you will miss out on the real understanding of why these code changes are occurring.  </p>
<p>	Martin begins the clean code concepts with fairly cosmetic issues, naming conventions, class and method sizes, comments, and formatting.  These issues are fairly light on the technical scale (with class and method sizes being a bit more difficult) however, Martin does a good job of showing the benefits of implementing these clean code concepts.  Then Martin goes into a discussion of more technical issues, error handling, objects and data structures, crosscutting concerns, system wide organization, testing, and even some discussion of concurrent programming.  All the while he discusses not only good principles but why they are good principles, and gives examples of how to apply them.  On some issues Martin admits controversy surrounding issues and clarifies why he came to his conclusion, as well as what others think.  Martin then finishes the book with three chapters which take entire classes from well know API&#8217;s and dissects them into better, cleaner code, using the principles previously discussed in the book.  These sections, as Martin states, are necessarily slower to read, given the large amounts of code and the complex changes.  However, by slowly reading through them and understanding the changes being made it helps to bring together all the concepts of the book and shows how large sections of code can be understood and cleaned.</p>
<p>	In the end of the book are several appendices, one is an in depth chapter long analysis of some concurrent clean code concepts, which an excellent discussion of what makes concurrent code difficult to debug and how to clean it up.  There is also an appendix that cross references the principles of clean coding with the code transformations made in the last three chapters of the book.  This appendix makes the book a great reference to keep on the shelf after reading it.</p>
<p>	Overall the book is incredibly helpful, especially to software engineers who are earlier in their career (such as I).  Held within the book are many useful techniques that senior engineers have taken a long time to hone, and if you read and absorb the concepts I think everyone can learn something from the book.  That being said, several of the concepts that Martin discusses are controversial.  His opinion that comments are unnecessary if the code is well organized and named, and in general clean, is definitely something that could be hard to swallow (depending on your stance with commenting).  Martin isn&#8217;t completely against comments though, just unnecessary comments (he still supports comments in API&#8217;s).  One of Martins main arguments against comments is that they simply produce one more thing that has to be maintained later on, a valid point.  But despite the few controversial ideas that Martin discusses, none of which does he force on you, the book is filled with many highly useful concepts and excellent descriptions of why they are good ideas.</p>
<p>	In the end I really only had one major complaint about the book, which is the subtitle &#8220;A Handbook of Agile Software Craftsmanship&#8221;.  It is my opinion that clean code can and should be produced in non-agile environments as well, which I don&#8217;t think Martin would disagree with.  Clean code is by far easier to modify than unclean code, and so its applicability may be higher within an agile environment, but it is certainly still applicable in non-agile environments (where the requirements are more static).  My favorite concept of the book is also in the title, the idea of software engineering as a craft, too much of the time it seems that software engineering is seen as &#8220;coding&#8221;.  The idea that software engineering is just hacking up something that does what your manager asked for is outdated and I think this book gives a nice introduction to software engineering as a true craft that should be treated with care and responsibility.  Instead of just writing code, we as software engineers should write code that is of high quality, something that is truly well-crafted.</p>
<p>	After reading the book my coding style has changed, I try to write clean code the first time, instead of just getting it to work.  I also have a better understanding of why certain coding changes are better than others, which is why I picked up the book in the first place, so it fulfilled my needs and then some.  I highly recommend it for anyone that is doing any programming.</p>
<p>	Next on the bookshelf is &#8220;Data Visualization: Principles and Practice&#8221; by Alexandru C. Telea.</p>
]]></content:encoded>
			<wfw:commentRss>http://codingnotes.alephcipher.com/blog/clean-code-a-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Magical Maze, A Review</title>
		<link>http://codingnotes.alephcipher.com/blog/the-magical-maze-a-review/</link>
		<comments>http://codingnotes.alephcipher.com/blog/the-magical-maze-a-review/#comments</comments>
		<pubDate>Thu, 21 May 2009 16:50:05 +0000</pubDate>
		<dc:creator>legit</dc:creator>
				<category><![CDATA[Book Reviews]]></category>
		<category><![CDATA[Mathematics]]></category>
		<category><![CDATA[Applied]]></category>
		<category><![CDATA[Applied Math]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[Book Review]]></category>
		<category><![CDATA[Ian]]></category>
		<category><![CDATA[Ian Stewart]]></category>
		<category><![CDATA[Magical]]></category>
		<category><![CDATA[Magical Maze]]></category>
		<category><![CDATA[Math]]></category>
		<category><![CDATA[Maze]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Stewart]]></category>

		<guid isPermaLink="false">http://codingnotes.alephcipher.com/?p=36</guid>
		<description><![CDATA[
I was recently visiting my library&#8217;s math section looking for some interesting recreational math reading.  I enjoy exploring math because, while some people may not think so, I find that the same problem solving skills that go into math also seem to be utilized in programming, especially in algorithm development.  With a math [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-35" style="padding:10px;" title="the_magical_maze" src="http://codingnotes.alephcipher.com/wp-content/uploads/2009/05/the_magical_maze.jpg" alt="the_magical_maze" width="218" height="326" /></p>
<p style="margin-bottom: 0in; font-weight: normal;">I was recently visiting my library&#8217;s math section looking for some interesting recreational math reading.  I enjoy exploring math because, while some people may not think so, I find that the same problem solving skills that go into math also seem to be utilized in programming, especially in algorithm development.  With a math minor my idea of recreational math reading may be a little different from those that aren&#8217;t directly involved with math however, Ian Stewart&#8217;s book <span style="text-decoration: underline;">The Magical Maze</span><span style="text-decoration: none;"> sounded interesting and intriguing.  I had seen Ian Stewart&#8217;s name previously while perusing my local bookstores however, I had never read any of his books.  The reason that I chose </span><span style="text-decoration: underline;">The Magical Maze</span><span style="text-decoration: none;"> over the other books in my library was because of its subtitle &#8220;Seeing the World Through Mathematical Eyes&#8221; this intrigued me and upon reading Stewart&#8217;s introduction to the book I understood what he meant. </span></p>
<p style="margin-bottom: 0in; font-weight: normal;">
<p style="margin-bottom: 0in; font-weight: normal;"><span style="text-decoration: none;">Stewart wrote the book as another form of his lectures at the Royal Institution&#8217;s 1997 Christmas Lectures for young people.  Naturally, and as Stewart points out, the book takes a different form than the lectures and includes more material than he covered in his lectures.  That being said Stewart&#8217;s intent, as the subtitle states, was to present the book as an overview of how to see various aspects of the world from a more mathematical standpoint.  Furthermore the book is one of mathematical recreation and was not meant to be inapproachable by those that aren&#8217;t in the field of mathematics.  This same recreation must have been apparent in his lectures at the Christmas Lectures as they are not a math specific lecture series.  Ultimately, it seems, that Stewart set out to present the reader with a way to approach the world with math and not to require the reader to understand too much complex math ahead of time.</span></p>
<p><span style="text-decoration: none;">I found the book to be a refreshingly light and yet detailed exploration of various more complex and applied mathematical subjects.  Stewart structures the book as if the reader is wandering through a maze and thus he creates a very enjoyable story like appeal throughout the book.   This helps to create  a constant longing to get to the next junction of this magical maze.  Stewart explores the mathematics that go into many of the magicians math tricks (or number guessing games) and the history and math behind calendars and flowers in his first chapter.  The ease of use of the book is apparent from this very first chapter as several of its topics deal with complex modulus operations, and yet Stewart approaches them from a beginners standpoint, explaining the modulus, while continuing to keep it intriguing for the non-beginner.  This ease of use and intriguing nature of the first chapter is constant throughout the book as Stewart explores further topics.</span></p>
<p><span style="text-decoration: none;">After the first chapter it becomes apparent that each junction of the maze is to discuss a different topic.  Stewart approaches almost all of the topics from a very applied manner allowing the reader to understand where they would encounter this particular topic in their everyday world.  The book talks briefly on many topics including decision graphs and indirectly finite automata, symmetry, probability and statistics, exposing some of its trickery, Stewart even touches on chaos theory. </span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="text-decoration: none;">Something that delighted the computer scientist in me was the way in which Stewart approached Turing machines, while I already understood the topic Stewart approached it from a perspective that every one could understand.  By first approaching very simple logical paradoxes and proofs Stewart quickly and understandably moved into a universal way to solve any problem, the Turing machine.  Stewart even went into the topic of the halting problem and the logical paradox that creates the unsolvable nature of the problem. </span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="text-decoration: none;">Stewart goes into the topic of symmetry in quite a bit of detail as well and yet by exploring it from a more applicable standpoint he allows for anyone to approach its complexity.  Employing mirrors and animal movements Stewart describes how symmetry can be both three dimensional and four dimensional (time being the fourth dimension).  Throughout the book Stewart uses other people&#8217;s work as well as his own to apply the math in an approachable way to the real world.  For instance he uses others work with train sets to explain the existence of a universal Turing machine, by structuring a train set in a certain way one can simulate a computer and create a train network that exhibits the traits of the halting problem! Oh the joy a train set designer could have with that!</span></p>
<p style="margin-bottom: 0in; font-weight: normal;"><span style="text-decoration: none;">Overall I found the book to be incredibly refreshing in that it covered so many topics and did so with application as its main focus, leaving the reader longing to understand more of how the world is mathematically inclined.  Stewart very much accomplished his goal of providing an excellent applicable mathematical overview in an approachable by anyone format.  I would highly suggest any computer scientist read it because Stewart is a mathematician thus he approaches many of the same topics that computer science students approach and yet he does so from a different perspective than the computer science classroom&#8217;s perspective.  This different perspective allows for a broadening of understanding in the various topics that </span><span style="text-decoration: underline;">The Magical Maze</span><span style="text-decoration: none;"> touches on.  For the non computer science reader, I would still suggest the book if only to discover why sunflowers have spiraling seeds, the book allows anyone to open their eyes to the incredible mathematical universe that we live in, and provides a general appreciation for its mathematical complexity.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://codingnotes.alephcipher.com/blog/the-magical-maze-a-review/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Managing Humans, A Review</title>
		<link>http://codingnotes.alephcipher.com/blog/managing-humans-a-review/</link>
		<comments>http://codingnotes.alephcipher.com/blog/managing-humans-a-review/#comments</comments>
		<pubDate>Tue, 22 Jan 2008 02:46:28 +0000</pubDate>
		<dc:creator>legit</dc:creator>
				<category><![CDATA[Book Reviews]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://codingnotes.wordpress.com/2008/01/22/managing-humans-a-review/</guid>
		<description><![CDATA[ Michael Lopp is a middle manager of software engineering teams, having worked at various companies in the Silicon Valley including startups from the age of the internet boom his experience is truly varied. He has worked from the standpoint of the software developer, QA engineer and naturally the software engineering manager. This broad experience [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><img src="http://codingnotes.alephcipher.com/wp-content/uploads/2009/01/managing_humans.jpg" border="2" alt="" hspace="15" width="218" height="325" align="left" /> Michael Lopp is a middle manager of software engineering teams, having worked at various companies in the Silicon Valley including startups from the age of the internet boom his experience is truly varied.<span> </span>He has worked from the standpoint of the software developer, QA engineer and naturally the software engineering manager.<span> </span>This broad experience in work is very apparent and adds greatly to his book, which in the first chapter he jokingly titles &#8220;Don&#8217;t Be A Prick&#8221;.<span> </span>The book is described by him as &#8220;insights, ideas, and opinions about how to manage people&#8221; and his emphasis on people is spread throughout the book.<span> </span>In fact the key to what this management book is truly about is Lopp&#8217;s emphasis on people.</p>
<p class="MsoNormal"><span> </span>Managing Humans is a collection of Lopp&#8217;s essays from his blog, edited and categorized into book form, which gives it a very loose and varied feel.<span> </span>Chapter topics range widely from dealing with freak outs in the office to the importance of CVS comments.<span> </span>Due to this widely varied nature of the book the actual content and impact of the book is far greater than just a management book.<span> </span>In fact, management in this book is taken less from the standpoint of corporate policies and politics and more from the perspective of how to dissect the various types of people and how to utilize those people effectively, and more importantly how to understand and communicate with those people.</p>
<p class="MsoNormal"><span> </span>In one chapter Lopp describes the various types of attendees at meetings, how they interact, and their meeting personality.<span> </span>In another chapter Lopp talks about the different people that are important in the interviewing process, and while he advocates that an entire team should be involved he discusses the different bellwethers that add the most valuable feedback on the potential employee.<span> </span>In a broader since, Lopp talks throughout the book (with a pecific chapter for each) about the two rare coders termed &#8220;the fez&#8221;, and &#8220;the free electron&#8221;, but as mentioned earlier he talks not only about how to utilize them, but also how to make them better (more in the case of &#8220;the fez&#8221; than the &#8220;free electron&#8221;).</p>
<p class="MsoNormal"><span> </span>However, while Lopp talks about the different people that may be managed and how to utilize them he also talks about a varying degree of other topics, as well as somewhat how to be managed.<span> </span>He talks about how to resign gracefully, how to pass the phone screen, how he does the interview process, and how to pass the 90-day interview. He also talks about how to keep 1.0 software development projects alive from a management perspective.<span> </span>The most valuable aspect of the book, I believe, is Lopps explanation of how to deal with different people in a productive way, instead of a contradicting way.<span> </span>Lopp even talks about how to deal with the different styles of managers and how to communicate effectively to them, while still maintaining your sanity.</p>
<p class="MsoNormal"><span> </span>Overall, this book is more a dissection of the common Software Development process within a company and how to work in this environment than it is a management book.<span> </span>However, it would do a lot of managers some good to read this book in order to understand what, and more importantly who they are managing.<span> </span>On top of this issue Lopp’s discussions of being managed adds an important aspect that the common software engineer<span> </span>can benefit from.<span> </span>I would suggest this book as default reading material for anyone that is in the technology industry, as well as anyone that wants a semi-comical look at the politics of the standard office place.</p>
<p>- Legit</p>
]]></content:encoded>
			<wfw:commentRss>http://codingnotes.alephcipher.com/blog/managing-humans-a-review/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
