Any half-decent IDE created in this century gives you both these features and much more. I remember selecting the type of the new project in Visual Studio 6.0 and getting either a console "Hello, world" or a full-blown GUI application. VS 6.0 is literally older than some engineers I work with today
> Any half-decent IDE created in this century gives you both these features and much more
If you've paid for the expensive "Professional" Visual Studio .NET in 2002, you do indeed get version control. But it's Visual SourceSafe, which is garbage†. Fortunately, it's optional, so you probably just never switch it on (it's not default) and don't use any version control at all, so you're back to square one.
If you're just using the (cheaper) Microsoft Visual C++.NET for example - whose users I imagine would have believed they had an IDE - you don't get Visual SourceSafe. As we saw that's probably no problem since you don't want VSS anyway, but it does mean you do not, in fact, get version control out of the box, you're going to need to pay Microsoft $$$ (or, try using anybody else's offerings which are better and many of them are free...)
Either way, you're not getting that comparable experience.
† It's markedly worse than CVS, which itself is awful. Microsoft actually sold VSS for money rather than giving it away and so there was (until 2005) a team at Microsoft maintaining it. As I understand it the revision control of the Visual SourceSafe software itself was eventually... a Perforce repo (technically "Source Depot" Microsoft's internal-use licensed fork of Perforce's software). This is not an endorsement of your confidence in your own product.
Too many people believe in the superiority of Linux as an OS for software development that they would consider it beneath them to even notice Windows toolchains, and would then be flabbergasted by the idea of project templates.
I’ve tried developing on Windows and found it to be terrible. Even at the most fundamental basic level, like how files get locked when opened and cannot be removed unless the file handle is closed. And deploying on Windows is even worse. How do you run something when the server starts? Modify some random registry settings to log in a user and then setup some startup items (all via a GUI) to trigger your software. And of course there is no good way to get your software onto the host. There is no ssh equivalent and ssh sucks on windows because of the aforementioned file lock issue. Windows devs I talked to built new machine images (because no Docker) for each deployment, a process that takes like 30 minutes to an hour.
Oh, and there was that one time I accidentally let Unity install Visual Studio instead of VS Code. What a terrible IDE. By modern standards it’s so slow and heavyweight.
Yes, as I said, I don’t have a lot of experience. However, the little experience I have indicates that Windows is fundamentally worse. For instance, the file handle issue is clearly annoying when developing. You may be used to it, but I don’t see an argument on how Windows’ handling of files is better or even equal. Or take Poweshell. The *nix approach of composeable shell primitives is better for developers. Software development is the composition of primitives after all.
And you can tell me to RTFM all you like, but the manual is leaves something to be desired.
Google “run on system start linux api” and the first result is about systemd. Create a config file, put it in the right place, and done.
Replace linux with windows and I don’t see an answer on the first page of results.
If you learn on Windows first, or if you’re a masochist, then I’m sure it’s possible to tolerate or even enjoy Windows development. But I have never seen a convincing argument that it’s better or even on par with Linux development.
> However, the little experience I have indicates that Windows is fundamentally worse.
Fundamentally worse is extremely hard to prove and subjective. It's different, that's for sure.
> For instance, the file handle issue is clearly annoying when developing. You may be used to it, but I don’t see an argument on how Windows’ handling of files is better or even equal.
That's one of the things that's arguably worse in the modern era, I'm quite sure it comes from CP/M (1974) so it's a super ancient decision, one that would break a lot of things if they change it. It's one of "go left or right, but you can't go back, and you'll only find out in 20 years if you've made the right choice".
> Or take Poweshell. The *nix approach of composable shell primitives is better for developers. Software development is the composition of primitives after all.
That's ironic, since Powershell is super composable. If anything, it's even more composable since it sends structured data, not just raw streams of bytes. There's a reason a ton of alternative shells want to evolve POSIX shells to add structured data, they're all inspired by Powershell. See for example https://www.nushell.sh/ You don't even have to believe me, try to find blog posts from many devs of next generation POSIX shells and several of them mention Powershell explicitly as inspiration.
> Google “run on system start linux api” and the first result is about systemd. Create a config file, put it in the right place, and done.
Unless you want to use Gentoo or Devuan or FreeBSD or... And amusingly, systemd is inspired by MacOS and Windows service management (parts of them) plus it actually tries to create the unified userland that's inspired by... Windows :-)
> And you can tell me to RTFM all you like, but the manual is leaves something to be desired.
Windows docs are super disparate, but Linux ones are the same. Strictly man-ing stuff won't get you super far. You'll need to do the same forum and StackOverflow and whatever digging for years and years to get anywhere. You've already done it, you've just forgotten doing it.
> If you learn on Windows first, or if you’re a masochist, then I’m sure it’s possible to tolerate or even enjoy Windows development. But I have never seen a convincing argument that it’s better or even on par with Linux development.
If we're professionals, we use what's available and we learn stuff from it.
I wouldn't say Windows is better, but it's definitely a lot better than strictly POSIX users complain about it, and it can be made super usable and more POSIX oriented. I've done it with Cygwin circa 2008 and I've been happily using the same setup since then.
For example in terms of desktop/laptop support, on average, Windows still fares better than Linux.
Thank you for this well-thought out response. I agree that Windows certainly fairs better on the desktop than Linux. I'm sure there is more to the picture than my limited experience, but I can't say I'll pick Windows in the future :)
That's disregarding the real world a little bit. You may like or dislike it, but the fact is that Linux totally dominates the cloud era. Among those who have the luxury to choose their tools themselves, among them startups and hobbyists, it's basically down to Linux or Mac, unless you develop for the Microsoft ecosystem.
Microsoft got a bit complacent during the decade before, and allowed single user considerations to influence the design (the registry, the small business-oriented administration tools, the complete lack of usable shell, terminal and editor), and they still pay the price of backwards compatibility with this despite most of it being fixed long ago.
All languages and tools from the past two decades such as Python, Ruby, Node, Rust, Go, and so on and first class citizens on Linux. They all work with the file system, the shell, and the package management system because that's what people use. I'm sure there will be post-Linux era too, but that's not where we are now and when it comes it will not look the 90s again.
It's not about practicality, most of my day jobs relied on my knowledge of POSIX :-)
It's about intellectual dishonesty, regularly complaining about Windows things from a very shallow perspective that would not be tolerated of POSIX. An "argument from ignorance", if you will.
My original argument was from first-hand experience developing for a Windows server deployment. It's a little insulting that you would call that ignorance while simultaneously not addressing the grievances encountered.
If it was insult, then it was well deserved. You should learn from it. Having a single deployment project of Windows OS is so narrow experiance.
Every OS has things where it shines compared to others and those where it could be better. Why cant I deploy all linux like Guix?
More then that, you need to give it time, explore the culture, find out native tools and see how cross platform tools are used. You cant judge anything without spending enough productive an play time with it.
Everything is equally approachable on the Windows. Powershell is light years ahead compared to any Linux shell. Chocolatey is maybe most up to date package manager around, on par with Arch.
One thing where I would use Linux over Windows any time is IoT simply due to size and price. Windows nano version is still pain compared to mini Linux distros.
Powershell is a good example of what was made after everyone could see that the momentum just wasn't there. It's far from enough to turn the tide. The market will turn sooner or later of course, but not back to what was before.
Package managers is also a good example. Everything is third party and nothing is default. They must be configured to work with your instance of git and python and whatnot. And who knows if the tools expect a case sensitive file system, or wants to open a socket in a mode that doesn't work, or use a certificate store that isn't the system default, or some script that expects a network interface that just isn't there.
You are free to hold your own opinion of course. But if you work with Node or Python or other things that cloud apps are built from, most people will stick to whatever everyone else uses. That's just the reason it is like it is. It's the same dynamic that kept Microsoft close to a monopoly in the office era.
It's great that people use other platforms too in order to keep portability of our tools high, but as for the cloud era, the market is unlikely to change much from here. We'll be stuck with the web for a while, and it runs on Linux.
I would love a PowerShell example that finds files in a directory tree matching a file name pattern, filters those files to those that contain a specific string in their contents, and then prints the filenames to a single output file.
In my experience "IDE lockin" is terrible to work with in the long run. After 5+ years trying to compile old Visual Studio or Eclipse projects is a horrible experience.
Mine is the opposite. Visual Studio makes it a breeze to pick up some random person’s work, often after decades of time if the projects can be upgraded.
Even if not… I recently installed Visual Studio 2015 in a VM to build an old project and it was perfectly fine.
Can it show smiley emoji in string literals? No, but it does a lot more for me as a programmer than a text editor!
This isn’t my experience of running old VC++ projects. They usually end up with some weird linker errors because they embed a hardcoded DLL or something which was compiled with an old version of visual studio or something. You get a lot better at fixing these errors with experience, but I’ve lost count of the number of hours I’ve lost noodling with this stuff to compile some old code.
Speaking of progress, I adore this improvement in modern languages. C#, Swift, Rust and nodejs all have officially defined project configuration alongside the source code. I expect to be able to “cargo run” any of my rust programs in 50 years from now just as easily as I can today.
50 years from now, "Swift, Rust and nodejs" might not exist. For that sort of time period, you either need a language whose compiler & runtime is easy to write (C, Forth, Scheme, etc.) or a language that compiles to standardised bytecode (C#, Java, etc.).
That's not an issue with "Visual Studio as an IDE", but "Microsoft's C++ build toolchain" combined with specific issues with C++ the language itself, such as: not having a stable ABI, no truly common stdlib, no package manager, and weird linker conflicts due to the way headers interact with static values.
This is the primary reason I've abandoned C++ programming in general, and I'm never going back.
From what I can see, the alternative C++ toolchains from other vendors (and open source) aren't fundamentally better. They might paper over one or two issues, but rarely solve the core problem in a permanent way.
These days I do only C# and Rust for the same reason you mentioned -- sane project, dependency, and build management.
C++ toolchains in general are broken with or without IDEs. It doesn't matter if you're compiling from the command-line or a GUI, it's a trash fire either way.
This problem is sometimes temporarily "fixed" by some approach, but the problem is fundamentally with C++ itself, making many basic things night impossible to solve. Eventually the new "simple" toolchain is adapted to support every possible scenario, and then madness creeps back in and we're back to square one.
For example, I recently had to compile Chromium from scratch. It has a custom build system (of course), that is more complex by itself than all of the code that I have written in my entire life put together. It was written to "simplify" its builds. That's... crazy.
I vividly remember the day I snapped and gave up C++. I was trying to compile previously working code and it was complaining that "__malloc" was undefined. This was a linker error with no further information. It didn't identify the source of the problem, and provided no clue on how to fix it.
After hours of effort I simply gave up, switched over to C#, and never looked back.
PS: A part of the reason C/C++ developers don't "get" why IDEs are so popular is precisely because C and C++ are so hard to write IDEs for! A single header file can mean different things in the same project depending on where and how it is included. Simply providing tab-complete and inline help is a monumental task. So most C++ IDEs are bare bones compared to Java or C#. They do basically nothing for the developer except the basics.
PPS: The Rust team are all ex-C++ programmers and made the same mistakes in their language design, making IDEs very challenging to write for Rust. Don't agree? Remind me, how many IDEs are available that can do something as trivial as "extract method" in Rust?
Recently I followed someone's instructions to build a small C++ project on Windows and spent like 5 hours trying to get the right clang and the right cmake and the right ninja to invoke each other. The worst issue involved seemed to be that if you install "MSVC build tools" then cmake will auto-detect that somehow and call the ninja installed by that instead of the one in your PATH, which will pass windows-style flags to the clang in your path which does not know what those are. "Install MSVC to get required dependences but do not install MSVC build tools to avoid anti-required anti-dependencies" was not in the instructions, of course.
There is no one "Microsoft-approved" way of building GUI applications for Windows (or anything else for that matter), and you're asking for cross platform stuff :-))
The grandparent's comment was pointing out that if you take the default VS setup, which is usually MSBuild, it's quite self contained. As long as you have the corresponding VS redist, you can pretty much pick up an old VS project (one created with VS) and build it. I'm taking even about stuff from 20 years ago.
Cross platform projects use cross platform stuff, which are obviously not developed by Microsoft, so caveat emptor.
By your logic because VS integrates with npm, the issues setting up npm projects are their problem :-p
Sure, I agree, though not anymore horrible than dealing with Autotools. Shitty developer tooling is a different question (and a very important one that I trying to solve), but I am simply talking about being unaware of the simplest features because of one's ideological blinders.
And I have quite the feeling it will be identical to compiling one of these "package managed" projects whose dependencies are expressed as Github URLs.
Since when are project templates windows only? I spent a year in college using KDevelop like 10 years ago and it had project templates, as did netbeans.
Well, most of the people who fetishise Linux/UNIX would also not use KDevelop because of their deep devotion to the UNIX philosophy. I'm sure neither KDevelop does only one thing, nor does it does what it does well ("well" as defined by UNIX enthusiasts wielding pipes and shells).