Thursday, August 28, 2008
Thursday, July 03, 2008
Open letter to Programeter
Mark from Programeter had left the following comment on my earlier post on Programeter. I started typing out my response as a comment but it was turning out to be too long. So I decided to make it another post in itself.
Hi Mark,
First off, thanks for opening up this discussion. This has done a lot to increase my trust in you. What would really salvage the reputation of Programeter from this situation, is to point Programeter on an Open Source codebase (e.g., subversion) and provide the reports online for the world to see. If they do make sense, we would be more than happy to embrace it and even suggest changes to it.
We (Programmers) are not afraid of being measured. We are insulted by the notion that the decisions on those measures could potentially be taken by some management folks who have absolutely no idea of what programming is about. This tool is dangerous in the hands of bad management.
Bad management already refers to programmers as resources as if they are interchangeable cogs in a system. The marketing material on your site does nothing to change this. We have had several epic fails in our industry because of clueless management. The last thing we need is another earnest effort by smart developers to fuel this trend.
Also, there are other ways in which individuals who code add value to an organization. Interacting with people, making teams gel, sharing knowledge on corporate wikis/discussion boards, having passionate coffee corner chats to keep the spirit of the team and so on. None of these are on source control. People's contribution cannot be measured but it is essential for an organization to judge the value added by an individual to an organization. Not all of these judgments can be based on objectivity and measurable facts. Programeter can only suggest facts about one of the facets of an individual's contribution. Suggesting an interpretation of it should be best left to the manager and not by the tool. There has been a lot of discussion about kLOCs. Is more better or is less better. There are other softer issues like security, performance or just an annoying API bug that had to be worked around. You can only present the facts. You cannot draw conclusions without knowing the whole. And those facts are not on source control. I am not dissing the tool. As a nerd I love statistics. I love generating insight on raw data. I would however take caution in interpreting the reports and weigh other facts before making a decision.
The bottom line is.
Code Checked into Source Control != Value Generated
The marketing material on your site is completely laughable. If anything, it only damages the credibility of your product. It would be bought by wrong companies and will be used to make wrong decisions. I am sure that this would not help the sales of your software in the long run. Reconsider your selling approach and come up with proof that your tool works. If you can do both, I wish you all the success for this tool.
Regards,
Vagmi
(An individual contributor to a big Software company)
Disclaimer: All of these opinions are mine and do not represent the views of my employer.
I am from Programeter - hope I will survive the criticts after mentioning that ;).
There are so many questions in the post and comments, so I can't aswer all of those in just one reply. So if I missed yours, go here and post them.
But some comments are here:
* I am not sure I understand why all programmers so afraid of being measured. Would you imagine all salesmen quiting the company because of introduction of CRM? Good programmers should not be afraid of any indicator.
* Yes, I agree "stupid" managers can get it wrong. But stupid managers will get it wrong with or without Programeter.
* Lots of comments, about cheating the system. Go and try to cheat it ;) if you cheat at least 3 of our indicators during one reporting period - Programeter will quit measuring your company as a bonus ;)
if you have more questions, let me know!
Hi Mark,
First off, thanks for opening up this discussion. This has done a lot to increase my trust in you. What would really salvage the reputation of Programeter from this situation, is to point Programeter on an Open Source codebase (e.g., subversion) and provide the reports online for the world to see. If they do make sense, we would be more than happy to embrace it and even suggest changes to it.
We (Programmers) are not afraid of being measured. We are insulted by the notion that the decisions on those measures could potentially be taken by some management folks who have absolutely no idea of what programming is about. This tool is dangerous in the hands of bad management.
Bad management already refers to programmers as resources as if they are interchangeable cogs in a system. The marketing material on your site does nothing to change this. We have had several epic fails in our industry because of clueless management. The last thing we need is another earnest effort by smart developers to fuel this trend.
Also, there are other ways in which individuals who code add value to an organization. Interacting with people, making teams gel, sharing knowledge on corporate wikis/discussion boards, having passionate coffee corner chats to keep the spirit of the team and so on. None of these are on source control. People's contribution cannot be measured but it is essential for an organization to judge the value added by an individual to an organization. Not all of these judgments can be based on objectivity and measurable facts. Programeter can only suggest facts about one of the facets of an individual's contribution. Suggesting an interpretation of it should be best left to the manager and not by the tool. There has been a lot of discussion about kLOCs. Is more better or is less better. There are other softer issues like security, performance or just an annoying API bug that had to be worked around. You can only present the facts. You cannot draw conclusions without knowing the whole. And those facts are not on source control. I am not dissing the tool. As a nerd I love statistics. I love generating insight on raw data. I would however take caution in interpreting the reports and weigh other facts before making a decision.
The bottom line is.
Code Checked into Source Control != Value Generated
The marketing material on your site is completely laughable. If anything, it only damages the credibility of your product. It would be bought by wrong companies and will be used to make wrong decisions. I am sure that this would not help the sales of your software in the long run. Reconsider your selling approach and come up with proof that your tool works. If you can do both, I wish you all the success for this tool.
Regards,
Vagmi
(An individual contributor to a big Software company)
Disclaimer: All of these opinions are mine and do not represent the views of my employer.
Wednesday, July 02, 2008
The dumbest idea ever
I just came across this product called Programeter. There are only two possible market segments for this product.
Now that I have got your attention, lets move on. This is what is displayed as their sales pitch. Look at the first item on the list.
Most companies should already know this. Any productivity measurement for a programmer can be cheated. If you have made a mistake in your recruitment, its already too late. There is no way around it. So stop recruiting people by the truckload. Look for good people with all round skills. Learning a new language or a technology platform is not difficult for a good engineer. Unfortunately, the entire Indian HR recruiting industry does a little more than keyword match to select potential candidates. Every HR Manager working in a software company must read "Smart and Gets things done".
If you already have the wrong people on board long enough, you are doomed. And one way of knowing that you have a wrong person long enough is to ask your middle management on their views of using Programeter. If they give a glowing recommendation of the product, fire them.
- Managers who have no friggin' clue of what programming is
- PLAIN DUMB FUCKING IDOTS.
Now that I have got your attention, lets move on. This is what is displayed as their sales pitch. Look at the first item on the list.
- Companies have merged and you need to decide what 15% of programmers to let go?
- Your consultancy firm needs an estimation report of your client's programmers next week?
- Need to double check your team leader reports by actual data?
- You are a newly assigned project leader and NEED to know what's going on in your team?
Most companies should already know this. Any productivity measurement for a programmer can be cheated. If you have made a mistake in your recruitment, its already too late. There is no way around it. So stop recruiting people by the truckload. Look for good people with all round skills. Learning a new language or a technology platform is not difficult for a good engineer. Unfortunately, the entire Indian HR recruiting industry does a little more than keyword match to select potential candidates. Every HR Manager working in a software company must read "Smart and Gets things done".
If you already have the wrong people on board long enough, you are doomed. And one way of knowing that you have a wrong person long enough is to ask your middle management on their views of using Programeter. If they give a glowing recommendation of the product, fire them.
Monday, June 02, 2008
For all you PPT-Phobes and PPT-Philes
A hilarious rendering of the common mistakes while (ab)using Powerpoint. Sadly, I have been abused by very many of those and there are still a lot more to come.
I am a PPT-phobe. Don't get your PPT near me. I am allergic to PPTs.
I am a PPT-phobe. Don't get your PPT near me. I am allergic to PPTs.
Friday, May 16, 2008
Thursday, May 08, 2008
Life, Travel and Marriage
I was reading this blog about things to do when you are laid off. Although there is is no imminent threat to my job, this is a reality that everybody in the IT industry faces at least once in their career. Even otherwise, taking some time off to travel isn't a bad idea. I was reading this article through the section on the lame reasons why one might not want to travel and I found this.
Ouch!! Thats a pretty hard statement but I digress. I don't mind traveling on a once in a life time trip with my wife even if both of us have to resign to take the time off for six months. I am confident that the IT industry would not change so drastically as to render me unemployable. So when are you guys planning your vacation?
But I'm married with a family and a house...
Ok, you win. You're screwed, but that's the life you chose for yourself so you're going to have to live it. ...
Ouch!! Thats a pretty hard statement but I digress. I don't mind traveling on a once in a life time trip with my wife even if both of us have to resign to take the time off for six months. I am confident that the IT industry would not change so drastically as to render me unemployable. So when are you guys planning your vacation?
Friday, May 02, 2008
A funny song on the MVC paradigm
I came across this really funny song on Youtube about MVC paradigm. Enjoy.
Wednesday, April 30, 2008
Need for a business language
As many of my readers already know, I work for SAP. It is my personal belief that SAP R/3 is so successful only because of its ABAP system. The language provides the right level of abstraction and has appropriate tooling to build business applications. I learned ABAP only a year before (while I have been with SAP for over 3 years now). I was amazed by the speed and agility with which you could create a database driven application and expose your business logic to the outside world in minutes.
The language, as any old language, has its idiosyncracies. But the way it handles database interactions with transparent and internal tables and "Open SQL" is really cool. I haven't programmed in the OO version of ABAP yet. But at initial glance it seems to have been corrupted by the idea of OO from C++ and Java. No one could have put it more adequately than Alan Kay himself.
As we move on to the new decade, we are in need of a language that is closer to the business roots. A language that can be molded to best describe the problems in the business domain. As a hacker, the language that immediately comes to my mind is Lisp. Unfortunately, Lisp is not taught in schools as much it should be taught.
In an excellent essay by the folks from AdaCore, they express their concerns about using Java as the first language that is taught to programmers.
Further in the essay they insist on why Lisp still matters. (Emphasis mine.)
Page 13 of this book(PDF) by John McCarthy is literally the source of intellectual revelation.
Eric Raymond's essay was one of the reasons that I started learning Lisp. He has the following opinion on Lisp.
I strongly suspect that the source of the "profound enlightenment experience" lies somewhere in understanding the code in Page 13 of the book.
I do not insist that the new business language has to be lisp. But lisp is the only language that satisfies such criteria. Problem domains keep changing and the by far the only language that is agile enough and malleable to fit the problem domain is lisp. Note that I am not saying that we would have to use Scheme, Common Lisp or Arc. I am just saying that we need a language similar to these. It could as well be a lisp written on top of any of these lisps, CLR or JVM. What matters here is the language - a formal notion to express our ideas. The compiler, VM and the platform are implementation details. Paul Graham explains this nicely in a rather long essay titled "The Hundred-Year Language".
But you might argue that Java and C++ are established languages. People are creating enterprise software with Java and C++. Why should we change? But look at the enterprise software carefully. Most of what took man years to implement in Java/C++ could have been achieved with much less effort using Lisp. Or if the system was well designed using the popular knowledge of design patterns that has evolved in the community, you would have created half of the abstractions present in lisp anyway. This is called the Greenspun's Tenth Rule of Programming. Although it explicitly states C or Fortran, I believe that it holds good for languages like Java too.
Even the co-auther of the Java language spec, Guy Steele, accepts that Java is no match for the features in Lisp.
Why are we still targeting Java as the language of choice to build business applications? The cool kids have already moved to Ruby. But wait, I heard Matz said something about lisp.
Its time to revive the 50 year old language and start to rediscover the language used by our previous generation.
As Kernighan and Ritchie once suggested -
Keep coding. You know I am (in Lisp).
The language, as any old language, has its idiosyncracies. But the way it handles database interactions with transparent and internal tables and "Open SQL" is really cool. I haven't programmed in the OO version of ABAP yet. But at initial glance it seems to have been corrupted by the idea of OO from C++ and Java. No one could have put it more adequately than Alan Kay himself.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. -- Alan Kay
As we move on to the new decade, we are in need of a language that is closer to the business roots. A language that can be molded to best describe the problems in the business domain. As a hacker, the language that immediately comes to my mind is Lisp. Unfortunately, Lisp is not taught in schools as much it should be taught.
In an excellent essay by the folks from AdaCore, they express their concerns about using Java as the first language that is taught to programmers.
It is our view that Computer Science (CS) education is neglecting basic skills, in particular in the areas of programming and formal methods. We consider that the general adoption of Java as a first programming language is in part responsible for this decline. We examine briefly the set of programming skills that should be part of every software professional’s repertoire.
Further in the essay they insist on why Lisp still matters. (Emphasis mine.)
Why Lisp Matters
Every programmer must be comfortable with functional programming and with the important notion of referential transparency. Even though most programmers find imperative programming more intuitive, they must recognize that in many contexts that a functional, stateless style is clear, natural, easy to understand, and efficient to boot.
An additional benefit of the practice of Lisp is that the program is written in what amounts to abstract syntax, namely the internal representation that most compilers use between parsing and code generation. Knowing Lisp is thus an excellent preparation for any software work that involves language processing.
Finally, Lisp (at least in its lean Scheme incarnation) is amenable to a very compact self-definition. Seeing a complete Lisp interpreter written in Lisp is an intellectual revelation that all computer scientists should experience.
Page 13 of this book(PDF) by John McCarthy is literally the source of intellectual revelation.
Eric Raymond's essay was one of the reasons that I started learning Lisp. He has the following opinion on Lisp.
LISP is worth learning for a different reason — the profound enlightenment experience you will have when you finally get it. That experience will make you a better programmer for the rest of your days, even if you never actually use LISP itself a lot.
I strongly suspect that the source of the "profound enlightenment experience" lies somewhere in understanding the code in Page 13 of the book.
I do not insist that the new business language has to be lisp. But lisp is the only language that satisfies such criteria. Problem domains keep changing and the by far the only language that is agile enough and malleable to fit the problem domain is lisp. Note that I am not saying that we would have to use Scheme, Common Lisp or Arc. I am just saying that we need a language similar to these. It could as well be a lisp written on top of any of these lisps, CLR or JVM. What matters here is the language - a formal notion to express our ideas. The compiler, VM and the platform are implementation details. Paul Graham explains this nicely in a rather long essay titled "The Hundred-Year Language".
But you might argue that Java and C++ are established languages. People are creating enterprise software with Java and C++. Why should we change? But look at the enterprise software carefully. Most of what took man years to implement in Java/C++ could have been achieved with much less effort using Lisp. Or if the system was well designed using the popular knowledge of design patterns that has evolved in the community, you would have created half of the abstractions present in lisp anyway. This is called the Greenspun's Tenth Rule of Programming. Although it explicitly states C or Fortran, I believe that it holds good for languages like Java too.
"Greenspun's Tenth Rule of Programming: any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp."
- Philip Greenspun
Even the co-auther of the Java language spec, Guy Steele, accepts that Java is no match for the features in Lisp.
And you're right: we were not out to win over the Lisp programmers; we were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp. Aren't you happy? -- Guy Steele
Why are we still targeting Java as the language of choice to build business applications? The cool kids have already moved to Ruby. But wait, I heard Matz said something about lisp.
Some may say Ruby is a bad rip-off of Lisp or Smalltalk, and I admit that. But it is nicer to ordinary people. - Matz
Its time to revive the 50 year old language and start to rediscover the language used by our previous generation.
As Kernighan and Ritchie once suggested -
The only way to learn a new programming language is by writing programs in it. - K&R
Keep coding. You know I am (in Lisp).
Friday, April 11, 2008
AppEngine and the MicroISV
Amazon pioneered the effort of providing computing and storage resources as a services like S3, EC2, SimpleDB, SQS and so on. There were rumors that Google would come up with something like this but boy did they surprise everyone. Instead of exposing individual services they have now exposed a coherent framework to build applications on Google scale infrastructure.Google AppEngine used in conjunction with Google Apps for your domain is a brand new market for microISVs to target. They could develop enterprise applications on Google scale hardware and have it integrate with the rest of Google's application suite. Google already had provided Sites and Page Creator. These were at best very weak for an organization's web presence. With Google's AppEngine small and medium scale organizations can look at Google AppEngine as a serious option for their enterprise IT system.
Google Apps for your domain, for those who were living under a rock, provides GMail, GTalk and collaborative office suite for free or for a small fee. Imagine the tons of money that you save on licenses if you had to use Windows servers for your domain and email. Even if you had chosen Linux, the costs of administration and anti spam filtering and the hardware for the servers simply do not exist with Google Apps for your domain. It was almost good for enterprises but not good enough. They still had to worry about their ERP, CRM and other enterprise TLA systems. Salesforce was an option but something was still off with it. That's for a different post.
Google, with its new AppEngine offering, has opened the floodgates of various applications that can be hosted on Google scale infrastructure with pay as you use model for application resources. This is just as Nicholas Carr from the IT doesn't matter fame suggested. Google is commoditizing the computing resources. This is a disruptive innovation which would change the dynamics of how applications are created. It wouldn’t be long for Google to provide a repository of applications that you could just deploy with a click on your domain. Currently Google AppEngine allows you to write applications in Python. They have very clean APIs for integrated User authentication, mail integration, ability to build mashups using the URL Fetch API and store data on Google's BigTable. Google has said that it would add support for other languages. But who needs other languages when you have Python. :-)
Google's offering levels the playing field for ISVs looking to build web-based enterprise products. So, stop reading and start coding. You know I am.
Google Apps for your domain, for those who were living under a rock, provides GMail, GTalk and collaborative office suite for free or for a small fee. Imagine the tons of money that you save on licenses if you had to use Windows servers for your domain and email. Even if you had chosen Linux, the costs of administration and anti spam filtering and the hardware for the servers simply do not exist with Google Apps for your domain. It was almost good for enterprises but not good enough. They still had to worry about their ERP, CRM and other enterprise TLA systems. Salesforce was an option but something was still off with it. That's for a different post.
Google, with its new AppEngine offering, has opened the floodgates of various applications that can be hosted on Google scale infrastructure with pay as you use model for application resources. This is just as Nicholas Carr from the IT doesn't matter fame suggested. Google is commoditizing the computing resources. This is a disruptive innovation which would change the dynamics of how applications are created. It wouldn’t be long for Google to provide a repository of applications that you could just deploy with a click on your domain. Currently Google AppEngine allows you to write applications in Python. They have very clean APIs for integrated User authentication, mail integration, ability to build mashups using the URL Fetch API and store data on Google's BigTable. Google has said that it would add support for other languages. But who needs other languages when you have Python. :-)
Google's offering levels the playing field for ISVs looking to build web-based enterprise products. So, stop reading and start coding. You know I am.
Wednesday, March 12, 2008
Monday, March 10, 2008
Override cross domain policy for local files
I have been working with Flex for the past couple of weeks to build a quick UI Dashboard for our application. We were running this application from the local file system. For some reason it did not work on my machine alone due to the cross domain policy. I then later figured that it was because I was using Firefox and all the others were using IE.
I fixed it then by adding my built file as a trusted swf. See here for more information. The documentation does not say anything about Linux. But you can do the same for Linux as well. You would need to add a similar text file in the following directory.
This is very useful for quick prototyping. You need to work with a proxy after that or better yet make some sense of the web services on your server side.
Have fun. Keep coding.
I fixed it then by adding my built file as a trusted swf. See here for more information. The documentation does not say anything about Linux. But you can do the same for Linux as well. You would need to add a similar text file in the following directory.
~/.macromedia/Flash_Player/#Security/FlashPlayerTrust
This is very useful for quick prototyping. You need to work with a proxy after that or better yet make some sense of the web services on your server side.
Have fun. Keep coding.
Monday, February 25, 2008
Hallo Garmisch-Partenkirchen
We (Me, Balaji, Vikas and Atri) had a nice one day trip to Garmisch-Partenkirchen to see the beautiful German Alps. You can find some of the pictures we took here.
We took a nice scenic route via Austria into Garmisch. The map is not the exact route we took but pretty close.
View Larger Map
Bis Spaeter. Auf Wiedersehen.
We took a nice scenic route via Austria into Garmisch. The map is not the exact route we took but pretty close.
View Larger Map
Bis Spaeter. Auf Wiedersehen.
Thursday, January 31, 2008
Why should we learn Scheme?
I have been mulling over learning lisp seriously and using it for real projects. But I never could motivate myself enough to write something worthwhile in Common Lisp or Scheme. But after looking at Arc, I am impressed. The current version of Arc is written in Scheme. I have been a strong python advocate. But after looking at Arc, I am impressed. Not so much with Arc itself but with Scheme. I was browsing through Arc's code and found that it was surprisingly readable.
I am now determined to learn Scheme and contribute to Arc. Maybe, somebody would write a Arc -> Metal compiler but I like the fact that Arc has first been written in Scheme. It is sort of like PyPy or Rubinius. But I guess it is a natural thing to do in the Scheme world. I have two more books on my reading list. I have already started with Teach yourself Scheme in Fixnum days and I plan to grok SICP as well.
Keep coding. You know I am. :-)
I am now determined to learn Scheme and contribute to Arc. Maybe, somebody would write a Arc -> Metal compiler but I like the fact that Arc has first been written in Scheme. It is sort of like PyPy or Rubinius. But I guess it is a natural thing to do in the Scheme world. I have two more books on my reading list. I have already started with Teach yourself Scheme in Fixnum days and I plan to grok SICP as well.
Keep coding. You know I am. :-)
Hello Arc
There has been quite some ruckus on the blogosphere about Arc. I have just downloaded it and finished reading through the tutorial. I like it. I am sure that features like Unicode will get added. However, I would like to see the standard library. How can I do FFI? Database interfaces? May be they are already there but I still don't see them yet. In the meanwhile, here is an interesting snipped of Arc for everybody who is pondering about Life, Universe and Everything.
arc> (reduce + (cons 6 (map [* 4 _] (keep odd '(1 2 3 4 5)))))
42
Keep coding.
arc> (reduce + (cons 6 (map [* 4 _] (keep odd '(1 2 3 4 5)))))
42
Keep coding.
Friday, December 28, 2007
Everybody needs to wear sunscreen
This is a very interesting video about a positive outlook towards life. Enjoy.
Wednesday, December 12, 2007
Social Graph for the Enterprise
Social Graphs are the rage these days, and for a good reason. My manager, Ajith (LinkedIn), commented that he was not entirely sold on the concept of the social graph for the enterprise. Whenever the topic of social graph comes up, people immediately bring Orkut or Facebook in their minds. They are social networking applications, which use the social graph as an element of their infrastructure. Enterprises may not need applications like SuperPoke or iLike but they can build much richer applications by using social graphs as one of its platform services. I would even go to the extent of saying that the social graph is an essential piece of the information infrastructure that IT must provide. This is my bit of free advice for the CIOs.
IT always catches up a little later with the management and organization practices. Organizations have been experimenting and implementing matrix organizational structures for over 20 years. However, every employee table that I've ever seen has only one column for Manager. I wonder what could be the reason for that?
Most transnational organizations, prefer matrix structures to promote autonomy and to focus on regional strategies. Furthermore, the advances in IT in the enterprise has enabled managers to have a much wider span and has resulted in considerable reduction in the height of the organizations. When I say height, I mean the number of hierarchical levels in an organization. Organizations in business which demand creativity like software development or advertising, generally are much flatter than the older manufacturing firms following the organizational models created during the Industrial revolution. So the flatter organizations would have culture/values which promote interaction, entrepreneurship and transparency. Unfortunately, today's enterprises do not have the requisite IT infrastructure to foster such a knowledge community. Majority of the organizations do not yet have internal blogs or wikis. Even if they do, the level of awareness and the participation is abysmally low.
Let us assume a case of project management in a matrix organization. Every project has a project owner and each project creates a wealth of knowledge for the organization. Most of this information lies as word documents or excel files in a file share. Every developer/engineer working on the project could potentially be reporting to two/more people, his line manager and his functional manager, who would usually be the project sponsor. Further, if the organization employs a 360 degree feedback and appraisal system, we would need to identify his peers in every project that he had ever participated in. The current X.500 based directory servers like Active Directory or NDS provide the tools and infrastructure for a hierarchical organization. This necessitates that the project management system holds information about projects, its members, its sponsor and so on and this system is usually a closed system. Of course, it could provide certain integration possibilities using BAPIs, RFCs or web services but the information about the relationships is essentially in the system.
Let us see how the system evolves, if we have the Social Graph as an underlying infrastructure component. The social graph contains information about users, networks and groups. It has restful APIs to perform CRUD operations on each of these. Users can belong to multiple groups but can belong only to one network at a time. The network can be seen as an SBU/LoB or a division providing shared services. All the changes are timestamped and can be undone. This is essential for the integrity of the system. In addition to users, networks and groups, the social graph infrastructure could allow applications to park objects, permissions and authorization information along with the same. Let us visualize how a project management system can be built using this infrastructure alongside couple of other applications.
We could have weblog and wiki applications. Weblog application can provide permissions to comment or edit/create a blog to particular user or group. It can even restrict the visibility of the blog to some networks or groups. It can use the ATOM publishing protocol to enable RSS readers and third party authoring applications to integrate. We can do the same for Wiki pages. In fact, the comments module can be a separate application which can be mashed up with both blog objects and wiki page objects. We can then have a profile application, which provides profile pages to users, groups and applications. Profile can have the appropriate information about the group including the details such as the Blogs, Wikis and their corresponding RSS feeds that the user/group would like to expose. We could have RESTful web services exposed on each of these applications.
Now the project management system can create groups for each of the project and can add the appropriate members. It can setup a project wiki with the appropriate permission set and setup a project blog and create a profile page of the project. The project management system can now improve collaboration by assigning and tracking work packages.
You can observe that you develop small focussed functional modules which can be mashed up easily using the social graphs as the underlying infrastructure. I don't mean to say that the social graph is the silver bullet for organization's knowledge management issues. But it is about time that we acknowledge that we are trying to shoe-horn a tree when the problem actually mandates a graph.
This was supposed to be a mail to Ajith. But I thought it would be better off as a blog entry. Just a way of saving keystrokes. :-)
IT always catches up a little later with the management and organization practices. Organizations have been experimenting and implementing matrix organizational structures for over 20 years. However, every employee table that I've ever seen has only one column for Manager. I wonder what could be the reason for that?
Most transnational organizations, prefer matrix structures to promote autonomy and to focus on regional strategies. Furthermore, the advances in IT in the enterprise has enabled managers to have a much wider span and has resulted in considerable reduction in the height of the organizations. When I say height, I mean the number of hierarchical levels in an organization. Organizations in business which demand creativity like software development or advertising, generally are much flatter than the older manufacturing firms following the organizational models created during the Industrial revolution. So the flatter organizations would have culture/values which promote interaction, entrepreneurship and transparency. Unfortunately, today's enterprises do not have the requisite IT infrastructure to foster such a knowledge community. Majority of the organizations do not yet have internal blogs or wikis. Even if they do, the level of awareness and the participation is abysmally low.
Let us assume a case of project management in a matrix organization. Every project has a project owner and each project creates a wealth of knowledge for the organization. Most of this information lies as word documents or excel files in a file share. Every developer/engineer working on the project could potentially be reporting to two/more people, his line manager and his functional manager, who would usually be the project sponsor. Further, if the organization employs a 360 degree feedback and appraisal system, we would need to identify his peers in every project that he had ever participated in. The current X.500 based directory servers like Active Directory or NDS provide the tools and infrastructure for a hierarchical organization. This necessitates that the project management system holds information about projects, its members, its sponsor and so on and this system is usually a closed system. Of course, it could provide certain integration possibilities using BAPIs, RFCs or web services but the information about the relationships is essentially in the system.
Let us see how the system evolves, if we have the Social Graph as an underlying infrastructure component. The social graph contains information about users, networks and groups. It has restful APIs to perform CRUD operations on each of these. Users can belong to multiple groups but can belong only to one network at a time. The network can be seen as an SBU/LoB or a division providing shared services. All the changes are timestamped and can be undone. This is essential for the integrity of the system. In addition to users, networks and groups, the social graph infrastructure could allow applications to park objects, permissions and authorization information along with the same. Let us visualize how a project management system can be built using this infrastructure alongside couple of other applications.
We could have weblog and wiki applications. Weblog application can provide permissions to comment or edit/create a blog to particular user or group. It can even restrict the visibility of the blog to some networks or groups. It can use the ATOM publishing protocol to enable RSS readers and third party authoring applications to integrate. We can do the same for Wiki pages. In fact, the comments module can be a separate application which can be mashed up with both blog objects and wiki page objects. We can then have a profile application, which provides profile pages to users, groups and applications. Profile can have the appropriate information about the group including the details such as the Blogs, Wikis and their corresponding RSS feeds that the user/group would like to expose. We could have RESTful web services exposed on each of these applications.
Now the project management system can create groups for each of the project and can add the appropriate members. It can setup a project wiki with the appropriate permission set and setup a project blog and create a profile page of the project. The project management system can now improve collaboration by assigning and tracking work packages.
You can observe that you develop small focussed functional modules which can be mashed up easily using the social graphs as the underlying infrastructure. I don't mean to say that the social graph is the silver bullet for organization's knowledge management issues. But it is about time that we acknowledge that we are trying to shoe-horn a tree when the problem actually mandates a graph.
This was supposed to be a mail to Ajith. But I thought it would be better off as a blog entry. Just a way of saving keystrokes. :-)
Tuesday, November 27, 2007
A Java that doesn't suck
I am a heavy C# and a Python user. I am looking at Java after a long time for some of my projects. I really miss the features in my favorite language. No delegates, no anonymous types, no type inference. In my quest to learn new languages, I started scouring the web. I then came across Scala. It is a better Java for the JVM. According to the Alioth performance shootout, Scala's performance is comparable to Java6-server's performance. It supports type-inference, real iterators, list comprehension, the functional goodness and much more. I am impressed by the ease in which it can use Java's libraries.
In short, it is a Java that doesn't suck.
Here are some of the resources that would help you get started with Scala.
Scala Home - http://www.scala-lang.org
Scala for Java Programmers - part 1 - http://blogs.sun.com/sundararajan/entry/scala_for_java_programmers
Scala for Java Programmers - part 2 - http://blogs.sun.com/sundararajan/entry/scala_for_java_programmers
This is a nice video by the creator of Scala about building component systems and how scala is relevant in this context.
In short, it is a Java that doesn't suck.
Here are some of the resources that would help you get started with Scala.
Scala Home - http://www.scala-lang.org
Scala for Java Programmers - part 1 - http://blogs.sun.com/sundararajan/entry/scala_for_java_programmers
Scala for Java Programmers - part 2 - http://blogs.sun.com/sundararajan/entry/scala_for_java_programmers
This is a nice video by the creator of Scala about building component systems and how scala is relevant in this context.
Tuesday, November 20, 2007
Sunday, October 14, 2007
How I started off with Haskell and wound up with Lisp
A while ago, I started dabbling in the functional programming space. As with many of my other experiments, I started learning Haskell. I mentioned this to a couple of friends and they asked me if it had to do anything with Pascal. I assured them that they had no resemblance whatsoever. I got off with an excellent tutorial on Haskell. But somehow the static typing part had a nagging feeling in the back of my head. I code with C# a lot in my day job. I do not have anything against statically typed languages, but I strongly believe that you can be far more productive with a dynamically typed language.
I then came across this tutorial, which teaches you to write a Scheme interpreter in Haskell in 48 hours. Really Cool. I fell in love with Lisp immediately. I googled for Lisp and I discovered that there are many dialects of Lisp. The most popular ones are Common Lisp and Scheme. I decided to go with Common Lisp for some unknown reason. I guess because it had Lisp in its name :-). I then had to find the right implementation for my platform. Being a GNU fan, I picked the GNU CLISP. As it turns out, it is a horrible implementation which does not support threading and is painfully slow. But it was fine for the small programs that I use for learning. I have Ubuntu Feisty on my "home" laptop but I spend most of my time on the office laptop which as you all might have guessed, runs "Windows". There are many good commercial implementations for Windows but I was looking only for open source software. GNU CLISP seems to be the only fully functional Common Lisp implementation. I've worked with SBCL and found that okay too. I did not run into any major issues but their website has an yellow status for SBCL on Windows and a big bold notice saying that it is an experimental implementation. But for learning purposes, I guess it is just fine.
I followed a really cool Lisp tutorial, which is actually a book by a guy called Peter Seibel named Practical Common Lisp. It is a free online resource.
One of my biggest barriers to entry was my text editor. I was a 'vi' guy. As I browsed for help on Lisp, I kept finding these cool emacs extensions for lisp programming. I then took the dive and started using Emacs. It was very painful in the beginning. My fingers automatically pressed the and the ':' keys whenever I wanted to do something. But it took about a week of exercise to train my mind to work with Emacs. Writing extensions for vim is a big deal and normal users would not do it. But extending emacs is a piece of cake. It can be done one step at a time and is very well documented. BTW, I am writing this blog on Emacs. One thing VI does not have is the 'longlines-mode'. If there is one, please let me know. Emacs is just not a text editor but the text editor for me. One more cool thing about using Emacs to code common-lisp is that, you can turn it into a Lisp IDE. Slime(a horrible name) is a mode in emacs that turns your modest text editor into a full blown IDE, including code assist and interactive debugging, even on remote machines.
So this is your startup kit for learning Lisp.
I then came across this tutorial, which teaches you to write a Scheme interpreter in Haskell in 48 hours. Really Cool. I fell in love with Lisp immediately. I googled for Lisp and I discovered that there are many dialects of Lisp. The most popular ones are Common Lisp and Scheme. I decided to go with Common Lisp for some unknown reason. I guess because it had Lisp in its name :-). I then had to find the right implementation for my platform. Being a GNU fan, I picked the GNU CLISP. As it turns out, it is a horrible implementation which does not support threading and is painfully slow. But it was fine for the small programs that I use for learning. I have Ubuntu Feisty on my "home" laptop but I spend most of my time on the office laptop which as you all might have guessed, runs "Windows". There are many good commercial implementations for Windows but I was looking only for open source software. GNU CLISP seems to be the only fully functional Common Lisp implementation. I've worked with SBCL and found that okay too. I did not run into any major issues but their website has an yellow status for SBCL on Windows and a big bold notice saying that it is an experimental implementation. But for learning purposes, I guess it is just fine.
I followed a really cool Lisp tutorial, which is actually a book by a guy called Peter Seibel named Practical Common Lisp. It is a free online resource.
One of my biggest barriers to entry was my text editor. I was a 'vi' guy. As I browsed for help on Lisp, I kept finding these cool emacs extensions for lisp programming. I then took the dive and started using Emacs. It was very painful in the beginning. My fingers automatically pressed the
So this is your startup kit for learning Lisp.
- Common Lisp implementation - CLISP or SBCL
- Lisp Tutorial
Emacs Slime
Friday, October 05, 2007
Really achieving your childhood dreams
This is a must watch for everyone. When I say everyone, I mean EVERYONE.
Subscribe to:
Posts (Atom)