I am developing software since about 25 years - I started when I was about 10 and in these times there were either the annoying line numbers you had to write on the start of each line and then there were the gosubs and gotos. IDE's weren't existent - just a very basic editor with an interpreter included. Later developing with other languages like C or Clipper I remember school times when compiling and linking took at least 10 minutes for a bigger project. One typo and again waiting - awful!
The good: Nowadays development is wonderful in comparison to the early eightees. There are comprehensive integrated development environments (IDE) with debuggers and refactoring, code and syntax highlightening as well as graphical user interface design (GUI) and much much more. So it is wonderful and therefore I can't understand that some guys still prefer using a text editor and compiler.
The bad: In relation to the older times I mentioned above IT is developing much faster and you could stay learning over and over again never starting getting productive. Programming languages got new structures like delegates, generics and exceptions for example. Let me take the exceptions as an example: I wondered what they are good for when I first heard about them. It was something that about twenty years I could perfectly live without. But I thought that it is only my defense against something new and so I tried to use them in a first few tests. But from my gut feeling I don't like them. Today I found - by accident an article that delivers perfectly the logical reasons against using them (see about Exceptions at Joel on Software). The annoying thing here is that the beginner get told to use them and you read it also in books. Only with a lot of experience and reading a lot of different opinions you can well destinguish which of all that new stuff is really important and what should be avoided or can be ignored.
The ugly: As mentioned not all of the new stuff is really necessary - but hell, I don't have to use all that, I can pick the cool stuff only, isn't it? - Unfortunately some things in IT really developed in an ugly way. One good example is the installation of software: In former times using DOS (that was the OS most people had at home) you only had to copy all the files on the disc to a folder and start it from there. Another example: Restoring the system was basically copying everything back from the backup tape or from the backup disks (the only bad thing was that you had to be a disc jockey). Not only that a simple copy operation is not sufficient any more because some runtime or other precondition is required, in addition to that there is dll or dependency hell. You have either a lot of shared libraries which are maybe slightly incompatible or your program is growing because of the large amount of dependencies of the dependencies and there must be programs written to create the setup program (or package) for putting everything necessary together. Well, and if something gos wrong you start the big search which of the 50 components is the guilty one and then implement a dirty hack workaround because you have no hope that the 3rd party will fix that in time. My only hope here is Linux - I hope that the communities continue developing into the right direction(s).