Click here to Skip to main content
15,882,736 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Dear Seniors,
Can you please guide me with your valuable inputs on the below.

I am aspiring to be a Systems programmer and started learning C, Win32. But I see on job sites, companies asking for VC++ with MFC but not C with Win32.
Learning C and Win32 seems like an ocean to me and would consume a whole lot of time like nearly 1+ years only for the basics and even I see there is a very less support for win32 for C when compared to that of MFC for C++.
Most people suggest me to directly get onto MFC using VC++.
Sometimes I really feel like I have choosen a wrong path while learning C, Win32.
In this regards please suggest me which path should I choose.
Even time matters alot, how do i go about it ?

[no name] 24-Jul-11 6:08am    
I don't see a problem with learning both the technologies.
ThatsAlok 25-Jul-11 2:25am    
agreed with shameel, win32 with C is good, however MFC is always be very good added advantage!

C and Win32 are used a lot less these days - except for maintenance - C++ and MFC are more common, but also dated.

C# or C++ and .NET are a lot more common these days, and may be a better investment.

Having said that, if you are good at C and Win32, and can live with maintenance rather than new projects, there are some good jobs out there - a bit like COBOL which still needs coders despite pretty much going out of fashion for new projects in the late 80's...

I would be tempted to go with the more modern stuff, myself. C and Win32 are definitely "doing things the hard way" these days!
Share this answer
Sergey Alexandrovich Kryukov 24-Jul-11 14:05pm    
Griff, I vote my 5, my with some notes. I do a log to get rid of C/C++ and move to .NET myself; however, for education, there is much more to that; C and C++ is still a part of some professional minimum, for good or bad. Please take a look at my answer.
Philippe Mori 24-Jul-11 17:19pm    
C#, .NET and WinForms are definively one of the easiest path to develop Windows applications.
Stefan_Lang 25-Jul-11 4:00am    
You are probably correct in all points, but I do wonder whether there are really that many job opportunities for a *new* C programmer regarding maintenance projects: People hiring for that kind of job will want to have programmers with many years of experience, because they need to be able to analyze and understand convoluted legacy code! Unfortunately that's not something you can learn by yourself from books, so aiming to a be a legacy code maintainer is about the worst path I can imagine.

Just an IMHO.
Dont worry .net seems future. But microsoft knows that they didnt give us the ultimate solution yet, soon they will give you another solution and .net will be back dated again.

But C/C++ is immortal, cause its not their ............
Share this answer
Sergey Alexandrovich Kryukov 24-Jul-11 14:06pm    
Nobody knows, really. This is not just about "ultimate solution". Please see my answer.
Captain Price 28-May-13 13:50pm    
+5 for the immortality !
Mohibur Rashid 28-May-13 20:49pm    
Sometimes I really feel like I have chosen a wrong path while learning C, Win32.

I think your whole approach is wrong. This is not a "path". There are things you need to know regardless of your "path". However, it depends on what do you want to become. Do you want to reach at least the position of a professional who drives his career, or you agree to become a "coder" who can be hired for some projects and when the market, trends and other people drive your career?

You can select some language for you current developing needs out of tens of them, but you also need to take into account the cultural background. C and C++ can be considered good or bad, but among other things you need to understand other developers and their work be able to communicate with them. For this reason, you still need to understand both C and C++ quite well, regardless what you use for development.

To make a step further, I would say you need to understand how a machine works, from the low level. It is impossible to know well without some experience in Assembly Language (optionally inline Assembler used in C or C++ or other high-level languages, that would be more or less enough). What, also beyond your career path? In this case I would ask again if you really want to achieve some minimal professional level or not.

Share this answer
Sergey Chepurin 24-Jul-11 14:49pm    
It is impossible to disagree with what you said. Except that it pictures a "perfect" programmer and team may hate him after all (there goes some smile).
Sergey Alexandrovich Kryukov 25-Jul-11 10:50am    
I don't think anybody can be "perfect", but if you mean that excellence can create hatred in some colleagues, this unfortunately happens in real life sometimes.
Mohibur Rashid 24-Jul-11 19:02pm    
My Five for a good answer
Sergey Alexandrovich Kryukov 25-Jul-11 10:47am    
Thank you.
AFAIK there are mainly two areas where C-Programming (rather than C++) is still highly in demand: Embedded programming and old desktop applications that need to be maintained. Apart from that, most new desktop applications tend to be developed in C++ rather than C, even if the managers responsible for the definition can't even tell the difference (that said, with that kind of managers a project might just aas well be done in C#).

I do not think the latter is a real option for you - see my comment on Solution 1! And even in embedded programming, many companies are already moving towards C++! So, either way, chances are high that you will be forced into C++, sooner or later.

Unfortunately for you there are still a lot of experienced C programmers around who managers will likely prefer over a new C++ programmer, no matter whether they're hiring for C or C++. If they hire new programmers, they'll want someone who's either familiar with the newest technologies (e. g. someone fresh from university or the like), or who brings some familiarity with the business itself (e. g. mechanical or electrical engineers who are familiar with the devices that you are supposed to develop (embedded) programs for).

I'm sorry to say that, but learning C in an effort to be hired for programming is a bit like learning to tend to horses and all about coach driving when you aim to be a taxi driver. It's not that there aren't any horse coaches any more, they're just very hard to find.

The best advice I can give regarding language is to
1. decide what kind of software you'd like to work on:
(a) C++, C#, Pascal (Delphi or whatever other brand you can find), and similar languages are best suited for desktop or, possibly, embedded applications.
(b) Ruby, Java, Perl, PHP, are aimed more at web applications (that list may not be very representative, I'm not well versed in this area)
(c) other languages may be more suited to database programming (don't ask me, apart from Cobol I really can't say which ;) )
2. Pick a language fitting for your preferred type of software, and get the hang of it, doing some small projects.
3. Find out about the newet technologies in this area by googling or asking around and try to learn more about it.

As for Win32, that actually isn't too bad: Win64 isn't all that much different - in fact almost all of the Win32 API can be found in Win64, although some might be marked as deprectaed, and others may behave a bit different. Also I'm not that sure how many companies already switched their development to Win32, since Win32 programs do run on Win64 without problems if you take care about a few things.

That said, Win32 is just the 'naked' API of the OS, and almost nobody directly programs on top of that. MFC is one of the libraries that wrap the Windows API in a layer of classes that are (presumably) easier to use, and take away some of the effort required to make a program run smoothly. That said, MFC is also already a rather ancient piece of software, and that's why I put 'presumably' in brackets above: it greatly suffers from legacy code dating back to the 90s, when most of the coding was still done in C, and, unfortunately, you can still see the old data structures and types at the interface. These are probably among the reasons for the newer libraries and frameworks being developed, such as .NET, or QT.

So, in this regard, again I advise you to think about what your goals are. It's probably just as well that you already know the Win32 API, since it's the basis these frameworks are built upon. But you really need to familiarize yourself with at least one of the common frameworks, and even though MFC is often required in job offerings, if you are fammiliar with .NET or another, newer, framework, that would probably serve you better in the long run!

I seem to have ignored the fact that you mentioned you wanted to be a systems programmer. So, regarding choice of language, C++ or perhaps C# really seems to be the best option. If the former, then learning MFC or a similar framework that you have access to is definitely recommended. If the latter, then, of course, you need to familiarize yourself with .NET. You could also use Visual Studio (express version can be had for free) to program managed C++/CLI, using .NET. In fact, I believe that this will be both easier to learn and wil serve you better in the long run than learning (unmanaged) C++ with MFC.
Share this answer
zlogdan 28-May-13 13:41pm    
The above was my 5 stars answer. Embedded systems/firmware, low level DLLs, device drivers, real time software they all benefit from being written in C/C++. From my own experience, Qt libraries are great wrappers for Windows and Linux APIs that deal with OS related functions and offer a real deal of features like XML or database. Sometimes, I prefer to use raw calls to WIN32 functions and wrapping them on C++ classes. I also like to create DLLs and export C functions rather than classes, but within the project I make use of C++. But if you asked me to start a new project from scratch, and if it required complex GUI programming I would use Qt instead of MFC. As for C# standalone applications, I may not have the expertise to tell, but my experiences with C# have been good, not sure how much the system performance is slowed down for real time software ( e.g, interfacing with external hardware, like smart card readers, fiscal printers, and other hardware ). But usually it seems everybody is using C# rather than C++ here in Brazil, which makes C++ programmers rare items and C# jobs more often found. By consequence, the number of C# programmers is huge, which makes the offer of programmers higher and shorter salaries. My current feeling is to think programming will not be a good working area in a near future in Brazil, although it is all I know.
Stefan_Lang 29-May-13 3:14am    
Thank you for your comments even though the question and this response are two years old.

As for C# and realtime: I admit I never checked, so it may be fine. But judging by the many complaints about the inability to control the behaviour of the .NET garbage collector, I consider it likely that it may activate at inopportune moments and block critical (real time!) parts of the applications at the wrong time. Real time means you must be able to fulfil hard timing constraints: if something bad happens you may need to activate a motor within fractions of a second to prevent serious damage. And if you cannot accomplish that because just at that time the garbage collector blocks critical parts of the system, then this is unacceptable.

If you're only concerned about good performance, then garbage collection and other potentially suboptimal parts of the .NET library may not be a problem; in fact the users probably will not notice a difference to a native C++ implementation. But if you have real time constraints and are unable to guarantee that .NET will not violate them, then you have to use another language that does not use .NET.
zlogdan 31-May-13 10:18am    
Thanks! I have already briefly worked with C# with smard card readers ( PCSC ). These were fast. I am mostly worried with performance, with applications that interface things like motors I would definitely use C++. I actually installed the .NET framework at my home pc, plan to study more of C#. I once read that once you learn C# you will just want to stay away from java :-)
C and Windows API give you a good knowledge of Windows itself but do not add pluses to your resume nowadays (i don't know why). It is clear that the future of Windows is in .NET languages (C#, VB.NET). C++ (not mentioning C and Windows API!) is not "managed" by .NET (it does not depend on its classes) and is developed by independent body (ITTF). Also, nobody knows how long Microsoft will support managed C++ and MFC. That means that jobs with MFC knowledge can soon go to "maintenance" (quoting OriginalGriff) category as well.
It is a very good IDE and compiler of VC++ that keep many programmers bound to Visual Studio.
Share this answer
[no name] 24-Jul-11 10:38am    
thank you :)
Sergey Alexandrovich Kryukov 24-Jul-11 14:07pm    
I basically agree (my 5), but I think the real issue is the cultural professional environment aspects. Please see my answer.
If you have a choice between learning C with Win32 or C++ with MFC, I would go to the later option.

C++ is much more powerfull and safe than C. Even if you don't master every aspect of C++, it still better than plain C. At least there is room for improvement.

MFC will help you a lot for Windows application developement compared to Win32 alone as some difficult tasks are handled by the framework. On the other hand, since MFC is a thin layer over Win32... you will somehow be not that far from the Win32 API.

As I also mentionned in a reply in another solution, .NET developement particulary in C# and WinForms is a lot easier.

But since you seems interested by system developement, it might make sence to learn a minimum of C++/MFC to have at least a good idea of how it works.
Share this answer
To do more about Familiarization with VC++ IDE .You can view you tube link[^]
Share this answer
H.Brydon 27-May-13 23:15pm    
This question is 2 years old. Why are you answering it now?
You might consider studding about WinRT([^])
Share this answer

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900