What I Hate About Your Programming Language
by chromatic05/12/2003
Author's note: based on voluminous comments, I've clarified a few places where my original intent was unclear. Thank you all for the feedback!
At a very high level, all programming languages are similar. They all require you to describe a problem to solve. They all require similar skill sets — a good programmer in one language will find his or her skills will transfer to another language.
Of course, at a practical level, there are important differences between languages. Different language families make certain techniques easier than others. You'd rarely be able to write a useful procedural program without any variables, but it's common in functional languages. Expressing a logic problem in terms of objects and classes will require a different approach than that of an imperative language.
Setting aside those differences and looking at the popular languages for open source development today, there are many syntactic and otherwise superficial differences. At one level, all languages have a philosophical axe to grind. They exist for a reason. At another level, they're all just flipping bits and jumping around in a long chain of ones and zeroes.
Everything in between is a matter of taste, and that's where most of the messy details go.
Language Philosophy
The philosophy of the language designer shapes the language, its libraries, its ecological niche, and its community. Pascal was a teaching language. C is portable assembly. Lisp syntax is very much s-expressions. Perl is expressive glue.
Consider what happens when someone proposes a great new language feature. There are several possibilities; the language designer may reject it outright, saying that it doesn't fit in the language. (That leaves the door open for someone to write or modify the compiler or parser to support the feature.) The designer might include it in the language by adding a new keyword or by making some other change to the core functionality. The designer might suggest it's better made available through some extension mechanism, such as being added to a core library or an optional library.
Of course, a language with general-purpose features has a way of escaping its original ecological niche. That's why some people use PHP on the command line, server-side JavaScript, and even C for network applications.
To summarize, languages often embody a philosophy. If successful, they're used in domains that the original designer may not have intended. They're often extended in ways the original designer may not have intended. (That's probably a mark of success.) Do these facts suggest any way to evaluate a language's goodness?
Language Goodness
Deciding a language is "good" or not is largely a matter of personal taste.
I prefer dynamic typing and don't care much for the static typing found in C
and its descendants. Part of that is personal taste — it feels like
premature optimization to decide that a variable will always fit into eight or
16 bits. (Yes, I know judicious typedefs can lower some of the
maintenance costs.) It's also practical; I don't write a lot of code that
would benefit from static checking. (A buddy writes drivers at a semiconductor
company. Static checking saves him time and effort.)
Barring the issue of personal preference, we're still left with rather
subjective criteria. Within a domain, it's worth analyzing a language by how
well it solves your problem. I'd hate to write a CGI application in straight
vanilla C; I'd go crazy trying to manipulate strings. On the other hand, there
are amazingly accomplished C hackers writing web programs like
mod_virgule. Familiarity with and fluency in a language are very
important.
It's also worth asking how often the language gets in your way. I once wrote a program to send out update notifications when a web page had changed. My original program was a 10-line shell script running on a Unix box. For various reasons, the final version was a couple of hundred lines of Java running on a Windows machine. Granted, my Java wasn't so hot, but the shell script just glued together existing Unix commands.
Another good question to ask is how well the language supports writing good and maintainable programs. I don't really mean that a language that enforces literate programming is necessarily better than a language that doesn't require you to declare variables. On the other hand, support for lexical variables, encapsulation, reusable components, and other good programming techniques certainly make it easier to keep using a program. This can be taken too far; a language that could prevent really, really bad programmers from doing really, really stupid things probably wouldn't be useful for much else.
It's reasonable to consider a language's supplementary virtues. Can you imagine programming in Smalltalk without using the browser? Would anyone use Java without the class libraries? I suspect if I got used to a good IDE, I wouldn't notice the pain of a strong static language as much — that's worth keeping in mind. Where would Perl be without the CPAN? Can a good user community keep people using an otherwise mediocre language? You bet.
Beyond these criteria, it's really hard to come up with a set of guidelines that make a good language. It's hard to judge the suitability of a language without practical experience in it — where pointer arithmetic is familiar to a C hacker when manipulating arrays, it's terribly unidiomatic in a language with queues and stacks as available data structures.
Besides that, the general purpose languages are all reasonably equivalent. It's not difficult to solve many of the same kinds of problems in any language. Given a good set of libraries, some experience using them, and a good IDE if necessary, a competent programmer could write an equivalent program in several different languages with roughly the same amount of work. Consider how many of the programs written today do one of the following:
- Manage a web site.
- Control a small GUI application.
- Put stuff in a database, process it, display it, and update it.
Even for more difficult tasks, decent languages tend to allow you to use existing libraries for trickier tasks like very fast XML parsing. C is really the language of the Empire, for better or worse. If there's a C library that does what you want and the language lets you use it, you're at least halfway there.
What's left? It's largely a matter of taste. That's where the friction comes in. Maybe personal taste is a poor reason for choosing a language, but it's a major reason for creating a new language. Language philosophy is subjective enough that it might as well be personal taste. Besides that, the first things a new user will notice about a language are syntax issues — where the language philosophy is most evident.
Language Badnesses
Of course, choosing any one language for a project often means not choosing another language; sometimes that's the most compelling reason. I've had projects where a manager said, "We're going to use language X because that's what VCs expect us to use," where language X was, in my opinion, the wrong choice.
Going further, differences in language philosophy present a barrier to learning new languages. This doesn't just apply to existing programmers. It also applies to new programmers — learning to think like a programmer is difficult enough without bothering with syntax issues, editors, compilers, linkers, and distribution.
In the spirit of demonstrating language subjectivity, here are several of my opinions on popular programming languages I've used and how I feel about them. They're completely subjective. They don't bother everyone. What I dislike about one language may be something you love. That's fine.
What I Hate About Perl
The syntax for working with anonymous data structures and structures by reference is ugly:
use constant HACKERS => 2; my $count = keys %{ $self->{groups}[HACKERS] };Writing extensions in C can be Byzantine. Perl's internals are full of macros. Sometimes they make life easier; other times, they hide a lot of complexity that you really should know. XS is a hybrid of Perl macros, Perl, and C, and it can get quite complex. Inline can't always protect you from that.
What I Hate About Python
The special case syntax for constructing a one-element tuple has always bothered me; the trailing comma seems unPythonic.
Half-hearted closure support means that enclosed lexicals cannot be modified. I could emulate real closure support with objects, but sometimes the functional solution feels more natural.
The whitespace issue isn't a big deal (I use a good text editor), but I've spent too long debugging make files to be comfortable with invisible-yet-syntactically-significant characters. Python does have the advantage that it doesn't dictate how much whitespace to use, but I'm still leery of issues with copying and pasting code from a web browser or a newsreader.
What I Hate About Ruby
The sigils that mark instance and class variables always stick out visually in an otherwise clean language.
The available English documentation is still exceedingly slim, compared to Perl and Python.
What I Hate About PHP
I seem to run into lots of special-cased features. For example, I always seem to try
new dir( $path )instead ofdir( $path ).There's no namespace support yet, and I've never liked name mangling to get around this.
What I Hate About Java
The inconsistencies between what the language allows and what the standard library actually does bother me. If operator overloading is so bad, why does the
Stringclass do it?Interfaces get around part of the lack of multiple inheritance, but I'd like to be able to reuse common code in ways besides inheritance. Mixins that don't require inheritance would be a nice touch.
The libraries and the interpreter aren't cleanly separated. There are ways (involving decompilers), for example, to get regex support in 1.3, but I'd prefer to upgrade the standard library and the interpreter separately sometimes, rather than in one big chunk.
I like the idea of checked exceptions in some situations, but forcing every method to deal with (catching or throwing) all exceptions that its child calls or may call can be tedious. I'd rather be able to ignore an exception and let it propagate upwards. Sometimes, I'd rather not worry about exceptions at all.
What I Hate About C
It's often used inappropriately. Unless I'm writing a kernel, a device driver, a virtual machine, or an interface to a C or C++ library, writing in C is a probably premature optimization.
Thirty years of growth and patches to the standard library have produced many, many similar functions with similar, terse names. Quick, Unix coders, what are the differences between
execl,execlp,execle,execv, andexecvp? If you're not using these every day, you'll be hittingman 3 execwhenever you see them.
What I Hate About C++
I find the template syntax ugly. I have no idea how to make it more beautiful, though.
It feels funny to add code that does nothing to prevent the compiler from helpfully adding code that does the wrong thing. Consider the default copy constructor, for example.
What I Hate About JavaScript
Okay, I really don't hate very much about JavaScript. It's pretty good for manipulating DOM elements, and I really like bookmarklets. Working around browser bugs and incompatibilities scarred me for life, though.
What I Hate About XSLT
I'm familiar with functional programming, but XSLT still feels more theoretical than practical. I really understand the benefit of not having to write yet another language parser, but programming in XML, by hand, feels really wrong. Maybe using a better tool would help.
What I Hate About SQL
The extensions I find most useful for a database generally aren't portable to other databases.
The approach that feels most natural is often really, really bad. I don't naturally think in terms of set operations.
Acquired Tastes
These are my preferences, based on the kind of work I've done and continue to do, the order in which I learned the languages, and just plain personal taste. In the spirit of generating new ideas, learning new techniques, and maybe understanding why things are done the way they're done, it's worth considering the different ways to do them.
The Pragmatic Programmers suggest learning a new language every year. This has already paid off for me. The more different languages I learn, the more I understand about programming in general. It's a lot easier to solve problems if you have a toolbox full of good tools.
I've learned several new techniques from branching out. For example, Ruby supports mixins with surprising ease. It's a natural way to solve certain problems where you might otherwise use a Decorator pattern. Seeing how Ruby uses mixins led me to ask how I might solve the same problem in Perl — and it's incredibly easy. It's not exactly a built-in language construct, but it's trivially easy to add, and now it's part of my standard Perl vocabulary.
Over time, my taste in languages has evolved. I used to worry about performance and variable-typing, but working with dynamic (or "agile") languages and learning to love test-driven development has biased me against strong-typing systems. Maybe learning a language like Haskell would balance my thoughts.
Every language is sacred in the eyes of its zealots, but there's bound to be someone out there for whom the language just doesn't feel right. In the open source world, we're fortunate to be able to pick and choose from several high-quality and free and open languages to find what fits our minds the best.
chromatic promotes free and open source software for O'Reilly's Open Technology Exchange.
![]() |
Essential Reading How to Keep Your Boss from Sinking Your Project Like it or not, your project needs management. Yet few good software projects can survive bad management. If you're a programmer on a high-visibility project, this PDF offers five principle guidelines for managing upward that will help you help your boss make the right decisions about setting project expectations, working with users and stakeholders, putting the project on the right track and keeping it there. The PDF also covers what problems cause projects to fail and how to fix them, and what you can do to keep your software project from running into trouble. Read Online--Safari Search this book on Safari: |
Return to ONLamp.com.
You must be logged in to the O'Reilly Network to post a talkback.
Showing messages 1 through 250 of 266.
Next Page ![]()
-
Rebol
2006-04-14 19:38:17 notchent [Reply | View]
-
OCaml
2006-09-03 05:43:34 grimo [Reply | View]
There are concrete ways to compare programming languages. Comparing syntax is not really usefull. And all programmers are always convinced that the language they use is better than others...
But you can compare the expressiveness of languages concretely, by making a list of features they have.
The most complete language I know is Objective Caml. It has almost all the features you can find in other languages, making programming really easy and concise. But the most interesting thing is that the debugging time is reduced a lot because OCaml programs have very few errors (because of the typing system).
OCaml has been written by some of the best specialists of programming languages in the world, and includes all advances in research on that field (from all the world). When you know well OCaml you really cannot go back to another language!
-
OCaml
2006-09-06 12:54:23 chromatic [Reply | View]
Thanks for the response, grimo. I agree that comparing syntax is nearly useless; that was actually half of my main point.
I haven't ever looked at OCaml, mostly because it was difficult to find English documentation when I tried. It's on my list of languages to explore someday.
-
Which language is best
2006-03-10 16:59:34 lowellD [Reply | View]
I'm one of those "retards" that uses the often slammed language called Visual Basic. I never went to programming school and I don't program professionally, but back before Windows I needed a program to do a specific task that was otherwise not commercially available. I wrote the program in QBasic because it came on the computer. Was I supposed to know any better? It was easy to learn. Why waste my time learning a bunch of wierd, non-intuitive coding conventions. The program was just for me. I never intended to sell it. But over the years many people saw the program and wanted it; more than 2000 people have purchased the program. Of course, the current version is no longer in QBasic. But is written in VB5 and has a full standardized GUI running on all version of Windows. I know VB has it limitations. Everybody seems to think the language they prefer is the best. It may be the best for what they do but not the best for what someone else does.
So, where can a layman go to get a simple straightforward comparison of the various languages? How about a comparison of useful functionality rather than technical stuff. Things like: easy to code, speed of operation, print preview, long documents with a variety of formatting, good communication with printer, connection to email and web, etc.
-
Lack of imagination wrt Perl
2005-12-29 08:55:33 mkcmkc [Reply | View]
As soon as I read "programming languages are a matter of taste", my first thought was "must be a Perl guy". :-)
The list of Perl annoyances seems awfully short. Google on "Perl Puzzles" to see a more complete list.
-
What do you hate about Forth, Lisp and APL?
2005-10-16 00:45:32 znmeb [Reply | View]
I maintain there are only half a dozen unique programming languages in the history of computing: macro assembler, FORTRAN, Lisp, APL, FORTH and SmallTalk. So ... what do you hate about those languages?
Oh ... learn a new language every year? That implies someone has to come up with a decent new language every year. I'm learning Ruby right now. I go about one language every two to three years. Before Ruby it was R and before R it was Perl.
I never did learn Python or PHP, and I don't really think I want to. And I don't think I want to learn any of the "theoretical" languages like Eiffel, Haskell, OCAML, etc. I'll stick with Lisp for that. -
What do you hate about Forth, Lisp and APL?
2005-10-28 03:09:59 adrianh [Reply | View]
<blockquote> And I don't think I want to learn any of the "theoretical" languages like Eiffel, Haskell, OCAML, etc. </blockquote>
I really quite like Eiffel, and never really saw it as a theoretical language :-) The OO model is elegant, and Design By Contract is rather effective (although less effective than TDD in my experience.)
-
What do you hate about Forth, Lisp and APL?
2005-10-27 15:41:47 chromatic [Reply | View]
Hm, good question. I don't have a lot experience with macro assembler, but if you mean what I think you mean, text substitution macros just aren't fun.
Forth (or PostScript, which I have written) has the problem that I never trained my brain to work in the stack-oriented way.
Smalltalk is nice, but its "all of the world is an image" approach really gets in the way sometimes.
I would like Lisp better if it had syntax.
It's probably worth at least exploring one of the languages in your theoretical list. I've done some Haskell programming and it's a good way to expand your mind, especially with pattern matching function signatures and currying -- even if you don't get into monads or continuations. The choices for syntax annoy me in some places though. -
What do you hate about Forth, Lisp and APL?
2005-10-28 03:19:59 adrianh [Reply | View]
Hm, good question. I don't have a lot experience with macro assembler, but if you mean what I think you mean, text substitution macros just aren't fun.
Most macro assemblers these days aren't just simple text substitutions, but have some knowledge of "syntax".
However, even basic cpp style subs are a lot more usable with assembler (back in the day when I was writing a moderate amount of 6502 code I wrote my own :-). Since there isn't as much language syntax to confuse issues you don't get half the problems that you get in C for example.
I would like Lisp better if it had syntax.
You'd like Lisp better if it had more syntax m'thinks. But then, of course, you would lose many of the advantages having a first class representation of the AST gives you.
-
JavaScript
2004-08-16 18:38:40 wickline_ora [Reply | View]
Well, maybe you don't hate JavaScript for this, but I sure do...
The decision to use '+' for both addition and concatenation was very unfortunate. JavaScript is often used to validate/manipulate HTML form element values. Those values are not typed... they're just the value in the form.
If you '+' two form values (or a form value and something else) should you be interpreted as concatenating or adding?
Far too often, I've had to do foo.value*1 to enforce numeric interpretation and therefor addition instead of concatenation.
The same applies to using the same comparison operators for both numeric and string comparison.
Would it have killed them to add a separate concatenation operator and a few string comparison operators?
-matt
-
Don't forget ToonTalk!
2004-01-04 00:20:57 anonymous2 [Reply | View]
Yeah, C is nice for some things, and Haskell beats everything else for pure elegance. But I find I write most of my stuff in ToonTalk these days. Clients are always impressed by the animated helicopters and the mouse with the big hammer, two features you don't find in very many other programming languages (not to mention Dusty the Vacuum).
See http://www.toontalk.com and especially http://www.toontalk.com/english/computer.htm and http://www.toontalk.com/english/kidsask.htm
:) :) :)
-
Instead of a comment...
2004-01-01 08:44:57 anonymous2 [Reply | View]
...here are two links:
* All languages are not equivalent: http://www.paulgraham.com/icad.html
* It's better to be able to grow a language: http://prog.vub.ac.be/~wdmeuter/PostJava/FR-Steele2.pdf
-
have a look to Rebol
2003-11-01 10:41:19 anonymous2 [Reply | View]
Rebol isn't perfect but contains a lot of good ideas
- easy to install (run-time = 1 file ~ 400K)
- simple GUI
- a lot of predefined types
=> very short code
(I created REAL apps in 50 - 100 lines)
-
Why has nobody mentioned Eiffel ?
2003-06-19 02:59:27 anonymous2 [Reply | View]
Just a thought, I wonder why no one has mentioned Eiffel ?
I think it is a great general purpose language, nice and clean (like Ada).
Have fun.
<mr_jimmybob at lycos dot co dot uk>
-
Functionnal transducer languages vs. XSLT
2003-06-05 10:19:14 anonymous2 [Reply | View]
Some new XML oriented languages can replace XSLT and its lake of usability (XML syntax is... boring).
Take a look a XDuce (http://xduce.sourceforge.net/) and CDuce (http://www.cduce.org) this are functionnal languages with an ML-like syntax and nice pattern matching features (especialy CDuce...)
-
What about AWK?
2003-05-21 10:17:36 anonymous2 [Reply | View]
I have used awk for years, and I really can't find anything to hate in it. It's not a terribly powerful language, but you can do some pretty complex things with a few awk scripts piped together.
Anybody had a bad experience with awk?
-
Beside Taste
2003-05-19 02:54:17 anonymous2 [Reply | View]
Taste is not a good criteria for choosing a language. Environment seems another one.
Considering the number of mediocre programmers you can get compared to the number of good programmers, my preference is highly biased to a language which makes it hard to make mistakes.
Also most people arround are early trained in procedural thinking. Once you have forgotten the initial pain when you first learn to press every problem in a sequence of steps it seems to be hard to learn alternative ways. Strange enough.
The pointer is still a mistery to many people and they panic when they have look at a piece of C code using pointers. It's a pitty cause sometimes pointers can be cool, expressive and efficient. But at some point it seems to require knowledge of hardware design. And isn't the world full with memory overflow vulnerabilities. I wonder if people can not make it better or don't want to.
We're doing Java on the server side and I would not like to see what happened if we did it in something different than Java. And we have been very successfully using XSLT to separate layout from function. But training people XSLT is hard.
I try to look at a new language every other year. Unfortunately commercial environments do not let you change your major project language so fast, you have to stick to a compromise.
-
My favourite languages. (Objective C, OCAML and Ruby)
2003-05-17 05:47:49 anonymous2 [Reply | View]
Hangul, Latin and French.
Only joking.
Objective C is really worth checking out. It has most of the benefits of OO, with very little syntax change over C. It lacks class variables and multiple inheritence. Class variables are not really a problem because static variables can be used in the interface declaration files. Multiple inheritance is a pain. As the java user once said to the vicar. Either way, it's also a very well documented language and the memory management side effects of the model give a very smooth ride. Apple have hit the nail on the head by applying it to Cocoa. Although strictly speaking NeXt hit the nail on the head. You should check this out if you've done Smalltalk, because it uses very similar messaging protocols.
OCAML is seldom heard of but is piece of piss to learn if you've worked with LISP or ML or any functional language really. It's extremely fast, almost as fast as C and to boot has memory management. (http://www.ocaml.org - Free book available, GPL)
Ruby; one word blocks.
-
so many languages, so little time
2003-05-15 20:18:27 anonymous2 [Reply | View]
My favorite language is BLISS, but that's not a language for people who like complicated, difficult to master languages like C, C++, etc....
Fortran may be the most important language today; a very simple language which wasn't designed to be extended so the extensions came a cost.
FORTH is another simple language that is very powerful due to its builtin bootstrap nature.
G-code, aka RS-274, is a trip back three decades - only someone who have at least a few decades in the computer industry can truely appreciate its stunted development.
I haven't really thought about it for a quite some years, but I wonder if someone has updated Jean Sammett's computer language family tree.
It seems to me that the industry has stopped exploring the nature of computer languages, problems with and using programming languages, and all the interesting computer language discussions of the 60s and 70s... -
so many languages, so little time
2003-05-20 17:15:54 anonymous2 [Reply | View]
>It seems to me that the industry has stopped exploring
> the nature of computer languages, problems with and
>using programming languages, and all the interesting
>computer language discussions of the 60s and 70s..
You might be interested in looking at http://mozart-dev.sf.net.
-
better than C
2003-05-15 10:21:27 anonymous2 [Reply | View]
I read your article with deep regret. The most useful language I know of was not mentioned. I use PowerBasic everyday.
It produces faster and smaller code than C. It can address either complex or trivial problems in a snap.
Its chief, and only, deficiency so far as I can determine, it that it has a name that is unsuitable for mass appeal.
If "PowerBasic" had been called "Snap" or "Beano" or just about anything but "Basic" it would have been the longstanding hit of programmers. But the word "Basic" carries with it an implicit insult to programmers who know their own work is anything but "basic."
There would be justification for steering clear of PowerBasic if it were anything like VisualBasic, which I find to be so dreadful that it is unusable. There might also be lingering justifications for not using PowerBasic if it contained some of the limitations of its predecessors. But in its present versions for my purposes there is only one word to describe it: "ideal."
Since this is a statement in praise of PowerBasic. I would like to be clear that I am not associated with the PowerBasic company in anyway, except to be a customer.
Ike Jeanes
Pulaski,VA
-
PHP problems?
2003-05-15 09:14:17 anonymous2 [Reply | View]
PHP 5 is slated to have namespaces included. There's no test version yet to determine how well this will work, but that should fix one of his two complaints. The other is more of just familiarizing himself with the language. I doubt this can be fixed.
-
No RPG?
2003-05-14 22:27:55 anonymous2 [Reply | View]
I did RPG-II on an IBM System/34 in high school about 11 years ago. It was /interesting/ and not fun at the same time.
I migrated from screwing around in OCL to ARexx, and now to PHP-CLI. I'm very happy where I am.
-
Re: What I Hate About SQL
2003-05-14 19:25:41 anonymous2 [Reply | View]
Yes, SQL is often thought of as Not A Real Programming Language. I think there are two types of developers: those who think naturally in sets, and those who don't. Not that one is better than the other, but I think naturally in sets, and love the logic behind that approach. I tend to solve most of my biggest problems that way.
Really, I think SQL's biggest failing is that it is not set-oriented enough, nor is it particularly expressive. That's why triggers, procedural languages, and all sorts of proprietary extensions had to be developed in the first place. C.J. Date and a few of his associates have been campaigning for a better relational language for years (based on TutorialD, or Alpha, or whatever it might be called next -- see www.thethirdmanifesto.com) -
Re: What I Hate About SQL
2005-12-29 04:29:23 Scott_Kirkwood [Reply | View]
What I hate about SQL is that it's so inconsistent:
SELECT <columns> FROM <tables> WHERE <conditionals>
UPDATE <table> SET <column>=<value> WHERE <conditionals>
INSERT INTO <table> (<columns>) VALUES (<values)
Converting an insert into an update or select is more painful than it needs to be. I'd prefer:
UPDATE <columns>=<value> FROM <tables> WHERE <conditional>
and
INSERT <columns>=<values> INTO <tables> WHERE <conditionals>
I'd also make AND interchangeable with WHERE and trailing commas would be acceptable (like in Python), for example:
SELECT
A,
B,
C,
FROM myTable
AND a > 1
AND b < 1
-
Re: What I Hate About SQL
2005-12-29 09:53:44 ababiec [Reply | View]
Don't forget you can also use a subquery instead of a values list, so I'm not sure how your example address that scenario...
INSERT INTO <table> (<columns>) SELECT <columns> FROM <tables> WHERE <conditionals>
And INSERTs don't require a columns list if the values match the column order of the table.
Never mind examples such as...
INSERT ALL
WHEN order_total < 1000000 THEN
INTO small_orders
WHEN order_total > 1000000 AND order_total < 2000000 THEN
INTO medium_orders
WHEN order_total > 2000000 THEN
INTO large_orders
SELECT order_id, order_total, sales_rep_id, customer_id
FROM orders;
-
ALGOL anyone???
2003-05-14 14:23:05 anonymous2 [Reply | View]
This was the first language that I learned after ASM and is still one of the best. I don't think it exists in the bill gates world - ????
bobh
-
You whacked to note about REXX
2003-05-14 13:52:43 anonymous2 [Reply | View]
Why?
bob hamilton
-
Ideal language: Delphi w/ Clarion influence
2003-05-14 12:56:38 anonymous2 [Reply | View]
I'd love to see a delphi language/environment with Clarion's syntax for blocks, ifs, loops, and lack of the semi-colon terminator in favor of new-line. Clarion's syntax is the cleanest I've seen for these basic elements.
Check out this Clarion code:
if x = y
! number of statements doesn't matter
SomeProc('sdf', a)
loop i = 1 to 5
p = x * i
Message('p is ' & p)
end
elsif x > 3
! all loops start with 'loop'
loop while x = 3 and SomeFunc(x)
a = b * c + sin(b+c)
Message('a is ' & a)
end
elsif y = 4 and blah
! anumericvar is converted to string
Message(anumericvar)
else
halt('aarrgh!', -1)
end
No semi-colons and you don't need begin..end in some cases and not in others. Clarion dynamically converts between strings and numbers, and, as a 'general purpose' business language, returns 0 when dividing by zero instead of throwing an error. It supports file structure and window structure declarations (in the language itself) and is a natively event-driven language, with window event loops as just another type of loop in the language syntax. Unfortunately, all these neat features are much less flexible in the long term than the library based ways of Delphi. -
Ideal language: Delphi w/ Clarion influence
2003-05-16 12:27:29 anonymous2 [Reply | View]
Sadly Delphi/Kylix (Object Pascal) is often overlooked. Perl, Ruby, etc. are all find for scripts, but in most cases, a compiiled program in a better way to do. Delphi lets you program procedurally like C, or with Objects like C++, only the union is much more natural. It prevents you from making many stupid mistakes, while allowing you 99.9% of the power C has. It borrows some syntax from perhaps better languages (Oberon, Modula, etc.), but has a much bigger and more useful standard library. (Unofficially, anyway...) -
Ideal language: Delphi w/ Clarion influence
2003-05-14 13:57:11 anonymous2 [Reply | View]
You should look at REXX.
bobh -
Ideal language: Delphi w/ Clarion influence
2003-05-16 12:40:02 anonymous2 [Reply | View]
Hi,
I've looked at REXX, and it seemed nice (I used it on Amiga and OS/2). Last I checked though, it didn't compile, and also it doesn't have nearly the standard libraries that Delphi or Java has. (At least it doesn't have the mess that C has).
One thing that's often over-looked is that diversity is great, but when people write something in a non-compiled language like PERL, the users need to have the runtime interpreter, and often, libraries installed. I find it impossible to have my linux machine without having stuff like NROFF, PERL, PYTHON, RUBY, etc., that I will never use directly. I think it's great to have diversity in languages, but I don't think we need scripting-language-of-the-week club either. Most things probably should be compiled.
-
It has never let me down... FOXPRO (VFP)
2003-05-14 10:47:16 anonymous2 [Reply | View]
Fast Development – Easy to use – Robust – Dynamic use of Databases – It keeps up with the times – Simple application deployment – Good Reference tools on the web – Strong user base – 3rd Party Add-ons – Owned by Microsoft – Can make Apps for the WEB – Low Cost – And the Fox is Cute too! ************ FoxPro VFP8 – What are you waiting for! -
It has never let me down... FOXPRO (VFP)
2003-12-02 08:40:10 anonymous2 [Reply | View]
I python, perl, plain C and VFP. VFP is a joy to code. Except for python, I have found nothing superior in the "open source" world except for python. But python is a language when vfp is a full dev. environment. MS VFP team, continue the good work.
On my dream wishlist a "dev. environment" by "good old borland" at the driving seat, python as language and wxwindows as gui.
Only dreaming:) -
It has never let me down... FOXPRO (VFP)
2003-05-14 13:12:50 anonymous2 [Reply | View]
Some one Tell me why I keep hearing VFP is going to be dropped my MS! I just got a Copy of VFP7 and its great! Now I hear that ver. 8 just came out, can it be any better? Why is VFP such the ugly duckling? -
It has never let me down... FOXPRO (VFP)
2003-05-15 06:41:48 anonymous2 [Reply | View]
VFP is great. It has its own easy to deploy runtime. You can compile to .exe. Its IDE if excellent. It is complete with the front-end user interface, middle-ware code and it's own multi-user safe & high performance database engine (desktop). BUT: M$ (aka the Borg) assimilated back in the early 90's what was then a cross platform development tool. Now M$ vision of cross platform for VFP is multiple versions of Windows. Plus M$ can not make a lot of end-user money on a product whos runtime is free.
Bej - Philadelphia. -
It has never let me down... FOXPRO (VFP)
2005-02-01 18:38:51 Nurchi [Reply | View]
Microsoft Visual FoxPro is the best.
At first (we're talking about DOS times, about late 80's, early 90's) when Ms bought FoxPro, we (programmers) thought that Ms wants to "put it under the table" (to get rid of the competitor) to develop their BASIC...
But I made a lot of stuff in VFP (I am from Southern Russia).
In less than a week, I made a program for dental clinic and went to a "conference" and won second place in our province when I was in grade 11.
VFP ROCKS.
It compiles EXE for Windows, as well as APP, which is practically platform independent. It had this feature in VFP 5.0 (around 1994-1996), and the only places you could run the APP programs were (still are pretty much) Windows and Macintosh.
But think about it on the other hand, if you are running a Windows-based server, you can put APP to run in the browser, and it (theoretically) becomes platform independent.
But I don't know why it is not used in Canada (almost) at all...
There are no jobs here for VFP programmers (Ontario, probably some in Quebec, and most of the USA only)
Anyway, f**k off, whoever doesn't like VFP.
No one forces you to use it, if you don't like it.
If someone does, find another job.
Fisual FoxPro ROCKS!!!
I am currently learning C#.
Very good language, simple, relatively powerful and platform independent (not C# alone, but the .NET environment), similar to Java (just a little), and it is cool!
The only language I would prefer other than VFP.
C/C++ is powerful, but stupid. You know, it is like using a panzer as a hammer... Powerful, but why panzer?
Anyway, good luck. -
It has never let me down... FOXPRO (VFP)
2003-11-12 11:28:55 anonymous2 [Reply | View]
M$ is trying to get people to $pend more on their SQL server systems, than to let us use FoxPro which can do it all in one package.
You're right, M$ doesn't make anything on a free runtime distribution, but they are trying to change that. Take Windoze XP for example. There are installs that won't work because they aren't registered as a M$ Logo authorized install. Thus requiring the user to have the CD available whenever the application runs. Which it works fine on all other M$ OS versions. -
It has never let me down... FOXPRO (VFP)
2003-05-14 11:04:44 anonymous2 [Reply | View]
I wholeheartedly agree. The Fox Rocks! -
It has never let me down... FOXPRO (VFP)
2003-05-14 11:25:29 anonymous2 [Reply | View]
I agree. I develop in both VB & VFP & understand both equally well. Overall, for desktop database apps. VFP is simply remarkable.
Mark Achin
-
C rules, everything else vacuums lint
2003-05-14 10:41:47 anonymous2 [Reply | View]
OOP is for programmers who aren't smart enough to know how computers really work -- or who know how computers work, but are too lazy to care how much they abuse the cache, memory usage, etc.
C -
C rules, everything else vacuums lint
2003-05-25 09:37:07 anonymous2 [Reply | View]
You're an idiot.
C is just an abstraction built on abstraction built on abstraction .. As suggested by the responses already posted to your comment, you can drill down as deep as you want. Simply because someone uses OOP doesn't mean they don't understand how computers really work, you pretentious elitist pr|ck.
If somebody needs to write a program that solves some real-world problem, doesn't it result in a better product in the end that time can be spent coding ways to that real-world problem rather than dealing with these lower-level issues of cacheing, memory allocation, etc.? Isn't it better to be abstracted from these issues rather than to have to deal with them in addition to dealing with the problem at hand?
We write code to handle these problems of caching, memory allocation, etc., in order to more efficiently handle the real problems. Yes, oftentimes the program will be more efficient and you get to show off your l33t coding skillz if it was written from scratch in C, but I'll bet that the real-world problems solving and maintainability of a program written in a language abstracting the coder from these low-level issues will result in a better end product.
I will definitely agree that knowing how computers truely work at ALL levels will allow you to be a better programmer. Watching novice developers who have only ever known OOP oftentimes leaves my head shaking. If they knew the bigger picture, they WOULD be better at what they do.
Remember, computers are machines built to serve US. The minute you start coding to their limitations you're missing the point. The point is NOT to demonstrate your ability to manage memory allocation, the point is to use the machine to best serve you. -
C rules, everything else vacuums lint
2003-05-14 11:50:50 anonymous2 [Reply | View]
OOP is great for Code-reusablility and software management and large scale software architectures. Maintaining all that in C is a manager's nightmare. My $0.02
-
C rules, everything else vacuums lint
2003-05-14 12:10:21 anonymous2 [Reply | View]
Your absolutely right, but sometimes doesn't optimize to the fullest. C is for losers who don't understand how to write assembly code.
lol.
(not to be taken seriously ..) -
C rules, everything else vacuums lint
2003-05-14 16:18:48 anonymous2 [Reply | View]
What are you talking about? Assembly languages are for noobs that can't be bothered with learning all the opcodes and instruction formats of their chosen processor.
CPU's are for software weenies who are too dumb to design their own logic.
Logic gates are for morons too simple to string two transistors together. -
C rules, everything else vacuums lint
2003-05-14 21:33:45 anonymous2 [Reply | View]
Transistors are for simple minded, treehuggers who either can't figure out how a few million triodes and a couple megawatts of juice can make a perfecly good processor, or are to sissy to cut down a few thousand trees and dig up a national park to get some fuel for the power grid. The processor isn't going to be too fast, but of course it isn't going to matter much because you don't have to worry about some wasteful compiler producing less than optimal code as you are going to hard-wire all of your programs into the circuit anyway.
-
U suX0r!
2003-05-14 10:37:40 anonymous2 [Reply | View]
Ph33r m3 c0z u sUx0r! 411 14N6u463$ ru13 n00b!
-
U suX0r!
2003-05-14 16:20:25 anonymous2 [Reply | View]
Could you speak English? I don't read lEEt (or is that Perl?). -
U suX0r!
2008-03-22 16:09:35 Rex the Strange [Reply | View]
That's always been my point. Computers are for the convenience of humans, not the other way around. And we, in humanity, use words, not stupid symbols and groups of nonsensical characters to get our message across. So why should it be any different when we're talking to computers? They are our slaves. They should speak our language. If you want to be a slave to the way a computer talks then just go ahead and write your damn program in machine language (no, not an assembler - actual machine 1s and 0s).
That's why that ridiculous C family of languages (and by that I mean any language that employs those stupid C symbolic conventions: C, C++, C#, Java, Perl, PHP, JavaScript - the list is endless because people are too stupid to realize that it's pathetic gobbledigook that should be abandoned now before more damage is done to young, impressionable minds) is an anathema to human existence.
Use a language that actually uses words like Pascal/Delphi or Basic. Otherwise, show us how computer savvy you really are (and how stupid) by churning out those endless 1s and 0s.
-
Java; I want a destructor!
2003-05-14 09:43:34 anonymous2 [Reply | View]
nuf said. -
Java; I want a destructor!
2003-07-09 03:24:54 anonymous2 [Reply | View]
I find that funny, I was just looking all over my java docs and books trying to find a destructor in java...kind of bizarre that there is none!
And all the java advocacy crap about how c++ sucks because of memory allocation/deallocation problems...gee, you figure they never heard of putting your "new's" in the constructor and your "delete's" in your destructor -- I guess they haven't, since they don't even have destructors. -
Java; I want a destructor!
2003-05-22 17:37:56 anonymous2 [Reply | View]
finalize acts like the destructor for Java. -
Java; I want a destructor!
2003-05-15 01:11:36 anonymous2 [Reply | View]
That would be completely stupid. The whole point of the destructor is to free heap memory that might have been allocated as part of a data structure. Java has pretty good garbage collection, so this saves you the hassle. I mean, instead of saying delete blah, you can just say blah.finish() if all you are trying to do is complete something before the object is gotten rid of. This sort of thing can be equally easily done in Java without any explicit call that is reserved for freeing memory. -
Java; I want a destructor!
2003-05-18 18:20:29 anonymous2 [Reply | View]
The purpose of a destructor is to free resources (not just heap memory). Closing files, sockets, database connections, etc., even in the presence of exceptions, without having to remember to try-finally-release them can be quite powerful. Garbage collection is nice and has its place, but isn't a panacea. -
Java; I want a destructor!
2003-05-19 03:26:12 anonymous2 [Reply | View]
This is especially true in a object-oriented language. I have a stream. Is it a memory stream or does it represent a file, a socket, or something else that the garbage collector won't release (or that a finalize method will release too late)? If you don't know, then you'll have to remember to try-finally-close that stream. Even when dealing with memory streams. That's convenience? -
Java; I want a destructor!
2003-07-08 07:03:53 anonymous2 [Reply | View]
Unfortunately the presence of a destructor poses HUGE problems for a garbage-collected language. The garbage collector can't tell when it's safe to collect an object, it can't just drop all the objects when the program ends, etc. I too missed destructors, but try ... finally ... is a good substitute.
Don't use finally() (or python's __del__(), for that matter) as you would a destructor. They may never get called. Also, they pose problems for the garbage collector.
-
And what of C#?
2003-05-14 09:40:39 anonymous2 [Reply | View]
C# is a inconsistent mixture of C++, VisualBasic, Java, IDL, and Smalltalk. Blech! -
And what of C#?
2003-05-15 03:05:28 anonymous2 [Reply | View]
I've found that C# grows on me faster than any other language I've used. At first I was very disappointed, saying it was just 9% better than Java. I was dismissive of the funny ways they use the new and override keywords until I understood they had addressed an important set of problems.
Having used it a while, I'd say it's very nice. Perhaps the best single advantage that C# has over Java, however, is that when it burst onto the public scene, it was much more complete than Java was for the first several years. Including libraries and documentation. It is of course completely unfair that the C# designers had years to use and study Delphi and Java and C++ before committing to a design for C#. So what!
The single best thing about C# may be that it works just as the documentations says it does. This alone is worth the price of admission (which is steep).
-
Criticisms of Java were really criticisms of class libraries
2003-05-14 09:35:55 anonymous2 [Reply | View]
-
but i love and hate assembler.
2003-05-14 07:29:48 anonymous2 [Reply | View]
i don't need compiler, they are all gcc family with complexity. no matter what language name it, after all, it's son of C.
why don't you make it easy? -
but i love and hate assembler.
2003-05-15 01:23:48 anonymous2 [Reply | View]
You are a fool. Who can legitimately ever claim that writing in assembler ever simplified writing a practical program? There are situations where writing assembler might be useful like if you need a very efficient block of code that processes video or something, but in your situation, there is no doubt that a compiler could generate much more efficient code than you could ever write. In fact, even writing simple programs, not knowing well the underlying hardware will likely have you writing inefficient code. Unless your programs consist of pushing a couple things on the stack, and maybe taking a wild ride loading a storing a few things in memory, writing assembly will most likely only give you buggy code that is impossible to follow along that only runs on your architecture. -
but i love and hate assembler.
2003-05-14 16:22:56 anonymous2 [Reply | View]
You may not need a compiler, but you do need a grammar checker. -
but i love and hate assembler.
2003-12-31 19:25:49 anonymous2 [Reply | View]
Asm rulez! No compiler can improve the code like the human mind (if you know how to do it).
With asm you can control everything inside the code without "compiler defaults" junk!!!
Compilers are based on defaults that can generate small/inneficient pieces of codes to especific situations.
I write all my DOS/Win32/UNIX codes 100% on asm and, at least for me, my code is so clear as any other junk languages.
Asm only requires to know what you're doing with it, something that most "Hello World" programmers don't know.
DKZ -
but i love and hate assembler.
2003-12-31 19:25:33 anonymous2 [Reply | View]
Asm rulez! No compiler can improve the code like the human mind (if you know how to do it).
With asm you can control everything inside the code without "compiler defaults" junk!!!
Compilers are based on defaults that can generate small/inneficient pieces of codes to especific situations.
I write all my DOS/Win32/UNIX codes 100% on asm and, at least for me, my code is so clear as any other junk languages.
Asm only requires to know what you're doing with it, something that most "Hello World" programmers don't know.
-
php is also missing function overloading
2003-05-14 07:27:13 anonymous2 [Reply | View]
last time I checked, I couldn't do function overloading by param signature, which sucks major browneye. There was some wack way of naming the same function differently for each param permutation and using the main function as a traffic cop.
Granted, in Perl I just lazily shift off and do sanity testing in module, but when writing OO code I prefer to overload functions, particularly constructors.
-
You need to look at REXX
2003-05-14 07:25:47 anonymous2 [Reply | View]
Some great points on languages, but REXX beats them all in so many of the points you raise.
bob hamilton -
You need to look at REXX
2003-05-14 10:59:36 anonymous2 [Reply | View]
I liked some parts of AREXX -- on the Amiga -- mostly the idea of the standard interprocess communication scripting. However, I always had problems with the syntax -- figuring out what was actually being passed, or being processed. It was weird. (I think in C.)
I eventually did figure out how to do useful things -- my favorite is a script that controls 3D image rendering in Lightwave, uses an external image processing program to apply motion blur and watermarks, then loads the results into the Toaster frame buffer, and talks to a comm program that controls a SVHS single frame editing deck to write the frame out.
All possible, because these programs that didn't know anything about each other all supported an Arexx port.
I wish the same thing existed on Linux. Perl scripts and system() calls are not the same thing as interprocess communication. And don't get me started about that fu-"scripting" that gimp has.
-
You need to look at REXX for Linux
2003-05-14 13:57:13 anonymous2 [Reply | View]
REXX runs under all IBM os's including Linus and AIX
bobh
-
Programming in C
2003-05-14 07:23:31 anonymous2 [Reply | View]
I hate the huge vocabulary of C. I have a poor memory between my ears. I use PASCAL because I can do whatever I want and I do not need to use MAN to do it.
-
You *CAN* ignore checked exceptions in Java
2003-05-14 06:58:07 anonymous2 [Reply | View]
Don't program much in Java, do you? To "ignore" an exception thrown at you, just declare your method thusly:
public void myMethod () throws Exception {
}
With whatever return type, access control, name, and parameter list you need. Saying "throws Exception" ignores the entire group of checked exceptions. You can percolate this all the way up to the main method, which if it throws an exception, causes the default handler (dump the stack to stderr and terminate the thread) to spring into action.
-
You *CAN* ignore checked exceptions in Java
2004-03-30 07:11:18 typo [Reply | View]
While this is kind of true, you have to deal with the exception somewhere, unless you do something like
public static void main (String[]agrgs) throws Exception {...}
Then that kind of defeates the good things that try blocks do.




http://musiclessonz.com/rebol_tutorial.html