johnson@cs.uiuc.EDU (Ralph Johnson) (04/04/91)
For the last few years I have been learning how to make software reusable. I have followed the object-oriented road using Smalltalk and C++. Software is not naturally reusable, and it is not easy to write reusable software. In fact, I have decided that the biggest problem with software reuse is that reusable software is so hard to make. Lots of people seem to be worried about problems like cataloging software components and how to retrieve a component from a library of million of components. I wish that were the problem! The real problem is that it is so hard to create reusable software. This leads to an interesting problem: how can we afford to pay the costs of developing reusable software? If a company is going to build several of something then it might be cheaper for it to first develop a system for producing systems of that kind. However, it will certainly not save money on the first system built. Some application domains, like graphical user interfaces, are popular enough that a company can build a set of reusable components and sell it and make lots of money. I don't think there are many of these application domains, and in any case most people seem to undervalue software and don't want to pay a fair price for it. Thus, it is only cost-effective to sell software if you can sell a lot of it, which rules out specialized application domains. The problem that I see is that there will be many areas where it would be valuable for us to develop standard libraries of software components, but there will be no economic incentives to do so. Does anybody have any ideas on how to solve this problem, whether it is a problem, or (better yet) references to papers that discuss it? Ralph Johnson -- University of Illinois at Urbana-Champaign johnson@cs.uiuc.edu
rsw@cs.brown.EDU (Bob Weiner) (04/05/91)
In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes: > For the last few years I have been learning how to make software > reusable. ... > The real problem is that it is so hard to create reusable > software. > > This leads to an interesting problem: how can we afford to pay the > costs of developing reusable software? The same way we afford anything else. We convince ourselves or become convinced that the benefit outweighs the cost. How do we do that? In the industrial world, we gather believable examples of where company A with an established reusability program is trouncing competitor company B who writes most of their software from scratch. The correlation becomes especially believable if company A points to this program as their main success strategy and if they used to trail company B. Electrical engineers have learned the value of standardization, though they do not always apply it. Computer scientists, software engineers, and programmers generally do not show this same understanding, at least as it applies to program generation. Their mindset will also shift as startling examples of technology advancement arrive. And if they don't, then maybe many people will find that they have been promoting the wrong crusade. > Some application domains, like graphical user interfaces, are popular enough > that a company can build a set of reusable components and sell it and make > lots of money. I don't think there are many of these application domains, > and in any case most people seem to undervalue software and don't want to pay > a fair price for it. Thus, it is only cost-effective to sell software if you > can sell a lot of it, which rules out specialized application domains. I think this is a forest-and-trees issue. The development of standardized sets of reusable software components should not be about the commercialization of the components but about their use as enablers in the construction of needed applications within real world constraints of time and resources. People don't make much money selling me a few screws, bricks, or 2-by-4s, but the person who builds a house with such things often gets a very good markup. Because people place much more value on the product he delivers than on the components from which it is made. Further, I submit that there will never be a shortage of software applications for people to work on, since we will forever raise our expectation thresholds for the functionality needed within programs. This in turn means that we will have to invent new components and even re-engineer the old ones as they become dated. All of this is just as true for any industry that society keeps vital through its demands. Since software spans virtually every industry, I see no need for you to worry that component standardization will finish the job once and for all. > The problem that I see is that there will be many areas where it would be > valuable for us to develop standard libraries of software components, but > there will be no economic incentives to do so. Even were this at all true, there are many organizations, even technical ones, which do things mainly for society's benefit. > Does anybody have any ideas on how to solve this problem, whether it is a > problem, or (better yet) references to papers that discuss it? Sony doesn't make a lot directly selling their media or miniaturized circuitry. They settle for market dominance in application areas: computer storage, consumer electronics, profession video, and so forth. The tree view is that they make this money from their competence in the underlying technology areas. The forest view is that they are good at drawing on these strengths to deliver well engineered, timely products in which they locate or develop solid demand. If you do sell non-standalone components, your only market is software developers. This market may be large enough to satisfy many entrepeneurs, but the applications market is insatiable. Remember, no one, in the figurative sense, wants an echo canceler but everyone wants a telephone, making it a popular target of both entrepeneurial and engineering talent. Easy to see why, isn't it? Bob -- Bob Weiner rsw@cs.brown.edu
locke@paradyne.com (Richard Locke) (04/05/91)
In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes:
Ralph asks some good questions:
<...how can we afford to pay the costs of developing reusable software?
<Does anybody have... (better yet) references to papers that discuss it?
Though the book is at work & I'm at home, I recall the "Programmer
Productivity" by Capers Jones has a reasonably extensive discussion
on the economics of reusable software. Jones points out the the
world leaders in software productivity are good at reusing both
designs and code. He goes through a sample exercise of justifying
a large initial investment and showing the payback.
-dick
p.s. Note that Jones defines productivity (I'm paraphrasing here) in
terms of functionality delivered per unit of effort on the "version"
of the delivered software. You could define productivity differently
(like new lines of code/unit time) and this changes ;-)
EGNILGES@pucc.Princeton.EDU (Ed Nilges) (04/06/91)
In article <1991Apr5.040312.29351@pdn.paradyne.com>, locke@paradyne.com (Richard Locke) writes: >In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes: > >Ralph asks some good questions: > ><...how can we afford to pay the costs of developing reusable software? A government or government-sponsored effort is one possibility. The U. S. Government printing office has long made a variety of information on various scientific topics cheaply available. It could start selling book/diskette combinations of reusable tools for various areas. This would prevent horrors such as runaway patenting of obvious algorithms (including blinking cursors.) It would also make it possible for small startups to concentrate development efforts on the end-user problem they were chartered to solve without having to buy collections of software typically priced past 200.00 per single-use package. Too many programmers in small businesses of all types are faced with a cruel choice: "wasting time" by developing documented reusable components or creating huge, unmaintainable agglomerations of single-purpose code. Private companies are loth to fund reusability since reusability entails clear documentation of procedures that are in many cases trade secrets. This costs these companies money in the form of too many programmers and it results in a poor product for the end user.
brnstnd@kramden.acf.nyu.edu (Dan Bernstein) (04/07/91)
In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes: > This leads to an interesting problem: how can we afford to pay the > costs of developing reusable software? Easy: You *don't*. The problem in software today isn't code that's written once. As you observed, it is absolutely pointless to take a unique section of code and make it reusable---or even to start by writing it reusably. But as soon as the code is written twice, it should never have to be written again. As soon as you see that you're *reusing* software, you go back, make the original *reusable*, and then *reuse* it. Any competent programmer will assume that what he uses twice, he'll use again, and so he'll put in the extra effort so that it's easy to use. Never do this before you realize that the software will be reused, and you won't waste any money. (As many people have observed, there is a problem of communication here: if programmer X and programmer Y independently need something---once--- then neither of them will realize that it should be made reusable. The only way to improve this situation is to distribute code.) ---Dan
cox@stpstn.UUCP (Brad Cox) (04/08/91)
In article <RSW.91Apr4182149@tahiti.cs.brown.EDU> rsw@cs.brown.EDU (Bob Weiner) writes: >In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes: > >> For the last few years I have been learning how to make software >> reusable. >... >> The real problem is that it is so hard to create reusable >> software. >> >> This leads to an interesting problem: how can we afford to pay the >> costs of developing reusable software? Thanks, Bob, for reposting Ralph's question...I'd missed it somehow. (@#$$% usenet gremlins) The organizational motivation for reusability is specialization of labor; making a tree-structured industry of what was previously a monolithic collection of cottage industry skilled craftsmen; a heterogeneous tree of specialized craftsmen instead of a homogeneous collection of programmers all with the same skill set. But Ralph has his finger on the key obstacle to doing this...finding a way to keep the roots of this tree from starving. I believe the demand for a market in reusable components is high, but the supply is low, because of exactly what Ralph has identified; that the costs of building reusable components is extremely high, higher than those who have not tried to do this for a living is probably realize. For example, in my own experience (these are measured numbers based on nearly a decade of actually doing it), the costs of building something reusable are at least ten times higher than the costs of building it in the first place, and possibly much more. I'm referring to the costs of testing, documenting, porting (and retesting and sometimes redocumenting), advertising, marketing and selling. Note that the 10x costs are not easily amenable to technological assistance. If I'm right that the demand exceeds the supply, the situation will develop in a fashion economists are familiar with...prices will rise until reusable component producers decide that the gain exceeds the risk. -- Brad Cox; cox@stepstone.com; CI$ 71230,647; 203 426 1875 The Stepstone Corporation; 75 Glen Road; Sandy Hook CT 06482
egnilges@phoenix.Princeton.EDU (Ed Nilges) (04/08/91)
In article <6761@stpstn.UUCP> cox@stpstn.UUCP (Brad Cox) writes: > >I believe the demand for a market in reusable components is high, but >the supply is low, because of exactly what Ralph has identified; that >the costs of building reusable components is extremely high, higher >than those who have not tried to do this for a living is probably >realize. Darn right, Brad. As one who frequently gets into hot water for spending too much time making things reusable, I find that reusability is quite beneficial in ways that cannot always be quantified or cost-justified. Especially in contract programming, you are paid to do exactly what the customer wants, and it is the kiss of death to bill for reusable software. Nonetheless, a software system built out of reusable components seems always to work better and to be easier to maintain than one that is not so built, once you've tuned critical sections for efficiency. I am currently working on reusable environments in C and in REXX. REXX is a language for writing glue procedures in the IBM mainframe environment that is also useful for general programming and which also has implementations on the Amiga, the PC and unix. REXX at this writing is mostly interpreted. I find that it is much easier to make things reusable in REXX, because writing a reusable tool has only these steps: 1. Document 2. Code 3. Test using a standard harness (called TRY) which displays the before and after environment 4. Place on public disk Note that we document prior to coding. Normally, these components are so simple that this phase is the analysis phase in which we determine our requirements. Note, also, that these are NOT end-user tools: if they were, a "step 0" requirements phase would have to be added. To do a needs determination for these types of tools, we talk to ourselves. Developing C reusable components of equivalent simplicity is a con- siderably more daunting task in that we are using a compiler. This means that we have to set up libraries and worry about porting issues that do not arise in REXX. This does not mean that it is a waste of time to develop reusable C, just that it's more expensive in ways that the theoreticians do not see.
rh@smds.UUCP (Richard Harter) (04/09/91)
In article <1991Apr3.231849.13410@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) writes: > This leads to an interesting problem: how can we afford to pay the > costs of developing reusable software? There have been some studies that show that one of advantages of the more productive programmers is that they reuse their own code. When one thinks about it, this is the optimal situation for reusability. I.e. the programmer is already familiar with the way the code works, its style, and its limitations. Furthermore she/he knows that the code exists and where to find it. Moreover "resusable code" in this context often consists of sections of code rather than complete modules. It might be profitable to think in terms of bridging the gap between programmers so that programmer X can reuse the code of programmer Y in much the same way that a programmer reuses her own code. -- Richard Harter, Software Maintenance and Development Systems, Inc. Net address: jjmhome!smds!rh Phone: 508-369-7398 US Mail: SMDS Inc., PO Box 555, Concord MA 01742 This sentence no verb. This sentence short. This signature done.
jls@rutabaga.Rational.COM (Jim Showalter) (04/10/91)
>The problem that I see is that there will be many areas where >it would be valuable for us to develop standard libraries of >software components, but there will be no economic incentives >to do so. Does anybody have any ideas on how to solve this >problem, whether it is a problem, or (better yet) references to >papers that discuss it? It's largely the same infrastructural defect that afflicts companies in other areas: short-term focus. Clearly it costs money up front to write reusable software, and yet, amortized over several projects, such an effort pays for itself. But if a company only thinks 3 months ahead, there is no basis for such multi-year payback. Consider a concrete example: every air traffic control system and every air defense system in the world does "track management" (a track is a flying object's trajectory over time). Every such project I've ever been involved with has rewritten track management from scratch (at best scavenging bits and pieces from other iterations). Yet, it is clearly a reusable--and quite large--chunk of the overall problem. A company that noticed this and put such things on a multi-year accounting basis could solve the track management problem once and for all, and realize significant savings over the medium to long term. A few companies have realized that reusable software (particularly application-specific stuff) can provide a competitive advantage, and have started to budget appropriately. I hope the trend continues. -- * The opinions expressed herein are my own, except in the realm of software * * engineering, in which case I borrowed them from incredibly smart people. * * * * Rational: cutting-edge software engineering technology and services. *
emv@ox.com (Ed Vielmetti) (04/10/91)
In article <jls.671247772@rutabaga> jls@rutabaga.Rational.COM (Jim Showalter) writes: >The problem that I see is that there will be many areas where >it would be valuable for us to develop standard libraries of >software components, but there will be no economic incentives >to do so. It's largely the same infrastructural defect that afflicts companies in other areas: short-term focus. Clearly it costs money up front to write reusable software, and yet, amortized over several projects, such an effort pays for itself. But if a company only thinks 3 months ahead, there is no basis for such multi-year payback. I suspect there are good rational reasons why companies don't invest in the extra time and effort to make their code reusable. Consider an interface to a proprietary system (e.g. a stock ticker) which is a relatively small part of a greater whole (e.g. a trading system). Since the upstream interfaces are all proprietary, there is no guarantee that they won't change in a relatively short time; you would not want to spend time writing code that was reusable but obsolete. It may be difficult or even impossible to find potential buyers for your code if you were to want to sell it; most development of this sort is done in-house, because it's relatively cheap compared to the rest of the entire system. And you really don't want to sell or give anything away to your competitors in this market, since it might endanger your core profit centers. So whereas it might be nice to have a set of standard libraries for dealing with the output of the Telekurs Ticker Service Adapter, the number of users is sufficiently small and they are ignorant of (or hostile to) each other and chances are none of them are going to ever know enough about each other to make any reuse or resale possible. --Ed emv@ox.com
weide@elephant.cis.ohio-state.edu (Bruce Weide) (04/11/91)
In article <6761@stpstn.UUCP> cox@stpstn.UUCP (Brad Cox) writes: > >But Ralph has his finger on the key obstacle to doing this...finding a >way to keep the roots of this tree from starving. > Just to reiterate one of Ralph's important points that Brad goes on to observe later in the above article... The economic question is A key obstacle to practical software reuse, but there are also serious technical impediments to designing good reusable components. People who haven't tried it (seriously) often don't realize that. Even if we figure out how to solve the economic, psychological, sociological, managerial, ..., problems that impede reuse, we STILL have to solve the technical ones, too (e.g., how to design high-quality reusable components). So the economic question is not THEY key issue, IMHO. It is just one of many. In fact, if we solve all the other problems without having good reusable components, we may be worse off than we are now. People will then be able to reuse inappropriate, incorrect, inefficient software components more easily than they can now! -Bruce
pkr@media01.UUCP (Peter Kriens) (04/11/91)
I have been involved in a project where a CD was made with thousands of fonts on it. The fonts were encrypted so if you wanted access, you called a number and got a decryption key. This key allowed you to get the font from the disk and use it. On the disk there was also a presentation of all the fonts so that it was easy to find the one you want. Also cross references made life a lot easier. What I could dream of is a product like that where hundreds of companies deliver standard libraries for (~rwell Smalltalk would be great, but C++ would be nice too) C++. So you bought the CD for $25 or something like that, then when you needed a reusable component you just paid what you needed. It could be possible to supply the header files as always readable so that you can design and try without coding. Ofcourse that would mean distributing source code. But I think that it should be possible to distribute non commented, symbol replaced C code, jus the way like a lot of programmers write. Would a product like that be feasable? And if so how much could you charge, and how many people would be interested? Peter Kriens pkr@media01
jls@rutabaga.Rational.COM (Jim Showalter) (04/12/91)
>So whereas it might be nice to have a set of standard libraries for >dealing with the output of the Telekurs Ticker Service Adapter, the >number of users is sufficiently small and they are ignorant of (or >hostile to) each other and chances are none of them are going to ever >know enough about each other to make any reuse or resale possible. I think there are two kinds of reuse here. The first, which seems to be the one everyone is focusing on, is INTER-company reuse: writing software that other companies will buy and reuse on their projects. There is certainly some progress in this area (witness the Booch components from Rational's very own Grady Booch, not to mention stuff like X-windows, off-the-shelf mathematical/financial/database software, etc). But what I was specifically referring to in my original post was INTRA-company reuse: reuse from project to project within the same company. And here is where my comments about companies not thinking more than one fiscal quarter into the future apply. I've seen companies that are almost exclusively in the business of writing air defense systems write each new such system from scratch. This is clearly nuts, not to mention extremely expensive, but so it goes. -- * The opinions expressed herein are my own, except in the realm of software * * engineering, in which case I borrowed them from incredibly smart people. * * * * Rational: cutting-edge software engineering technology and services. *
diamond@jit345.swstokyo.dec.com (Norman Diamond) (04/12/91)
In article <2238@media01.UUCP> pkr@media01.UUCP (Peter Kriens) writes: >What I could dream of is a product like that where hundreds of companies >deliver standard libraries for (~rwell Smalltalk would be great, but >C++ would be nice too) C++. So you bought the CD for $25 or something like >that, then when you needed a reusable component you just paid what you needed. >... Would a product like that be feasable? I think not really. When one customer purchases the decryption key, 30 pirated copies will be made. You might as well deliver plaintext source to begin with. Also, since the code on a CD would likely become obsolete, it might be better to allow FTP access for a fee. However, the pirating problem remains unchanged. -- Norman Diamond diamond@tkov50.enet.dec.com If this were the company's opinion, I wouldn't be allowed to post it.
johnson@cs.uiuc.EDU (Ralph Johnson) (04/13/91)
In article <3318:Apr705:51:2391@kramden.acf.nyu.edu>, brnstnd@kramden.acf.nyu.edu (Dan Bernstein) writes: |> |> The problem in software today isn't code that's written once. As you |> observed, it is absolutely pointless to take a unique section of code |> and make it reusable---or even to start by writing it reusably. |> |> But as soon as the code is written twice, it should never have to be |> written again. As soon as you see that you're *reusing* software, you go |> back, make the original *reusable*, and then *reuse* it. Any competent |> programmer will assume that what he uses twice, he'll use again, and so |> he'll put in the extra effort so that it's easy to use. I agree that you should never try to write reusable software unless you have already written the software once. It takes a lot of experience with the application domain to understand what abstractions are important, There are a few areas, such as data structures, parsing, and now user interfaces, where there is a lot of community experience and you can learn about the application domain from books, but that is not common. The right way to develop reusable software is to generalize from a couple of non-reusable versions. However, I disagree that this solves the problem. Often it is not the components (i.e. subroutines or data structures) that you want to reuse, but higher level patterns and the overall architecture of the program. It is difficult to detect these patterns and to abstract them successfully. Putting it another way, you are never going to get InterViews by simple rewriting of X-based programs. In any case, my experience (and that of many others) is that you have to reuse software two or three times (in addition to the one or two times that it took to recognize its value in the first place) before all the "reusability bugs" are out. Many corporations have recognized the value of reusable software and are developing their own libraries. Sometimes this is the best strategy, especially for narrow application domains in which they have, and want to keep, a dominant position in the marketplace. However, a lot of what is being put in these libraries is the same as what everybody else is putting in. We would be a lot better off developing industry standard packages that students could learn, to minimize the cost of retraining new programmers, and to reduce the overall cost of software. There is a lot of reuse going on within single companies, but the marketplace for reusable software is not nearly as large as lots of people thought it would be. Is the marketplace for reusable software destined to be small? Ralph Johnson -- University of Illinois at Urbana-Champaign
marc@dumbcat.sf.ca.us (Marco S Hyman) (04/14/91)
In article <1991Apr12.182420.18587@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) bemoans: > Is the marketplace for reusable software destined to be small? Possibly, Ralph, but not for the reasons you give. I am constantly amazed at the number of re-implementations of standard library functions I see in C code. (Especially the number of broken re-implementations of bsearch.) If today's programmer (excuse me -- software engineer) can not learn what simple functions exist in today's standard C library how can we expect them to learn entire inheritance trees from multiple sources in the reusable software world of tomorrow. I can foresee a time when problems are being solved yet one more time simply because the programmer doesn't know that a tried solution is available. (Hindsight is usually 20/20.) IMHO the real question is one of training and indexing. Training to look for an existing solution first. Indexing to find the solution once you've decided to look for it. With current methods too many find it easier to just solve the problem again. -- // marc // home: marc@dumbcat.sf.ca.us pacbell!dumbcat!marc // work: marc@ascend.com uunet!aria!marc
EGNILGES@pucc.Princeton.EDU (Ed Nilges) (04/15/91)
In article <291@dumbcat.sf.ca.us>, marc@dumbcat.sf.ca.us (Marco S Hyman) writes: >In article <1991Apr12.182420.18587@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) bemoans: > > Is the marketplace for reusable software destined to be small? > >Possibly, Ralph, but not for the reasons you give. I am constantly amazed at >the number of re-implementations of standard library functions I see in C >code. (Especially the number of broken re-implementations of bsearch.) If >today's programmer (excuse me -- software engineer) can not learn what simple >functions exist in today's standard C library how can we expect them to learn >entire inheritance trees from multiple sources in the reusable software world >of tomorrow. Usually re-implementations of existing library functions are the result of ignorance of what's available, but not always. In the past, not all C compilers came with a complete library and you may be looking at code written in an environment lacking bsearch. The best course would be to replace the re-implementation with the Real Thing, but the re-imple- mentation may have features on which the rest of the code depends or worse it may have bugs on which the rest of the code depends. We badly need a "Programmer's Desk Reference." This would be a book and perhaps an accompanying compact disk which would list languages, compilers, tools and (on the model of the Physician's Desk Reference) their interactions and contraindications. However, in the existing world, such a tool is not likely to be made available. This is because although some company can publish such a book, PART of the authoritative nature of the Physician's Desk Reference was the willingness of physicians and the public to accept it as a neutral authority. I claim that any company publishing a Programmer's Desk Reference will be perceived as biased towards some way of developing software even if it does not have a bias. There is a refreshing consensus right now on the value of C as a programming language, but even C is not The Language of the Gods. The proponents of C++ claim that this language is better and I view REXX as the dark horse of the Nineties, and C is genuinely technically inferior to these languages...perhaps also to Modula and to Oberon. The train will be standing at Babel for the foreseeable future. It's popular nowadays to go to industrial history for software paradigms, but ripping paradigms out of historical context is dangerous. The medical profession as we know it today only arose in the 19th century (my own father was a neurosurgeon who studied under a man who studied under the first neurosurgeon, Cushing of Boston.) It arose in a Progressive matrix in which people were able to believe that a man who sold you Science and Truth was doing so out of an altruistic desire to Serve Mankind (the very sexism of my phraseology dates it, doesn't it?) Nowadays, when a person tries to sell us a programming language, we ask what's in it for you? Professor John Conway on our math department here at Princeton claims he's had to prove theorems many times because he FORGETS he proved them before. Perhaps the excellent programmer of the future will be a skilled reinventor of the wheel, able to create libraries from the ground up in the manner of a barn-raising on the frontier. Perhaps she will be assisted by programming languages powerful enough to do this, and the benefit will be that she won't have to worry about reusing someone else's bugs. I am not saying that this will be so and that it is not a good thing to use the library function whenever possible. But skilled programmers are skilled at BOTH reusing code AND creating reusable libraries: not just the former. In the world of REXX, IBM has just released the ability to support pipes in the manner of unix when this could have been done ten years ago, and the pipe tutorial lauds something called "pipethink". This Orwellian word means that programmers will ALWAYS reuse code, and I believe it is deskilling. "Pipethink" will create programmers good at fitting together confusing pipe expressions which may (or may not) do a particular job, but able to survive ONLY in environments where (1) all the tools are in place and (2) all of the tools work as advertised. Reusability AND the ability to make things reusable are both attributes of the skilled programmer!
objtch@extro.ucc.su.oz.au (Peter Goodall) (04/15/91)
pkr@media01.UUCP (Peter Kriens) writes: Hi Peter, [...] >Ofcourse that would mean distributing source code. But I think that it should >be possible to distribute non commented, symbol replaced C code, jus the way >like a lot of programmers write. Would a product like that be feasable? And >if so how much could you charge, and how many people would be interested? >Peter Kriens >pkr@media01 Digitalk has provided a Smalltalk specific type of Dynamic Link Library which allows distribution of Smalltalk classes (and data) with Souce code missing, available or restricted. I think that this is a particularly powerful tool. Have a look folks! As an aside have a check out the workload difference in programming a MS Windows user interface in C++ and Smalltalk/V windows. I'm only going to use C++ for systems programming and primitives, forget writing an application. Peter Goodall -- Peter Goodall | INTERNET:
objtch@extro.ucc.su.oz.au (Peter Goodall) (04/15/91)
pkr@media01.UUCP (Peter Kriens) writes: >Ofcourse that would mean distributing source code. But I think that it should >be possible to distribute non commented, symbol replaced C code, jus the way >like a lot of programmers write. Would a product like that be feasable? And >if so how much could you charge, and how many people would be interested? >Peter Kriens >pkr@media01 Digitalk has Smaltalk specific DLLs available for your use now! You can include code and/or data. Source can be missing restricted or available. This is very powerful stuff! -- Peter Goodall | INTERNET:
sakkinen@jyu.fi (Markku Sakkinen) (04/16/91)
In article <12676@pucc.Princeton.EDU> EGNILGES@pucc.Princeton.EDU writes: (Sorry, I am commenting on a small side issue of the long article.) >There is a refreshing consensus right now on the value of C as a >programming language, but even C is not The Language of the Gods. What consensus? If I have an approximately correct picture of American school grading, perhaps the name of the language is well chosen. And I think C is really more suited for Gods (and daemons) to program in than humans. Markku Sakkinen Department of Computer Science and Information Systems University of Jyvaskyla (a's with umlauts) PL 35 SF-40351 Jyvaskyla (umlauts again) Finland SAKKINEN@FINJYU.bitnet (alternative network address)
frank@grep.co.uk (Frank Wales) (04/16/91)
In article <12676@pucc.Princeton.EDU> EGNILGES@pucc.Princeton.EDU writes: >We badly need a "Programmer's Desk Reference." I'd love one. Thanks for offering to put it together. ;-) >However, in the existing world, such a tool is not likely to be made >available. This is because although some company can publish such a >book, PART of the authoritative nature of the Physician's Desk Reference >was the willingness of physicians and the public to accept it as a >neutral authority. I claim that any company publishing a Programmer's >Desk Reference will be perceived as biased towards some way of developing >software even if it does not have a bias. I think this fear is overstated; I'd lay you money that aromatherapy, homeopathy and other fringe stuff don't feature large as recommended treatments in the PDR. There's as much a mainstream in medicine as in software, although software's is maybe more Mississippi-like. An alternative example is the position of Encyclopaedia Britannica as the canonical general knowledge reference; it has its biases and problems, but it's still tremendously valuable nonetheless. >Perhaps the excellent programmer of the future will be a skilled >reinventor of the wheel, able to create libraries from the ground >up in the manner of a barn-raising on the frontier. I do hope not; I've written enough low-level bootstrap code for n lifetimes already. Don't ask about list and table stuff. :-( >Perhaps she will be assisted by programming languages >powerful enough to do this, and the benefit will be that she won't >have to worry about reusing someone else's bugs. Any re-invention must include re-inventing bugs; unless you're advocating the Holy Grail of programming languages, so "powerful" (do you mean expressive?) it prevents you from writing wrong programs. [I don't think you are -- I'm just checking :-).] >But skilled programmers are skilled at BOTH reusing code >AND creating reusable libraries: not just the former. Definitely. The twin legacy of good programming is both useful approaches to development and useful code for re-use. -- Frank Wales, Grep Limited, [frank@grep.co.uk<->uunet!grep!frank] Kirkfields Business Centre, Kirk Lane, LEEDS, UK, LS19 7LX. (+44) 532 500303
rh@smds.UUCP (Richard Harter) (04/18/91)
In article <291@dumbcat.sf.ca.us>, marc@dumbcat.sf.ca.us (Marco S Hyman) writes: > In article <1991Apr12.182420.18587@m.cs.uiuc.edu> johnson@cs.uiuc.EDU (Ralph Johnson) bemoans: > > Is the marketplace for reusable software destined to be small? > Possibly, Ralph, but not for the reasons you give. I am constantly amazed at > the number of re-implementations of standard library functions I see in C > code. (Especially the number of broken re-implementations of bsearch.) If > today's programmer (excuse me -- software engineer) can not learn what simple > functions exist in today's standard C library how can we expect them to learn > entire inheritance trees from multiple sources in the reusable software world > of tomorrow. There is much to what you say. However... There is a general problem for the writers of portable code that standard C libraries aren't standard across the universe of platforms that support C. Someday, maybe, all vendors will supply a standard C with standard libraries. In the meantime is it memcpy or bcopy? Strings.h or string.h? Etc. In fairyland all vendors are ANSI and POSIX compliant and you can write portable C programs using standard libraries that compile, link, and execute correctly. Meanwhile back in the U.S. of A. in 1991 life for software developers who develop code that runs across a multiplicity of platforms is (most unfortunately) simpler if you roll your own. A side benefit is that you don't get unpleasant little surprises from bugs in vendor supplied library routines. [Instead you get to invent your own.] I not disagreeing, mind you. Re-implementing basic algorithms is a waste of time and effort. However it does point out that reusable code must either be available in complete source, self-contained source code or as part of a standard implementation that is actually standard. -- Richard Harter, Software Maintenance and Development Systems, Inc. Net address: jjmhome!smds!rh Phone: 508-369-7398 US Mail: SMDS Inc., PO Box 555, Concord MA 01742 This sentence no verb. This sentence short. This signature done.
jls@rutabaga.Rational.COM (Jim Showalter) (04/18/91)
%What consensus? If I have an approximately correct picture of %American school grading, perhaps the name of the language is well chosen. You do, and it is. %And I think C is really more suited for Gods (and daemons) to program in %than humans. Not gods--idiot savants. -- * The opinions expressed herein are my own, except in the realm of software * * engineering, in which case I borrowed them from incredibly smart people. * * * * Rational: cutting-edge software engineering technology and services. *
marc@dumbcat.sf.ca.us (Marco S Hyman) (04/20/91)
In article <396@smds.UUCP> rh@smds.UUCP (Richard Harter) writes: [my comments on programmers who don't know what's in the standard libraries deleted.] > There is a general problem for the writers of portable code that standard > C libraries aren't standard across the universe of platforms that support > C. Someday, maybe, all vendors will supply a standard C with standard > libraries. Several people have pointed out that bsearch was not the best example for me to use since it's not in everyone's "standard" library. True. I'll use another example. More than once I've had to show people developing software on UNIX platforms and using vi as their editor how to use the ctags command because I got frustrated watching them constantly escape to the shell and run grep to find what file a function was defined in. Apparently none of them ever made it through the letter C in the man pages. If these programmers were too lazy to learn their own programming environment what makes anyone think they will read the library manuals? Portability is not the issue here. More libraries just leads to more documents not being read. -- // marc // home: marc@dumbcat.sf.ca.us pacbell!dumbcat!marc // work: marc@ascend.com uunet!aria!marc
jimad@microsoft.UUCP (Jim ADCOCK) (04/21/91)
In article <1991Apr16.123527.2854@jyu.fi> sakkinen@jytko.jyu.fi (Markku Sakkinen) writes: |In article <12676@pucc.Princeton.EDU> EGNILGES@pucc.Princeton.EDU writes: | |(Sorry, I am commenting on a small side issue of the long article.) | |>There is a refreshing consensus right now on the value of C as a |>programming language, but even C is not The Language of the Gods. | |What consensus? If I have an approximately correct picture of |American school grading, perhaps the name of the language is well chosen. |And I think C is really more suited for Gods (and daemons) to program in |than humans. I don't know about a "consensus" or not, but I try to keep an honest picture in my mind about the relative size and importance of various products in the marketplace -- including the relative market impact of various languages. I do this by performing various kinds of primary source numeric studies. For example, below find some word-hit-counts and document-hit-counts based on searching the Computer Select database for various computer language names. [The Computer Select database is a monthly CD-ROM based database that contains full text from 40 of the most popular programming journals, as well as abstracts from 110 others. In addition is contains product information on thousands of software and hardware products. If you haven't checked it out yet -- I strongly recommend it] journal articles software products hit-counts: #words #articles #words #product-descriptions C 21482 6507 7956 6922 C++ 3111 578 178 117 Ada 2322 510 334 174 Pascal 2284 772 1809 1635 Cobol 1850 633 3814 3459 Fortran 1364 558 2193 1925 Smalltalk 741 212 15 11 Modula 665 112 87 62 Objective-C 186 40 14 7 Eiffel 158 34 1 1 Oberon 28 3 0 0 Modula 3 20 4 0 0 [Caveat: these are raw numbers from my hit searches. In the case of "C" only, the "C" word is such a small word that about half the total hits represent mis-hits -- articles for example, where the "C" word doesn't refer to the "C" programming language, but rather refers to Howard "C" Smith, or the like. [So you may want to mentally divide the "C" numbers by about 2]] Statistics can be interpreted many ways by many people. I leave it to the reader to get what they want out of these numbers. Below are *my own personal* conclusions: ---- C really is the dominant programming language for today -- but not so dominant that a "consensus" could be said to have formed behind it. C++ is the dominant "object oriented" programming language. *Some day* there really are going to be "Object Oriented" Cobol and "Object Oriented" Fortran compilers [because the market is big enough that *someone* is going to do it] To date there's still more talk about object-oriented programming than software products using it. [IE OOP is still not a mainstream programming approach] Some well-known OOPLs aren't going to garner enough market-share to make them a commercial success. Programmers would do well to choose an OOPL that stands a chance of making the cut. [Just because your favorite language above doesn't have large numbers doesn't necessarily mean that its failing -- if its a language that's only come out in the last year or two, it could simply mean that that language hasn't caught on yet] --- [If your favorite language isn't in the above list, its simply because I did not think of it while compiling the above numbers. All languages that I did search on are included in the above list]
jls@rutabaga.Rational.COM (Jim Showalter) (04/23/91)
Word counts are quasi-useless. A two paragraph article announcing yet-another dinky routine on a UNIX platform is hardly of the same importance as a paper on a successful delivery of a 2 million line of code Ada program on time and under budget. -- * The opinions expressed herein are my own, except in the realm of software * * engineering, in which case I borrowed them from incredibly smart people. * * * * Rational: cutting-edge software engineering technology and services. *
dlw@odi.com (Dan Weinreb) (04/28/91)
In article <293@dumbcat.sf.ca.us> marc@dumbcat.sf.ca.us (Marco S Hyman) writes:
If these programmers were too lazy to learn their own programming environment
what makes anyone think they will read the library manuals? Portability is
not the issue here. More libraries just leads to more documents not being
read.
That's a very good point. I'd like to extend it. I was one of the
first users of the original Emacs at MIT. When Emacs was first
gaining popularity among some people, other people frequently objected
to Emacs, saying that its biggest problem was that it "had too many
commands". Now, there was no need for any user to learn all of those
commands, and certainly no need to learn them straight away. You
could edit quite reasonably using no more than 25 or so Emacs
commands, and never learn any more if you didn't want to.
The reason Emacs had so many commands is that it contained a large
library of reusable functionality. Some users liked this a lot, and
learned quite a few of the commands. But it was very interesting to
see how others never bothered, and some were actually put off by their
presence.
Your comments above made me realize that there may be a useful analogy
between this phenomenon and the issue of large reusable code
libraries.
It takes time to learn how to use a reusable library. You have to
read the documentation, and try it out a bit, and get some experience
and familiarity. All this is a like capital investment: you have to
spend time directed not towards your immediate objective, with the
idea that over the long run, you'll be paid back many times over. So
you have to be convinced that the library is worth the effort of
learning it. But it's often very hard to know in advance how hard the
library will be to learn, and how much trouble it will save you.
Sure, when you know that you need to solve linear equations, and
there's a library routine lying around that's well-debugged and
numerically stable, you'll know. But it's not always so obvious.
It's also a matter of preference. I like learning to use reusable
software and functionality; the learning itself is fun. Not everyone
feels that way. And when I'm in a hurry and under pressure, I
sometimes don't feel that way.
The real point is that making libraries that will really be accepted
and used is not only a matter of the actual writing of the software,
and the software technology (such as parameterized types), even though
these things are quite important. You also have a lot of real-world
human issues to deal with in order to make these things easy and
enticing and so on. I hope we'll all learn more about how to succeed
in these matters as well.