Fog Creek Software
g
Discussion Board




Why do we have so bad programming languages&tools

Current programming languages and tools (compilers, debuggers, IDEs, etc) are horrible.  why is it so?

(for those that think current solutions are just fine:
- try to remember how many tricks you had to learn to become a good programmer.
- look at the amount of help-requests posted by newbies to various newsgroups about programming.
- think about the stupid error situations you have to deal every day when coding.)

I don't see any change to this in the near future. new programming languages appear every now and then, but they don't really change anything (we need something else than a language?). tools always rely on the properties of the underlying language/system and usually have some big problems.

programmers of today are like the writers in ancient Egypt - the system used back then, hieroglyphs, was so difficult that only a few educated writers could master it.

but hieroglyphs disappeared when a more simpler system was invented. today, writing is much easier. it is assumed that everyone should be able to write.

So:
- I don't want to analyze what is exactly wrong now.
- I don't want  to analyze how problems should be solved.
- I want to analyze WHY things aren't better already. (or going to be in the near future)

there must be some things that make the development impossible. a few ideas:

- no one believes that things could be better?
("high level languages are slow", etc.)

- no one thinks that things should be better?
("usability is for users. I'm a developer.")
("programming shouldn't be easier. otherwise anyone could do it and we'd be useless.")
("programming doesn't have to be easy. if you don't like it, just become a manager and let the others actually do it.")
("I've dealt with pointers and segemntation faults all my life and I'm fine with it.")

- there's no money to be made from better programming solutions?
(how much money did Sun get (=lost) from developing Java?)

- the underlying computer architecture (processors, RAM memory, etc.) makes better solutions impossible?

- ?


what do you think?

timo
Thursday, February 5, 2004

Who sais software development should/could be easier than it is?

_
Thursday, February 5, 2004

"programmers of today are like the writers in ancient Egypt - the system used back then, hieroglyphs, was so difficult that only a few educated writers could master it. "

Expanding on this metaphor, the Egyptian language was very dense, each symbol holding the meaning of a word, for example.

Todays languages, on the other hand are very redundant and have lots of extra stuff in them.

It sounds like what you're proposing is creating a verbose and forgiving programming language.

Just be glad your computer understands "Ancient Egyptian" and wait around for the Phoenicians.

Computers are simple logic machines, and the instructions you give it have to be very specific. In comparison humans are extremely complex and capable of understanding nuance beyond the written word. The same sentance can have many multitudes of meaning based on how it's spoken, or the context it's in.

If you try the mental exercise of creating a programming language, you'll probably find yourself falling into many of the same "traps" as our current spate of programming languges.

Besides, if all it took for me to get my computer to do something was saying "Hello computer" you'd most likely be out of a job.

www.MarkTAW.com
Thursday, February 5, 2004

I think it's because this industry is now completely marketing driven. Tools are released and updated, and marketing hype is generated. This makes development tools(particularly under Windows) a rapidly moving target.

Programmers don't have time anymore to develop long term competency using their languages and tools anymore. I think we underestimate how important this is, and we overestimate our ability to get up to speed using new languages and tools.

Wayne Earl
Thursday, February 5, 2004

Java goes a long way to writing working code.

You don't need to understand the difference between heap and stack, for example, nor manage object destruction.

I regularly see code from Java people who are dabbling in C++; it ain't easy.

Of course, does that make Java better than C++?  Not for the embedded apps I write.

i like i
Thursday, February 5, 2004

I personally don't think Programming is very difficult at all.  There are only a few root concepts that you need to learn to start writing productive programs.

Like spoken languages, you simply need to learn that languages sentence structure, and then it's easy to start composing meaninful sentences, paragraphs, etc. 

Like spoken languages, there is also a wide spectrum of capabilites in the industry.  Why aren't there many teenage authors in the publishing world?  With experience, comes mastery, and thus there is great seperation between the best authors and the average writers.

The same applies to the coding industry.  For the same reasons the best programs are -insert large percentage- better than the average ones.  Some of this is experience, some talent, but it's no different than traditional language mastery.

The _biggest_ difference is that while most people have an average command of traditonal spoken/written languages (although this is arguable) the same can not be said for computer languages.  Thus in this industry where demand is so high, companies are willing to settle for any coders, not soley the best as a publishing house does for traditional compositions.

Elephant
Thursday, February 5, 2004

"[T]ry to remember how many tricks you had to learn to become a good programmer."

I learned programming starting in the 80s, when a lot of computer technology was still maturing (namely, GUIs, memory management, database science, OOP, etc.).  Which is not to say it isn't still maturing now; rather, my points are that (1) current solutions may seem inadequate today, but I see many of them as wonderful innovations over the hardships of my past; (2) we'll learn how to improve more as we get used to what we have now, and the evolution of things will continue.  Condemning current tools as horrible is like criticizing an 18-year-old for not being a 30-year-old, and forgetting some of that person's shortcomings from 5 years before.

"[L]ook at the amount of help-requests posted by newbies to various newsgroups about programming."

If you think flood of help requests to newsgroups is bad, don't ever become a teacher.  :-)  Imagine year after year of kids, who apparently didn't learn the basic material of the course.  Well of course not.  It's your job to teach it!  And it's the same way on the newsgroups.  The experts help out the newbies.

"[T]hink about the stupid error situations you have to deal every day when coding."

If anything, I'm flustered at times by the asking of questions that were asked just days before.  People just need to learn some newsgroup culture.  By that, I mean they need to learn the basic methods of finding help on the Internet without wasting others' time - searching past posts, FAQs, etc.  Do you know where to find Eric S. Raymond's article on How to Ask Smart Questions?  Did you run across it before asking your first question on a newsgroup or other web forum?  If not, why not?  It or something equivalent ought to be required reading before asking, and should be enforced through massive social pressure.  I apologize if this sounds like a rant; it's not.  In truth, I believe newsgroup culture is something people will learn naturally over a generation; the world can't help but improve on this front.

In summary, I'm saying the shortcomings of programming languages today will work themselves out in time.

Some challenges are cultural.  As you say, some don't see a problem with status quo; others see it as a natural, unsolvable limitation; still others fear job loss.  I say any problem that is cultural will take at least ten years to solve, possibly 20-50, and if you want to speed that up, you're in the wrong field; psychology is the next building over.  :-)

Some challenges are financial.  And much more tractable.  Business has a nice way of solving a problem mere moments after the amount of money available offsets the difficulty.  There may not be another money yet to buy the perfect new coding tool, but there's certainly enough to get a lot of people looking for it.

Which brings us to the technical challenge.  I have to say, things are moving.

Hardware's still improving steadily.  I don't know how long you've been around, but I find it sooo nice to be able to compile larger and larger programs faster and faster.  It reduces the cycle time, which in turn lets me forget fewer things from previous cycles, which causes fewer mistakes, which causes greater productivity.

By far the biggest problem to me is semantics.  At some point, code has to meet the real world, and the shortcuts programmers take to make code run fast often lead to an application's utter failure to adapt to some real-world situation.  My company is working on a solution to this.

www.ontologyworks.com

(I'm not the CIO of JDS Uniphase, despite what Google might say.)

Paul Brinkley
Thursday, February 5, 2004

The original poster probably never developed code on Unix

Eli Bendersky
Thursday, February 5, 2004

I think that Mark hit the right reason above, context.  Programming is essentially taking a few big decisions (Display the graph in an excel-like table on a webpage, in mauve) and making the many hundreds of minor decisions that are needed to finish the request.  How many columns?  How wide for each column?  Should all of the results be on one page, or should you work through 10 at a time?  Fetch all at once, or do another query for each row to get some more data?  Should this be based on a join?  Javascript for navigation?  html + tables, xhtml + css?  ASP, perl, JSP?

Some of these are decisions that might be specified by the customer or coding practices, but my example was also a web page with one table.  Think about how many decisions you make every day that were not explicitly specified by your client, and then think about how much harder they would be to make if you had tools that were less strict.

Andrew Hurst
Thursday, February 5, 2004

Inertia.

There are better alternatives out there, but nobody will use them because nobody is using them.  The classic "Chicken and Egg" scenario.

For example, the OCaml debugger allows you to step backwards as well as forwards.  (This is much easier for functional programs in any event because they tend not to destroy as much information as ordinary "imperative" code).

I'm actually hoping that the move to Java, with software running on an abstract Virtual Machine, and the move to .Net (similarly), will make it easier to use these alternatives because they will become more acceptable to managers, etc.

For example, check out the new Scala language which runs on JVM 1.4+ and can interact transaparently with Java:

http://scala.epfl.ch/

David B. Wildgoose
Thursday, February 5, 2004

" Why..."

Because programmers don't know what's good for them.

Astrobe
Thursday, February 5, 2004

Programming tools and languages are pretty good these days.  Remember it's always easy to imagine how an existing task can be simplified but in programming we want to preserve the ability to do "new" things.  This requires some flexibiltiy in the tools and this in turn requires so skill of the user.  If you make it so easy that you basically say to the computer what you want the program to do and it generates the machine code for you...that isn't really programming any more.

I would challenge the poster to name an industry in which creating and maintaining systems of comparable complexity is somehow much easier and requires little experience and tricks.

name withheld out of cowardice
Thursday, February 5, 2004

I listened to Paul Graham's talk on Dr Dobbs technet. He makes a lot of points that make sense about language choice and design. I just had to write down some of the things he said:
http://www.dafydd.net/blog/entries/20030902.html

For the record, I'm an object-oriented programmer, currently doing Java, but wishing I could get paid to work in Smalltalk. (Although that'd probably make me unemployable because it's not mediocre enough.)

Someday I'm going to get started with scheme ;-)

Dafydd Rees
Thursday, February 5, 2004

To me, this is like saying "why are cars still so bad? Detroit has been producing automobiles for a hundred years!! Why do cars still have so many problems?"

With every year, automobiles get more and more complex.
There are thousands of different parts, from hundreds of different suppliers, all interacting in a huge system that has to endure lots of difficult conditions.

Software is similar. On my computer, there are at least 200 - 300 executable applications. Some of them are big user GUI applications, like Internet Explorer. Some of them are silent tools that run in the background, handing disk IO or print spooling. All told, the software installed on my machine was probably developed by more than 50,000 different people.

It's nice to wake up one day and say "software should be simpler" but you can't just wave a magic wand and erase all of the complexity of the modern computer system.

It's like saying "Cars should not be so complicated. I should be able to design and build a car, all by myself, in only a few weeks." And that would be fine, as long as you're willing to accept a car with no airbag, transmission, fuel injection, etc, etc, etc. If you're willing to accept a car from circa 1895, then you may be able to cut back on the design complexity, but if you want a modern car, it's going to be a complex system. There's just no way to reduce that complexity.

The same is true for software.

Benji Smith
Thursday, February 5, 2004

"programmers of today are like the writers in ancient Egypt - the system used back then, hieroglyphs, was so difficult that only a few educated writers could master it."

...and I bet they were well paid, until they got outsourced by Greece.

it's all about me
Thursday, February 5, 2004

Personally, I hope it doesn't get any easier or I'll be out of a job!

(Okay, so I do mostly data entry/accounting systems not hardware drivers)

Wayne
Thursday, February 5, 2004

If cars didn't give so many problems, car parts shops and mechanics would be out of work.  The car manufactureres sell car parts and mechanical services, so don't expect it to change anytime soon.

Software, on the other hand, is crappy because most programmers and software managers are crappy.

--
Thursday, February 5, 2004

Why isn't music easier? Are musical notation and compostional tools the problem?

If everyonw compose and play music, our teaching methods and tools must suck.

Musically talented people find music to be challenging, endlessly fascinating and worth the time and effort it takes to improve.  A few without much musical talent feel the same way. Everyone else hopes, dreams or complains.

I just play baby. And I just code too.

fool for python
Thursday, February 5, 2004

I'm not saying that software is simple or could be simple - the logic and behaviour in applications is complex, so is music, so are cars, etc.

but if we (the programmers) have to do complex things (program), it would be nice if we could do it with tools that would support us as much as possible. current tools don't.

factories are complex systems. they usually have a central 'control room', a place for monitoring and controlling the process(es) of the factory. traditionally there would be some kind of a model of the process(es) on the wall of the control room, with red/green lights visualizing the state of the various components, etc.

nowadays software-based monitoring has invaded the control room, with animated graphics for displaying the surface level of liquid in a tank, multiple views/zooms for different parts of the process, etc.

they have a control room with graphics, we have a debugger that can display the value of a variable as text. sigh.

I think that programming shouldn't mean 'write something exact', it should be closer to playing a strategy game (e.g. 'Civilization'). no one ever seems to think that we could have anything like that. but would it really be impossible? many really difficult things have already been solved in the past.

the problem is probably cultural, good point Paul.

timo
Friday, February 6, 2004

Programming isn't easy, but it look like it is - think of all the books like 'C++ for Dummies', 'Programming for idiots' ...

They all fail to mention that knowing a language is NOT programming.

The difference to other complicated things (brain surgery for example) is that everybody can try programming at home.

BTW: Have you ever seen a book called 'Brain surgery for Dummies' or 'Atomic Plant Mangament for Beginners'?

Rainhard
Friday, February 6, 2004

Why is programming hard, you ask?
Go right now and buy the "Mythical Man Month"
by Fred Brooks.  He explains why it is hard, and
why it will always be hard.  Every professional
programmer should have read this book already.

--jeffh
Friday, February 6, 2004

I like this quote:

If you want to understand something, try to change it.

Alex.ro
Friday, February 6, 2004

*  Recent Topics

*  Fog Creek Home