So not really about Visual Studio at all then
Just a lament about the perceived lack of advancement in IDEs. I know that hating Microsoft is a fun sport enjoyed by The Register, but really... Grow up.
So, Microsoft has released Visual Studio 2010. The latest incarnation of Visual Studio had a difficult gestation, with critics pointing to the slowness and instability of the beta release. Installation was an eye-opener: the 2GB ISO was quicker to download than it was to install - not even counting the several reboots required …
"..His reply was that the lack of built-in "code insight" keeps his brain sharp - it forces him to know the APIs he's working with"
I would tend to agree with your mate. Personally, I use jEdit with a couple of plug-ins. IDEs are all very well, but for me, they are a solution to a problem that does not exist. if you can't find your way round the bunch of source code files that you are working with then there's something wrong. Either the thing is written very badly (in which case, a clever IDE that navigates around for you is likely to lull you into a false sense of security and ultimately failure), or you are failing to understand what is going on (in which case, you need to understand more, and NOT hide stuff with an IDE).
IDEs like this are largely unnecessary sugar on the top, and are the reason why some "software engineers" claim to be able to write (say) C++, when in reality, all they know is which buttons to press to build their classes, and then fill in the blanks, without fully understanding what they are actually doing.
I don't buy that argument. It's not a case of staying sharp, it's a case of anything that saves me time means I can be writing better code. IDE alleviates a huge amount of drudgery from building makefiles, managing dependencies, code introspection, error highlighting, source control, and more besides.
A simple example would be if I decide to rename a class in Eclipse. I can rename the class and all callers of that class, in about 3 seconds flat. If I have source control enabled this one call also takes care of that too.
Another trivial example. I write a method in Java and wish to document it. When I type /** above the method Eclipse creates the javadoc template from the method's name, return type, args and any exceptions thrown making it simple to fill in the rest. That documentation is instantly available simply by hovering over the method name.
There are dozens if not hundreds of ways an IDE improves over a standard text editor, let alone one as arcane as Emacs. I'd add that any Emacs user who proclaims IDEs are bad but enables syntax highlighting (font locking), or any other packages for development (integrated make, ctags, gdb etc.) has more or less defeated their own argument. They've constructed a primitive IDE yet other people shouldn't use a more advanced one?
".Net is an also-ran. " Are you sure? Looking around me in the programming industry, I see that C# is becoming incredibly popular for rapid application development.
"But is the result - and the waiting - finally worth it? Hardcore Windows C++ developers will welcome the new release" - but yeah this is right, a lot of C++ purists are waiting for the STL implementation this 2010 promises.
"For everyday use, Visual Studio 2010 is pleasant enough" So whats the problem? "But the problem I have here ... is that this is not so different from what we were doing with the first version of Visual Basic 19 years ago." And why is that so bad? Things don't need changing for the sake of changing. You don't complain that your bicycle hasn't changed in design much in 100 years do you?
"The time is ripe for a brand-new contender to stroll in with something fresh and steal developer mindshare from beneath the leaders' pipe-yellowed moustaches" Yes yes sure, newer is better, maybe google should release some shoddy beta IDE for you to rave about (but never actually have to use professionally).
"Code Bubbles IDE could be just that new contender." Yeah? Want to place a bet on that? It sounds to me like a focus on a trendy fad. I'm not against the idea, but I wouldn't say lack of "code bubbles" was valid criticism of 2010 as a product. t
First, I think real C++ guys will stick with VS2008, because that is itself done in C++ and it does not reduce programmer performance by making her wait for the debugger during single-step.
Regarding LSE & .Net, the level of incompetence with their tech executives ist stunning. A stock exchange must predictably respond to trade orders in less than 10ms nowadays. How one can assure that with a Garbage-collected language is totally beyond my comprehension.
C/C++ and Cobol are the only *real* options for a major stock exchange in 2010.
Maybe The Reg can review Lazarus ? It
* takes about 70 MB to download
* needs no Windows Service Packs
* has a really fast Debugger
* Compiles hundreds of thousands Lines of Code in less than two minutes
Interesting article flawed by some outlandish statements with no basis in fact - unless you're just trolling.
- ".NET is an also ran" - check market share and growth over last few years, and compare advancements in the framework and languages against competitors...
- The link about not using .NET because it's not scalable etc. is incredibly tenuous - the article simply mentions that the solution was written in .NET, but doesn't give details of the flaw - so it's a little unfair to simply blame .NET for this.
No doubt VS2010 is a mammoth application - but then it's not meant to be a hobbyist toy (go get the express edition for that). For enterprise dev, it does everything I need, and more importantly, lets me get it done quicker than I could do in VS2008. Which was better than VS2005 etc. etc.
I'm not some .NET fanboy (although I do use it loads!) - but if you want to criticise the platform, take the time to come up with some decent arguments rather than the above.
I use both .NET (C# and VB.NET), Java and C++ on both Windows and Linux. Apart from the core API's (which, for Java and .NET are *huge*), there are also the large number of 3rd party APIs that I'm required to use.
Personally I cannot remember all of the (probably hundreds of thousands) of methods on the (probably tens of thousands) of Classes and Libraries over those platforms and APIs. Maybe some are capable of this feat, but I hazard a guess that most aren't.
I have a decent knowledge of the basic libraries and classes and know where to find what I want, but for the detail I rely on the IDE to give me prompts and hints.
I suppose if you are a specialist in a large organisation / team and concentrate on a subset of 1 platform then keeping all you need to know in your head is possible, but I work for a small ISV (9 developers in total over (currently) 5 projects and, like many in that situation, do not have the luxury of specialisation.
Maybe there are some superheroes that can keep it all in their heads, but I cannot, and I suspect that I'm not in a minority in that respect.
For me a helpful IDE is essential.
Comparing the two I use most frequently (VS2008 and Eclipse (Gannymede)) I can honestly say I much prefer Eclipse. It gives me the help I require when writing code while VS2008 attempts to straight-jacket you into Wizard generated splurges of code while offering little support when have to go it alone. I have also found the context sensitive help in VS2008 to be next to useless. Highlight a Class / Method, hit F1 and almost a minute later up pops the "help" for the wrong thing. Usually the name is correct but its the wrong Class or Method (e.g right method name but wrong Class or right Class name but wrong namespace.)
The fact that VS2010 appears to have moved further down the bloaty-wizard route doesn't fill me with joy at the prospect of having to migrate to it.
Sure you can bloat it out if you want to, but if you stick with the standard Java IDE you get something which is fast, intuitive and useful. It's not without its faults though such as a poor visual editor and lack of integrated support for Maven but it's still good. I've certainly never felt the urge to move to a commercial variant so I'm just appreciative to get a modern IDE for nothing.
I also use Visual Studio 2008 and while it certainly lives up to the Visual part and is the defacto IDE for .NET and C++ work on Windows, I feel it's a bit antiquated even compared to Eclipse for stuff like advanced refactoring functionality and workspaces.
What a waste of my Monday morning. Sorry but if you're going to slate the IDEs used by 90% of your readers, you should really make sure you've got some good reasons.
I admit VS2010 has some flaws BUT I used to develop everything using Textpad / Edit+ and I guarantee you I'm far more productive with an IDE than without one - So if we're going to do compartisons, how about we all start at the same point?
One comment from an AC effectively destroyed your entire argument against current IDEs:
"No doubt VS2010 is a mammoth application - but then it's not meant to be a hobbyist toy (go get the express edition for that). For enterprise dev, it does everything I need, and more importantly, lets me get it done quicker than I could do in VS2008. Which was better than VS2005 etc. etc."
It allows me to be more productive than VS2008? Sold. I don't get paid to play with pretty toys.
Oh by the way - how much did Code Bubbles pay you for that article?
Why would anyone want to hobble themselves by using an editor which didn't provide API help? The typing it saves alone makes it worthwhile.
Provided you understand the concepts behind the API yo are using, and have a rough idea of what functions it offers (or at least being able to guess that it *must* have a method to do this or that), why would you want to keep the fine details in your memory?
But it isn't just that. Modern IDE refactoring tools save hours of tedious work, and probably encourage code improvements which wouldn't otherwise be done (due to the time and scope for error in doing it manually). Error and warning highlighting are also great time savers, cutting down the compile-and-fix loop.
I started programming when people still used books to look up APIs. I don't miss it.
".NET is an also ran" - depends on what for.
For customising/extending/enhancing many Microsoft and 3rd-party Windows Applications, C# in Visual Studio Tools for Applications (VSTA) is the successor to Visual Basic for Applications.
C# within an existing Application provides the benefits of full-blown modern Windows application development to extend that application to more efficiently meet your business needs.
With C# (vs Visual Basic) you get a C-like/Java-like/C++-like language that many are used to, a modern thriving technology, advanced language features to minimise source-code needed.
So as an extending technology, I would say .net is not an also ran, partly though because one is forced to use it in VSTA (i.e. you don't always get Java or C++ as choices).
But yes, for standalone, from-scratch client application development, server application development: the choices of platform technology, languages and development environments are wide open. So in those areas, yes it is an also ran.
HA HA H-AHAH AHAH AH AHAHAHA AHHAHA HAHA HAH AHHAHHA HAHH AH AAH OMG, laughter is going to kill me. Get your facts straight. The LSE example was ill judged solution decisions, not the technology. You can build serious enterprise apps using .Net and it's a more pleasant experience than using Java.
Technology has moved on - have a read of this from 2005:
http://www.ibm.com/developerworks/java/library/j-jtp09275.html
Explicitly calling malloc and free inside a tight loop makes it easy to see the cost of these operations, but garbage collection can hide this and I expect the allegations of bad performance stem from rookies calling "new Object" without understanding the cost.
My understanding is that a correctly chosen garbage collection strategy (there are some for realtime and low latency systems) will almost always outperform doing it by hand.
As for the rest of the article, horses for courses really. For finding references to a method or variable or renaming methods or classes they're useful, but I'm continually frustrated at how slow my IDE-using colleagues are - there's nothing you can't do with 8 terminals running vi, grep and 15 years of regexp under your belt. Show me an IDE with that paradigm and we'll talk.
What's faster:
void CPPMethod::doSomething()
{
char buffer[200];
for(int i=0;i<200;i++)buffer[i]=_internal_something[i];
...do something with buffer
}
OR
void JavaOrDotNetMethod::doSomething()
{
char buffer[]=new char[200];
for(int i=0;i<200;i++)buffer[i]=_internal_something[i];
...do something with buffer
}
The second one will surely flush your cache if you call this method more than just once. Of course you could do some optimizations like having the buffer "handy" somewhere or the VM/compiler could optimize this special case.
Also, I doubt that you can trump a Smartpointer based heap management. Because the Smart Pointer will IMMEDIATELY and SYNCHRONOUSLY release memory or resources. Very useful if your object contains a file handle or a socket. Now please do that with Java. And please don't tell me there is finalize().
I am using all of VS2008, vi, grep/find, valgrind bash and SVN. I do think VS2008 is the most productive platform, because the debugger is excellent and the code navigation is very quick.
Want to jump to a class declaration ? Right-click and you have it in less than a second. That is simply impossible with grep/find.
I suggest NOT to use VS2010 though, as this is a memory hog like Eclipse and it is also a slug in terms of responsiveness. The very problems of Garbage Collected Languages can be studied by using VS2010 and VS2008 !
Please have your Task Manager open and perform some heavy single-stepping.
Impressive.
It's attention to the ergonomics of software development and how programmers have to shift attention is *very* neat. "Bubbles" move out of the way without having to waste developer time fiddling about with them. Stopping the "workspace" being confined to just what can be shown in a window, making everything persistent etc.
No doubt must of these ideas *have* been tried before in different places but putting them together may change how people develop. It's not how I'd like to do it, but it seems to make the computer a much more *active* assistant in the development process. It's about time people spent less time on what are basically book keeping tasks (who cares what this bunch of files is save as. I just want them re-called and laid out for me when I start it up).
Pity it's Java only though.
I still mourn ObjectMaster http://www.artima.com/forums/flat.jsp?forum=106&thread=158259 although I agree with Eponymous Cowherd that the big productivity gain from modern IDE's is the Intellisense prompting for the API.
CodeBubbles looks like a worthy successor to ObjectMaster in some respects but only if it also allows you to skim through pages of code - OM still stored code in traditional source files and let you drill down to them from its Smalltalk-style 3-pane browser.
How come whenever someone so much as accidentally types three 'e's in a row we get a picture of EEEPC-girl-on-a-beach, YET whenever an article appears mentioning the somewhat abundant bestowage of, um, something, in Visual Studio 2XXX there is NOT an accompanying picture of the very delightful Dawn French wearing, er, not much?
ENQUIRING MINDS DEMAND AN ANSWER!
As far as I know all *successful* realtime traders and stock exchanges use C and Cobol. I personally know of a major European stock exchange that just started the reimplementation of their system in C/C++, Cobol and running on Linux.
The current system uses the same languages and an operating system made by HP, earlier by DEC. Unfortunately this system can't scale sufficiently anymore and must be replaced, despite the fact it is very, very reliable. They simply maxed out what HP can provide.
Only stupid people decide to use .Net or Java for that, as one eventually has to perform a full Garbage Collection run, and that will typically stop the complete process (and all of its threads) for much more than a second. Customers demand a response time of less than 10ms today and about 1ms in the future.
How much memory can "mark-and-sweep" examine in 1ms ? Assume a very fast CPU - 48 GByte/sec bandwidth (Intel Core i7). That's 48MByte in one millisecond. So a process would be considerably smaller (probably just 5 MB) to perform a full GC run and still meet that 1ms deadline.
Maybe it would be possible to design something around this limitation (probably involving some special shared-memory facility, which could not use standard Java/.Net objects), but the much better alternative is just using C++.
Big FAIL for the LSE.
"As far as I know" . . . the problem is that quite clearly you don't. The majority of new-build low-latency applications are built in Java, both in the Exchange space and the low-touch sell-side banking space (that's not to ignore a significant minority of C/C++ development, but a minority it is). Controlling managed memory allocation isn't altogether dissimilar to controlling memory leaks in non-managed memory - rather than releasing the memory you recycle the object, and don't let the GC get its mits on it.
"Only stupid people" ... Nasdaq, Cinnober, LSE, Chi-X and a large number of other major exchanges as well as most of the (newer apps within the) Tier-1 Banks are using managed languages for low-latency high-throughput purposes, either by minimizing or typically avoiding altogether GC through recycling/sufficient memory headroom. It's a little arrogant of you to categorize these organizations as collectively stupid, don't you think?! All of those exchanges achieve consistent sub-2ms performance. Getting down to low hundreds of microseconds is readily achievable with managed languages, without any need to resort to special "shared-memory facilities", whatever they may be! The major 'specialist' tricks tend to be memory management (as described), serialization (the standard performance issue on messaging systems) and RDMA networking.
"Mark and sweep" - as per the above, you can either avoid this altogether or minimize it sufficiently (depending on your target latency distribution - outliers may be acceptable), or restrict yourself to Gen-0 only collections (in which case it's a single segment scan) - but it's worth noting that you don't need to scan the whole process space - just the object reference graph - furthermore there are concurrent GC schemes that can help here.
C++ is usually not a "much better alternative" as the ongoing development and maintenance costs are an order of magnitude higher than managed languages, but it has its purposes for code that does not frequently need to be changed.
.Net vs Java - well the industry has certainly gone down the Java route thus far, although .Net is picking up on the server side. Typically this descends into a Windows/Linux discussion - all I'll say here is that HA is not really a relevant differentiator - given that you have to design for sub-second process and server failure in order to provide HA on commodity hardware/OS in the first place, the relative stability (within reason) of the OS is not of massive significance - it'll just determine how often your redundant apps/hardware/failover-mechanisms are used, which again, is a latency profile question.
"rather than releasing the memory you recycle the object, and don't let the GC get its mits on it."
"using managed languages for low-latency high-throughput purposes, either by minimizing or typically avoiding altogether GC through recycling/sufficient memory headroom."
You appear to be saying that having shifted to these languages they then proceed to bypass on of their supposed *key* features (supposedly) for improving maintainability and security? So what features of Java do make it useful in this context?
I know Java is fairly common so hiring staff with the skillset should be easy but I wonder if there are other (non GC) languages which would give just as good a result. It's an enquiry, not a criticism.
"The current system uses the same languages and an operating system made by HP, earlier by DEC. Unfortunately this system can't scale sufficiently anymore and must be replaced, despite the fact it is very, very reliable. They simply maxed out what HP can provide."
It's called VMS and was designed to support the DEC Alpha based servers for about 30 years.
AFAIK it got to support 64 processors with failover. Individual processors crash (and are re-booted) but the app never fails.
BTW the core development team were hired by MS and provided most (all?) of NT.