I wish I had mod points. The original article made no sense to me at all. The one you link implies that the reason for sabotaging the auction was to establish that this part of the spectrum was "worthless". Then go back to the government and offer to manage this "worthless asset" in order to create some value. Of course rental fees would be applied. That way they are basically given that spectrum for free. If it's true, I hope someone is smart enough to shut the door *very* hard on their fingers...
Japan does not have the highest suicide rate in the world. It doesn't even come close. According to this study, in 1999 the suicide rate was 50.6 per 100,000 people. This compares to 21.7 for the US and 15.1 in the UK. So it seems very high. However, compared to Austria (37.1), Beglium (40.1), Finland (45.5), etc it's not exactly running away wild. Countries with internal political strife have considerably higher levels (nearing 100 for some countries). So it's bad, but not ridiculously bad.
Now, let's take some other things into consideration. This data was taken in 1999 - 1 year after the collapse of several Japanese banks and the end of the "Job for life" policy in Japan. Yes, before 1998, nobody ever got laid off. Ever. In the history of the country. So in 1998 and 1999, people were getting laid off frequently. Hence suicide rates climbed dramatically.
Second you have to consider the culture. Unlike the US and the UK, suicide is *accepted* in Japanese society. Just the other day the father of one of my colleagues killed himself. His wife had died earlier and he just couldn't cope with looking after himself. Japanese men, in general, are totally dependent upon their wives. Many of them die by their own hand right after their wives die. This is sad, but normal here. In fact, I heard about my colleague's father at the morning staff meeting. No social stigma to the event at all.
So no matter what, suicide rates are going to be higher here than in the US or the UK. It's just seen as reasonable here that if you don't want to live, you don't have to (and personally I have a hard time coming up with a good argument against that).
Now to tackle the other things you have said. Life in Japan is *not* hard. It is *not* strict. It is *not* sad. This has got to be one of the happiest places I've ever lived in my life (and I've lived int the US, Canada and the UK). Yes, people work hard. The saying here is that "Otoko wa shigoto", or "Man is work". But they *like* to work. I do too. Hell, most of the people here on/. don't have 9-5 jobs. They care about their work life and believe in what they are doing. In fact, they often find it strange that western people don't like their job. I'm not saying that all people in Japan like their job. But my experience is that their devotion to it leads to a higher level of enjoyment than what I've seen in other places I've worked.
Also, Japanese life is *full* of play. Seriously, every single weekend there's a festival of something or other near by. And people grab their families and have a blast. In fact one of the most interesting things I found about living in Japan is that people take their children *everywhere*. And Japanese children by and large *extremely* happy. Again the culture is just different. School can be tough. But it doesn't have to be. You choose to work as hard as you want. You get rewarded for your efforts. Japanese schools are agressively streamed. So the functions of the schools (especially high school) is different depending on the composition of the students.
For instance, in the high school where I work, the level is fairly low (bottom 20% in the prefecture I think). So the focus in school is on how to make a positive contribution to society. Seriously. Some of the kids take their tests and whatever seriously, but most don't. You *can* get to University from here, but only about 25% do. The rest will become fishermen, policemen, firemen, housewives/husbands, shop keepers, etc. These students are taught that their role is valuable. That they can make Japan better simply by making someone's day a little nicer.
Japan is far from unhappy. I don't agree with everything that happens here. But I have to vehomently disagree with
As someone who has *been* the employer who went to various schools, I have to disagree with you. Big companies go to virtually every school. Small companies go to the schools in their area. I've worked for both and I've travelled to many, many, many schools.
Coop is popular. Every school hires out all their students. It is very rare in the extreme that people go without jobs (I'm talking comp sci here, IT degrees are a different story I think). Again, I never hired any engineering students, so I don't know about that.
Honestly, the quality of the students vary dramatically with *every* school. I've had more than a handful of students from UW who could not code their way out of a paper bag, even if you took the bag away. We're talking less than 100 lines of *new* code in a whole term! But this is par for the course with every University (if you're wondering why I hired them, I didn't. Usually where I worked hiring coops was done on a rotating basis and I often got saddled with extremely poor selections made by other people. I like to think that my choices were good, but I have to admit that I've made my share of mistakes too;-) ).
It is true that Microsoft *only* went to UW for coops for a long time. I don't know the reason for that. Many people say it was due to the quality of students, but my experience is different.
In terms of support from the employers end, I've had good coop coordinators from UW and I've had bad ones. Just like every other school.
I have to say that you've bought into the hype for UW's program. There's nothing wrong with the program, so don't worry. But it's not the be all and end all. Coop itself is not the be all and end all. The two good programmers I mentioned before weren't even *in* coop.
And for what it's worth, I *hate* the coop format from UW. Term 0 (or whatever they are called) coops are usually useless. I mean people who have never written code in their life. They end up do stupid joe jobs for small minded people who like power trips. I once saw a coop re-enter all the data from a database into a new schema. The reason? Didn't know how to write the code to do it and his supervisor didn't want to show him.... Great...
I'm going to have to agree. Waterloo isn't a bad school for engineering and comp sci. But it's not significantly better than any of the other accredited schools. As someone who has hired a lot of people in my career, I wouldn't even put Waterloo in the top 5 of the schools I aimed for. Mostly that's because the less well known schools have a lot of good people, but they are in less demand and thereby easier to hire. In fact the two best Canadian programmers (in terms of pure talent) I've met came from Calgary and Carleton.
In Canada, my opinion is that there isn't a good undergrad program for comp sci at all (I'm willing to be convinced, though). But all of the accredited schools are adequate. I'm not qualified to comment on engineering. However, my understanding is that Waterloo primarily achieved it's engineering reputation by being one of the first (if not the first) Canadian engineering department to really embrace a coop program. Now almost every school has one.
Damn! Giving up my mod points. I was soo going to avoid talking about this. But old habits die hard...
Actually, you ask a really important question. How exactly is free software better (or at least not worse) than proprietary?
Probably you are a programmer, so I'll ask you this question. How much do you receive in royalties for the copyrighted work you produce? You are an author. You own the copyright to your work. The "IP" for that software you write belongs to you. Doesn't it?
Well, unless you are in business for yourself, the truth is that you don't receive *any* royalty. You don't own the "IP" for the software you wrote. You assigned the copyright over to another entity. Since they own the copyright (and patents, etc) they can easily put any license they want on the software. Could be Microsoft's normal license or it could be GPL. What difference does it make to you, as a programmer? You got paid. You wrote the software. You gave up *all* your control.
If a company can make more money from using a free license instead of a proprietary one, it's certainly a better way to go. It means that you will continue to get paid to write software. But from your perspective, it really doesn't matter whether it's a free license or not. You don't own it.
Perhaps you don't understand how a company can make more money from free software than from proprietary. How much money does Mozilla make from Firefox? Last I heard it was over $100,000,000 annually. How much overhead do they require? Marketing? Sales? Retail Channel? How much did Cygnus make from GCC et al? Before they were acquired by Red Hat for $600 million, they were pulling in about $30 million a quarter AFAICT. All from development contracts.
There is *money* in free software. Bags and bags and bags of it. Some of that money is in reduced costs for the organizations producing (and using) it. There is also a lot of untapped potential in development/support contracts (think IBM/Rational) as well.
But in the end, why does a developer care? Ever had the experience where you implemented some functionality and discovered that it did more that the customer was asking for? Ever found management asking you to spend the next 2 weeks ripping it out because "We can charge for that"? Never happens in free software development. Extra functionality for the user means more money for the company in the long run.
Ever got a bug report from a user that his data was corrupted due to a bug, but you weren't allowed to fix it because "not enough customers are affected"? In free software you just ask your buddy to fix it for the user. Extra functionality for the user means more money for the company in the long run.
And why, exactly, do I have to give up the copyright to my code again? Shit, you can do whatever the hell you want with it. Let me take the useful bits and reuse them in my home projects. Chances are if I'm scratching my itch, somebody else also has that itch too. Extra functionality for the user means more money for the company in the long run.
As a programmer, I want to program. I'm not a slave to the company. I'd like my own interests to coincide with the company's. Sure I like getting paid. I like making a living. I like money. But I also like not having to make stupid compromises just because some dickhead thinks he can make more money by screwing over the user. Or having to make stupid compromises because some dickhead thinks he can make more money by screwing over *me*! In the end, if the company can make money writing free software (and I purport that they can), it's only a win for the developer. There's no downside.
I've worked on some of these file formats quite a bit (I was the text conversion guy when WP went to Corel -- don't blame me, it was legacy code!;-) ) Anyway, while the formats are quite strange in places, they aren't really that difficult to parse. I would be willing to speculate that this was never really much of a problem in writing filters for apps (or at least shouldn't have been).
No, the difficulty with writing a filter for these file formats is that you have no freaking clue what the *formatter* does with the data once it gets it. I'm pretty sure even Microsoft doesn't have an exact picture of that. Hell, I barely ever understood what the WP formatter was doing half the time (and I had source code). File formats are only a small part of the battle. You have all this text that's tagged up, but no idea what the application is *actually* doing with it. There are so many caveats and strange conditions that you just can't possibly write something to read the file and get it right every time.
In all honesty I have at least a little bit of sympathy for MS WRT OOXML. Their formatter (well, every formatter for every word processor I've ever seen) is so weird and flakey that they probably *can't* simply convert over to ODF and have the files work in a backwards compatible way. And lets face it, they've done the non-compatible thing before and they got flamed to hell for it. I honestly believe that (at some point) OOXML was intended to be an honest accounting of what they wanted to have happen when you read in the file. That's why it's so crazy. You'd have to basically rewrite the Word formatter to read the file in properly. If I had to guess, I'd say that snowballs in hell have a better chance...
I *never* had specs for the word file format (actually, I did, but I didn't look at them because they contained a clause saying that if I looked at them I had to agree not to write a file conversion tool). I had some notes that my predecessor wrote down and a bit of a guided tour of how it worked overall. The rest was just trial and error. Believe it or not, occasionally MS would send up bug reports if we broke our export filter (it was important to them for WP to export word because most of the legal world uses WP). But it really wasn't difficult to figure out the format. Trying to understand how to get the WP formatter (also flakey and weird) to do the same things that the Word formatter was doing.... Mostly impossible.
And that's the thing. You really need a language that describes how to take semantic tags and translate them to visual representation. And you need to be able to interact with that visual representation and refer it back to the semantic tags. A file format isn't enough. I need the glue in between -- and in most (all?) word processors that's the formatter. And formatters are generally written in a completely adhoc way. Write a standard for the *formatter* (or better yet a formatting language) and I can translate your document for you.
The trick is to do it in both directions too. Things like Postscript and PDF are great. They are *easy* to write formatters for. But it's impossible (in the general case) to take the document and put it back into the word processor (i.e. the semantic tags that generated the page layout need to be preserved in the layout description). That also has to be described.
Ah... I'm rambling. But maybe someone will see this and finally write something that will work properly. At Corel, my friend was put on the project to do just that 5 times... got cancelled each time;-) But that was a long time ago...
It's $15K gross. Actually, I'm actually making twice that, but I'm giving half of it away.
Of course I live in the inaka:-) I really prefer to live in a small town (especially here in Japan). It's quiet and beautiful. And as you pointed out, there are few places in Japan where you need a car. The climate where I am is warm enough that I can bike all year round (although I'm a bit reluctant just at the moment -- brrr).
However, I lived in Ottawa, Canada for 12 years prior to this so I understand what you are saying about North America. I ran a car for a good 15 years (a big part of the reason I can cut costs is giving up that damn thing). It is hard, but not impossible to live in North America without a car. But you have to move to a place where there is good transit.
Since this thread is basically over (and you seem interested) I'll just type in a few things I've discovered about living on the cheap (even in Canada). The first is to live near work. Ideally walking distance. This really saves you a bunch of time. If you can't do that, then start at work and find a bus route that is reasonably good, but not too busy. Then follow the map back and look for places to live.
Look for *small* places that are in reasonably good repair. Do some learning about construction and learn to recognize the difference between cosmetic and serious damage. Often a place that looks bad can be spruced up cheaply (and entertainingly) with some elbow grease. Make sure the place is walking distance to the supermarket. Those are the 2 places you will be going to *very* frequently -- work and supermarket. If you have kids you need to worry about safety, schools, etc. But if you don't (my case) then things are a lot easier.
When decorating, less is more. Buy extremely high quality in extremely low volume. Furniture only makes your room smaller. The less you have the better off you are. But if what you have is of extremely high quality then the place will look and feel fantastic. Probably you will have to spend a lot of time buying furniture (years) since you don't want to spend too much money. Use the time to really research what you are getting and why you need it. XP rules are good here -- simplest thing that could possibly work and then refactor.
What will happen is that you will buy a few really nice things. They may not be exactly right. That's OK, you can replace them (even though they are expensive). Spend the time to really understand what you need, while at the same time using what you've got. Then replace them when you can. Often you will find (if you are like me) that what you really needed was nothing (I actually don't have chairs anymore... or a bed... or a kitchen table... you get the picture -- of course Japanese lifestyle helps in this regard).
Having a balcony or patio with a southern exposure is really helpful because it means that you can grow food. I've been amazed at how much food I can grow in containers in a really small area. It cuts the food budget a lot, is pretty to look at and is a nice hobby. Also the food is waaaaaay better than what you can buy at the super market.
My one last tip is to cook. I learned to cook by watching TV shows (believe it or not). I just taped all of shows for a few years and watched them in my spare time. After a while I figured out which of the shows were crap, which saved me a lot of time:-). Also, Mastering the Art of French Cooking is a brilliant book that shows all the basic cooking techniques you're likely to need. Cooking saves ridiculous amounts of money. Having people over for dinner is also incredibly fun. If you cook *everything* from scratch (no convenience foods) you can save money like you wouldn't believe as well as have a much better lifestyle (the food is awesome!). I also usually cook vegan (although I'm not really vegetarian). Even if I'm being extravagant my entire food budget is less than $1500 a year, which is only 10% of my income.
There was a quote from the old Kung Fu show with David Carradine. I wish I could remember it (and a quick google isn't giving me any good hits). But basically it goes something like: the only thing a man needs is food, shelter, work and love. That show had a lot of good quotes, but this is my favorite.
I don't really see my horizon being limited. If I have happiness, health, mental stimulation and can spend time with those that I love, I'm not sure what else I should want. I love to program my computer. I'm not really all that good, but it's something that I do every chance I get. And it's pretty lucky that doing this is quite inexpensive. I actually quit my job as a programmer because I could never have the freedom that I have now. I guess you'd call me retired (even though I still have a "day job" -- outside of the computer industry). But I learn more of programming in the 4 hours a day I have on my own than I did in a week in the industry.
The possibilities for me are endless as far as I can tell. It's a very interesting road, but surely it's not for everyone. Even still, it was a surprise to me how its working out, so I reckon that others can get some benefit as well. As long as each person does so within their own path, I'm certain that it will be at least interesting.
I know you're joking, but in all honesty I've tried being rich and I've tried being poor. Poor is actually better IMHO. Well, I lie. Because "poor" in the Western view isn't really all that poor. Right now I'm living on about $1250 a month US, which is $15000 a year. That's probably near the poverty line around here (Japan). But I've got a place to live, food to eat, clothes to wear. I've got a laptop computer and an internet connection (luxury!). So, it's hardly what real poor people would call "poor" -- I'm not starving or freezing or whatever.
And if I compare my life at $15000 a year to my life at $100000+ a year, I'll take less any day. As long as you aren't in debt, or hungry, or freezing to death, having not very much money is totally fine. And it forces you to try things that you might not otherwise try. Sure, you *could* do it with extra money, but the fact that you can pay someone else to cook your food or clean your house or whatever means that you probably will. And I've found that life is infinitely more interesting if you live it rather than pay someone else to live it.
I'm not explaining this very well. But it was quite a surprise to me to learn that I was happier with less. Now I'm trying to reduce even more. $15K per year still seems pretty fat to me. What else can I learn by cutting back more?
I have to agree with you about overconsumption. However, I have learned that the word overconsumption is not well received by a large number of people (see one of your replies). It has the implication that people are doing something morally wrong. It's possible that you meant this, but reading your post, I doubt it.
Instead of talking about how we over consume, I try to explain that life can be as good (or even better) if we use less. There's a sweet spot somewhere on the consumption curve where our life enjoyment is maximized. This is kind of a strange concept for a lot of people. If some is good, more is obviously better. But it's like eating candy. Eating a little bit of candy can really improve your day. Eating a lot of candy just makes you feel sick.
I have made a lot of changes to my life that were a win-win situation. I started taking the bus instead of driving. Now instead of madly trying to rush around and get a million things done (stressing me out), I read a book. I intentionally say to myself, "I'm going to relax today. I'm not going to go shopping on the way home to pick up that one last thing. I'm not going to pick up the dry cleaning. Because I can't. I'm taking the bus today and reading my book." It turned out that virtually all of the things I did with the car were unimportant to me. In the very rare case where I absolutely need a car, I get a taxi. Doing this has improved my life, improved my finances and improved the environment (or at least not degraded it as much).
Not every change is good for every person (some people really can't deal with mass transit for instance). But I think it's good to encourage people to find areas in their life where less is more. As more and more people do this, our society will change. It will become easier and easier to reduce and win. For instance, in many cities bicycle paths are becoming a useful part of the infrastructure. In the town I'm living in now I can do all my shopping on my bike, without having to compete with cars. And on a nice day one of my most hated jobs (shopping) has become an extremely pleasant activity. 20 years ago, this town had *no* bicycle paths and it would be extremely difficult/dangerous to go shopping on your bike.
I think the very best thing to do to get people thinking is simply to try stuff yourself. Experiment. Have fun. Find out what you *really* need and what you don't (TV is always a good option to do without;-) ). When you find something that makes your life better, invite your family and friends to try it with you (go shopping together by bike, go to a movie together on the bus, invite people over to your cold house with a cosy fire in the wood stove drinking hot chocolate, etc, etc.)
Ya, the first time I used Japanese predictive text entry I was amazed. My Japanese is pretty bad, but I actually find it *much* easier to write text messages in Japanese than English. Now, I only text to my Japanese reading friends and directly phone English speaking ones. I hate English texting.
To give you an idea of what it's like to text in Japanese using predictive text entry, here's a kind of walk through the process.
First you type a character. Each character in Japanese is a phoneme/syllable (called a mora). The phone gives you a list of about 15 words that might fit. It's really amazing how often those fifteen words are right. Even if they aren't, by the next character, you almost always have the word.
Then the phone gives you a list of particles/sentence fragments. Almost every word in Japanese is followed by a particle - a single character word that indicates the grammatical function of the previous word. But since there aren't that many particles. they usually have room to give you a couple of common sentence fragments that could also fit in that context where you were typing; usually common grammatical constructions. You choose the one you want.
Then you type a character for a word again. You keep doing this until you get to a verb (usually at the end). At that point the software give you a choice of "okurigana" which will allow you to choose the inflection (sort of like a conjugation) and politeness level of the verb/sentence. And you are done.
You can type whole sentences in only a few keystrokes. In fact, I wouldn't be surprised if people can type faster on their cellphone than they can on their computer. It really is that easy and convenient.
Unfortunately, money in the real world doesn't work exactly the way you are indicating.
For instance, I may have a £10 note. But what *exactly* is £10 worth of goods? Well, in our economy it's mostly determined by a "free market". There are production costs and there is value decided by scarcity. When you buy something, you are paying the production cost, the scarcity value and some profit (which can be thought of as production cost of the middle man). Let's ignore scarcity value for now and assume that our £10 worth of goods is defined almost entirely by production costs. This is pretty much true today since even very scarce things (i.e., scarce in terms of demand) have a "value" defined by the amount of money it took to find and process it. We don't do things like limit how much of a scarce resource can be used at any one time.
So, for the vast amount of things, the "value" is determined by the production cost. As a society we work and create production. Then we apportion that production amongst the population in terms of money. How "real" is that money? Well, it's worth a certain amount of production. So in some senses it's real. It's a bargain to give you new production in exchange for the production your already did.
But, the actual "value" of that money is not fixed. It is determined *only* by the production that the current system is able to generate. So if people do something silly like save half their money every year -- there won't be enough production to cover the money in the system. The economy collapses and the currency is almost worthless. Of course, in our consumer society we don't really have to worry about people saving money. But we *do* have to worry about things like production suffering due to infrastructure collapse.
Just like we've seen currency literally become worthless when a country loses a war, or when there is a huge epidemic and no one can work, or when the socio-political structure collapses. In fact, we have a very real problem looming soon. In most parts of the "1st world", the population is aging. These people have actually saved for their retirement. Not only that, but the birthrate is decreasing (mostly due to the fact that wealthy people have less children). And finally, in the current political situation, immigration is being blocked.
This is a recipe for an economic collapse. I'm living in Japan right now (whose population is actually decreasing and aging at an alarming rate). I expect to see it here first. But the US (especially with it's attitude towards debt) will soon follow. We're in for some "interesting" times. Especially when you consider that banks are allowed to lend 10x more money than they actually have. This will only accelerate any potential collapse (i.e., when bad things happen, people tend to try to get their money out of banks -- and since the bank doesn't have anywhere near enough money to cover this, it makes things much worse).
Just be sure to realize that the money that appears to have "value" right now, may very suddenly not be worth as much as you thought. These things are not theoretical. They have happened time and time again. Sure, the system will reset and the illusion will be returned. But the vast majority of the people get completely wiped out in the process (and a few people get really, really rich).
I once spent 6 months refactoring code at a large telecommunications company.
The problem that was presented to me was this: They wanted to add more functionality to the code. But alas, the *functions* had exceeded the max file size for the compiler (32K lines). All they wanted me to do was break apart the functions and put them in different files so that they could jam more functionality in them...
Many, many years ago Michael Tiemann wrote a brilliant article on this very topic. He and a couple of friends started Cygnus software, investing $6,000 to get started. They added features (well, in the end pretty much built) the GNU development tool chain. Their customers were embedded developers.
I'm really sad to have come in late on this discussion because this article is a must read for anyone wanting to make money writing free software. Tiemann, et all became very rich doing it this way (Cygnus was sold to RedHat for $600 million -- although a venture capital company walked away with some of that money).
My quick take on it: Get money up front. Get paid for development, not software. Realize that marketing is probably at least as important was programming.
I really believe there is still a huge niche for custom software development built on free software. Over 90% of software development is in house development (OK, it's a number I pulled out of my ass, but I think it's accurate). Your job as a free software developer that wants to get paid is to convince companies that you can deliver software to them cheaper than their in house teams.
So what you need to do is to get a track record in the niche that you want to work in. Then you need to hit the streets and knock on doors. If you build it, they may or may not come. You need to market your work. You need to show these companies the potential for using your services rather than building it themselves, or buying it off the shelf.
As Tiemann showed, if you do it right you will have more than enough work to keep you fed.
Wow there are a lot of responses here. I wonder if anyone will read this...
But I'll type anyway. Although I agreed with the article saying that CS programs should teach more than Java, if you want to be a programmer, I don't think you need to worry so much about that.
Remember that first and foremost a programmer is a writer. You spend endless hours at your desk writing. And no matter where you end up, you will likely be buried in a pile of crappy code. So you need to know how to read and write code. And just like any writer the best way to learn is to read and write.
Spend every second you can reading other people's code and modifying it. Write your own code. Think to yourself, "Is this good code or bad code". Ask yourself "Why". Try to improve bad code. Try to write code from scratch. Try to emulate good code.
When you get into the working world, you will be horribly constrained by both deadlines and the sheer weight of the code you are in. Learn how to move on your own. All to often I see people writing the same bad code over and over again. They are just overwhelmed by where they are. They have difficulty improving their writing because they have never taken the time to read and write just for themselves. So if you have the time now, please spend it reading and writing,
One other thing. One of the best ways to improve is simply to refactor code. Pick some project at random. Find some bad code. Build a test harness around it. Rewrite it so it isn't so bad, but does the same thing it did before. This will lead to significant insights.
I think you're missing my point. If you want to learn theoretical computer science, where would *you* go to learn it? Because they don't teach it at universities in general (with some notable exceptions). They churn out professional programmers, who would actually be *much* better off (in terms of being good programmers) to just spend those 4 years writing code.
The comment about my degree was flippant, I admit. And it's been 25 years since I took that degree. So it's only in retrospect that I realize it's worth (or lack thereof). It got me a job. Without that piece of paper, it would have been difficult for me to break into the field. But it did *not* teach me anything about CS. Nor did it get me to a point where I could realistically do meaningful graduate work in the way, say, a physics graduate would have. But I had lots of trivial information about systems that were in use at the time (if you know what IEFBR14 does, then you understand what kind of systems those were. If you don't, be *very* thankful!)
I take your point about researching the degree, and if I had known what I know now, then I would have known to go to those few schools that actually teach CS. But here's the thing: when you don't know something, you don't know what you don't know. Now that I've spent the last 2 and a half decades writing and reading, I'm beginning to understand what you need to know in theoretical CS. I at least have an idea of what I don't know. It is not reasonable to expect someone who has not done that work to know what is out there. But most professors who do research in CS know this. So I don't excuse them.
And the point of my rant remains. The purpose of the university is basic research. Most universities are not training graduates (even grad students) to a level where they can do basic research in computer science. They may very well be providing a function for industry by churning out people by the tens of thousands with an introduction into the hot programming languages of the day. But that's the function of a technical college.
What we risk by not investing in basic research is a stagnation in computer theory. Marvin Minsky proved that perceptrons can't compute everything. Then in a off hand comment said that he didn't know if multi-level neural nets had the same problem. It took something like 10 years before anyone even checked. In other areas, programs are getting more and more complex all the time. If we can't find ways of representing that knowledge in more expressive forms, then we will just hit a glass ceiling. By choosing to train programmers and neglect theorists, our whole profession loses. *That's* what I'm complaining about.
OK, this hit one of my hot buttons. Before I continue, though, let me preface my statement by saying that I don't disagree with the article (which is right on the button). But I disagree with the way the summary characterizes the situation.
I totally agree that universities shouldn't be teaching Java exclusively. They need to teach the basics of modular, functional, declarative and oo languages. Why? Certainly *not* to fill "software engineering" positions!!! A university's role is to do research, not to act as some technical college. OK, I can see having a programming course aimed at creating programmers for industry if it's going to pay the bills at the uni. But *don't* make that your "Computer Science" course!!
Computer Science should be science (well, math anyway). Universities should be getting the 5 or 10 graduates they need that will move on to academia (or industry research) later in their careers. Because right now, *nobody* is getting taught Computer Science! Lately I've been reading papers posted on http://lambda-the-ultimate.org/ Regularly I have to go back to the basics and learn extremely fundamental theory because nobody *ever* taught them to me in the first place. Half the time I think, "OMG, I never even knew this existed -- and it was done in 1969!!????"
More and more lately, I've been wanting to phone my University up and ask for my tuition back.
If you want to learn how to program in a professional setting, there's nothing better to do than just start writing code. Get your chops up. Then find some big free software projects and start fixing bugs. Learn how to use the tools (configuration management, etc). Learn how to interact with the other programmers. That's all you really need (well, that and a quick automata and grammar course so that I don't have to look at yet another context free grammar being "parsed" by regular expressions).
But right now, where do you go if you want to actually learn theory? I guess the library... And getting back to the point, this is essentially what the paper is suggesting. Students need to learn all these things because they are relevant to the field. A university supports industry by doing basic research. If you don't understand the concepts that they point out, you just can't do that. Paraphrasing from the article, having a university course that's meant to pad out a student's resume is shoddy indeed.
Like every good/.er I didn't RTFA. But this reminds me of something that happened to me recently.
I was walking down the street late at night with a friend of mine. All of a sudden he yells out, "Crap!" and starts getting all agitated.
"What are you doing", I asked.
"Don't look! It's the police", he replied. "I always have trouble with them. Every time I see them they follow me and then I end up getting into a hassle."
I looked at him. Then I looked at the police. Then I waved at the police and they drove off.
"How did you do that??", he asked incredulously.
It never occurred to him that his nervousness was the only thing that way attracting the police's attention. For some reason he thought they had it in for him or something.
I suspect that there will be a lot more people being detained if nervousness is a reason to detain someone. There are just people who are nervous around authority figures. And since that nervousness usually gets them into trouble, they become even more nervous. Welcome to longer lineups at the airport...
As near as I can figure out, this is the thinking that the average business guy has:
Making money is less about creating a good product and building good customer relationships. It's about good timing. Have the right product at the right time and at the right price point and you strike it rich. If your timing is wrong, no amount of good product or service will save you.
But timing is ridiculously hard to predict. So instead of concentrating of creating a good product that customers want, and supporting it so that the customers are happy, put the least amount of effort into developing it as possible. Get it out the door fast, fast, fast.
Likely you will fail, but it doesn't matter because you were fast, so you can try again right away. And if you did it right, you didn't use your own money. So, keep trying until you strike paydirt.
But, like I said, timing is difficult. So once you get a success, you must hang onto it with a death grip. Don't let anyone else compete in your market space. This also means don't allow a user to modify it to do something else. Because if they start improving the product, you might find yourself redundant (especially since you didn't really invest in development and may not have the capability to compete).
So it doesn't matter whether an outside community saved their asses in the past. They only see that as part of step one (small upfront development cost). If there is success, don't share it.
I personally don't agree with this approach. But I have had enough conversations with the "business" side of high tech companies to at least partially understand it. However, it's one of the big reasons I'm no longer in that industry.
Actually, the take, take, take, gimme, gimme, gimme users provide invaluable benefit to Free software producers. But to understand this, you must understand the economics of Free software development (I will assert that most people, even Free software producers have a difficult time understanding this). With Free software, you *can* make money off of distribution, but really it won't last for long. Eventually, since the cost of distribution is nearly free, someone will undercut you. Instead, you must make money (or better stated, value) out of the software itself.
This can be done in a few ways. First, you can get value from using the software you wrote. Often the value you receive more than offsets the cost of development. If the software is popular and useful, then you can also benefit from forming a consortium with other parties to do development. You each share the costs and share the benefits. People who fund development get a greater say in what gets written (i.e., they write it;-) ). Examples of this are the Apache software and the Linux kernel.
Second, you can get value from future work on the software. If it is a popular, useful work, then often someone else will be able to receive value from funding you to do some new development. Probably the best example of this is the GCC tool set as it was developed by Cygnus software (google around for Michael Tiemann's description of how to make this work -- it's brilliant.)
Finally, you can gain value (either directly or indirectly) through advertising. Usually (as is the case with this software), the software allows you to connect with a service that gains value from advertising. The best example of this is Mozilla who make nearly $100 million a year from the google search bar in Firefox.
Now, I hope you'll excuse my tangent, I'm finally coming to the point. What all these methods of creating value have in common is that they work best (return the most value) when the software is *popular* and *useful*. Take, take, take, gimme, gimme, gimme people are essential to creating popular and useful software. First, they are often the absolute best sources for ideas. They are so internally focussed (i.e., selfish) that they have a really highly developed sense of what they want. Yes, they are annoying, but if you cut through the annoyance, you find gold. Second, these people are like rats. When one finds a good source of food *all their buddies join in*. This is indispensable for a Free software project.
Now, what I read from the posts above is that these selfish users are not happy with direct advertising on the associated service. This is incredibly useful feedback! It means that there is significant risk involved in the venture. People are not against advertising per se. Take the google search bar in Firefox. I've never heard anyone complain about it. The connection between the google advertising and the search bar is removed enough to appease the user. But I would worry, in this case, that users will not accept the advertising on the associated service.
In the end, cherish your selfish users. They are a PITA, but they are honest and they will spare no expense to tell you what they think. For software projects that don't have budgets for things like user studies, these people will pave the road to success.
Yeah, this is really "Duh". I've always been surprised at the complete lack of thought given to security in SIP devices and protocols.
Here's a good example. Most of the SIP hardphones on the market right now have a feature that allows them to be answered automatically when phoned. You just pass a non-standard header in the Invite message telling the other end to auto-answer. This feature is useful for manufacturers that want to sell "consoles" which allow an operator to control all the phones or do things like paging.
But think about this... Just by sending an Invite with an auto-answer header I can get many phones to pick up *without ringing*. Since almost all of these phones work as speaker phones I can listen in to any conversations I want to anywhere on the internet.
Granted you usually have to specifically enable this feature on the phones. But this is usually done by system integrators without the knowledge of the person buying the phone. If you are that system integrator and know which phones have the option turned on, you can listen in to what's going on in the area. Great for keeping tabs on your boss too...
The combination of SIP and RTP is a completely moronic set of protocols for real life telecommunication. Then you toss in a bunch of completely moronic devices that can alter SIP (since it's extensible) and you just have a world of trouble. The thing is, it's not exactly rocket science to design a secure, encrypted voice protocol that can pass through NAT easily. Why did we choose SIP again???
Lots of comments already, but heres my take. Regardless of how long it takes *other* people to do it, it will take you about this long:
- The amount of time to understand what the problem is plus - The amount of time to identify who can fix the problem plus - The amount of time to communicate the problem to the people who can fix it plus - The amount of time to find a load of the customer's software and equivalent hardware plus - The amount of time to verify the problem with the build plus - The amount of time to find the correct version of the software for the build plus - The amount of time to fix the bug in that version of the software plus - The amount of time to verify that the bug is actually fixed plus - The amount of time to build a full production build of the fixed load plus - The amount of time to run regression on the fixed load plus - The amount of time to fix problems discovered in regression plus - The amount of time to document any user visible changes plus - The amount of time to package the load for the customer plus - The amount of time to get the new load to the customer
While there is a lot here (hope I didn't forget anything), almost everything is under your control. Estimating each of the steps for a typical problem will tell you how long *you* can currently take. If you want to shorten the time, you probably can. But it will cost time and money (of up front work before a problem is discovered) to get the time down.
As you will probably find, even if you fix the bug in 0 time, there probably is a lot of time being taken up by other steps. So the question of "How can we reduce this number" should not be taken as a question of your programming competency. Instead it is an opportunity to clean up other areas. For instance:
- Reduce code ownership so as to allow more people to handle problems in various areas. This will reduce the amount of time it takes to route the problem to the programmer. - Keep each programming task in normal development down to only a few hours (1 or 2 days max). This will increase the availability of development staff. - Engage in training for first line support to streamline the process of taking technical details. - Engage in good configuration management practices and maintain builds of every active load in the field - Maintain a lab containing all the equipment usually used in the field - Train programmers and testing personnel how to set up all the equipment quickly - Maintain high availability of testing personnel for verification of field issues - Keep a log of all the software (with versions) run by all important customers - Maintain low complexity software (i.e., value low complexity in the code over other factors). Refactor complex code. - Invest in a build system that can easily and quickly build a load on demand - Ideally have the build system runnable on every developer's machine so that they are testing with real builds - Maintain a full automated regression test system - Maintain a continuous build system with automated regression system - Have automated notification of build and regression system failures - Have an automated packaging system - Have a network (i.e. internet) distribution system for new builds to the customer
Mostly these are the obvious ways to improve your turnaround time. But probably you aren't doing all (or possibly even any) of these things. So there's always room for improvement. Since you have an intimate knowledge of your work environment, you can probably find all sorts of other ways to speed up the process. But all of these things are costly, so chances are management will choose not to do them. Then it's their choice to be slow.
One of the companies I used to work for tried to get me to sign an "updated" contract.
I told them, "I already have a contract and I'm happy with it. There are termination measures in the contract, but I don't think any of the issues apply (gross incompetance, etc)."
Legal freaked out. They told me I must sign the new contract or else my employment would end. I said, "The contract I am working under has no expiration date and I don't see any provisions for updating it. As I said, I'm happy with this contract, so unless you offer me large concessions I don't really feel it's in my best interest to sign another one".
Legal freaked out again. They said, "Everyone has signed this contract. You are the last person. You must sign it."
I asked, "Are you saying that you will fire me if I don't sign this contract?"
Heh heh... You read my mind:-) Emacs does most of what I want UI wise (the tex info system helps you find functionality, there is a system to remind you of the keybindings, you can create your own keybindings). There are a couple of things I would do differently, though. But it's the closest thing to what's in my mind that I've seen so far.
I wish I had mod points. The original article made no sense to me at all. The one you link implies that the reason for sabotaging the auction was to establish that this part of the spectrum was "worthless". Then go back to the government and offer to manage this "worthless asset" in order to create some value. Of course rental fees would be applied. That way they are basically given that spectrum for free. If it's true, I hope someone is smart enough to shut the door *very* hard on their fingers...
Posts like this piss me off. First lets get some statistics right:
/. don't have 9-5 jobs. They care about their work life and believe in what they are doing. In fact, they often find it strange that western people don't like their job. I'm not saying that all people in Japan like their job. But my experience is that their devotion to it leads to a higher level of enjoyment than what I've seen in other places I've worked.
http://www.who.int/mental_health/prevention/suicide/suiciderates/en/
Japan does not have the highest suicide rate in the world. It doesn't even come close. According to this study, in 1999 the suicide rate was 50.6 per 100,000 people. This compares to 21.7 for the US and 15.1 in the UK. So it seems very high. However, compared to Austria (37.1), Beglium (40.1), Finland (45.5), etc it's not exactly running away wild. Countries with internal political strife have considerably higher levels (nearing 100 for some countries). So it's bad, but not ridiculously bad.
Now, let's take some other things into consideration. This data was taken in 1999 - 1 year after the collapse of several Japanese banks and the end of the "Job for life" policy in Japan. Yes, before 1998, nobody ever got laid off. Ever. In the history of the country. So in 1998 and 1999, people were getting laid off frequently. Hence suicide rates climbed dramatically.
Second you have to consider the culture. Unlike the US and the UK, suicide is *accepted* in Japanese society. Just the other day the father of one of my colleagues killed himself. His wife had died earlier and he just couldn't cope with looking after himself. Japanese men, in general, are totally dependent upon their wives. Many of them die by their own hand right after their wives die. This is sad, but normal here. In fact, I heard about my colleague's father at the morning staff meeting. No social stigma to the event at all.
So no matter what, suicide rates are going to be higher here than in the US or the UK. It's just seen as reasonable here that if you don't want to live, you don't have to (and personally I have a hard time coming up with a good argument against that).
Now to tackle the other things you have said. Life in Japan is *not* hard. It is *not* strict. It is *not* sad. This has got to be one of the happiest places I've ever lived in my life (and I've lived int the US, Canada and the UK). Yes, people work hard. The saying here is that "Otoko wa shigoto", or "Man is work". But they *like* to work. I do too. Hell, most of the people here on
Also, Japanese life is *full* of play. Seriously, every single weekend there's a festival of something or other near by. And people grab their families and have a blast. In fact one of the most interesting things I found about living in Japan is that people take their children *everywhere*. And Japanese children by and large *extremely* happy. Again the culture is just different. School can be tough. But it doesn't have to be. You choose to work as hard as you want. You get rewarded for your efforts. Japanese schools are agressively streamed. So the functions of the schools (especially high school) is different depending on the composition of the students.
For instance, in the high school where I work, the level is fairly low (bottom 20% in the prefecture I think). So the focus in school is on how to make a positive contribution to society. Seriously. Some of the kids take their tests and whatever seriously, but most don't. You *can* get to University from here, but only about 25% do. The rest will become fishermen, policemen, firemen, housewives/husbands, shop keepers, etc. These students are taught that their role is valuable. That they can make Japan better simply by making someone's day a little nicer.
Japan is far from unhappy. I don't agree with everything that happens here. But I have to vehomently disagree with
As someone who has *been* the employer who went to various schools,
;-) ).
I have to disagree with you. Big companies go to virtually
every school. Small companies go to the schools in their area.
I've worked for both and I've travelled to many, many, many
schools.
Coop is popular. Every school hires out all their students. It
is very rare in the extreme that people go without jobs (I'm
talking comp sci here, IT degrees are a different story I think).
Again, I never hired any engineering students, so I don't
know about that.
Honestly, the quality of the students vary dramatically with
*every* school. I've had more than a handful of students from
UW who could not code their way out of a paper bag, even if
you took the bag away. We're talking less than 100 lines
of *new* code in a whole term! But this is par for the course
with every University (if you're wondering why I hired them,
I didn't. Usually where I worked hiring coops was done on
a rotating basis and I often got saddled with extremely poor
selections made by other people. I like to think that my choices
were good, but I have to admit that I've made my share of
mistakes too
It is true that Microsoft *only* went to UW for coops for
a long time. I don't know the reason for that. Many people
say it was due to the quality of students, but my experience
is different.
In terms of support from the employers end, I've had good
coop coordinators from UW and I've had bad ones. Just
like every other school.
I have to say that you've bought into the hype for UW's
program. There's nothing wrong with the program, so
don't worry. But it's not the be all and end all. Coop
itself is not the be all and end all. The two good programmers
I mentioned before weren't even *in* coop.
And for what it's worth, I *hate* the coop format from
UW. Term 0 (or whatever they are called) coops are
usually useless. I mean people who have never written
code in their life. They end up do stupid joe jobs
for small minded people who like power trips. I once
saw a coop re-enter all the data from a database into
a new schema. The reason? Didn't know how to write
the code to do it and his supervisor didn't want to
show him.... Great...
I'm going to have to agree. Waterloo isn't a bad school for engineering and comp sci. But it's not significantly better than any of the other accredited schools. As someone who has hired a lot of people in my career, I wouldn't even put Waterloo in the top 5 of the schools I aimed for. Mostly that's because the less well known schools have a lot of good people, but they are in less demand and thereby easier to hire. In fact the two best Canadian programmers (in terms of pure talent) I've met came from Calgary and Carleton.
In Canada, my opinion is that there isn't a good undergrad program for comp sci at all (I'm willing to be convinced, though). But all of the accredited schools are adequate. I'm not qualified to comment on engineering. However, my understanding is that Waterloo primarily achieved it's engineering reputation by being one of the first (if not the first) Canadian engineering department to really embrace a coop program. Now almost every school has one.
Damn! Giving up my mod points. I was soo going to avoid talking about this. But old habits die hard...
Actually, you ask a really important question. How exactly is free software better (or at least not worse) than proprietary?
Probably you are a programmer, so I'll ask you this question. How much do you receive in royalties for the copyrighted work you produce? You are an author. You own the copyright to your work. The "IP" for that software you write belongs to you. Doesn't it?
Well, unless you are in business for yourself, the truth is that you don't receive *any* royalty. You don't own the "IP" for the software you wrote. You assigned the copyright over to another entity. Since they own the copyright (and patents, etc) they can easily put any license they want on the software. Could be Microsoft's normal license or it could be GPL. What difference does it make to you, as a programmer? You got paid. You wrote the software. You gave up *all* your control.
If a company can make more money from using a free license instead of a proprietary one, it's certainly a better way to go. It means that you will continue to get paid to write software. But from your perspective, it really doesn't matter whether it's a free license or not. You don't own it.
Perhaps you don't understand how a company can make more money from free software than from proprietary. How much money does Mozilla make from Firefox? Last I heard it was over $100,000,000 annually. How much overhead do they require? Marketing? Sales? Retail Channel? How much did Cygnus make from GCC et al? Before they were acquired by Red Hat for $600 million, they were pulling in about $30 million a quarter AFAICT. All from development contracts.
There is *money* in free software. Bags and bags and bags of it. Some of that money is in reduced costs for the organizations producing (and using) it. There is also a lot of untapped potential in development/support contracts (think IBM/Rational) as well.
But in the end, why does a developer care? Ever had the experience where you implemented some functionality and discovered that it did more that the customer was asking for? Ever found management asking you to spend the next 2 weeks ripping it out because "We can charge for that"? Never happens in free software development. Extra functionality for the user means more money for the company in the long run.
Ever got a bug report from a user that his data was corrupted due to a bug, but you weren't allowed to fix it because "not enough customers are affected"? In free software you just ask your buddy to fix it for the user. Extra functionality for the user means more money for the company in the long run.
And why, exactly, do I have to give up the copyright to my code again? Shit, you can do whatever the hell you want with it. Let me take the useful bits and reuse them in my home projects. Chances are if I'm scratching my itch, somebody else also has that itch too. Extra functionality for the user means more money for the company in the long run.
As a programmer, I want to program. I'm not a slave to the company. I'd like my own interests to coincide with the company's. Sure I like getting paid. I like making a living. I like money. But I also like not having to make stupid compromises just because some dickhead thinks he can make more money by screwing over the user. Or having to make stupid compromises because some dickhead thinks he can make more money by screwing over *me*! In the end, if the company can make money writing free software (and I purport that they can), it's only a win for the developer. There's no downside.
I've worked on some of these file formats quite a bit (I was the text conversion guy when WP went to Corel -- don't blame me, it was legacy code! ;-) ) Anyway, while the formats are quite strange in places, they aren't really that difficult to parse. I would be willing to speculate that this was never really much of a problem in writing filters for apps (or at least shouldn't have been).
;-) But that was a long time ago...
No, the difficulty with writing a filter for these file formats is that you have no freaking clue what the *formatter* does with the data once it gets it. I'm pretty sure even Microsoft doesn't have an exact picture of that. Hell, I barely ever understood what the WP formatter was doing half the time (and I had source code). File formats are only a small part of the battle. You have all this text that's tagged up, but no idea what the application is *actually* doing with it. There are so many caveats and strange conditions that you just can't possibly write something to read the file and get it right every time.
In all honesty I have at least a little bit of sympathy for MS WRT OOXML. Their formatter (well, every formatter for every word processor I've ever seen) is so weird and flakey that they probably *can't* simply convert over to ODF and have the files work in a backwards compatible way. And lets face it, they've done the non-compatible thing before and they got flamed to hell for it. I honestly believe that (at some point) OOXML was intended to be an honest accounting of what they wanted to have happen when you read in the file. That's why it's so crazy. You'd have to basically rewrite the Word formatter to read the file in properly. If I had to guess, I'd say that snowballs in hell have a better chance...
I *never* had specs for the word file format (actually, I did, but I didn't look at them because they contained a clause saying that if I looked at them I had to agree not to write a file conversion tool). I had some notes that my predecessor wrote down and a bit of a guided tour of how it worked overall. The rest was just trial and error. Believe it or not, occasionally MS would send up bug reports if we broke our export filter (it was important to them for WP to export word because most of the legal world uses WP). But it really wasn't difficult to figure out the format. Trying to understand how to get the WP formatter (also flakey and weird) to do the same things that the Word formatter was doing.... Mostly impossible.
And that's the thing. You really need a language that describes how to take semantic tags and translate them to visual representation. And you need to be able to interact with that visual representation and refer it back to the semantic tags. A file format isn't enough. I need the glue in between -- and in most (all?) word processors that's the formatter. And formatters are generally written in a completely adhoc way. Write a standard for the *formatter* (or better yet a formatting language) and I can translate your document for you.
The trick is to do it in both directions too. Things like Postscript and PDF are great. They are *easy* to write formatters for. But it's impossible (in the general case) to take the document and put it back into the word processor (i.e. the semantic tags that generated the page layout need to be preserved in the layout description). That also has to be described.
Ah... I'm rambling. But maybe someone will see this and finally write something that will work properly. At Corel, my friend was put on the project to do just that 5 times... got cancelled each time
It's $15K gross. Actually, I'm actually making twice that, but I'm giving half of it away.
:-) I really prefer to live in a small town (especially here in Japan). It's quiet and beautiful. And as you pointed out, there are few places in Japan where you need a car. The climate where I am is warm enough that I can bike all year round (although I'm a bit reluctant just at the moment -- brrr).
:-). Also, Mastering the Art of French Cooking is a brilliant book that shows all the basic cooking techniques you're likely to need. Cooking saves ridiculous amounts of money. Having people over for dinner is also incredibly fun. If you cook *everything* from scratch (no convenience foods) you can save money like you wouldn't believe as well as have a much better lifestyle (the food is awesome!). I also usually cook vegan (although I'm not really vegetarian). Even if I'm being extravagant my entire food budget is less than $1500 a year, which is only 10% of my income.
Of course I live in the inaka
However, I lived in Ottawa, Canada for 12 years prior to this so I understand what you are saying about North America. I ran a car for a good 15 years (a big part of the reason I can cut costs is giving up that damn thing). It is hard, but not impossible to live in North America without a car. But you have to move to a place where there is good transit.
Since this thread is basically over (and you seem interested) I'll just type in a few things I've discovered about living on the cheap (even in Canada). The first is to live near work. Ideally walking distance. This really saves you a bunch of time. If you can't do that, then start at work and find a bus route that is reasonably good, but not too busy. Then follow the map back and look for places to live.
Look for *small* places that are in reasonably good repair. Do some learning about construction and learn to recognize the difference between cosmetic and serious damage. Often a place that looks bad can be spruced up cheaply (and entertainingly) with some elbow grease. Make sure the place is walking distance to the supermarket. Those are the 2 places you will be going to *very* frequently -- work and supermarket. If you have kids you need to worry about safety, schools, etc. But if you don't (my case) then things are a lot easier.
When decorating, less is more. Buy extremely high quality in extremely low volume. Furniture only makes your room smaller. The less you have the better off you are. But if what you have is of extremely high quality then the place will look and feel fantastic. Probably you will have to spend a lot of time buying furniture (years) since you don't want to spend too much money. Use the time to really research what you are getting and why you need it. XP rules are good here -- simplest thing that could possibly work and then refactor.
What will happen is that you will buy a few really nice things. They may not be exactly right. That's OK, you can replace them (even though they are expensive). Spend the time to really understand what you need, while at the same time using what you've got. Then replace them when you can. Often you will find (if you are like me) that what you really needed was nothing (I actually don't have chairs anymore... or a bed... or a kitchen table... you get the picture -- of course Japanese lifestyle helps in this regard).
Having a balcony or patio with a southern exposure is really helpful because it means that you can grow food. I've been amazed at how much food I can grow in containers in a really small area. It cuts the food budget a lot, is pretty to look at and is a nice hobby. Also the food is waaaaaay better than what you can buy at the super market.
My one last tip is to cook. I learned to cook by watching TV shows (believe it or not). I just taped all of shows for a few years and watched them in my spare time. After a while I figured out which of the shows were crap, which saved me a lot of time
I still have a long, long way to go.
There was a quote from the old Kung Fu show with David Carradine. I wish I could remember it (and a quick google isn't giving me any good hits). But basically it goes something like: the only thing a man needs is food, shelter, work and love. That show had a lot of good quotes, but this is my favorite.
I don't really see my horizon being limited. If I have happiness, health, mental stimulation and can spend time with those that I love, I'm not sure what else I should want. I love to program my computer. I'm not really all that good, but it's something that I do every chance I get. And it's pretty lucky that doing this is quite inexpensive. I actually quit my job as a programmer because I could never have the freedom that I have now. I guess you'd call me retired (even though I still have a "day job" -- outside of the computer industry). But I learn more of programming in the 4 hours a day I have on my own than I did in a week in the industry.
The possibilities for me are endless as far as I can tell. It's a very interesting road, but surely it's not for everyone. Even still, it was a surprise to me how its working out, so I reckon that others can get some benefit as well. As long as each person does so within their own path, I'm certain that it will be at least interesting.
I know you're joking, but in all honesty I've tried being rich and I've tried being poor. Poor is actually better IMHO. Well, I lie. Because "poor" in the Western view isn't really all that poor. Right now I'm living on about $1250 a month US, which is $15000 a year. That's probably near the poverty line around here (Japan). But I've got a place to live, food to eat, clothes to wear. I've got a laptop computer and an internet connection (luxury!). So, it's hardly what real poor people would call "poor" -- I'm not starving or freezing or whatever.
And if I compare my life at $15000 a year to my life at $100000+ a year, I'll take less any day. As long as you aren't in debt, or hungry, or freezing to death, having not very much money is totally fine. And it forces you to try things that you might not otherwise try. Sure, you *could* do it with extra money, but the fact that you can pay someone else to cook your food or clean your house or whatever means that you probably will. And I've found that life is infinitely more interesting if you live it rather than pay someone else to live it.
I'm not explaining this very well. But it was quite a surprise to me to learn that I was happier with less. Now I'm trying to reduce even more. $15K per year still seems pretty fat to me. What else can I learn by cutting back more?
I have to agree with you about overconsumption. However, I have learned that the word overconsumption is not well received by a large number of people (see one of your replies). It has the implication that people are doing something morally wrong. It's possible that you meant this, but reading your post, I doubt it.
;-) ). When you find something that makes your life better, invite your family and friends to try it with you (go shopping together by bike, go to a movie together on the bus, invite people over to your cold house with a cosy fire in the wood stove drinking hot chocolate, etc, etc.)
Instead of talking about how we over consume, I try to explain that life can be as good (or even better) if we use less. There's a sweet spot somewhere on the consumption curve where our life enjoyment is maximized. This is kind of a strange concept for a lot of people. If some is good, more is obviously better. But it's like eating candy. Eating a little bit of candy can really improve your day. Eating a lot of candy just makes you feel sick.
I have made a lot of changes to my life that were a win-win situation. I started taking the bus instead of driving. Now instead of madly trying to rush around and get a million things done (stressing me out), I read a book. I intentionally say to myself, "I'm going to relax today. I'm not going to go shopping on the way home to pick up that one last thing. I'm not going to pick up the dry cleaning. Because I can't. I'm taking the bus today and reading my book." It turned out that virtually all of the things I did with the car were unimportant to me. In the very rare case where I absolutely need a car, I get a taxi. Doing this has improved my life, improved my finances and improved the environment (or at least not degraded it as much).
Not every change is good for every person (some people really can't deal with mass transit for instance). But I think it's good to encourage people to find areas in their life where less is more. As more and more people do this, our society will change. It will become easier and easier to reduce and win. For instance, in many cities bicycle paths are becoming a useful part of the infrastructure. In the town I'm living in now I can do all my shopping on my bike, without having to compete with cars. And on a nice day one of my most hated jobs (shopping) has become an extremely pleasant activity. 20 years ago, this town had *no* bicycle paths and it would be extremely difficult/dangerous to go shopping on your bike.
I think the very best thing to do to get people thinking is simply to try stuff yourself. Experiment. Have fun. Find out what you *really* need and what you don't (TV is always a good option to do without
Ya, the first time I used Japanese predictive text entry I was amazed. My Japanese is pretty bad, but I actually find it *much* easier to write text messages in Japanese than English. Now, I only text to my Japanese reading friends and directly phone English speaking ones. I hate English texting.
To give you an idea of what it's like to text in Japanese using predictive text entry, here's a kind of walk through the process.
First you type a character. Each character in Japanese is a phoneme/syllable (called a mora). The phone gives you a list of about 15 words that might fit. It's really amazing how often those fifteen words are right. Even if they aren't, by the next character, you almost always have the word.
Then the phone gives you a list of particles/sentence fragments. Almost every word in Japanese is followed by a particle - a single character word that indicates the grammatical function of the previous word. But since there aren't that many particles. they usually have room to give you a couple of common sentence fragments that could also fit in that context where you were typing; usually common grammatical constructions. You choose the one you want.
Then you type a character for a word again. You keep doing this until you get to a verb (usually at the end). At that point the software give you a choice of "okurigana" which will allow you to choose the inflection (sort of like a conjugation) and politeness level of the verb/sentence. And you are done.
You can type whole sentences in only a few keystrokes. In fact, I wouldn't be surprised if people can type faster on their cellphone than they can on their computer. It really is that easy and convenient.
Unfortunately, money in the real world doesn't work exactly the way you are indicating.
For instance, I may have a £10 note. But what *exactly* is £10 worth of goods? Well, in our economy it's mostly determined by a "free market". There are production costs and there is value decided by scarcity. When you buy something, you are paying the production cost, the scarcity value and some profit (which can be thought of as production cost of the middle man). Let's ignore scarcity value for now and assume that our £10 worth of goods is defined almost entirely by production costs. This is pretty much true today since even very scarce things (i.e., scarce in terms of demand) have a "value" defined by the amount of money it took to find and process it. We don't do things like limit how much of a scarce resource can be used at any one time.
So, for the vast amount of things, the "value" is determined by the production cost. As a society we work and create production. Then we apportion that production amongst the population in terms of money. How "real" is that money? Well, it's worth a certain amount of production. So in some senses it's real. It's a bargain to give you new production in exchange for the production your already did.
But, the actual "value" of that money is not fixed. It is determined *only* by the production that the current system is able to generate. So if people do something silly like save half their money every year -- there won't be enough production to cover the money in the system. The economy collapses and the currency is almost worthless. Of course, in our consumer society we don't really have to worry about people saving money. But we *do* have to worry about things like production suffering due to infrastructure collapse.
Just like we've seen currency literally become worthless when a country loses a war, or when there is a huge epidemic and no one can work, or when the socio-political structure collapses. In fact, we have a very real problem looming soon. In most parts of the "1st world", the population is aging. These people have actually saved for their retirement. Not only that, but the birthrate is decreasing (mostly due to the fact that wealthy people have less children). And finally, in the current political situation, immigration is being blocked.
This is a recipe for an economic collapse. I'm living in Japan right now (whose population is actually decreasing and aging at an alarming rate). I expect to see it here first. But the US (especially with it's attitude towards debt) will soon follow. We're in for some "interesting" times. Especially when you consider that banks are allowed to lend 10x more money than they actually have. This will only accelerate any potential collapse (i.e., when bad things happen, people tend to try to get their money out of banks -- and since the bank doesn't have anywhere near enough money to cover this, it makes things much worse).
Just be sure to realize that the money that appears to have "value" right now, may very suddenly not be worth as much as you thought. These things are not theoretical. They have happened time and time again. Sure, the system will reset and the illusion will be returned. But the vast majority of the people get completely wiped out in the process (and a few people get really, really rich).
I once spent 6 months refactoring code at a large telecommunications company.
The problem that was presented to me was this: They wanted to add more functionality to the code. But alas, the *functions* had exceeded the max file size for the compiler (32K lines). All they wanted me to do was break apart the functions and put them in different files so that they could jam more functionality in them...
Many, many years ago Michael Tiemann wrote a brilliant article on this very topic.
He and a couple of friends started Cygnus software, investing $6,000 to get
started. They added features (well, in the end pretty much built) the
GNU development tool chain. Their customers were embedded developers.
Here's the article:
http://www.oreilly.com/catalog/opensources/book/tiemans.html
I'm really sad to have come in late on this discussion because this
article is a must read for anyone wanting to make money writing free software.
Tiemann, et all became very rich doing it this way (Cygnus was sold
to RedHat for $600 million -- although a venture capital company
walked away with some of that money).
My quick take on it: Get money up front. Get paid for development,
not software. Realize that marketing is probably at least as
important was programming.
I really believe there is still a huge niche for custom software
development built on free software. Over 90% of software development
is in house development (OK, it's a number I pulled out of my
ass, but I think it's accurate). Your job as a free software
developer that wants to get paid is to convince companies that
you can deliver software to them cheaper than their in house
teams.
So what you need to do is to get a track record in the niche
that you want to work in. Then you need to hit the streets
and knock on doors. If you build it, they may or may not
come. You need to market your work. You need to show these
companies the potential for using your services rather than
building it themselves, or buying it off the shelf.
As Tiemann showed, if you do it right you will have more than
enough work to keep you fed.
Wow there are a lot of responses here. I wonder if anyone will read this...
But I'll type anyway. Although I agreed with the article saying that CS programs should teach more than Java, if you want to be a programmer, I don't think you need to worry so much about that.
Remember that first and foremost a programmer is a writer. You spend endless hours at your desk writing. And no matter where you end up, you will likely be buried in a pile of crappy code. So you need to know how to read and write code. And just like any writer the best way to learn is to read and write.
Spend every second you can reading other people's code and modifying it. Write your own code. Think to yourself, "Is this good code or bad code". Ask yourself "Why". Try to improve bad code. Try to write code from scratch. Try to emulate good code.
When you get into the working world, you will be horribly constrained by both deadlines and the sheer weight of the code you are in. Learn how to move on your own. All to often I see people writing the same bad code over and over again. They are just overwhelmed by where they are. They have difficulty improving their writing because they have never taken the time to read and write just for themselves. So if you have the time now, please spend it reading and writing,
One other thing. One of the best ways to improve is simply to refactor code. Pick some project at random. Find some bad code. Build a test harness around it. Rewrite it so it isn't so bad, but does the same thing it did before. This will lead to significant insights.
I think you're missing my point. If you want to learn theoretical computer science, where would *you* go to learn it? Because they don't teach it at universities in general (with some notable exceptions). They churn out professional programmers, who would actually be *much* better off (in terms of being good programmers) to just spend those 4 years writing code.
The comment about my degree was flippant, I admit. And it's been 25 years since I took that degree. So it's only in retrospect that I realize it's worth (or lack thereof). It got me a job. Without that piece of paper, it would have been difficult for me to break into the field. But it did *not* teach me anything about CS. Nor did it get me to a point where I could realistically do meaningful graduate work in the way, say, a physics graduate would have. But I had lots of trivial information about systems that were in use at the time (if you know what IEFBR14 does, then you understand what kind of systems those were. If you don't, be *very* thankful!)
I take your point about researching the degree, and if I had known what I know now, then I would have known to go to those few schools that actually teach CS. But here's the thing: when you don't know something, you don't know what you don't know. Now that I've spent the last 2 and a half decades writing and reading, I'm beginning to understand what you need to know in theoretical CS. I at least have an idea of what I don't know. It is not reasonable to expect someone who has not done that work to know what is out there. But most professors who do research in CS know this. So I don't excuse them.
And the point of my rant remains. The purpose of the university is basic research. Most universities are not training graduates (even grad students) to a level where they can do basic research in computer science. They may very well be providing a function for industry by churning out people by the tens of thousands with an introduction into the hot programming languages of the day. But that's the function of a technical college.
What we risk by not investing in basic research is a stagnation in computer theory. Marvin Minsky proved that perceptrons can't compute everything. Then in a off hand comment said that he didn't know if multi-level neural nets had the same problem. It took something like 10 years before anyone even checked. In other areas, programs are getting more and more complex all the time. If we can't find ways of representing that knowledge in more expressive forms, then we will just hit a glass ceiling. By choosing to train programmers and neglect theorists, our whole profession loses. *That's* what I'm complaining about.
OK, this hit one of my hot buttons. Before I continue, though, let me preface my statement by saying that I don't disagree with the article (which is right on the button). But I disagree with the way the summary characterizes the situation.
I totally agree that universities shouldn't be teaching Java exclusively. They need to teach the basics of modular, functional, declarative and oo languages. Why? Certainly *not* to fill "software engineering" positions!!! A university's role is to do research, not to act as some technical college. OK, I can see having a programming course aimed at creating programmers for industry if it's going to pay the bills at the uni. But *don't* make that your "Computer Science" course!!
Computer Science should be science (well, math anyway). Universities should be getting the 5 or 10 graduates they need that will move on to academia (or industry research) later in their careers. Because right now, *nobody* is getting taught Computer Science! Lately I've been reading papers posted on http://lambda-the-ultimate.org/ Regularly I have to go back to the basics and learn extremely fundamental theory because nobody *ever* taught them to me in the first place. Half the time I think, "OMG, I never even knew this existed -- and it was done in 1969!!????"
More and more lately, I've been wanting to phone my University up and ask for my tuition back.
If you want to learn how to program in a professional setting, there's nothing better to do than just start writing code. Get your chops up. Then find some big free software projects and start fixing bugs. Learn how to use the tools (configuration management, etc). Learn how to interact with the other programmers. That's all you really need (well, that and a quick automata and grammar course so that I don't have to look at yet another context free grammar being "parsed" by regular expressions).
But right now, where do you go if you want to actually learn theory? I guess the library... And getting back to the point, this is essentially what the paper is suggesting. Students need to learn all these things because they are relevant to the field. A university supports industry by doing basic research. If you don't understand the concepts that they point out, you just can't do that. Paraphrasing from the article, having a university course that's meant to pad out a student's resume is shoddy indeed.
Like every good /.er I didn't RTFA. But this reminds me of something that happened to me recently.
I was walking down the street late at night with a friend of mine. All of a sudden he yells out, "Crap!" and starts getting all agitated.
"What are you doing", I asked.
"Don't look! It's the police", he replied. "I always have trouble with them. Every time I see them they follow me and then I end up getting into a hassle."
I looked at him. Then I looked at the police. Then I waved at the police and they drove off.
"How did you do that??", he asked incredulously.
It never occurred to him that his nervousness was the only thing that way attracting the police's attention. For some reason he thought they had it in for him or something.
I suspect that there will be a lot more people being detained if nervousness is a reason to detain someone. There are just people who are nervous around authority figures. And since that nervousness usually gets them into trouble, they become even more nervous. Welcome to longer lineups at the airport...
As near as I can figure out, this is the thinking that the average business guy has:
Making money is less about creating a good product and building good customer
relationships. It's about good timing. Have the right product at the
right time and at the right price point and you strike it rich. If your
timing is wrong, no amount of good product or service will save you.
But timing is ridiculously hard to predict. So instead of concentrating
of creating a good product that customers want, and supporting it
so that the customers are happy, put the least amount of effort
into developing it as possible. Get it out the door fast, fast, fast.
Likely you will fail, but it doesn't matter because you were fast,
so you can try again right away. And if you did it right, you
didn't use your own money. So, keep trying until you strike paydirt.
But, like I said, timing is difficult. So once you get a success,
you must hang onto it with a death grip. Don't let anyone else
compete in your market space. This also means don't allow a
user to modify it to do something else. Because if they start
improving the product, you might find yourself redundant
(especially since you didn't really invest in development
and may not have the capability to compete).
So it doesn't matter whether an outside community saved their
asses in the past. They only see that as part of step one
(small upfront development cost). If there is success, don't
share it.
I personally don't agree with this approach. But I have had
enough conversations with the "business" side of high tech
companies to at least partially understand it. However, it's
one of the big reasons I'm no longer in that industry.
Actually, the take, take, take, gimme, gimme, gimme users provide invaluable benefit to Free software producers. But to understand this, you must understand the economics of Free software development (I will assert that most people, even Free software producers have a difficult time understanding this). With Free software, you *can* make money off of distribution, but really it won't last for long. Eventually, since the cost of distribution is nearly free, someone will undercut you. Instead, you must make money (or better stated, value) out of the software itself.
;-) ). Examples of this are the Apache software and the Linux kernel.
This can be done in a few ways. First, you can get value from using the software you wrote. Often the value you receive more than offsets the cost of development. If the software is popular and useful, then you can also benefit from forming a consortium with other parties to do development. You each share the costs and share the benefits. People who fund development get a greater say in what gets written (i.e., they write it
Second, you can get value from future work on the software. If it is a popular, useful work, then often someone else will be able to receive value from funding you to do some new development. Probably the best example of this is the GCC tool set as it was developed by Cygnus software (google around for Michael Tiemann's description of how to make this work -- it's brilliant.)
Finally, you can gain value (either directly or indirectly) through advertising. Usually (as is the case with this software), the software allows you to connect with a service that gains value from advertising. The best example of this is Mozilla who make nearly $100 million a year from the google search bar in Firefox.
Now, I hope you'll excuse my tangent, I'm finally coming to the point. What all these methods of creating value have in common is that they work best (return the most value) when the software is *popular* and *useful*. Take, take, take, gimme, gimme, gimme people are essential to creating popular and useful software. First, they are often the absolute best sources for ideas. They are so internally focussed (i.e., selfish) that they have a really highly developed sense of what they want. Yes, they are annoying, but if you cut through the annoyance, you find gold. Second, these people are like rats. When one finds a good source of food *all their buddies join in*. This is indispensable for a Free software project.
Now, what I read from the posts above is that these selfish users are not happy with direct advertising on the associated service. This is incredibly useful feedback! It means that there is significant risk involved in the venture. People are not against advertising per se. Take the google search bar in Firefox. I've never heard anyone complain about it. The connection between the google advertising and the search bar is removed enough to appease the user. But I would worry, in this case, that users will not accept the advertising on the associated service.
In the end, cherish your selfish users. They are a PITA, but they are honest and they will spare no expense to tell you what they think. For software projects that don't have budgets for things like user studies, these people will pave the road to success.
The wisdom of crowds is great.
Unless they get it wrong...
Yeah, this is really "Duh". I've always been surprised at the complete lack of thought given to security in SIP devices and protocols.
Here's a good example. Most of the SIP hardphones on the market right now have a feature that allows them to be answered automatically when phoned. You just pass a non-standard header in the Invite message telling the other end to auto-answer. This feature is useful for manufacturers that want to sell "consoles" which allow an operator to control all the phones or do things like paging.
But think about this... Just by sending an Invite with an auto-answer header I can get many phones to pick up *without ringing*. Since almost all of these phones work as speaker phones I can listen in to any conversations I want to anywhere on the internet.
Granted you usually have to specifically enable this feature on the phones. But this is usually done by system integrators without the knowledge of the person buying the phone. If you are that system integrator and know which phones have the option turned on, you can listen in to what's going on in the area. Great for keeping tabs on your boss too...
The combination of SIP and RTP is a completely moronic set of protocols for real life telecommunication. Then you toss in a bunch of completely moronic devices that can alter SIP (since it's extensible) and you just have a world of trouble. The thing is, it's not exactly rocket science to design a secure, encrypted voice protocol that can pass through NAT easily. Why did we choose SIP again???
Lots of comments already, but heres my take. Regardless of how long it takes *other* people to do it, it will take you about this long:
- The amount of time to understand what the problem is plus
- The amount of time to identify who can fix the problem plus
- The amount of time to communicate the problem to the people who can fix it plus
- The amount of time to find a load of the customer's software and equivalent hardware plus
- The amount of time to verify the problem with the build plus
- The amount of time to find the correct version of the software for the build plus
- The amount of time to fix the bug in that version of the software plus
- The amount of time to verify that the bug is actually fixed plus
- The amount of time to build a full production build of the fixed load plus
- The amount of time to run regression on the fixed load plus
- The amount of time to fix problems discovered in regression plus
- The amount of time to document any user visible changes plus
- The amount of time to package the load for the customer plus
- The amount of time to get the new load to the customer
While there is a lot here (hope I didn't forget anything), almost everything is under your control. Estimating each of the steps for a typical problem will tell you how long *you* can currently take. If you want to shorten the time, you probably can. But it will cost time and money (of up front work before a problem is discovered) to get the time down.
As you will probably find, even if you fix the bug in 0 time, there probably is a lot of time being taken up by other steps. So the question of "How can we reduce this number" should not be taken as a question of your programming competency. Instead it is an opportunity to clean up other areas. For instance:
- Reduce code ownership so as to allow more people to handle problems in various areas. This will reduce the amount of time it takes to route the problem to the programmer.
- Keep each programming task in normal development down to only a few hours (1 or 2 days max). This will increase the availability of development staff.
- Engage in training for first line support to streamline the process of taking technical details.
- Engage in good configuration management practices and maintain builds of every active load in the field
- Maintain a lab containing all the equipment usually used in the field
- Train programmers and testing personnel how to set up all the equipment quickly
- Maintain high availability of testing personnel for verification of field issues
- Keep a log of all the software (with versions) run by all important customers
- Maintain low complexity software (i.e., value low complexity in the code over other factors). Refactor complex code.
- Invest in a build system that can easily and quickly build a load on demand
- Ideally have the build system runnable on every developer's machine so that they are testing with real builds
- Maintain a full automated regression test system
- Maintain a continuous build system with automated regression system
- Have automated notification of build and regression system failures
- Have an automated packaging system
- Have a network (i.e. internet) distribution system for new builds to the customer
Mostly these are the obvious ways to improve your turnaround time. But probably you aren't doing all (or possibly even any) of these things. So there's always room for improvement. Since you have an intimate knowledge of your work environment, you can probably find all sorts of other ways to speed up the process. But all of these things are costly, so chances are management will choose not to do them. Then it's their choice to be slow.
One of the companies I used to work for tried to get me to sign an "updated" contract.
I told them, "I already have a contract and I'm happy with it. There are termination measures in the contract, but I don't think any of the issues apply (gross incompetance, etc)."
Legal freaked out. They told me I must sign the new contract or else my employment would end. I said, "The contract I am working under has no expiration date and I don't see any provisions for updating it. As I said, I'm happy with this contract, so unless you offer me large concessions I don't really feel it's in my best interest to sign another one".
Legal freaked out again. They said, "Everyone has signed this contract. You are the last person. You must sign it."
I asked, "Are you saying that you will fire me if I don't sign this contract?"
"Well, no."
"Good because I like the old contract better."
End of story. Never heard from them again.
Yes exactly!
:-) Emacs does most of what I want UI wise (the tex info system helps you find functionality, there is a system to remind you of the keybindings, you can create your own keybindings). There are a couple of things I would do differently, though. But it's the closest thing to what's in my mind that I've seen so far.
Heh heh... You read my mind