views:

92

answers:

3

I am a long-time Mac user looking to gain a decent understanding of Windows. I want to be able to control the environment, understand how the OS fits together and, eventually I guess, think about application development. I'm not really interested in the history except as it is still relevant to Windows 7.

I'm competent with the Mac and UNIX/Linux environment. I live in C, Objective-C, Bash, Python, JavaScript, AppleScript and PHP. As such I want something that is introductory but not aimed at beginners.

Can anyone recommend a decent book (or other resource) to get me started?

TIA

+2  A: 

I started on a UNIX machine, went to the Mac, then to Windows, then finally wound up running Windows and Mac together ... on a Mac Pro. Of the languages you mention, C, Python, Javascript and PHP, there aren't really any differences worth talking about between Mac and Windows. AppleScript, obviously, is non-existent and I'm not sure about Objective C, since I don't use it.

I would recommend you use something like VMWare Fusion to make Windows virtual machines on your Mac. That's what I do. That way you can script batch files in Unix and apply them to your Windows environment.

If that's not a possibility, for Bash you can use Cygwin on Windows. It's a UNIX version of the Windows command line, and lets you do pretty much what you can do in UNIX.

It would be worth your while to learn the .Net framework as well. If you are developing for Windows you will probably want to get Visual Studio. Learning C# is about the best thing you could start with, as it is fast becoming the lingua franca of Windows.

I can't point you to any books, since the ones I used to learn Windows are about 10 years old now, but I hope this brief intro helps.

Robusto
+3  A: 

This Petzold guy pretty much "wrote the book" for Windows programming when it first came out, and he's still going (http://www.charlespetzold.com/books.html)

Arthur Kalliokoski
+1 Great link. Thanks!
Carlton Gibson
+4  A: 

Superficially

Just start using the languages.

Deeper - good places to start digging

  • Window Manager: Read a Windows GUI Hello World C program source code. You should know that things such as WM_ messages exist and know the common types and at least a couple of obscure ones that windows.h uses so you get the feel of Windows APIs. Will probably still use a higher level toolkit like Windows Forms.
  • Registry: It exists. Get a rough idea of how COM component registration and file association and application settings are done.
  • File folders: Read about the layout of user profiles and the important stuff in the machine as a whole including hidden files and folders.
  • COM: Get your head round IUnknown and structured files at a high level. Know that COM != .NET but it is still around.
  • Services: Read about how services are started up and shut down.
  • Authentication: Read in the Win32 API about security APIs. Know the difference between admin and SYSTEM accounts.
  • Scheduling: Read about C Win32 API threading, synchronisation and interlocked operation primitives.
  • Kernel: Read articles comparing Linux, Mac and Win32 execution models, and search for tuning parameters.
  • Display: There are lots of APIs for the screen: DirectX, GDI, GDI+. Get your head round how to stop these different APIs fighting with each other.
  • .NET: Read about the .NET garbage collector and how .NET and non-.NET code interact and are scheduled in the same process at a low level.
  • ADO: Run some tests using C# to see what performance and concurrency you get.
  • WinSock: See GLIB source code for how to cope with differences in Sockets API.

Finally know that you cannot fork Win32 processes in Windows, and that apps are attached at a deep level to licensing related "Desktop" and "Window Station" objects.

martinr
+1, nice answer
ChristopheD
This looks like the sort of thing... On the Mac, if you install the developer tools, there's a whole load of documentation that goes through all things such as these. Is there similar for Windows? TIA
Carlton Gibson
Well there's always MSDN/TechNet (online) and Visual Studio Help files (offline), including the Win32 SDK documentation, if you want the official word. Then there's always Petzold, which is friendly/introductory, and Addison Wesley's "Windows System Programming" which goes into the detail. Plus reading a few blogs helps when it gets a bit dry. I always liked Dr Dobb's Journal.
martinr
Brilliant, thank you.
Carlton Gibson
When I was starting out with computers 12 years ago, I was given a box and told to go wild... I fiddled with anything and everything. No matter what breaks, it can always be fixed... I even deleted my brother's io.sys off Win98 trying to change his bootscreen :D
Logan Young