There are several broad categories of Windows applications that you can create with C++. Each has its own programming model and set of Windows-specific libraries, but the C++ standard library and third-party C++ libraries can be used in any of them.
To get started with traditional Windows C++ programming, see Get Started with Win32 and C++. After you gain some understanding of Win32, it will be easier to learn about MFC Desktop Applications. For an example of a traditional C++ desktop application that uses sophisticated graphics, see Hilo: Developing C++ Applications for Windows.
In general, .NET programming in C# is less complex, less error-prone, and has a more modern object-oriented API than Win32 or MFC. In most cases, its performance is more than adequate. .NET features the Windows Presentation Foundation (WPF) for rich graphics, and you can consume both Win32 and the modern Windows Runtime API. As a general rule, we recommend using C++ for desktop applications when you require:
It's also possible to combine the power and efficiency of C++ with .NET programming. You can create a user interface in C# and use C++/CLI to enable the application to consume native C++ libraries. For more information, see .NET Programming with C++/CLI.
Many Windows programming scenarios also require the Windows SDK, which includes the header files that enable access to the Windows operating system components. By default, Visual Studio installs the Windows SDK as a component of the C++ Desktop workload, which enables development of Universal Windows apps. To develop UWP apps, you need a Windows 10 or later version of the Windows SDK. For more information, and a download link, see Windows SDK. (For more information about the Windows SDKs for earlier versions of Windows, see the Windows SDK archive).
For a long time, the 'standard' tutorial beginners start with for Windows assembly programming is Iczelion's tutorial. Also for Windows assembler programming, the best forum (IMO) to get started is probably MASM32. It has a very active community which is very welcoming and helpful to newcomers and beginners. It sort of depends which particular flavour of assembler you want to learn but IMO, for Windows MASM32 has the best userbase (both in terms of community and resources around) for beginners.
You mention you want to learn RCE (reverse code engineering) also. A very common starting place for reversing on Windows is lena151's tutorials which potentially is also a nice start if you already know assembler conceptually from having done Linux assembler programming.
Most assembly language programming you would do, especially in a full-OS environment like Windows, will just be snippets anyway (as opposed to a 100% assembly program). The easiest way to get started is to write a C program as a test harness and have it call your assembly language functions. Here's a simple example:
(I used it to create a tiny helper app for generating batch of simple DOCX document with filled-in string templates. Very light on features & code sophistication - limited to windows only due to crate selection.)
In this article, I will quickly compare some key features of both the Linux and Windows Operating Systems. We will see the advantages of Linux over Windows, which will help you choose the right OS for programming or web development purposes.
I am a big fan of Windows OS, and have been using it for years. It is super user-friendly, well-designed, and convenient. However, if you are thinking of getting into programming or web development, a Linux distro (such as Ubuntu, CentOS, and Debian) is the best Operating System to start with.
I would heavily disagree, as a windows user for 99% of my life I have had so many issues switching to Linux from drivers not being available, to certain websites not being supported, even though support is way better now than it was.
Now why is the market share so low and why are users experiencing problems? From what i found out it is mainly driver issues with shitty implementation of bluetooth or fitness tracker, things like that.
Also most importantly the best tools are missing on linux, adobe, microsoft, finalcut to name three that are without question industrie standards but also 3dsmax, maya..most companies won't work with blender.
Lastly ubuntu shipping with gnome3 is a brave approach but most monkeys can't adapt easily away from windowsXP therefore we get a split in community which hinders more polish (not that windows is polished yet haha but my insider built is amazing honestly).
Gotcha, i know the feeling, but in a different way. I don't care typing on console and editing files..haven't had to in a long while on desktop but don't mind that either obsly, neither do you i believe. But if i wan't to connect some bluetooth speakers and even using all the threads of possible solutions and file copy pasting editing there is and it still doesn't work that sucks. Not like the crap would work well on windows or osx but at least it somewhat works.
Epson got a .deb to download drivers, it SUCKS SO MUCH that it's opened in archive manager by default i mean what the ... but right click like stupid windows does open software center let's me install it without issues.
That's why all-in-all on powerful machines windows became soooooo good with wsl2, you are indeed getting best of all. Windows is a pain to configure, be real there, but improved a lot from the horrible first days of windows10 and ye...tough luck for linux on desktop to lose users about tiny problems.
Right now wsl2+mate+i3+a sack of rice is available with windows for those who like that hobby and at the same time you can use windows. The one reason to not use windows as a daily driver now is if you enjoy final cut pro the most.
For people (like you and me) who have been using Windows, and never exposed to Linux, they might find the OS frustrating. Last year, I wanted to learn Clojure programming language, and the Windows support for this language is not so good. I uninstalled Windows and installed Ubuntu last year on my Dell's laptop.
I googled several command lines on how to use Ubuntu effectively, noted them down, and even started using Ubuntu. But the problem started when I had to use Excel. I used google sheet for some hours and it was a frustrating experience, as it was slow. I used Open Office as well but several features of Excel were missing. So, I uninstalled Ubuntu, and installed Windows.
the point about the Linux terminal being better than windows console... might be true, especially when you are not PowerShell fluent, but the Linux subsystem implemented by MS works pretty well and you can do almost anything on both sides.
Things i don't miss from windows: The filesystem
Things i don't like in Linux: the "not so practical" file structure: binaries go there, configurations there, use /opt for this, and this other folder, etc...
Ubuntu is a programming environment straight out of the box. Tools like Bash, grep, sed, awk. Windows is historically a big pain in the bottom to script from. Batch files are awful and even with PowerShell, the command-line experience in Windows pales into insignificance when compared to Bash and the GNU tools. You can port some of that over to Windows but it's not the same experience.
The reason this is better for programming is because when you come across friction, you can eliminate it from your workflow. Because development is hard there are a lot of things that you have to think about to be a successful programmer, and the more you have to think about the harder it is to think about other things.
If you doing any kind of programming for back-end, for web, for cloud, etc. it's very likely that your target machines are Linux. There are lot less nasty surprises when you're developing on same kind of OS as your target machine.
Back to your original question, the only thing Linux is better at is C programming. Everything else you can do on Linux you can also do on Windows and vice-versa (programming wise). C programming is better on Linux for historical reasons, it offers a great set of tools (which you can get on Windows BTW but it's much easier to set up Linux for it). Likewise, if you're writing C# and like .NET then Windows is a better choice for obvious reasons. Everything else is completely subjective and you'll hear pros and cons of both sides.
What tools (text editor or IDE) you use for programming is a matter of choice. Generally speaking you can say: Beginners and very small projects tend to use better text editors, like sublime text or a modified version of gedit. Just because you learn more when using plain text editors. IDEs can screw up your learning process by automating things (like Visual Studio does ;) ).
My personal experience is, that an Ubuntu OS is by far faster and easier to setup for development than Windows. I presume, this is because most of the tools and programs I use are build on Linux and because I do not have to search the internet for download links to my favorite programs. It is just an 'apt-get install program1 program2 program3' away. In comparison: I need 3 working days to install and configure a fresh Windows install with everything I need for programming (company, not private, that would be faster), but it is just one day for the same task in Ubuntu.
My experience is, that programmers, who switch to Linux for programming have (most of the time) a deeper understanding of technical contexts and how basics work. Mac and Windows users tend not to know why something works this way or why it does not. I am not sure if you can actually learn something from working with Linux or if just that those williong to learn switch to Linux.
On the matter of philosophy: Ubuntu/Linux permits the computer programmer direct access to the internals and hardware, whereas Windows is a sort of gatekeeper. This is an important philosophical issue when it comes to programming. So, philosophically speaking, this feature being an advantage will depend upon whether the user is sufficiently knowledgeable or technically aware of the importance of it.
df19127ead