I believe the switch to X86 will greatly improve the ability of a Mac to run Windows software and the ability of application writers to port software to the Mac. Also, since OS X is unix, it'll be extremely easy to port any unix software to OS X.
At the risk of asking a stupid question, why do you think porting either Windows or UNIX software to a Mac will be easier just because it runs on Intel hardware?
That's easy, [floating point performance is] completely irrelevant to nearly all users, PC and Mac.
Maybe it is this year, though of course some major applications really need it. However, if various rumours come good over the next few years, just rendering your basic UI is likely to require a significant amount of floating point calculation (at least until the next round of graphics cards do all of that in hardware as well).
I guess that depends on wether it is a good thing to dumb down things.
Producing an interface that is both easy to use and powerful is not a job for dumb people. On the contrary, achieving simplicity while retaining flexibility usually requires very smart people indeed.
Equally, a smart person who wants to get something down rather than just play around is always going to choose a simple-but-effective interface that's efficient over a super-l337, infinitely-customisable, but ultimately more time-consuming and difficult one.
Consider a programming analogy: suppose two developers write code that ultimately achieves the same thing. Say one of them writes 200 lines of intricate technical detail, taking advantage of advanced features offered by the programming language, while the other writes 20 lines using nothing but the most basic language constructs. Which of these is the smart programmer?
The vast majority of software running on a Windows platform was not written with command line operability or scripting in mind.
However, an awful lot of the stuff you'd want to automate provides interfaces via COM and more recently.Net. With a shell that can understand these concepts, it really doesn't matter if you can't control everything with a single string of characters at a command line, because that's a child's toy in comparison anyway. That is why Monad has so much potential, and why it's not just another immitation *nix shell.
For about ten years since the dawn of Windows 95, Microsoft has spent a fortune downplaying the power of a CLI in favor of the all-powerful GUI. After all, why is it that cmd.exe and family are so incredibly anemic? [...] So the upshot is that Microsoft is taking a step forward by moving a few steps back. Now that they're implementing a shell with something vaguely resembling real scripting, they have to somehow correct all of the marketing they have done over the years to mitigate the impact a lack of any decent shell in their operating systems.
Microsoft has provided basic scripting via batch files for years. If you want more than that, they've provided WSH for years, too, or (like the systems at every employer I've ever worked at, and like every home system I've configured in the past decade) you could just install a scripting language like Perl, which blows away any *nix command line shell anyway. I don't know where all this missing stuff the Windows-haters keep complaining about is supposed to be, nor what the market for it is.
The advantage of Monad is precisely that it isn't just another CLI with a few twiddles. It can, for example, be tied into the.Net framework, and thus drive all the automation features that might be provided by any.Net-based application. That's orders of magnitude more powerful than a few command-line twiddles using regexps and pipes, which is pretty much all we've had before on either *nix or Windows until you start using a serious programming language rather than $SHELL_OF_CHOICE.
One source was my own experience: even the Cambridge University Computer Laboratory was in danger of succumbing to the Java hype for a while, despite having a serious collective research interest in programming language design. During my year studying there, I encountered course materials from numerous other universities that were obviously tending the same way. In these cases, the bulk of the course was still solid CS, but the influences were starting to tell. (In fairness, a significant number of places that were jumping on the Java bandwagon a few years ago now seem to be regaining their senses, and going back to teaching more appropriate languages for what they're trying to illustrate.)
Another source is the Usenet newsgroups where I sometimes help out. It's always painful seeing yet another undergrad CS student asking us to do his homework for him because he hasn't studied for his course in $PROGRAMMING_LANGUAGE. A lot of these people seem to be studying at fairly well-known establishments, yet wouldn't know, say, the three basic elements of structured programming or whether an O(n log n) sorting algorithm was good if you offered them a million dollars.
Finally, I've had this conversation before; IIRC, it was actually a past Slashdot discussion. We wound up with an impromptu survey of the establishments people contributing knew about, and far too many of them had obviously commercialised classes as part of their CS course.
Added to the above, I've also seen it from the other side, observing senior staff members the various places I've worked as they reviewed CVs from applicants, and paying attention to what did and didn't get significant amounts of credit from them. Without exception, professional experience counted for more than academic, and while CS courses were generally welcome, they were treated cautiously until the nature of the course had been identified. Thus, regardless of the reality, I'm pretty confident about the perception of recent CS degrees in industry.
I don't have anything solid that's more recent than around two academic years ago, and things were starting to look up then after a few bad years built on all the.com hype. Given the comments of others in the thread here, it's good to see that the situation seems to be improving, and the emphasis shifting back from producing ready-made worker drones to teaching principles.
Except that you can. Get to senior or top levels right from the get-go. You just need to be able to lie and finagle your way in.
Sure, you can get a long way in life if you're a good salesman with no morals to worry about. And as long as you're happy living your life in the knowledge that next week you could be bankrupt and in jail, well, you might even appreciate it.
Me, I'd rather not be that guy. It clashes with my ethical standards. Moreover, IME even the best guys at this game only last a few years before they get found out, and after that their life is effectively over: no money, behind bars, criminal record, reputation obliterated, significant chance of suicide within a year, etc.
In a world where 95% of all software developers know only the world on top of all the abstractions they work through, the one who knows what's underneath is king.
That's very true, but I don't think it's a bad thing.
I came to this conclusion a while back, a few months into my second job working with an office full of software developers: most of the guys I've worked with, despite being pretty smart and often very well qualified (I'm unusual at my current employer because I don't have a PhD), program as their day job. They come in and write code, and then go home content that they've done a decent job and been paid a decent wage for it. This works for them, and it works for their employer, too. This isn't to say that they don't take pride in their work, or that they make no effort to improve their skills and learn new things, but they're basically happy to do the grunt work and have few aspirations beyond that.
A few of the guys I've worked with -- there's no point quibbling over percentages, so let's take cduffy's implied 5% figure -- are good, and I mean really good. There are a few tell-tale signs of this kind of person. For example, they tend to know the little details of their tools, not because they remembered them all by rote or read an extra chapter in the manual, but because they understand in depth how the tools are put together and why they work the way they do. They tend to read around their subjects more than the other guys -- these are the ones who identify which books are worth buying in the first place, not just the ones who make an effort to read some of the stuff in the office library. They'll be the people who get asked the difficult questions when the rest of the office doesn't know, because they'll develop a reputation for being the "guy who knows why".
It can be unfortunate that the latter group of people tend to find grunt work pretty dull, because grunt work goes with the territory. If you're going to be in this business, you'd better accept that sometimes you just have to get on with the dull and boring stuff no matter how good you may be! However, thanks to their higher skill levels and greater repertoire of technique, they can often dispense with grunt work much faster than regular guys when they need to do it.
However, any unavoidable grunt work is basically a waste of their ability, and since these guys tend to expect higher pay, it's usually not a great idea for management to hire this type of person for a job that's mostly grunt work. Software projects usually consist of three things:
grunt work (mostly)
devious technical hackery (underlying all the grunt work -- for example, writing the libraries/tools the grunts use to build their code)
high-level design/architecture work (pulling all the grunt work together to make complete systems you can sell).
The first category can obviously be done by grunts, but the latter two categories really benefit from the presence of wizards.
As luck would have it, the ratio of grunt work to wizard work seems to correspond pretty well to the ratio of grunts to wizards in the software development world. A smart employer will recognise this, and hire/allocate responsibilities accordingly. If a more people understood this balance and how to make best use of different people's abilities and desires, we might actually get somewhere with this software engineering idea...
I have worked with a lot of non-degreed developers that were very capable.
Many non-degreed people will tell you degrees are worthless. They may collect stories of the "educated idiots" they have met or worked with.
I'd agree with all of that, but (IME, and at the risk of over-generalising) those two groups are almost mutually exclusive, and most non-degreed professionals fall pretty clearly into one camp or other.
The capable guys without degrees are usually people who are interested and somewhat talented in their field. They tend to make the effort to learn on their own in some form that works for them, and to respect the efforts of others to learn in ways that work for them, too. Having made that effort, they tend to know their stuff and have some confidence in their abilities, so they don't need to put other people down.
OTOH, if you encounter someone whose first action when meeting new people is to put them down, someone touchy about the value of some qualification or level of experience they don't have, then you're often talking to someone who knows they aren't as good as the person they're attacking. They feel the need to tell everyone how important and worthy they are, because they aren't confident that their results will speak for themselves.
I'm a CS undergrad at a "top ten" university right now, and that hasn't been my experience at all. My curriculum, to date, has included a pretty wide range (though pretty standard) of *actual* computer science--algorithms, computability, probability, linear algebra, operating systems design, compiler design, CPU design, programming and languages stuff, graphics stuff, etc.
That's great. I'm happy that you've found a university that still teaches computer science in Computer Science, and I hope it will serve you well in your future career.
Sadly, however, a great many CS courses no longer have the kind of old-school syllabus you describe. Subjects like Visual Basic Programming or Administering Windows Networks are becoming all too common.
Unfortunately, this means that employers who don't have time to wade through the syllabus of each course taken by each applicant can't rely on a CS degree really meaning much about CS these days, unless there is further evidence provided. For example, the resume could mention some relevant CS material while describing a project undertaken during the course, or used as part of a work placement. There is a lesson here when you come to writing the resume you send out for your first graduate job.
By the way, I really do mean Computer Science courses here. I'm not talking about so-called Software Engineering or Computer Engineering courses, although if you like I can tell you plenty of reasons that real engineers object to those course titles as well.
And just to be clear, as I thought I'd said before, I'm not writing this to belittle the article poster's achievement. I'm simply stating the reality of what a Computer Science qualification is worth on the job market today, and how it got to that point. It's harsh to those whose qualifications are "legitimate", but such is life; better to know about it in advance and so take further steps to project the image you deserve, no?
Blockquoth the AC -- who admits to sneakily abusing the posting-and-moderating rule:-)
What, exactly, makes a hotshot grad think he's more qualified than a similar "hotshot" grad with 5-10 years experience?
Nothing, if he's smart. But of course, most grads aren't hot shots; most grads are about average in ability. So are most guys with 5-10 years' experience; they've just got 5-10 years more experience. How much they learned in that time is what counts.
The real question here is whether a "true hot shot" could possibly have the same ability as a more typical guy with several years' further experience. My argument is that, while certainly exceptional, this is not completely inconceivable if the grad has had significant experience of programming in a real world environment prior to graduation.
The only places "giving" away computer science degrees are places like ITT or University of Phoenix.
That depends on how you define "giving away". I'm not trying to belittle anyone who's taken a CS course here; I have an academic CS qualification myself. However, the simple fact is that a lot of CS courses, even those from universities with generally good reputations, are just glorified training on the products of the day now. They don't deserve to use the phrase "computer science" in their name.
If you see a course that has subjects like "Advanced $PROGRAMMING_LANGUAGE" or "Administering $DATABASE" then alarm bells should be ringing. Anything product- or language-specific in a good CS course will be there simply to illustrate more general principles: the data structures and algorithms within the field being considered, programming in a particular style, a particular aspect in the design of operating systems, or whatever.
Start a company. The worst thing that will happen is you build a lousy product but develop a useful set of skills.
That may be true, but you forgot to mention the parts about needing enough personal money to keep you fed and the roof over your head for potentially several months before you start bringing in any ROI, potentially losing large amounts of money you invest in your start-up if it fails (and needing a source that money in the first place, ideally without selling your soul to VCs), and most importantly, needing the skills to run such a company. If the article poster is a new grad, he probably doesn't have the skills to work in his own company yet, never mind run it.
By the way, while thought-provoking, that's not one of Graham's better articles. He singles out an exceptional group of youngsters who founded exceptionally successful companies, and effectively attributes that success to the individuals while ignoring the vast amounts of help they had between getting the idea for their start-ups and turning them into the successful business they are today. Off the top of my head, I know more people personally who've tried and failed to start a start-up from much more promising positions than all the success stories he mentions in the article put together.
Generally, a Master's degree is worth 2 years of experience by most recruiters.
I think that's optimistic. In some industries, it may well be true, but not computing. In this business, you take a guy with two years' professional development experience over a guy with two more years' academic experience for any non-research development position, because the proven track record and practical skills easily outweigh the same length of time invested in research and theoretical skills.
Higher degrees are good if you want to do research, or as a possible advantage later in your career, but everyone starts on the first rung or two of the ladder. As the parent post suggests, you're never getting up to the senior rungs right from the start no matter how good your academic record may be.
A degree gives an employer a fair indication that you have a decent level of knowledge and can work reasonably hard.
And these days, a lot of degrees don't carry the weight they used to because so many places are practically giving them away (and I don't mean those e-mails you keep getting), and most degrees in computer science don't demonstrate much knowledge of computer science (because so many are just sub-standard training in the tools of the day with a university logo on the certificate). As a new graduate, even if you are that good -- and you're probably not -- then most degrees won't give a lot of reassurance about it to potential employers. There is a reason that pros with job experience list that experience ahead of their academic qualifications on a resume...
Don't expect a senior position. Frankly too many hot-shot grads think they're The Goods; NONE are.
That's not entirely fair (though it mostly is). I've met people who've had enough experience by the time they graduated to understand the real world, and whose talent/enthusiasm/hard work would make them the equals of an average programmer several years into their career (though probably still not an average person getting a senior developer position). This is particularly true of those who've taken placements lasting a few months during their academic careers, or a year out before university, and thus worked in a professional environment for a worthwhile period.
However, your actual ability doesn't really matter much, because image is everything when applying for a job, and you'll be very lucky to find a company that's employing new grads and willing to take a chance that someone who looks that good really is, because as you say, most won't be. It's far more likely that they'd make a relatively good offer for a starting post, and then say nice things and promote rapidly (in salary, if not in job title) over the first couple of years as the greater ability shows through.
Applying for a senior developer position, which usually requires around 5 years of experience, without any prior experience at all will be a direct route to the bin in almost any company I can think of. Larger companies could easily filter you in the HR database before a human even saw your resume. Even at the smaller ones who review CVs by human eye, you'll need an exceptional application to attract enough attention that they'll consider you as a new starter instead, and the ego demonstrated by being a grad applying for a senior position right off would be a major black mark for anyone reviewing CVs I've ever met.
May I slap you with "diversity is good; monoculture bad"?
You may try, sir, but I shall deftly duck with "and I never said otherwise".:-)
My objection to the submitter's approach (as I've interpreted it from the description we have here) isn't that he's aware of alternative approaches, nor that he wants to bring them to the attention of management if they might be useful. Both of these are good things.
However, he seems to be advocating an alternative on the assumption that it is correct, and giving information that he doesn't actually know to be correct to management to support that position. That is unforgivable: I'd never fire someone for giving me an honest opinion, regardless of my agreement or disagreement with it, if it was offered as such. However, I would consider presenting opinion as fact and knowingly giving management unreliable information because it happened to support their personal wishes to be professional misconduct, and it would take an awful lot to redeem anyone who did that.
(OK, saying he should be fired immediately was probably over-dramatic in most circumstances, but certainly a formal warning would be in order if they actually lied to management.)
Then we ask: who will use the software and how will having the source code help them?
That's is the problem with pretty much all the open-source advocates in this thread, right there. What the VP will be asking, since he has a clue about how to run a business for profit, is "Who will use the software, and how will them having the source benefit us?" How it benefits anyone else is utterly irrelevant, unless benefitting them indirectly costs the employer, in which case it is definitely a bad thing.
This shouldn't be a question of "convincing" the VP that open sourcing is the way to go. If the submitter is trying to convince the VP of that without being sure of it himself -- and if he was sure of it, we wouldn't be having this discussion -- then he's simply putting some personal agenda ahead of his duty to his employer. At that point, he should be fired immediately, and replaced by someone whose work is going to benefit the employer who's paying for it.
Defamation (slander/libel) is only valid if you are knowingly and publically stating false facts. MAPS (and apparently SBL - shame, I used to trust you...) are stating that the addresses they block are involved in some way with spam, and they are, if only indirectly. MAPS has always believed that a sort of Internet Death Penalty was valid against ISPs who refused to own up to their problems, and people who subscribe to MAPS seem to agree.
Leaving aside that what you say about defamation may not be true in all jurisdictions, we normally call a process that uses large numbers of machines to affect the ability of a system to communicate a denial of service attack, and there are laws against that sort of thing.
w.r.t. your larger issue, even if we grant end users actual 'rights,' it won't solve the problem. Technology would put those rights into direct conflict with the copyright holder's property rights
There is no easy way to resolve that apparently conflict, it's true; indeed, I've made this observation several times here myself.
However, if you're going to take someone's $15 for a CD of music protected by copyright, and you're going to take their $100 for $MP_THREE_PLAYER that requires format shifting to use it, then you have to accept your side of the bargain too. If you aren't prepared to do that, you shouldn't take people's money.
(Yes, I realise that really does kill certain business models. I hold that those models are both unfair and replaceable by other, more successful models, and therefore protecting them by law does not benefit society.)
If a distributor wants to use DRM, the price to them should be that they must (a) provide the same material to the same customer on alternative media at cost price, and (b) allow an official copyright agency to hold the original, unprotected data in escrow, to guarantee release at the time the copyright expires even if the holder isn't around to do it at the time. Anything less is not providing what the distributor is claiming to charge for (i.e., access to that particular content for that particular individual) and/or not living up to the limited time aspect of copyright.
Alternatively, the distributor could rely on the same principle as many other areas, trust that if people feel the rules are fair then they will generally follow them, and concentrate on going after the ones who really do abuse the system at significant cost. It would appear that users are prepared to pay a modest amount for convenient electronic downloads, for example, and I know far more people who buy legitimate DVDs than rip things off (though few who buy from distributors who plaster adverts and stern warnings all over the first 20 minutes -- go figure).
Bottom line: I agree with the principle of copyright, and that it should be enforceable by law. I have no problem with pretty harsh penalties for those who violate it, and distribute material widely. But equally, I don't see why the law should impede my legitimate and sensible requests as a consumer, when they are clearly of benefit to me, yet cost the media industries nothing if what I'm buying really is the right to have the material for personal use as they claim.
When an ISP is receiving and storing terabytes of E-mail a day of SPAM and wasting their resources doing so when almost none of their users want it, automatically blocking those messages and adding a statement to that effect to their SLA is perfectly legit.
As long as it's clearly advertised up-front, perhaps. If I found that my ISP, which has given me no such notification, had blocked even one mail from my inbox without my consent, I'd be gone within minutes. I've seen too many places hit by RBL idiocy, and I choose to do all filtering locally, thanks.
Speaking of blacklists not working, the company I work for had an open relay. We discovered this when we started getting Blacklist replies one December. Management wouldn't do anything, because our admin wanted to spend $20k upgrading our server to fix the problem.
I would have thought firing the admin who left the relay open and hiring someone competent to fix it instead might have been a good thing to do. What on earth was the $20k suppose to be for?
At the risk of asking a stupid question, why do you think porting either Windows or UNIX software to a Mac will be easier just because it runs on Intel hardware?
Maybe it is this year, though of course some major applications really need it. However, if various rumours come good over the next few years, just rendering your basic UI is likely to require a significant amount of floating point calculation (at least until the next round of graphics cards do all of that in hardware as well).
Producing an interface that is both easy to use and powerful is not a job for dumb people. On the contrary, achieving simplicity while retaining flexibility usually requires very smart people indeed.
Equally, a smart person who wants to get something down rather than just play around is always going to choose a simple-but-effective interface that's efficient over a super-l337, infinitely-customisable, but ultimately more time-consuming and difficult one.
Consider a programming analogy: suppose two developers write code that ultimately achieves the same thing. Say one of them writes 200 lines of intricate technical detail, taking advantage of advanced features offered by the programming language, while the other writes 20 lines using nothing but the most basic language constructs. Which of these is the smart programmer?
However, an awful lot of the stuff you'd want to automate provides interfaces via COM and more recently .Net. With a shell that can understand these concepts, it really doesn't matter if you can't control everything with a single string of characters at a command line, because that's a child's toy in comparison anyway. That is why Monad has so much potential, and why it's not just another immitation *nix shell.
Microsoft has provided basic scripting via batch files for years. If you want more than that, they've provided WSH for years, too, or (like the systems at every employer I've ever worked at, and like every home system I've configured in the past decade) you could just install a scripting language like Perl, which blows away any *nix command line shell anyway. I don't know where all this missing stuff the Windows-haters keep complaining about is supposed to be, nor what the market for it is.
The advantage of Monad is precisely that it isn't just another CLI with a few twiddles. It can, for example, be tied into the .Net framework, and thus drive all the automation features that might be provided by any .Net-based application. That's orders of magnitude more powerful than a few command-line twiddles using regexps and pipes, which is pretty much all we've had before on either *nix or Windows until you start using a serious programming language rather than $SHELL_OF_CHOICE.
One source was my own experience: even the Cambridge University Computer Laboratory was in danger of succumbing to the Java hype for a while, despite having a serious collective research interest in programming language design. During my year studying there, I encountered course materials from numerous other universities that were obviously tending the same way. In these cases, the bulk of the course was still solid CS, but the influences were starting to tell. (In fairness, a significant number of places that were jumping on the Java bandwagon a few years ago now seem to be regaining their senses, and going back to teaching more appropriate languages for what they're trying to illustrate.)
Another source is the Usenet newsgroups where I sometimes help out. It's always painful seeing yet another undergrad CS student asking us to do his homework for him because he hasn't studied for his course in $PROGRAMMING_LANGUAGE. A lot of these people seem to be studying at fairly well-known establishments, yet wouldn't know, say, the three basic elements of structured programming or whether an O(n log n) sorting algorithm was good if you offered them a million dollars.
Finally, I've had this conversation before; IIRC, it was actually a past Slashdot discussion. We wound up with an impromptu survey of the establishments people contributing knew about, and far too many of them had obviously commercialised classes as part of their CS course.
Added to the above, I've also seen it from the other side, observing senior staff members the various places I've worked as they reviewed CVs from applicants, and paying attention to what did and didn't get significant amounts of credit from them. Without exception, professional experience counted for more than academic, and while CS courses were generally welcome, they were treated cautiously until the nature of the course had been identified. Thus, regardless of the reality, I'm pretty confident about the perception of recent CS degrees in industry.
I don't have anything solid that's more recent than around two academic years ago, and things were starting to look up then after a few bad years built on all the .com hype. Given the comments of others in the thread here, it's good to see that the situation seems to be improving, and the emphasis shifting back from producing ready-made worker drones to teaching principles.
Sure, you can get a long way in life if you're a good salesman with no morals to worry about. And as long as you're happy living your life in the knowledge that next week you could be bankrupt and in jail, well, you might even appreciate it.
Me, I'd rather not be that guy. It clashes with my ethical standards. Moreover, IME even the best guys at this game only last a few years before they get found out, and after that their life is effectively over: no money, behind bars, criminal record, reputation obliterated, significant chance of suicide within a year, etc.
But is the time to figure our what job you really want earlier than that, or later?
That's very true, but I don't think it's a bad thing.
I came to this conclusion a while back, a few months into my second job working with an office full of software developers: most of the guys I've worked with, despite being pretty smart and often very well qualified (I'm unusual at my current employer because I don't have a PhD), program as their day job. They come in and write code, and then go home content that they've done a decent job and been paid a decent wage for it. This works for them, and it works for their employer, too. This isn't to say that they don't take pride in their work, or that they make no effort to improve their skills and learn new things, but they're basically happy to do the grunt work and have few aspirations beyond that.
A few of the guys I've worked with -- there's no point quibbling over percentages, so let's take cduffy's implied 5% figure -- are good, and I mean really good. There are a few tell-tale signs of this kind of person. For example, they tend to know the little details of their tools, not because they remembered them all by rote or read an extra chapter in the manual, but because they understand in depth how the tools are put together and why they work the way they do. They tend to read around their subjects more than the other guys -- these are the ones who identify which books are worth buying in the first place, not just the ones who make an effort to read some of the stuff in the office library. They'll be the people who get asked the difficult questions when the rest of the office doesn't know, because they'll develop a reputation for being the "guy who knows why".
It can be unfortunate that the latter group of people tend to find grunt work pretty dull, because grunt work goes with the territory. If you're going to be in this business, you'd better accept that sometimes you just have to get on with the dull and boring stuff no matter how good you may be! However, thanks to their higher skill levels and greater repertoire of technique, they can often dispense with grunt work much faster than regular guys when they need to do it.
However, any unavoidable grunt work is basically a waste of their ability, and since these guys tend to expect higher pay, it's usually not a great idea for management to hire this type of person for a job that's mostly grunt work. Software projects usually consist of three things:
- grunt work (mostly)
- devious technical hackery (underlying all the grunt work -- for example, writing the libraries/tools the grunts use to build their code)
- high-level design/architecture work (pulling all the grunt work together to make complete systems you can sell).
The first category can obviously be done by grunts, but the latter two categories really benefit from the presence of wizards.As luck would have it, the ratio of grunt work to wizard work seems to correspond pretty well to the ratio of grunts to wizards in the software development world. A smart employer will recognise this, and hire/allocate responsibilities accordingly. If a more people understood this balance and how to make best use of different people's abilities and desires, we might actually get somewhere with this software engineering idea...
I'd agree with all of that, but (IME, and at the risk of over-generalising) those two groups are almost mutually exclusive, and most non-degreed professionals fall pretty clearly into one camp or other.
The capable guys without degrees are usually people who are interested and somewhat talented in their field. They tend to make the effort to learn on their own in some form that works for them, and to respect the efforts of others to learn in ways that work for them, too. Having made that effort, they tend to know their stuff and have some confidence in their abilities, so they don't need to put other people down.
OTOH, if you encounter someone whose first action when meeting new people is to put them down, someone touchy about the value of some qualification or level of experience they don't have, then you're often talking to someone who knows they aren't as good as the person they're attacking. They feel the need to tell everyone how important and worthy they are, because they aren't confident that their results will speak for themselves.
It depends entirely on where you get your degree. For example, I have a BA degree in mathematics.
Blockquoth the AC:
That's great. I'm happy that you've found a university that still teaches computer science in Computer Science, and I hope it will serve you well in your future career.
Sadly, however, a great many CS courses no longer have the kind of old-school syllabus you describe. Subjects like Visual Basic Programming or Administering Windows Networks are becoming all too common.
Unfortunately, this means that employers who don't have time to wade through the syllabus of each course taken by each applicant can't rely on a CS degree really meaning much about CS these days, unless there is further evidence provided. For example, the resume could mention some relevant CS material while describing a project undertaken during the course, or used as part of a work placement. There is a lesson here when you come to writing the resume you send out for your first graduate job.
By the way, I really do mean Computer Science courses here. I'm not talking about so-called Software Engineering or Computer Engineering courses, although if you like I can tell you plenty of reasons that real engineers object to those course titles as well.
And just to be clear, as I thought I'd said before, I'm not writing this to belittle the article poster's achievement. I'm simply stating the reality of what a Computer Science qualification is worth on the job market today, and how it got to that point. It's harsh to those whose qualifications are "legitimate", but such is life; better to know about it in advance and so take further steps to project the image you deserve, no?
Blockquoth the AC -- who admits to sneakily abusing the posting-and-moderating rule :-)
Nothing, if he's smart. But of course, most grads aren't hot shots; most grads are about average in ability. So are most guys with 5-10 years' experience; they've just got 5-10 years more experience. How much they learned in that time is what counts.
The real question here is whether a "true hot shot" could possibly have the same ability as a more typical guy with several years' further experience. My argument is that, while certainly exceptional, this is not completely inconceivable if the grad has had significant experience of programming in a real world environment prior to graduation.
That depends on how you define "giving away". I'm not trying to belittle anyone who's taken a CS course here; I have an academic CS qualification myself. However, the simple fact is that a lot of CS courses, even those from universities with generally good reputations, are just glorified training on the products of the day now. They don't deserve to use the phrase "computer science" in their name.
If you see a course that has subjects like "Advanced $PROGRAMMING_LANGUAGE" or "Administering $DATABASE" then alarm bells should be ringing. Anything product- or language-specific in a good CS course will be there simply to illustrate more general principles: the data structures and algorithms within the field being considered, programming in a particular style, a particular aspect in the design of operating systems, or whatever.
That may be true, but you forgot to mention the parts about needing enough personal money to keep you fed and the roof over your head for potentially several months before you start bringing in any ROI, potentially losing large amounts of money you invest in your start-up if it fails (and needing a source that money in the first place, ideally without selling your soul to VCs), and most importantly, needing the skills to run such a company. If the article poster is a new grad, he probably doesn't have the skills to work in his own company yet, never mind run it.
By the way, while thought-provoking, that's not one of Graham's better articles. He singles out an exceptional group of youngsters who founded exceptionally successful companies, and effectively attributes that success to the individuals while ignoring the vast amounts of help they had between getting the idea for their start-ups and turning them into the successful business they are today. Off the top of my head, I know more people personally who've tried and failed to start a start-up from much more promising positions than all the success stories he mentions in the article put together.
I think that's optimistic. In some industries, it may well be true, but not computing. In this business, you take a guy with two years' professional development experience over a guy with two more years' academic experience for any non-research development position, because the proven track record and practical skills easily outweigh the same length of time invested in research and theoretical skills.
Higher degrees are good if you want to do research, or as a possible advantage later in your career, but everyone starts on the first rung or two of the ladder. As the parent post suggests, you're never getting up to the senior rungs right from the start no matter how good your academic record may be.
And these days, a lot of degrees don't carry the weight they used to because so many places are practically giving them away (and I don't mean those e-mails you keep getting), and most degrees in computer science don't demonstrate much knowledge of computer science (because so many are just sub-standard training in the tools of the day with a university logo on the certificate). As a new graduate, even if you are that good -- and you're probably not -- then most degrees won't give a lot of reassurance about it to potential employers. There is a reason that pros with job experience list that experience ahead of their academic qualifications on a resume...
That's not entirely fair (though it mostly is). I've met people who've had enough experience by the time they graduated to understand the real world, and whose talent/enthusiasm/hard work would make them the equals of an average programmer several years into their career (though probably still not an average person getting a senior developer position). This is particularly true of those who've taken placements lasting a few months during their academic careers, or a year out before university, and thus worked in a professional environment for a worthwhile period.
However, your actual ability doesn't really matter much, because image is everything when applying for a job, and you'll be very lucky to find a company that's employing new grads and willing to take a chance that someone who looks that good really is, because as you say, most won't be. It's far more likely that they'd make a relatively good offer for a starting post, and then say nice things and promote rapidly (in salary, if not in job title) over the first couple of years as the greater ability shows through.
Applying for a senior developer position, which usually requires around 5 years of experience, without any prior experience at all will be a direct route to the bin in almost any company I can think of. Larger companies could easily filter you in the HR database before a human even saw your resume. Even at the smaller ones who review CVs by human eye, you'll need an exceptional application to attract enough attention that they'll consider you as a new starter instead, and the ego demonstrated by being a grad applying for a senior position right off would be a major black mark for anyone reviewing CVs I've ever met.
That falls down firstly on simple, philosophical arguments, not least that a right you can't exercise is no right at all.
You may try, sir, but I shall deftly duck with "and I never said otherwise". :-)
My objection to the submitter's approach (as I've interpreted it from the description we have here) isn't that he's aware of alternative approaches, nor that he wants to bring them to the attention of management if they might be useful. Both of these are good things.
However, he seems to be advocating an alternative on the assumption that it is correct, and giving information that he doesn't actually know to be correct to management to support that position. That is unforgivable: I'd never fire someone for giving me an honest opinion, regardless of my agreement or disagreement with it, if it was offered as such. However, I would consider presenting opinion as fact and knowingly giving management unreliable information because it happened to support their personal wishes to be professional misconduct, and it would take an awful lot to redeem anyone who did that.
(OK, saying he should be fired immediately was probably over-dramatic in most circumstances, but certainly a formal warning would be in order if they actually lied to management.)
That's is the problem with pretty much all the open-source advocates in this thread, right there. What the VP will be asking, since he has a clue about how to run a business for profit, is "Who will use the software, and how will them having the source benefit us?" How it benefits anyone else is utterly irrelevant, unless benefitting them indirectly costs the employer, in which case it is definitely a bad thing.
This shouldn't be a question of "convincing" the VP that open sourcing is the way to go. If the submitter is trying to convince the VP of that without being sure of it himself -- and if he was sure of it, we wouldn't be having this discussion -- then he's simply putting some personal agenda ahead of his duty to his employer. At that point, he should be fired immediately, and replaced by someone whose work is going to benefit the employer who's paying for it.
Leaving aside that what you say about defamation may not be true in all jurisdictions, we normally call a process that uses large numbers of machines to affect the ability of a system to communicate a denial of service attack, and there are laws against that sort of thing.
There is no easy way to resolve that apparently conflict, it's true; indeed, I've made this observation several times here myself.
However, if you're going to take someone's $15 for a CD of music protected by copyright, and you're going to take their $100 for $MP_THREE_PLAYER that requires format shifting to use it, then you have to accept your side of the bargain too. If you aren't prepared to do that, you shouldn't take people's money.
(Yes, I realise that really does kill certain business models. I hold that those models are both unfair and replaceable by other, more successful models, and therefore protecting them by law does not benefit society.)
If a distributor wants to use DRM, the price to them should be that they must (a) provide the same material to the same customer on alternative media at cost price, and (b) allow an official copyright agency to hold the original, unprotected data in escrow, to guarantee release at the time the copyright expires even if the holder isn't around to do it at the time. Anything less is not providing what the distributor is claiming to charge for (i.e., access to that particular content for that particular individual) and/or not living up to the limited time aspect of copyright.
Alternatively, the distributor could rely on the same principle as many other areas, trust that if people feel the rules are fair then they will generally follow them, and concentrate on going after the ones who really do abuse the system at significant cost. It would appear that users are prepared to pay a modest amount for convenient electronic downloads, for example, and I know far more people who buy legitimate DVDs than rip things off (though few who buy from distributors who plaster adverts and stern warnings all over the first 20 minutes -- go figure).
Bottom line: I agree with the principle of copyright, and that it should be enforceable by law. I have no problem with pretty harsh penalties for those who violate it, and distribute material widely. But equally, I don't see why the law should impede my legitimate and sensible requests as a consumer, when they are clearly of benefit to me, yet cost the media industries nothing if what I'm buying really is the right to have the material for personal use as they claim.
As long as it's clearly advertised up-front, perhaps. If I found that my ISP, which has given me no such notification, had blocked even one mail from my inbox without my consent, I'd be gone within minutes. I've seen too many places hit by RBL idiocy, and I choose to do all filtering locally, thanks.
I would have thought firing the admin who left the relay open and hiring someone competent to fix it instead might have been a good thing to do. What on earth was the $20k suppose to be for?