Not really, they make okay tools that are extensible enough. Visual Studio is a great example of this. You basically need ReSharper and a hundred other addons to get anything serious done.
Just try using VS for C++ development, even the primitive Qt Creator tops it.
I used VS for C++ development professionally, and thought it was really great. Still do, in fact. I still haven't ever used anything that has a smooth and tightly-integrated edit-build-run-debug cycle. MS' documentation is (and always has been) top-notch, and hopping from code to doc and back again is easy enough to be fun. The platform sucks, of course, but if I could run MSVC++ on Linux, I'd do it in a heartbeat.
I do too, but I also use Qt Creator and Eclipse for writing C++ on RTOSes and I really don't think VS is anything special.
I will agree with you about the documentation, with few exceptions MS documentation is some of the best written. But this is far from something that should prevent a platform swap.
The piss poor code editing tools in VC++ irk me more than anything, I have to say that I feel like it's the worst of these platforms. Resharper for C++ is coming though, so maybe that'll change my mind.
I'll disagree there. After spending hours trying to make sense of the Win32 API documentation in msdn. Often failing to make sense of it, finding the answer in Raymond Chen blog a long with a few lines pointing out that the msdn documentation doesn't cover some important cases/caveats.
Most all Win32 stuff works just fine. It is documented better than _any_ one Linux module/layer. There is no comparison. But these days I don't even need to bother with Win32, .NET handles 99.9% of what I need to do. Then again I am not a driver developer.
I wanted to write a simple tool to mute a game when I tabbed out of it.
No access to per-app volume controls from .NET without the use of some random paid libraries. So I went with C++. Access via C++ involved incredibly complicated COM APIs, which were very poorly documented (the whole COM system itself was confusing but these APIs in particular involved a ridiculous level of nesting) and no good clear examples were available.
Easily more confusing than the simple calls into the DBus interface for pulseaudio to achieve the same thing on an Ubuntu desktop system.
Don't forget all of the undocumented API's which you are not to use unless you're a really big vendor then you get special documentation and/or special API's built just for you.
* this is far from something that should prevent a platform swap*
When I started Android development, the quality of documentation was so far below what I was used to from Microsoft that it hurt. If not for StackOverflow I would probably have given up and switched to Microsoft's mobile platform.
Besides that, I'm not impressed by IntelliJ. Not even a little bit. I am however, vastly impressed by Visual Studio and all the IDE's that are based on it.
The Android docs and Java docs are actually quite good though IMO. Is there somewhere in particular you felt they were lacking?
You want to see some poorly documented stuff, check out BouncyCastle's "lightweight API" or OpenSceneGraph. Great libraries, but figuring them out is a serious investment.
Honestly I don't remember anymore because if I search for help on anything, I now actively avoid the android site and just take the StackOverflow links instead.
Maybe Android docs aren't so bad in comparison to most documentation. However, in comparison to Microsoft's they are severely lacking. And this is coming from someone who used to bitch at all the errors he found in the Microsoft docs!
The lack of basic C++ development features like "go to implementation", "add to header", automatic updating of prototypes or even the most basic refactoring tools like moving definitions, extracting functions, if I'm remembering correctly it didn't even have rename... yeah it drove me away pretty easily.
I have quite regularly, but I'm just as comfortable in that of Eclipse, Qt Creator, gdb, or even binary debuggers like IDA's or OllyDbg for reverse engineering. I don't see it as a major advantage over any other platform. It's a simple GUI debugger, nothing fancy.
I suppose it depends on what you're used to and what features you actually need.
When debugging I'm most often able to solve things with a few breakpoints, a stack dump and little else. The situations where that's insufficient for me are few and far between. When I'm debugging some code using old threading paradigms I more often than not just break out helgrind on it, which often reveals threading problems instantly. It's unavailable on Windows though.
The Eclipse comment got me to stop here…signup, and write.
I have been a Wintel developer for 25 years. I make a modest 6-figure income writing C#/MSSQL apps (after years of (Clipper, C, C++ and Delphi) that run large businesses. I mainly write multi-threaded server apps (most from the ground up, not WCF/SOAP) but I do still venture into the GUI work and even WPF/MVVM these days. I prefer MSSQL over Oracle any day, no comparison for 99% of what is needed out there. I love Hyper-V and VMWare (even when the Linux-lineage rears its head). My server in the basement is loaded with 140TB of very redundant storage. So, not the overage scrip kiddie who picked up this computer stuff last year.
I completely gave up on Linux and any OpenSource development tools a few years ago, my personality and mind (of lack of) just couldn’t deal with it. It is completely frustrating to deal with almost-no-docs, partial thoughts of most users, buzzwords, short-hand, almost no attention to detail, and often from guys living in mom's basement, that have no need to generate output and earn a paycheck.
I know that sounds harsh, but it is based on my experience with software development. I tried to cope with the Linux ecosystem for 10 years, it had to stop.
It does, (or did) take days to install the completely unfocused IDE Eclipse and the Android SDK (Java itself to a lesser degree). People (I will call them “enthusiasts”) with lots of time, and little experience writing maintainable software, might enjoy the challenge - but I called it hell – I could give endless examples of zero-docs or absolutely wrong examples, docs and walk-throughs. Almost every doc I ever found on setting up Linux-ish (servers) or Android dev environments, etc. was completely full of errors, and the user community seemed to love their walk through their fields of mines. And I believe that is because the authors/users can get away it - production and earning is not key, playing and killing time seems to be the focus. This is fine I guess, but not for me. I must provide value to my customers/employers and write software that is maintainable. MS and VS allow me to do this with relative ease. MS has its faults, and I can list bugs in Windows that may never be fixed.
Look at the Storage Spaces mess. Look at awesome ZFS (I mean that) – and only 1 PhD required to implement and properly maintain it under Linux, with storage beyond a minimal size. Look at the nightmare of Linux, storage controllers, trying to figure out what drive has what serial #, and is attached to what port, CLI and Gerp Hell. I bet FreeNAS still forces someone into spending a day to get all the apps required to pipe and redirect and Grep 20 apps, just right (oops the doc was wrong again) to find the one bad drive and drive serial#. MS with all its faults, smiles at this kind of mess. They usually improve on this, although I can’t say Storage Spaces is an example of this.
It is my strong opinion (but I haven’t had the pleasure in doing) that all one needs to do to support my point, is take a group of average to above-average users/people and give them the mission of getting a dev environment setup to take some input from a user, open a socket and send that data somewhere. All Linux attempts will fail (with hostile screaming involved), most MS VS C# attempts will succeed (with minimal cursing). It really is that simple to demonstrate. One can play around with horrible docs and horrible tools or one can express their thoughts and solutions and earn a paycheck (if you're into that kind of thing). And for real comedy, ask those same test subject to setup an SMB server, in Linux and in Windows. I think you get my point, if you are not the 1 in 1000 Linux users that knows how to do that.
Nothing makes me happier than Win10 IoT Core on Raspberry. I like Arduino, I use it when I have/need to, Netduino was OK but hit its limits, but I now, in 2015, I have a rock-solid IDE and C# at my fingertips, and Raspberry and Minnowboard, my higher-level projects will now be a breeze to implement. I am sure I will experience some pain but MS always gets it together for the developers. We are all of course doing different things for different reasons. I like to build home automation solutions for myself and friends (not commercially). So my Win10 IoT Core vs. Linux views come from that limited slant.
I am not wanting to argue, that happens everywhere, I simply wanted to share my point of view as I remember my Eclipse Android SDK nightmares of a few years ago. We can completely disagree on some or all of this and still enjoy the comments on this thread. I smile and laughed at some of the comments here. Fun stuff. Good luck.
Before Clipper I also wrote a ton of code in dBase II and used WordStar (in text editor mode). This was on a couple of different NEC CP/M machines (an APC [0] with 8" floppies and it's sibling the PC-8800 [1] which had 8" and 5.25" floppies - no hard disks!). This was circa 1985/6. Then my boss bought Clipper Autumn 86 after we tried a few other dBase compilers (Quicksilver and I think dbXL). We also bought B-Linker after Nantucket/CA's supplied link ran out of steam for us.
I was a demon with the Clipper TBrowse object :) Happy days.
I've done barely any MS development to speak of. However, I have done extensive development using CLI-based tools and I've used excellent IDEs like Jetbrains'. The power a good, integrated tool gives you over less integrated environments is tremendous. I rarely need the CLI anymore for development, so maybe with good enough tooling it doesn't matter.
Now, I hear MS' tools compare favorably with Jetbrains'. If that's true, that sounds like a pretty decent platform to me.
I don't understand the people who compare PowerShell to a CLI on Unix/Linux. They're worlds apart and not even comparable. PowerShell is like a little set of APIs you can use to get at data - nothing outside of that, play within the rules - but those APIs are pretty good when they do exist.
Unix/Linux CLI is a core set of tools that get you at literally everything you could want and give you unbounded power and flexibility.
Microsoft fanboy here (and OP of this sub-thread). PowerShell is a great example of how the two camps never meet in the middle. The syntax is mind-numbingly stupid. Also it's a scripting language not a shell -- but if they called it PowerScript people would just make fun of it for being bad Python. The syntax is hideous.
And let's not talk about the shell itself which -- dear lord.
Meanwhile Unix folk will never realize how much time they waste with broken scripts that have three sets of nested escaped quotes just so they can get text from one place to another -- even though "plain text is everything" hasn't really solved problems in a robust fashion since the 80s. Add in six different variations on regular expressions, a couple Python 2 vs 3 wars, endless battles of how to handle service startup, and the the fact that basic tools like sed and grep are stuck in some BSD never-never land on the Mac and you've got yourself a real mess.
So when you're writing a script to move users, mailboxes and databases around? Maybe that PowerShell ain't so verbose after all. Better to type a little more now than deal with the pissed-off VP with an umlaut in his name later.
I really wish I could show about 70% of the Windows knuckleheads a few Linux tools. And I really wish about half of Hacker News would spend twenty minutes with Visual Studio and Azure. Both sides have no idea what is possible. And, no. No joke.
I use both. The friction is way lower on the Linux side of things. Sure you can knock up a 50 line powershell script to thing X but if you do it in 97 lines of python it takes less time because you didn't have to download a later version of management tooling which then required a reboot followed by half an hour arguing with script signing followed by an hour of trying to scan through KB articles to work out why your PS script didn't run in task scheduler only to find it was an obscure compatibility flag followed by it failing after two days because a CIFS share suddenly went offline...
And today visual studio 2013 crashed on me a relatively low 11 times...
Oh and I had to fix a script that tried to deploy sql server instances and pretty much entirely fucked up my workstation.
Visual Studio should not be crashing. Also bash scripts are famous for fucking up server instances, too. And crond, while simple, is equally deadly. Everyone's had a weird ass permissions problem there that took three nights of logs to figure out. This is general life in the trenches regardless of platform. Also, I'm certainly not a PowerShell fan but you have to admit it does bring structure to the madness.
I think the number of people who have used both is quite large. The people who know the ups and downs of both systems just don't post that the other system has bad tools, so they're not in the conversation.
I use Visual studio to write c# apps for my day job(love it). My Linux development had been polar opposites of spending days getting a embedded arm toolchain to compile and using vim to make a .c file an typing gcc main.c -o HelloWorld. There is also the whole make file strangeness. Where would you point me to make me like linux development more?
I'd recommend Yocto to build a system and toolchain for your target, but it's insanely painful to do anything beyond building a precooked recipe for a known embedded target.
Installing an ARM toolchain is simple now. Don't build one unless you really need to (or you install Yocto).
There's a page on my website called 'A short guide to building a gcc cross-compiler (while still remaining nominally insane)'. It's hopelessly out-of-date now, but it's still one of the most popular pages I've got.
Back when I wrote it, in the gcc 4.3.3 days, I don't even think gcc had a release manager --- we're talking clean, out-of-the-box build failures here.
It's gotten a bit better since then, but getting hold of a gcc cross-compiler is still painfully, pointlessly hard.
It's gotten a bit better since then, but getting hold of a gcc cross-compiler is still painfully, pointlessly hard
For ARM it takes 90 seconds in Debian/Ubuntu. I posted the command right above.
And the larger chipmakers will provide or point you to relevant toolsets or include them with their IDEs. Even the large independent IDE makers wrap their stuff around gcc now.
ARM is popular enough that there's a precompiled cross-compiler in Debian --- you get lucky there. It's even reasonably recent.
But there isn't a MIPS toolchain. Or an m68k toolchain. Or a sparc toolchain. Or an alpha toolchain. Or an SH toolchain. There is a Hitachi H8 toolchain, but it's based on 3.4.6. There's an MSP430 toolchain, but you don't want to use it, as it's achingly old and can brick some modern MSP430 devices. etc.
Typically, when working on an embedded device, the very first thing you do is spend far too many frustrating hours trying to beat gcc into shape, and that shouldn't be necessary. The fact that the packages for all these things aren't built and pushed to Debian automatically every time a gcc release is done indicates that something is very wrong somewhere...
I see it as a problem with people not being open to a shift in how to get things done. You even see it within Windows development, like the crowd who argue you can't get anything done without ReSharper. People get used to doing something one way, and any other way is seen as inferior.
This will get buried here and is worthy of a separate thread. But... what are the "gateway drugs" for a Windows-centric dev? A Linux-centrix dev?
For me it was Postgres to show what open source was really capable of (a more current example would be LLVM), and Python and SWIG as examples of things that simply don't exist inside the Microsoft ecosystem but which solve so, so many problems. And even on weeks where I'm sitting in Visual Studio all day, I still couldn't live without Cygwin, wonky as it may be. Also: your fears about licensing and quality and some of the other FUD I see in threads like this are largely bullshit.
On the other side, any Mac or Linux dev who prefers Eclipse or Xcode to Visual Studio really needs to have his or her head examined. There's a culture shock, yes. Now give it a few days and deal with it. C# is superior to Java -- much smarter language architects and bigger, better teams, better tech, better docs. F# type providers will make your head explode in a positive way. Azure kicks ass on AWS, sorry. And the sheer depth and volume of everything Microsoft does really can't be understood until you dig in. This is a company that spends $10 billion every year on R&D. And they're the most developer-focused company on earth by far. Also, they're actually not stupid, though you may have to take that on faith to start. There is also PLENTY of open source code. Also plenty of "pay $149 for something with support instead of beating your head against a bunch of snarky bastards on a mailing list for a week" options too for those moments when you have more money than time. Also: all your fears about lock-in and secret API and some of the other FUD I see here are largely bullshit, too.
Microsoft just came out with an Android Emulator this year too. It's faster than any other emulator that I've seen and it's really well integrated with Visual Studio.
If you've never really used Microsofts tools before and all that you've heard about Microsoft has originated from the crowd that hangs out at HN, you can be forgiven for not knowing that they make very fine quality tools.
I've managed a 25-year career out of staying away from anything Microsoft in the embedded arena. WinCE, WinCE Auto, Windows Embedded, Windows XP Embedded, Windows XP Embedded Cool Ranch Flavor, Windows Mobile, Windows Phone, Windows Phone 8, Windows whatever-the-hell-it-is-today. And that philosophy has saved me a lot of pain over the years.
The tools might be great, but I don't ship tools. I ship applications that need good solid runtime libraries.
Win10 might be a fresh start and that's all well-and-good. But I'll believe it when I see it. Slapping on a buzzword like "IoT" won't change things. I develop lots of IoT stuff and I see no reason to go near Win10.
I've managed a 25-year career out of using the right tool for the job. I focus on Windows, but I use Linux, OS X, etc. when it makes sense.
The flavors of Windows that you mention are part of a longer term story, and are really just two operating systems: Windows CE and Windows NT. Windows CE was important for targeting the small devices of the 90's era in which it was developed. Now we can run NT on the 'small' devices that we have today. I think that's pretty cool. Now we have Linux and NT (and FreeBSD, etc.) and we have more choices.
Now we can run NT on the 'small' devices that we have today.
Funny how things change. A Raspberry Pi isn't a "small" embedded device. It's a small desktop device. It just happens to get embedded in a lot of stuff now.
I still can't/won't run WinNT on the 72MHz Cortex-M3 (w/64KiB SRAM) that's the core of my customer's current product.
Good point. CE and NT are definitely not for embedded devices, in the conventional sense of the word. They're also not real-time (as you know), but then neither is Linux. Embedded really is a whole other world. It's a fun space to play near, though, with more conventional systems and tools.
Bear in mind it seems to only emulate x86 targets -and the standard Android emulator seems pretty quick when it's not having to pretend to be an ARM chip...
I'm a little confused as to what Windows brings to the table for embedded devices at this point, especially screenless ones.