My recommended starting language for desktop applications is Java.
First, I have to say this (because its both true, and if I don't Oracleguy or spookster will be sure to throw it in
), programming is programming. It doesn't matter what language you use, the logic is all the same. The language is what you choose as the tool to do the job, and differ only in implementation and limitations.
You will need to learn everything as a complete beginner. Concepts applying to most languages include: variable datatypes and their memory sizes and primitives versus complex, array / collection handling including operations and iterations, expressions, operations, control structures, constants and functions / subroutines / methods (language generally calls these different), I/O handling, etc. These are just for starters.
Specifics to java and similar Object Oriented languages include: method overloading / overriding, generics (java uses erasure for this), exception handling, and reflection. Oh, and classes and instances of course lol.
Things to learn that are logical implementations as opposed to language specifics: collections especially stack handling for use in debugging and recursion, datatype casting (if applicable), 'Strings', and what they really are (char / char *), references / pointers versus primitive (where applicable), immutable reference (Java
for example, or
const char * const s
in C), and the list goes on.
This isn't to disuade you, most of these are not actually learned one at a time rather they are often learned at the same time - learning variable primitive datatypes and memory usage is done for all types (char, boolean (if available), int, long, float, double etc) at the same time, not one at a time. Some features are as simple as a keyword, such as constants (final in Java, const in C). Whats important is you know what these are, and don't just toss them in randomly since you've seen it in another code block.
Java is one of the easier languages to learn (for OOP languages), and is also quite robust. It has an advantage of cross platform independant coding which is implemented through the java virtual machine instead of through our code - we don't care if its run on linux, mac or windows, if a JVM is installed it should (mostly) work, depending on how much hooking is done into the AWT over the swing library. It has automatic memory allocation and deallocation, so you get to bypass that nitty gritty.
Plus, it has a pretty awesome tutorial
section. Start with the 'Trails covering the basics' section.