March 18, 2011

Set Up and Get to Know Your New Mac

Set Up and Get to Know Your New Mac: "If this is your first time with a Mac, we've got you covered with switching guides, a look at the latest version of Mac OS X (Snow Leopard), and a look at what's to come in Mac OS X Lion this Summer.

* Hack Attack: A guide for switching to a Mac:
If you're new to the Mac platform—fresh off the Windows world—this guide to switching explains how to make sense out of all the differences between Windows and OS X, highlighting how to accomplish the same things in OS X you're already completely familiar with doing in Windows.
* Snow Leopard's Four Best Improvements (for Civilians):
Most of Mac OS 10.6's changes are deep in its underpinnings for developers to put to good use. But what do the rest of us get out of Snow Leopard? Modest, but nice, improvements to the everyday Mac workflow.
* What to Expect in Mac OS X 10.7 Lion - Apple didn't reveal too much about the next iteration of their operating system, but here's a sneak peak at what you can expect when Mac OS X Lion is released in Summer of 2011."

January 30, 2011

Top 5 Java Gurus you should know ....

There are many who have contributed and shaped Java to make it as the most influential programming language of choice. Java software as a platform  has grown leaps and bounds. There are more than 12 proprietary and 25+ opensource implementations of Java Virtural Machine. Not to forget the 100+ JVM languages including the high profile ones Clojure, Groovy, JRuby, Scala, AspectJ etc

Below the top 5 gurus or technologist (in my view) who have made the max impact on the growth of Java.
Note: Again, this is my take. I know everybody who works on Java has made an impact and will keep making an impact on the language :).

5. Kent Beck
     @kentbeck , Blog 
 
     Kent Beck - creator of XP, TDD and JUnit.  TDD in Java world is impossible without JUnit. Without TDD, there is simply no good code. All credit goes to Kent.

4. Joshua Bloch
    @joshbloch

    The best book on Java till date is Effective Java ,written by Joshua. Its a must read for every Java   programmer and arguably the best book. He also created Java collections framework and many features on the Java platform.

3. Rod Johnson
    @springrod, Blog

    Creator of the Spring Framework, which has become the de-facto standard framework for creating enterprise Java applications. He ripped apart EJB pitfalls and made POJO development as the norm for enterprise class Java apps.

2. Rich Hickey
   @richhickey, Blog

   Creator of Clojure, a LISP dialect for the JVM. Clojure is extremely well received and adoption rate is impressive.

1. James Gosling
    Blog
   
   Father of Java language. It was year 1994 the year Java was born. Without James, there would have never seen Java.

January 7, 2011

STEAL THIS PRESENTATION!

Check out this SlideShare Presentation:
STEAL THIS PRESENTATION!
View more presentations from @JESSEDEE.

SlideShare Zeitgeist 2010

Check out this SlideShare Presentation. Presentation about presentation..interesting
SlideShare Zeitgeist 2010
View more presentations from Rashmi Sinha.

November 28, 2010

My take on trends to watch out for...

Couple of days back one of my friend asked me what are the 3 things important according to me for upcoming year 2011. What he meant was - What are the 3 things that I would focus next year? That got me into thinking.

This blog post is an attempt in that direction  - which are the trends that I think would make a difference for any software developer to keep up with the fast pace of change.
(Note: Not in any particular order, all are important)

  1. No SQL.
    • Traditional DBs are good but definitely not "one size fits all" solution. We have to understand  these too have some limitations.We have to stop thinking in rows and columns and start thinking in Documents. Get familiar with some of these concepts, find out what makes these (Mongo DB, Redis etc) successful, what kind of problems can be solved by these. This technology is going to thrive.
  2. Scripting language
    • Enough of Java, C++, C#. Enough of OOPS. Its time to open a notepad and do some quick scripting to get things done. Too much dependency on IDEs have made many of us dumb. Its time to brush-up (or learn) scripting language. Simplicity matters. Be it Ruby, Groovy, Perl, PHP. 
  3. Cloud computing
    • Get familiar with Cloud computing architecture. This technology is already 5 years old. Amazon launched its services in 2006. Computing is cheap these days and just a click away. There would be a time in future when everything would be on cloud. This technology would grow by leaps and bounds
  4. Git / Mercurial (Modern Version Control Systems)
    • Speed is the mantra of this age. Gone are the days of client-server versioning system. In this era of opensource and distributed teams, distributed version controls make life of the developers easy. Every developer should be aware of installing and using these distributed configuration management systems.
  5. Web 3.0 (HTML 5)
    • A month back I attended one day conference on HTML 5 conference in NYC. The takeaway from the conference is - HTML 5 is inevitable. It has been already a decade since HTML standards got updated. The big guns (Google, Apple, Microsoft etc) are all supporting it. HTML 5, CSS3 will be the future of the web. Features like Offline storage, drag drop, geo location, canvas etc will make developing "desktop caliber" web apps a breeze. Developers, Architects ignoring this will be left behind.
  6. Functional language
    • History repeats. Computing started with Functional language (Lisp, Scheme etc), moved to procedural (C, Pascal etc) to object oriented (C++, Java. C#) and again back to Functional languages(F#, Clojure, Erlang, Haskell etc). The job trends already indicate a huge demand for Clojure, F# etc. Hardware has become cheap, grid computing has been norm and some real world problems can be solved insanely easy with these functional languages. Its all about "Share Nothing Architecture". No concurrency issues. Its high time for the developers to start thinking differently and learn (or re-learn) the concepts of functional programming
  7. Data visualization
    • At least two billion tweets are being posted per quarter (Source wikipedia). Wealth of information is available on twitter and all the data is public. Everybody would be interested in visualizing this  data in some form (graphs, charts, trees etc ) to make sense of it.  Its too much information out there. Barack Obama knew this and used this technique to do a wonderful campaign for his elections. This trend would keep growing as more data gets collected on the Internet.
  8. Mobile / Tablet platform
    • iPad has been rated as one of the best devices to consume information. Consumers, executives, enterprise folks - all would have one or the other form of tablet devices in the near future. Its the new trend and a growing trend. Analysts call it "arm platform". Architects, Developers should first think of smart phones, then tablets and finally the notebook - when architecting or designing new enterprise or e commerce applications. 
  9. Agile 
  10.  
    This should take care of your learning appetitie for at-least couple of years :). 
    Please share your list ...

    October 8, 2010

    Top 10 qualities of an Architect

    1. Act as an interface between Business & IT
    2. Identify risks (project, technical , business)
    3. Should not be stereotyped (Keep aside your experience, explore & look for possible alternatives)
    4. Keep upto date of latest technology trends – especially in terms of limitations
    5. Excellent presentation / articulation skills
    6. Master (at-least) one Programming language (OO / Functional)
    7. Develop technical intuition  (Usually comes with experience. Read a lot)
    8. Be Passionate. And Don't be too clever.
    9. Take responsibility of your decisions.
    10. Write Good code. If you design it, you should be able to code it.

    September 20, 2010

    Frameworks frameworks...too many

    Check this out ...one more new framework...Nevertheless nice comparison of different new and old frameworks. Below is the presentation




    Will do a poc soon and share my findings of http://itsnat.sourceforge.net/

    July 28, 2010

    Are we going back? (Client Server == AJAX )

    One of the fundamental rule in designing software systems is always to divorce presentation logic, business logic and data access logic,
    • so that each tier can vary withstand modifications of other tiers
    • so that different teams can focus on separate layer and specialize in that
    • so that building complex systems can be easier etc etc

    Many books have been written emphasizing the advantages of this pattern.
    Coupling any of these layers would take us back to ancient Single tier or Client Server architectures.

    Why am I telling all this?

    One of the projects which I'm currently working on is a Web 2.0 application. This app helps users to do financial analysis by pulling large amounts of data  from the database and plotting charts. And there are no page refreshes and every request is a XHR request (nice :) ).
    jQuery is the Ajax framework & jQPlot is the charting framework.

    One of the interesting side effects that I'm observing building this Ajax Web 2.0 app is more and more "business logic" is getting into the front end javascript files(and btw the other side effect is - Ajax apps are not search engine friendly - not "crawl-able").

    What could this mean:
    • sooner or later javascripts files grow larger and soon will end up in an un-manageable mess
    • anything running on the browser is kind of "open source" available to entire world - as these files get downloaded on the browser cache. Anybody with little effort can look at the business logic
    • bad user experience because of browser freeze - This is basically a counter effect. The primary reason why somebody would take ajax approach is to give a better user experience i.e. if the code runs in the browser then it it faster. But these days, an average user will have min 6 to 7 browser windows open (plus mail client (lotus or outlook), some office documents, pdf readers , IDEs etc) and if the browser starts taking your laptops cpu cycles looping some java-script code and rendering and re-drawing html --then a browser freeze is guaranteed (HTML5 promises to solve this)
    Its kind of going backwards in time where all the presentation logic, business logic is getting mixed.
    The browser for Ajax apps are kind of acting as a thick client, downloading data from the server (usually as JSON content) and manipulating most of it on the client side. The app server is just acting as a content provider.


    Why this could be happening?

    One word. Performance. Users are impatient and response > 3 secs is not acceptable.
    The primary reason the business logic ends up on the client side is to limit the number of requests to the web server.
    Network calls are very expensive (one to the web server and another from web server to the database server to get the actual content). So naturally developers would take easy way out, bypass these network calls, get chunks of data on the browser and manipulate it.

    How to avoid this ?
    • Avoid putting business logic putting on the client side
    • Use java script wisely to manipulate the DOM
    • Use good server side caching solution
    • Tune your SQL queries
    • Design a good UI
    • Anticipate user clicks, fire the request at background and have the data cached on the server side
    • Keep clearing the server side cache
    just my thoughts...

    June 15, 2010

    Back to Square one - HTML5

    Wow! That's what I uttered when I watched one of the videos on HTML5 on Google I/O 2010.

    I started my career coding HTML 4.0 way back in 2000. The web was hot at that time (btw it has become hotter now :)). HTML seemed easy. You write tags and see the changes, no wait time,no fun ;) .
    Java was the hot buzz word. Every other person was crazy about learning Java. Applets were kind of geek thing. It was kind of prestige issue to learn Java. Your fellow buddies silently respected you when you showed your new Applet or Servlet.

    During my early months of job, I started feeling HTML is only for greenhorns, there wasn't much fun in doing any HTML or say for that matter Javascript. One reason was that the tools used for (D)HTML were spitting too much of code. You don't understand any thing in that. There was not one correct way of doing things. Cross browser or say for that making code compatible for matter different versions of IE was a nightmare.

    I slowly forgot HTML.

    But now, With new HTML 5.0 killer features, nobody can ignore it. It has the capacity to completely replace these Rich Internet Apps be it Flash, Silverlight etc.

    It would soon become a standard and entirely change how we write web applications.
    Javascript would be new language of the Internet.

    Some of the features are just amazing:
    1. Offline storage database
    2. Drag and Drop
    3. Canvas
    4. Rich Media tags
    & the list goes on..

    Check this out:
    Demo of HTML5 is in HTML5 How cool is that !!.

    And this video on youtube:

    May 9, 2010

    Java EE6 CDI

    Choices ..choices. Now Java Development without Spring.
    Its making harder for Java EE Developers & Architects. Now they have to un-learn and learn new stuff.
    Jokes apart -- Java EE 6 with CDI indeed seems to simplify things for the programmer. Less code more work backed by Oracle (i.e. Sun) & Tomcat support coming soon. Finally Spring taught a lesson to Java & Java has learnt it well.

    Let me head to the book shop to pick up the book - "Java Development without Spring" By Johan :)

    I don't know what my next client would want. Spring or No Spring. Do I have a choice?

    May 7, 2010

    Bob Martin on Software Craftmanship



    After listening to this marvelous session, if any body related to Software development, who writes production code, does not write a unit test (i.e. automated test) for that production code, then he is not a software "professional" --> period.

    Everything falls in place, like good design, good architecture when we have a set of test suite. It adds immense confidence to keep improving the software without any "fear" of breaking it. Good test suite == good software.

    Craftsmanship is nothing but professional commitment of an individual to deliver "best" software to their client or the employer.

    No finger-pointing, no blame-game, no wasting time how this mess got created - just get your hands dirty and start fixing.

    Thanks Bob for the lesson.

    April 24, 2010

    Advice to myself - Choosing Work

    There are three things to look out in any new endeavor that I undertake.

    These are not in any particular order:

    1. Does it give me money
    2. Does it give me fame
    3. Does it give joy

    Of course the last one is the most important one. Often many try to buy the last one by the first one, which is mostly superficial.

    If all three come on your way then nothing like it...

    March 29, 2010

    Reading Code...Software Archeology - 2

    In the almost a decade of IT experience I can safely conclude that I have read more code than have written.
    This is true for many of us. In college we spend most of the time writing code and the moment we are out in the industry , we join a project team and put  in a situation where the majority of the time we spend in reading (others) code.
    This is always true at-least in Indian market where the engineers work on the outsource project.

    Few other reasons:
    1. Most of the companies have a big agenda of "Re-use".  They always emphasize and encourage teams to create a librabry re-usable components/assets. Often they track this by metrics on how much your team has shared and how you have reduced cost by using the already available components.
    2. There are umpteen number of opensource libraries. Most of them lack documentation. The only to make it work is to open the source and digest it.
    3. 80% of the projects that get outsourced are maintenance and enhancement which lack up to-date documentation.
    4. Legacy projects
    etc

    Look at this way,we almost spend about 60-80% of our time in the industry reading code and 15-35% writing code and remaining on other activities but almost all the tools, processes, standards, best practices that are available on the web are for writing and creating new systems but very minimal to read & understand existing code.

    What is Software Archeology?

    I will leave the veterans and experts of the industry to shed more light on this:
    Digging code: Software archaeology - Good overview
    Grady Booch on Software Archeology
    Listen to Dave Thomas on SE Radio
    Article on Java Dev Journal

    In my next post, I will share my experiences of diagnosing and understanding a complex Java EE app using some of the tools that I stumbled upon on the web.