First, I work for a small company and am responsible for all software development, from embedded firmware written in asm/C to Windows GUI applications written in VB.NET. Because of the variety of software development duties I am required to perform I think I have gained a unique perspective that lead me to realize that the gap between these two disciplines is growing ever wider, and I began to wonder what the consequences of this would be. It wasn't long ago that the term "programmer" meant something very concrete, very well defined. There wasn't too much wiggle room in the definition, you either wrote in assembly or you wrote in one of the few compiled languages that existed at the time without much reliance on libraries, frameworks, toolkits, API's, etc. Now, however, we have a seemingly infinite variety in methods of software development which involve various aspects of what I would call "programming", but many of them have strayed so far from what it used to be it is becoming and extremely ambiguous term. We still have the assembly guys, and the lower level C guys using nothing but the STL, but then on top of that you have things like java and VB and .NET and C# and various scripting languages, all of which are built on top of large collections of pre-built code that abstracts the interaction of the program with the hardware it is run on to the point that most developers using these tools have no idea how their code actually works. What's even worse is that often times the code base that these things are built on is a shaky foundation to begin with. I can show you more than a couple of examples of known bugs in the .NET framework that Microsoft has acknowledged but has refused to address until the next major release, which could be years from now. Now, don't get me wrong, I understand the importance of not reinventing the wheel every time you want to make a quick windows GUI program and, having manually implemented the Win32 API in C, appreciate the simplicity of dragging components and controls onto your form in VB and having code "skeletons" created for you automatically... But that and things like that cannot be the extent of your knowledge. From working with others I have seen that a lot of people who primarily write in these high level languages using libraries and API's would have NO idea how to recreate the parts of the code that are written for them, and this is where the divide that I am talking about begins. As far as I can see, there are now two kinds of programming. Programming for end users, and programming for the people who write programs for end users. Think of it like lego's, an analogy I have used before on here. The people who develop the API's/toolkits/libraries/frameworks/etc. are the manufactureres of the lego bricks. The people who use those libraries and API's to piece together end user applications are the children who build things with the lego bricks. They may have no idea how the lego bricks are built, nor could they build ones in a custom shape to fit their particular need, but they can connect them together in various combinations to make crude, sharp edged, representations of what they want to convey. I guess that's all I have to say, this is a half rant half "what do you think" kind of thing, if anyone has anything to add I would be very interested.