Thinking about Development for Windows

From Visual Basic to GNU C, this is the place to talk programming.

Moderators: SecretSquirrel, just brew it!

Thinking about Development for Windows

Postposted on Sat Sep 08, 2012 10:37 pm

Hello.

I am thinking about doing some development and I need some suggestions for my initial research.

My interests are relational databases, music, graphics, and mobile apps. I have a particular desire to do some specialized coding to solve a peculiar or unusal problem for which there are no current, easily accessible, or understandable solutions. Learning how to write simple driver or plugin code might be a possible area of interest for me.

I want to start with Windows, namely Win 7 and Win 8. I am most familiar with Windows so that's a natural fit right now.

When I was studying for my MS degree about 10 years ago, I completed a few projects using Visual C++. These were simple projects that were coded to run in a DOS-like "run" window. I would like to get back into it and take it to the next level. No more DOSsy windows, because I want to learn how to develop apps that have a windows-like UI with good design and usability. Eventually, I would like to learn how to do the same things for mobile apps.

It sure does seem like the best way to begin is to look into an MSDN subscription and go from there but I'd like to know if anybody here has any suggestions for development, learning, and forum resources. A "Programming for Dummies Primer", if you will...

Suggestions, links, smoke-signals...all are welcome; and thanks in advance!
BIF
Gerbil Jedi
Gold subscriber
 
 
Posts: 1543
Joined: Tue May 25, 2004 7:41 pm

Re: Thinking about Development for Windows

Postposted on Sat Sep 08, 2012 11:18 pm

I love my company's MSDN subscription, but I think buying one now is a little early for your stage. If you're just teaching yourself general techniques for now, you can get pretty far with Sql Server Express and VS Express (both free). A .NET language like C# is relatively easily to learn, and will get you pretty far with your interests in "relational databases", "plugin code", and "apps that have a windows-like UI with good design and usability". I have little knowledge of mobile apps, but I have the impression that C# is positioned poorly for that. For graphics and drivers, I think most people use something native (eg, C++ w/o .NET).

Almost all my GUI experience is with .NET, but you should probably evaluation something else too, like Qt. If you're searching online, sometimes you'll see it referred to as "that Qt thingy those phone people from Europe made..."
wibeasley
Gerbil Elite
Gold subscriber
 
 
Posts: 952
Joined: Sat Mar 29, 2008 3:19 pm
Location: Norman OK

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 10:13 am

I have spent about an hour poking around on the QT website, and my reaction is "WOW!"

It appears that QT could be an excellent cross-platform development tool right from the get-go. This could be useful for me because some of the little problem-solver apps that I might develop would be perfect for desktops, but also for tablets and smartphones, both form factors that could work well in the garage or workshop.

More investigation is needed, but this is a great start. Thanks!
BIF
Gerbil Jedi
Gold subscriber
 
 
Posts: 1543
Joined: Tue May 25, 2004 7:41 pm

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 10:49 am

My advice - don't EVER think about development for Windows!

Think about development for for cross-platform or for Linux/Mac. There is no arguing Windows has the best developer tools, but once you step into DirectX, MFC, WTL, WinAPI or something like that, that's it. End of story, you're platform locked.

On the other hand, if you start writing with cross-platform or *nix in mind, it usually takes few lines of OS specific code to get the app to compile and work everywhere.
Core 2 Duo E6300, MSI P45 NEO-F, Club 3D GTX 260, 4Gb DDR2-800Mhz, Audigy X-Fi Fatal1ty Champ1on ed., 0.5Tb+1Tb Seagate Barracuda 7200.12, 630W AXP, Samsung SyncMaster BX2450, ViewSonic VP171b
Madman
Minister of Gerbil Affairs
 
Posts: 2317
Joined: Tue Apr 01, 2003 4:55 am
Location: Latvia

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 11:09 am

I dunno anything about programming, but I've recently started using Khan Academy to become an expert on the world, and they have a computer science section.

http://www.khanacademy.org/cs
EsotericLord
Gerbil First Class
 
Posts: 135
Joined: Mon Jan 11, 2010 1:23 pm

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 12:37 pm

Qt is a good choice for cross-platform desktop development.
That's covering Windows, Mac OS X and Linux with the best fit to KDE.

If you want to write something portable between form factors, you need to choose between vendors.
You can go with developing Metro application for somewhat easy portability between Windows 8 and Windows Phone 8.
Microsoft has good support for C++, C# or HTML5/JavaScript.
The same applies for iOS and Mac OS X. Familiarity with Objective C and Cocoa APIs makes it somewhat easy to move around between desktop and mobile.
windwalker
Gerbil
 
Posts: 44
Joined: Wed Mar 23, 2011 2:25 pm

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 1:17 pm

windwalker wrote:If you want to write something portable between form factors, you need to choose between vendors.

I would say - data layer and business logic goes into C++ DLLs/SO/executables, GUI's can be adjusted for the different platforms.
Core 2 Duo E6300, MSI P45 NEO-F, Club 3D GTX 260, 4Gb DDR2-800Mhz, Audigy X-Fi Fatal1ty Champ1on ed., 0.5Tb+1Tb Seagate Barracuda 7200.12, 630W AXP, Samsung SyncMaster BX2450, ViewSonic VP171b
Madman
Minister of Gerbil Affairs
 
Posts: 2317
Joined: Tue Apr 01, 2003 4:55 am
Location: Latvia

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 1:48 pm

Madman wrote:My advice - don't EVER think about development for Windows!

Think about development for for cross-platform or for Linux/Mac. There is no arguing Windows has the best developer tools, but once you step into DirectX, MFC, WTL, WinAPI or something like that, that's it. End of story, you're platform locked.

On the other hand, if you start writing with cross-platform or *nix in mind, it usually takes few lines of OS specific code to get the app to compile and work everywhere.


I have heard your sentiment before, and your last sentence is indeed a very strong argument. But unfortunately, I am not currently enthusiastic about development for Linux because I am not (yet) enthusiastic about USING Linux.

Sorry if this sounds controversial, and maybe it's a really weak argument, but there is not a single Linux distro that I have had any measure of success installing or using. There's always some damned thing that needs to be done that doesn't work correctly or is not documented (such as how to install to a logical partition at the end of a drive without overwriting the OS in the first primary part) or another damned thing that only a technically savvy person can figure out (such as "you must unplug this or that USB device or you can't use your mouse").

The Linux forums I've read seem to be only lightly traversed and have a lot of obsolete/non-relevant info for the currently released distro. I'm thinking of Mint as an example of that. An awful lot of forum posts claim that Linux (or Mint, in this example) is better than anything else out there, yet in the next breath the writer will tell you that it has a steep learning curve and you have to spend a lot of time reading and learning and experimenting.

Eventually I will spend that time. In this moment, it is my opinion that Linux is still too difficult for mere mortals, and that makes it too random for my target audience. Am I shooting myself in the foot? Yep, maybe. But I'm not enthusiastic about learning Linux and spending untold hours just getting it to run so that I have an entry point to write all my code for Windows, Mac, Android, or iOS. For now, I just need to drive the car, not learn how to build it.

This could be counter-intuitive for most people, but I'm thinking that maybe for me it will be better to initially learn to develop for those devices ON those devices. Then take it to the next level at some point in the future.

I like the concept of QT because it doesn't appear to force me to learn a new OS to write cross-platform code. My only hesitation is that future opportunities might be closer to hand if I am somewhat more familiar with Visual Studio and Microsoft's libraries.
BIF
Gerbil Jedi
Gold subscriber
 
 
Posts: 1543
Joined: Tue May 25, 2004 7:41 pm

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 1:52 pm

EsotericLord wrote:I dunno anything about programming, but I've recently started using Khan Academy to become an expert on the world, and they have a computer science section.

http://www.khanacademy.org/cs


That's interesting, thanks for the link.

Windwalker and Madman: Thank you also for your comments.
BIF
Gerbil Jedi
Gold subscriber
 
 
Posts: 1543
Joined: Tue May 25, 2004 7:41 pm

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 2:20 pm

So if you need to write GUI-based Windows-only applications, I highly recommend (and so does Microsoft for that matter) to go the C#/WPF. However, if you need to do your development in C++, absolutely use a cross-platform (or anything really) GUI framework. It's very straightforward to build cross-platform applications on Windows as long as you use cross-platform libraries, and there's nothing Microsoft libraries offer you in functionality that you can't get elsewhere unless you need very deep OS integration (and frankly, the cross-platform libs should provide you the ability to hook into those if they're well-designed).

The moral of my story is: Windows C++ GUI development is a huge pain because Microsoft hasn't updated their framework for it in like forever and will immediately lock you into Windows if you use Microsoft's C/C++ libraries to do it. Microsoft basically assumes that at this point in time, if you're willfully choosing to use C++ to develop a Windows GUI application, you need a high performance GUI solution and already have your own GUI framework and layout engine, so their development efforts are focused on improving performance and internationalization support of their low-level 2D rendering APIs (Direct2D, DirectWrite, and DirectComposition in Windows 8) (GDI+ is moving to be deprecated).

Driver development is a whole other beast and you will have to learn the intricacies and rules of each OS you plan to develop a driver for. On the Windows side, the Windows Driver Kit provides the starting point and tools necessary to build your own driver. However, the documentation assumes you understand OS design and theory so there isn't much hand-holding available.
Zoomastigophora
Gerbil Elite
 
Posts: 611
Joined: Tue Nov 11, 2008 7:10 pm

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 3:19 pm

BIF wrote:
Madman wrote:My advice - don't EVER think about development for Windows!

Think about development for for cross-platform or for Linux/Mac. There is no arguing Windows has the best developer tools, but once you step into DirectX, MFC, WTL, WinAPI or something like that, that's it. End of story, you're platform locked.

On the other hand, if you start writing with cross-platform or *nix in mind, it usually takes few lines of OS specific code to get the app to compile and work everywhere.


I have heard your sentiment before, and your last sentence is indeed a very strong argument. But unfortunately, I am not currently enthusiastic about development for Linux because I am not (yet) enthusiastic about USING Linux.

Then don't use Linux. Write the code on Windows PC, with MSVS2010 or MSVS2012, but target Posix/C/C++ functions, and use Qt/wxWidgets or any other cross platform framework.

But ALWAYS think from cross platform perspective. If it's Windows or cross platform, always choose the cross platform alternative.

BIF wrote:Sorry if this sounds controversial, and maybe it's a really weak argument, but there is not a single Linux distro that I have had any measure of success installing or using.

...

An awful lot of forum posts claim that Linux (or Mint, in this example) is better than anything else out there, yet in the next breath the writer will tell you that it has a steep learning curve and you have to spend a lot of time reading and learning and experimenting.

...

Eventually I will spend that time. In this moment, it is my opinion that Linux is still too difficult for mere mortals, and that makes it too random for my target audience.

To tell the truth, that sounds like a post from 1990... I'm using Mint as my primary OS, and I haven't used terminal at all to get it working. Once it installed, which happened 100% automatically. It was ready to use. Zero input from my side. It was even easier than Windows 8 setup, a lot easier, which kinda surprised me.

In bash_history of this PC I have only 60 entries. Most of which are commands to install new software (which I find easier than through GUI, eg. - 'sudo apt-get install thinderbird'), commands to list directory contents or move files, and a little bit of troubleshooting entries when I tried to launch Win application through Wine + Wine install + winetricks.

And the second part is also doable through GUI, and is an advanced scenario, which you might not even need.

Really, if you're scared that Mint 13 is complex, you should try it out. You might be shocked that it's actually easier than Windows, by a lot! At least that's my experience.

Although for development I still prefer WinDbg/VisualStudio over gdb/CodeBlocks

For everyday use, it's Mint all the way! Zero maintenance and does everything I need.

BIF wrote:I like the concept of QT because it doesn't appear to force me to learn a new OS to write cross-platform code. My only hesitation is that future opportunities might be closer to hand if I am somewhat more familiar with Visual Studio and Microsoft's libraries.

IMHO, knowing MS C++ specifics like ATL containers, MFC containers and classes is actually not that beneficial. They are not that cool, and MFC actually stinks.

STL does everything in a more portable and standardized way.

The problem is that Qt and wxWidgets predate STL if I'm not mistaken. And they use their own containers extensively. So learning C++ through Qt or any other framework could be rather tricky.

One way would be to split application in layers, which is a good practice, and write lower layers in truly portable C++/STL. And use Qt only for GUI stuff and lower layer calls.

EDIT: Diagram about layers - http://www.guidanceshare.com/wiki/Appli ... a_Services

This is how pretty much EVERY application should be built. Don't place any logic in GUI calls, EVER!
Core 2 Duo E6300, MSI P45 NEO-F, Club 3D GTX 260, 4Gb DDR2-800Mhz, Audigy X-Fi Fatal1ty Champ1on ed., 0.5Tb+1Tb Seagate Barracuda 7200.12, 630W AXP, Samsung SyncMaster BX2450, ViewSonic VP171b
Madman
Minister of Gerbil Affairs
 
Posts: 2317
Joined: Tue Apr 01, 2003 4:55 am
Location: Latvia

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 3:29 pm

I would simply like to give a huge thumbs-up to all of the other comments about using cross-platform development toolkits and development methods. Unless you need to really get into the guts of Windows for a particular reason, you will be much better off using good cross-platform systems that can help you make good code for everything from Windows to a smartphone. I have some experience with Qt and give it very high marks for GUI applications. As for languages, C++ using the proper STL and libraries can be ported between systems without too much headache. I'm also a huge fan of Python and Python does a pretty good job of working on lots of different platforms.
4770K @ 4.7 GHz; 32GB DDR3-2133; GTX-770; 512GB 840 Pro (2x); Fractal Define XL-R2; NZXT Kraken-X60
--Many thanks to the TR Forum for advice in getting it built.
chuckula
Gerbil Elite
Gold subscriber
 
 
Posts: 555
Joined: Wed Jan 23, 2008 9:18 pm
Location: Probably where I don't belong.

Re: Thinking about Development for Windows

Postposted on Sun Sep 09, 2012 3:43 pm

chuckula wrote:Unless you need to really get into the guts of Windows for a particular reason, you will be much better off using good cross-platform systems that can help you make good code for everything from Windows to a smartphone.

Oh, there is one thing, you should check the framework licensing requirements. For some frameworks you cannot link to them statically, and need to take care of framework redistribution or something. This might, or might not be an issue for your use case.
Core 2 Duo E6300, MSI P45 NEO-F, Club 3D GTX 260, 4Gb DDR2-800Mhz, Audigy X-Fi Fatal1ty Champ1on ed., 0.5Tb+1Tb Seagate Barracuda 7200.12, 630W AXP, Samsung SyncMaster BX2450, ViewSonic VP171b
Madman
Minister of Gerbil Affairs
 
Posts: 2317
Joined: Tue Apr 01, 2003 4:55 am
Location: Latvia

Re: Thinking about Development for Windows

Postposted on Mon Sep 10, 2012 9:22 am

Fellas, thank you all for your straight-up comments and also for not getting angry with me for my Linux remarks. Your kindness is very much appreciated. And I will re-evaluate Mint at some point, I promise.

I need a bit of time to digest what you've said above, and then I may have some questions about specific development packages, etcetera. Madman, thank you in particular for this:

Then don't use Linux. Write the code on Windows PC, with MSVS2010 or MSVS2012, but target Posix/C/C++ functions, and use Qt/wxWidgets or any other cross platform framework.


Do any of you have any suggestions for extended resources to help me fill in the blanks? Links, a good developer's forum, maybe even training?

Thanks again guys!
BIF
Gerbil Jedi
Gold subscriber
 
 
Posts: 1543
Joined: Tue May 25, 2004 7:41 pm

Re: Thinking about Development for Windows

Postposted on Mon Sep 10, 2012 10:07 am

stackoverflow.com/programmers.stackexchage.com

They have a very angry/trigger happy mods there lately, but as far as knowledge base, it's as good as it gets.

As far as training, my suggestion would be to find something you're really passionate about. If you want to develop something particular, then the whole process becomes interesting and fun.

This can become especially important because C++ has a lot of different gotchas, which you will stumble on time after time. And if you have fun learning, they are fun to find, fun to debug and fun to solve. Otherwise they might make you angry about language and make you give up.

Also, you can look up debug heaps, as they make some problems trivial to solve - http://msdn.microsoft.com/en-us/library ... 00%29.aspx
Core 2 Duo E6300, MSI P45 NEO-F, Club 3D GTX 260, 4Gb DDR2-800Mhz, Audigy X-Fi Fatal1ty Champ1on ed., 0.5Tb+1Tb Seagate Barracuda 7200.12, 630W AXP, Samsung SyncMaster BX2450, ViewSonic VP171b
Madman
Minister of Gerbil Affairs
 
Posts: 2317
Joined: Tue Apr 01, 2003 4:55 am
Location: Latvia

Re: Thinking about Development for Windows

Postposted on Mon Sep 10, 2012 3:35 pm

You obviously asked in the wrong place.
The majority of the answers are not helpful because they prioritize the misguided open source agendas of the respondents instead of your particular needs as a beginner.

Cross platform development in C++ is a huge pain for professional programmers and for a beginner is a guaranteed failure.
If you take that advice I am convinced you will give up because it's just too much hard work before you will see any kind of result.

Check out stackoverflow for a hugely more qualified and less biased source of information and advice.
windwalker
Gerbil
 
Posts: 44
Joined: Wed Mar 23, 2011 2:25 pm


Return to Developer's Den

Who is online

Users browsing this forum: No registered users and 0 guests