This really depends on your target application space.
Desktop apps have been written in everthing from Java to VB to C++ to ASM, and even occationally "Good 'ol Boy" basic.
You should let the application drive the technology you need to develop it.
You probably aren't going to write a 3D video game in VB. But then again your not going to write a account package in ASM.
Edit:
**Know** your customer.
**Know** your application.
**Know** what algorthms are necessary to implement your application.
**Know** your requirements and goals up front.
**Know** the platform. (Win32, Mac0S, Linux, JavaVM, etc...)
Evaluate tools that will help you acheive project requirements and goals.
Design your software.
Implement your software.
One other note occured to me. While it is import to start with a clear definition of your requirements, you also need to be aware that requirements, may be in Flux during the development process depending on your customer. Manage scope creep as it occurs, or it will bite you in the end.