From: Gregory Seidman Date: 2006-05-04T01:39:51+09:00 Subject: Re: Sharp knives and glue On Thu, May 04, 2006 at 12:22:20AM +0900, kate rhodes wrote: } Just want to point out that a secondary issue has been introduced to this } conversation that makes it much harder to answer the initial question. } People started talking about large scale development projects and } enterprise this and that which are valid issues to address when comparing } ruby to other languages BUT, the question at hand is should undiciplined, } or just poor quality, programmers be handed a language as dynamic and } flexible as Ruby or something that limits their ability/options to do } stupid things, like Java or Ada? Ada, as Ed pointed out, probably is a } better choice than Java by this criteria and it is alive and well in the } defence industry. Poor quality programmers should not be paid to develop software any more than poor quality construction workers should be paid to build buildings. Anyone who isn't good at their work should either make an effort to improve or choose different work. If the goal is to learn how to program from the beginning, I think Ruby is an excellent first language. It is very readable, strongly self-consistent, and has aspects of several language paradigms. I'm using it to teach my wife, for example. If the goal is to learn discipline, the language depends on what variety of discipline one is seeking. One learns different flavors of discipline from different languages depending on the safety nets inherent in the languages. Some (certainly incomplete) examples: - C++ (and C) programming requires rigorous memory management discipline - Ruby requires discipline in consistent naming/terminology If the goal is to learn design, any language will do. Some languages have better constructs than others (e.g. Ruby modules vs. C++ namespaces vs. Java packages), but high-level design is largely language-independent. If the goal is to collaborate with other developers, especially many teams of other developers, languages like C#, Java, and C++ have good constructs to keep people from stepping on each others toes. It requires more rigorous discipline to develop Ruby code collaboratively, particularly in that there is less facility for automated tools to warn of lack of discipline. If the goal is long-term maintainability, no undisciplined developer should come near the project. Maintainability is direclty proportional to the discipline involved in the development. I don't mean development process, I mean everything from coding conventions (e.g. two-space indentation, underscore-separated variable and method names) to loose coupling (e.g. minimize entry points into objects) to fine-grained namespaces (e.g. heavy use of nested modules). Even Perl code can be maintainable if there is discipline in development. There are other goals which (should) affect one's decision to use one language or another (e.g. portability), and there are usually many goals involved in any given project. It's all about using the right tool for the job. You can't even know the right tool if you don't know several languages. Start small, gain experience, and learn every step of the way is my advice. } -kate --Greg