There is a lot written about Mort, Elvis, and Einstein developers. Here is my (in a nutshell) take on them:
- Mort is someone who doesn't consider programming their main job. Maybe they are a statistician, biologist, or construction estimator, who also knows quite a bit about programming. They are oportunistic, using whatever tool comes to hand that will get the job done.
- Elvis is a professional programmer. I would consider an Elvis to be a journeyman developer. You can scope out a job and give it to them, and the job will get done. In general, Morts don't become Elvises. Morts want to do their main job; they don't WANT to become a professional developer. Elvises go to school and get CS degrees.
- Einstein is a smart Elvis who has been around the block a dozen times. They have seen many projects, some that failed, and some that succeeded. They have seen a large variety of technologies. I also consider that an Einstein is someone who can see the big picture. An Einstein often is in a position of responsibility, choosing technologies and designing large software systems.
There are other definitions. But that is my take, also that of my boss here at MS.
These personas are just one way to categorize developers. The characteristics of an Einstein developer is someone who, for instance, is concerned with architectural purity. For instance, they study type systems, and how type systems relate to various styles of programming languages. They study n-tier systems, and the various ways to break a system into tiers, and the advantages of each of the ways. Then, they are in a good position to design a large system, and coach a set of journeymen developers so that the system is successful. While there are exceptions to this rule, I think that most new CS graduates don't have enough experience to do this. There is so much in the development world that is communicated verbally between developers that I think that until someone has been exposed to a number of projects from beginning to end, they don't see all of the ways that projects can go wrong. These new CS graduates are people that I would categorize as Elvis developers. Of course, there are some Elvis programmers who don't proceed to become Einstein developers. I can think of some off the top of my head. However, I can also think of a number of Einstein developers who would have been categorized as Elvis earlier in their career.
These personas have to be taken with a grain of salt. They are mainly useful in identifying the potential users of a class library. So, for example, a library that makes explicit use of parsers and abstract expression trees may be targeted to an "Einstein", whereas a forms library that allows developers to set properties to connect to database tables may be targeted to an "Elvis". A set of Excel macros that enable construction estimating my be targeted to a "Mort" construction estimator. A library written in Fortran that models fluid dynamics may be targeted to a "Mort" aerospace engineer.