Google executive frustrated by Java, C++ complexity

This is a discussion on Google executive frustrated by Java, C++ complexity within the General Discussions forums, part of the Community Boards category; "Today's commercial-grade programming languages -- C++ and Java, in particular -- are way too complex and not adequately suited for ...

  1. #1
    In my head happyclown's Avatar
    Join Date
    Dec 2008
    Location
    In my head
    Posts
    391

    Google executive frustrated by Java, C++ complexity

    "Today's commercial-grade programming languages -- C++ and Java, in particular -- are way too complex and not adequately suited for today's computing environments, Google distinguished engineer Rob Pike argued in a talk Thursday at the O'Reilly Open Source Conference."

    Google executive frustrated by Java, C++ complexity | Developer World - InfoWorld
    OS: Linux Mint 13(Maya) LTS 64 bit.

  2. #2
    and the hat of sweating
    Join Date
    Aug 2007
    Location
    Toronto, ON
    Posts
    3,545
    I really hate the trend of all these new programming languages coming out now all using Dynamic Typing. I'm glad Google is making one that has Static Typing; although I don't know anything else about it, so I'm not sure if it'll be better or not. Dynamic Typing sucks!
    "I am probably the laziest programmer on the planet, a fact with which anyone who has ever seen my code will agree." - esbo, 11/15/2008

    "the internet is a scary place to be thats why i dont use it much." - billet, 03/17/2010

  3. #3
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Portugal
    Posts
    7,435
    Pike does have a point, doesn't he?

    Although, speaking for C++ I don't see exactly how the language has become more complex since it isn't updated since 2003, I think he probably wants to say that as applications have become more complex and development cycles shorter and more stringent, C++ has become increasingly less appealing. This is only evident because a comparison can be made today to faster development programming languages that deliver acceptable results in less time and with less costs and where any loss of performance is often not meaningful.

    He touches another important aspect, IMHO: new technologies (especially multi-processors) have put an enormous strain on C++ developers, who on top of an already exigent language, often have to follow a thread-based model -- that quite frankly isn't precisely the sexiest cat in a C++ programmer's arsenal of tools.

    I'm not exactly sure what Pike wants to say. I already know the sky is blue. Probably he needed just an excuse to talk of Go yet again. But complex, or not, C++ has markets where no other language dares to touch, while remaining ubiquitous across the almost entire spectrum of programming tasks.

    Power and flexibility comes at a cost. For C++, added complexity in the face of today's programming challenges is becoming evident. But necessarily, simplicity and focus have their cost too. And for languages like Go, C#, or Java that cost is their lack of capacity to solve all computational problems of today.
    The programmer’s wife tells him: “Run to the store and pick up a loaf of bread. If they have eggs, get a dozen.”
    The programmer comes home with 12 loaves of bread.


    Originally Posted by brewbuck:
    Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

  4. #4
    C++まいる!Cをこわせ! Elysia's Avatar
    Join Date
    Oct 2007
    Posts
    22,537
    As an illustration of the complexity of such languages, Pike showed a few examples of C++ code. One example was of a variable declaration that stretched nearly across an entire line of the screen.
    Hmmm? Perhaps they haven't thought of auto.
    This makes mo wonder if they really know the language and can use it well.
    I'd really like to see these ... examples that were shown, though.

    Instead of trying to make it better, though, they just go scrap it and make a new language. Right. Good luck, Google. Let's see if you can do any better than any other experienced developer out there who has created a language.
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

  5. #5
    Registered /usr
    Join Date
    Aug 2001
    Location
    Newport, South Wales, UK
    Posts
    1,262
    To me, this is like saying:-
    "Well, we've reached an impasse, folks. Surgical procedures are now way too complex for today's operating rooms. We're gonna have to build all kinds of so-phisticated robots to do the hard work for us..."

    (Note that the above is technically accurate!)

    Properly crafted C++ code (and presumably Java code as well, I haven't seen any myself so far) brings together lots of small little units and packages them into larger interfaces that make working with them easy.

    I can understand that development cycles are being squeezed in many places, but this could so easily be solved by seasoned programmers who are able to get the most out of their time. Inexperienced programmers will likely spend too much of theirs with their heads buried in books learning about so-and-so API.

    The real problem therefor is that the veterans who can drive development aren't cheap.

  6. #6
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Portugal
    Posts
    7,435
    Quote Originally Posted by SMurf View Post
    but this could so easily be solved by seasoned programmers who are able to get the most out of their time.
    Absolutely!
    I believe C++ programmer qualification level requirements have risen through the years.

    As a professional C++ programmer with only 4 years of experience in the programming language I often feel myself a fish out of the water. I'm very aware today I don't fit in the the market. While I do end up bringing results, it's very obvious to me I don't bring in exceptional work. The type of work that, due to its complexity and vital significance to the company business, should be demanded of me by my company... but isn't.

    Blaming the programming language for its complexity when faced with complex projects could be the easy thing to do. But it just doesn't hide the fact that I know that instead I should blame myself for not taking my apprenticeship of the programming language to the next level. (neither I feel motivated to do so by my company... which really only augments the problem).

    And companies don't see this either. The fact they need to start hiring for excellency is rarely accepted, when they have a wide market of cheaper, but unqualified, labor force.

    Pike doesn't seem to want to see this either. He wants to fight it by creating a new programming language that is said to be easier, instead of fostering the idea that the days of unskilled programming should come to an end.
    The programmer’s wife tells him: “Run to the store and pick up a loaf of bread. If they have eggs, get a dozen.”
    The programmer comes home with 12 loaves of bread.


    Originally Posted by brewbuck:
    Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

  7. #7
    Disrupting the universe Mad_guy's Avatar
    Join Date
    Jun 2005
    Posts
    258
    I was probably expected to post in this thread by a couple people, so here it goes!

    Quote Originally Posted by cpjust
    I'm glad Google is making one that has Static Typing; although I don't know anything else about it, so I'm not sure if it'll be better or not. Dynamic Typing sucks!
    Indeed, statically typed languages are awesome. Unfortunately, Java, C++ and Go (google's language) all have totally crappy type systems by modern standards. But it's better than nothing. Go actually doesn't have user-defined generic types at all, and they claim that in practice they've said it's not necessary, but I'm not convinced. Go also has very very weird semantics in a couple of places that are kind of ridiculous.

    Quote Originally Posted by Elysia
    Hmmm? Perhaps they haven't thought of auto.
    This makes mo wonder if they really know the language and can use it well.
    I'd really like to see these ... examples that were shown, though.
    The fact that they added auto in C++0x is a total boon because it makes lambdas and iterator types very easy to express, and involves much less typing. But this kind of admits there was a problem in the first place (lack of type inference, which is all auto does) doesn't it?

    The real problem I think pike is hinting at here is that C++'s type system combined with its namespace system overall results in a type-level language that is incredibly verbose and non flexible, yet barely manages to fit within the realm of reality and usability. The verbosity is just one aspect that makes it so much more unbearable because you have to remember to use `long::namespace::name<other::long::type::name>::i terator' just for the type of your iterator.

    Then you get to the type system. I regularly like to manage problems by modeling them with types, in order to let the compiler do some of the checking of static invariants for me - I do this all the type in languages with concise and expressive type systems. But it's such a pain in the ass in C++ I don't even bother because the type language is so ridiculously limited while still being some way usable; instead I end up on the side of just attempting to design my code in such a way it is almost 'correct by construction', but this is exactly what type systems are there to help you do in the first place!

    Oh, and then let us not forget the fact that C++ is so insanely hard to parse that it pretty much makes the realm of refactoring or static analysis tools non-existent, unless you're willing to pay hefty for commercial solutions (which are in some ways still limited.) Because parsing requires semantic analysis, and macro expansions just make things that much more complicated, pretty much nothing currently aside from mozilla's Pork project can even come close to real life C++ refactoring. The situation is changed now that there is Clang (as it is a library as well as a compiler,) but this does not change the fact that semantically and syntactically C++ is extremely complicated, making any sort of automation or tool support very tough. If you want to learn more about this, I highly suggest watching this video of a Mozilla employee and his job building tools for static analysis of C++: Large-Scale Static Analysis at Mozilla on Vimeo.

    Quote Originally Posted by Elysia
    Instead of trying to make it better, though, they just go scrap it and make a new language. Right. Good luck, Google. Let's see if you can do any better than any other experienced developer out there who has created a language.
    Why couldn't they? Your sentence explains exactly why they could: because Google is a company, and an 'experienced developer' is only one man. If anybody has the resources to do new technology and promote it, it is them. Rob Pike is a pretty damn smart guy too (you have him to thank for many things.) They are using Go in several places inside Google. Despite this, Go technically falls flat in some areas and lacks in others. But it seems to work well for what they want: a reasonably simple low level systems programming language. Whether or not it's useful for anybody outside of Google has yet to be seen, but even if it doesn't, they don't really seem to care.

    Still, despite this, if anybody had the ability to 'do better', it would be them. I don't know why you seem to think this is an outrageous goal given their resources.

    Quote Originally Posted by SMurf
    I can understand that development cycles are being squeezed in many places, but this could so easily be solved by seasoned programmers who are able to get the most out of their time. Inexperienced programmers will likely spend too much of theirs with their heads buried in books learning about so-and-so API.
    I have no idea what you mean by this, but I can guarantee you that putting your head in a book to learn about 'so-and-so' API is not the hallmark of an 'inexperienced programmer' or anything. API docs are the bread and butter of any developer. You're just drawing some kind of weird false dichotomy here.

    Quote Originally Posted by SMurf
    The real problem therefor is that the veterans who can drive development aren't cheap.
    Okay, this is wrong on a couple of levels. The fact of the matter is in the programming industry, crap floats to the top. If you have 5 companies, and 100 applicants to each of them, I'd bet you $10 that at least 50 of those applicants at each company are in fact the same people. Why? Because they suck. So they stay on the job market trying to find someone to pick them up when they have no skills. We see this all the time - 95% of interviewees are such crap it's insane, it's no wonder they will never get hired.

    In contrast, good engineers are rarely on the market looking for jobs for long. They can pretty much decide where they want to go, in fact, because they have skills people want. Programmer salaries really aren't outrageous by any means because employers understand that when you find good engineers, you have to pay for it, because simply put, they aren't cheap. That's the way it is - nobody really complains that you have to pay programmers (especially experienced developers) so much, they complain you can't find good ones because they get drowned out completely by all the other crap lying around.

    In fact, I'm pretty much evidence of this, because I was hired onto my first programming job making a very hefty salary with benefits that put me pretty easily far far above the average 25-30 year old dude with a bachelors in the US (CS or not,) and this is when I was 19. Why? Because I knew and showed them I had excellent skills (and they agreed) and was a valuable asset that doesn't come frequently or cheap, autodidact or not. And so I was hired immediately (as in, 1 hour after the interview) and paid accordingly with what I asked of them when they confronted me about it (and I didn't ask for cheap, I actually went a little higher than I probably could have otherwise.)

    It has nothing to do with salaries, or how expensive experienced engineers are. Back to the point: Pike is discussing the problems and ideas he has about how the technologies we use in our field, in particular, programming languages, and trying to map out a solution to these problems. He is not discussing and thinking about this because he "had a hunch", he is discussing this and thinking about it because these problems with our programming languages have real world implications and consequences that adversely affect even the most highly skilled developers and teams, even a place such as Google. And they're problems that can be solved, too. Do you think he's just making it up or something? I'm afraid I'd have to take his word over yours in this case.

    edit: oh my, my 256th post!
    Last edited by Mad_guy; 07-24-2010 at 08:29 AM.
    operating systems: mac os 10.6, debian 5.0, windows 7
    editor: back to emacs because it's more awesomer!!
    version control: git

    website: http://0xff.ath.cx/~as/

  8. #8
    C++まいる!Cをこわせ! Elysia's Avatar
    Join Date
    Oct 2007
    Posts
    22,537
    Quote Originally Posted by Mad_guy View Post
    The fact that they added auto in C++0x is a total boon because it makes lambdas and iterator types very easy to express, and involves much less typing. But this kind of admits there was a problem in the first place (lack of type inference, which is all auto does) doesn't it?

    The real problem I think pike is hinting at here is that C++'s type system combined with its namespace system overall results in a type-level language that is incredibly verbose and non flexible, yet barely manages to fit within the realm of reality and usability. The verbosity is just one aspect that makes it so much more unbearable because you have to remember to use `long::namespace::name<other::long::type::name>::i terator' just for the type of your iterator.
    I don't see how it could be different. Perhaps you have an idea? I would be very interested in hearing it.

    Then you get to the type system. I regularly like to manage problems by modeling them with types, in order to let the compiler do some of the checking of static invariants for me - I do this all the type in languages with concise and expressive type systems. But it's such a pain in the ass in C++ I don't even bother because the type language is so ridiculously limited while still being some way usable; instead I end up on the side of just attempting to design my code in such a way it is almost 'correct by construction', but this is exactly what type systems are there to help you do in the first place!
    Do you have examples? I'd love to see such things.

    Why couldn't they? Your sentence explains exactly why they could: because Google is a company, and an 'experienced developer' is only one man. If anybody has the resources to do new technology and promote it, it is them. Rob Pike is a pretty damn smart guy too (you have him to thank for many things.) They are using Go in several places inside Google. Despite this, Go technically falls flat in some areas and lacks in others. But it seems to work well for what they want: a reasonably simple low level systems programming language. Whether or not it's useful for anybody outside of Google has yet to be seen, but even if it doesn't, they don't really seem to care.

    Still, despite this, if anybody had the ability to 'do better', it would be them. I don't know why you seem to think this is an outrageous goal given their resources.
    What I see is: Oh, this wheel is slightly imperfect. Let's create a new one from scratch!
    What is the problem with that? Well, there are many. Aside from the fact that creating a new one takes a lot of time, how can you be sure that it will work reliably or good?
    Perhaps it will work well locally. That's fine. That's what it was created for, after all. But then, it's a small language that's used internally. No one outside knows it, so the company has to train every programmer to use it. Massive resources there.
    But then other problems arise. Interoperability with other languages? How about people outside of Google? How should they learn this new magical language?
    Heck, what if every company did the same? We'd have thousands of small languages! That would be a total nightmare!
    So inevitably, Google would need to push it into a standard. To make it widely accepted and used. And that is where the problems come in. What makes you think Google can make a language that is better than all other standard languages already available? Google who creates a language from scratch, with no prior experience, is developing a new language. But if the languages out there that have been created by other experts with years of experience falls short, how do you suppose Google's language won't fall short?
    Point is, instead of trying to reinvent the wheel, shouldn't they try to "fix" the existing languages instead? C++ is an open standard. All they have to do is join the standard committee. Submit proposals. Discuss. Fix. Anyone can do that.
    Granted, in some languages this may be a little difficult, since they're not open, but C++ is perfectly open.
    So instead of reinventing the wheel, how about pouring all that experience and ideas into an existing language instead of creating a new one?
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

  9. #9
    Registered User whiteflags's Avatar
    Join Date
    Apr 2006
    Location
    United States
    Posts
    7,657
    Quote Originally Posted by Elysia View Post
    What I see is: Oh, this wheel is slightly imperfect. Let's create a new one from scratch!
    What is the problem with that? Well, there are many. Aside from the fact that creating a new one takes a lot of time, how can you be sure that it will work reliably or good?
    Perhaps it will work well locally. That's fine. That's what it was created for, after all. But then, it's a small language that's used internally. No one outside knows it, so the company has to train every programmer to use it. Massive resources there.

    But then other problems arise. Interoperability with other languages? How about people outside of Google? How should they learn this new magical language?
    Perhaps you've never heard of The Go Programming Language ? This is not some top-secret USDOD FUBAR technology.

    Quote Originally Posted by Elysia
    So inevitably, Google would need to push it into a standard. To make it widely accepted and used. And that is where the problems come in. What makes you think Google can make a language that is better than all other standard languages already available?
    [...]
    All they have to do is join the standard committee. Submit proposals. Discuss. Fix. Anyone can do that.
    Yeah, well, that's just, like, your opinion, man. Google owns Go. As you say it's a small language that was created for what they need and used internally. Opening it up to international standards -- effectively putting Go in public domain -- is asking for executive meddling and absurdly powerful councils to come in to being and add nonsense to your tight language.

    Languages are tools and there are already innumerable toys around. Someone makes something that's not a toy, and people freak out and come to the defense of their highly entrenched, obviously threatened favorite language.

    I bet Google people already have submitted stuff to the C++ standards committee. Anyone can do that. It doesn't sound like Google thinks wheel is slightly imperfect. Even if it were possible to morph C++'s features into something easier to parse and learn, it would take a long time because of the bureaucracy around C++ standards. It may never actually happen. Now how does a new language sound?

  10. #10
    C++まいる!Cをこわせ! Elysia's Avatar
    Join Date
    Oct 2007
    Posts
    22,537
    It will take an even longer time to create a new language.
    And is Google really promoting this language? If it is, then it will face these problems sooner or later.
    And really? Garbage collected? Systems programming? That's just asking to fail.
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

  11. #11
    Registered User whiteflags's Avatar
    Join Date
    Apr 2006
    Location
    United States
    Posts
    7,657
    Go is here and now. I don't see why they have to pimp an internal tool, if all that will do is cause problems, if what you believe is right. In that case, it would be the most bass ackwards action so why would you encourage or care for them to do that. You're not making any sense.

  12. #12
    Registered /usr
    Join Date
    Aug 2001
    Location
    Newport, South Wales, UK
    Posts
    1,262
    Quote Originally Posted by Mad_guy View Post
    I have no idea what you mean by this, but I can guarantee you that putting your head in a book to learn about 'so-and-so' API is not the hallmark of an 'inexperienced programmer' or anything. API docs are the bread and butter of any developer. You're just drawing some kind of weird false dichotomy here.
    Example: Because I have written quite a few (amateur) Win32 applications over the years, I can create new applications using my head as a reference instead of MSDN. You can hypothesize from this that over a number of 7.5 hour days, where the objective is to develop a Win32 application, that I am likely to be more productive than someone who hasn't played about with things custom window messages, synchronization objects, etc.
    I am not inherently any better at dealing with these mysterious "complexities" that people keep banding about ("Wow, a really long variable declaration! I'm so scared! There's no hope for this project now, I say we can it and make cheap Scandinavian-styled wood furniture instead" ), but if you look at this from a suit's perspective, chances are I will cope with them better.

    Quote Originally Posted by Mad_guy View Post
    That's the way it is - nobody really complains that you have to pay programmers (especially experienced developers) so much, they complain you can't find good ones because they get drowned out completely by all the other crap lying around.
    Exactly. The people who could make this complexity go away are too scarce. Changing the programming language is the long-winded solution compared with improving education and professional standards. I made my initial comparison with surgery/medicine for a reason.
    Quote Originally Posted by Mad_guy View Post
    Back to the point: Pike is discussing the problems and ideas he has about how the technologies we use in our field, in particular, programming languages, and trying to map out a solution to these problems. He is not discussing and thinking about this because he "had a hunch", he is discussing this and thinking about it because these problems with our programming languages have real world implications and consequences that adversely affect even the most highly skilled developers and teams, even a place such as Google. And they're problems that can be solved, too. Do you think he's just making it up or something? I'm afraid I'd have to take his word over yours in this case.
    Oh I see... he's really really v. important, so I must automatically agree with everything he says?

    Do you not think that perhaps he is pushing his company's idea for wider acceptance? Obviously such an exalted engineer ought to be immune to scrutiny.

    Does anyone remember asking for .NET?

  13. #13
    C++まいる!Cをこわせ! Elysia's Avatar
    Join Date
    Oct 2007
    Posts
    22,537
    I quote:
    Google's Rob Pike makes the case for simpler programming languages at the OSCON open source conference
    In order words, they're marketing their new language. Which will make them run into the problems I mentioned.
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

  14. #14
    Registered User whiteflags's Avatar
    Join Date
    Apr 2006
    Location
    United States
    Posts
    7,657
    May that be their worst obstacle.

  15. #15
    Super Moderator VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,596
    I realize C++ isn't as popular as it was years ago as the preferred programming language. However, it still looks quite nice on a resume. To supplement it though I have also been doing quite a bit of programming in C++/CLI and C#. I absolutely won't do Java or VB and the Windows market seems to be trending towards C# quite a bit anyways. Given that there are literally billions of lines of great C++ out there that companies won't want to re-write I'm betting they might need someone with my skill set to write the 'bridge' between their older C++ and newer C#. It is not my job as a programmer to preach to the higher ups the value of C++. If they want to use language A or B they are going to use language A or B for all the right or for all the wrong reasons. There is nothing in the world I can say to change that.

    My personal language preference is C++ of course and I don't buy for one minute that C++ is overly complex or what have you. I do think that we have a lot of ignorant computer programmers being thrown into the mix that are making false claims about languages they just suck at....but again I digress. No one stops using a torque wrench to torque down bolts because they find the tool overly complicated. There are analog torque wrenches, digital, and some that just click when the torque is reached. However there is still a bit of skill involved in knowing the tool and knowing how to properly use it. The same is true of programming languages. As an example if I were to pick up a violin and start playing you would all probably run and hide for cover because quite frankly I would suck. But if a master violinist picked up the same violin he/she would create sweet music with it. IE: A fool with a tool is just that....a fool with a tool. It doesn't mean the tool is outdated, badly designed, or what have you.

    I have no doubt that if we took the members of this forum and could actually decide on something to build and we built it in C++ the development time would be no different than if you took an equivalent bunch of people with equivalent skill in another language and coded the same program. Too many times I see people making decisions based on the rumor mill that this language is hard or costs more to develop in when the real crux of the problem is the skill level of those doing the programming and not the complexity of the language. Put me on a pure .NET 4.0 C# project and I would need some up-time to get to the more advanced stuff. Put me on an equivalently difficult C++ project and I could probably hit the ground running. In my extremely limited professional experience most of the project time that is wasted seems to be wasted because someone in the chain of command suddenly wants to make huge design decisions in the middle of the project. That has nothing to do with the language of choice. So my point is that companies that cannot make C++ work for them probably won't do any better with other languages. Languages are tools and none of them fix management related issues.

    As for Go....it looks like just another language or tool to throw into the mix. I'm not overly excited about it and I'm not overly negative about it either. If the language or tool can make me money then I'll use it. I realize that Java and VB can make me money but hopefully my other skills are enough to keep me from 'having' to make money off of VB and Java.

    Read the title of the article.....Google executive....that's far enough for me. That does not mean the developers share his opinion. All of us realize that just b/c those above us see something a certain way does not mean those down in the trenches of the code see it the same way. All the exec is doing is the classic:
    • Create a 'problem' that may or may not exist
    • Introduce a solution or product to solve the 'problem'
    • Make tons of money in the process
    Last edited by VirtualAce; 07-24-2010 at 01:00 PM.

Page 1 of 3 123 LastLast
Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Java vs C to make an OS
    By WOP in forum Tech Board
    Replies: 59
    Last Post: 05-27-2007, 03:56 AM
  2. C#, Java, C++
    By incognito in forum A Brief History of Cprogramming.com
    Replies: 10
    Last Post: 10-05-2004, 02:06 PM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21