Slashdot is powered by your submissions, so send in your scoop

 



Forgot your password?
typodupeerror
×
Programming IT Technology

Paul Graham On 'Great Hackers' 620

dcgrigsby writes "Always interesting, if not unbiased, Paul Graham has published a new article on 'Great Hackers', discussing why Perl and Python are apparently better than Java, on why Microsoft developers get offices, and a host of other sure-to-be-controversial stuff."
This discussion has been archived. No new comments can be posted.

Paul Graham On 'Great Hackers'

Comments Filter:
  • by Fux the Penguin ( 724045 ) on Wednesday July 28, 2004 @09:14PM (#9827282) Journal
    Interesting insights.

    I wonder, how does one become a great hacker? How do you make yourself a great hacker? I'm not sure it's possible...I mean, I know you can do a lot of things to make yourself dumb, but what can you do to make yourself smart?

    I guess a good part of it comes from working on what inspires you, and what makes you happy. In general, I find that it's very difficult to make very smart people do things they don't want to do.

    I suppose that in order to accomplish something important, it has to be important to you. It could be that you love it. Obviously, if you can keep alive the zest for programming you had when you were young, then you're bound to do well. If your current profession is making you senile, then you're probably not going to keep that hacker spark going.

    I think the real issue must be inquisitiveness. I find that good hackers are very curious about the world around them. Ultimately, that must be the answer. To be a good hacker, you must have a genuine thirst for knowledge, and a desire to improve things for those around you. Sounds good to me.
  • by beee ( 98582 ) on Wednesday July 28, 2004 @09:16PM (#9827301) Homepage
    Anyone who spends their time improving software is doing us all a favor... that's why my screensaver at work has always said: 'Hackers are great'.

    It took some explaining to convince my boss that "hackers" wasn't a negative term, but since then I've received nothing but compliments from other geeks in the office.

    Hackers are great!
  • From someone who has RTFA, Graham says,
    What we ought to look at, if we want to know what tools are best, is what hackers choose when they can choose freely-- that is, in projects of their own. When you ask that question, you find that open source operating systems already have a dominant market share, and the number one language is probably Perl.
    First of all, if you look at sourceforge stats, the top languages are C, C++, and Java, so if Graham is right and these languages are vastly less productive than Perl and Python (whose only common characteristic is they are both "scripting languages"), he's very wrong that open source programmers working on their own time are better judges of language power than others.

    Second, and I'll probably be modded as troll for this, but all the programmers I know who like perl are sysadmin types who don't know better. Popularity isn't a much better measure of "goodness" in the open-source world than it is anywhere else.

    Graham may make some good points but he's SO far out in left field on others that his credibility is shot as far as I'm concerned.

  • by the_argent ( 28326 ) on Wednesday July 28, 2004 @09:22PM (#9827334) Homepage
    The best non-techical reference for a hacker to get the point across to people that I've used is the Wright bros. They used bicycles to build a fully flight capable aircraft. If they tried to do that today, they would get procecuted under some form of the DMCA. Thank god they weren't born under the current hampering of innovation that we face....
  • Java (Score:5, Insightful)

    by kaffiene ( 38781 ) on Wednesday July 28, 2004 @09:27PM (#9827366)
    Is suited to people who simply want to write large bodies of maintainable code. It's not intended for small hacks, nor is it intended for being close-to-the-metal.

    The idea that one must automatically be a crap programmer because one likes Java is an egotistical and obnoxious point of view. I happen to like Python and C and C++ as well as Java, and I use all of those on occassion, but Java is no less a suitable and appropriate language to use for some tasks as any of those other languages.

    I'm sorry, but Graham's dismissive attitude towards Java is evidence of extreme arrogance.

  • by highwaytohell ( 621667 ) on Wednesday July 28, 2004 @09:29PM (#9827374)
    Did he mention that these Great Hackers have quote possibly some of the greatest creative minds in the world. Sure you have to know what your doing, but the ability to think outside yourself, see the bigger picture, is what makes these guys great. When you come across a problem that may seem impossible to get a work around for, these guys think and think, and they get their solution because they are able to see a myriad of different perspecvtives as a possible solution to a really tough problem. these guys are paid the big bucks because they do have that extra quality as well as being good hackers. i think thats what separates the good, from the great.
  • by Anonymous Coward on Wednesday July 28, 2004 @09:34PM (#9827399)
    LOL, since when is the number of projects on Sourceforge a good indicator of anything? 90% of them never make it to a release - sooo many projects are "pre-alpha" with near-empty homepages with comments like "project X will be the greatest Y ever built. Right now we're deciding how to start designing it."

    Heck, for all I know, the high number of C, C++, and Java projects could just be an indicator that users of those languages tend to start things but never finish them.

    And, by the way, the _main_ thing Perl and Python have is common isn't that they are scripting languages (a term that isn't very well defined anyway), but they are much higher level than, say, C or C++ (and to a lesser but still important degree Java). And _that's_ why they allow developers to be much more productive. If you have trouble understanding/believing this, then imagine explaining to an assembly programmer why you're so much more productive in C++ than assembly. Now, apply those same principles to something like Python, and you'll start to see the light.
  • by mike_scheck ( 512662 ) on Wednesday July 28, 2004 @09:37PM (#9827414)
    As a sysadmin type who "doesn't know any better", I can tell you that I like PERL because its effective, and easy to write a short legible program that is far more powerful than a shell script. I work at a large company, and we have many cases where a perl script evolved into something much more complex than many C/Java programs in production, simply because when a small change needs to be made, almost anyone who has taken a previous programming language can make the changes or add features.

    BTW, we have had Java programmers come in and give preso's on why Java is so great, and its pretty funny, they talk about a lot of things that perl has, but they don't realize it. Oh, we can create "objects and manipulate them", or "we can reuse our code". Crazy me, I've been typing all those perl modules by hand and throwing them away when I was done with them!
  • Eric Raymond (Score:5, Insightful)

    by EmbeddedJanitor ( 597831 ) on Wednesday July 28, 2004 @09:43PM (#9827451)
    ESR will tell you that you must be like him. He says one should play a musical instrument, enjoy (and preferably write) science fiction. He does not mention having a gun fetish, but I guess this helps...

    Now I would classify myself as a hacker, but cant play a musical instrument (CD player isn't a musical instrument right?) and sci-fi gives me a softie. Dig guns though.

    IMHO a good/great hacker must be prepared to go where he wants to with confidence. Don't just take on everyone else's mindset (if you do what the other 6 billion people are doing you're not going to do anything worthwhile). In short, scratch your own itch.

  • Re:Java (Score:5, Insightful)

    by daveinthesky ( 608820 ) on Wednesday July 28, 2004 @09:44PM (#9827455)
    Herd mentality.

    Java has nothing about it that makes it any more maintainable than any other language.

    But,
    LISP, Python and Perl do have language _features_ that make it much more powerful to good programmers. Closures, anonymous functions. LISP has macros. Imagine java or C/etc without recursion. That's what Java is. A language without closures, macros and lambda. It's missing stuff!
  • by JerkBoB ( 7130 ) on Wednesday July 28, 2004 @09:44PM (#9827459)
    Second, and I'll probably be modded as troll for this, but all the programmers I know who like perl are sysadmin types who don't know better.

    Well, I'm a 'sysadmin type', and Perl lets me get my job done with a minimum of fuss. I have lots of one-off tasks that would be tedious to do by hand, and shell scripting is just annoying. But I've also written a whole ISP provisioning system with Perl, and tied it into our company's proprietary billing system. If I'd been doing it with C or Java it would have taken me a lot longer and definitely wouldn't have been as stable as quickly as it was.

    Is it possible for me to program in C or Java? Sure. I had CS classes. But for me, Perl is the right tool for most of my jobs. People like you who look down your noses at a 'scripting language for sysadmin types' are typically the sort of people whose messes I have to clean up because they have just enough knowledge to demand root on their workstation so they can screw things up.

    You haven't taken the time to appreciate how Perl can be used in a sane manner to create stable, maintainable codebases and applications. That's fine, but it doesn't invalidate or devalue what the rest of us are doing with it.
  • by Tirinal ( 667204 ) on Wednesday July 28, 2004 @09:50PM (#9827487)
    Slashdot... where lifting something directly out of the article, making the punctuation worse, and asking if the original author mentioned it is modded +5 insightful.

    Dear God, I'm beginning to see parallels between this place and our political system. I need a drink...
  • by Anonymous Coward on Wednesday July 28, 2004 @09:54PM (#9827507)
    Spend some time somewhere like Perl Monks [perlmonks.org] and you'll find out that there are a lot of competent Perl programmers who aren't sysadmin types. Or go and look at CPAN [cpan.org] to see the variety of different kinds of software that are available in the Perl world.

    Furthermore I'd like to point out that Graham made a claim about the behaviour of hackers, not open source programmers. Most of the people who contribute to Sourceforge would not, in Graham's opinion, deserve the compliment of being called hackers. Therefore their aggregate choices are irrelevant.

    Disclaimer: I'm [perlmonks.org] a fairly well-known Perl programmer.
  • by Telex4 ( 265980 ) on Wednesday July 28, 2004 @09:55PM (#9827512) Homepage
    One thing that Graham's essay didn't address directly, but that he alluded to, is not only how you can tell a Great Hacker from an ordinary Hacker, but how one can tell how good a Hacker is in general.

    He mentioned several key qualities, namely: curiosity, concentration, and the desire for control and autonomy over tools and environment. He suggested that Great Hackers exhibit these qualities, but it's not as though you can judge how curious a person is, or rate their desire for autonomy (they might just be a jerk).

    Perhaps the more important thing is that people have these qualities at all. In societies where people seek life quality in television, money and "quality time", we ought to all admire the Hacker's qualities and aspire to them (amongst others, of course). Companies ought not to worry too much about Great Hackers, if they are as rare as Graham suggests, but it's well worth considering how they can improve the lives of their employees and thereby improve their productivity.

    Hackers don't just give us great software... they give us a successful model of how we can improve ourselves. Well, except in terms of exercise perhaps ;-)
  • Re:Java (Score:5, Insightful)

    by be-fan ( 61476 ) on Wednesday July 28, 2004 @09:58PM (#9827521)
    I'm sorry, but Graham's dismissive attitude towards Java is evidence of extreme arrogance.
    Perhaps arrogance, but also perhaps frustration. To anybody familiar with a broad variety of languages, the ascendance of Java (and C#, which is Java + 1) is irritating at best. Here you have a language that finally managed to overcome the entrentched nature of C/C++, but is at best one step backwards for each step forwards. It's got shades of Smalltalk, but none of it's flexibility; shades of Self but none of it's innovation; shades of C++ but none of it's control. It's not particularly good at anything (but not particularly bad), nor is it a good all-rounder. Certainly, it's decades behind the state of the art compared to something like Lisp, or Smalltalk. The main reason Java got popular was hype, chance (the rise of network computing), and a giant class library that had pre-canned solutions for most things. Put simply, it was an example of worse technology winning out over better technology, for market reasons.
  • by photon317 ( 208409 ) on Wednesday July 28, 2004 @10:02PM (#9827550)

    I'm going to have to disagree. You're confusing "open source hackers in general" with "Great Hackers", which is what he was describing. The two terms are not interchangable. For every 1000 crappy programmers who were never meant to be, there's 100 decent programmers, and there's 10 open-sourcy hacker guys are pretty damn cool (they make up your sourceforce demographic), and there's 1 Great Hacker.

    And yeah, these great hackers, oddly enough, tend to have a lot of overlap with those sysadmin-y perl-y type people.
  • by RedWizzard ( 192002 ) on Wednesday July 28, 2004 @10:04PM (#9827560)
    Is Linus Torvalds a great hacker? Apparently not because if he was he would have coded the kernel in Perl!!
    Don't be so obtuse. Perl is clearly not the best choice for a kernel, and nowhere in the article did it suggest using tools that are not fit for the job (in fact it specifically mentioned the importance of tools). Besides Linus has written a number of tools in Perl.
  • by Coryoth ( 254751 ) on Wednesday July 28, 2004 @10:04PM (#9827562) Homepage Journal
    It's quite easy to write larger programs in perl, all you have to do is start the program with a different mentality. Write modules, use perl's OO (which is in some ways a kludge, but in other ways remarkably flexible and versatile). People who claim you can't write large programs in perl are simply failing to use the features of perl available for doing those sorts of things - they're trying to expand the same sort of programming they used for their 500 line program into something that works for a 5000 line program. Really, this is akin to trying to write a large C program by just putting everything in main() and then complaining C is no good for large programs.

    For reference, I much prefer python to perl - I find it cleaner and easier. When pushed I like to use python combined with C for any heavy lifting (farm out any intensive routines to some C code that returns python objects).

    Jedidiah.
  • Re:Java (Score:3, Insightful)

    by jjohnson ( 62583 ) on Wednesday July 28, 2004 @10:06PM (#9827574) Homepage
    "Put simply, it was an example of worse technology winning out over better technology, for market reasons."

    Why are market reasons invalid when determining the quality of technology? How is it that the use of technology in the real world, something market reasons influence very strongly, is less important than the theoretical virtues?
  • Offices Rock! (Score:4, Insightful)

    by billstewart ( 78916 ) on Wednesday July 28, 2004 @10:06PM (#9827576) Journal
    Peopleware [amazon.com] by DeMarco & Lister, was a fairly good book on software and development organization productivity (and I assume the second edition is still good...) One of their points is that offices are really important, because programming involves a lot of deep focus, and in a cubicle environment, it's much harder to tune out interruptions and stay focussed. Sometimes you need to talk to other people, but when you need to concentrate, you need to concentrate. Two-person offices are usually an ok compromise - you get some social contact, and you get a bit more interaction with other people and projects, but you can still ignore your officemate except if he's having a speakerphone conversation. And of course, if you're into Extreme Programming, two people is probably the perfect number...

    Not all jobs are that way - sometimes overhearing what the other people around you are talking about is more useful to overall productivity. And some people can concentrate even with lots of background noise. But for a lot of people, offices would have been more productive than cubicles.

  • Re:Java (Score:5, Insightful)

    by Cyno ( 85911 ) on Wednesday July 28, 2004 @10:09PM (#9827588) Journal
    I agree. But the same can be said for Perl.
  • Java Vs. perl (Score:5, Insightful)

    by fimbulvetr ( 598306 ) on Wednesday July 28, 2004 @10:12PM (#9827605)
    He's right. You guys are so personally offended you can't see the forest for the trees.

    He's talking about hackers here, kids. Not 90% of the /. crowd. In your opinion, who's the most likely hacker?

    a. sysadmin
    b. java developer
    c. janitor

    Personally, I'm voting for (a). (A) because most sysadmins deal with perl, lots of unix systems, they know *nix inside and out.
    Java guys are out of the question, they're too wrapped up in their baby blankets sucking their thumbs to realize they are not _in_ the group we're speaking of.
    Janitors, well, it's possible, but probably not common.

    I'm a sysadmin, and I user perl all day long. Sometimes at night, when a brute force ssh attack comes along. I need to know which exploits are out there, I'm constantly trying to break my system. I'm constantly learning about the newest buffer overflows in solaris. I am intimately aware of memory space in the kernel. I don't live in a Java Dream World (tm). I don't have all day long to dream of how, if java were tangible matter, it'd be able to cure world hunger. I'm too busy living in the Real World(tm).

    In conclusion, while it's uncommon to have good hackers know they're good, it's a lot more common to have a bunch of wanna-bes think they are "the hackers".
  • by jjohnson ( 62583 ) on Wednesday July 28, 2004 @10:14PM (#9827612) Homepage
    Graham essentially spouts a lot of geek cred virtues that suit the stereotype of hackers that we all, in some way, want to be. So we all read the article, see a little bit of ourselves in it ("yeah, I'm pretty politically incorrect, too."), and feel good about how special we are. Just like astrology profiles based on your sign contain a lot of qualified compliments ("you speak your mind, sometimes offending other people without meaning to."), Graham's articles have a constant thread of "geeks are special, and you're a geek, too."

    Taken literally, the people Graham is talking about are perhaps 2-3% of the coding population. In other words, they're the equivalent of supermodels, rock stars, and brilliant twentysomething CEOs, and just as accessible to you or me. In practical terms, you'll almost never, ever work with, hire, or be the kind of person he's discussing, so put down the geek wank material.

    Every time I read a Graham article, I feel dirty at the amount of false modesty and self-congratulation involved. He's like a digital Stuart Smalley.
  • Re:Java (Score:5, Insightful)

    by kaffiene ( 38781 ) on Wednesday July 28, 2004 @10:16PM (#9827626)
    Java Python and Perl are simply NOT aimed at the same target. The things I would gladly write in Python or Perl I just wouldn't consider Java for.

    Insisting that one and only one language is the true language is just silly.

    Having programmed in Java, Python, Perl, and a motley variety of other languages, I've got to say, if you are happy in Java, especially after having tasted Perl or Python (or Ruby or Ocaml or whatever)... no, you're not one of the great and yes, they will sound arrogant. But their claims, nonetheless, will be true.

    Uh huh....

    Look, I'm a software engineer with 20 years experience. I'm no newbie by a long shot, and as much as I back myself and my skills, I would never say such a bullshit statement as "if you're happy with language X, then you can't be one of the great"

    Your milage obviously varies

  • by TheLink ( 130905 ) on Wednesday July 28, 2004 @10:20PM (#9827645) Journal
    I've written 6k line perl programs but that's probably proof that I'm not great. A great programmer/hacker would probably do the same thing 1K lines ;).

    With the wrong language you can't write little programs even if the job is a little job :). Even medium jobs look like huge jobs.

    The advantage of Java is you can outsource the bulk of the programming to 100 different people in Bangalore or something. The hopefully smart person doing the design and architecture at the HQ doesn't have to type many lines of Java - he programs in human languages.

    Whereas with Lisp or other Great Hacker languages while that smart person is 20x-100x more productive, you can't outsource the job, so when the job becomes boring it's hard to keep that smart person around to do maintenance, documentation and other low level stuff.

    And sometimes the boring stuff makes money. I mean how many great hackers want to do accounting programs, custom portals (with ever-changing requirements), ERP etc?

    With Perl the smart hackers have created the blocks of Duplo and Lego (CPAN), and made them available for the not so smart ones like me to use em. Prefab code :).
  • Tool for the job. (Score:5, Insightful)

    by DarkMan ( 32280 ) on Wednesday July 28, 2004 @10:21PM (#9827648) Journal
    First of all, if you look at sourceforge stats, the top languages are C, C++, and Java, ...


    If you look at what a good joiner uses, you'll note that he has a large set of tools, and picks the right one. There is no advantage in trying to turn wood on a lathe with a screwdriver - that's the job of a chisel.

    A similar thing applies with computational work. If you truely know what you are doing, you'll use the right tool for the job. If your wanting to accumulate a large set of facts, and then do some comparisons across that set of facts, that's a job for Prolog. No matter that C, or Java, or Perl, or whatever, is more popular. They are just a poor fit to the task, which would mean you'd need to write a predicate logic packeage in them, to get them to work.

    Look at tools like FFTW. It's written in OCaml, and C. Two different languages, each used seperatly, to play to thier strengths. OCaml does tree parsing, and optimising of an abstract syntax tree. C code does the numerical heavy lifing. That's choosing the right (rather, a good, there is a pluraity of good tools for that) tool for the job. Trying to do the abstract syntax tree parsing in C, or the numerical heavy lifting in OCaml is just stupid - you'll end up with something that's nowhere near as good.

    Try writing an OS kernel in Perl.

    'Favourite language' is something that's not a good metric. I've solved problems (and that's what it's all about) using 50 lines of C feeding 100 lines of Fortran feeding 50 lines of Perl producing Postscript that compiled to the desired diagrams, because that's what suited the problem domains best.

    Claiming that 'good hackers like language X' misses the whole point. Good hackers will use the best tool for the job.

    Also, Graham seems to be conviently ignoring the 'can this be understood three years down the line' aspect. There is no point in having code that you can't maintain. That's where Java comes in - it's got a blend of power and syntactic salt help keep things maintainable. Asserting that maintainabilty isn't relevant just strikes me as something that's, well, immature.
  • Re:AS/400 (Score:5, Insightful)

    by DaveJay ( 133437 ) on Wednesday July 28, 2004 @10:22PM (#9827659)
    I believe that he mentioned this because the guys at the startup viewed 'hacker' to refer to themselves, not to the crackers that they knew the marketers intended, and that they probably did in fact hate working on the AS/400 -- thus making the truth of the headline (for them) ironic.

    I thought it was pretty funny, actually. :) Since, as you point out, the AS/400 is a secure box, the humor comes from the headline being true in both a literal AND an ironic sense simultaneously.
  • Re:Java (Score:3, Insightful)

    by kaffiene ( 38781 ) on Wednesday July 28, 2004 @10:26PM (#9827680)
    I don't disagree with a lot of what you say. Just that Java is not popular *now* because of hype. It was hyped at one point, and I ignored it during the period (actually I looked at it, but it was too slow).

    Things have changed. The hype is in the past, Java is a popular language now for real tasks - hence all the jobs in Java - that's not hype, that's work being done. You can't say that the majority of jobs being done are by dot com newbies with Java - glint in their eyes.

    I suppose the reason I like Java is that I tend to program large systems for which maintainability and stability are important. C++ is the other major player in this area, but where C++ has more ability to get close to the metal, I don't need that , and C++ loses out on GC, bounds checking, security management etc...

    But again, like *every* language, whether it is the best fit or not depends on your problem domain. The popularity of Java shows that it fits a lot of problem domains well. The /. meme that Java sucks because it's not elite is somewhat infantile. Being cutting edge is not relevant to getting work done.
  • by Dwonis ( 52652 ) * on Wednesday July 28, 2004 @10:32PM (#9827712)
    You can write large programs in assembly, too, but most people would agree that assembly language is not the best tool for the job.
  • by Animats ( 122034 ) on Wednesday July 28, 2004 @10:40PM (#9827750) Homepage
    Agreed.

    NT was way ahead of anything else at the time, say, circa 1997. UNIX and graphics were not yet playing well together at that point. The Mac was still stuck with an unprotected single-thread OS underneath. Sure, you could run Apache on a Linux server, but realistically, that's all you wanted to run on Linux at the time.

  • by Qui-Gon ( 62090 ) * on Wednesday July 28, 2004 @10:47PM (#9827784) Homepage Journal

    Software maintenance is the single largest portion of the software life cycle. (IMHO)

    So, why would I as chief programmer or system architect on a software project (that has a budget) allow pieces of the of software system to be built with languages that the 'common' programmer doesn't know? Sure, you could spend money training all the 'lesser' programmers in Python and/or PERL but, why waste the money? There are perfectly good languages that are defacto standard, provide loads of functionality, development tools, and are known by the 'so-called common' programmer. Every language has its pros and cons. So, if Java's weakness is uber-hackers don't like to use it than PERL's and Python's is maintainability.
    (However, I think author might be poking the tiger with comments like: "Of all the great programmers I can think of, I know of only one who would voluntarily program in Java." And we all feel right into that trap... I know I did. :) )

    Also, the single most important resource on a software project is people (again IMHO). Typical development scenario: New contract has been acquired. So, you as the "boss" hired 10 developers for the new project. One of which falls in the author's super-elite hacker class. The project's initial system delivery goes as smooth as glass cause the 'brains' of the operation (or the 1% as the author calls it) did majority of the work. Well, shortly after the initial delivery the hacker decides the project is now boring, the system was delivered and he or she is now looking for a new challenge. He or she now leaves the program and/or company. Now, there is a serious issue. Since the hacker did 90% of the work, now 90% of the core knowledge of how to maintain the system has left as well. (And I don't care who you are. Jesus himself couldn't write software that is perfect the first time. Bugs are always present and requirements can and do change. And Jesus also can microwave a burrito so hot he himself couldn't eat it!)

    Given the author's profile of the hacker- Quiet, anti-social and loves his/her corner office with the door locked (which is a BS stereo-type)probably also didn't bother to pass any knowledge on to anyone else on the project. So, tell me again why this person was 'the most valuable thing' to us and the delivered system?

    I personally love working with people are technically sharp but, also like working with other people and sharing info. I have caught myself being sort of elitist when I was the technical authority on something. But what does that gain you? Nothing in my experience. You want to be respected by your peers and co-workers? Share with them your knowledge not just lines of code (be it byte-code or interpreted scripts).

  • Re:Java Vs. perl (Score:5, Insightful)

    by Michael Crutcher ( 631990 ) on Wednesday July 28, 2004 @10:48PM (#9827792)

    I think our major disagreement stems from our preferred definition of hacker. You seem to think that hacker means sumpreme uber UNIX geek. I have no doubt that you're a good sysadmin but I think that you really have no idea what the "Real World" is when it comes to programming.

    My definition (and I believe it's fairly close to what the article author meant) was that a hacker was someone who used a programming langauge to solve hard problems. Under my definition you're clearly not a hacker. Sure you use perl to help automate your every day tasks, but these are certainly not "hard" problems. The mere fact that you can get the job done with a few hundred lines of code is adequate proof that these problems aren't hard. Hard problems take a lot of smart people working together to solve.

    I dare you to write an application that is scalable, secure, accesses data of a variety of types, sends instructions across the network, maintains transactional integrity, and more in perl. I'm sure you could do it, but I certainly wouldn't want to maintain it. Besides that you'd have to start from scratch and create a bunch of library code before you could even think of starting.

    This is why a lot of people use java to solve hard problems. Its large user base ensures a gigantic amount of reusable code in the form of extremely robust libraries and frameworks that have already been created. The language itself is not really anything special, but the ability to solve hard problems with the language is pretty impressive.

    In that sense (b) java programmers are far and away the most likely people to be hackers in your list. Just because you don't understand what they're doing doesn't mean they aren't hacking.

  • by Animats ( 122034 ) on Wednesday July 28, 2004 @10:53PM (#9827830) Homepage
    I've known quite a number of very good programmers, and worked with some of them. By this I mean people who wrote entire operating systems, major CAD packages, game physics engines, key parts of TCP/IP, and such. I mean people from the original Xerox PARC crowd, Stanford, MIT and CMU. I don't mean people who think they're l33t because they've memorized most of the UNIX command line options.

    Few of the really good ones are like the stereotype of the "geek" mentioned here. First, top programmers write well, and have demonstrated this by writing for publication. Second, they have strong theoretical backgrounds. Some are self taught, but are comfortable filling a white board with math. Third, they're not overly attached to a single programming language or operating system. Fourth, they tend to have a sense of aesthetics, and can articulate why something is ugly in an engineering sense, rather than merely grumbling about it.

  • by Tlosk ( 761023 ) on Wednesday July 28, 2004 @10:54PM (#9827835)
    He's not talking about the superiority of any language or implying that some languages have no use.

    Think of it in these terms, if you're a salesman selling yachts, looking at the type of watch a potential buyer is wearing can quickly help you identify persons of extreme interest who you should take every possible care to treat right. This doesn't say anything at all about the ability of a cheap Casio to tell the time or perform reliably. It's just saying that people who wear Rolexes are the type of people you're looking for if you are selling yachts.

    Similarly, Graham's suggesting that in his experience, great hackers he knows almost invariably enjoy using Python.

    I know it's easy to get defensive when someone looks dismissively at the Casio on your wrist, but to say that they shouldn't do so because you can tell time just as well as someone with a Rolex is missing the point.
  • by sinnfeiner1916 ( 793749 ) on Wednesday July 28, 2004 @10:54PM (#9827836) Homepage
    i read in the jargon file once that you cannot "become" a hacker -- rather, others must bestow it upon you. you have to earn it. you can't buy it. you can't decide you are. Yeah, you have to do stuff, but you should be doing it just because. Then others will decide you are a "hacker"
  • by Garin ( 26873 ) on Wednesday July 28, 2004 @11:01PM (#9827888)
    Perl is a very powerful tool. I've said it before, and I'll say it again:

    Perl, more than any other programming language I've ever used, directly reveals the mind of the programmer.

    Most programmers have very messy minds and very poor discipline. Python neatly solves this problem by having the One True Solution approach. Perl embraces the risks of a TIMTOWTDI, and you often get line-noise (especially with too-cute neophyte "hackers" who figure that doing seventeen operations in one line is somehow a good thing), but in allowing this, Perl allows a few nuggets of utter glorious beauty to shine through.

    Very few people can properly wield Perl in more than a one-off capacity. But those that can will make magic.
  • by BlueStraggler ( 765543 ) on Wednesday July 28, 2004 @11:09PM (#9827931)
    "It was really interesting until he pointed out that great hackers work differently than I do, at which point it became clear that he is a moron."
  • by PetoskeyGuy ( 648788 ) on Wednesday July 28, 2004 @11:10PM (#9827939)
    Just like /. is unbiased.
  • Great Engineers (Score:5, Insightful)

    by Keel ( 11611 ) on Wednesday July 28, 2004 @11:10PM (#9827940)
    I know there have been flame wars about using the word "hacker" for years, and I certainly don't want to start another one. I don't care if people use the term as a pejorative or a badge of honor. I don't care if it means a computer criminal or software developer. I don't care if it means white hat or black hat. That's a debate best left back in 1985.

    But having said that, I think it's time we retire the word "hacker". The reason I think this is because the use of this word, which is supposed to be so positive: the curious, problem-solving tinkerer, isn't really that positive anymore. I'm talking about hackers as craftsmen (another word the author uses in the article). Defining software development as a craft harkens back to a an age when the industry was young and still defining itself. An age when the industry was hidden behind equipment in a backoffice or university machine room populated by bright-but-eccentric pioneers. A time when the industry, and its pioneers, didn't know what its Best Practices were. Those days are over.

    Today, the industry has matured in many ways. Today, projects, and the organizations that manage them, don't want a tinkerer who will sit in the backoffice and figure stuff out. They want well-rounded individuals who can gather and interpret requirements, communicate with their team, and develop elegant, well-designed solutions using best practices. They want Software Engineers and Software Architects.

    There is still a camp out there that is resisting this change. They still believe in the craftsman lifestyle, and they still code with emacs (oops, another flame war! ;) But I don't think this view represents the majority of developers; it may not even represent the majority of open source developers. The hacker/craftsman camp is a small minority.

    The author makes the point that some developers are so much more productive than their peers because of how they use technology, but does he realize that those productive developers are not hackers/craftsmen pecking out PHP or perl in their emacs session? They are Software Engineers using latest-generation tools and languages, design patterns and best practices, object-oriented techniques and integration technologies like message queues, not to mention web services and remoting. And incidently, they're still employable.
  • by grcumb ( 781340 ) on Wednesday July 28, 2004 @11:16PM (#9827973) Homepage Journal
    You've got your stats on backwards. 8^)

    He didn't say that Linux and Perl were the most popular choices of programmers, he said *really great hackers* tend to choose them. Popularity among the general programming populace has no direct bearing on this metric.

    So let's try and measure things differently. If we hang out in the perl and python communities, we *do* tend to find a surprising number of able hackers, many of whom display the qualities Graham describes.

    The Visual Basic communities, however, are not quite so rife with mental agility.

    BTW, when you read this, pretend I'm speaking *really* quickly. 8^)
  • Re:java duuuudes (Score:3, Insightful)

    by Trinition ( 114758 ) on Wednesday July 28, 2004 @11:22PM (#9828011) Homepage

    I have *never* met a true hacker who programmed in java

    Pleased to meet you.

    A true hacker would know that there is no "one language". I've "hacked" together scripts in shell script, batch, EMCAScript, VBScript, and yes.. Perl! I've also written applications in BASIC, C, C++, Java. Many of these applications started life as quick 'n' dirty scripts. As I needed better maintainability, I've rebuilt them in the latter languages because they become easier to extend and maintain.

    I recall the day when Perl was the "Practical Extraction and Report Language". Now you can build entire geek community websites out of it. What happened? Perl grew up. It gained namespaces, OO-capabilities, became more consistent, etc. Not all scripting languages have this (i.e. batch files, yuck!). Some develop them overtime (look at the great strides that PHP has made since itself was a bunch of scripts written in another language). So even the best hacker tools mature. Does that make them less of a hacker tool, or more of a hacker and non-hacker tool?

    Oh, and as for why anyone would program in Java? Well, personally, I have a wife and kids to feed. It just so happens that my bosses pay me to write applications that deploy to WebSphere servers. While I could use Jython, or probably some strange Java-Perl bindings that no doubt exist, I would be quickly fired leaving my family in an unreliable state of upkeep.

    So, I "hack" in the evenings and on weekends. I "hack" at work to help get my job done. And you know what, sometimes I even do it in Java.

    BTW, Paul Graham just went down several notches on my respectibility meter. What an idiot.

  • by killjoe ( 766577 ) on Wednesday July 28, 2004 @11:23PM (#9828021)
    More to the point. Sometimes great hackers make the worst employees. They are hard to get along with, arrogant, and throw tantrums.

    The problem is that frequently the job of programming is routine and boring. Maintaining old code, debugging, writing tests etc are all crucial to delivering software but the great hackers can't be bothered with that boring stuff.

    If you see a great hacker don't hire them as an employee. Hire them as a consultant so they can come and go. They are useless once an application has been built and the mundane stuff kicks in.
  • by killjoe ( 766577 ) on Wednesday July 28, 2004 @11:29PM (#9828061)
    The problem is that the line between arrogant and asshole is pretty fine. If you have a great hacker who is arrogant and hard to get along with then replace him with a mediocre programmer who can work inside a team without dusrupting it.

    Sometimes the arrogant assholes spend all their time telling everybody else how much they suck with brings the productivity of the whole team down.
  • Oh, I think that it shows IP protection spurs innovation - right to places that don't have it. :P
  • by SageMusings ( 463344 ) on Wednesday July 28, 2004 @11:52PM (#9828184) Journal
    Thats a pretty poor statement you're running with.

    As one of the unwashed masses that has dared to write a great many apps and tools in Perl, to include complete 3-tier systems, I have to tell you that besides pattern matching, Databases are second nature to Perl.

    I can code any DB-driven app a Java coder can in less time with complete clarity and ease of maintenance. It can be done. I do it and enjoy it. Java is and always will be 75% marketing hype wrapped around a tool that has existed in various forms in different languages for some time. And please, don't pester me about JVMs and the promise of easy cross-platform. Perl uses a VM too (read up on the internals) and I can *actually* count on it to run everywhere.

    Is Java a bad tool? No, I don't believe that. However, I do not agree with those that write off "mere scripting languages" as inferior. There are different problem domains, hence different languages. Java just happens to be the one language I know of that still hasn't found it's niche. It's a me-too language that has been (for the meantime) been shoe horned into a few server-side DB integration apps.

    I would not use Perl for writing a UI (Tk is tedious) but I would consider it for core logic.
  • Re:Java Vs. perl (Score:3, Insightful)

    by David Kennedy ( 128669 ) on Wednesday July 28, 2004 @11:56PM (#9828206) Homepage
    So I'm out of the question because I'm a Java developer? Never mind that I've been paid to work in C, C++, Perl, and a few other propietary languages. Never mind that I write small Perl and Unix scripts most days. Never mind that the reality of being a working senior Java server-side developer is a knowledge of a vast, and ever growing, set of associated platforms, comms and database technologies required for large scale projects for, in my case, telecomms and financial customers. On multiple platforms. Multiple operating systems.

    Apparently my decade or more performing scientific computing or writing code on Unix somehow means I don't know that environent. Somehow choosing to use that environment to write Java invalidates everything else I know.

    You are a technology bigot and deserve the same sort of criticism I'd get if, say, I presented the view that sysadmins are just computer janitors for developers, most of whom could do the same job. See? That'd be a grossly unfair thing for me to say wouldn't it? (Even if I sometimes thought that when working with bad admins.)

    You seem to be forgetting the golden rule: pick the right tool for the job.
  • Re:Java (Score:3, Insightful)

    by be-fan ( 61476 ) on Thursday July 29, 2004 @12:07AM (#9828246)
    You've never seen my code, so don't comment. Java is a halfway-decent language for OOP, but it does not get out of your way. It beats you over the head with it's limitations at every step, forcing you to deal with a primitive type system, constraining object model, limited control constructs, and limited ability to write any abstractions that don't fit a very narrow paradigm.

    And Lisp for a videogame is hardly showing off -- commercial games have been written quite well in Lisp. Remember --- most games today are hybrids, with a low-level core in C and the bulk of the game logic in a higher-level scripting language. Since you can get C-like performance out of Lisp, and it works just great as a scripting language, it makes a great deal of sense to write games in Lisp!
  • by Anonymous Coward on Thursday July 29, 2004 @12:14AM (#9828287)
    The author of this piece seems to me to be right, within the context he's talking about. He does seem to miss another element, which I will denote with the phrase Hackers vs. Engineers.

    A great deal of the work of software development is done by guys like me. We style ourselves Professional Engineers. I don't mind working in a cubicle, because I'm a pro, and most of the slobs working in the trenches get cubes. I don't mind working on dumb projects, or bad code, because I'm a pro, and that's work that needs to get done.

    I do share a lot with the guys he's talking about. I take naps at work, because as he says, that's more efficient than zoning out at my desk. I like interesting problems. I enjoy writing code.

    But I style myself a professional, which means that much of what he says is not (I insist) true about me (because such would be unprofessional, I insist).

    This is just my opinion, and I apologize in advance for anything above that came out like me stating a "fact."
  • by mark-t ( 151149 ) <markt AT nerdflat DOT com> on Thursday July 29, 2004 @12:24AM (#9828320) Journal
    FTA:

    Though, frankly, the fact that good hackers prefer Python to Java should tell you something about the relative merits of those languages.

    Actually, the fact that good hackers prefer Python to Java only really tells you something about the relative unsuitability of Java to hacking. That a language is not easy to hack with is not a reflection of the strength of the language, it a reflection of how "safe" the language is.

  • by dvdeug ( 5033 ) <dvdeug&email,ro> on Thursday July 29, 2004 @12:37AM (#9828393)
    Claiming that 'good hackers like language X' misses the whole point. Good hackers will use the best tool for the job.

    Maybe, but most of a Linux distribution is written in C, C++, Perl and Shell because that's what the programmers are used to. Even stuff that should use Prolog don't, because it's not taught in schools and most hackers aren't familar with it.
  • by killjoe ( 766577 ) on Thursday July 29, 2004 @01:07AM (#9828532)
    Geez can I please visit your planet once in a while. It sounds like a wonderful place.

    Tell me something. On your planet of self maintaining, self debugging and self testing code is the code self commenting too? Now that really would be nirvana.
  • Re:Java (Score:3, Insightful)

    by f0rt0r ( 636600 ) on Thursday July 29, 2004 @01:40AM (#9828652)
    And this cannot happen with Java? I reuse Perl code I wrote years ago. It is layed out logically, everything is well named and well commented, I generally just copy a subroutine or two from my old code and reuse in whatever I am writing at the moment that is applies to. What you are describing are bad programming habits, not a bad programming language.

    You have to keep in mind when you code something that reusable parts should be put in separate functions, the flow should be logical, variable/function names well documented, as well as explanations of what the included libraries do so people who come after you will have a clue how your code works and what libraries it needs to run. I could go one, but I think I have made the point clearly enough.
  • by Anonymous Coward on Thursday July 29, 2004 @01:56AM (#9828714)
    In 1997? I had been using X11 on *solid* DEC workstations since 1992 or so, and Unix was more than capable of playing well with graphics. Hell, I was using X11 on relatively solid Linux workstations in 1993, and getting decent performance out of it!

    NT 3.51 was a decent operating system, designed as it was by one of the experts on VMS. NT 4 (which was released somewhere around 1997) was an enormous step backwards, putting the graphics code into the kernel -- a step that it took until Windows 2000 to recover from.
  • by Keel ( 11611 ) on Thursday July 29, 2004 @02:01AM (#9828733)
    I firmly believe that the notion that great software developers are arrogant and difficult to get along with is a total MYTH. I think those individuals believe they are great (hence the word arrogant) and they may successfully convince others, especially non-technical people, that they are great, but they are not.

    In today's large, complex, object-oriented enterprise application development environments, being able to work with teams and communicate is an essential skill. Sticking an asshole in a corner and waiting for him to kick out thousands of lines of code by himself doesn't fly anymore. Developers not only have to get along with their teammates, they often have to communicate with business people, or even customers. This is even more true when they're consultants.
  • by killjoe ( 766577 ) on Thursday July 29, 2004 @02:50AM (#9828922)
    No code is self modifying. All code needs maintenance. Business rules change, the marketplace changes, the competition does something you didn't expect etc.

    If a GreatHacker wrote the original code then the same GreatHacker will derive absolutely ZERO pleasure in modifying his/her old code to work in a slightly different way. GreatHackers thrive on solving new and difficult problems.

    So if you hire a GreatHacker good luck getting any productivity out of him/her after the hard and creative work has been done. Unless you have him/her working on something new he/she is likely to go into serious apoplexy once the work gets boring and mundane.
  • by crucini ( 98210 ) on Thursday July 29, 2004 @03:16AM (#9829057)
    I write a lot of Perl. I almost agree with you, but I think most of the code we write at work is just average. It's not great, but it's reasonably easy to understand and maintain. I have written great, beautiful code at times, but it takes more time.

    The key reasons for shaggy code are deadlines and ever-shifting requirements. When the requirement is clearly defined and you have ample time, you can plan the solution and produce something great.

    Really good perl code is, for many things, some of the best code I've ever seen. Really bad perl code is easily the worst I've ever seen. There is more bad perl than good perl.

    I agree with both - but as I said, I mostly see (and write) average code at work.
  • by po8 ( 187055 ) on Thursday July 29, 2004 @03:20AM (#9829078)

    A computer is a machine for getting wrong answers quickly.

    Perl can help with that.

  • by Anonymous Coward on Thursday July 29, 2004 @03:32AM (#9829134)
    Bill Gates blows goats
  • Hah! (Score:4, Insightful)

    by warrax_666 ( 144623 ) on Thursday July 29, 2004 @04:33AM (#9829402)
    everyone uses it, because it's all they know exists.

    Or maybe they tried it and found it lacking?

    And what is this fascination with OOP? The only task I can think of (please name some more if can think of any) that lends itself naturally towards OOP is GUI/Widget handling. Everything else is much better expressed using so-called "sum types" (read about ML to find out what they are) and pattern matching.

    Forcing everything into the OOP way of thinking without even considering that e.g. the functional/declarative way of doing things might be better suited to some tasks is certainly not clever. So much for Ruby (and Java, but the Java people probably didn't know any better at the time).
  • by runen ( 689179 ) on Thursday July 29, 2004 @05:50AM (#9829659)
    This sounds more like the Tao than reality.. "Code written by a great hacker usually doesn't need maintenance because it already does the right thing" All software needs maintenance, no-mather how close to perfect (perfection is an illusion) they are from the start. The world changes, requirements changes, frameworks, APIs, Operating Systems, hardware.. everything changes. Sorry for dissing the Tao - I shall not sleep tonight :)
  • by robnauta ( 716284 ) on Thursday July 29, 2004 @06:21AM (#9829758)
    "the best hackers use Pascal and COBOL."

    I think, by any definition I am familiar with, we can safely rule out that particular claim. Besides, maybe the best hackers in the world never shower, shave once a week, wear 10 year old T-shirts with stains, and (as a consequence maybe) haven't had sex in 5 years, or never at all.

    Should we still follow their livestyle blindly ? I don't think so. So it doesn't matter which language the Uberhackers use, who cares if they use Perl, Python or Ruby. I use what I am most familiar and productive in myself.

  • Re:Java (Score:3, Insightful)

    by jrumney ( 197329 ) on Thursday July 29, 2004 @06:33AM (#9829793)
    Insisting that one and only one language is the true language is just silly.

    And the sign of someone who is definitely not a great hacker. Great hackers can sit down and program in any language. Arrogant arseholes refuse to work on projects because of the language or OS being used.

  • Re:Great Engineers (Score:3, Insightful)

    by jrumney ( 197329 ) on Thursday July 29, 2004 @06:50AM (#9829860)
    If you were in the market for a new stereo, would want something that was soldered together in some guy's garage? That's a craftsman/hacker. While it's true he may have alot of raw talent, his stereo is not going to be better than one designed and built by engineers at Bose.

    If you are talking about sound quality, I doubt a craftsman working in his garage could come up with something worse than Bose. If you're talking aesthetics, it depends how skilled the craftsman is.

  • by IrresponsibleUseOfFr ( 779706 ) on Thursday July 29, 2004 @06:54AM (#9829868) Homepage Journal
    I wonder, how does one become a great hacker?

    How does one become great at anything else? 1 part talent, 9 parts determination.

    Another part of the question is: how do organizations support the development of "great hackers". The first part is to recognize that programming is a skill. There is only one proven method of developing skills in people, and that is mentoring. We do it for doctors. We do it for carpenters. We do it for all professions that depend on the workmanship and talent of one particular person, even if they are in a team setting. It is the only proven, time-tested way.

    That said, most companies don't want great hackers. They want coders. That is interchangable people who can write code to produce a product. Coders don't require originality. They require that you can implement features X, Y, Z in a product in a certain time-frame with a certain quality. I personally don't think that being a coder is a bad thing. Not everyone is very ambitious at their job. Frankly, they have better things to do. Spend time with the wife and kids. Go fishing. Whatever. A job is what they do, not who they are. I highly respect that point-of-view. The most important thing to realize if you are a coder is that you are a coder. You should work 9 to 5, 40 hour weeks in a nice environment for good pay. Don't let your job control your life.

    Great hackers are wired differently. Their priority is what they produce. Everything else is secondary. They are out to change the world and how it works with their art. But the reality of the matter is, they don't have as much of a life outside of their job. They don't get paid as well unless they are in a start-up that goes big. Their financial situation is naturally riskier. 9 to 5, 40 hours a week are not practical. While, we might idolize great hackers for the amazing things they are able to produce. For a good portion of the time, it actually sucks to be them. And success is by no means guaranteed.

    Most people fall in between these two extremes. Take into account your ambition and what you want to do with your life. Great hackers make huge sacrifices. You might find it to be more satisfying to just be a good coder.

    Organizations fall into extremes of how they support programmers also. But the best environment for programmers is that there needs to be a way for a person to work uninterrupted and quiet for as long as they need, and there should also be a place where programmers can mull about communially during breaks.

    Microsoft is actually a great place to work. They do attract some of the best coders and some great hackers. This is with respect to working for them, not their business practices.

    The worst organizations to work for are those that claim that they want great hackers, when all they really want is a bunch of coders. These organizations will appear to be run by PHB's. They use duplicity to build a better wage-slave. It is simple cost/benefit and trying to extract the maximum amount benefit out a person for the lowest cost. I honestly believe this has become the dominant thinking in American corporate culture. Partly, because it requires no skill, and why the US is losing its technological edge. It is very demoralizing to work for those companies too. No one believes implementing yet another payroll system is going to change the world. Or replacing an old mainframe system with some sort of EJB web interface. Businesses need this done. But it is done by coders, not great hackers.

    I think that this basically summarizes what Paul Graham said along with my own insights. I think Paul Graham plays a little bit fast an loose with definitions, which is why, what he says comes off as controversial. When, in fact, it isn't. He is stating well known facts, just not very well :)

  • by ultrabot ( 200914 ) on Thursday July 29, 2004 @06:59AM (#9829889)
    how about something more important, like integrated OOP. nothing's worse than claiming to be heavily object oriented, that has a bolted on OOP model.

    OMG, not the Ruby cliche again.

    Python is not by any stretch less OO than Ruby. Having first class functions is not a liability, it's a strength. Object model is not bolted on Python - everything in Python is an object.

    python reminds me so much of windows. everyone uses it, because it's all they know exists.

    Ruby people go to great lengths to attack Python at every opportunity. For the most part this appears to be because modern Python renders Ruby pretty much irrelevant. Ruby is not really better than Python as a language, period. Ruby is better than Perl, and pretty much equivalent to Python on all linguistic accounts, but loses royally on maturity, community and industrial popularity.

    Offset that with the fact that most Rubyistas that talk crap about Pythonistas don't really have experience with Python, but merely reiterate the misunderstandings of other Rubyistas. Repeating a lie often enough doesn't make it true - it makes for mediocre advocacy that might catch a few clueless perl refugees, but isn't going to work for "great hackers" which is the topic of today.
  • Janitor... (Score:3, Insightful)

    by Big Sean O ( 317186 ) on Thursday July 29, 2004 @07:25AM (#9829962)
    At my last job, the guy who emptied out the garbage cans (so I guess that makes him the janitor) was a real computer enthusiast. He knew all about firewire, bluetooth, USB2.

    He was a janitor in a State Government building, and he was about 40, so I'm guessing he got the job when he was a kid (maybe he bailed out of high school because it was boring) and got this job as a janitor. If I was 10 years or so from a full-ride pension, I'd empty garbage cans all day and hack all night, u'betchum.
  • by JerkBoB ( 7130 ) on Thursday July 29, 2004 @09:00AM (#9830458)
    you are using CS classes as an argument to show of your skill?

    Interesting that you would nitpick that one point, and do it with poor grammar to boot. Did I strike a nerve?

    No, I'm not using the fact that I had CS classes as a testament to my mad skillz. I was simply making the point that programming languages are just tools to be wielded by a programmer. If you've learned basic CS concepts (either in the context of a formal CS curriculum or by teaching yourself), it's fairly trivial to apply those concepts to any programming language. Some languages lend themselves to solving certain sets of problems more quickly and easily than others, though.

    That probably makes too much sense to get through to you though, huh? I know, I know... There I go throwing logic into the argument again.
  • Re:Java Vs. perl (Score:2, Insightful)

    by arudloff ( 564805 ) on Thursday July 29, 2004 @09:29AM (#9830734) Homepage
    The question really is, is it possible to be a hacker, and have a business mindset? What he proposes in this article would make it seem impossible, and the sysadmin crowd tends to not even fathom the possibility.

    The industry doesn't give a rats ass for the perl/php/python/flavor-of-the-week mentality. Time is a resource and as a resource it's way more valuable than the hardware. They don't care about spending more money on bigger and badder equipment. Therefore, really, coding in the name of effeciency is truly a dying concept. It's coding in the name of delivery and maintainability (thus the need for fast, widespread standards, not difficult to understand syntax in the name of cool)

    I spend my "hobby code" time hacking on whatever side project me and my buddies can come up with. But during the day hours, I sold my soul to the java world (and will undoubtedly do so again to another language in the future) to make that paper. More money = the sooner I have more freetime to play.
  • by TuataraShoes ( 600303 ) on Thursday July 29, 2004 @09:36AM (#9830813)
    Generally, I enjoy Paul Graham's techno-philosophy. But I think he's gone off the rails a bit here.

    First of all, his word 'hacker' seems to imply something that excludes application programming. Most of my job is application programming. Second, a 'great hacker' seems like a rare breed. It's like talking about the great legendary firefighters, when in reality, many good hard working fire fighers could put out regular fires just as well.

    I am not a 'great' programmer. But I write good, stable, maintainable, software. If I may be so bold, I think some of my work is artful, functional and bloody good.

    I enjoy perl and I enjoy Java. The scripts that personalise my linux box are perl. The scripts that shoehorn my customers' data into various systems are perl. The cgi's that give an interface to email and admin utilities are perl. But If I need a gui (other than http - and yes, I've used Tk before) or if I'm starting a new large scale project that will be coded and administered by a team, I would choose java. Why, because we have a large scale server app entirely in perl, and many of the routines are so stylised to the person how wrote it, that nobody else can figure out what's going on without hours of head scratching.

    So each tool has its merits. It may be that some of the Mozarts of computer software prefer various languages. And these guys may be Paul Graham's buddies. But the rest of us are programmers of varying experience, many very good. And we can write elegent code in Java just as we can pen poetry in perl. Some of us can even pick the right tool for the task without imagining that the choice says something about our personal greatness.

  • by elronxenu ( 117773 ) on Thursday July 29, 2004 @10:19AM (#9831228) Homepage

    I hate Perl. I hate interpreters. I hate pathetic attempts at object oriented behavior.

    Perl OO is actually very elegant. Let's check the three primary characteristics of OO, against Perl:

    • Inheritance - tick
    • Encapsulation - tick
    • Polymorphism - tick

    Inheritance - How much "overhead" is there in creating a new class in perl? Almost nothing; simply set your package name and then start writing methods. Perl takes care of inheritance, even multiple inheritance on every method call. Since objects are usually created as hashrefs, there's no ambiguity about the contents of an object which inherits from multiple parent classes.

    There's no need for separating declarations and definitions - just "use" the package names which you need - typically only when instantiating new members of those classes.

    Encapsulation - probably perl's biggest advantage is that the hashref (associative array) is a first-class datatype in the language. There is no need for container classes, because you can store anything you like in a hashref. Hashrefs handle easily many real-world problem domains: categorisation of source data (e.g. sum by month), easy creation of data structures of arbitrary complexity, dynamic modification of said data structures. Programmers spend less time thinking up elegant designs for linked lists or btree structures to hold data. A hashref neatly encapsulates an object's instance data and it permits inspection. Sure it's possible to change a value inside a hashref without going through a class's setting method - but then, it's not perl's job to set the rules of object access. You set the rules yourself and you're solely responsible to follow them. Getting back to the hashrefs though, most importantly the use of hashrefs means that there is no need to to declare every single item of instance data which a class has - each class can add to and take from its instance data at will.

    Polymorphism - a perl object is a reference to something, blessed into a class. Any perl code can call an object's methods without having to know anything about the class of the object. In C++ for comparison, a reference needs to be declared as some class, and only the methods defined for that class can be used on it. What if you want to pass in references to any of several classes? Well, all those classes have to have a common parent class, and only the parent class methods can be used by the code which is using the reference. What if they don't have a common parent class? Well that's tough, but there are a lot of kludges which C++ coders can use to get around the language restrictions, like casting references and templates. Perl OO has none of these design flaws - you have a reference, doesn't matter what it is, you can call its methods.

    Memory management - unlike C for example, perl has automatic memory management. Storage is returned to the heap when it goes out of scope or when the last reference to it is deleted. Sure C++ has "new", but you have to know when to call "delete".

    First class string support - most programs use strings a lot, and it's very convenient to have first-class string support within the language (and automatic memory management so strings can be extended without overflowing a buffer).

    First class regex support - again, very convenient, very flexible, very quick to write

    Certainly perl can be used to write hideously ugly and unmaintainable code - but then it can also be used to write neat and well-structured code.

    I came from a C / C++ background. I found coding OO perl to result in much more natural OO design than was possible in C++. I could focus on designing a system of independent classes which provided functionality, and a set of interoperable classes which solved the application problem, rather than trying to fit my needs into what C++ could do, or even worse spending time trying to get around the limitations of C++. There's a reason that C++ is so devoid of public class

  • by poot_rootbeer ( 188613 ) on Thursday July 29, 2004 @10:37AM (#9831397)
    Code written by a great hacker usually doesn't need maintenance because it already does the right thing.

    I see you've never worked with a typical business team.

    Sure, a great hacker will produce code that Does the Right Thing based on the specs he (or she) is given, but in the real world those specs are guaranteed to be between 5% and 100% WRONG. The client can't explain what it is they actually want, the business rep can't help draw real specifications out of them, the systems analyst can't convert the nebulous requirements into a solid spec.

    Clean as the code may be, if the Right Thing at the core of it turns out to be the Wrong Thing, you're going to have a maintenance nightmare.
  • by jschottm ( 317343 ) on Thursday July 29, 2004 @10:54AM (#9831610)
    Maybe I'm one of those "sysadmin types" who doesn't know better, but if that's your view on perl, you're not using it correctly. Perl is very good at writing software that works with text data. I do projects such as extracting data from html files and tossing it into a database or making custom log file parsers in perl with little effort or time. I _could_ write the same thing in C, C++, or Pascal (still haven't learned Java), but why would I? It would take longer to write and longer to debug. It might execute faster, but that would have very little effect on the way that the tool is used (the last log file parser I wrote can go through 4TB of data transfer log files in about 4 seconds). Could you explain how this is not knowing better?

    It's not cool, sexy work, but it's stuff that has to get done. Most people don't get to make really cool applications, we write stuff that handles shifting the data that the world generates around.

    That said, I think Graham is wrong in dismissing his "non-geek" languages. Use the right tools for the right project.
  • by crucini ( 98210 ) on Thursday July 29, 2004 @12:03PM (#9832429)
    Sorry to tell you this, but you are a little out of your depth. The poster to whom you are replying clearly explained that he knows and uses a variety of languages and isn't speaking from zealotry.

    Im sorry you hate a language merely because of run time errors. Woah! What a concept, a runtime error! All coders, great or small, have run time errors at some point.

    Different languages apply different degrees of rigidity at compile time. One drawback to scripting languages is that mistakes that could have resulted in compile-time errors become run-time errors instead. Grandparent was making a very specific point, and anyone experienced in C and Perl should have understood that point.

    He isn't advocating that you switch to O'Caml - he's not even ready to switch himself, in professional life. He is describing the mindset that comes to someone who has used the conventional languages heavily for many years. You may arrive at that mindset yourself one day.
  • Re:Erm... (Score:3, Insightful)

    by Arkaein ( 264614 ) on Thursday July 29, 2004 @12:20PM (#9832608) Homepage
    First off, I'd like to see those benchmarks. I'm not sure I believe them. Oh I'm sure such results could be achieved, but likely they were programmed in ways that do not take advantage of the best features of Python. Probably things like Fibonacci tests and the like. Pfff.

    Second, I've got a secret to share with you about writing software. The secret is that in most applications not more than 5% to 20% of the code actually requires the speed that an optimized C/C++/Java implementation would give it. GUIs, text processing, database queries, networking (and just about any I/O bound) will be very close in speed in Python or similar languages to natively compiled code. In the cases of GUIs especially most of the time the CPU is simply waiting on the user anyways.

    Now what about that remaining 5% to 20% you may ask? If you need the speed then implement that in optimized C or C++. Python is designed to interface such code easily. But do us all a favor and leave the baggage of you high performance languages out of the main application logic.
  • by WolfWithoutAClause ( 162946 ) on Thursday July 29, 2004 @12:40PM (#9832853) Homepage
    I'm sitting in front of a system containing many modules and programs, and between them including over 60,000 lines of Perl. Is that a large system?

    Um.... No. No way. That's midsized.

    Come back when you have atleast 600,000 lines; or 6 million.

    I've worked on projects with 500+ people hacking on the same code, or different streams of the same code. That's a big system. And there are bigger.

  • Re:About Ocaml (Score:3, Insightful)

    by Wastl ( 809 ) on Thursday July 29, 2004 @03:56PM (#9835878) Homepage
    i>Well, guess what I found: not a single feature that C++ does not have!

    Two words: static typechecking. This single property has very far reaching consequences. Most importantly, it allows to detect many programming errors at compile time that would go unnoticed in most other languages. Oh, and don't tell me C++ has a strong type system. It hasn't. For instance, I can do all kinds of nasty things with pointers that are never checked.

    Other features:

    • higher order functions, partial evaluation
    • garbage collection (really efficient, not the time and memory consuming stuff from Java)
    • close to the mathematical description of problems
    • ...
    The point is, I can still program the functional way with all its advantages, but revert to imperative style for the small amount of code that really needs to be fast. Personally, I still prefer Haskell, though (lazy evaluation is fun!).

    Sebastian

  • Re:About Ocaml (Score:3, Insightful)

    by Wastl ( 809 ) on Thursday July 29, 2004 @04:06PM (#9836004) Homepage
    No, it does not have any advantage. Any functional style algorithm can be expressed in imperative style.

    Any program can be written on a Turing machine. Or in Brainfuck [muppetlabs.com] for that matter.

    And C++ can do functional programming. It *is* a functional language, in some respect.

    No, it fails on most properties that make up functional languages: functions are not "first class", there is no static type checking, there is no partial evaluation, variables represent memory cells instead of values, ...

    Sebastian

  • Re:About Ocaml (Score:3, Insightful)

    by Anonymous Brave Guy ( 457657 ) on Thursday July 29, 2004 @04:20PM (#9836180)
    C++ can not only use functions as data, but also objects as functions. Closures are not needed in C++, since we have templates.

    Now, see, you almost had a point when you referred to function objects. They can indeed serve many of the same purposes as closures. But really, such support as C++ does have for treating functions as first class entities is hacky and unreadable template garbage at best. I'm quite a fan of C++ for some things, but that sort of claim is just unrealistic.

    Let's take a specific example. Compare the standard "fold" function in something like ML or Haskell with the hackery required to achieve anything close to the same effect in c++. In the functional languages, it's trivial. In C++, it's... well, if you think it's at all elegant, please feel free to post your implementation here so everyone else can learn from it.

    C++ has pattern matching exactly like ML. Variants can be created with templates.

    Huh? Even people like Andrei, who have written feature articles on this subject, can't provide C++ with anything close to the elegance of a typical functional programming language's "match" construction.

    In the end, there is no difference to C++. It [declarative programming] is still imperative programming.

    Um, no. There is a world of difference. Most of that world is full of side effects, things which a purely declarative style makes rather difficult, no?

    Any functional style algorithm can be expressed in imperative style. And C++ can do functional programming.

    Of course. So can assembly language. Whether they can do it well enough to be of any real use is a different question entirely.

  • Re:java duuuudes (Score:3, Insightful)

    by kaffiene ( 38781 ) on Thursday July 29, 2004 @05:10PM (#9836904)
    I'm a painter as well and I love oil paints. I think your idealised Engineer is just that - an ideal. In practice, I don't think people who make software are like engineers, or like scientists, I think many software creators are like painters. And like painters, I think software creators have affection for their tools.

    Show me someone who has just created their first language with flex and bison and doesn't get a bit of a buzz out of it. Show me someone that has architected something beautiful but cannot see the beauty in it.

    No, I think you have an unrealistic view about software. And if I'm no longer an 'engineer' I'm not sure that's something I really care about, never having claimed to be building bridges in the first place.
  • by SigmaEpsilonChi ( 801332 ) on Thursday July 29, 2004 @05:13PM (#9836940) Journal
    I'm uncertain what you mean when you suggest that "the current state of O'Caml is that interfacing to these kinds of 3rd party libraries (using standard DLL or share library interfaces) is almost unworkable."

    Are you referring to the ability to construct bindings for shared libraries written in C? Are you referring to being able to generate bindings to shared libraries written in C? Are you referring to being able to write short annotations for introducing symbols from shared libraries written in C in OCaml code?

    I suppose one of the problems with being vague is that people have no idea what you're asking.

    You can write bindings to C libraries by hand using the FFI, like you can with Python, Perl, or Java.

    There are ways of generating wrapper code for interfacing to shared libraries, like CamlIDL [inria.fr] and SWIG [swig.org]. You could also generate interfaces for use with the Dl module.

    The Caml Humps [inria.fr] site is a good place to start looking for some of the presently available libraries.

    I think a far more annoying aspect of Objective Caml is that it is not currently possible to have natively-compiled dynamic shared libraries written in Objective Caml; all programs will be statically linked to Objective Caml libraries. You can load dynamic bytecode, but that's really just not the same.
    There once was a program for wrapping Objective Caml code into a DLL but I don't think it has been kept up to date, it's a dirty approach, and as far as I recall it only worked on Windows.
    There's the SCaml [boblycat.org] effort, but it seems to be falling behind, is incomplete, and only works on a few platforms.

Happiness is twin floppies.

Working...