<?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"
	>

<channel>
	<title>SlashTop</title>
	<atom:link href="http://www.slashtop.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.slashtop.com</link>
	<description></description>
	<pubDate>Thu, 14 Aug 2008 22:12:53 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Top 10 Conversation Skills</title>
		<link>http://www.slashtop.com/top-10-conversation-skills.html</link>
		<comments>http://www.slashtop.com/top-10-conversation-skills.html#comments</comments>
		<pubDate>Thu, 14 Aug 2008 22:10:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[slashtop]]></category>

		<category><![CDATA[communication]]></category>

		<category><![CDATA[conversation]]></category>

		<category><![CDATA[feature]]></category>

		<category><![CDATA[people hacks]]></category>

		<category><![CDATA[personal relationships]]></category>

		<category><![CDATA[top]]></category>

		<guid isPermaLink="false">http://www.slashtop.com/?p=6</guid>
		<description><![CDATA[[via Lifehacker]

A whole lot more than just words passes between people who are talking, so a few simple conversational skills can help you recognize what&#8217;s really being said and help you lead the discussion your way. Learn how to read body language and facial expressions, de-code euphemisms, ask sensitive questions, criticize constructively, get what you [...]]]></description>
			<content:encoded><![CDATA[<p>[via <a class="ext" href="http://lifehacker.com/399895/top-10-conversation-hacks" target="_blank">Lifehacker</a>]</p>
<p><img src="http://www.lifehacker.com/assets/resources/2008/08/conversation1-header.png" alt="" width="494" height="250" /><br />
A whole lot more than just words passes between people who are talking, so a few simple conversational skills can help you recognize what&#8217;s really being said and help you lead the discussion your way. Learn how to read body language and facial expressions, de-code euphemisms, ask sensitive questions, criticize constructively, get what you want in negotiations, cut off chatterboxes, and more with our top 10 conversation hacks. <em>Photo by <a class="ext" href="http://www.flickr.com/photos/flissphil/45206496/" target="_blank">PhillipC</a>.<span id="more-6"></span></em></p>
<h5>10. <a class="ext" href="http://howto.wired.com/wiki/Feign_Sincerity" target="_blank">Feign sincerity</a> with eye contact and repetition.</h5>
<p>When you&#8217;re just not feelin&#8217; it but you&#8217;ve got to <em>look</em> like you are, the Wired How-to wiki suggests ways you can <a class="ext" href="http://howto.wired.com/wiki/Feign_Sincerity" target="_blank">feign sincerity</a>. In short, make eye contact, echo what the person is saying to you back to them, and nod in understanding (even if you&#8217;re not).</p>
<h5>9. End a conversation with body language.</h5>
<p><img src="http://www.lifehacker.com/assets/resources/2008/08/crossedarms.png" alt="crossedarms.png" width="178" height="168" align="right" />When that chatty co-worker just won&#8217;t go away, use some of manager Brendan Connelley&#8217;s techniques. My favorite is simply <a class="ext" href="http://www.slackermanager.com/2005/03/the_unspoken_la.html" target="_blank">standing up</a>(or crossing your arms, or speeding up to a &#8220;fast walk&#8221;) to indicate it&#8217;s time for that person to go and you&#8217;re busy. In more desperate situations, <a class="ext" href="http://lifehacker.com/software/life-hacks/how-to-shorten-a-conversation-at-work-107398.php" target="_blank">grab your cell phone and say</a>, &#8220;oh sorry, I&#8217;ve got to take this.&#8221; <em>Photo by <a class="ext" href="http://www.flickr.com/photos/siborg/237273139/" target="_blank">SiBorg</a>.</em></p>
<h5>8. Ask sensitive questions indirectly to skip awkwardness.</h5>
<p>When the info you need from someone is somewhat sensitive, check out<a class="ext" href="http://www.mediabistro.com/mbtoolbox/interviewing/some_people_can_be_so_touchy_19235.asp" target="_blank">journalist advice site MBToolbox&#8217;s suggestions</a> for asking delicate questions indirectly. Use the bluff (&#8221;the breakup must&#8217;ve been hard, huh?&#8221;) or blame others (&#8221;so has anyone asked about your prison time?&#8221;) or the indirect inquiry (&#8221;what year did you get divorced?&#8221;) to broach sensitive topics with tight-lipped folks with more ease and less awkward silence.</p>
<h5>7. Use silence to <a class="ext" href="http://lifehacker.com/software/communication/win-the-argument-by-not-saying-a-word-180813.php" target="_blank">win arguments</a> and <a class="ext" href="http://lifehacker.com/software/life-hacks/how-to-negotiate--037945.php" target="_blank">nail a negotiation</a>.</h5>
<p>Lawyers and price hagglers know that a little silence can go a long way. When the other party offers a price, opt for a long pause to indicate hesitation, which might prompt them to go lower. In the case of arguments, prolonged silence may frustrate the other person—but it&#8217;ll also make you look like the winner. (The evil winner, but the winner nonetheless.)</p>
<h5>6. Soften critiques with <a class="ext" href="http://n8tip.com/the-hamburger-method-of-constructive-criticism-works-for-vegetarians-too" target="_blank">the sandwich method</a>.</h5>
<p><img src="http://www.lifehacker.com/assets/resources/2008/08/crithamburger.png" alt="crithamburger.png" width="150" height="85" align="right" />When you need to critique someone—whether it&#8217;s a co-worker&#8217;s presentation or a spouse&#8217;s choice of outfit—start with a compliment, then mention your critique, then end on a positive note. The &#8220;<a class="ext" href="http://n8tip.com/the-hamburger-method-of-constructive-criticism-works-for-vegetarians-too" target="_blank">criticism hamburger</a>&#8221; gets the message across but softens the blow.</p>
<h5>5. <a class="ext" href="http://www.onlineorganizing.com/ExpertAdviceToolboxTips.asp?tipsheet=16" target="_blank">Say &#8220;no&#8221; gently</a>—or say <a class="ext" href="http://www.43folders.com/2006/01/06/modest-change-qualified-yes" target="_blank">&#8220;yes, but&#8230;.&#8221;</a></h5>
<p>When someone&#8217;s asking you to do something you just don&#8217;t want to—or don&#8217;t have the time—there are ways to say &#8220;no&#8221; that are polite and respectful and won&#8217;t burn any bridges. <a class="ext" href="http://www.onlineorganizing.com/ExpertAdviceToolboxTips.asp?tipsheet=16" target="_blank">OnlineOrganizing.com offers 20 &#8220;scripts&#8221;</a> for turning down a request, from &#8220;I&#8217;m in the middle of several projects right now&#8221; to &#8220;I&#8217;m not the right person for that job.&#8221; (I&#8217;ve found that suggesting someone else or offering a tip on the best way to proceed also helps a whole lot.) Master of attention-firewalling Merlin Mann says you can partially commit by <a class="ext" href="http://www.43folders.com/2006/01/06/modest-change-qualified-yes" target="_blank">qualifying your &#8220;yes&#8221; with specific boundaries</a> around what you&#8217;ll do (that also imply what you won&#8217;t).</p>
<p><img src="http://www.lifehacker.com/assets/resources/2008/08/asking.png" alt="asking.png" width="152" height="156" align="right" /></p>
<h5>4. <a class="ext" href="http://lifehacker.com/software/communication/geek-to-live--the-art-of-asking-191451.php" target="_blank">Ask questions well</a>.</h5>
<p>When you need information, the people that have it need some <em>reason</em> to help you. Whether you&#8217;re posting a question on a tech support forum or asking a colleague for help, here are some ways you can <a class="ext" href="http://lifehacker.com/software/communication/geek-to-live--the-art-of-asking-191451.php" target="_blank">master the art of asking</a> to get the answers you need.</p>
<h5>3. <a class="ext" href="http://lifehacker.com/software/let.s-touch-base/the-cubicle-warriors-guide-to-office-jargon-265894.php" target="_blank">De-code office jargon</a>.</h5>
<p><img src="http://www.lifehacker.com/assets/resources/2008/08/officejargon.png" alt="officejargon.png" width="213" height="165" align="right" />Client want to &#8220;touch base&#8221;? Manager want to &#8220;get on the same page&#8221;? Corporate euphemisms translate into pretty strong words, and you&#8217;ll navigate your career a whole lot better if you recognize the ones that mean &#8220;get off your ass.&#8221; Career adviser Penelope Trunk offers a non-nonsense <a class="ext" href="http://lifehacker.com/software/let.s-touch-base/the-cubicle-warriors-guide-to-office-jargon-265894.php" target="_blank">dictionary for parsing office-speak</a>.</p>
<h5>2. <a class="ext" href="http://hwebbjr.typepad.com/openloops/2006/09/how_to_deal_wit.html" target="_blank">&#8220;Pace and lead&#8221; an irate person.</a></h5>
<p><img src="http://www.lifehacker.com/assets/resources/2008/08/angryguy.png" alt="angryguy.png" width="178" height="175" align="right" />When you&#8217;re dealing with someone who is absolutely freaking out—like a parent flipping out at the playground—use school administrator Bert Webb&#8217;s &#8220;pace and lead&#8221; technique. Instead of remaining calm, <a class="ext" href="http://hwebbjr.typepad.com/openloops/2006/09/how_to_deal_wit.html" target="_blank">match the other party&#8217;s emotional intensity to show you&#8217;re empathetic, then lead the complainant to a calmer level of discourse</a>.</p>
<h5>1. <a class="ext" href="http://209.85.141.104/search?q=cache:EP4pd4GQUywJ:career-advice.monster.com/business-communication/Become-a-Human-Lie-Detector/home.aspx+Become+a+Human+Lie+Detector&amp;hl=en&amp;ct=clnk&amp;cd=2&amp;gl=us" target="_blank">Become a human lie detector.</a></h5>
<p>When you suspect someone isn&#8217;t telling the whole truth, tune into their voice, eyes, and body language. Monster.com&#8217;s Marty Nemko lists <a class="ext" href="http://209.85.141.104/search?q=cache:EP4pd4GQUywJ:career-advice.monster.com/business-communication/Become-a-Human-Lie-Detector/home.aspx+Become+a+Human+Lie+Detector&amp;hl=en&amp;ct=clnk&amp;cd=2&amp;gl=us" target="_blank">a few indicators that should trip your BS detector</a>, like a sudden change in voice pitch, rate of speech, or &#8220;ums&#8221; and &#8220;ahs,&#8221; a change in eye contact, and body position. Similarly, project manager Scott Berkun weighs in on <a class="ext" href="http://www.scottberkun.com/essays/53-how-to-detect-bullshit/" target="_blank">how to detect bullshit</a>.</p>
<p>Perhaps the greatest human behavior and communication hack is an awareness of <a class="ext" href="http://www.lifehack.org/articles/communication/four-rules-to-understand-what-makes-people-tick.html" target="_blank">what makes people tick</a>. If you can offer someone something they want, they&#8217;ll give you what you want in return.</p>
<p>What are your favorite conversational hacks and skills? Ever tried any of these techniques? Tell us about it in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.slashtop.com/top-10-conversation-skills.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Top 10 Concepts For Software Engineers</title>
		<link>http://www.slashtop.com/top-10-concepts-for-software-engineers.html</link>
		<comments>http://www.slashtop.com/top-10-concepts-for-software-engineers.html#comments</comments>
		<pubDate>Thu, 14 Aug 2008 21:52:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[slashtop]]></category>

		<category><![CDATA[software development]]></category>

		<category><![CDATA[software engineers]]></category>

		<guid isPermaLink="false">http://slashtop.viewerframe-mode.com/?p=3</guid>
		<description><![CDATA[The future of software development is about good craftsmen. With infrastructure like Amazon Web Services and an abundance of basic libraries, it no longer takes a village to build a good piece of software.
These days, a couple of engineers who know what they are doing can deliver complete systems. In this post, we discuss the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>The future of software development is about good craftsmen. With infrastructure like Amazon Web Services and an abundance of basic libraries, it no longer takes a village to build a good piece of software.</strong></p>
<p>These days, a couple of engineers who know what they are doing can deliver complete systems. In this post, we discuss the top 10 concepts software engineers should know to achieve that.</p>
<p>A successful software engineer knows and uses design patterns, actively refactors code, writes unit tests and religiously seeks simplicity. Beyond the basic methods, there are concepts that good software engineers know about. These transcend programming languages and projects - they are not design patterns, but rather broad areas that you need to be familiar with. The top 10 concepts are:<span id="more-3"></span></p>
<ol>
<li>Interfaces</li>
<li>Conventions and Templates</li>
<li>Layering</li>
<li>Algorithmic Complexity</li>
<li>Hashing</li>
<li>Caching</li>
<li>Concurrency</li>
<li>Cloud Computing</li>
<li>Security</li>
<li>Relational Databases</li>
</ol>
<h2>10. Relational Databases</h2>
<p><a href="http://oreilly.com/catalog/9780596008642/"><img src="http://www.readwriteweb.com/images/tech_books_july08/p1.jpg" alt="" width="150" align="right" /></a><a href="http://en.wikipedia.org/wiki/Relational_database">Relational Databases</a> have recently been getting a <a href="http://www.readwriteweb.com/archives/amazon_dynamo.php">bad name</a> because they cannot scale well to support massive web services. Yet this was one of the most fundamental achievements in computing that has carried us for two decades and will remain for a long time. Relational databases are excellent for order management systems, corporate databases and P&amp;L data.</p>
<p>At the core of the relational database is the concept of representing information in records. Each record is added to a table, which defines the type of information. The database offers a way to search the records using a query language, nowadays SQL. The database offers a way to correlate information from multiple tables.</p>
<p>The technique of data normalization is about correct ways of partitioning the data among tables to minimize data redundancy and maximize the speed of retrieval.</p>
<h2>9. Security</h2>
<p><a href="http://oreilly.com/catalog/9780596000455/"><img src="http://www.readwriteweb.com/images/tech_books_july08/p2.jpg" alt="" width="150" align="left" /></a>With the rise of hacking and data sensitivity, the <a href="http://en.wikipedia.org/wiki/Computer_security">security</a> is paramount. Security is a broad topic that includes authentication, authorization, and information transmission.</p>
<p>Authentication is about verifying user identity. A typical website prompts for a password. The authentication typically happens over SSL (secure socket layer), a way to transmit encrypted information over HTTP. Authorization is about permissions and is important in corporate systems, particularly those that define workflows. The recently developed <a href="http://oauth.net/">OAuth</a> protocol helps web services to enable users to open access to their private information. This is how Flickr permits access to individual photos or data sets.</p>
<p>Another security area is network protection. This concerns operating systems, configuration and monitoring to thwart hackers. Not only network is vulnerable, any piece of software is. Firefox browser, marketed as the most secure, has to patch the code continuously. To write secure code for your system requires understanding specifics and potential problems.</p>
<h2>8. Cloud Computing</h2>
<p><a href="http://oreilly.com/catalog/9780596515812/index.html"><img src="http://www.readwriteweb.com/images/tech_books_july08/p3.jpg" alt="" width="150" align="right" /></a>In our recent post Reaching For The Sky Through Compute Clouds we talked about how commodity <a href="http://en.wikipedia.org/wiki/Cloud_computing">cloud computing</a> is changing the way we deliver large-scale web applications. Massively parallel, cheap cloud computing reduces both costs and time to market.</p>
<p>Cloud computing grew out of parallel computing, a concept that many problems can be solved faster by running the computations in parallel.</p>
<p>After parallel algorithms came grid computing, which ran parallel computations on idle desktops. One of the first examples was SETI@home project out of Berkley, which used spare CPU cycles to crunch data coming from space. Grid computing is widely adopted by financial companies, which run massive risk calculations. The concept of under-utilized resources, together with the rise of J2EE platform, gave rise to the precursor of cloud computing: application server virtualization. The idea was to run applications on demand and change what is available depending on the time of day and user activity.</p>
<p>Today&#8217;s most vivid example of cloud computing is Amazon Web Services, a package available via API. Amazon&#8217;s offering includes a cloud service (EC2), a database for storing and serving large media files (S3), an indexing service (SimpleDB), and the Queue service (SQS). These first blocks already empower an unprecedented way of doing large-scale computing, and surely the best is yet to come.</p>
<h2>7. Concurrency</h2>
<p><a href="http://oreilly.com/catalog/9780596007829/"><img src="http://www.readwriteweb.com/images/tech_books_july08/p4.jpg" alt="" width="150" align="left" /></a><a href="http://en.wikipedia.org/wiki/Concurrency_(computer_science)">Concurrency</a> is one topic engineers notoriously get wrong, and understandibly so, because the brain does juggle many things at a time and in schools linear thinking is emphasized. Yet concurrency is important in any modern system.</p>
<p>Concurrency is about parallelism, but inside the application. Most modern languages have an in-built concept of concurrency; in Java, it&#8217;s implemented using Threads.</p>
<p>A classic concurrency example is the producer/consumer, where the producer generates data or tasks, and places it for worker threads to consume and execute. The complexity in concurrency programming stems from the fact Threads often needs to operate on the common data. Each Thread has its own sequence of execution, but accesses common data. One of the most sophisticated concurrency libraries has been developed by <a href="http://g.oswego.edu/">Doug Lea</a> and is now part of <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html">core Java</a>.</p>
<h2>6. Caching</h2>
<p><a href="http://oreilly.com/catalog/9781565925366/index.html"><img src="http://www.readwriteweb.com/images/tech_books_july08/p5.jpg" alt="" width="150" align="right" /></a>No modern web system runs without a cache, which is an in-memory store that holds a subset of information typically stored in the database. The need for cache comes from the fact that generating results based on the database is costly. For example, if you have a website that lists books that were popular last week, you&#8217;d want to compute this information once and place it into cache. User requests fetch data from the cache instead of hitting the database and regenerating the same information.</p>
<p>Caching comes with a cost. Only some subsets of information can be stored in memory. The most common data pruning strategy is to evict items that are least recently used (LRU). The prunning needs to be efficient, not to slow down the application.</p>
<p>A lot of modern web applications, including Facebook, rely on a distributed caching system called <a href="http://en.wikipedia.org/wiki/Memcached">Memcached</a>, developed by <a href="http://bradfitz.com/">Brad Firzpatrick</a> when working on LiveJournal. The idea was to create a caching system that utilises spare memory capacity on the network. Today, there are Memcached libraries for many popular languages, including Java and PHP.</p>
<h2>5. Hashing</h2>
<p><a href="http://www.amazon.com/Hashing-Algorithms-Lecture-Computer-Science/dp/3540575006?tag=httpwwwreadwr-20"><img src="http://www.readwriteweb.com/images/tech_books_july08/p7.jpg" alt="" width="150" align="left" /></a>The idea behind <a href="http://en.wikipedia.org/wiki/Hash_function">hashing</a> is fast access to data. If the data is stored sequentially, the time to find the item is proportional to the size of the list. For each element, a hash function calculates a number, which is used as an index into the table. Given a good hash function that uniformly spreads data along the table, the look-up time is constant. Perfecting hashing is difficult and to deal with that hashtable implementations support collision resolution.</p>
<p>Beyond the basic storage of data, hashes are also important in distributed systems. The so-called uniform hash is used to evenly allocate data among computers in a cloud database. A flavor of this technique is part of Google&#8217;s indexing service; each URL is hashed to particular computer. Memcached similarly uses a hash function.</p>
<p>Hash functions can be complex and sophisticated, but modern libraries have good defaults. The important thing is how hashes work and how to tune them for maximum performance benefit.</p>
<h2>4. Algorithmic Complexity</h2>
<p><a href="http://www.amazon.com/Structures-Algorithms-Addison-Wesley-Computer-Information/dp/0201000237?tag=httpwwwreadwr-20"><img src="http://www.readwriteweb.com/images/tech_books_july08/p6.jpg" alt="" width="150" align="right" /></a>There are just a handful of things engineers must know about algorithmic complexity. First is big O notation. If something takes O(n) it&#8217;s linear in the size of data. O(n^2) is quadratic. Using this notation, you should know that search through a list is O(n) and binary search (through a sorted list) is log(n). And sorting of n items would take n*log(n) time.</p>
<p>Your code should (almost) never have multiple nested loops (a loop inside a loop inside a loop). Most of the code written today should use Hashtables, simple lists and singly nested loops.</p>
<p>Due to abundance of excellent libraries, we are not as focused on efficiency these days. That&#8217;s fine, as tuning can happen later on, after you get the design right.</p>
<p>Elegant algorithms and performance is something you shouldn&#8217;t ignore. Writing compact and readable code helps ensure your algorithms are clean and simple.</p>
<h2>3. Layering</h2>
<p><a href="http://www.amazon.com/Large-Scale-Software-Addison-Wesley-Professional-Computing/dp/0201633620?tag=httpwwwreadwr-20"><img src="http://www.readwriteweb.com/images/tech_books_july08/p8.jpg" alt="" width="150" align="left" /></a>Layering is probably the simplest way to discuss software architecture. It first got serious attention when John Lakos published his <a href="http://simplewebs.com/?LargeScaleCppSoftwareDesign">book</a> about Large-scale C++ systems. Lakos argued that software consists of layers. The book introduced the concept of layering. The method is this. For each software component, count the number of other components it relies on. That is the metric of how complex the component is.</p>
<p>Lakos contended a good software follows the shape of a pyramid; i.e., there&#8217;s a progressive increase in the cummulative complexity of each component, but not in the immediate complexity. Put differently, a good software system consists of small, reusable building blocks, each carrying its own responsibility. In a good system, no cyclic dependencies between components are present and the whole system is a stack of layers of functionality, forming a pyramid.</p>
<p>Lakos&#8217;s work was a precursor to many developments in software engineering, most notably <a href="http://www.refactoring.com/">Refactoring</a>. The idea behind refactoring is continuously sculpting the software to ensure it&#8217;is structurally sound and flexible. Another major contribution was by <a href="http://www.objectmentor.com/omTeam/martin_r.html">Dr Robert Martin</a> from Object Mentor, who wrote about dependecies and acyclic architectures</p>
<p>Among tools that help engineers deal with system architecture are <a href="http://www.headwaysoftware.com/products/structure101/index.php">Structure 101</a> developed by Headway software, and <a href="http://www.alphaworks.ibm.com/tech/sa4j/">SA4J</a> developed by my former company, Information Laboratory, and now available from IBM.</p>
<h2>2. Conventions and Templates</h2>
<p><a href="http://www.amazon.com/Developing-Java-Beans-Robert-Englander/dp/1565922891?tag=httpwwwreadwr-20"><img src="http://www.readwriteweb.com/images/tech_books_july08/p9.jpg" alt="" width="150" align="right" /></a>Naming conventions and basic templates are the most overlooked software patterns, yet probably the most powerful.</p>
<p>Naming conventions enable software automation. For example, Java Beans framework is based on a simple naming convention for getters and setters. And canonical URLs in del.icio.us: http://del.icio.us/tag/software take the user to the page that has all items tagged <em>software</em>.</p>
<p>Many social software utilise naming conventions in a similar way. For example, if your user name is <em>johnsmith</em> then likely your avatar is <em>johnsmith.jpg</em> and your rss feed is <em>johnsmith.xml</em>.</p>
<p>Naming conventions are also used in testing, for example JUnit automatically recognizes all the methods in the class that start with prefix <em>test</em>.</p>
<p>The templates are not C++ or Java language constructs. We&#8217;re talking about template files that contain variables and then allow binding of objects, resolution, and rendering the result for the client.</p>
<p>Cold Fusion was one of the first to popularize templates for web applications. Java followed with JSPs, and recently Apache developed handy general purpose templating for Java called Velocity. PHP can be used as its own templating engine because it supports <em>eval</em> function (be careful with security). For XML programming it is standard to use XSL language to do templates.</p>
<p>From generation of HTML pages to sending standardized support emails, templates are an essential helper in any modern software system.</p>
<h2>1. Interfaces</h2>
<p><a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445?tag=httpwwwreadwr-20"><img src="http://www.readwriteweb.com/images/tech_books_july08/p10.jpg" alt="" width="150" align="left" /></a>The most important concept in software is interface. Any good software is a model of a real (or imaginary) system. Understanding how to model the problem in terms of correct and simple interfaces is crucial. Lots of systems suffer from the extremes: clumped, lengthy code with little abstractions, or an overly designed system with unnecessary complexity and unused code.</p>
<p>Among the many books, Agile Programming by Dr Robert Martin stands out because of focus on modeling correct interfaces.</p>
<p>In modeling, there are ways you can iterate towards the right solution. <em>Firstly</em>, never add methods that might be useful in the future. Be minimalist, get away with as little as possible. <em>Secondly</em>, don&#8217;t be afraid to recognize today that what you did yesterday wasn&#8217;t right. Be willing to change things. <em>Thirdly</em>, be patient and enjoy the process. Ultimately you will arrive at a system that feels right. Until then, keep iterating and don&#8217;t settle.</p>
<h2>Conclusion</h2>
<p>Modern software engineering is sophisticated and powerful, with decades of experience, millions of lines of supporting code and unprecidented access to cloud computing. Today, just a couple of smart people can create software that previously required the efforts of dozens of people. But a good craftsman still needs to know what tools to use, when and why.</p>
<p><em>In this post we discussed concepts that are indispensible for software engineers. And now tell us please what you would add to this list. Share with us what concepts you find indispensible in your daily software engineering journeys.</em></p>
<p><em>Image credit: <a href="http://www.cbtplanet.com">cbtplanet.com</a><br />
FROM:<a href="http://www.readwriteweb.com">readwriteweb.com</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.slashtop.com/top-10-concepts-for-software-engineers.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
