Paul Graham On 'Great Hackers'
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."
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.
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!
+ Donald Gunth
+ Email: dgunth@quicktek.net
"Caffeine is the greatest lubricant ever created." -ESR
Cool! But, doesn't this still mean that the accounting system is screwed up? (While acknowledging that the users are vindicated).
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.
It is GNU/Great Hackers.
Yes, but everything that was done there (suspending employees, halting work) was a huge waste (of time AND taxpayer money). They're also making everyone (at LANL and here) take more training for all of this, even if we don't handle classified materials.
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.
Archive.org Wayback Machine version
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.
>> it feels like reading text on an 80-column screen written by someone on an Atari 800.
It's for all the faggots using netscape 2 and lynx, which apparently is the cool thing to do on linux.
Unless you had an add-on (or the hack from Antic IIRC that used a 4 column wide font), the Atari 800 only had 40 column output.
I can attest to the strictness of classified or top secret information.
My dad, and my friends dad were both in the navy as medium-high ranking officials. They both worked in comm, so much what they did was all classified or such. However the worst thing was reading manuals that were classified, as they had to count the pages before, write down what they read, and then re-count the pages with another officer to attest the fact.
It was better to remember what you neded to know than to do the mound of paperwork for using classified or TS materials.
Still, from what my dad told me (non-classified), I was seriously considering joining the navy/air force as communications.
He knows an interesting set of people, considering that C didn't come up once. Is Linus Torvalds a great hacker? Apparently not because if he was he would have coded the kernel in Perl!!
You ever notice that magazines, printed on paper, have several narrow columns instead of one wide one? The eye can read a narrow column quicker and with less strain than a wide column. Web pages don't often do several columns, due to the scrolling problem but a narrow column still reads quicker. Your way is slower and harder on the eyes.
Good design is good design because it helps the user get his task done quickly. One of the points he brought out in the article.
I remember standing behind him [Trevor Blackwell] making frantic gestures at Robert to shoo this nut out of his office so we could go to lunch. Robert says he misjudged Trevor at first too. Apparently when Robert first met him, Trevor had just begun a new scheme that involved writing down everything about every aspect of his life on a stack of index cards, which he carried with him everywhere. He'd also just arrived from Canada, and had a strong Canadian accent and a mullet.
Thereby *really* standing out as an nutjob oddball.
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.
Engineering is the art of compromise.
Sure-fire way to blow your cred. Right tool for the job and all that.
So the geeks working in the broom closet can have nightmares about having an office with a window facing a brick wall (no pun intended).
When he starts comparing languages or, to be more specific, makes the blanket statement that better hackers like Python over Perl I am reminded of the fact that the best hackers actually use OCAML and Objective-C.
"No they don't", you cry, "the best hackers user Assembly and Visual Basic".
"No, you're a fucking moron", someone else pipes up, "the best hackers use Pascal and COBOL."
"No, you are a fuckwit," a voice from the back of the croud screams, "Fortran and Algol are the languages of the best hackers".
"Quiet you fools," an elderly guru from the wings yells out, "I happen to know that the best hackers use Perl when they aren't dictating their programs to their secretaries to be outsourced to Taiwan to be compiled into Haskell"
"Shows what you know old man", a kid in the front row sneers, "the l33t hax0rs use Lisp and C++".
Well anyway, it looks like this might go on for a while, please enjoy the other comments while we try and work this out...
Waltz, nymph, for quick jigs vex Bud.
Spend some time somewhere like Perl Monks 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 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 a fairly well-known Perl programmer.
So, is Claudio Destro from Milan, Italy just an AstroTurf(TM) or a devout follower?
no startup can be the next Microsoft unless some other company is prepared to bend over at just the right moment and be the next IBM.
the article makes some good points about hacker personality, but python has nothing to do with being a great hacker. it all depends on the problem you're trying to solve. I know plenty of great hackers, who are regularly produce excellent code. Some of the best hackers I know get there through persistence and independent thinking. Creativity plays a great part, but deep knowledge of a given subject is a better indication of a great hacker.
You ever notice that books, printed on paper, have one wide column?
It's self-evident that "the eye can read a narrow column quicker" -- because there's less information there. That does not mean, however, that you can process large amounts of information more quickly if it is formatted in several narrow columns.
The reason magazines and newspapers use narrow columns is so that they have more flexibility to route around the ads and pictures. Novels generally don't have this problem, so they don't bother.
Probably he had dual monitors configured perfectly and broken his second monitor at some point of time, then after wondering how to re-configure it to use the single monitor.
unused account
I've heard the name Paul Graham before, but never really read anything by him until this. I don't think I'll bother again.
A few of his key opinions may have merit. There really is a certain personality type who matches the characteristics he describes, IME, and given certain other character traits (people skills, for example), they really can be the most productive guys to work with. However, a lot of that article is simply stating his own highly prejudiced opinions as if facts. This was the giveaway:
Right, because no original and very well designed software ever gets written by Windows hackers. In fact, no self-respecting hacker would even go near Windows, especially if he wanted to get paid so he could afford somewhere to live, or he was offered a job on an interesting, bleeding-edge development project. Go open source, Linux R0x0rz, yada yada, blah blah. After all, cloning a clone of a clone business or network app while accusing Microsoft of never innovating is much more L337. The guy's like a 13-year-old Slashbot wannabe, and you could summarise the content rather more concisely as "Y'know, INTPs often make good hackers."
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
I was reading through that article and when I got the point he makes on Java (which I will admit to sharing his point) all I thought was..
"Oh great, now the article will only have posts from the Java duuuudes who resent anything not done in java"
Truth be told and after thinking back through my ten years working as a programmer in many companies, I agree, I have *never* met a true hacker who programmed in java, and I don't think that is a bad thing. In fact, java is what they teach in college, so, it goes to show that it is what the "average" person is going to be using. There are a lot of java jobs (not jobs I would want, and in fact would prefer to sling coffee at a starbucks than work with it again) and they are there for the people who know java.
However, I am curious about python as the language of choice, as I would think that C would trump python, but either way, python does rock hard and seriously. (though python specific jobs are just not out there as much).
Anyway, back to my point.
As a side to that article, hackers having that ability to concentrate, yes.... They do..
Most all of them have some form of ADD or OCD however to counterbalance that ability to focus on things they are intense on.. Wandering around a toy store with a hacker will teach anyone patience.
Paul Graham I feel has very good line on the pulse of this industry.
anime+manga together at last.. in real time.
Whitespace and Intercal.
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.
Bill Stewart
New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks
this guy knows what he is talking about. dont bore me with the minutia. dont bore me with the idiotic user interface garbage. i need quiet. i need equipment and tools. and above all else... i need to love what i am doing. and i do love computers and programming them. the language doesnt really mean much though.
He wrote At a startup I once worked for, one of the things pinned up on our bulletin board was an ad from IBM. It was a picture of an AS400, and the headline read, I think, "hackers despise it.'' [1]
You bonehead, what a MARKETEER thinks is a 'hacker' (that is, a criminal) hates the AS/400.
*This* hacker thinks the AS/400 is the most secure, uncrashable system extant. Go ahead, try to gain superuser (QSECOFR)on an AS/400. You can't. AT ALL. Even QSECOFR cannot change a system program to do something it's not supposed to. Go ahead and try to crash one, I've never seen it done short of a lightning bolt.
BTW, that footnote in his article said nice things about IBM Thinkpads. Sure they are lovely, but PCs are TOYS compared to the REAL computers.
The latest Slashdot meme.
I consider myself to be somewhat of a seasoned hacker. I do hours of pretty intense C programming (Linux kernel code) on a daily basis. I feel that I have mastered the C programming language. Sit me down with any project written in C, and I will be able to (at least syntactically) figure out exactly what's going on with just a glance. I feel absolutely confident in my ability to easily slam through any task in C, without having to resort to any reference guides or manuals.
Now that I've established myself as a cocky elitist bastard to the Slashdot crowd (or do I just fit in now?), I would like to make one thing clear: I hate C.
I hate memory corruption (a.k.a. segmentation faults for the rest of the world). I hate explicit types and declarations. I hate casts. I hate memory management (kalloc, kfree - a.k.a. malloc, free for those alien folks off in userspace). I hate iterators. I hate list structures assembled with pointers. I hate pointers for that matter. All that C really does for me is provide me with activation records during function calls (okay, and cross-platform compatibility). The only thing I like about C is the fact that you can compile it and it's fast.
I hate Java. I hate class cast exceptions. I hate null pointer references. I hate virtual machines. And I still hate iterators.
I hate Perl. I hate interpreters. I hate pathetic attempts at object oriented behavior.
I hate Python. I hate C++. I hate PHP. They all suck, all for (more or less) the same reason: run-time errors.
Enter Objective Caml. More likely than not, when you've got your O'caml program compiling, it just works. No run-time errors, like memory corruption, nonsense casts, class cast exceptions, or null pointer references. You can compile it down to native code, and it runs just as fast as C in many (if not most) cases. There is a complete standard library with pretty much everything you would ever want. There are hooks into GTK and Mysql, among other C libraries. You have real objects, done in a halfway decent manner. Persistent data, by default, exists in a structure (like a list or a type), as it should. Functions are first-class citizens. Iterative structures are possible, but usually not required. Tail-end recursion introduces no stack overhead. Algorithms implemented in O'caml just look elegant, like lambda calculus expressions.
The problem, of course, is that it will take me several more years before I get to be as efficient in O'Caml as I am currently in C. And anyone who comes in after me to maintain the code will probably know C much better than O'Caml. This means that for any userspace projects that I do at work, it's gotta be in C. I can get by in C, because I am a very disciplined coder, and I know all the quirks and tricks to developing and maintaining good C code. Occasionally, I will get a nightmare mystery segfault in a very large project, and I will curse C and yern for O'Caml, but I must persist.
At the end of the day, my own Open Source projects that I do on nights and on weekends are in Ruby (if they are web apps) and O'Caml (otherwise). This doesn't necessarily mean that O'Caml is the best language for any given project (mainly do the competency of the employees, current and future, with regards to O'Caml). Maybe in about a year or so, after writing a few Open Source projects in O'Caml on my own time, I will feel confident enough to suggest I use it for a project at work. Even then, it will be a hard sell, despite the fact that it is superior to C in almost every way.
So my point, if I have one, would probably be that true hackers like to experiment with esoteric languages that the rest of the world knows little about. The shear number of programmers out there who know C and Java present a significant barrier to entry for elegant languages like O'Caml. I suppose that getting the academic types to emphasize languages that solve many of the problems that have plagued computer languages for the last 30 years might begin to help with the situation. Until then, I'll be firing up gdb...
You said:
He said:
There's a difference. (Emphasis added.)
He's right. You guys are so personally offended you can't see the forest for the trees.
/. crowd. In your opinion, who's the most likely hacker?
He's talking about hackers here, kids. Not 90% of the
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".
The "Python and Perl are real languages, for real hac0rz! PHeAR mY SKiLLZ!" rant was a bit comical. Does this guy actually *work* in a real, corporate environment?
To give you an example. At my job (Fortune 100 company), in my department, we design and develop internal web applications to support the business. Applications are load tested to support up to 100 concurrent users per server. They also average around 15-20 lines of code per hour. This is all using a structured "dictated" Java "framework" that was developed in-house to keep things "standardized". I chose to write an application totally separated from this process. Mine has had more than 1100 concurrent users (and will likely scale to over 3000), and was written at the rate of around 110 lins of code per hour.
So in response to the article, Great Hackers (TM) choose the right tool for the right job, and don't need to express their Perl fetish in environments where a year after they leave, some poor guy in India needs to go through and implement a new feature in your mad-skillz perl script.
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.
Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
Obviously lots of great hackers write on Linux in things like Python and Perl. That's a no brainer. It is also obvious alot of great hackers work in Java. Slam dunk if you live in the real world. He also gets Bozo the Clown status for suggesting Windows is a sub par environment. Only a blind person could use Windows and see the hand of many awesome hackers.
HenryJamesFeltus.com
perl is great for databases, too; look into the DBI:: classes some time. The thing that makes Java useful is the commercial toolkits that easily build GUI forms, JavaBeans, etc.; however, the main interface that big companies need to their database is either their website or a simple locked-down interface to a transactional backend. PHP and ASP easily compete with JSP for the first, and a perl program running in an SSH instance might be the best environment for new development of the other. (However, I don't have a production system to back that claim up.)
I find it interesting that on one hand, he says no real hackers want to use Microsoft software, but it's Microsoft that has the number one hacker perk of private offices. So does that mean that no good hackers work at MS or that they rate offices higher than the tools they use?
I mod down all the "free iPod"-sig losers.
Wow, now that bit of flotsam was straight outta 1999!
eat shiat and bark at the moon
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.
Perl is a language only its mother could love. And some people who've never coded in Lisp. Python is a much nicer language of course.
But it's a scripting language.
By which I mean: on most modern benchmarks I've run, it's well over fifteen times slower than Java. Than Java!
Java's got lots of faults. But it has one very good feature: it's rapidly getting faster (as is its evil stepsister, C#) This is largely due to design decisions in the languages which traded off some late binding and dynamic typing for efficiency. Python doesn't make those promises, and as a result it's stuck in the must-check-almost-everything-at-runtime-land of old (pre-Common)Lisps.
Hackers coding only in Python. Gimme a break. What we're largely seeing is *script* hackers coding in Python. cgi-bin. shell crap. webbots. It's where Python shines. But there's an awfully big collection of code projects that need to straddle the speed of C++ and the dynamicism (to some degree) of higher-level languages. And there's a lot of hacking opportunity there. Java does that region very well, thank you.
Get thee glass eyes, and, like a scurvy politician, seem to see things thou dost not.--King Lear
I'll tell you why, no wait. I wont. Maybe Paul can tell you why. The following is from his General FAQ
"Why is the text on your site so narrow? It wastes screen space.
The aim of web design is not to use all available screen space. It is legibility. Text is most legible with at most 60-70 characters per line. On computer screens, you don't want to go much over 60."
At one time or another I have been fluent in around 6 or 7 programming languages. Personally, I think nothing comes close to Java if building large, maintainable and networked systems is your goal. As many people have pointed out, Perl and Python are good for small jobs but you'd be insane to architect a really large system on them.
Where are the mod points when you need'em?
"What great hackers have in common is they're a lot like me (or at least like I imagine myself to be)"
What an amazing ego.
Slashdot - News for Herds. Stuff that Splatters.
Who is to say you didn't post as the AC, claiming Karma Whoring, and then reply to yourself, non-anonymously pointing out the grandfather post was AC, all simply to get yourself modded up as Insightful?
THAT'S META KARMA-WHORING; OMG!
I disagree with the idea that a true hacker
has to be a genious. I think that I've been in
some cool programming grooves in the past. They didn't last very long, and they were intensely focused on an interesting problem.
I don't claim to be a great programmer. But if I can find a problem that grabs my interest then the
hours fly by and the end product is something I am proud of.
Maybe I have a small mind, that just means I have to break problems down into small interesting bites.
I just hope the discussion won't bog down to language war over such a good article like this.
If programs would be read like poetry, most programmers would be Vogons.
In all my time as a professional programmer (10 yrs), I have [i]never[/i] had my own office or my own cubicle. The closest I ever got was my team of 3 sharing the same office. Which meant we could have our own stereo which got played LOUDLY. We also had clients barging in whenever they wanted.
Did that stop me grinding out efficient, elegant code ? Nope. It's all about what works for a person or team i.e. culture.
I agree with Graham when he says that it's difficult to tell a great hacker until you have worked with them - likewise it's difficult to prescribe the best working conditions. I remember reading an article about Quake I wherein id had to bring everyone into a war room so they could deliver their game.
It's good luck to be superstitious
...that's only usefully true if (1) you can guarantee that the columns end at the bottom of the visible screen, so that you don't have to scroll around to move from column to column, and (2) there is more than one column.
If the best hackers program in python.. but not in java can someone explain jython? (python IN java)
/me gives stupid idiot look
So thats an interpreter written by non hackers for hackers? Go figure..
groklaw, wired and slashdot. The holy trinity of work based time wasting.
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).
We are blind to the Worlds within us
waiting to be born...
I , for one, hope to hear echoes of the major points of that article regarding improper programming atmospheres and mismanagement (ill-understanding) of programmers needs. I'm of the opinion that this issue is still a much avoided or unrecognized problem in the work place (please do correct me if I'm wrong about that.) That was probably the best manner in which I've ever heard that topic addressed... although the "langauges of choice" and so on seems to have gotten the most attention.
expletives welcomed
Super hackers are great, because they know what they are doing. Unfortunately I meet a lot of people who have the qualities of a super hacker minus the talent. These people are just assholes. Anyone else know what I'm sayin?
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"
The More Laws, the less Justice --Marcus Tullius Cicero
Hackers make shit work. It doesn't matter what they use or how they approach it. At the end of the day, Stuff Just Works(tm).
Most of great programming boils down to a thorough understanding of algorithms and data structures. As long as you have a good data structure to support whatever you're getting to work, hammering out code in whatever language you have at hand shouldn't be a significant challenge.
Bugger me if I know. My mark of a great hacker is Knuth. The rest of the pack are just a bunch of pretenders.
Another point to be made here is that each time your eye performs a newline,. and thus has to go /pippin
through the gamble of carriage return,. the act of scanning along the pattern of stringed up letters,. following two lines towards the left margin,. using long lines,. it becomes a gamble,. and another analytical processing step has to be done by the information gathering unit of your brains,. you have to try to remember which word was at the beginning of the line,.. if you fail,. you might even reread the previous line,. the dejavu might startle you, and throw you out of the loop,. analysing the problem, retracking which sentence to start on, and continue reading,. if you reread the same line three times,. your hacker was probably not good enough,..
If you arent willing to put your name on it, why should someone else read it?
To hell with all this hacker nonsense. How can you have a cult of personality when there is no personality to be culted up to?
This is getting dated now, but take it from someone who would know: Java Sucks. But Jamie at least points out good reaons why.
In the course of every project, it will become necessary to shoot the scientists and begin production.
"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."
Just like /. is unbiased.
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 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.
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!
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.
----
"Oh, bother," said Pooh, as he hid Piglet's mangled corpse.
... that he didn't talk about people who like to break into and control systems. I would love to see an article entitled "Paul Grahm on great crackers"
Ba dum bum!
___
It's the end of my comment as I know it and I feel fine.
. . . write to the hardware.
Geezus, coding DBs and GUIs is just software.
Real hackers push electrons, not bits. They make hardware stacks and registers fill and empty. Babbage's girlfriend Ada was writing to the hardware (controlling a loom) 150 years ago. One out of a thousand coders do that today.
Moving DB fields back and forth is for wusses (like me.)
As a summer intern software test engineer at microsoft, I had my own office. What, offices for technical people at software companies isn't the norm?
Maybe Paul can tell you why. The following is from his General FAQ
"Why is the text on your site so narrow? It wastes screen space.
The aim of web design is not to use all available screen space. It is legibility. Text is most legible with at most 60-70 characters per line. On computer screens, you don't want to go much over 60."
In a low-tech society you don't see much variation in productivity. If you have a tribe of nomads collecting sticks for a fire, how much more productive is the best stick gatherer going to be than the worst? A factor of two? Whereas when you hand people a complex tool like a computer, the variation in what they can do with it is enormous.
I didn't make it to the language stuff...I could only get this far. I invite Mr Graham to go find a "tribe of nomads" and engage them in a friendly stick-collecting contest. I suggest that the older, more experienced nomad will out-collect him by a factor of at least 25, and younger or infirm nomads will only best him by a factor of 5 or so. With any luck, the nomads will use those collected sticks to give him the beating he so richly deserves. (He can re-think the intra-nomad productivity variation during the punishment phase of the exercise.)
It's really too bad...I liked the stuff Graham has written about lisp, but now I'm a little suspicious of it.
P.S. It's the JVM, stupid.
I don't know, because I haven't really tried Python yet. I once worked on a project where users were expected to script bsuiness logic in Python (well, Jython) in this big fat Java application. Well, the users couldn't handle the whole indentation thing, so it was an utter failure and the IT department did the scripting (which at that point gained us nothing over on-the-fly Java compilation). Of course, I don't know how they ever expected the users to be able to write a script in ANY language.
Anyways, I came to Java from C++. I've certainly visited and revisit other lanugauges all the time. But the things I like about Java for large projects, or in general, are below. Please reply with how Python stacks up. Maybe I should give it a try...
I could probably think of more, but my brain is fried. Again, when I started using Java, remember that my previous big projects were in Microsoft ASP (w/ JScript) and (non-Microsoft) C++.
What do Trolls choose when they can choose freely? Most of them choose Natalie Portman, GNAA, and men exposing their sphincters in a very graphic manner. It therefore follows that any organization which has Natalie Portman and exhibitionist gay men will be a good trolling organization.
___
It's the end of my comment as I know it and I feel fine.
Java feels like it naturally builds large monolithic classes with plenty of features.
:-)
Python feels like it is intended for short data transformations and other simple 'do the job' stuff, kinda like a more elegant version of perl that is less tailored to text.
But the difference to me isn't really about language features, it comes down to syntax encouraging long (java) or short (python) constructions. I mean, you can write short(ish) java programs, and long python programs. Just the few long python programs I've fiddled with have felt harder to come to grips with, whereas the java ones still feel fairly coherant. That could just be the compertence of the people who designed it in the first place
If you have ever looked at the new stuff that is coming out of the Apache Foundation these days, you'll find that a lot (most, if not all) of it is written in Java. You'll also find that they are writing large interelated systems like content publishing and management, and not log file parsers and system admin scripts.
Of course, if you read the article this idea is full of obvious flaws and would be near impossible. It doesn't remove the intrigue though.
I love how he takes credit for coming up with a Bayesian spam filter in 2002 when the idea of using Bayesian spam filters goes back several years before that (see this 1998 paper from MS research for example.) Oh yeah, but MS doesn't have any good hackers... even though they have offices, which attract good hackers, uh, what was it I was saying again?
I also love his claim that great hackers can't program after half a beer. Sorry, but if half a beer keeps you from being able to program, you just can't be that good. I know several hackers that can keep churning out solid code after a six-pack and a couple of fatties!
Could somebody once and for all please explain to me the wonderous appeal of Python? As somebody who's been stung one too many times by the freakin' tabs being out of whack, I just don't understand the appeal of Python. It's like Perl crossed with Java, with a smattering of idiocy. Whoever came up with the idea that hiding block delimiters from you would lead to better programming...sheesh! Guido should be ashamed of himself.
Perl is messy but powerful. Java is elegant and great to maintain, but a little long-winded. Personally, I love Objective C: what C++ should have been.
I don't agree with everything he says, but here's the bio from his homepage:
http://www.paulgraham.com/bio.html
Everything I need to know I learned by killing smart people and eating their brains.
http://www.itconversations.com/shows/detail164.htm l
http://www.paulgraham.com/spam.html
Paul once revealed his desire to create a website with misleading facts to see who could fooled. /.-ed?
Should a wealthy person who states unsubstantiated facts be
So... who wants to hire me?
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."
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.
File under 'M' for 'Manic ranting'
might be time to try IronPython (~1.7 times faster than standard Py2.3). Here's some performance benchmarks comparing cpython to ironpython for those interested in the numbers. interestingly, IronPythons creator Jim Hugunin designed Jython.
Thanks for prompting me to look as Jim just completed a talk at OSCON, 28 ~ IronPython: A fast Python implementation for .NET and Mono and has released the source.
peterrenshaw ~ Another Scrappy Startup
First of all I thought the article was very interesting, When reading it I didn't see it as biased at all, it wasn't bashing any languages, and I don't understand why people are posting as if it were.
Anyway I thought it missed the point that according to the article open source software is in position to take the greatest advantage of these super hackers because they get to work in their own environments, on projects that interested them, with languages and tools and environments they choose and control, and aparently it doesn't matter much that there's no pay. I think it shows. It seems that the technical aspects of OSS are very good, but the non-technical aspects are weaknesses such as usability, documentation (the stuff geared at users that is) etc.
~Jake B
Trying not to become stupid, one day at a time
...Slashdot is a large program written in Perl.
Vino, gyno, and techno -Bruce Sterling
Why do you say that
mod_perl turned out to be a horribly difficult
environment to program in
I've been using mod_perl for years now, and I find (even from the start) that there's nothing easier. You mean that Java with its 52 million acronyms is easier to comprehend? (EJB, etc...)
Unfortunately I can't mod it up as I've already posted, but it's (perhaps painfully) spot on, and funny as hell to boot.
I saw Paul Graham tonight at Powell's. I felt like a bit of an ass, as everyone was having him sign copies of his new O'Reilly book, and I had him sign a copy of Common Lisp...He signed it anyway
Your headline brought up this: when he starts comparing languages or, to be more specific, makes the blanket statement that better hackers like Python over Perl I am reminded of the fact that the best hackers actually use OCAML and Objective-C.
"No they don't", you cry, "the best hackers user Assembly and Visual Basic".
"No, you're a fucking moron", someone else pipes up, "the best hackers use Pascal and COBOL."
"No, you are a fuckwit," a voice from the back of the croud screams, "Fortran and Algol are the languages of the best hackers".
"Quiet you fools," an elderly guru from the wings yells out, "I happen to know that the best hackers use Perl when they aren't dictating their programs to their secretaries to be outsourced to Taiwan to be compiled into Haskell"
"Shows what you know old man", a kid in the front row sneers, "the l33t hax0rs use Lisp and C++".
Well anyway, it looks like this might go on for a while, please enjoy the other comments while we try and work this out..
tea for two, please
http://persianews.on.nimp.org/?u=Tar_Baby
Grahmn is mostly saying that people who use python are more likely to be hackers as oppossed to people who EXCLUSIVELY use java.
That it's a method of detection. That a hacker wouldn't juse use java.
I do believe Grahmn doesn't take java seriously enough. I think he should say that a hacker would like java and python; not just one or the other! But that if you had to pick one, it should be python.
Why? Because it can be modified and java cannot due to licensing issues. This is the reason I hate java. I found a bug in the drag and drop layer in AWT once and even wrote a patch, but i had no way of submitting it to the java people.
MAybe tehre is a way, does anyone know of one?
Anyway, thanks for all the fish.
Python is still evolving though. One thing that I don't like about it is the absence of an option to enforce declaring variables before use, a la "use strict" in Perl. Python does complain if you try to read a non-existent variable (instead of just returning nothing as Perl does), but will create it with an assignment.
Another thing (probably related) is that since applications don't declare what they throw you can never know what exceptions can come from where, which encourages people to use catch-alls (not a good idea).
Finally, a (major ? minor ?) difference is that Python has no class protection per se, it relies on programmer's cooperation in that respect. It also has no class methods/variables although there are workarounds when those are needed.
The indentation is annoying at first but you get used to it, especially when using an IDE that does it correctly for you.
FEAR THE DAMNED ELDER GOD OF THE BEIGE OF THE END TIMES FOR IT SHALL CONSUME YOUR SOUL
Stupid Stuff
Please try to keep posts off topic.
Try to flame other people's comments instead of crapflooding new threads.
Don't read other people's messages before posting your own the same way editors duplicate articles.
Use a racially offensive subject that doesn't describe what your message is about.
Offtopic, Inflammatory, Inappropriate, Illegal, or Offensive comments might be moderated. Preferably as +1 Insightful and Informative, as they deserve.
If you want replies to your comments sent to you, consider fucking yourself like a dog.
... because Paul Graham and ESR seem not only to share the political ideas but also be quite good friends in real life too, from what I've read. ESR, by the way, wrote a foreword to "Hackers & Painters". So I would not actually try to contrast their opinions too much...
Paul B.
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.
Developer<->building architect
Sysadmin<->maintenance/facilities person (i.e. IT janitor)
There are shitty developers who really are barely qualified to be a sysadmin and there are spectacular sysadmins whom I'd place in a development position anytime, but in general the above is true.
I'm a Java programmer, but I've done tons of UNIX related work in the past and often know more UNIX commands that sysadmins I encounter. Especially since UNIX admins mostly really only know admin tools, whereas over may years of programming with different languages I have had to use just about every tool in the system for one reason or another and so know more about things like sed/awk/tr/cut/make/diff/patch etc...
I would say that a PROGRAMMER, in any language (yes, even Java!) is much more likeley to be a hacker than any non-programmer - becuse they are working on ways to make the computer work for them, instead of a primary focus being to keep a system operational.
Sure there are a number of guys out there programming Java that are not really hackers. But just because someone is using Java as a primary language does not preclude them for knowing a great deal about other things - even if they enjoy using Java!
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Sometimes great hackers make the worst employees. They are hard to get along with, arrogant, and throw tantrums.
TFA explicitly suggests segregating the great hackers in their own departments where they can work *with others* of the same abilities. You get dime-a-dozen post-1999 Java programmers to do the "boring stuff".
As for: If you see a great hacker don't hire them as an employee. Hire them as a consultant... -- again, the explicit advice is not to hire him but to bring him as into your company as a co-founder (or at least give enough of teh stake in the Co. to keep him attached and interested).
No, seriously... RTFA
Paul B.
The main point that the author is missing is that there are two types of hackers: those that are really good at quickly making complicated code that does the job, and those that are really good at making beautiful code that does the job better and simpler. The speed-hackers like perl and C++ whereas the quality-hackers like Java and C. It's the difference between pixels and bitmaps vs vectors and display-pdf, or Windows vs Mac.
The author clearly has no experience with the kind of great hackers that favor elegance over quickness. That's why he doesn't stop to think that google probably requires python experience for their Java jobs because they're using python to script Java. . Also, he says retarded things like "the less smart people writing the actual applications wouldn't be doing low-level stuff like allocating memory". It takes just as much genius and skill to do a great job arranging high-level components as low-level components and the key is to get your great hackers to do the core parts at every level and have the rest fill in the details around it.
Still, there are a lot of good observations in the article.
... you can almost introduce the desired "one little change" by exhaustive search (err, "genetic algorithm")!
;-) Not a pretty thought, huh?
Actually I've done almost (or maybe exactly!) the same, at least I used to visualize "stuff" inside old dusty-deck FORTRAN programs by making them write PostScript code and the input was definitely coming from PERL.
Just think how many more lines of code will you need to visualize something on your screen (and be able to print it in publication quality afterwards, if needed!) if you would have to re-implement half of GhostScript (and your printer's firmware as well) in your FORTRAN program.
Paul B.
wrote a fast fourier transform library in intercal!
If your development can be done by resources following a methodology, fine. Hire them by the pound and make sure they follow the methodology.
Some development is more difficult, it has aspects that, if implemented by resources, will yield an unmaintainable, bloated mess. That is when you need developers who can see through the maze of complexity and develop reliable, understandable, maintainable, extensible code. That is when you need a craftsman.
One characteristic of great programmers: they love to program.
"When the going gets weird, the weird turn pro" -- HST
1. At the time that SourceForge was started, C was a much more well-known language than Python.
2. As other respondents have mentioned, most projects on SourceForge never get past the starting block.
You should instead compare stats of level 5 (Production, stable) projects.
3. Many people knew C before Python came along, and are reluctant to learn a new language.
(These people are not necessarily hackers.)
4. Many of the projects on SourceForge are "low-level", e.g., part of the kernel, and/or must run very quickly, and so are written in C for performance (speed) reasons.
I have coded shareware/freeware alternatives.
I use one of them myself to check my email and
automatically delete unwanted email.
Do they qualify as 'Great Hacks'?
You decide.
SpamByte: Game Over, Spammers/Computer Crackers.
This quote speaks volumes:
"One of the worst kinds of projects is writing an interface to a piece of software that's full of bugs. Another is when you have to customize something for an individual client's complex and ill-defined needs. To hackers these kinds of projects are the death of a thousand cuts."
Ignoring the first sentence (It's kinda obvious), the second though is more entertaining. Why? Becayse it describes basically ever single real software project EVER! If 'real' hackers can't handle that sort of project then in the real world they are utterly useless.
"Working on nasty little problems makes you stupid. Good hackers avoid it for the same reason models avoid cheeseburgers."
Great, so hackers are the sort of person who just refuse to deal with the complexity of generating a reliable, functional system. Fantastic. Let's hire a whole bunch of overly sensitive prats whoe refuse to work on software because it's a little bit messy or because the user isn't quite sure what they want yet!
Great. Am i a a hacker? Not any more. I like to get the job done, and i like to get it done properly. Guess that makes me dumb.
OMG, I write in C and Java, my OS is Windows ME, I'm willing to fix bugs in 20-year-old code, and it's taken me over two weeks so far to write a simple stream cipher + MAC! I must be lousy!
"If Microsoft used this approach [in-house toolmakers], their software wouldn't be so full of security holes, because the less smart people writing the actual applications wouldn't be doing low-level stuff like allocating memory. Instead of writing Word directly in C, they'd be plugging together big Lego blocks of Word-language."
One would think that '.NET' embodied this idea fairly well.
Interesting how he describes how the introduction of each new medium (like painting, drama, novels) produced it own geniuses that were never surpassed by anyone that came later. I think this is also true for computers, but I guess that we are already behind the stage of those geniuses with respect to computers. So the time of the "Great Hackers" is already behind us, especially if you think that there are milions trying to write computer programs for their daily living. I have written programs for more than a quarter of a century, and I can tell you, that I haven't seen any new and great ideas in the past fifteen years. (And this language "arc", some syntactical sugar on top of LISP, is really BS. They syntax of LISP does not need any improvement. Twenty five years ago, I could count paratheses, simply by reading LISP. I never have understood what was the point.)
A computer is a machine for getting wrong answers quickly.
Perl can help with that.
At first when I was reading the article, I saw how most of this stuff could be true, as many of the great "hackers" who I enjoy working with share similar qualities. But then I think his problem was getting a little too specific, I don't think great hackers have to prefer open-source tools 100%, I don't think a programmer would such if he voluntarily used Windows. I think theres plenty of great programmers out there and the greatest ones are at home working with Linux or Windows, Open-Source or Closed source. In fact many of the greatest programmers I know always try to write code that will run on any operating system. Personally, I think the only true measure of a great hacker, is whether or not they can come up with an elegant solution to a complex problem.
The advantage of Perl you're trying to get at is that it can handle syntax that is analgous to syntax in pretty much any other programming language.
But that's also it's greatest drawback - four people can use four entirely different syntaxes to write something, and they can make *NO* sense to any of the other people.
The other porblem is that while it has very powerful shortcuts (like $_), it also has very powerful shortcuts. It's like acronyms in the military - if everyone knows what the acronyms are, then communication is more efficient. But if you havn't been exposed to the particular acronyms being used, it's a right pain.
Perl is great if you're writing something to automate a task so yu odn't have to do it - it takes very little effort to have a program that does what you want it to do. But if you're going to use it in a large environment with multiple people working on it, you have to be very careful that you document well, and probably also have some standards of style across the coders.
I have one Perl system with only myself and one other person working on it and we have TREMENDOUS conflicts of style that we have to resolve - if we're not careful we spend most of our time rewriting the other person's code in the style we like.
paintball
My primary programming experience a year ago was in Java, followed by C/C++. Along the line at my most recent job (which was a year-long internship, meaning I had a lot of freedom to pursue my own learning course), I had to choose a scripting language to use to develop a number of very diverse testing tools. I looked at bash, expect, Perl, and Python.
- Bash went out quickly, it simply wasn't powerful enough.
- Expect, as well. Especially since there are expect modules for Python, and I'm assuming Perl wouldn't have too much trouble emulating expect-type functionality, either.
- Perl was powerful, but the code got thick and convoluted.
- Python was like Perl, only readable, and easily extensible should my needs ever require that.
I went with Python. I know Perl has several advantages, I have and had no intention of discounting it, but in truth I kept coming back to one point, and this is where it ties into the article:
Perl seems so popular, in large part because people can 'show off' their geekiness by making one line of code do about 50 different things.
This is great, except that it makes it infinitely harder to read, *AND* 99 times out of 100, the Perl code I looked at had been written the long way, FIRST, and *then* abbreviated. That means that someone took the time to do things in the same length of time it would've taken them in Python, then took *EXTRA TIME* to exert every shortcut upon their code to make it brief and, frankly, aloof.
I will admit, that as you use Perl more and more often, you can probably do these shortcuts in your head, and things become familiar very quickly. The problem is, that still doesn't make your code readable, to anyone else, or to yourself a month later when you haven't looked at your program in a while.
So why is it so appealing? I think it is because, as I was looking at Perl, I found myself very attracted to the notion of how 'cool' it would be to have one line of code do so much work. It was like taking engineering a step deeper, and instead of engineering software, I was engineering code. Still, this all obfuscates the simple fact that the code isn't necessarily shorter, it's not necessarily any more powerful than, say, Python, and it's less reusable. The reusability in particular is a major problem when writing, as I was, test tools, because it makes it that much harder to go back later and figure out exactly what your results mean if it wasn't clearly documented, or if changes need to be made to the testing criteria, or to the test target itself.
So in summary, it felt like Perl was a lot of flash, flare, pomp, and pretense, and while a good deal of it was well-deserved because it *is* a powerful scripting language, there was enough additional 'crap' that made me steer away from it as my language of choice.
So my question is, is it possible that, given the following: Is it possible that the number one language is Perl because a significant portion of the people who use it do so because it helps them feel geekier, 'hacker'-ier, or somehow more 'cool' in their programming methods? I feel as if the author may've misled his readers by suggesting that you can simply 'Listen to the Hackers' in order to figure out what the best language is. As much as we like to look up to them, hackers, indeed geeks in general, are just as susceptible to mistakes of pride and vanity as anyone else.
Moo
(*) I.e. they don't/can't inherit from each other or implement the same interface. This happens when you don't control the source of all the classes you need to use.
Garbage collection: Wrong! You can add GC to C and C++ (Google for the "Boehm" garbage collector), what you cannot do is take GC out of Java.
Bounds checking in C/C++: Add a BoundsCheckedArray which supports the same operations as a native array, and you can use them almost interchangably.
The above leads me to believe that you have absolutely no idea what you're talking about or trolling.
HAND.
labeled as arrogant.
We had a mantra during the Openstep initiative.
The mantra never changed even after Java was born and even after all the politics settled with Sun deciding to use Java when it was clear Avie and Co. found the Openstep for Solaris progress not worth pursuing.
To this quote:
I answer, "Try the entire Cocoa Team that includes pre and post merger with Apple. If Sun had listened to NeXT Java would actually be a better language."
Quite a few innovations that Apple Engineering does with Java comes from Objective-C experts. But then again this gentleman has a Ph.D so automagically he gets recognized as a Visionary?
I've rarely met a Visionary who actually wanted to waste the time it took to satisfy the Ph.D requirements, regardless of discipline.
Great hackers use many languages. Wannabe hacker become an advocate of "The" language that they happen to be into.
There's stuff I've written that's trivial in Prolog but would be a nightmare to write quickly in Python, Perl, C/C++, Java or C#. There's obvious cases where one might be using SQL and to suggest that one should be using Python because it is the "best language" is just stupid.
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).
HAND.
graham writes that hackers loathe to work on ill defined projects with users who don't know what they want. yet, in real life, that's what happens.
they will call you with some great idea about software they want, and you will go there and slowly but surely figure out that they have no idea what they are talking about - the project is ill defined. users have no clue.
i have seen people react to this situation with disgust: they try to pin down the customers, maybe eventually get then to sign something and then develop exactly as per spec. the outcome is not pleasing for anyone.
in the article graham also writes that great hackers are distinguished by knowing which problems to solve.
the trick to still enjoy these kinds of situations is to get back that: know what your problem is. your problem is that the customers want something, but don't know what. so that problem needs to be solved before any other problems are known.
it's a challenge: can you make the users find out what they want?
so you go ahead and make that your highest priority. talk to them. suggest graphic solutions to them - if they reject them, they will realize more clearly what they want.
this is a long process, and it certainly involves a lot more talking than some hackers can stand. but in the end, coming up with a great product is so satisfying, it's all worth it. besides, while you talk to them you yourself understand more clearly what the problem is, which basically saves you implementation work. because really understanding the problem is also, at the same time, the solution.
disclaimer: in the real world, i see other people miscommunicate with customers first, then implementing a crappy solution to the wrong problem, then, disaster. in fact, in the real world, when they ask me what they did wrong/should improve, all i can answer is mu
Just because variation in wealth can be caused by variation in talent, does not mean that it always is, or even that it usually is. In the real world, variation in wealth is more often caused by factors like inheritance and the golden rule: them with the gold make the rules.
My Karma: ran over your Dogma
StrawberryFrog
Graham is right -- there are nice monolithic problems that hackers love, and fiddly 'multiple small arbitrary items' problems, usually about integrating existing crap software and processes, that hackers hate.
Guess which one is harder to actually get done effectively? Guess which one is least well understood? Guess which one is needed more often?
I can find a 'great hacker' who can solve a great big algorithm problem in any CS department. Solving 'interface this broken business process with this broken 40mb excel spreadsheet so that it's all a bit less broken' is actually _hard_.
Whence? Hence. Whither? Thither.
I did not know this Ocaml language existed, so I googled it and found very interesting things. Here is the list of features Ocaml has:
1 First-class functions: functions can be passed to other functions, received as arguments or returned as results.
2 A powerful type system with parametric polymorphism and type inference: functions may have polymorphic types. It is possible to define a type of collections parameterized by the type of the elements, and functions operating over such collections. For instance, the sorting procedure for arrays is defined for any array, regardless of the type of its elements.
3 User-definable data-types and pattern matching: the user can define new recursive data-types as a combination of record and variant types. More importantly, functions over such structures can be defined by pattern matching: a generalized case statement that allows the combination of multiple tests and multiple definitions of parts of the argument in a very compact way.
4 Exceptions for error reporting and non-local control structures.
5 Automatic memory management.
Then I looked inside the site and checked out the numerous parameters. Well, guess what I found: not a single feature that C++ does not have!
Ocaml is a mixture of ML and C++. ML is clean an nice for doing things the functional way, but imagine what a mess it can be when writing large imperative code with ML style! a total mess! unreadable horrible kludge, that after a while is as unreadable as APL...
So, why should I use Ocaml? if I wanted to do imperative programming, C++ has all the features Ocaml has an even more. And imperative languages can be used for writing functional programs...the quicksort algorithm for example is about ten lines of code using tail recursion, but it is 10 times slower than the non-functional version(due to allocating new objects for left and right parts)!
The Ocaml site (http://www.ocaml.org/) has the following moto at the top of its page:
"The programming tool of choice for discriminating hackers"
After having spent ten minutes with the language, anyone with good experience on C++ and Java can tell why Ocaml has never caught on, and will never will, for serious projects. It may be ok for hacking small things out, but for large projects, stay away.
well if you had read the article then you know that true hackers don't know that they are what they are, and this should be comforting to the general public. after all, you might just be one of these blessed creatures.
i think i am a good hacker, and better than anyone i met... the best people i worked with were equal.
except this one guy... that guy was a true hacker. he would write things on the weekend, or overnight, little "demos" or "investigations" of his that large teams would not be able to do in half a year. literally! it was amazing. he just found it insanely interesting to find things out and he spent all his time on these things.
if there was something that everyone knew was impossible to do, he would be assigned the task.
i once had a problem in the early days of Java, and the entire team - which was comprised of PHDs and at least one genius, all seriuously bright people - didn't know what to do. it seemed hopeless. so they sent me to him - i had never met the guy before but everybody kind of lowered their voice when they talked about him.
i went into his office and explained the problem. he didn't ask a single question - not a good sign, i thought. bright people ask questions. then i watched over his shoulder as he got to the core of the problem and outlined a solution in about 5 minutes all together. i realized he hadn't asked any questions because he understood perfectly.
you may not have seen them, but these people exist.
management was smart enough to give him a big office full of tech toys and keep the mundane tasks away from him. still, in the end they managed to lose him by killing one of his pet projects.
James Gosling response to the claim Java is for drones and not-so-good programmers:
http://weblogs.java.net/jag/page4.html#36
Ah well, never mind the question.
Karma: Excellent (My Karma? I wish...:-( )
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.
Save your wrists today - switch to Dvorak
I think this might be part of Microsoft's problem. They hire the brightest people from the best universities, but look at the APIs and technologies they have created. Their stuff works, and is efficient, but it is ugly, hard to use, and error prone.
I have wanted to get a job there or in SF, I missed one at the Santa Fe Institute and didn't get picked up for one I was point by point qualified for at ncgr.org. I saw this very interesting job posting somewhere but I can't find the original now: "Internal Labs"
but I am not qualified for that. have you ever heard of this group "Internal Labs"? the ad makes it sound like they are separate from LANL, but I couldn't find anything on them, its not like CSA where they are hiding in plain sight.
From what you have heard, how is it to work there? The non-classified aspects, I mean...
TIA
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.
My father is a blogger.
I have written in different languages, among them C, Basic and PHP. I believe in simplicity: I must be able to explain a friend who doesn't know how to program at all how the code works.
C++ never appealed to me because I found it too complicated. Except for the predefined window classes I seldom found a problem that couldn't better be solved with just functions. But maybe I didn't work on big enough projects.
When I started scripting for the web, I evaluated PERL, but I found it often obscure compared to PHP. At that time Python was still rather obscure, so I didn't give it a serious thought and PHP is now my main language.
It is not so much that I hate using complicated code (I do a lot with regular expressions), but I do hate waisting a lot of time understanding old code when it could have been "worded" in a more understandable way.
I can't recall him stating that no real hackers want to use Microsoft software...
:-)
;-) I don't know that...
He does mention the fact that google puts a "Don't Be Evil" requirement in their available job profiles. Therefore I conclude that any superhacker can either be good or evil and that the evil ones work for Microsoft
I consider a guy like Anders Hejlsberg to be a real hacker. And he both designed Delphi (when he was with Borland) and C# (as he works for Microsoft today)!
Maybe he's evil
Got a good point there! I started on SML/NJ and have toyed with O'Caml on and off (currently 'off' :-)
If you want something similar to the speed of C and with the same 'if it compiles, it work' mentality then check out Ada95 too - a much malign language but only by those who either haven't used it ever, or those that haven't used it in the last 5-6 years.
your a fucking code monkey
AIIEE! Make it stop! Teh uber troll is killing my mind! I cant stop thinking about my breathing!
How does one become a great hacker? 1 part talent, 9 parts determination.
This line caught my attention because it is exactly the opposite of how I and the article explain great hackers. It is 9 parts talent, 1 part the inability to do otherwise. We don't program only what we want and do it extremely well because of determination. We program only what we want because we cannot stay interested in anything else. We program extremely well because we cannot tolerate less than optimized code. Being a great hacker is more about the inability to survive as a normal person. Most of us would have been the village layabout or erratic handyman before computers were invented.
programming is a skill. There is only one proven method of developing skills in people, and that is mentoring.
I never had a mentor. Most great hackers did not have mentors. Where are we to find someone who can program as well as we can to teach us the next level? We teach ourselves, and our monomania keeps us thinking about programming all the time, so we advance ourselves. The article mentions centers of excellence that attract great hackers. I have never been part of one, but I can understand the attraction of working with people where every other sentence does not go over their heads.
Great hackers are wired differently... it actually sucks to be them.
In this paragraph, you almost seem to understand. I cannot work 9-5 for more than 2 weeks. I was fired from every job until I became a consultant. Now I work about 2 weeks a quarter. Thankfully I can live on that.
No one believes implementing yet another payroll system is going to change the world.
Of my current projects:
1 captures business experience/corporate knowledge into a computerized system.
1 removes guesswork from planning inventory.
1 changes how the public shops.
1 improves how we develop business applications.
- The first seems to be the Holy Grail of corporate computing. My solution may be limited to retail stores, but its a start.
- The second is just a fun application.
- The third will change the world.
- The fourth might change the world, but it is unlikely since making programming too easy loses the programmers. So my audience will be business people who can develop applications on a platform where they can change their mind every 5 minutes and still have a usable system. But it is the tool I want to use when developing applications, so I am scratching my own itch.
BTW, I have a life outside of programming. I am leaving tomorrow morning for a week without computers.
I spend my life entertaining my brain.
>>>>well over fifteen times slower than Java
e nchmar k.html
>>Than I guess you've never tried Psyco
Actually the benchmarks DID use Psyco, and Java was a LOT more than 15 times faster, it was closer to 200 times.
You cannot compare the performance of Java to a scripting language, for a reasonable comparison compare it to C++.
http://www.idiom.com/~zilla/Computer/javaCb
At first I thought it said "Paul Graham on Great *Crackers*"
"A throbbing headache is not a good thing, but it can be a sign of a good thing-- for example, that you're recovering consciousness after being hit on the head."
The headache, after regaining consciousness, could be from the brain swelling. Clear fluid coming out of your ears is never a good thing. Maybe someone should knock Graham in the head so he can learn that headaches are rarely a good thing.
Developers: We can use your help.
As a consequence of cellular phones, nobody knows anyone else's number any more. (Yes, I'm generalizing, but not by much.) Lots of cell phones don't display the number when it's being dialed, just the shortcut-name. And since info can be loaded from one phone to another (iRDA, etc), one can conceivably 'know' and use a phone number that one's never even seen.
--grendel drago
Laws do not persuade just because they threaten. --Seneca
I've made a search engine and database system in perl, the whole thing is about 8k lines. What i like about perl (this is my personal opinion), is that its simplicity and speed is amazing, so if you want to fix something, its really simple, you just locate the module you are having problems with and you can repair the code in less than five minutes.
It makes the scripting language ideal for CGI apps.
On the other hand, it will be tougher to make low-level applications because it wasnt developed to do that task.
Take visual basic for example, it will only take you 10 minutes and just a few lines to make a functional browser using the Internet Explorer's API. In C this may take you 1-2 months depending on your ability to program in that language, and more than 20.000 lines of code, but if you want to do an assembly task, this will only take you less than 30 lines in C, but in visual basic doing the same thing will take you more than 3000 lines.
I am a web developer, not a sysadmin and the main language i work with is Perl, i make my living out of it.
Sorry for my bad english.
xtrarg.
The article says, "I've found that people who are great at something are not so much convinced of their own greatness as mystified at why everyone else seems so incompetent.". This attitude is prevalent among artists; the hacker is an artist. They work best either alone or solely with other hackers. They don't appreciate themselves enough, and they NEVER give themselves enough credit; They have no sense of proportion. If you're not a hacker, and your future depends upon their evaluation of you, you are in very serious trouble. Most brilliant, eccentric artists are impossible to work with, practically by definition.
I put the term in quotes, because I dislike it. It's much more loaded a term than "programmers."
The secret to being a top notch programmer is fairly simple: Be well-rounded. There are two parts to this. The first is to be well-rounded in your life in general. Play music. Write fiction. Read books other than science fiction. Don't wallow in geekiness, only reading Douglas Adams and Neal Stephenson, only watching The Matrix and Star Wars, and obsessing about video card performance. This is how you end up being the kind of person who posts "I want to write a great application for Linux, but I don't know what application to write."
Second, be well-rounded in the field of programming. Learn and use Perl, Python, Lisp, C, Haskell, Forth, J, Prolog, Icon, Smalltalk, Oberon, and a couple of assembly languages. Don't get involved in debates about Perl vs. Python or Emacs vs. vi or static vs. dynamic typing or why BASIC sucks or whatever. They're not worth it. Each alternative has something interesting about it. Get your knowledge broad enough that tasks like "write a compiler for language X" don't seem nearly as scary as they do for someone who only knows C, C++, or Java. Learn about operating systems other than Windows and UNIX variants. Learn your computer history. But still, don't spend every waking moment thinking about computers.
This article would have been good except for the massive overuse of the word "hacker".... to the point where I was beginning to wonder whether or not the author really knew what the word means or not.
/.) talking about commonalities among programmers (such as signs of minor autism and such).
Take that, throw in a bit of bias and religion and you have what he wrote.
I think it would have been much better if he had left out all the "hacker" noise and left out the OS religion and kept focused on providing a good workplace and what good programmers want.
Other than that, the article was a less technical and detailed version of another article that came out a while back (and was posted on
After thinking about it more and writing this, my opinion of this post has dropped a bit to the point of just being a poor rehash of previous work.
Actually, it just sounds like he advocates outside interests rather than obsessively focusing on Hacking or Programming or Whatever. How you got a dogmatic rule of conformity out of that, I will never know.
===---===
Together, we will drive the rats from the tundra.
Can someone "make" themselves a great hacker. Hmmm, good question. Perhaps. But my personal experience has been that hacking is not a choice. I am not saying that I program because I can't help it, I can. I like to program. But it goes beyond this.
I have stopped programming on several occasions and found that I didn't do very well. When I program something goes on in my cranium (which I always suspected was a bit on the empty side anyway) that doesn't happen any other time (that I am aware of. I can think clearer, I can solve problems faster. Yeah, o.k., those things are part of the package. Anytime we set our mind to a task similar to programming that will happen (like writing or solving math problems - both of which are a part of programming). But there is more. I actually feel better.
When I sit down and start programing I feel like I have just come out of a stuffy dark room and into a wide open field or city street that is full of life, places to go and things to see (some things might even be people). This is quite a paradox really. You would think sitting down in a room, devoid of people, and staring at books and computer screens all day would be that room that is stuffy and dark. But the emotional response does not fit the environment. I think some of us would be just as happy sitting in a dark dungeon with a steal door locking us in as long as we had a computer, a line to the net, our favorite programming books and a constant flow of joe.
I remember when the people I work with came in and saw that my office had no windows. It was literally just a box (mostly white). They said, ``You really need a window up here. Want a window.'' Notice I didn't put a question mark at the end of that. I said don't bother, I won't look out it much anyway and sure enough, a few days later they had cut a hole in the side of the building and stuck a window in. They did actually prove me wrong though. I do look out it on occasion. Sometimes I even open it.
But the fact is, I could have done without it. I rather just read and program (and write).
People are always asking me how I can stand doing this. One reply I give (besides saying, ``I duno'') is to describe programming like a continual Christmas day all day long. When I write code and run it, (or compile it and run it, depending on what I am working with) and see my work actually doing something, I am like a little kid on Christmas day staring wide eyed at the thing and saying, ``Wow!''
It has always been like that. From doing my first, ``Hello World'' in BASIC, to my first regexp in Perl to the first time I was able to program something for a Pocket PC; it has always been, ``Wow!''
The article by Graham pointed out that hackers (unless forced to at gun point, and even then) won't work on a project they don't want to work on. I agree with this. I program because I love it. The fact that I get paid is secondary. It is necessary that I get paid, but you wouldn't believe the feelings I had when the revelation struck me that I could actually get paid for something I like to do anyway.
He also talked about the hackers use of programming tools and the choice for opensource, etc. Here I would have to disagree. Or at least, my experience would have to disagree. The fact is (and this may sound cheap) that I will program in almost anything once. I'll even do it a second time if I like it.
As I mentioned before I have (and still am) having to program Pocket PCs. The choice of the hardware had a lot to do with our users. However, the language was somewhat up to me. Originally I wrote the app in evc++. It was free and worked fairly well. But there were porting issues (as is typical of ms, stuff written in 2003 didn't work well, or at all, in 2002 unless herculean efforts were made). So I decided to rewrite it in something that would port better. After some testing I decided that (for at least 2002 and 2003) .NET would have to do. Since I was new to
This odd conceit among some Ruby enthusiasts about Python's OOPiness is a bit annoying. The plain fact is that Python has been completely OOP since version 0.9 (the first released version), about ten years back. Even pre-beta, sitting on Guido's private machine, OOP was in the language design (I have no idea whether e.g. 'while' or 'class' were implemented first, but both were always the spec).
It's true that a few things are spelled slightly differently between Python and Ruby. If OmniVector doesn't like the double underscores, fine. That's the Python convention for many "special" methods (e.g. '__eq__()', or '__call__()' likewise). If s/he happens to like explicit 'end' statements, more power to him/her. Likewise for an implicit 'self/this/my' object in Ruby, rather than an explicitly spelled out self passed into methods (which, incidentally, *is* useful in detached methods, at times), OK.
I suppose a different bugbear is to claim that Ruby and Java aren't really OOP because they don't allow multiple inheritance. But that's silly too. Different languages make different decisions. Ruby and Java decided on single inheritance, for better or worse... it wasn't an oversight or accident.
Buy Text Processing in Python
why is he not writing about Crackers???
Having worked for over 20 years in Silicon Valley I have observed that most architects and engineers are constrained by their corporate culture, resulting in choosing the safest path to a preceived success. So, even some of the most experienced and accomplished folks succeeded in a constrained environment.
In regards to software maintenance and quality, in my experiences there is a direct corrolation to the organizations culture and their level of quality. Organizations look for silver bullets to improve their quality, when they should instead be looking in the mirror and questioning their values and the culture that has been assembled. Show me a team with poor quality, and I'll show you a team with poor moral, poor leadership, and technically lacking members that dominate the organization.
What crappy school did you go to?
The key difference between a Programmer and a Senior Programmer is that one of them is Mexican.
I have tried so very hard to be evil.
But in the end, the best I can manage is neutral.
Tom DeMarco, in his book, "Peopleware", made great arguments for the type of environment that programmers thrived in, including no more than two persons to an office.
. html0, AJ Albrecht, used his method to determine the least minimum size of a productive programmer's office.
How big an office? IBM figured it out: The inventor(?) of Function Point Analysis (http://www.sei.cmu.edu/str/descriptions/fpa_body
I have contracted for numerous organizations since 1968, and while I hardly remember the companies that gave me the best tools and environments, I still resent the companies that gave me lousy tools or environments and wanted miracles. I suppose it's sort of like being cautious about the food that made you sick.
"The mind works quicker than you think!"
For me, this article hits the topic head on.
Particularly enlightening, the insight into work that's desirable versus work that is agony. The chance to learn and grow, and an environment that lets you do this, make all the difference. And, I agree that the type he describes often are very self managed, given this. "an environment that lets you do this" -- not asking for management's hand-holding; rather, that they do their thing and stay our of your way, letting you do yours. Including not telling you that you have to work in the midst of a melee and spawn a dozen processes and a thousand threads, putting all your resources into overhead instead of effective work.
I believe it is quite possible to make yourself stupid. I've experienced this myself, working in corp environments that constrained my ability to act, made me clean up after incompetents who had come before (I mean, really incompetent), and which value imposing every conversation and twitching pencil tapper on me, over the effective, for them revolutionary work I pulled off on the off-hours.
I'm on my way out of another such situation. Thanks to Graham for helping to restore a bit of my self esteem.
(I'm not saying I'm great shakes. However, the article gives me some encouragement and ideas for making the best of what I've got.)
Ints? Well I just typed this in my Python interpreter:
Looks like an object to me.
Parent plagarised article without distinguishing his thoughts from those of Paul Graham. While those thoughts are insightful, they are not those of the comment poster, and he should be modded down to -1. Thank you.
Show me the way to go ::1
I'm tired and I wanna go to b:e::d
Everything I need to know I learned by killing smart people and eating their brains.
I think the difference in methodology is based more on project goals. Some projects work well with the well-defined, UML-capable development. Financial database applications are a perfect example of this sort of project.
Other projects aren't suited to this sort of development model. Usually, these include things like compilers, operating systems, and games. Often, these are much more interesting to more people than the financial applications. (There are people who prefer to code financial apps, of course. Not that there's anything wrong with that.)
These "best practices" you mention are only the best practices as determined by someone else, and drawn only from the practices we've developed so far. If we follow only these "best practices," we'll never develop better practices. I don't advocate avoiding them; they are, after all, the best we have so far. But I certainly don't think we should follow them as iron-clad laws.
The world needs both kinds of developers. Me, I affine to the craftsmen. I think engineers work on boring problems.
But what do I know? I'm too busy banging out Perl code on Emacs to be very smart about these things.
Microsoft is to software what Budweiser is to beer.
The same size problem will result in vastly different numbers of lines of code in different languages. One of the primary advantages of higher level languages like python or perl is that it often only requires 10% as many lines of code to write the same program. John Ousterhout analyzes several projects written in both C and tcl in his well known paper "Scripting: Higher Level Programming for the 21st Century", finding ratios of between 2:1 to 47:1 for lines of code in C to lines of code in tcl. I've discovered similar results working in perl and python.
Since when does Lisp have closures? That's why I use Scheme instead.
I do like Java, but we'll see if that's still true after they've added the kitchen sink to it.
You write your nine symphonies, then you die.
My problem with this example is thatseems just as natural, and with pattern matching your language can automatically ensure that all cases are handled properly.
Another beef I have with OOP is the lack of symmetry. Example: If a player can take damage from a monster, where do you put the method to accomplish this? There are 2 (more if you count other classes, such as a theoretical "Turn" class) possibilities, but they each have their advantages and disadvantages, making the choice non-trivial. Sure one gets better at this with experience, but should it really be necessary? With the functional approach it's obvious, and you can unify all the common data/operations through building the types up properly.
HAND.
...know how to write HTML that wraps to the size of a window (on all browsers) so you can print out the fucking thing in a reasonable number of pages.
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.
...
Read what you wrote. The realize that a Great Hacker will
IGNORE THE SPECS.
The specs are always wrong.
The client never know what they want.
Anyone trying to write specs or deliver what a client asks will end with an unhappy client.
So the first rule of programming is to find out what problem you are solving. Go watch the enduser do their job. Figure out what can be improved. Decide if computers can help. Decide which parts SHOULD be automated. Plan enough of the program(s) to check if the budget is enough. Then go write it. Give options anytime there are choices so that it can be configured without additional programming.
I got my current project because they asked for a revision, and I completely trashed their UI. The new UI took one-tenth the time for data input, and was more expandable. Then I changed how the business processes work. Now I am working on reporting tools. The customer loves it.
I may have an unhappy customer someday, but it will mean that we needed another programmer and were unable to find another Great Hacker.
I spend my life entertaining my brain.
You take a very snide tone with me. I was obliged to stop keeping up with Python development because my wife had a series of medical problems (dating from around the beginning of the PEP process, when all this was current discussion) that eventually led to her death last year. What do you expect to gain from such indiscriminate contempt? I had been on the pro-Python side of this debate; do you habitually attack your allies? In time you may want to rethink the efficacy of these strategies.
WWJD for a Klondike Bar?
Sorry. You are 100% right. I apologize for my tone. It was completely uncalled for. Also, my sincere condolences.
This comment isn't directed at any particular post. Just responding to the majority of the posts here.
Hacking is a term that's been around before it spawned into programming. Hacking is merely thinking through a situation and coming up with the best possible answer. To say a hacker is this or that personality... well I feel that's a farce. It's a matter of people trying to classify themselves to feel as though they fit into a "crowd" (who needs crowds; not me).
When you can write a reusable class (meaning you don't have to recode or copy and paste something you already made) you save a lot of time producing the same thing and expanding on it when needed. Making it as generic as possible so it does a specific task(s) is ideal. Sure you can do something similar with scripts but they still aren't as fast as compiled code.
When you have a few hundred page requests per web server any script language will do (and if you have a cluster of servers you can have more; but it doesn't mean it is the most cost effective/efficient means... of course cost effective also depends on the people available for the job and their experience level with a language).
Hell you could do a bunch with ColdFusion for a website (and I do for small scale stuff and when the people that will implement it are familiar with HTML and not much else) but a scripting language will not be as fast as a compiled language. No rebuttals are possible for that (and if you do have one I don't need to read it since you have no clue... yet). Scripts have their place but I wouldn't classify them as uber (then again I don't feel any particular language is better than the other; a hammer is good for this and a screwdriver is good for that... all are tools to be used... I can beat a nail down with the butt of a screwdriver... if it's all I have then it is the best tool for the job... you dig me?).
And as far as dealing with memory in C... sure I hate it too but C is the mother of speed. Means you have to really know what you are doing and effectively document your code. Any good programmer whether it's script or compiled code (that isn't hacking together some code to make it work) will document. After all hopefully that same code continues to be used years down the road. Personally when I work on numerous projects I'm not going to remember every fine detail I placed in my code and why (especially if I use different languages as new crap continues to emerge).
If you say you hate iterations then you are saying something similar to what you get by using OOP classes (again classes that aren't hacks but well thought out and documented solutions). I don't quite get the post on that one but anywho (so loops are too much work?).
Sure I can read over the code and say, Ah hah that's what I was thinking, but that isn't very efficient to read over hundreds, thousands, or more lines of code on numerous different unrelated projects.
Oh well, choose the right tool for the job (which also means if someone isn't familiar with a language don't jump feet first and start coding with it for a client waiting on reliable and secure results).
LiquidMerc
I don't think this guy put much thought into some of these statements.
For one thing, there is the whole language inferiority complex with Java, Perl and Python. Now, I've never written in Java OR Python OR Perl (pure blood C man) but I know something about them, and any programmer will tell you that some languages are better for certain things. Java provides good high-level object oriented constructs, which are obviously better for developing end-user applications with high quality interfaces and data processing for the typical user. Perl might be a favorite for hackers at home, but that's because hackers at home write Perl scripts that provide functionality that is great for them, but cryptic at best for the common end-user. Unless you're writing a back-end for a web interface, Perl is more or less useless, in what I have seen, in creating any product you expect a non-expert to use.
What's with the notes at the end? He puts numbers in the article like he's referencing a source, but then you go down and there are comments the context of which you've long since lost. He seems like a man that embraces unnecessary complexity...I'm going out on a limb here, but that means a shitty programmer.
I think that Java is the language of choice for Software Engineers. Software Engineers are people who write specs, unit test, meet deadlines, write good API's....You know what I mean -- the under-appreciated grunts of the software industry. They are NOT as brilliant as the hackers, but over their lifetime they will be more productive. Just not in any 24 hour period.
There is alot of stuff that definitely be done faster in $LANGUAGE_X than in Java.
To a man with a hammer, everything looks like a nail. --- Mark Twain
I don't know how maintainable/scaleable/reusable $LANGUAGE_X is compared to java, but I have yet to be on a larger commercial project where realistically, you could expect the code to be maintained by at least 100 different developers over the next 5 years in which anything other than the uber-development languages of Java, C or C++ were being used. Of course I've never worked on a MSFT compatible project either -- I'm sure that VB is used on that scale as well.
Hackers and Software Engineers by definition have different skill sets and goals. You need both. I find I like to let the hacker do it his way, and then we do what we need to language wise to make it conform to "best practices," which the hacker finds restrictive and chafing.
Henry Ford did not invent the car, but he brought it to the people. He was an engineer, not a hacker. And there is room for both types in every industry.
But I guess there is no point in posting to this thread without a backhanded stab at one of these religions, so how about this
I've left the opinion tag open for people who want to reply -- if you're posting FACTS you should close it 8)
Nothing great was ever achieved without enthusiasm
It is quite hard to use Perl to create really "stable, maintainable code bases", as perl is filled with various forms of traps almost made to make this hard.
/Friks/ } @{$this->GetFrikable})); I need to write.
Perl has OO - yes - but this OO mix up classes and name spaces, it mix up object methods and class methods, it mix up default handlers and AUTOLOADing, it does not support method signatures - not even to the level of being able to check the count of parameters. And, of course, the standard API is not at all object oriented - there are extra packages that reimplement much of it in an OO fashion, but then you lose even the little checking Perl usually has.
Of course, perl has nice points. It used to be one of my favourite languages, because it was so flexible, implemented such high level constructs, allowed me to do meta-programming, etc. Only occasionally would I curse it for its auto-vivification[1], or the fact that it GC the fileglobs incorrectly when you use the old recommended syntax[2], or the fact that => is just an alias for comma[3], or the lack of parameter count validation[4]. The flexibility was so nice.
Alas, to my daily sorrow, I learned Ruby. I learned that it is possible to do the things Perl make sort of convenient - and still keep everything beautiful.
And I work in Perl daily, because I get paid for it, because there is a legacy codebase we need to support, there are promises to keep.
And I hurt for every push(@{$this->{'FriksCount'}, scalar(grep {
Eivind.
[1] "AUTOVIVIFICANTION" is when Perl makes up a hash entry from your typo, because OF COURSE you would want to save a line of code those one out of 20 times this happens it was intentional. This is brilliant for one-liners, though.
[2] Supposedly "impossible" to fix inside the present interpreter structure; I've discussed it with the maintainers. Or at least without doing a nasty grammar hack.
[3] A nasty grammar hack done to make it simple to write the backend to support both , and => as separators in hashes.
[4] Because it would have been too much work to actually *fully add functions/subroutines to the language*, so instead they used a hack based on an implictly declared array that varies from function to function. There is a new hack allow parameter checking, though. Unless you use OO, of course, because then you obviously are writing a small program and know exactly what is happening everywhere.
Doubting the existence of evolution is like doubting the existence of China: It just shows that you're uninformed.
Given the author's profile of the hacker- Quiet, anti-social and loves his/her corner office with the door locked .357 speak for him.
An asocial guy closes the door. (compare: asymmetrical)
An anti-social guy lets his
gewg_