I've always thought that programmers should know how to drive a stick shift.

Pop the clutch, wrestle it into 2nd, finesse the gas, let the acceleration plaster you into those plush, faux-leather seats.
This is driving.
Now, I don't have anything against automatic transmissions. In fact, I love automatic transmissions:
But a programmer should know, or at least be familiar with, the low-level stuff.
That means: pointers. Threads. DLLs. Import tables. Memory allocation. Nuts and bolts. Stuff that's often abstracted away for us quite nicely by the .NET framework or the JVM. In a recent Stackoverflow.com podcast, Joel Spolsky makes the point:
But, but, but, but, but you see the thing about C is it's not COBOL, which is the language that the old programmers used, it's the language that is closer to the machine. And so, things like stacks, they're still going on there, and, and malloc and memory allocation in C, yeah it's a lot of manual work that's done for you automatically in modern languages, but it's done for you automatically--it's still getting done. And so studying C, for example, is like learning how to drive a stick shift car. It's learning how your car works, and what the connections are, and how the gears work, and basically the main parts of the drive shaft, and parts of your car. And you don't have to know about them to drive an automatic, it's true, but to really be a person who designs cars, or is an expert at cars, or who's an auto mechanic, or who's just kind of a wizard at cars, you have to know that anatomical stuff. So you're not really--I don't think C is an obsolete language, because it's just an expression of assembler. It's just an easier to use expression of assembler language. And it reflects what actually goes on at the chip
Joe, you stole my metaphor. Or rather, my simile.
The typical attitude around the development water cooler is that "you only need C++ for performance, and performance is a non-issue in most applications." But this kind of either/or thinking misses the forest for the trees. As Visual C++ team member Stephan T. Lavavej put it in The Future of C++:
Aside from the elevator controllers and supercomputers, does performance still matter for ordinary desktops and servers? Oh yes. Processors have finally hit a brick wall, as our Herb Sutter explained in 2005 at http://gotw.ca/publications/concurrency-ddj.htm . The hardware people, who do magical things with silicon, have encountered engineering limitations that have prevented consumer processors from steadily rising in frequency as they have since the beginning of time. Although our processors aren't getting any slower, they're also not getting massively faster anymore (at least, barring some incredible breakthrough). And anyways, there isn't plenty of room at the bottom anymore. Our circuits are incredibly close to the atomic level, and atoms aren't getting any smaller. The engineering limit to frequency has simply arrived before the physical limit to circuitry. Caches will continue to get larger for the foreseeable future, which is nice, but having a cache that's twice as large isn't as nice as running everything at twice the frequency.
But let's ignore the mythology that performance isn't an issue. Let's just admit the following truths, and hold them to be self-evident:
But these truths have little or nothing to do with why every programmer should know C and C++.
They have little or nothing to do with why I say: if you want to be a top-notch programmer, you can no more afford to ignore the C and C++ languages than a civil engineer can afford to ignore the difference between a plumb line and a snap line, a right angle and an oblique one.
By saying that, I'm not implying that I consider myself to be a top-notch programmer. And I'm not recommending that you or your organization start or continue developing in C++ as a way of conducting business. That's a considerably more complex question, and one nobody can really answer but you.
I'm not starting or contributing to a language war here, of any kind. Not even a minor skirmish.
No, I recommend learning C++ for the most selfless and utilitarian of reasons: learning C/C++ will make you a better programmer in your language of choice, whatever it may be.
Ruby. Java. C#. VB.NET. And yes, even Haskell. Whatever you program in: C++ will make you better at it.
Take a typical high-level programmer and immerse him for just a few months in a pot of boiling oil native C++ project:
He'll emerge leaner, tougher, and with renewed confidence in the language of the day, whether it's C#, C++, or Ruby. He'll know, for example, exactly what it means to push a variable onto the stack. And he'll know why, when he tries to allocate and then start accessing an array with 2 million elements, the hard drive churns even though the machine has 4GB of memory.
And when the whole application crashes, and spits out some god-forsaken maintenance error code along with a 4-byte or 8-byte memory address: he'll have some clue what it means, or how to go about finding out what it means.

C++ informs and bolsters your software development skills across the board by acquainting you with the nuts and bolts that underlie every language in the world, almost without exception.
So the next time you have some spare time, pick up a good introductory or advanced
C++ book, dust the cobwebs off of your C++ compiler, and point the nose of that lean, mean, muscle machine out your garage door, through the quaint byways of suburbia, and up into the mountains.
You'll thank yourself for it in the interview room.
51 comment(s)
While I agree learning to drive stick is important, the case for performance is much better made by learning to go parallel like Erlang than by C/C++. Frequency isn't increasing, but number of cores are doubling now--do you really want to miss that with weaker forms of parallelism?
Eric B on Sunday, July 20, 2008C# can actually be more performant than C++, thanks to processor-specific compilation. A little known fact, but true.
Still I agree with the general thrust. All too often the so-called "lower-level" languages get the boot in favor of fancy buzzwords.
Anonymous on Sunday, July 20, 2008The following statement by Anonymous is FALSE:
"C# can actually be more performant than C++, thanks to processor-specific compilation. A little known fact, but true."
This is a Microsoft-sponsored delusion. Take a look at the benchmarks:
http://www.osnews.com/story/5602/NineLanguagePerformanceRound-upBenchmarkingMathFileIO/page3/
Ed K. on Sunday, July 20, 2008Hm, I think studying at least the [url=http://www.amazon.com/Operating-Systems-Implementation-Prentice-Software/dp/0131429388]basics of operating systems[/url] is more important than working with C/C++ to gain a deeper knowledge of the "computer inside". But then C/C++ is probably the second most important thing to learn :-)
Florian Potschka on Sunday, July 20, 2008@Ed K: Not necessarily. There are benchmarks which point both ways. For example, check out:
[url=http://www.grimes.demon.co.uk/dotnet/man_unman.htm]Is Managed Code Slower Than Unmanaged Code?[/url]
I admit that MS wants C# to be perceived as fast, but that doesn't necessarily means it's not. ;)
Anonymous on Sunday, July 20, 2008Oy! You guys are starting a skirmish! heh. However, it is simply not possible for all the managed languages to be faster than native ones. Sure, you can have a smart compiler that takes advantage of each processor's strenghts and weaknesses, but that applies to every other language as well. Oh dear! I've contributed!
Ed M. on Sunday, July 20, 2008Thanks god I started my career with C++ ;-)
David on Sunday, July 20, 2008I'm busy trying to learn C++ at the moment. I know PHP quite well but C++ is a whole load harder. I'm glad I'm learning it though :D
Poker League on Sunday, July 20, 2008C# can be more performance than C++. It is not a Microsoft delusion and is pretty simple to understand. C++ is compiled ahead of time into machine language. At that time a processor target is chosen. This can be P3, P4, PM, etc. along with a host of additional processor features that are available to aid an application with hardware acceleration for things like SIMD, DSP, and other multimedia instructions. Plain and simple, most C/C++ applications are compiled to target the lowest common denominator for the broadest supported PC base. This means the compiler will not take advantage of some newer processor features when optimizing the code. The .NET framework with its JIT compiler is able to tell the platform it is on as it compiles the code at runtime. This is not some fantasy, it's just a consequence of ahead of time compilation vs. just in time compilation. Java could do the same thing...
Anonymous on Sunday, July 20, 2008Question from someone who is currently learning C++ about the first comment: How many people on the planet know Erlang? I've been told that Erlang was like a dead language but apparently you seem to think otherwise. Does anyone use it or is it supported by some group? Thanks
Adam on Sunday, July 20, 2008check out steve yegge's video/blog post about dynamic language optimization: http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html
he mentions that Java is now often faster than C++, especially with multicore. overall, the notion is that just in time compiling can be far more intelligent than precompiling because you are at the horse's mouth
he also points out that attempts to similarly optimize C++ would likely have a lot of difficulty with pointers and memory handling stuff. the language has many unmanaged performance things built into it. so old C++ programs are likely screwed. and when writing a new C++ program that could be JIT'd, you'd best not use those performance things because the JIT compiler will probably be smarter than you about optimizing. but then in that case, you might as well use C#
@Adam: Erlang is sorta like lisp in that it's just been under the radar for who knows how long, but it's still used in serious applications
aoeu on Sunday, July 20, 2008I have no idea how many Erlang users there are. I wouldn't pick a language for performance based on it's current popularity. Instead, read the trends. If the core count keeps doubling say every 18 months and our current status quo is approaching 4 cores, in 4.5 years we're looking at 64 cores. Erlang is massively parallel with no extra effort on the developer's part, so if you compare a single threaded C program to the same in Erlang, you start seeing Erlang as something like 64 times faster (yes, probably somewhat less). That same program continues to run faster and faster exponentially every year, while the C program stays bottlenecked on the clock speed. Erlang is open source and maintained by Ericsson. There are other parallel paradigms (Haskell, Clojure) to look into too.
Eric B on Sunday, July 20, 2008Woops...should have been 6 years in my example.
Eric B on Sunday, July 20, 2008Thanks for the response Eric B. If I'm not mistaken Amdahl's Law is controlling on the matter of how much faster the parallel Erlang program would be in 64 cores than the serial C or C++ program.
I do think that there's probably going to be more adoption of more familiar parallel languages in the future, simply because they are easier to learn and incorporate. I've always thought of OpenMP, a language developed on C, as being the most likely language to be adopted though Cilk could probably catch on just as fast too.
I guess I know some people who work with Lisp but it's always struck me as the highly academic, artificial intelligence development language. I've always thought of Erlang as falling into that mold too.
Adam on Sunday, July 20, 2008I'm confused. Sometimes the article says "C", sometimes "C++", and sometimes "C/C++" -- even though these are very different languages. I would think combining "C#/Java" or "Ruby/Python" makes more sense than "C/C++". Or even "Java/C++", which you point out aren't that far apart.
I've got my copies of K&R and Stroustrup right here, and they seem quite different. Different language features, different design goals, different strategies for writing programs. One is about five times as big as the other.
Are you saying one is as good as the other? Suggesting we need to learn both, and simply slashing them to save space? Pulling in Spolsky's claim about C and squinting so it applies to C++ as well? I don't see any specific features (processes and threads, stacks and heaps, etc.) that are C++-specific.
Anonymous on Monday, July 21, 2008>the case for performance is much better made by learning to go parallel like Erlang than by C/C++.
Everything you say about Erlang is true, but it seems likely that the way towards massive parallelism will be paved by reftrofitting existing popular languages to support "Erglang-style" concurrency, rather than a massive future exodus from C#/Java to Erlang.
[url=http://ulf.wiger.net/weblog/2008/02/06/what-is-erlang-style-concurrency/]What Is Erlang-Style Concurrency?[/url]
>I'm confused. Sometimes the article says "C", sometimes "C++", and sometimes "C/C++"
And to make it even more confusing, sometimes we say "C++/CLI" ;) I think usually people group these together because C is (almost) a perfect subset of C++. Almost any C program can be compiled as a C++ program. I can learn Java without learning a thing about C#, but I can't learn C++ without also learning C. But there are other ways to pair languages as you point out.
James Devlin on Monday, July 21, 2008Erlang is the ONLY SMP language. All others must perish.
Anonymous on Monday, July 21, 2008> That C/C++ is the most performant language in the world, with the exception of assembler itself.
Why do people always think that "low level" means "faster"? This might have been true 20 years ago, but those days are certainly gone.
Sure, you can write assembler code that's at least as fast as C++ code. But usually, you won't. Try it yourself if you like, beating the C++ optimizer with hand-written assembly code is really really hard, unless you're using stuff the C++ compiler doesn't know like SIMD instructions. Why do you think that's the case? Because C++ is on a higher level of abstraction than assembler, the compiler "knows" more about your code, so it can transform it to optimize it for current CPUs in ways a dumb assembler can't. But there are still lots of things it can't do, because C++ is still quite "low level": you still specify exact memory layouts in C++, there's no way to tell if a function has side-effects, is thread-safe, etc. Programming in a language that's on an even higher level than C++, the optimizer could transform your code a lot more, thus make it even faster than typical C++ code (in the same sense that typical C++ code is faster than typical assembler code.)
The main reason why C/C++ compilers yield the high performance they do is because compiler writers spent the last 30+ years perfecting their optimizers for C++. But as the .NET VM and the JVM get more and more mature, we can expect them to produce more efficient code, too.
(That said, I agree with your main point: In order to be a good programmer, you should have some real experience with C, C++ and assembler, for all the reasons you gave.)
Niki on Monday, July 21, 2008In fact, language has nothing to do with if you are a good programmer or not. C++ is so 90-s - and I would say Java/C# are more efficient if you want have things done.
Now if you want to be something more than a lamer, or a coder - learn algorithms. It is so much more worthwhile to learn algorithms and techiques, than to learn C++ just for the sake of it.
P.S. Java deal with threads, sockets and a lot of low level stuff. It just abstract away the mostly useless stuff, which you will rarely need for any job. It sucks at GUIs, where .NET is better thou.
Indiana on Monday, July 21, 2008[i]>The main reason why C/C++ compilers yield the high performance they do is because compiler writers spent the last 30+ years perfecting their optimizers for C++. But as the .NET VM and the JVM get more and more mature, we can expect them to produce more efficient code, too.[/i]
Indeed, in some cases they (JIT compilers) already produce more efficient code. But a managed application's working set is larger and that imposes additional overhead which can't necessarily be optimized away...
[i]Now if you want to be something more than a lamer, or a coder - learn algorithms. It is so much more worthwhile to learn algorithms and techiques, than to learn C++ just for the sake of it.[/i]
I agree. Algorithms are huge, but we still have to learn stuff like:
Foo* pFoo = &fooObject;
So we know what a particular implementation is doing when it takes the address of something and tucks it away, or what an iterator is under the hood.
James Devlin on Tuesday, July 22, 2008For those interested, some more discussion of this this article over at Hacker News:
http://news.ycombinator.com/item?id=251584
Anonymous on Tuesday, July 22, 2008pfft! here in the UK no one drives automatics, everyone learns using a manual transmission (unless you're special) doesn't mean we're all car mechanics though....
Anonymous on Tuesday, July 22, 2008I started out using C++ and now write in mostly .NET languages (C# and VB.NET) I have to say that learning C++ first has made everything so much EASIER in the .NEt world
BC on Tuesday, July 22, 2008I came across this article over at http://joel.reddit.com. This sort of thing has been stated before (as you prolly know) but I like your phrasing and agree, C++ is a seemingly retro but powerful way of bolstering your .NET skills. Anyway, cheers~
Anonymous on Wednesday, July 23, 2008Yeah, learning C is useful is you want to write operating systems or compilers, probably the nearest equivalent of being an auto mechanic. Used to be necessary for race drivers as well, but not any more.
When you specify your program at such a low level, you don't leave the compiler much scope to optimise your high-level intentions. As you point out, the days of single-CPU systems seem numbered, and non-declarative languages just aren't going to have the scope to be optimised for massively multi-core processors. Languages like C will be out of the performance race, but still the necessary lingua franca for mechanics. Learn it so you can talk to your mechanic and understand his diagnoses - and his bill!
Greg M on Wednesday, July 23, 2008I have a question that relates back to the foldbot. In the code you hard coded the X,Y coords to push the Fold button. My question is how did you came up with that? I looked at Spy++ but I didn't see much there that I could use. Was it a program you used or trial and error? Any help would be apprecaited!
Adam on Wednesday, July 23, 2008C/C++ are hardly the fastest non-machine languages. Languages like FORTRAN have been around for centuries (it seems) and for most cases, are much faster than C (simpler call semantics for one). Even super high-level languages like Haskell have been known to produce code which is significantly quicker than even C (due to aggressive optimizations allowed by a pure-functional language). Also, as has been pointed out several times in the comments already, JIT languages can be significantly faster than AOT.
I seem to have misplaced the link, but a well-known developer did a benchmark recently of seven or eight languages, comparing them on a real-world level. It was still a microbenchmark, but the use-case was drawn from his customer's needs, rather than some contrived ray-tracer. The results showed Java way out front - ahead of C++ by quite a margin. I checked the code too, it's not like the C++ was poorly written or anything like that. In fact, all of the language-specific ports were written in idiomatic, performant style. For example, the C++ version used pointer arithmetic and judiciously managed the heap.
I don't challenge that C would likely beat out Java in almost every test, it is a far less complicated language than C++, and certainly less difficult to optimize. However, saying that C/C++ are the fastest languages is ignoring the bulk of research turned out in the last fifty years.
Daniel Spiewak on Wednesday, July 23, 2008To Ed. K.'s post on 7/20: Those benchmarks are from 2004.
In general: I think this article got a little sidetracked on it's points at times. The theme of the article seemed to be whether C/C++ made you a better managed programmer. The questions of performance, etc. is a design decision that's irrelevant to this question.
My 2 cents, after having just changed jobs from C# to C/C++ is that doing the C/C++ has made my coding in C# on the side MUCH better. C/C++ forces you to pay more attention to what you're doing.
ZagNut on Thursday, July 24, 2008Daniel -
I was going to make your point about Fortran, but ... much faster in most cases? Really? No. These days, in most cases, C will get you within about 90% of hand-tuned assembly. Fortran will get you within about 90%. C++ will get you within about 90%. It doesn't usually matter that much.
In particular, it doesn't matter that much between procedural languages, because (a) compilers are pretty good in most cases, so long as they're sufficiently mature and have had enough effort put into the quality of the code generation, and (b) they pretty much use the same internal representations no matter what language they're compiling. There are small differences, such as things that you can express in Fortran that you can't express in C, but those are pretty trivial for performance in most cases.
(Sure, there are pathological cases, but those are generally rare with anything that's had a decade to age and doesn't involve vectorization or similar weird processor instructions, and they tend to be rather dependent on platform.)
Brooks Moses on Thursday, July 24, 2008The analogy is flawed for most parts of the world as automatic is AFAIK only predominant in the US. In Europe most cars are stick shifted, but I don't think that makes the drivers more "car aware" (side note).
Jonas on Sunday, July 27, 2008I agree that one should learn how to program in C, even though I disagree with the stick shift analogy (I'd rather liken it with an old car - one that still had serviceable parts inside ;-)
It's a good idea to learn Erlang in order to play around with advanced concurrency modeling without sacrificing your sanity.
Ulf Wiger on Sunday, July 27, 2008"And he'll know why, when he tries to allocate and then start accessing an array with 2 million elements, the hard drive churns even though the machine has 4GB of memory."
Out of curiosity: why would the hard drive churn? 2 million elements, say doubles, would require 16 MB of memory. I would assume that there will be 16 MB free memory available on such a machine, so swapping shouldn't be necessary, I'd say? What did I miss there?
oliver on Friday, August 01, 2008C & C++ are not different languages, C++ just added stuff to C. The first C++ compilers I worked with were just preprocessors for existing C compilers (Glockenspiel etc). In fact one of the advantages of learning C++ for me was that when I went back to C and Assembler (for embedded projects) I started using OOP techniques in these languages.
By the way, compiled C/C++ code is always faster than any interpreted language. We are sometimes fooled by the apparent speed of Java/C# applications because, of course, these applications spend a large proportion of their time executing code in their run-time libraries which has often been optimized extensively (and are often running native code, in the OS, or hardware assisted graphics cards etc). This is fine for most of the time but will fail you when your own application code has to do some serious heavy lifting.
JudgeD on Monday, September 01, 2008So, suppose the creepy message has Assembly instructions? Perhaps C?
Everybody should learn C++ for the same reason they should learn any language else, which is to learn differents way of thinking, not this just-in-case point.
God, I see so much blogs and coworkers evoking loudly everything they read around without even think about it. Sometime I would just like that our profession could be some kind of competitive-short-term-sport, so it could be easier to prove which theories are shamefully wrong.
Best regards.
me on Thursday, October 30, 2008I wouldn't fully agree that C is the "stick shift" language.
Stick-shift cars require an initial upfront investment of an afternoon or two, but after this, the clutch/gearshift management is committed to muscle memory and becomes automatic. Then, stick-shift drives so much better and is so much more fun than automatic that you never want to go back. I would argue, noting this, that functional programming is the stick shift. It's unfamiliar at first, but becomes preferable after that initial investment.
C is worth learning (I'm reading K&R right now) and I would definitely agree that anyone who wants to consider himself a hacker has to be familiar with it at a deep level, but it's not appropriate for most large projects, and I'm much rather code in a functional language like Lisp or Ocaml.
Mike Church on Thursday, October 30, 2008Try Erlang, it's more spaceship than car.
Pedram on Friday, December 12, 2008I know many are not, but shouldnt ANY university/college educated programmer have some knowledge of this 'low level' stuff? CPU architectures, opcodes/assembly, and compilers (stack frames etc).... Perhaps not all University degrees ae equal?
Anonymous on Sunday, January 25, 2009One thing that I think is getting missed is that almost any language (other than the one you program in regularly)can be used as mind expanding exercise. For me, everyday is C/C++ (I do device drivers under windows). I take all the idiosyncracies in those languages for granted and consider them 'normal', and is shapes my thinking about developing software. Erlang was an off the beaten path language mentioned, but what about some of the functional programming languages, specifically F# (derived from OCAML, derived from ML, available for free from MS)
Pat on Saturday, September 19, 2009Introduced in 1990 as the Nike Air Max III, the Nike Air Max 90 turned more heads with an even larger visible Air unit and greater stability and cushioning. It has been re-released as a retro version with an immeasurable amount of colorways and themes. The Air Max 90 was referred to as the Air Max or the Air Max III until 2000, when it was reissued. It takes its current name from its launch year, 1990.The first colourway produced was the men¡¯s white / black / cool grey / red. It was striking to say the least: the radiant red around the visible Air window exaggerated the thickness of the midsole, and the matching thermoplastic straps and rubber heel patch added to the overall effect. The upper was made of Duromesh, synthetic suede and synthetic leather. The clean lines and dazzling colours made the Air Max a higly sought-after.
Nike Air Max 90 on Thursday, July 08, 2010I loved this post so much. This was great. Keep it up!
Tudor replica watches on Saturday, July 24, 2010PerformingGraham for sale that will create a one-wayswiss watches backlink to your website whichMaurice Lacroix watches is a good point to have. It is Patek Philippe watchesa time-consuming Tag Heuer for saleprocess even though it produces good outcomes U-boat for saleand works. You can also swiss watchespost comments on blogs alongMaurice Lacroix watches together with your link, but make sureGraham watches these blogs are do-follow, which dolce & gabbana handbagsindicates the link that youreplica coach handbags simply post will probably be replica handbagscounted by the search engines jimmy choo replicaas a backlink.There are many thingsversace replica handbags that contribute to online businessjuicy couture replica failure, and the lack of good action thomas wyldeis surely one of the deadliest business-killersdolce gabbana handbags on the net. Take action like by no means chloe handbags replicaprior to, and don’t get struck by analysis paralysisburberry replica. Your achievement lies in your rapid actionchanel replica and how well you apply numerous strategies.
replica watches on Saturday, July 24, 2010nike air jordan 2010 nike air jordan 5 nike air jordan 3 nike air jordan 11 cheap nike air jordan 2 nike air jordan 1 nike air jordan shoes discount nike air jordan shoes nike air jordan 6 wholesale nike air jordan 1 discount nike air jordan 6 nike air jordan 7 nike air jordan 8 top quality nike air jordan shoes 23 nike air jordan 21 nike air jordan 22 nike air jordan 6 rings cheap nike air jordan 22 nike air lebron james shoes nike air lebron james shoes nike air jordan 2010 nike air joredan lebron james nike air jordan 2009 discount nike air jordan 2009 nike lebron james wholesale nike air jordan 2010 cheap nike air jordan 2009 discount nike air jordan 19 cheap nike air jordan 3 discount nike air jordan 18 brand nike air jordan 12 wholesale nike air jordan 2 nike air jordan 13 nike air jordan 14 nike air jordan 6 rings discount jordan shoes7 discount jordan shoes1 jordan shoes2010 jordan shoes 6 rings cheap jordan shoes2 discountjordan shoes3 discount jordan shoes4 jordan shoes uk23 jordan shoes classic bw22 cheap jordan shoes 21 ltd discount jordan shoes20 discountjordan shoes19 jordan shoes 18 uk nike air jordan shoes 17 cheap nike air jordan shoes 16 discount air jordan shoes 15 discount air jordan shoes 14 nike air jordan shoes 3 uk nike air jordan shoes 13 cheap nike air jordan shoes 11 discount air jordan shoes 6 discount jordan shoes 10 nike air jordan shoes 8 nike air jordan shoes 7 cheap louis vuitton bags cheap kobe bryant shoes cheap lebron james shoes .
cheapjordan on Saturday, July 24, 2010The variety links of london items bearing depends on the occasion. You are plain, but you are elegant. links of London sweetie braceletIf presence a groove, especially nightfall outfit, you are allowed to be very gentle in truth. What you should do is to links of london charms choose some delicate sweetie bracelets with your subtle sensation of fashion on Christmas Day, Easter, Halloween and Valentines Day. Discovering links of London friendship bracelet on the net is an excellent choice for your needs and can also assure you may benefit from the best insurance coverage at the best price tag. The links of London braceletis one kind of those brands that basically level the start a time honored design and style and design untreated. links of london necklace and links of london earringswill be the consultant of level and higher personal taste; so many people contain the hopes for donning links of London sweetie bracelets. Nevertheless, in the large price, so most of us cannot pay the big money. links of London friendship bracelets charm bracelets links of london sale charm bracelet silver friendship bracelets links of london charm bracelet
links of london on Monday, July 26, 2010ed hardy, cheap ed hardy, ed hardy clothing, ed hardy outlet, ed hardy jeans, ed hardy bags, ed hardy swimwear, ed hardy shirts, ed hardy tee, ed hardy caps, ed hardy purse, ed hardy board shorts, ed hardy shoes, ed hardy for men, ed hardy for women, ed hardy jeans for women.
cheap ed hardy on Tuesday, July 27, 2010ed hardy, cheap ed hardy, ed hardy clothing, ed hardy outlet, ed hardy jeans, ed hardy bags, ed hardy swimwear, ed hardy shirts, ed hardy tee, ed hardy caps, ed hardy purse, ed hardy board shorts, ed hardy shoes, ed hardy for men, ed hardy for women, ed hardy jeans for women.
cheap ed hardy on Tuesday, July 27, 2010sale4louisvuitton.com supplies the best replica Louis vuitton handbag. ... Friend link : replica watches replica handbags Louis vuitton Handbags replica bags Hermes
Best replica shop online is proud to present more than 5000 Louis vuitton store to shine while walking along the street with her Gucci, Louis vuitton or Chanel?
Best Louis vuitton online shop in www.sale4louisvuitton.com,you can buy New Louis vuitton bags and Prada handbags here. We also provide discount Louis vuitton
louisvuitton4 on Thursday, July 29, 2010Your blog provided us with valuable information to work with. Each & every tips of your post are awesome. Thanks a lot for sharing. Keep blogging.
511 pants on Thursday, July 29, 2010Wholesale NFL Jerseys
Cheap NFL Jerseys
NFL Jerseys
NFL Football Jerseys
Women NFL Jerseys
Kid NFL Jerseys
Super Bowl Jerseys
Super Bowl NFL Jerseys
Throwback Jerseys
Throwback NFL Jerseys
Cheap Throwback Jerseys
Wholesale Throwback Jerseys
Cheap Super Bowl Jerseys
Wholesale Super Bowl Jerseys
youth nfl jerseys wholesale
youth nfl jerseys cheap
nfl youth jerseys
Baltimore Ravens Jerseys
Chicago Bears Jerseys
Cincinnati Bengals Jerseys
Denver Broncos Jerseys
Dallas Cowboys Jerseys
Green Bay Packers Jerseys
Indianapolis Colts Jerseys
Minnesota Vikings Jerseys
New England Patriots Jerseys
New Orleans Saints Jerseys
New York Jets Jerseys
Arizona Cardinals Jerseys
Buffalo Bills Jerseys
Atlanta Falcons Jerseys
Carolina Panthers Jerseys
Cleveland Browns Jerseys
Houston Texans Jerseys
Detroit Lions Jerseys
Jacksonville Jaguars Jerseys
Kansas City Chiefs Jerseys
Miami Dolphins Jerseys
New York Giants Jerseys
Philadelphia Eagles Jerseys
San Francisco 49ers Jerseys
Oakland Raiders Jerseys
Seattle Seahawks Jerseys
Pittsburgh Steelers Jerseys
St Louis Rams Jerseys
San Diego Chargers Jerseys
Tampa Bay Buccaneers Jerseys
Tennessee Titans Jerseys
Washington Redskins Jerseys
Ray Lewis Jerseys
Ed Reed Jerseys
Joe Flacco Jerseys
Terrell Suggs Jerseys
Dick Butkus Jerseys
Greg Olsen Jerseys
Matt Forte Jerseys
Devin Hester Jerseys
Walter Payton Jerseys
Brian Urlacher Jerseys
Lance Briggs Jerseys
Jay Cutler Jerseys
Carson Palmer Jerseys
Rey Maualuga Jerseys
Chad Johnson Jerseys
Demarcus Ware Jerseys
Jason Witten Jerseys
Terrell Owens Jerseys
Felix Jones Jerseys
Marion Barber Navy Jerseys
Marion Barber Jerseys
Emmitt Smith Jerseys
Miles Austin Jerseys
Roger Staubach Jerseys
Troy Aikman Jerseys
Tony Romo Jerseys
Eddie Royal Jerseys
Brandon Marshall Jerseys
Aaron Rodgers Jerseys
A.J. Hawk Jerseys
Donald Driver Jerseys
Greg Jennings Jerseys
Peyton Manning Jerseys
Dallas Clark Jerseys
Robert Mathis Jerseys
Marvin Harrison Jerseys
Drew Brees Jerseys
Marques Colston Jerseys
Pierre Thomas Jerseys
Reggie Bush Jerseys
Jeremy Shockey Jerseys
Tarvaris Jackson Jerseys
Adrian Peterson Jerseys
Jared Allen Jerseys
Mark Sanchez Jerseys
Thomas Jones Jerseys
Leon Washington Jerseys
Brett Favre Jerseys
buynflshop on Thursday, July 29, 2010As a Louis Vuitton cloning master, ReplicaEstore, in more than 6 years, has devoted herself to providing the best Louis Vuitton
wallests & handbags
Price: $33.00. Prada Replica Handbags. Top Louis Vuitton wallet a Swiss Rolex replica is the best Rolex replica we can
find.
best replica louis vuitton onlinein
www.sale4louisvuitton.com ,you can buy New Louis Vuitton outlet online here. We also provide discount
louis vuitton on Thursday, July 29, 2010Go and catch your louis vuitton handbags from here, we will do our best to serve for you; If you're looking for Air Jordan shoes, you may have realized it is a difficult task to find them. We strive to provide you with information on online shoe stores that carry authentic Nike Air jordan shoes; nike shoes unlike a lot of regular running shoes, its flexibility provides a world of comfort on the run or while walking around, buying it from our mall and you will benefit a lot; When it comes to retro, cool designs Adidas does a great job with every sneaker release. At Sole Heaven, we have a really impressive arsenal of adidas shoes to do just the job; It is time for the Gucci fans to make some changes, please treat yourself with a different classic gucci handbags here, that will be a great surprise; Where can you find ugg boots for sale? Learn how smart buyers look for uggs for sale. Find the best online offers for directions.
nike shoes on Friday, July 30, 2010Replica miu miu handbags are not just beautiful and elegant, but it is also at excellent quality and similar design as the real. You will like it once you see it. Now attention please, at our shop, we are holding a promotion. You can buy replica miu miu bags of high quality with the lowest price. Meanwhile, miu miu handbags buying from here you can enjoy free and fast delivery shipping. Welcome to our shop!
miu miu bags on Friday, July 30, 2010