IANAL...I have never heard of invention disclosure going past the end of employment. It is universal to require you to cooperate in securing patents and copyrights for things you did while you were employed, even if the filing takes place once you are no longer employed (and these don't seem to have a time limit). Some companies pay for your expenses and time and some don't, or don't in the first draft. That's reasonable--the actual inventor has to sign the patent application, and company should be able to finish the paperwork once you've left. It seems like they would have a hard time claiming they own things you invented on time they didn't pay for.
I've signed a non-compete with a small company. They had two competitors that they named in the contract, they were in cities I wouldn't have moved to, anyway, and it didn't close off very many jobs in the universe of jobs. In some states, a non-compete cannot be enforced. It is probably easier to enforce a specific agreement naming particular companies than a generic agreement that says you will give up working anywhere in the industry. In some industries, a non-compete means you can't work for anybody!
Practically speaking, they are not going to go through the bother of coming after you for non-work related ideas that they don't know what to do with. But in states where it is allowed, you are giving them an excuse to sue you if you go to work for a competitor, or start up something on your own. It doesn't really matter who wins or loses the suit, it'd still be unpleasant. If you really think you are going to come out with something that threatens their business, and can work on it secretly without anybody noticing, you shouldn't sign it if you're in a state where it can be enforced. If this is just a theoretical concern, it's not worth spending any more time worrying about.
I wonder what else is in this agreement.
As a software engineer turned UI designer, it seems to me that when the UI gets re-done, it is either trivial (change this word, so you change a properties file), or a complete overhaul. UI layers don't get maintenance the same way other layers do. Lots of people see them, so they change dramatically when there are problems.
So I think it's best to take as much as possible out of the UI code and make it a really simple, almost disposable, client of really good APIs to the rest of the system. Simple is not necessarily elegant or clever. Simple might just be straightforward. If you have to add 100 countries to a list, it's OK to do that in 200 lines of code if those 200 lines of code are obvious in what they do.
If someone knows the GUI toolkit, it shouldn't be hard to look at a screen and match it up to the relevant code. Just because you don't know it yet and could just as easily understand something you write yourself doesn't mean you shouldn't consider that there are more people out there who know the toolkit and its tendency to cause code to be repeated. They probably look at those sequences and read them without a second thought.
It seems to me that if you are programming, you are no longer doing research, at least not UI research, which seems to have more to do with human beings than computers.
It also seems to me that if you are using Java or C#, which are commercial systems unlikely to be influenced by academic research, you are a bit behind the curve. WIMP interfaces have been around for 20 years now.
If you have research that is best shared through an SDK, then you should use the language and tools of your most likely or receptive audience, no matter how unpleasant that may be. But an SDK implies you have an audience of programmers, and not an audience of UI designers who as a rule wouldn't know what to do with an SDK in any language. If, on the other hand, you have useful tools, then any number of languages would be acceptable.
The contract is 13 pages long. I think something that complex needs, as I said, the accompanying legal counsel. Drafting a contract you can use for multiple projects is a wise expenditure; much less expensive than litigation, or even a dispute down the road. That's why the subject wasn't "Use my contract from my lawyer."
A lawyer who has worked in software before is only going to charge you a few minutes to piece together the boilerplate appropriate to your needs, and then for the time you spend discussing the agreement, so it is no more than an hour or two. Since they bill hourly and this is not a big project like litigation, even an expensive lawyer is only going to be a small percentage of the first contract's value.
I wanted a contract that was fair to both sides from the outset, because it's not my style to take a one-sided position just for the sake of looking tough. You really need a lawyer to tell you what is fair and customary in your situation. But that may not be your style at all.
Plus, lawyers are better at defending their own boilerplate than somebody else's, and know what has been tested. Your lawyer's boilerplate is better for your lawyer than my lawyer's boilerplate. (Don't you hate debugging someone else's code?) And things vary from state to state.
My proposals always make it clear that my quote is a quote for work done under my standard contract. If the client then shows me their contract, I explain that I may have to charge more, especially since I will have to have a lawyer review their terms. Since at that point, the project managers are usually in a hurry, they will stand up for using my contract, just for the sake of time.
My standard contract was developed by a lawyer who specializes in software, who went over it with me very carefully. I know the importance of each clause. I also know that it is fair to both sides, unlike some clients' contracts I have been presented with. Sometimes, clients are just testing to see what they can get away with, since most contractors are naive about such things.
One thing I learned is that contracts drawn up by clients do not say that you must be paid before they own the intellectual property. Something this basic could be disputed if they didn't pay you in full! My standard contract says my clients must pay me in full before the IP rights transfer to them. Obviously, no PHB or lawyer can with a straight face suggest removing that clause from my contract, but many have tried presenting contracts without saying exactly when the rights transfer. This is a subtle point I would have missed had I not spent time with an attorney.
For an employer, an unsolicited resume is not very useful. Though this is not an unreasonable way to find recent grads, it is not how people get hired once they have some experience. The effort of finding the one good candidate among thousands is just not worth it, even if it might seem the fair way to go about things.
For a job seeker, making your resume one among thousands is not an effective strategy, even if it takes little effort. When I have listed my resume in databases, the only result has been calls from recruiters in India asking me if I would consider commuting from California to Delaware. Presumably, they call people at random without reading even the address.
When job listings are free, as they are on company web sites, they often do not correspond to jobs that the company is really going to fill anytime soon. This is something I evaluate. Looking at how Google, for one has had the same listings for years, it seems they are fishing for whatever might come up. This kind of thing is not allowed in newspaper ads: it used to be considered unethical to collect resumes (which may be from employees of your competition) unless you have a bona fide opening. I am also suspicious of Craigslist job ads.
More useful are very targeted job listings. For instance, BayCHI runs a job bank for user interface folks. Employers know they are reaching people who have bothered to join a professional organization, and members know the employers at least know enough about the field to know that if they just want graphic design, they'll say so. (Unfortunately, BayCHI listings are also free and some companies have listed the same openings there for years too without seeming to fill them.)
Alumni organizations might be targeted enough to attract mutually compatible jobs and applicants.
I'm not sure that there's anything not "great" about the school you're attending. Junior and community colleges typically provide very applied topics, like system administration or training in particular software packages or even programming languages. Even though it is unfortunately called "Computer Science," it is not what a CS department at a 4-year school would offer.
For students planning to go to 4-year schools, junior and community colleges offer what California schools call "general education" requirements: English, calculus, etc. Offering the type of CS class that a 4-year school would offer would be too specialized for them.
If your plan is to get a job right away learning skills you can pick up quickly, then that's what the CC CS classes are for. If you are looking for credits that will apply toward a bachelor's degree, they are probably in more general things like English, math, and science. In a community college, it is usually cheaper, and you get those things out of the way so you can focus on your major-related classes once you transfer.
As an individual act, it is foolish. Which is why I am chicken. You cannot boycott the bus system by yourself and expect change. But if enough people did it, businesses would be forced to figure out something else. You can't put a note on everybody's credit report and expect the system to run smoothly.
The real problem is that banks, credit bureaus, and schools are allowed to continue to pretend that knowing someone's SSN and birthdate is proof of anything.
It seems like this could be solved with a public database of SSNs and birthdays. Once you list yourself, you can tell credit bureaus and banks that this information has been widely published, and therefore anybody who acts like it's a secret is negligent. Civil disobedience for the information age.
One of the most important things an assertion does is to document the code. Even if they were only comments, they would still be useful. It's just an added bonus that you can make them "live," either at debug time or all the time.
I would consider it a mistake to assert that memory allocation was successful; that's the kind of thing that has to be handled by code, not an assertion. But you might assert that a pointer is non-null if you require it to be initialized.
In other words, an assertion should explain assumptions and how things work to someone reading the program. Generally, these are not dynamic conditions because those need to be handled in other ways.
But the MIT people seem to have one big talent for making publicity. And I'll give them credit for that.
The project in the article comes from the MIT Media Lab, which is good at funding and publicity but lacks the intellectual rigor of the rest of MIT.
Projects in the Program Analysis Group in the EECS Department are more along the lines of tools for people who are professional programmers: upgrade testing, invariant discovery, fault detection.
If it can be converted to a program, it is one
on
English To Code Converter
·
· Score: 2, Insightful
The same problem exists for a lot of specs that get as detailed as a program. The actual thinking needs to take place at a higher level. I am not convinced that you get more people who can think about software at a high level because of the tools; that takes some combination of education, experience, and natural inclination.
Programming languages have the advantage of precision and programmers' tools like debuggers and syntax checkers. Toy language developers overlook this big step. So how exactly do you go backward from finding a problem in the running program to the conceptual problem in your high-level thinking? Perhaps this is easy for people who are already programmers, but for the supposed audience for stuff like this, that's the most difficult thing of all.
Turning input into some arbitrary computer program isn't interesting. Helping programmers to reason about programs is. That means tools that aren't just one-way translations.
The idea of basing a programming language upon natural lan-guage dates back to the earliest days of high-level programming languages. COBOL was an attempt to make programming code as similar as possible to English, in contrast to FORTRAN's metaphor of mathematical formulae. The hope was to make programming accessible to non-technical business users....most importantly, we hope interfaces like Metafor can put some of the fun back into programming.
When did programming in conventional non-COBOL languages cease to be fun? In fact, I've never hear someone describe COBOL programming as fun (cf. COBOL fingers). I've even had fun using FORTRAN, as it was the only way to use a cool plotter, and, later, a parallel supercomputer.
Besides, people who try to express things precisely in English are called lawyers, and we don't want to become that, do we?
It was very difficult for me to go back to grad school just three years after getting my bachelor's degree. It was hard to be a student again after having a real job for a while, financially, and getting used to a not really 9-5 schedule. So unless you know what you're going to do that's any better, you might as well spend next year in school before you lose your student habits.
In school, you will learn about options you hadn't considered before. For example, I was a computer geek. I had no idea how my fellow freshmen knew what chemical engineering was or how a 17 year-old knows that she wants to study nuclear engineering. Sure, high schools have computers to spark interest, but not high-powered physics labs and so forth. You may want to avoid a school that makes you pick a major too soon, and approach your general freshman requirements with an open mind. Besides new academic options, you will also find out about sports and other activities you might not have considered.
That all said, I wish I had travelled during school, as an exchange student. I didn't get to live in another country until much later in life, and it has been an interesting, sometimes wonderful, sometimes frustrating experience. As a foreign student, you have much more structure and support and you're surrounded by other young people looking to make friends, and it can be no more expensive than studying at home. I thought I had to graduate from college in four years, so I didn't consider the opportunity when I had the chance.
One tradeoff is the expense of taking your time (foreign exchange credits may not all transfer) vs. graduating as soon as possible. It depends on how much debt you have to take on. If you live in a state with a good community college system, then that's a good way to save money, and with the money you save, it makes it easy to spend a semester or year abroad, even if it does push out your graduation date.
College is supposed provide a structure for figuring out the kinds of things you are trying to figure out. Since you don't seem to have a plan of your own, I think you should give it a try.
Google only shows links from pages that rank above a certain PageRank, 4ish, it seems. So the link: operator is not reliable for finding CC pages that are not ranked very highly. Since it has taken more than three months for my blog to be assigned a PageRank, it seems that newish pages would also be missed.
Sometimes, using the link.all: operator on AllTheWeb.com gives you more results than the link: operator at Google.
Wow. I haven't heard anyone use the term "AI" in a long time.
If they're trying to evoke the feeling of being dated and discredited, why not also call the company N-ron?
Re:The PC isn't dead, but PC innovation is
on
The PC Is Not Dead
·
· Score: 1
What do you think, the engineer moves away from the valley and promptly dies?... The type of person cooking up ideas in a garage will do so in the valley, puget sound, (hel)L.A., NYC or Des Moines, Iowa. Silicon valley was created at a fortiutous juncture in history, and is not indicative of the only method of success.
What makes Silicon Valley different is that it remains the only place that has a concentration of all the kinds of people needed to make a successful high-tech company, from young restless engineers to crusty old engineers to gaggles of IP lawyers and restaurants full of venture capitalists. I came to take that for granted until an overseas assignment where I learned why that matters. Software companies have really strange accounting rules, which you have to explain to accountants elsewhere. If you are the first software company your website designer has dealt with, they think 1's and 0's are an original idea! Engineers don't think much of software marketeers to begin with, but imagine what they're like if they've never worked for a software company before! It is not that it can't be done elsewhere, but it's much more difficult.
I think sending young engineers overseas or even to other parts of the U.S. has long term bad consequences for the Silicon Valley ecosystem. But 13% of the workforce is already gone.
However, I did feel a little cheated by the fact that several chapters covered essentially the same task, with only minor variations.
I can relate. I have cookbooks for food that have all these recipes that are nothing but flour, butter, eggs, and sugar. Do we need all these recipes for pancakes, cupcakes, cookies, crepes, waffles, popovers, bread, quick bread, bread sticks? Won't people figure out eventually to put a little less sugar in waffles with savory ingredients?
Japanese cookbooks are even worse. Soy sauce, sake, mirin...boooooooring!
The PC isn't dead, but PC innovation is
on
The PC Is Not Dead
·
· Score: 5, Interesting
Typewriters were around for a long time virtually unchanged. There is no doubt that the Intel/Microsoft platform has become the Wang word processor of the 21st century, essential to every office.
The circumstances that led to the PC revolution are long since past. When the anti-trust case against Microsoft was settled four years ago with no consequences, investors and entrepreneurs were told that there is no reason to bother to do anything Microsoft might have an interest in, because Microsoft would be free to use the Windows monopoly to crush them.
During the dot-com boom, almost all software talent went to Internet development, sucking the oxygen out of innovation meant for the PC. Bringing things on-line is important and valuable, but the 10,000th brochure website, or even the second on-line bookstore, is not innovation.
The dot-com crash in Silicon Valley has meant the loss of 400,000 jobs there and 400,000 people moving out of the valley. It's debatable how much of this is due to outsourcing, but for every job lost to some other location, that's one fewer young engineer cooking up ideas in a garage. India and China have gained, but the software industry has lost something by the scattering of young talent; the disappearance of tech veterans has long-term consequences, too.
There are still business opportunities in cleaning up security messes and customization of enterprise software products, and there always will be, but none of this really counts as innovation.
When I moved to Silicon Valley in 1995, it wasn't obvious that Microsoft was going to dominate the way it does today, or that the Internet would suck the oxygen out of other kinds of software projects for a while. The smart money and adventurous people have moved on to other things. Forever.
How cooperative are the users? Are you just being nosy and forcing them to register for something so you can send them junk mail? Then you probably need to check everything and be annoying. But if they're paying money for something that they won't get if they screw up their address, then they are probably motivated to type the information correctly.
Also, will a human being review the label before shipment anyway? Will you get a phone number or e-mail address so you can catch mistakes that slip through? That remains the best way to make sure you get it right.
I find it extremely irritating to pick a country out of a list of all the countries in the world. Instead of a drop-down list, it would be better to let them type the country name and correct the typos and common misspellings. (When you do so, you might want to give the user another chance to check for other problems.) Are your customers really equally likely to be in any of the world's countries?
Finally, the USPS didn't like the format of many of the addresses in my Palm Pilot when I tried out Endicia a few months ago. I am actually pretty careful about these things, and have done bulk mail encoding before. But the post office wants addresses to look as ugly and institutional as possible. So if you used the USPS's pretty extensive checks, you would be irritating your customers who like to get their mail addressed to "One Broadway" instead of 1 BROADWAY ST or "451 Second St., Apartment #31" instead of 451 2ND ST UNIT 31. I would rather address mail to my customers using the way they want to see their addresses, not how the post office computers say they should look.
I taught a class on speech recognition application development for a while. Though the students were supposed to be programmers, sometimes extra seats would be filled by marketing types. They did fine for the first few days of the class where they had to modify, among other things, a simple C program. They also could peek at the solutions.
My boss at the time was the director of business development, a smart guy who could handle Excel macros and that kind of thing. He was good because he understood things from the lowest levels to the highest, and, thanks to the class, was the only executive in the company outside of R&D who actually knew what had to be typed to get an application to work.
While some posters seem to think it's dangerous to let business students experience success at programming, I think your students will have a better sense of accomplishment making limited changes to existing programs and scripts. Seeing things in context will give them a better sense of scale than the tiny demo-level things they could write themselves from scratch.
One warning, and something that has affected how I write code since then: every inconsistency in capitalization, indentation, variable and function naming, file locations, etc. will confuse somebody sooner or later. I started with programs from a variety of sources and had to clean them all up after a few runs of the course because students have a hard time knowing what's important and what can be ignored. (Besides C, we had a language for specifying what words could be recognized, and so even the experienced programmers had some new syntax to deal with.)
At no point in the development of the PC did anyone ask, how does the human mind work? Certainly nobody ever asked, how do children learn and what forms of technology would best assist this? Now there is good research that shows that even teenagers' brains work differently than adults' brains, as if that's news to any adult who remembers being a teenager.
So it's even worse than the 20 years it took for computers to be productive in the office. Not nearly enough R&D has gone into addressing the problem technology is supposed to solve, which is getting kids to learn academic subjects. There is no reason to think that a PC evolved to help already educated adult office workers is appropriate for students learning math in the first place.
Sure, I learned typing in high school, and there's nothing wrong with learning computer basics while computers remain so difficult to figure out. But that doesn't count as an academic subject any more than driver's ed.
Graphing calculators, on the other hand, have evolved with the input of math teachers and have been geared to the math curriculum, and designed with students in mind from the start. Just as graphing calculators would be sort of out of place in an English class, why do we think a PC should be appropriate across the board?
I can't imagine writing as much as I write nowadays without a computer and word processors and Emacs. But I can't work backward from there and say that means that I would have learned to write any better if everything was done on a computer.
For both AdWords and AdSense, Google seems to be saying, "All that pricing stuff is really complicated, so you just tell us your keywords and stuff, and we'll do all the math. Trust us, we're not evil."
It seems like the first move Yahoo should make is to come up with a pricing model that people can understand. Even if this isn't the best business model, if it attracts customers, Google will be forced to either disclose more of how their system works (negating any advantage their secret algorithms or data give them), or adopt a model that anybody can copy. In other words, they should be trying to get Google to disclose what it has learned during its head-start, even if they lose money doing so in the short run, because this would level the playing field.
After all, one of the things Google has demonstrated is that people prefer transparency and simplicity. This applies to webmasters and advertisers as much as it does to surfers.
The article asks readers to imagine what would happen if a woman took a two month maternity leave during which an enterprise software update happened. That would be stressful, and suddenly her skills would be obsolete.
If IT remains a field where the only relevant knowledge is what you've done in the last two months or two years, then it makes no sense for someone to spend a career on it. Kids are coming out of school (in schools around the world now) with the latest programming languages. If a short absence from IT means you are less valuable than a recent graduate, then it makes sense to leave the field after an absence. Women are more often forced by circumstances like having children to make more mid-career decisions like this than men.
In other professions, there are skills you use and tools you become proficient at over the course of many years. It seems that these either don't exist in IT, or (as I believe) they do exist, but are rarely developed or valued. If returning to IT is as difficult as starting over in a new profession, we shouldn't be surprised that people choose to do so.
IANAL...I have never heard of invention disclosure going past the end of employment. It is universal to require you to cooperate in securing patents and copyrights for things you did while you were employed, even if the filing takes place once you are no longer employed (and these don't seem to have a time limit). Some companies pay for your expenses and time and some don't, or don't in the first draft. That's reasonable--the actual inventor has to sign the patent application, and company should be able to finish the paperwork once you've left. It seems like they would have a hard time claiming they own things you invented on time they didn't pay for. I've signed a non-compete with a small company. They had two competitors that they named in the contract, they were in cities I wouldn't have moved to, anyway, and it didn't close off very many jobs in the universe of jobs. In some states, a non-compete cannot be enforced. It is probably easier to enforce a specific agreement naming particular companies than a generic agreement that says you will give up working anywhere in the industry. In some industries, a non-compete means you can't work for anybody! Practically speaking, they are not going to go through the bother of coming after you for non-work related ideas that they don't know what to do with. But in states where it is allowed, you are giving them an excuse to sue you if you go to work for a competitor, or start up something on your own. It doesn't really matter who wins or loses the suit, it'd still be unpleasant. If you really think you are going to come out with something that threatens their business, and can work on it secretly without anybody noticing, you shouldn't sign it if you're in a state where it can be enforced. If this is just a theoretical concern, it's not worth spending any more time worrying about. I wonder what else is in this agreement.
As a software engineer turned UI designer, it seems to me that when the UI gets re-done, it is either trivial (change this word, so you change a properties file), or a complete overhaul. UI layers don't get maintenance the same way other layers do. Lots of people see them, so they change dramatically when there are problems.
So I think it's best to take as much as possible out of the UI code and make it a really simple, almost disposable, client of really good APIs to the rest of the system. Simple is not necessarily elegant or clever. Simple might just be straightforward. If you have to add 100 countries to a list, it's OK to do that in 200 lines of code if those 200 lines of code are obvious in what they do.
If someone knows the GUI toolkit, it shouldn't be hard to look at a screen and match it up to the relevant code. Just because you don't know it yet and could just as easily understand something you write yourself doesn't mean you shouldn't consider that there are more people out there who know the toolkit and its tendency to cause code to be repeated. They probably look at those sequences and read them without a second thought.
Slashdot complains that tabs are redundant and have too much whitespace, even if you say they're code.
It also seems to me that if you are using Java or C#, which are commercial systems unlikely to be influenced by academic research, you are a bit behind the curve. WIMP interfaces have been around for 20 years now.
If you have research that is best shared through an SDK, then you should use the language and tools of your most likely or receptive audience, no matter how unpleasant that may be. But an SDK implies you have an audience of programmers, and not an audience of UI designers who as a rule wouldn't know what to do with an SDK in any language. If, on the other hand, you have useful tools, then any number of languages would be acceptable.
A lawyer who has worked in software before is only going to charge you a few minutes to piece together the boilerplate appropriate to your needs, and then for the time you spend discussing the agreement, so it is no more than an hour or two. Since they bill hourly and this is not a big project like litigation, even an expensive lawyer is only going to be a small percentage of the first contract's value.
I wanted a contract that was fair to both sides from the outset, because it's not my style to take a one-sided position just for the sake of looking tough. You really need a lawyer to tell you what is fair and customary in your situation. But that may not be your style at all.
Plus, lawyers are better at defending their own boilerplate than somebody else's, and know what has been tested. Your lawyer's boilerplate is better for your lawyer than my lawyer's boilerplate. (Don't you hate debugging someone else's code?) And things vary from state to state.
My standard contract was developed by a lawyer who specializes in software, who went over it with me very carefully. I know the importance of each clause. I also know that it is fair to both sides, unlike some clients' contracts I have been presented with. Sometimes, clients are just testing to see what they can get away with, since most contractors are naive about such things.
One thing I learned is that contracts drawn up by clients do not say that you must be paid before they own the intellectual property. Something this basic could be disputed if they didn't pay you in full! My standard contract says my clients must pay me in full before the IP rights transfer to them. Obviously, no PHB or lawyer can with a straight face suggest removing that clause from my contract, but many have tried presenting contracts without saying exactly when the rights transfer. This is a subtle point I would have missed had I not spent time with an attorney.
For a job seeker, making your resume one among thousands is not an effective strategy, even if it takes little effort. When I have listed my resume in databases, the only result has been calls from recruiters in India asking me if I would consider commuting from California to Delaware. Presumably, they call people at random without reading even the address.
When job listings are free, as they are on company web sites, they often do not correspond to jobs that the company is really going to fill anytime soon. This is something I evaluate. Looking at how Google, for one has had the same listings for years, it seems they are fishing for whatever might come up. This kind of thing is not allowed in newspaper ads: it used to be considered unethical to collect resumes (which may be from employees of your competition) unless you have a bona fide opening. I am also suspicious of Craigslist job ads.
More useful are very targeted job listings. For instance, BayCHI runs a job bank for user interface folks. Employers know they are reaching people who have bothered to join a professional organization, and members know the employers at least know enough about the field to know that if they just want graphic design, they'll say so. (Unfortunately, BayCHI listings are also free and some companies have listed the same openings there for years too without seeming to fill them.)
Alumni organizations might be targeted enough to attract mutually compatible jobs and applicants.
For students planning to go to 4-year schools, junior and community colleges offer what California schools call "general education" requirements: English, calculus, etc. Offering the type of CS class that a 4-year school would offer would be too specialized for them.
If your plan is to get a job right away learning skills you can pick up quickly, then that's what the CC CS classes are for. If you are looking for credits that will apply toward a bachelor's degree, they are probably in more general things like English, math, and science. In a community college, it is usually cheaper, and you get those things out of the way so you can focus on your major-related classes once you transfer.
Good luck!
As an individual act, it is foolish. Which is why I am chicken. You cannot boycott the bus system by yourself and expect change. But if enough people did it, businesses would be forced to figure out something else. You can't put a note on everybody's credit report and expect the system to run smoothly.
It seems like this could be solved with a public database of SSNs and birthdays. Once you list yourself, you can tell credit bureaus and banks that this information has been widely published, and therefore anybody who acts like it's a secret is negligent. Civil disobedience for the information age.
I am too chicken to go first, though.
I would consider it a mistake to assert that memory allocation was successful; that's the kind of thing that has to be handled by code, not an assertion. But you might assert that a pointer is non-null if you require it to be initialized.
In other words, an assertion should explain assumptions and how things work to someone reading the program. Generally, these are not dynamic conditions because those need to be handled in other ways.
The project in the article comes from the MIT Media Lab, which is good at funding and publicity but lacks the intellectual rigor of the rest of MIT.
Projects in the Program Analysis Group in the EECS Department are more along the lines of tools for people who are professional programmers: upgrade testing, invariant discovery, fault detection.
Programming languages have the advantage of precision and programmers' tools like debuggers and syntax checkers. Toy language developers overlook this big step. So how exactly do you go backward from finding a problem in the running program to the conceptual problem in your high-level thinking? Perhaps this is easy for people who are already programmers, but for the supposed audience for stuff like this, that's the most difficult thing of all.
Turning input into some arbitrary computer program isn't interesting. Helping programmers to reason about programs is. That means tools that aren't just one-way translations.
When did programming in conventional non-COBOL languages cease to be fun? In fact, I've never hear someone describe COBOL programming as fun (cf. COBOL fingers). I've even had fun using FORTRAN, as it was the only way to use a cool plotter, and, later, a parallel supercomputer.
Besides, people who try to express things precisely in English are called lawyers, and we don't want to become that, do we?
In school, you will learn about options you hadn't considered before. For example, I was a computer geek. I had no idea how my fellow freshmen knew what chemical engineering was or how a 17 year-old knows that she wants to study nuclear engineering. Sure, high schools have computers to spark interest, but not high-powered physics labs and so forth. You may want to avoid a school that makes you pick a major too soon, and approach your general freshman requirements with an open mind. Besides new academic options, you will also find out about sports and other activities you might not have considered.
That all said, I wish I had travelled during school, as an exchange student. I didn't get to live in another country until much later in life, and it has been an interesting, sometimes wonderful, sometimes frustrating experience. As a foreign student, you have much more structure and support and you're surrounded by other young people looking to make friends, and it can be no more expensive than studying at home. I thought I had to graduate from college in four years, so I didn't consider the opportunity when I had the chance.
One tradeoff is the expense of taking your time (foreign exchange credits may not all transfer) vs. graduating as soon as possible. It depends on how much debt you have to take on. If you live in a state with a good community college system, then that's a good way to save money, and with the money you save, it makes it easy to spend a semester or year abroad, even if it does push out your graduation date.
College is supposed provide a structure for figuring out the kinds of things you are trying to figure out. Since you don't seem to have a plan of your own, I think you should give it a try.
Sometimes, using the link.all: operator on AllTheWeb.com gives you more results than the link: operator at Google.
If they're trying to evoke the feeling of being dated and discredited, why not also call the company N-ron?
What makes Silicon Valley different is that it remains the only place that has a concentration of all the kinds of people needed to make a successful high-tech company, from young restless engineers to crusty old engineers to gaggles of IP lawyers and restaurants full of venture capitalists. I came to take that for granted until an overseas assignment where I learned why that matters. Software companies have really strange accounting rules, which you have to explain to accountants elsewhere. If you are the first software company your website designer has dealt with, they think 1's and 0's are an original idea! Engineers don't think much of software marketeers to begin with, but imagine what they're like if they've never worked for a software company before! It is not that it can't be done elsewhere, but it's much more difficult.
I think sending young engineers overseas or even to other parts of the U.S. has long term bad consequences for the Silicon Valley ecosystem. But 13% of the workforce is already gone.
I can relate. I have cookbooks for food that have all these recipes that are nothing but flour, butter, eggs, and sugar. Do we need all these recipes for pancakes, cupcakes, cookies, crepes, waffles, popovers, bread, quick bread, bread sticks? Won't people figure out eventually to put a little less sugar in waffles with savory ingredients?
Japanese cookbooks are even worse. Soy sauce, sake, mirin...boooooooring!
The circumstances that led to the PC revolution are long since past. When the anti-trust case against Microsoft was settled four years ago with no consequences, investors and entrepreneurs were told that there is no reason to bother to do anything Microsoft might have an interest in, because Microsoft would be free to use the Windows monopoly to crush them.
During the dot-com boom, almost all software talent went to Internet development, sucking the oxygen out of innovation meant for the PC. Bringing things on-line is important and valuable, but the 10,000th brochure website, or even the second on-line bookstore, is not innovation.
The dot-com crash in Silicon Valley has meant the loss of 400,000 jobs there and 400,000 people moving out of the valley. It's debatable how much of this is due to outsourcing, but for every job lost to some other location, that's one fewer young engineer cooking up ideas in a garage. India and China have gained, but the software industry has lost something by the scattering of young talent; the disappearance of tech veterans has long-term consequences, too.
There are still business opportunities in cleaning up security messes and customization of enterprise software products, and there always will be, but none of this really counts as innovation.
When I moved to Silicon Valley in 1995, it wasn't obvious that Microsoft was going to dominate the way it does today, or that the Internet would suck the oxygen out of other kinds of software projects for a while. The smart money and adventurous people have moved on to other things. Forever.
Also, will a human being review the label before shipment anyway? Will you get a phone number or e-mail address so you can catch mistakes that slip through? That remains the best way to make sure you get it right.
I find it extremely irritating to pick a country out of a list of all the countries in the world. Instead of a drop-down list, it would be better to let them type the country name and correct the typos and common misspellings. (When you do so, you might want to give the user another chance to check for other problems.) Are your customers really equally likely to be in any of the world's countries?
Finally, the USPS didn't like the format of many of the addresses in my Palm Pilot when I tried out Endicia a few months ago. I am actually pretty careful about these things, and have done bulk mail encoding before. But the post office wants addresses to look as ugly and institutional as possible. So if you used the USPS's pretty extensive checks, you would be irritating your customers who like to get their mail addressed to "One Broadway" instead of 1 BROADWAY ST or "451 Second St., Apartment #31" instead of 451 2ND ST UNIT 31. I would rather address mail to my customers using the way they want to see their addresses, not how the post office computers say they should look.
My boss at the time was the director of business development, a smart guy who could handle Excel macros and that kind of thing. He was good because he understood things from the lowest levels to the highest, and, thanks to the class, was the only executive in the company outside of R&D who actually knew what had to be typed to get an application to work.
While some posters seem to think it's dangerous to let business students experience success at programming, I think your students will have a better sense of accomplishment making limited changes to existing programs and scripts. Seeing things in context will give them a better sense of scale than the tiny demo-level things they could write themselves from scratch.
One warning, and something that has affected how I write code since then: every inconsistency in capitalization, indentation, variable and function naming, file locations, etc. will confuse somebody sooner or later. I started with programs from a variety of sources and had to clean them all up after a few runs of the course because students have a hard time knowing what's important and what can be ignored. (Besides C, we had a language for specifying what words could be recognized, and so even the experienced programmers had some new syntax to deal with.)
So it's even worse than the 20 years it took for computers to be productive in the office. Not nearly enough R&D has gone into addressing the problem technology is supposed to solve, which is getting kids to learn academic subjects. There is no reason to think that a PC evolved to help already educated adult office workers is appropriate for students learning math in the first place.
Sure, I learned typing in high school, and there's nothing wrong with learning computer basics while computers remain so difficult to figure out. But that doesn't count as an academic subject any more than driver's ed.
Graphing calculators, on the other hand, have evolved with the input of math teachers and have been geared to the math curriculum, and designed with students in mind from the start. Just as graphing calculators would be sort of out of place in an English class, why do we think a PC should be appropriate across the board?
I can't imagine writing as much as I write nowadays without a computer and word processors and Emacs. But I can't work backward from there and say that means that I would have learned to write any better if everything was done on a computer.
It seems like the first move Yahoo should make is to come up with a pricing model that people can understand. Even if this isn't the best business model, if it attracts customers, Google will be forced to either disclose more of how their system works (negating any advantage their secret algorithms or data give them), or adopt a model that anybody can copy. In other words, they should be trying to get Google to disclose what it has learned during its head-start, even if they lose money doing so in the short run, because this would level the playing field.
After all, one of the things Google has demonstrated is that people prefer transparency and simplicity. This applies to webmasters and advertisers as much as it does to surfers.
If IT remains a field where the only relevant knowledge is what you've done in the last two months or two years, then it makes no sense for someone to spend a career on it. Kids are coming out of school (in schools around the world now) with the latest programming languages. If a short absence from IT means you are less valuable than a recent graduate, then it makes sense to leave the field after an absence. Women are more often forced by circumstances like having children to make more mid-career decisions like this than men.
In other professions, there are skills you use and tools you become proficient at over the course of many years. It seems that these either don't exist in IT, or (as I believe) they do exist, but are rarely developed or valued. If returning to IT is as difficult as starting over in a new profession, we shouldn't be surprised that people choose to do so.