wavetossed
Also, humans are builders. It's what we do.
If you look at this problem closely, like I have over the past 15 years or so, you can already see evolution and natural selection happening. So I don't really see diversity as a big problem, and I do expect that in a generation or two, there will be a lot more consensus around which tools to use. However, even then, I do expect to see a fair amount of diversity.
Even today, where Google dominates search, they are dwarfed by Baidu in China. And in Russia, many people prefer Rambler. Orkut is a big social network in Brasil, Vkontakte in Russia, etc. Programming tools and libraries are the same, i.e. a lot of the choices are made for cultural reasons and that will never go away so some diversity will always be here.
Hopefully more people can gain the perspective that many years of experience bring, and can contribute to the process of natural selection (which implies improvement too) in order to get more people choosing and using better tools.
That's why you see so many blogs about companies changing core NoSQL technologies.
Hone that resume. Try several different versions targeted to different types of jobs. Carefully write your cover letters based on the job ad, and with the intention of getting an interview.
A resume is not an employment history so don't include any more of that than is necessary to be conventional. Leave out the summer jobs in highschool if you are older than 25. Focus on achievements, projects completed. Tell them how you helped your employers over and over again.
And weave lots of technical terms into the text so that it shows up on a keyword search. But do leave out useless keywords like COBOL and VMS.
Don't say your age, and be careful not to inadvertently disclose your age by saying that you worked X years with Y technology which we all know was obsolete in 1995.
I did things differently, started an ISP business in 1994, worked in a Silicon Valley startup for a year, did some consulting in Australia and went to live in Europe. My life was much more interesting than those people who stuck to the daily grind, I reinvented myself (i.e. kept on learning new things every year) a few times, and according to the latest research, I don't need to worry about dementia for a long time. I might not have a nest egg but I have skills in sofware development, systems admin and dba areas that my few of my peers have, and no younger person has. I intend to keep on working and creating new technology until the end of my days, which if my grandparent's lives are an indication, will be well into my 90's.
Simply build a site like YouTube with lots of content to view. But unlike YouTube, this site would be pay per view and 100% of the content would be provided by teams of content creators. No backroom licencing deals.
The end user pays a fixed monthly fee for what they watch. After you watch a show, you must rate it before you get to watch another. That means 100% of viewings are rated. At the end of the month all the shows are ranked according to the ratings, and the portion of the monthly fee that goes to content creators, would be divided according to the rankings.
OK, maybe this is more like Netflix than YouTube. The UI is not as important as the system of acquiring and paying for content which is directly tied to viewer rankings. You would need to have a multiple factor ranking system so that cat videos with shot with a shaky video camera can rank high in entertainment value but low in quality and thus earn less. Also a longer show should earn a bigger share than a 2-minute short.
There are other types of things that would also work for this YC request, but I hope to see this as one of the ones that YC funds.
A lot of software development teams are releasing their own RPM and .DEB Linux binary packages for just that reason, to encourage people to use up to date packages instead of the stale OS distro packages.
In a way, it's rather like security updates. Who would refuse to install security updates because it's not part of the Ubuntu 10.4 LTS release? Almost nobody even thinks of doing that. So why would you use old obsolete releases of mission critical software?
I think that things like RPATH and LD_PRELOAD are exactly what shared libraries should be doing. The reason for shared libraries in the modern age, is increased flexibility.
If you really have a tangled web of failed forks, this is the way to fix it by starting afresh with a merger of the best forks.
This is a lot like fizzbuzz because the instructions for writing the code are simple, straightforward, and should be understandable by any programmer. This is not a question with an answer. This is a SPECIFICATION for a program. If you know how to code, it should be easy to write some code that meets this simple specification.
P.S. most interviewers will give you bonus points for explaining your work as you do it, particularly why you chose to use a certain approach, and what you assumed even though it was not explicitly specified. This is true even if you botch the end result and provide code with severe errors.
After all, that's what good coders do most of the time, write incorrect code with severe errors. The rest of the time they fix their mistakes.
My theory is adults learn languages so slowly because they actually never try to learn. Two reasons for this. a) Adults typically do not know how to learn period. b) Adults have been conditioned to do the wrong things in attempting to learn and all books and courses are built around these wrong ideas.
Most important way to evaluate your learning is to ask yourself "Do I feel like a stupid idiot as I do this?" If the answer is YES, then you are learning. Keep it up and get to love your stupid idiot self. In time the clouds will clear and you will not be stupid anymore. Lots of people have warped adult egos which simply cannot accept these feelings of stupidity. Some people actually kill themselves because of this, others drop the studying entirely, and others soldier through and learn nothing because they have not accepted the feelings of stupidity and moved forward in spite of it.
First read the text (a few sentences) in the foreign language. Then run it through the translator, because you can only understand half of it and there are some key words that have you lost. Read the English translation keeping in mind that it is WRONG. However it will have clues about the structure of sentences, the meaning of unfamiliar words, etc. In this step you are not learning the foreign language, you are learning some POSSIBLE solutions to the problem of understanding the text.
Now go back and read the foreign language text from the top. You will find that miraculously your brain can now read and understand it almost 100%. Occasionally you will be forced to check the dictionary for a word that suffers from the problem discovered in 1966 when researchers ran "The spirit is willing but the flesh is weak" through and English-Russian translator and then back again through a Russian English translator. They got back "The vodka is good but the meat is rotten".
I also used this back and forth translation to check my Russian letters before I sent them. I wrote in Russian without a dictionary, then translated it back into English with an online translator. I often found words where I had chosen the wrong one of several possibilities.
Nowadays when people ask me "What is the X language word for Y?" I say, it cannot be translated. In general it is not possible to translate an English word into another language or vice versa. That is why I recommend keeping phrase lists rather than word lists because you get a bit of context which is what determines meanings.
When you use a dictionary and there are 10 possible translations for "find", look up each of the possibilities in the foreign language section and you will not only find the best word to express what you mean, you will also learn how fuzzy a lot of our English words are, and don't ask me about "get" and "put".
Why the long song and dance? Because I did it and I know how to do it. It is actually quite simple and is obvious if you think it over a bit. You have to work at it EVERY day, 365 days a year. Spend an hour or more a day. Find ways to extend that time whenever you can, for instance turn on the Spanish audio on a DVD and English subtitles instead of watching TV in English.
Second thing to do is to exercise all of the language senses EVERY DAY! If you sit down with a language book and spend all day Saturday on a couple of lessons learning them by heart then you are doing it wrong, wasting your time and will soon drop the studying entirely.
Every day you must read some of the language. Every day you must write, preferably full sentences or phrases, not just vocabulary words. For instance if you learn that sombrero means hat, then write "El muchacho no sabe donde esta su sombrero" or at least "un sombrero blanco" at the very minimum.
Every day you must listen to the language. In some countries there is easy access to TV or radio signals, but everyone who can read this can download podcasts. Listening to the CD that came with a course does not count. Sure, do listen to the CD, but don't check off listening until you listen to some language in the wild, so to speak.
Every day you must speak the language. In the beginning you can get away with reading a page out loud even if you don't understand the words. But preferably you should be speaking with native speakers. I get a free newspaper handed out every morning outside the transit station by a Chinese guy so I always say "Xie xie) which means thank you. When I took my daughter to a birthday party and entered a room of Chinese girls I said "Ni men hao" which means hello everyone. Yep, I am working on yet another language since I live in China now (the North American part commonly called Vancouver BC).
And you must also spend a reasonable chunk of time everyday talking to imaginary friends entirely in the new language. Don't speak out loud, but hold the conversation in your head as you walk to the subway, or take a lunchtime jog. Often you will not be able to fully express your thoughts because you lack the vocabulary so practice describing what you want to say. For instance, if you don't know the word tree but want to say "See the bird up in that tree" then try saying "See the bird up in that big plant, the really high one beside the park bench. What is that called?" When you get advanced enough, that kind of mental maneuvering will actually help you recall words that you had once learned but half forgotten.
Don't fuss over courses. Go to a good bookstore with a wide selection and browse through the books. Buy one or two whose writer seems to write in a way that you can understand and will not get bored with. When you are more advanced look for specific types of books. A comprehensive dictionary. A grammar book. A vocabulary builder book.
Buy some books written for 8 year olds in the foreign language. Stick to books written by a native speaker of the language where the action of the story is set in a country where this language is spoken. Especially avoid books originally written in English that were translated. When you can get through one of these, buy some books for 10 year olds, then 12, then 14 year olds. After that go to adult books. The age thing is important because young people do not have large vocabularies. Therefore childrens' book editors spend a lot of time editing books so the child will learn the meaning of new words from the context. You will learn them too and save much time that would have been spent with the dictionary.
At this point I'll probably just use an older version so that we have local storage and local search.
But for app development, get your own Python, manage it yourself and install 'distribute' so that you have both easy_install and pip to work with. I've taken that to extreme by making a portable Python distro that comes in a tarball and runs on any Linux distro, but even if you only untar the source and run ./configure --prefix=/home/python;make
That will build a default Python with support for any shared libraries for which you have a development version installed ( -dev version on debian/ubuntu, -devel version on redhat/suse)
sudo make install will install it, assuming that you have write permissions on the target prefix that you specified. You can even hide it in your home directory with --prefix=~/tools/python272
That said, I try to use any backported 3.0 features such as .format for string formatting. And for beginners, I heartily recommend using the 'six' module. That way when you need to move to 3.0, porting your code or your skills, will be easy-peasy.
Or even better, give them a stackoverflow search like this one http://stackoverflow.com/search?q=%5Bpython%5D+%22install+py...
P.S. I think that your wiki page is a great idea and I'm going to write a custom one for our developer wiki.