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
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.
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.
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.
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.
--Pat / zippy@cs.brandeis.edu
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.
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.
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.
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
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...
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".
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.
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.
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
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.
"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!
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
He's not talking about the superiority of any language or implying that some languages have no use.
Think of it in these terms, if you're a salesman selling yachts, looking at the type of watch a potential buyer is wearing can quickly help you identify persons of extreme interest who you should take every possible care to treat right. This doesn't say anything at all about the ability of a cheap Casio to tell the time or perform reliably. It's just saying that people who wear Rolexes are the type of people you're looking for if you are selling yachts.
Similarly, Graham's suggesting that in his experience, great hackers he knows almost invariably enjoy using Python.
I know it's easy to get defensive when someone looks dismissively at the Casio on your wrist, but to say that they shouldn't do so because you can tell time just as well as someone with a Rolex is missing the point.
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
"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.
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'
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
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.
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!
A computer is a machine for getting wrong answers quickly.
Perl can help with that.
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.
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
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.
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.)
Two words: static typechecking. This single property has very far reaching consequences. Most importantly, it allows to detect many programming errors at compile time that would go unnoticed in most other languages. Oh, and don't tell me C++ has a strong type system. It hasn't. For instance, I can do all kinds of nasty things with pointers that are never checked.
Other features:
- higher order functions, partial evaluation
- garbage collection (really efficient, not the time and memory consuming stuff from Java)
- close to the mathematical description of problems
- ...
The point is, I can still program the functional way with all its advantages, but revert to imperative style for the small amount of code that really needs to be fast. Personally, I still prefer Haskell, though (lazy evaluation is fun!).Sebastian
Any program can be written on a Turing machine. Or in Brainfuck for that matter.
And C++ can do functional programming. It *is* a functional language, in some respect.
No, it fails on most properties that make up functional languages: functions are not "first class", there is no static type checking, there is no partial evaluation, variables represent memory cells instead of values, ...
Sebastian
Now, see, you almost had a point when you referred to function objects. They can indeed serve many of the same purposes as closures. But really, such support as C++ does have for treating functions as first class entities is hacky and unreadable template garbage at best. I'm quite a fan of C++ for some things, but that sort of claim is just unrealistic.
Let's take a specific example. Compare the standard "fold" function in something like ML or Haskell with the hackery required to achieve anything close to the same effect in c++. In the functional languages, it's trivial. In C++, it's... well, if you think it's at all elegant, please feel free to post your implementation here so everyone else can learn from it.
Huh? Even people like Andrei, who have written feature articles on this subject, can't provide C++ with anything close to the elegance of a typical functional programming language's "match" construction.
Um, no. There is a world of difference. Most of that world is full of side effects, things which a purely declarative style makes rather difficult, no?
Of course. So can assembly language. Whether they can do it well enough to be of any real use is a different question entirely.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
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.
You got lucky, then. Are you your own boss? Do you work in a small, relatively informal shop?
In most employment situations, doing what you want to do instead of what you've been instructed to do is a terminable offense.
(Hmm, maybe I shouldn't be posting to Slashdot right now.)