<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-4966398442077757509</atom:id><lastBuildDate>Sat, 05 Oct 2024 03:18:08 +0000</lastBuildDate><category>jobs</category><category>programming</category><category>Clean Code</category><category>Coupling</category><category>TDD</category><category>Testing</category><category>about me</category><category>college</category><category>economics</category><category>first post</category><category>food</category><category>human factors</category><category>interviews</category><category>off topic</category><category>piracy</category><category>project management</category><category>projects</category><category>software</category><category>technology</category><title>CS Majors Unite!</title><description>A blog about Programming and the implications of emerging technology on the human race</description><link>http://csmajorsunite.blogspot.com/</link><managingEditor>noreply@blogger.com (Dave Ackerman)</managingEditor><generator>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-4218642321406586737</guid><pubDate>Thu, 14 Jan 2010 02:59:00 +0000</pubDate><atom:updated>2010-01-13T20:59:13.421-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Clean Code</category><category domain="http://www.blogger.com/atom/ns#">Coupling</category><category domain="http://www.blogger.com/atom/ns#">TDD</category><category domain="http://www.blogger.com/atom/ns#">Testing</category><title>Your Tests Are Making Your Code Inflexible</title><description>&lt;style&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.java{&lt;br /&gt;	font-family:consolas, &quot;Courier New&quot;, courier, monospace;&lt;br /&gt;	font-weight:bold;&lt;br /&gt;}&lt;/style&gt;  &lt;h3&gt;A &lt;i&gt;Very&lt;/i&gt; Naive Approach&lt;/h3&gt;  &lt;br /&gt;Most of us will agree that making code &lt;i&gt;flexible&lt;/i&gt; is a primary motivation in writing Object Oriented code. Otherwise, we would write our app as one giant class, with one giant method, and call it &amp;quot;efficient&#39;. We would copy-and-paste everywhere, because we don&#39;t want to introduce any &amp;quot;complexity&amp;quot; by adding &lt;i&gt;methods. &lt;/i&gt;We certainly wouldn&#39;t want to create whole new Classes... then we would have to look in more than one file to figure out how the system works! That is &lt;i&gt;way&lt;/i&gt; too prone to error!   &lt;h3&gt;Coming back to Reality&lt;/h3&gt;  &lt;p&gt;No, of course we don&#39;t have that mindset. Our code should be split up into as many classes is necessary for each of them to be responsible for &lt;i&gt;one thing. &lt;/i&gt;Each class should, in turn, have the appropriate number of private methods to make each of them trivial to understand in isolation. And the public API of the class should be small and cohesive, so as to keep it from having to &lt;i&gt;change &lt;/i&gt;for more than one reason.&lt;/p&gt;  &lt;p&gt;And tests! We need lots of tests! We need to make sure that each of our classes is tested at a sufficiently low level to be able to test every feature and expectation. This is where we run into a problem.&lt;/p&gt;  &lt;p&gt;What is wrong with this code? (Borrowed from JUnit and &lt;a href=&quot;http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882&quot; target=&quot;_blank&quot;&gt;Clean Code by Robert Martin&lt;/a&gt;):&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style=&quot;border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto&quot; title=&quot;assertEquals(&amp;quot;expected:&amp;lt;b[a]&amp;gt; but was:&amp;lt;b[c]&amp;gt;&amp;quot;, failure);&quot; border=&quot;0&quot; alt=&quot;assertEquals(&amp;quot;expected:&amp;lt;b[a]&amp;gt; but was:&amp;lt;b[c]&amp;gt;&amp;quot;, failure);&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1DbsMSpjwiT6oSAudY1QdtsDPR8Cf4aykKN3NqBVWbzjd3S_ImxR2I2-ErVBdFCg_GNKI2V3-qIEqkkqRuEtecmFviqyMQNFlRnbC23lRTYL2ta-0vZOd2geahz8qjOlBLyDBdVCY0KE/?imgmax=800&quot; width=&quot;652&quot; height=&quot;452&quot; /&gt; &lt;/p&gt;  &lt;p&gt;I have only shown a few tests for brevity, but there are many more like it in the book (pg. 283 of Clean Code). Uncle Bob comments on the code, &amp;quot;I could explain it further, but the test cases do a better job. So take a look at Listing 15-1 and you will understand the requirements of this module in depth. While you are at it, critique the structure of the tests. Could they be simpler or more obvious?&amp;quot;&lt;/p&gt;  &lt;h4&gt;Simple and/or more obvious, does not a good test make.&lt;/h4&gt;  &lt;p&gt;I agree that the tests are very simple and obvious. They convey what they are trying to test very clearly. However, I have a problem with these tests. They are not very DRY. In fact, on the scale of DRYness, they are unbelievably WET with duplication.&lt;/p&gt;  &lt;p&gt;Those who know what &lt;a href=&quot;http://en.wikipedia.org/wiki/Don&#39;t_repeat_yourself&quot; target=&quot;_blank&quot;&gt;DRY&lt;/a&gt; means, know what I am talking about already. Basically, there is a ton of duplication in this code. I am about 87.3% sure that Kent Beck (or whoever wrote these tests) used CTRL+C, CTRL+V more than a few times when writing 50 unit tests that look almost identical. It seems that most people think this is okay, because they’re tests. That you should be writing similar code for similar tests in the name of readability. However, I think if you find yourself writing the same code over and over again, you have a problem with focus. Each test should &lt;em&gt;focus &lt;/em&gt;on a feature.&amp;#160; You are probably testing the same thing in every one of those tests you copy/pasted.&amp;#160; &lt;/p&gt;  &lt;h4&gt;Just like you don’t want one giant test that tests everything under the sun, you don’t want tons of tests that all test the same thing when they shouldn’t care about that thing!&lt;/h4&gt;  &lt;p&gt;In this example, that something is the format of the return string. &lt;/p&gt;  &lt;h3&gt;Why Won’t the Maintenance Team Invite you to Lunch? Because you Copy/Paste Test Data&lt;/h3&gt;  &lt;p&gt;So how does this make it inflexible?&amp;#160; What if we wanted to change the &amp;quot;&amp;lt;&amp;quot; and &amp;quot;&amp;gt;&amp;quot; surrounding the discrepancy into &amp;quot;[&amp;quot; and &amp;quot;]&amp;quot;. Well, we would do a simple search and replace in our IDE, you say. What if the substitution isn&#39;t so easy? What if we wanted to change the first &amp;quot;...&amp;quot; into &amp;quot;--&amp;quot;, but not the second set? We would have to manually go into each test and modify the relevant portions.&amp;#160; What about adding an extra parameter to the constructor that these tests don’t care about?&lt;/p&gt;  &lt;p&gt;You have to make a change to every one of your tests.&amp;#160; You have to muck around with the code until it passes again, and now you have more nulls, or even worse, more “magic” numbers, in your tests.&lt;/p&gt;  &lt;h3&gt;One Solution&lt;/h3&gt;  &lt;p&gt;You don’t have to sacrifice readability to soak up all that wetness in your code.&amp;#160; Lets take one step forward here, shown in the next example (# of tests cases reduced for clarity):&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style=&quot;border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto&quot; title=&quot;assertFailureHasProperMessage(&amp;quot;[b]&amp;quot;,&amp;quot;[c]&amp;quot;,failure);&quot; border=&quot;0&quot; alt=&quot;assertFailureHasProperMessage(&amp;quot;[b]&amp;quot;,&amp;quot;[c]&amp;quot;,failure);&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglj21J5peKFzAEmqB809DgDGxWIP5Ab824d4tnWlTDPhWKWvRKOxnn1OZpeyi-RTilAlk77cRzb1WdwbwqRdNVr7OGUeDYL6FxKtpSYE6zh636JHtEM5cMDytJ3B_asSI7AY_xOrrMew4/?imgmax=800&quot; width=&quot;746&quot; height=&quot;339&quot; /&gt;&lt;/p&gt;  &lt;p&gt;So we’ve split out each assert into a method. One big win here, is that the formatting of the message, which is clearly &lt;em&gt;not &lt;/em&gt;what we are trying to test, is tucked away in the method.&amp;#160; The string still &lt;em&gt;gets tested &lt;/em&gt;just as before, but now we don’t see it in each and every test – which now more clearly shows the bits we are really trying to assert.&amp;#160; Unfortunately, passing in multiple parameters gets hard to read really fast, and we want to be able to use our tests as documentation.&amp;#160; Also, wtf is the first number in the constructor supposed to do?&amp;#160; You have to look at about a dozen test cases to figure out its purpose.&lt;/p&gt;  &lt;h3&gt;Domain Specific Languages&lt;/h3&gt;  &lt;p&gt;A really good way to make your code self-documenting is to have lots of small, descriptive function and class names.&amp;#160; Well, since our tests &lt;em&gt;ARE &lt;/em&gt;our documentation (at least to other developers on the team, and your future self), we should follow this pattern even more.&amp;#160; instead of:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0oFCrmikKIQAsqEhxV-DPIj-9-IPr0dZaTf43Hn7mk_xR0F5cuU9eW9A_X-jY558JaXZAD1Yd_RQJbHO6YWOuCYWMdXuYEkCISqq3ViUTOGjwPNl7PgWVfI2JQ8tIQ4l1e_KU6HyBg6U/?imgmax=800&quot; width=&quot;535&quot; height=&quot;20&quot; /&gt; &lt;/p&gt;  &lt;p&gt;We could have something like:&lt;/p&gt;  &lt;p&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifJWhcBQTi5fpSVkrpQxvPfUVoN7-dqsjfgK3frLAbJIVSIERQgK69VT7L0MkyPEsKFgbdW6ntXCvNDlzXnU0GAltUEFFhDwWgCzEeG2zQk3KSKuBTzji_yP_7HfS53Uig8U6v-NEc9Hc/?imgmax=800&quot; width=&quot;403&quot; height=&quot;22&quot; /&gt; &lt;/p&gt;  &lt;p&gt;This allows us to concisely state, in &lt;em&gt;almost &lt;/em&gt;regular language, what we want the test scenario to be.&amp;#160; It is a mini-language, called a DSL, or &lt;a href=&quot;http://en.wikipedia.org/wiki/Domain-specific_language&quot; target=&quot;_blank&quot;&gt;Domain Specific Language&lt;/a&gt;.&amp;#160; Notice, also, how the “&lt;span class=&quot;java&quot;&gt;.compact(null);&lt;/span&gt;” section is missing.&amp;#160; That is because we don’t care about it.&amp;#160; We aren’t using the message passed in, so the builder object inserts the &lt;span class=&quot;java&quot;&gt;null&lt;/span&gt; for us.&amp;#160; If we don’t care about it, we don’t want it showing up in our test.&lt;/p&gt;  &lt;p&gt;Another benefit we get from this approach, is that we aren’t &lt;em&gt;directly &lt;/em&gt;manipulating any of the code; we are calling functions on an object, which eventually manipulates the code.&amp;#160; In my opinion, this separates two concerns that rarely get separated: the semantics of the test, and the syntax of the test.&amp;#160; If we change the constructor to take more data, all we need to do is add another function to the interface, and all the tests will again pass (unless there is a bug, of course).&amp;#160; &lt;/p&gt;  &lt;p&gt;You see, we shouldn’t &lt;em&gt;care &lt;/em&gt;how many parameters the constructor needs in the tests, we just want to input some data, and make sure the output was correct.&amp;#160; We want to work at a higher level.&amp;#160; We are &lt;em&gt;manipulating &lt;/em&gt;at a low level, but &lt;em&gt;describing &lt;/em&gt;at a high level.&amp;#160; We do this in our production code as programmers, why not in tests?&lt;/p&gt;  &lt;p&gt;Now, we can make our test harness handle &lt;span class=&quot;java&quot;&gt;null&lt;/span&gt; information for us, and handle the passing of intermediate data like the “&lt;span class=&quot;java&quot;&gt;String failure&lt;/span&gt;” in the first example.&amp;#160; Below is the entire Test class with the harness.&amp;#160; Obviously, it looks large as there are only two tests shown here, but the harness is mostly a one-time cost, so its effort in proportion to the benefit gets smaller over time.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style=&quot;border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7D7esmwCFWV9WUlnbksss861DRgO_3T3MznH_AdxonpaZpSziXGwKrH9VmpUScLuR5P-_Ykq4X0ExuiJy3GNKkXGR2wFndXmNds5cnJ5LnDQvTS5RPGcFM3mO_QUbfs66jULuXePIYm0/?imgmax=800&quot; width=&quot;792&quot; height=&quot;773&quot; /&gt;&lt;/p&gt;  &lt;h3&gt;What Have We Done Here?&lt;/h3&gt;  &lt;p&gt;Essentially, we have created our own domain “language” for testing.&amp;#160; It isn’t flexible enough to describe &lt;em&gt;all &lt;/em&gt;code; just this class or set of classes.&amp;#160; We can also reuse frameworks like this in other tests.&amp;#160; Generally this pattern is called the “Builder” because of its property of returning itself from a setter method.&amp;#160; This allows us to chain methods together and “build” an object with very little boilerplate code.&amp;#160; It is generally used with &lt;a href=&quot;http://en.wikipedia.org/wiki/Fluent_interface&quot; target=&quot;_blank&quot;&gt;fluent interfaces&lt;/a&gt; and Domain Specific Languages because it allows for a more &lt;em&gt;language-like&lt;/em&gt; syntax directly in the code.&amp;#160; &lt;/p&gt;  &lt;p&gt;This type of testing may not work for every case, but I would seriously consider it on your next project, and try it out for yourself.&amp;#160; DSLs are somewhat hard to write well, so practice makes perfect (and I am new at this as well, so I have a lot to learn).&amp;#160; You may find out interesting properties of how your code is structured by writing a DSL for it.&amp;#160; &lt;/p&gt;  &lt;p&gt;Disagree? Leave a comment.&amp;#160; A colleague I respect “whole-heartedly disagreed” with me on this, so I am open to a little discussion :).&lt;/p&gt;  </description><link>http://csmajorsunite.blogspot.com/2010/01/your-tests-are-making-your-code.html</link><author>noreply@blogger.com (Dave Ackerman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1DbsMSpjwiT6oSAudY1QdtsDPR8Cf4aykKN3NqBVWbzjd3S_ImxR2I2-ErVBdFCg_GNKI2V3-qIEqkkqRuEtecmFviqyMQNFlRnbC23lRTYL2ta-0vZOd2geahz8qjOlBLyDBdVCY0KE/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-6763490386369540984</guid><pubDate>Sat, 18 Jul 2009 19:30:00 +0000</pubDate><atom:updated>2009-07-18T14:30:18.228-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">economics</category><category domain="http://www.blogger.com/atom/ns#">piracy</category><category domain="http://www.blogger.com/atom/ns#">software</category><category domain="http://www.blogger.com/atom/ns#">technology</category><title>“Theft”</title><description>&lt;p&gt;What is theft, really?&amp;#160; From my perspective, theft is removing an item from a person or organization without their consent.&amp;#160; It does not necessarily dictate that the thief &lt;em&gt;keep &lt;/em&gt;that item, or what happens to it after it has left the protection of the original owner.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLLQQaSnO4s0ZLuG6Ntbcj4ydvxXLORxZfGErkz_4dck3YeNlVqAYQOPEN2lO6KkcQDr7BmYKqkIeg4pA2v_HZwK1V_LS661nuaXxTAoslTcvbpR77CafqpiWcsB0S_DFqkA_t_TaBNKU/s1600-h/image5.png&quot;&gt;&lt;img style=&quot;border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto&quot; title=&quot;He drinks your screwdriver.  He drinks it up.&quot; border=&quot;0&quot; alt=&quot;He drinks your screwdriver.  He drinks it up.&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg15FmRKEbRUNlcBmQ9b82-G-b3NeYCHDPdAXkrE7eTd0nU4d6s7hyphenhyphen12xGooxVQCEAgkm_QKSYnWFvR8hzb9feqKX907OyYVTbPWSpw9rbGi4orEuWtK5X0WBKjJU2WWS2XPYvn8TvcZK0/?imgmax=800&quot; width=&quot;400&quot; height=&quot;417&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Why am I trying to define this term?&amp;#160; I am trying to figure out why it seems many people object to stealing software, and why others seem to think it is okay.&amp;#160; I am also trying to figure out which side I am on (although my &lt;em&gt;natural &lt;/em&gt;instinct is to justify my past actions by saying it’s okay).&amp;#160; At the moment, I am thinking that it’s the business model and economics of software that eventually need to change, and not the morals of all the download-happy, wAreZ surfing, iso-kiddies.&lt;/p&gt;  &lt;h1&gt;&lt;/h1&gt;  &lt;h3&gt;Analyzing a few scenarios&lt;/h3&gt;  &lt;p&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px&quot; title=&quot;But all I have are ogg vorbis files! :(&quot; border=&quot;0&quot; alt=&quot;But all I have are ogg vorbis files! :(&quot; align=&quot;right&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgczlkxDXO78nsaB3TWqAJAjERS3hWdCaP53oGRYmGuOv6ESi3ee4l0jeMCvZO45nP_1dcvMJnFXwNN-Gr67RY2eH-qFHVCcDK3WUlRCw3uMqA7WDAzTYpFIMuyNvKzXNzgsOjAcv7LmdI/?imgmax=800&quot; width=&quot;438&quot; height=&quot;265&quot; /&gt; &lt;/p&gt;  &lt;p&gt;So what happens when an item gets stolen in the real world? Well one person physically removes that item from the store or person, and then either keeps it for themselves, or sells it.&amp;#160; The person who originally either created or bought that item, now doesn’t have it.&amp;#160; That original owner has lost some quality of life simply because another person decided they wanted it.&lt;/p&gt;  &lt;p&gt;In contrast, what happens when a piece of software gets “stolen”?&amp;#160; Digitally, each bit is accessed and copied from one medium to another, creating an exact duplicate.&amp;#160; That duplicate is then usually made accessible to the internet, which then allows other computers to access and copy each bit for the purpose of storage on their own machines.&lt;/p&gt;  &lt;p&gt;In the first case (“real world” stealing) – after the “act” is carried out, there is still one item in existence.&amp;#160; That item is now in the hands of the thief and not the rightful owner.&amp;#160; In the second case, there are now a total of 3 copies.&amp;#160; One, still unchanged, in the owner’s possession, one in the “thief’s” hands, and one for the person who downloaded from the internet.&lt;/p&gt;  &lt;p&gt;Copying software in this way doesn’t harm the original person’s quality of life.&amp;#160; In the case that the original owner &lt;em&gt;created &lt;/em&gt;that item, it will cause them to have a harder time selling it if the copies start getting widespread visibility.&lt;/p&gt;  &lt;p&gt;&lt;img style=&quot;border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; title=&quot;OSX Leopard on Windows 7&quot; border=&quot;0&quot; alt=&quot;OSX Leopard on Windows 7&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihoN9AsA-2nvmZ3R72L6WfM25H6AuapalUDK082VL_L9l7dOhUGc9Q4mJxOlLIuKB_uq78fClR14nu5WXzB2WBcYlzrE_bRxWGQVEcXH9XsV1lxjkad9bUe3t_eFQw1GUqYY8X8P3ZLJI/?imgmax=800&quot; width=&quot;750&quot; height=&quot;422&quot; /&gt; &lt;/p&gt;  &lt;h3&gt;Motivation&lt;/h3&gt;  &lt;p&gt;Getting paid is clearly the main problem people have with copying.&amp;#160; The copier doesn’t (usually) pay the creator for that software.&amp;#160; Yet, the creator obviously spent many hours out of their life creating it.&amp;#160; They deserve some sort of compensation for their contribution to mankind.&amp;#160; If this person got no compensation for the work he/she did, there would be no real motivation to do it.&amp;#160; It would make more economic sense to work at a company and get paid a steady salary.&lt;/p&gt;  &lt;p&gt;I will assume that last paragraph’s statement is agreed upon because anyone against it would be proposing that we start being communists.&amp;#160; We need money to motivate us in a capitalist society!&lt;/p&gt;  &lt;p&gt;Without the creator making the software/music/video/etc for the masses, nobody would be able to copy and enjoy it.&amp;#160; However, copying is so easy in this digital age, that I believe it is unreasonable to simply expect people to just &lt;em&gt;not copy &lt;/em&gt;this stuff. &lt;/p&gt;  &lt;h3&gt;“Real World” Analogy&lt;/h3&gt;  &lt;p&gt;What is the “Real World” analogy to software piracy?&amp;#160; I think it would be like someone inventing an “Atom Copying” machine.&amp;#160; If someone could go into a store, scan a product, and then leave with an exact replica of that item, it would be comparable.&amp;#160; Now keep in mind, that each scan costs the user some small price, but they don’t pay the creator this price.&amp;#160; Obviously the store keepers would start getting angry that people keep walking into their store, scanning items, and walking away with a copy!&lt;/p&gt;  &lt;p&gt;Are laws really the best solution, though?&amp;#160; If this “atom-copier” happened, I think we might need to re-think commerce.&amp;#160; If we can copy &lt;em&gt;anything&lt;/em&gt;, couldn’t we then copy things like food, and then ship it to 3rd world countries?&amp;#160; We could copy the dollar bills in our pockets to make more money!&amp;#160; The whole economy would collapse!&amp;#160; I suppose the new form of currency would be the raw materials the machine needed to create these things.&lt;/p&gt;  &lt;p&gt;Although software hasn’t caused the &lt;em&gt;whole world economy &lt;/em&gt;to collapse, it certainly seems to have shaken up the music/movie industry.&amp;#160; They have relied upon the fact that people can’t get their hands on &lt;em&gt;unlimited &lt;/em&gt;listening of their music or watching of their movies without paying them.&amp;#160; I think this is a shaky assumption – and has clearly been broken down by the invention of bit torrent.&lt;/p&gt;  &lt;h3&gt;What to Do?&lt;/h3&gt;  &lt;p&gt;So what do we do about the current situation?&amp;#160; The people who get media from the creators would like for them to make money.&amp;#160; They just don’t want to (or can’t) pay them themselves.&amp;#160; My current thinking is that we need to start creating things that cannot be copied.&amp;#160; We need to create &lt;em&gt;value &lt;/em&gt;for people that they can’t do for free (like copying bits).&amp;#160; Now that we cannot charge for copying bits, we need to think of another way to create that value.&amp;#160; The fact that copying bits is so easy sets off a signal in my brain that it no longer has monetary value.&amp;#160; It’s the “idea” that counts in this case.&amp;#160; Obviously, I am getting at “intellectual property” now, but I am not sure it should work the same way it does currently.&lt;/p&gt;  &lt;p&gt;Should there be some sort of government setup for people creating ideas?&amp;#160; Sounds like a law to me.&amp;#160; I really would like to avoid arbitrary laws to keep society functioning – it always seems to fight the natural flow of humanity and eventually becomes more hassle than it’s worth.&lt;/p&gt;  &lt;p&gt;Maybe we just need to set up web services that force the user to pay.&amp;#160; Just simply arranging 1’s and 0’s in a particular order is not really enough to make money.&amp;#160; If we have a web-based application, we can require a log-in, and then most of the code is on the server anyway – so there is no way that anyone can copy that asset.&amp;#160; The downside to this is forcing a hosting fee for your entire user-base.&amp;#160; That sucks!&amp;#160; Now you have an O(N) cost complexity just because you don’t want people stealing your software!&lt;/p&gt;  &lt;p&gt;However, if you think about it, regular products have an O(N) complexity for their users as well.&amp;#160; They need to physically &lt;em&gt;produce &lt;/em&gt;each product they create and then physically &lt;em&gt;ship &lt;/em&gt;each of those items to the proper location to be sold.&amp;#160; The lack of this process is partially why we like software, but for now it might be required to enforce morals on the seething masses.&lt;/p&gt;  &lt;p&gt;So anyway, I have thoroughly confused myself about the subject, so I would like some feedback if anyone is so inclined.&amp;#160; What do you think we could do to take advantage of our awesome technology of file-sharing, while also paying the developers that make awesome software?&lt;/p&gt;  </description><link>http://csmajorsunite.blogspot.com/2009/07/theft.html</link><author>noreply@blogger.com (Dave Ackerman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg15FmRKEbRUNlcBmQ9b82-G-b3NeYCHDPdAXkrE7eTd0nU4d6s7hyphenhyphen12xGooxVQCEAgkm_QKSYnWFvR8hzb9feqKX907OyYVTbPWSpw9rbGi4orEuWtK5X0WBKjJU2WWS2XPYvn8TvcZK0/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-365118374989934225</guid><pubDate>Thu, 02 Apr 2009 04:08:00 +0000</pubDate><atom:updated>2009-04-01T23:44:00.235-05:00</atom:updated><title>Working at Union Pacific</title><description>&lt;h3&gt;Recent Happenings&lt;/h3&gt;&lt;br /&gt;So anyway, it turns out I&#39;m now in Omaha working at Union Pacific.  It&#39;s a railroad company, and its actually pretty cool.  I am working on a very crucial product for the business (it&#39;s called PTC or &lt;a href=&quot;http://www.uprr.com/newsinfo/media_kit/ptc/index.shtml&quot;&gt;Positive Train Control&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;I am being challenged every day here, so this is a plus.  I know that I absolutely need to keep learning at a break-neck pace if I want to move up in the world.  Especially with technology companies.  I bought a book called &quot;Agile Software Development&quot; by Uncle Bob (Robert Martin) to better understand the &quot;theoretical&quot; best way to decouple my designs and utilize TDD.  I also discovered a book called &quot;Clean Code&quot; by the same on our e-learning website.  Since my current team here isn&#39;t enforcing any particular software development practice, I am on my own to learn one.  This is not because I think that there is one particular method that will fix everything, but because I think it is important to at least know one or two of them so you can start to learn WHY they are there in the first place.  Then you can eventually become comfortable enough to roll your own &quot;methodology&quot; and proclaim yourself the lead evangelist if you like ;)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Procrastination and laziness&lt;/h3&gt;&lt;br /&gt;From my previous post, I was brainstorming ideas on how to maximize my learning while away from work.  This didn&#39;t turn out as well as I hoped.  I sort-of hinted at what I was suspecting about my job - was that I would be tired and not really in the mood for programming afterwards.  Well, its not because I hate my job, but more because there are lots of time-wastey things to do at home that keep me from getting things done.  Here are my personal evils:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Google Reader&lt;/li&gt;&lt;li&gt;Gmail&lt;/li&gt;&lt;li&gt;Hulu&lt;/li&gt;&lt;li&gt;Netflix&lt;/li&gt;&lt;li&gt;Peggle (yeah...)&lt;/li&gt;&lt;li&gt;50 Cent: Blood on the sand (Ok, I can explain. My friend had me rent it for multiplayer! I swear!)&lt;/li&gt;&lt;li&gt;Intoxication (it doesn&#39;t take much alcohol to inhibit the &quot;i want to think&quot; part of the brain)&lt;/li&gt;&lt;li&gt;Working out/ Losing weight&lt;/li&gt;&lt;/ul&gt;The last one there isn&#39;t really a time-waster, but it sure is a will-power draining task.  I have been at that since I started at UP and it really does take some motivation to keep going.  After that, I feel like I deserve a break - not more stress and coding.&lt;br /&gt;&lt;br /&gt;Even with these setbacks, I have managed to get something started.  I am working with Django trying to create a website about goals.  Right now they are fitness and diet goals, but I would like to generalize them to any type of goal or aspiration.  I think it is useful to be able to track this stuff online in a social atmosphere.  However, the pace has been painfully slow since it takes so long to &quot;wind up&quot; my brain for coding - and my brain usually isn&#39;t rested from work until about 11pm - an hour after I should already be in bed.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Reality Setting In&lt;/h3&gt;&lt;br /&gt;One thing that has changed in me since my last post, is all the excitement I had for the future.  This isn&#39;t to say I am not excited about it, but that I see how many challenges and hurdles I face.  I initially thought that since I&#39;m a self-proclaimed &quot;smart person&quot;, that I would figure out a way to succeed.  That may still be true, but the more I learn about starting a business and what is already out there, the more I realize that ideas are a dime-a-dozen. This means that the startups that succeed are the ones who make it through thick-and-thin AND can adapt to the market.  Not necessarily the ones who have a good idea to begin with.&lt;br /&gt;&lt;br /&gt;Even if they have that, there is no guarantee however. There might be some minor thing you did to make your users wary of your product and nobody buys.  Maybe nobody ever told you that you aren&#39;t supposed to do X so you did it and lost all your money.  Life is unfair like that, and only the people who take those setbacks as challenges and fight back are the ones who succeed.&lt;br /&gt;&lt;br /&gt;Take Mark Zuckerberg.  He is incredibly successful with Facebook.  He is a multi-millionaire and owns one of the coolest companies you can imagine!  If he wasn&#39;t so nerdy I&#39;m sure he would get all the chicks!  But Mark is in a big dilemma right now - how to monetize?  They could go under just like anybody else.  How would he feel if Facebook could never really keep revenue &gt; expense and eventually died out?  It is possible, and Zuckerberg knows it.  That must be terrifying.  &lt;br /&gt;&lt;br /&gt;I guess my point is that there is no time in life where you just go BOOYAH! and you now have money, women, friends, assets, and free time and not a care in the world.  Well maybe &lt;a href=&quot;http://www.thefourhourworkweek.com&quot;&gt;Tim Ferriss&lt;/a&gt; does, but nobody else.&lt;br /&gt;&lt;br /&gt;I still think that I will get the most out of life by trying the entrepreneurial route.  However, I now realize that my &quot;happiness&quot; will not likely be some stress-free life.  It will be filled with problems that need solving, and it will be up to me whether I sink or swim.  I hope I swim, but that is yet to be seen.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;So what&#39;s your point again?&lt;/h3&gt;&lt;br /&gt;Everyone wants to have a good life.  But it&#39;s not easy.  My level of happiness is probably comparable to what it will be as an entrepreneur in the future.  I will just have higher standards  for certain things, and maybe lower standards for others.  The only thing preventing from me being happy &lt;i&gt;right now&lt;/i&gt; is the thought that I should be doing more to get better.  So really, I am trying to say everything is &lt;b&gt;relative&lt;/b&gt;.  Make the most of it while it&#39;s happening and stop worrying so much about the future (like I do)!</description><link>http://csmajorsunite.blogspot.com/2009/04/working-at-union-pacific.html</link><author>noreply@blogger.com (Dave Ackerman)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-8738855512590455456</guid><pubDate>Thu, 04 Dec 2008 16:59:00 +0000</pubDate><atom:updated>2008-12-04T11:33:51.898-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">college</category><category domain="http://www.blogger.com/atom/ns#">jobs</category><category domain="http://www.blogger.com/atom/ns#">projects</category><title>Crunch time declared over (almost)</title><description>Well, I just turned in my last assignment of my college career.  Of course, I still have two exams next week, but i&#39;m not worried.  I am looking at a few different companies for after I graduate, and thats really all they care about.&lt;br /&gt;Anyway, I am trying to figure out what I should do in my free time once I start working.  I am a firm believer in continuous improvement and learning, and it needs to happen as much outside work as in.  I will either be working on Java or .NET technologies at work, so I will have that covered.  But what to do in my free time? Here are some ideas:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Graphics technologies like OpenGL or DirectX&lt;ul&gt;&lt;li&gt;3D screensavers&lt;/li&gt;  &lt;li&gt;Study pixel shaders&lt;/li&gt;&lt;li&gt;Novel 3D networked application (3D browser that doesn&#39;t suck?)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Web applications&lt;ul&gt;&lt;li&gt;Website that tracks progress toward a goal on projects&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Web comic&lt;ul&gt;&lt;li&gt;Maybe not a good one, but a good experience nonetheless&lt;/li&gt;&lt;li&gt;Programming webcomic?  Should research existing ones first&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Deviant Art stuff&lt;ul&gt;&lt;li&gt;Learn about art more professionally - get used to Photoshop CS4&lt;/li&gt;&lt;li&gt;ACTUALLY READ the design books I bought a while back&lt;/li&gt; &lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Web business&lt;ul&gt;&lt;li&gt;Create a Super-low cost business, and fail at it (well &lt;i&gt;try&lt;/i&gt; not to)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Those are just some Ideas floating around in my head at the moment, but its so exciting to be choosing between these things.  The world is my oyster!  I just hope I don&#39;t hate my job so much that I am exhausted by the end of the day consistently.  Oh well.  More ideas to come (and maybe even a comic!)</description><link>http://csmajorsunite.blogspot.com/2008/12/crunch-time-declared-over-almost.html</link><author>noreply@blogger.com (Dave Ackerman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-8550352676706491822</guid><pubDate>Mon, 24 Nov 2008 14:39:00 +0000</pubDate><atom:updated>2008-11-24T09:42:21.854-06:00</atom:updated><title>Omaha Trip</title><description>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtLPO5yvRB71oZ_8hOyBquyGZY97jOGyG4cdJzIWq-onY7u_dYYf1gjmEuvb813T-rXBpf0ESwpvMRjFHFcoxQgt50OW7JmGsYnBQFrAhpIYpUnv6tYuDd4gfxtnttBDkjzQi3b_T3Y5s/s1600-h/11-20-08_1716-719755.jpg&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtLPO5yvRB71oZ_8hOyBquyGZY97jOGyG4cdJzIWq-onY7u_dYYf1gjmEuvb813T-rXBpf0ESwpvMRjFHFcoxQgt50OW7JmGsYnBQFrAhpIYpUnv6tYuDd4gfxtnttBDkjzQi3b_T3Y5s/s320/11-20-08_1716-719755.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5272233931129495186&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;  The view from Omaha.  Who knew that Omaha was such a big place!  My trip to Union Pacific was great and I got to meet some really interesting people.  I was a little worried at first, because the first thing I heard when I got off the plane was light country music, and then I saw a guy in a cowboy hat..&lt;br /&gt;&lt;br /&gt;  Once we got into the city, however, it was just like Chicago or Boston.  Tall buildings, people always on the go, tons of restaurants and things to do.  There really is nothing bad about Omaha.  Housing prices are fairly low, gas is cheaper, people are nice, AND you can always have something to do.  We will see if Union Pacific gives me an offer; it will be a tough decision.</description><link>http://csmajorsunite.blogspot.com/2008/11/view-of-omaha-from-hotel-alltel-has-no.html</link><author>noreply@blogger.com (Dave Ackerman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtLPO5yvRB71oZ_8hOyBquyGZY97jOGyG4cdJzIWq-onY7u_dYYf1gjmEuvb813T-rXBpf0ESwpvMRjFHFcoxQgt50OW7JmGsYnBQFrAhpIYpUnv6tYuDd4gfxtnttBDkjzQi3b_T3Y5s/s72-c/11-20-08_1716-719755.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-7172506603563419827</guid><pubDate>Mon, 24 Nov 2008 14:39:00 +0000</pubDate><atom:updated>2008-11-24T09:23:22.477-06:00</atom:updated><title>Expensive dinner</title><description>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheYBl_pQsRoInpY3_6T6S7qHqS25mpKJx8qZ2nDahcJPzSmohpny0Yo1Y-LzhVH8q5t561keC8gXTtuCg2j6YLhFnPsTI6-DxkTwosazw3sgYiU9vZSUpAothyEnXwDy_VRFkSIvtGfTg/s1600-h/11-18-08_1932-775829.jpg&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheYBl_pQsRoInpY3_6T6S7qHqS25mpKJx8qZ2nDahcJPzSmohpny0Yo1Y-LzhVH8q5t561keC8gXTtuCg2j6YLhFnPsTI6-DxkTwosazw3sgYiU9vZSUpAothyEnXwDy_VRFkSIvtGfTg/s320/11-18-08_1932-775829.jpg&quot;  border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5272233742943437874&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Surf n Turf room service in Boston</description><link>http://csmajorsunite.blogspot.com/2008/11/surf-and-turf-room-service-in-boston.html</link><author>noreply@blogger.com (Dave Ackerman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheYBl_pQsRoInpY3_6T6S7qHqS25mpKJx8qZ2nDahcJPzSmohpny0Yo1Y-LzhVH8q5t561keC8gXTtuCg2j6YLhFnPsTI6-DxkTwosazw3sgYiU9vZSUpAothyEnXwDy_VRFkSIvtGfTg/s72-c/11-18-08_1932-775829.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-3859585375689215705</guid><pubDate>Mon, 17 Nov 2008 15:38:00 +0000</pubDate><atom:updated>2008-11-17T09:43:35.795-06:00</atom:updated><title>Raytheon trip (Hyatt Hotel)</title><description>&lt;div&gt;    I&#39;m in Boston, MA right now getting ready to go on my trip to IADC (Integrated Air Defense Center) in Andover, MA.  Sounds fun! I don&#39;t have any interviews today; just touring Raytheon and then a formal dinner at 6pm.  Tomorrow I will go through a series of interviews and then be done around 1:30pm.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Check out the video below (this is the view just outside the hotel lobby).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;400&#39; height=&#39;326&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dwKTaGWEprz6xJi5qZyYgIx90UNvtMBdrI1v12lbWgqrwfMsR3R9oWhJFQz21Em1QqXKJZRZ1eb5ZgBRpmUpw&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;</description><link>http://csmajorsunite.blogspot.com/2008/11/fwd.html</link><author>noreply@blogger.com (Dave Ackerman)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-171241408560427022</guid><pubDate>Tue, 04 Nov 2008 17:13:00 +0000</pubDate><atom:updated>2008-11-04T18:15:39.812-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">food</category><category domain="http://www.blogger.com/atom/ns#">off topic</category><title>Panda Express ... :(</title><description>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvsNvcGEXzLd5u8rrFYeRv_hCBKTixDCH9a1adnaJ9_t3L5zRBM-c9ZFOQDV5tJWyd9ysnhnhqHgLSHaSjwFjvcFaBHO_DHP_I5IO8v4ngyXOtAYkMe8ouz5HL-dMPgpI6uhYpQDc0Q14/s1600-h/11-04-08_1211-769475.jpg&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvsNvcGEXzLd5u8rrFYeRv_hCBKTixDCH9a1adnaJ9_t3L5zRBM-c9ZFOQDV5tJWyd9ysnhnhqHgLSHaSjwFjvcFaBHO_DHP_I5IO8v4ngyXOtAYkMe8ouz5HL-dMPgpI6uhYpQDc0Q14/s320/11-04-08_1211-769475.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5264858396225672514&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Since when does panda express put advertisements in their fortune cookies??</description><link>http://csmajorsunite.blogspot.com/2008/11/since-when-does-panda-express-put.html</link><author>noreply@blogger.com (Dave Ackerman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvsNvcGEXzLd5u8rrFYeRv_hCBKTixDCH9a1adnaJ9_t3L5zRBM-c9ZFOQDV5tJWyd9ysnhnhqHgLSHaSjwFjvcFaBHO_DHP_I5IO8v4ngyXOtAYkMe8ouz5HL-dMPgpI6uhYpQDc0Q14/s72-c/11-04-08_1211-769475.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-745967126287198339</guid><pubDate>Sun, 02 Nov 2008 23:20:00 +0000</pubDate><atom:updated>2008-11-03T23:38:20.030-06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">human factors</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">project management</category><title>On Procrastination</title><description>In my last semester here at Michigan State, I&#39;m working on a web development project with three other classmates.  We are supposed to be ready to present our beta demo tomorrow for class, but since we have 9 groups and only 2 groups can present on a given day, it takes 4.5 class periods to get through them all.  The professor doesn&#39;t post the dates that each group is going to present until the day before, in the hopes that everyone will be &quot;done&quot; with their demos even if their presentation isn&#39;t due for a week.  Little did our professor know, we still had lots of work to do!  We just found out that our project doesn&#39;t need to be presented until next Wednesday, and my teammates just sent a flurry of emails around to the effect of &quot;whew! now we have plenty of time!&quot;  Something tells me we will be in the same boat next Tuesday night trying to scramble to get our beta demo working...&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitDgxbpxAj1w4pdKXaioq4VWdhrENLooSziqkqyUFa6UDkUD56XybU0Fb3dANCkIfNTmTpOPmGAjPQJJMY5ZNVMeCor9hPYiJ5dyYl8_fOAx4EOc_32_aKifcBlCQ1q2ZVB3EiD0PW_iw/s320/procrastination.jpg&quot; style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 270px;&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5264210658817583490&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;Procrastination is a huge problem.  &lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;I have noticed time and again that when you give someone a task that they don&#39;t want to do, they wait until the last possible second to do it.  I mean, I would understand if you ask someone under 18 to do a task and they try to get around it.  They play by high school rules, and that&#39;s normal.  You have no control, and you&#39;re constantly resisting so you can play video games.  But what about when you are in college?  When yo u start your career?  It still happens!&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;I also know this to be the case with even professional developers.  This is why agile seems to work better than waterfall.  If you give them a task and then have daily status meetings, then they HAVE to get something done or they look like slackers.  If you give them the requirements and then come back in 6 months, they will most likely not be done.  &lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt; &lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;I think I partially alluded to the lesson i&#39;m trying to get at here.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;You need to set small, achievable, frequent goals for yourself and others.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Usually the only time that someone is going to say they aren&#39;t busy is if they actively have &lt;span style=&quot;font-style: italic;&quot;&gt;nothing &lt;/span&gt;to do.  This means they have not only written off work-things to do, but they have also depleted their list of time-wasters and want you to entertain them.  They are &lt;span style=&quot;font-style: italic;&quot;&gt;bored.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Therefore, the point is to be truly really &lt;span style=&quot;font-style: italic;&quot;&gt;busy &lt;/span&gt;when you are working - and work hard.  And then when you have times of free time, you can really enjoy it.  Obviously, you need to take breaks, but those 3-hour long StumbleUpon journeys are cutting into your productivity.  It&#39;s way too easy to get distracted (especially when online, which is &lt;span style=&quot;font-style: italic;&quot;&gt;always&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;I would suggest a good way to do this is to actually keep a list of things to do.  I have a simple Google Desktop app as a to-do list.  This isn&#39;t perfect because I can&#39;t see it across multiple computers.  However, it works for me.  I can see how much I &lt;span style=&quot;font-style: italic;&quot;&gt;really &lt;/span&gt;have to do, and plan accordingly (plus it really feels good to click that little checkbox and make the image shoot to the bottom :).&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt; &lt;div&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXaW5jkpaEhocAywQiJUm1mZtPoCBHDSCBE7eM5p8ldso9LOFYW1FWnGLNeBVBK3cNCgdg43K8JCFHqhuRpEe7PafdebNmS6Di-JZ1yy558nswN0mXi3k5-KancRU87SHqR_JppoWahHw/s1600-h/todo.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 375px; height: 127px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXaW5jkpaEhocAywQiJUm1mZtPoCBHDSCBE7eM5p8ldso9LOFYW1FWnGLNeBVBK3cNCgdg43K8JCFHqhuRpEe7PafdebNmS6Di-JZ1yy558nswN0mXi3k5-KancRU87SHqR_JppoWahHw/s400/todo.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5264671102400153266&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;  &lt;/div&gt;&lt;br /&gt;How do you keep from entering an infinite loop of Google Reader, Twitter/Friendfeed, email?&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://csmajorsunite.blogspot.com/2008/11/on-procrastination.html</link><author>noreply@blogger.com (Dave Ackerman)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitDgxbpxAj1w4pdKXaioq4VWdhrENLooSziqkqyUFa6UDkUD56XybU0Fb3dANCkIfNTmTpOPmGAjPQJJMY5ZNVMeCor9hPYiJ5dyYl8_fOAx4EOc_32_aKifcBlCQ1q2ZVB3EiD0PW_iw/s72-c/procrastination.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-786110413524135979</guid><pubDate>Fri, 31 Oct 2008 17:32:00 +0000</pubDate><atom:updated>2008-10-31T13:41:52.278-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">interviews</category><category domain="http://www.blogger.com/atom/ns#">jobs</category><category domain="http://www.blogger.com/atom/ns#">programming</category><title>Interviewing Lessons</title><description>This semester has been brutal.  I have 17 credits right now at Michigan State University (say what you will, its an awesome school) - and am planning on graduating in December.  Why so many credits, you ask?&lt;div&gt;  Well, back when I sent you my first post, I was working.  A LOT.  We are talking full time in Ann Arbor working for Toyota.  It was actually a very interesting experience, but I rarely took any classes during the 16 months I worked there.  I came into college with 18 credits (from Community College classes I took during high school and NOT the &quot;accellerated&quot; program I fortunately dropped out of, but that is another blog entry), but after taking basically 16 months &quot;off&quot;, here I am working hard to graduate in 4.5 years.  Anyway, looks like this blog is titled &quot;Interviewing Lessons&quot;, so I guess I should talk about that.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;The point&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  Since this is my last term, I have been interviewing like crazy.  I probably should have been doing this during the Summer, but it is so much easier to do it after MSU&#39;s &quot;Career Gallery&quot; in early October.  Tons of companies show up and each are receptive to my kinds of jobs.  However, I have never really had a &quot;serious&quot; interview (except maybe for my NSA interview, but thats another blog entry ;) ), so its an understatement to say I learned a few things.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  I have always dreaded interviews, or any sort of social construct that forces me to &quot;prove myself&quot;, because I tended to freeze up and forget everything that makes me a valuable person.  Since I learned a couple common tips about interviewing, I have changed from a person terrified of getting asked a tough question, to someone who looks forward to interviews to see if they can give me one that actually takes more than a minute to figure out. If you feel the same way as I did, then there is definitely one thing you can do to change that and take control of your emotions.&lt;/div&gt;&lt;div&gt;  The thing to do, if you are planning to be a Software Developer, is to get the book &lt;a href=&quot;http://www.amazon.com/Programming-Interviews-Exposed-Secrets-Programmer/dp/047012167X/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1225475178&amp;amp;sr=8-1&quot;&gt;Programming Interviews Exposed: Secrets to Landing Your Next Job&lt;/a&gt;.  It has been key to me getting up to speed with the types of questions to expect.  Generally the questions are really easy if you are at your computer with Google and a compiler at your fingertips.  However, when you are being choked by your tie, sweating profusely, and asked to jump through hoops by writing code on a whiteboard, it helps to be confident.  &lt;/div&gt;&lt;div&gt;  I made the mistake of not doing any sort of &quot;brushing up&quot; of my skills or even looking up common questions.  Just because you are a senior in college and have developed large systems in multiple programming languages, doesn&#39;t mean that you know how to do a simple command line program they ask you.  If you paid attention in class, really all you need to do is look through the book during lunch and try and solve the problems before reading the solution.  It will awaken that &quot;algorithms&quot; part of your brain that you may have let atrophy while developing &quot;real world&quot; systems.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;An example&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  One question I found particularly interesting was a light switch problem.  You have three light switches connected to three light bulbs in another room.  The problem is to determine which light bulbs go to which switches.  You can&#39;t see the light bulbs from where you stand, and you only get to go into the room with the light bulbs once to check.  The first thing you try to do is flip one on and then check.  Well, now you know one light bulb and switch, but what about the other two?  You are screwed.  Obviously this isn&#39;t the solution, so if you&#39;d like, go ahead and try to figure it out before going to the next paragraph.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Got it yet?...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  The solution given is that you are supposed to flip two lights on and then &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;wait for 5 minutes.&lt;/span&gt;  After waiting, turn one of the lights off and go into the room.  Now, you can determine which is which by one light bulb that is on, one that is off and &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;warm, &lt;/span&gt;and one that is off and cold.  Tricky, huh?&lt;/div&gt;&lt;div&gt;  The point is not necessarily to solve the problem in an interview, but to show the thought process you go through.  Talking through your problems helps you not only to show the interviewer that you are smart and analytical, but actually helps you to solve it.  So just sitting there and telling the interviewer that it can&#39;t be done is &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;bad.  &lt;/span&gt;All you have to do is realize there is a trick to it and break down your assumptions.  Doing this alone should at least help you make &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;some &lt;/span&gt;progress and show the interviewer that you are able and willing to methodically work at a problem even if it is tough (or seemingly impossible).  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;Conclusion&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;  This really helped me to think in the right way for my interviews, and since I got this book,  I have been &quot;knocking them out of the park&quot;, so to say.  I hope this little bit of advice keeps you from dreading your interviews, and makes them exciting challenges that can always be solved if you get all those mental cylinders running.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://csmajorsunite.blogspot.com/2008/10/interviewing-lessons.html</link><author>noreply@blogger.com (Dave Ackerman)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4966398442077757509.post-718366511479934346</guid><pubDate>Mon, 21 Apr 2008 21:02:00 +0000</pubDate><atom:updated>2008-10-31T12:01:15.275-05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">about me</category><category domain="http://www.blogger.com/atom/ns#">first post</category><title>first post!!!!11</title><description>Yeah, first post on myself.  I feel proud.  Well, anyway, this is going to be a blog about my experiences in Computer Science and Software Engineering.  Maybe a little like Coding Horror.  You can never have enough opinions, right?  I have ideas and opinions bursting from me like a baby alien hatching from its human shell, so I will be logging them here.  Feel free to join in on the discussion by comments or email.</description><link>http://csmajorsunite.blogspot.com/2008/04/first-post11.html</link><author>noreply@blogger.com (Dave Ackerman)</author><thr:total>0</thr:total></item></channel></rss>