One of the fundamental rules of user-interface design is that you can't design and build an application and then try to give it a nice interface. The interface has to be part of the initial design.
For sure you can't design an application in a vacuum, but that doesn't mean that user interface issues should creep into the application design either. The problem is that a useful application has the potential of being used in many different ways. If the design of the application is such that it is tightly integrated with a particular approach then you end up with an inflexable system that is difficult to extend and maintain.
There should be a seperation of concerns between the application (aka business logic (but that has a corporate connotation the belittles the broad range of this concepts application)) and interface. This has been a common design idiom for quite a while. I more recent times (~the last five years) communications mechanisms (e.g. CORBA, DCOM, RMI) have made it easier to exploit exactly this principle to the end of distributed applications (yes, I'm aware that distribution has been around for decades in other forms. I'm pointing out the fairly recent collaboration of a design idiom and current technologlical advances).
Smalltalk does not need generics because everything is generic! So what if Smalltalk is dynamically typed? It may be SLOW, but dynamic typing allows cool stuff like interpratation and clock constucts.
Actually my personal beef with smalltalk has nothing to do with speed. Speed is, IMHO, the most over rated and mis-optimized thing in programming. If programmers (myself included, I've been a hacker since the early days when speed mattered. Those habits die hard) paid more attention to the usability/productivity/efficiency of the system and less to how quickly routine n could run through the CPU then perhaps we would be using better designed applications that allow us to get a task done in three steps that are CPU wasteful but complete the task more quickly than 5 steps of highly optimized code.
I think as a community there is a lot of focus on the wrong issues.
Woops, I'm ranting. To get back to your point about dynamic typing.
My beef is that it turns application users into testers. The axiom 'you can't test quality into a system' is amplified by anything that takes the typing out of the language and relies more heavily on either the programmers skills or fanatical testing to find problems in the system.
Since programmers aren't smart enough to grok (in the strong sense of the word) the complexity of anything but the most trivial application the responsibility falls on the test team to provide really exceptional coverage in their tests. That never happens (see the axiom above) so the user ends up finding significant problems, often after the system has been deployed.
The only power of C++ is that it runs faster since you compile directly to the native OS byte code. Other than that, it's just an imperative language with OO built on top of it.
That isn't the only power. Two other significant ones are:
1) You can get a stable, standard compliant c++ compiler for just about any platform. Java is still an infant.
2) Java lacks any concept of genericity and Smalltalk lacks typing. I don't care to get into a fundementals of OO here since most people aren't interested, but for people who value the chance to have the compiler find many of their blunders and value the ability to express code in a generic fashion C++ is currently the only game in town.
Having said that I program in Python and Java regularly and Smalltalk with less frequency. IOW, I'm not a language bigot claiming that C++ is that ultimate hammer, but I wanted to correct the statement that the speed of a compiled language is its only advantage to using it.
Wanted to thrown in my vote on the MS keyboard. I have three old ones and one new one. After a small period of adjustment I find that I prefer the new one and am going to upgrade.
I haven't had problems with sticky keys that another/.er mentioned.
I do find that I have worn out my old ones though, and in a shorter time than I find acceptable. The old ones, without exception, are now requiring harder keystrokes and feel generally worn.
I like the new cursor keys a lot. I don't have small hands, but I like anything that is large enough to hit reliably and small enought to reduce finger stretching. I find the new key's to match that test.
Someone mentioned mice also. I like the MS mouse a lot, and use them on the machines that I use right handed. I found a few years ago that switching from my preferred left handed only mode to a mixed mode of mousing made a huge difference in my level of pain. Problem is MS doesn't make a left handed mouse.
For sure you can't design an application in a vacuum, but that doesn't mean that user interface issues should creep into the application design either. The problem is that a useful application has the potential of being used in many different ways. If the design of the application is such that it is tightly integrated with a particular approach then you end up with an inflexable system that is difficult to extend and maintain.
There should be a seperation of concerns between the application (aka business logic (but that has a corporate connotation the belittles the broad range of this concepts application)) and interface. This has been a common design idiom for quite a while. I more recent times (~the last five years) communications mechanisms (e.g. CORBA, DCOM, RMI) have made it easier to exploit exactly this principle to the end of distributed applications (yes, I'm aware that distribution has been around for decades in other forms. I'm pointing out the fairly recent collaboration of a design idiom and current technologlical advances).
Actually half the people are dumber than the median value, not the average.
The two are very close in even distributions though. If that was your point then I retract my comment. Many people confuse the two statistics though.
According to my dictionary irregardless is a word.
/. though. Where else is this pedantic mess such fodder!
"The ignorant form of regardless"
Gotta love
Not a book, but Liz Kendall has written some really wonderful stuff on the subject. Check:
http://www.cse.rmit.edu.au/~rdsek/
Especially the layer agent pattern.
Actually my personal beef with smalltalk has nothing to do with speed. Speed is, IMHO, the most over rated and mis-optimized thing in programming. If programmers (myself included, I've been a hacker since the early days when speed mattered. Those habits die hard) paid more attention to the usability/productivity/efficiency of the system and less to how quickly routine n could run through the CPU then perhaps we would be using better designed applications that allow us to get a task done in three steps that are CPU wasteful but complete the task more quickly than 5 steps of highly optimized code.
I think as a community there is a lot of focus on the wrong issues.
Woops, I'm ranting. To get back to your point about dynamic typing.
My beef is that it turns application users into testers. The axiom 'you can't test quality into a system' is amplified by anything that takes the typing out of the language and relies more heavily on either the programmers skills or fanatical testing to find problems in the system.
Since programmers aren't smart enough to grok (in the strong sense of the word) the complexity of anything but the most trivial application the responsibility falls on the test team to provide really exceptional coverage in their tests. That never happens (see the axiom above) so the user ends up finding significant problems, often after the system has been deployed.
That isn't the only power. Two other significant ones are:
1) You can get a stable, standard compliant c++ compiler for just about any platform. Java is still an infant.
2) Java lacks any concept of genericity and Smalltalk lacks typing. I don't care to get into a fundementals of OO here since most people aren't interested, but for people who value the chance to have the compiler find many of their blunders and value the ability to express code in a generic fashion C++ is currently the only game in town.
Having said that I program in Python and Java regularly and Smalltalk with less frequency. IOW, I'm not a language bigot claiming that C++ is that ultimate hammer, but I wanted to correct the statement that the speed of a compiled language is its only advantage to using it.
Wanted to thrown in my vote on the MS keyboard. I have three old ones and one new one. After a small period of adjustment I find that I prefer the new one and am going to upgrade.
/.er mentioned.
I haven't had problems with sticky keys that another
I do find that I have worn out my old ones though, and in a shorter time than I find acceptable. The old ones, without exception, are now requiring harder keystrokes and feel generally worn.
I like the new cursor keys a lot. I don't have small hands, but I like anything that is large enough to hit reliably and small enought to reduce finger stretching. I find the new key's to match that test.
Someone mentioned mice also. I like the MS mouse a lot, and use them on the machines that I use right handed. I found a few years ago that switching from my preferred left handed only mode to a mixed mode of mousing made a huge difference in my level of pain. Problem is MS doesn't make a left handed mouse.
C is the speed of light in a vacum. What light does in gas, water or Bose-Einstein condensates is of zero consequence to relativity.