Why is everyone in such a rush?
Walk into any bookstore, and you'll see how to Teach Yourself Java in 7 Days alongside endless variations offering to teach Visual Basic, Windows, the Internet, and so on in a few days or hours. I did the following power search at Amazon.com:and got back 248 hits. The first 78 were computer books (number 79 was Learn Bengali in 30 days). I replaced "days" with "hours" and got remarkably similar results: 253 more books, with 77 computer books followed by Teach Yourself Grammar and Style in 24 Hours at number 78. Out of the top 200 total, 96% were computer books.pubdate: after 1992 and title: days and (title: learn or title: teach yourself)The conclusion is that either people are in a big rush to learn about computers, or that computers are somehow fabulously easier to learn than anything else. There are no books on how to learn Beethoven, or Quantum Physics, or even Dog Grooming in a few days. Felleisen et al. give a nod to this trend in their book How to Design Programs, when they say "Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies.
Let's analyze what a title like Learn C++ in Three Days could mean:
- Learn: In 3 days you won't have time to write several significant programs, and learn from your successes and failures with them. You won't have time to work with an experienced programmer and understand what it is like to live in a C++ environment. In short, you won't have time to learn much. So the book can only be talking about a superficial familiarity, not a deep understanding. As Alexander Pope said, a little learning is a dangerous thing.
- C++: In 3 days you might be able to learn some of the syntax of C++ (if you already know another language), but you couldn't learn much about how to use the language. In short, if you were, say, a Basic programmer, you could learn to write programs in the style of Basic using C++ syntax, but you couldn't learn what C++ is actually good (and bad) for. So what's the point? Alan Perlis once said: "A language that doesn't affect the way you think about programming, is not worth knowing". One possible point is that you have to learn a tiny bit of C++ (or more likely, something like JavaScript or Flash's Flex) because you need to interface with an existing tool to accomplish a specific task. But then you're not learning how to program; you're learning to accomplish that task.
- in Three Days: Unfortunately, this is not enough, as the next section shows.
Teach Yourself Programming in Ten Years
Researchers (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, telegraph operation, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. The key is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes. Then repeat. And repeat again. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music. In another genre, the Beatles seemed to burst onto the scene with a string of #1 hits and an appearance on the Ed Sullivan show in 1964. But they had been playing small clubs in Liverpool and Hamburg since 1957, and while they had mass appeal early on, their first great critical success, Sgt. Peppers, was released in 1967. Malcolm Gladwell reports that a study of students at the Berlin Academy of Music compared the top, middle, and bottom third of the class and asked them how much they had practiced:Everyone, from all three groups, started playing at roughly the same time - around the age of five. In those first few years, everyone practised roughly the same amount - about two or three hours a week. But around the age of eight real differences started to emerge. The students who would end up as the best in their class began to practise more than everyone else: six hours a week by age nine, eight by age 12, 16 a week by age 14, and up and up, until by the age of 20 they were practising well over 30 hours a week. By the age of 20, the elite performers had all totalled 10,000 hours of practice over the course of their lives. The merely good students had totalled, by contrast, 8,000 hours, and the future music teachers just over 4,000 hours.So it may be that 10,000 hours, not 10 years, is the magic number. (Henri Cartier-Bresson (1908-2004) said "Your first 10,000 photographs are your worst," but he shot more than one an hour.) Samuel Johnson (1709-1784) thought it took even longer: "Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price." And Chaucer (1340-1400) complained "the lyf so short, the craft so long to lerne." Hippocrates (c. 400BC) is known for the excerpt "ars longa, vita brevis", which is part of the longer quotation "Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile", which in English renders as "Life is short, [the] craft long, opportunity fleeting, experiment treacherous, judgment difficult." Although in Latin, ars can mean either art or craft, in the original Greek the word "techne" can only mean "skill", not "art".
Here's my recipe for programming success:
With all that in mind, its questionable how far you can get just by book learning. Before my first child was born, I read all the How To books, and still felt like a clueless novice. 30 Months later, when my second child was due, did I go back to the books for a refresher? No. Instead, I relied on my personal experience, which turned out to be far more useful and reassuring to me than the thousands of pages written by experts.
- Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in ten years.
- Talk to other programmers; read other programs. This is more important than any book or training course.
- Program. The best kind of learning is learning by doing. To put it more technically, "the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve." (p. 366) and "the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors." (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.
- If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don't enjoy school, you can (with some dedication) get similar experience on the job. In any case, book learning alone won't be enough. "Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter" says Eric Raymond, author of The New Hacker's Dictionary. One of the best programmers I ever hired had only a High School degree; he's produced a lot of great software, has his own news group, and made enough in stock options to buy his own nightclub.
- Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you're the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you're the worst, you learn what the masters do, and you learn what they don't like to do (because they make you do it for them).
- Work on projects after other programmers. Be involved in understanding a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain it after you.
- Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).
- Remember that there is a "computer" in "computer science". Know how long it takes your computer to execute an instruction, fetch a word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk. (Answers here.)
- Get involved in a language standardization effort. It could be the ANSI C++ committee, or it could be deciding if your local coding style will have 2 or 4 space indentation levels. Either way, you learn about what other people like in a language, how deeply they feel so, and perhaps even a little about why they feel so.
- Have the good sense to get off the language standardization effort as quickly as possible.
Fred Brooks, in his essay No Silver Bullet identified a three-part plan for finding great software designers:
This assumes that some people already have the qualities necessary for being a great designer; the job is to properly coax them along. Alan Perlis put it more succinctly: "Everyone can be taught to sculpt: Michelangelo would have had to be taught how not to. So it is with the great programmers".
- Systematically identify top designers as early as possible.
- Assign a career mentor to be responsible for the development of the prospect and carefully keep a career file.
- Provide opportunities for growing designers to interact and stimulate each other.
So go ahead and buy that Java book; you'll probably get some use out of it. But you won't change your life, or your real overall expertise as a programmer in 24 hours, days, or even months.
References
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.
Chase, William G. & Simon, Herbert A. "Perception in Chess" Cognitive Psychology, 1973, 4, 55-81.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
Answers
Approximate timing for various operations on a typical PC:
execute typical instruction 1/1,000,000,000 sec = 1 nanosec fetch from L1 cache memory 0.5 nanosec branch misprediction 5 nanosec fetch from L2 cache memory 7 nanosec Mutex lock/unlock 25 nanosec fetch from main memory 100 nanosec send 2K bytes over 1Gbps network 20,000 nanosec read 1MB sequentially from memory 250,000 nanosec fetch from new disk location (seek) 8,000,000 nanosec read 1MB sequentially from disk 20,000,000 nanosec send packet US to Europe and back 150 milliseconds = 150,000,000 nanosec
2011年7月27日 星期三
Teach Yourself Programming in Ten Years
2011年7月26日 星期二
Young adults eager to engage with brands online, Global research from Microsoft and Synovate reveals
Young adults eager to engage with brands online, Global research from Microsoft and Synovate reveals
11 November 2008
Almost a third of 18-24 year olds around the world regularly talk about brands in online forums or discussion boards
LONDON — A new global survey conducted by Synovate in conjunction with Microsoft reveals the extent to which young adults are willing to interact and engage with brands as part of their daily online activities. When asked about their online brand engagement in the last month, almost a third (28%) had talked about a brand on a discussion forum; almost a quarter (23%) had added brand-related content to their instant messenger service; and almost one in five (19%) had added branded content to their homepage or social networking site.
The 'Young Adults Revealed' survey of 12,603 18-24 year olds from 26 countries around the world gives brands and advertisers valuable insight into the online behaviours of this much sought after demographic. Spending on average 2.5 hours of their daily leisure time online, young people claim that they are not only regularly clicking on banner or online adverts (47%) or accessing brand and product information via portals (18%) but also interacting in a more engaged way - almost a quarter of them (24%) have actively uploaded advertising or marketing clips to social networking or video sites in the last month.
"Young people today are totally comfortable with the idea of branded content and branded entertainment. For example, almost half (42%) have watched an advert before watching a video online. However, the results of this survey show that they are more than just 'comfortable' - they are openly willing and eager to engage with brands online. They clearly feel their opinions about brands are important. They want to associate themselves with brands they see as 'cool' and this is why we see them uploading clips to their social networking sites and IM services," comments Julian Rolfe, Global Manager, Young Adults Revealed, Synovate.
Beth Uyenco, Global Research Director, Microsoft Advertising says: "People think that the younger generation is notoriously marketing savvy and difficult to engage. However, we know from this survey and our experience with our advertisers that if advertising is done in a relevant and credible way, young adults are actually eager to interact, share opinions and even pass the message on."
Active Audiences
Young people are accessible through a range of digital touch points and engage in a variety of activities throughout the day. They regularly read emails (94%) and news or current affairs (80%). They also read about film, music or games (76%) and chat on IM (76%). Almost three quarters of respondents had watched video clips online (73%), and they are most likely to pass on comedy clips (62%), followed by music clips (40%) and clips featuring friends (27%). Almost one in ten respondents had also passed on viral advertising and marketing clips (9%).
Mobile internet access is also proving popular with over a third of respondents using their handset to browse while on the move (34%). The most common online activities from a mobile include:
- Listening to the radio (15%)
- Accessing games (13%)
- Visiting social networking sites (11%)
- Watching streamed video clips (10%)
- Reading about sport (9%)
Microsoft Advertising's Uyenco concludes: "We know young adults are active users of the internet but we can see that they are looking for an experience that is both relevant and customised to their personal needs and interests. What this research shows is the extent of the opportunity for advertisers to capture the imaginations of the elusive young adult generation as they go about their daily digital lives - from gaming and IM through to video and mobile. By tapping into the trends and mindsets of young adults, brands can engage this active audience and create a dialogue knowing they are highly likely to continue discussing the brand with their peers."
The 'Young Adults Revealed' Survey was conducted by Synovate in June / July 2008 and questioned respondents in Bulgaria, France, Germany, Greece, Italy, Norway, Poland, Portugal, Romania, Russia, Spain, Sweden, Turkey, the UK, Australia, Brazil, Canada, China, Egypt, Japan, Mexico, Morocco, New Zealand, Saudi Arabia, South Africa and the USA. The syndicated study is available to purchase. Please contact Julian Rolfe for further information.
Contact(s) for this press release
Florence Wong
Marketing and Communications Manager
Northern EuropeTel: +31 20 6070 772
Send an email
About the survey
Young Adults Revealed was conducted by Synovate's youth research group OnePointNine in conjunction with Microsoft, and the results are drawn from a sample of 12,603 respondents in 26 countries worldwide who have signed up to be part of Synovate's online panel. Each country had at least 400 respondents, except for Turkey where there were at least 800 and China and the USA where there were at least 1,000 each. In every country, Synovate also consulted two experts (academics, journalists, sociologists or social commentators) on the age-group for their feedback, reaction and comment to add additional analysis and interpretation on the findings.
About Microsoft Advertising
Microsoft Advertising provides world-class advertising tools and solutions for digital advertisers and publishers to drive brand and consumer engagement. The portfolio includes all of our digital advertising businesses: our global media network that includes MSN, Windows Live, Office Live, XBOX, Live Search, Facebook and more, and our global technology platforms and tools that include Atlas, AdECN, adCenter, DRIVEpm, Massive and ScreenTonic, which together create engaging digital advertising experiences for their consumers. Microsoft Advertising helps make buying and selling media simple, smart and more cost-effective across media and devices in the Microsoft network of properties and beyond, which spans 42 markets globally and 21 languages. Click here for more information.
About Microsoft Corporation
Founded in 1975, Microsoft Corporation (Nasdaq "MSFT") is the worldwide leader in software, services and solutions that help people and businesses realize their full potential.
Microsoft, Windows, Windows Live and Windows Mobile are either registered trademarks or trademarks of Microsoft Corp. in the United States and/or other countries. The names of actual companies and products mentioned herein may be the trademarks of their respective owners.
About Synovate
Synovate, the market research arm of Aegis Group plc, generates insights to help clients drive competitive brand, product and customer experience strategies. A truly borderless company with offices in over 60 countries, our approach combines best in class global research capabilities with personalised service, local knowledge and the flexibility to create teams and processes that meet clients' specific requirements. At Synovate, our clients sit at the top of our organisational chart, driving us to continually develop more innovative research solutions that predict actual business outcomes.
For more information on Synovate visit www.synovate.com.
2011年7月25日 星期一
"the server encountered an error...: Apple Support Communities
I found the answer
It is in your "hosts" file
It should look some thing like this:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
If there are other thing you have not added then remove them
To get to the "hosts" file
1. Under go in the finder choose the go to folder
2. type /etc
3. Find the "hosts"
4. open it with text edit
5. remove what need to be removed
7. save a copy to your desktop
8. With out the .txt
9. Rename the org file "Old host"
10. Place the new one in that /etc folder
it will ask for passwords
Anyone has the registration issue about FaceTime after you upgrade your OS to Lion. Read this post.








