I am into an in-depth study of Michael Porter's competitive Strategy book , as part of my effort to understand a number of business concepts.
I have already gone through a number of marketing books such as
Positioning (Ries/Trout), Seth Godin(All Marketers are Liars ) etc.
However Porter's book is in a different class of its own. It gives you a framework to analyze any industry using a five forces framework of suppliers, buyers, threat of new entrants, substitutes and industry rivalry.
Some of the stuff is common sense and it seems this stuff is more applicable to late-stage or mature companies - than startups.
I am doing an analysis of two entities based on whatever I learned by studying this framework.
The first is that of a Software Engineer's career in USA.
The second one is of my current employer's industry.
Will be following up soon with posts on these subjects.
Friday, August 14, 2009
Thursday, April 17, 2008
Improve performance of legacy code using Java 5 language features
Practical Advice for practical programmers
As a senior engineer, you sometimes are thrown into a situation, where you have to come up with some ways to improve the performance of your server side java multithreaded application.
The code was written over a span of 6-7 years and you have only a vague idea of what it does and does not do. More importantly it uses java language features that are old. What do you do?
Before kicking up a profiler and doing memory/CPU profiling - there is something very easy you can do which does not involve all that, provided you can move to Java 5.
There are a number of new classes and frameworks in Java 5 which should improve the performance and reduce the boilerplate code you need to write for a multithreaded application.
Here are some of them.
I will keep posting some more patterns to emulate as I come across more of them.
As a senior engineer, you sometimes are thrown into a situation, where you have to come up with some ways to improve the performance of your server side java multithreaded application.
The code was written over a span of 6-7 years and you have only a vague idea of what it does and does not do. More importantly it uses java language features that are old. What do you do?
Before kicking up a profiler and doing memory/CPU profiling - there is something very easy you can do which does not involve all that, provided you can move to Java 5.
There are a number of new classes and frameworks in Java 5 which should improve the performance and reduce the boilerplate code you need to write for a multithreaded application.
Here are some of them.
- Replace synchronized collections from your old code with new concurrent collections.i.e. of you have a synchronized HashMap - replace it with ConcurrentHashMap. The Concurrent classes in Java 5 perform fine grained locking and hence provide better scalability.
- Identify places where you use Java list class with Queue semantics and replace it with the Java Queue class , introduced in version 5 or 6. Java Queue class is much more efficient than the List class, whose interface supports random access.
- Use Blocking Queue (or Bounded Blocking queue), whenever possible.
- A common pattern in multithreaded Java applications, is the thread pool along with a work queue. See if you can use Java 5 Executor Task Execution framework.
I will keep posting some more patterns to emulate as I come across more of them.
Monday, April 14, 2008
It is not your Mama's Java concurrency anymore
I have been going through this great book on Java Concurrency by Brian Goetz.
I studied a part of this book two years ago but at some point stopped. This time, I am determined to complete it. Reading(nay, Studying) this book makes you realize how much your language(I mean, programming language) changes/has changed over the years.
Here is the thing about high-tech and software development. You start career in this industry as a programmer/developer and you get used to a certain habits of programming or thinking about your programs. A programming language is essentially a tool for you to produce software. You start off enthusiastically and attain a certain proficiency/ comfort level to get the job done. Unfortunately, you get to use and actually need a very small percentage of the language to build about anything- provided you have sufficient time. This results in a flat learning curve for most programmers in their core language. True, they will be learning the latest zing thing framework - which requires changing another 10 xml files - from time to time.
But essentially, their understanding of their language remains stagnant.
That's when they need a kick in the pants. This book is such a kick in the pants for the average java programmer. This book will make you
1)Understand JMM(Java Memory model)
2) Understand how badly you are lagging the language synchronization constructs..
3)Clear Misconceptions you have regarding the java synchronization constructs.
If you are like me, who try to solve Josh Bloch's Java puzzlers/bloopers once in a while and fail 30% of the time or more, this book is for you.
Happy Reading :)
I studied a part of this book two years ago but at some point stopped. This time, I am determined to complete it. Reading(nay, Studying) this book makes you realize how much your language(I mean, programming language) changes/has changed over the years.
Here is the thing about high-tech and software development. You start career in this industry as a programmer/developer and you get used to a certain habits of programming or thinking about your programs. A programming language is essentially a tool for you to produce software. You start off enthusiastically and attain a certain proficiency/ comfort level to get the job done. Unfortunately, you get to use and actually need a very small percentage of the language to build about anything- provided you have sufficient time. This results in a flat learning curve for most programmers in their core language. True, they will be learning the latest zing thing framework - which requires changing another 10 xml files - from time to time.
But essentially, their understanding of their language remains stagnant.
That's when they need a kick in the pants. This book is such a kick in the pants for the average java programmer. This book will make you
1)Understand JMM(Java Memory model)
2) Understand how badly you are lagging the language synchronization constructs..
3)Clear Misconceptions you have regarding the java synchronization constructs.
If you are like me, who try to solve Josh Bloch's Java puzzlers/bloopers once in a while and fail 30% of the time or more, this book is for you.
Happy Reading :)
Tuesday, February 05, 2008
SDForum Technical Events for February
There are a number of good Technical events being hosted by SDForum for the month of February.
The SDForum calendar is here
Some good ones I am interested in are
The SDForum calendar is here
Some good ones I am interested in are
- Java SIG -Improving code with dependency injection and aspects (Feb 5th)
- Search SIG - Using the Social Graph / Social Platforms to Enhance Search & Discovery(Feb 12th)
- Web Services SIG- Mashing Up The Enterprise(Feb 26th)
Vendors get serious about Business Event Processing
One of the latest trends in SOA is Event Processing - more importantly Complex Event Processing.
However , everyone hates the word "Complex", so IBM and other vendors are simply referring to it as Business Event Processing - even though the technology can be used for processing any kind of events.
So what is really event processing? Event processing is nothing but processing those events that arise in the enterprise and making some sense out of them. Have we not been making sense of them with application integration for the last ten years??
The short answer is NO - because while we might have been integrating applications, synchronizing orders and making enterprises have a consistent view of their systems, we never really derived any higher order meaning from the various events that happen in the enterprise.
We never really understood why something happens.
We never understood what multiple events in isolation meant as a whole.
We never maintained any state regarding those events.
In essence, we never had the notion of time while processing events, except for a very rudimentary event sequencing.
About three years ago, I worked on a prototype to demonstrate how event processing could be used in conjunction with our integration broker. It is good to see that these things are now slowlybeing adopted by various enterprises.
BEA has started using Esper as its event processing engine in WebLogic Integration Server and IBM has recently acquired AptSoft.
However , everyone hates the word "Complex", so IBM and other vendors are simply referring to it as Business Event Processing - even though the technology can be used for processing any kind of events.
So what is really event processing? Event processing is nothing but processing those events that arise in the enterprise and making some sense out of them. Have we not been making sense of them with application integration for the last ten years??
The short answer is NO - because while we might have been integrating applications, synchronizing orders and making enterprises have a consistent view of their systems, we never really derived any higher order meaning from the various events that happen in the enterprise.
We never really understood why something happens.
We never understood what multiple events in isolation meant as a whole.
We never maintained any state regarding those events.
In essence, we never had the notion of time while processing events, except for a very rudimentary event sequencing.
About three years ago, I worked on a prototype to demonstrate how event processing could be used in conjunction with our integration broker. It is good to see that these things are now slowlybeing adopted by various enterprises.
BEA has started using Esper as its event processing engine in WebLogic Integration Server and IBM has recently acquired AptSoft.
Friday, October 12, 2007
Java rant from Steve Yegge
I have missed it all these days but I am rolling on the floor laughing at Steve Yegge's hilarious blog post..err.. Tech News
"you can combine the names of Gang of Four Design Patterns to form new Computer Science concepts that all Java programmers understand, such as the ObserverFactoryBridge, the BridgeFactoryObserver, and the well-known FactoryObserverBridgeChainOfCommandSingletonProxy, beloved of Java programmers everywhere. Java experts at Sun say they're not sure how many combinations there are of the twenty-three pattern names, but there are "definitely a lot of them"
"Man Dies Waiting for Eclipse to Launch
A software engineer in San Jose, CA was found dead at his desk yesterday, apparently having died while waiting for his Java editing program, Eclipse, to finish its boot process."
Man, That's funny..
"you can combine the names of Gang of Four Design Patterns to form new Computer Science concepts that all Java programmers understand, such as the ObserverFactoryBridge, the BridgeFactoryObserver, and the well-known FactoryObserverBridgeChainOfCommandSingletonProxy, beloved of Java programmers everywhere. Java experts at Sun say they're not sure how many combinations there are of the twenty-three pattern names, but there are "definitely a lot of them"
"Man Dies Waiting for Eclipse to Launch
A software engineer in San Jose, CA was found dead at his desk yesterday, apparently having died while waiting for his Java editing program, Eclipse, to finish its boot process."
Man, That's funny..
Monday, September 24, 2007
Concurrent reading - Three great books
I have been reading two great books concurrently. One of them deals with the process of building a product and the other one deals with how do you make a product out of the working software that you have.
1) PeopleWare - Productive Projects and Teams.
How to build a product - which most of the time boils down to how to build a great team and manage them. I will paraphrase Joel Spolsky's review of the book here, since it correctly summarizes what you will get out of this book.
"As summer interns at Microsoft, my friends and I used to take "field trips" to the company supply room to stock up on school supplies. Among the floppy disks, mouse pads, and post-it notes was a stack of small paperback books, so I took one home to read. The book was Peopleware, by Tom DeMarco and Timothy Lister. This book was one of the most influential books I've ever read. The best way to describe it would be as an Anti-Dilbert Manifesto. Ever wonder why everybody at Microsoft gets their own office, with walls and a door that shuts? It's in there. Why do managers give so much leeway to their teams to get things done? That's in there too. Why are there so many jelled SWAT teams at Microsoft that are remarkably productive? Mainly because Bill Gates has built a company full of managers who read Peopleware. I can't recommend this book highly enough. It is the one thing every software manager needs to read... not just once, but once a year".
2) Building a successful Software Business.
1) PeopleWare - Productive Projects and Teams.
How to build a product - which most of the time boils down to how to build a great team and manage them. I will paraphrase Joel Spolsky's review of the book here, since it correctly summarizes what you will get out of this book.

2) Building a successful Software Business.
This is a book about selling the great product you already built. Everything you need to know about marketing/selling a software product - in fact anything other than building the product itself.
- Do you wonder what goes on after you build the product?
- Does the word marketing, run circles around your head.
- Do you know the various channels through which you can market your product
- Want to know how to evaluate a sales pipeline - and factor it into your projections.
- What cashflow is and how to manage it.
- If so, this book is for you. It is a bit dated(written in 1993) ; However as anyone ever been in business knows - the business aspects of a business don't really change that much.
3) The third book is a great book by Rod Johnson from Interface 21, regarding the development of Java Web Applications - without using EJB.
Ever since I have been looking at EJB from some years ago, I have been wondering
- Why all this verbosity?
- Why so many constraints on where my objects should inherit from?
- Why so much emphasis on EJB and components - instead of pure Objects? What happened to Java being Java?
- Why so much repetition, everywhere?
- Why so many transfer Objects everywhere?
- Why is so much type casting, which defeatsthe whole purpose of Java's strong typing?
- Why so much glue code to connect/wire services/components
- Why so much emphasis on RMI?
- Why do I need to deploy to test a "Hello World"?
- Having been trained in C and Assembly during my college days, I was wondering why so much emphasis to dumb down programming and drive everything from XML files.
Then I started playing with light-weight frameworks and understood the motivations of EJB and how things can be simplified. I have been postponing reading this book for a long time and finally got my motivation to pick it up .
Subscribe to:
Posts (Atom)