I recently got a AudioVox SMT5600 [audiovox.com] SmartPhone. This phone runs Windows Mobile, and includes the .NET Compact Framework. I wrote a program for it in C# using Visual Studio .NET 2003.
You need to download some additional libraries from the Microsoft web site to start programming.
If you know .NET (C# or VB.NET), writing a SmartPhone application turns out to be very easy. The main limitation is that the .NET Compact framework is a very stripped down version of the complete framework. Frequently in the full framework, there are a dozen overloads of a method. In the Compact Framework, there might be one or two. Also some of the classes are not represented at all--for example there are no classes for reading and writing to the registry (although it can be done through Windows API calls). Presumably as processor speeds and memory increase on these devices, they will receive a fuller implementation of the .NET Framework.
Still, I didn't have much trouble. The range of controls available for the Windows Mobile is quite limited, and the screen size is very small, but it was not difficult to create a UI. I did a fair amount of GDI+ to create the interface, which worked almost exactly the same as on a regular Windows application (see Charles Petzold's Programming Windows, ISBN 0735613702, for an excellent description of GDI+ programming).
The main difference between the SmartPhone and other PDAs is that you don't have a touchscreen. You interact with the SmartPhone through the buttons on the phone. The camera and the microphone are additional programmable input devices. You can program all the buttons, but mainly you use the two "soft buttons" just under the screen. The left button performs some action, while the right button usually brings up a menu.
The phone has only one font, Nina, that shows up in the Windows directory. However, I think that Arial is also available, maybe included in the Windows libraries themselves.
You do all the programming on a desktop machine, then download the program onto the phone using a USB cable and the ActiveSync program. You can also test using the SmartPhone emulator that shows a phone on the desktop machine.
While in theory, a SmartPhone application could work on other implementations of the .NET Framework (such as a PDA) without change, in practice you probably would have a slightly different interface.
Overall, I found the learning curve to do a SmartPhone application to be quite shallow since I already knew .NET. There may be harder things if I have to interact with the cell phone technology or syncing data to the laptop, but I wasn't trying to do those.