Programming Environments, what do you use?

I've had a rummage on DIYA and not been able to find anything that can act as a guide on tools for those taking their first steps into programming Arduino or similar devices and wanting to do the usual write, compile, debug, release cycle with the least possible pain.

I have about 30 years experience programming in a variety of languages and on a wide range of systems. But not device programming. Never done it and needed a project to focus my mind on getting started.

So I began looking at devices to program and environments in which to do the programming. I quickly became despondent at the primitive nature of what passed as development tools. They were no better than anything I was using in the early 1990's.

It took time and a lot of swearing, but, eventually I found something that works for me.

So I thought I'd write a single post on what I've decided to use and why. I've focussed on what I liked, rather than A+B comparisons with other products or ways of working. After all, if you're comfortable with something, that's 90% of the battle.

Why not explain what you work with and why...
 
I use VSCode and PlatformIO, developing in C and C++ and using a Segger JLink Edu with a non commercial license.

The PlatformIO plugin for VSCode works well, there's broad support for boards and processors, initial setup is fairly painless with the correct libraries being downloaded, along with compilers etc. There's a good library browser and searching for, then downloading libraries is easy, Configuring builds for multiple processors is also catered for. There's a very active community if you need help.

VsCode handles C and C++ relatively well. There's full code highlighting along with rudimentary refactoring support. Code is checked as you type and, like a word processor, it highlights mistakes and mostly gets it right. Mouse over variables etc. displays the variable type and the comment associated with it. Jumping to definitions and declarations is possible with key-presses, as is renaming variables etc. You can search all the places where classes etc. are used. Code can be reformatted according to your layout preferences if you can get to grips with the willfully obscure preferences system.

It has lots of addins that you can install in a painless fashion. I found one that gives me the JetBrains Intellij keymap that's ingrained in my hands after a couple of decades using their UIs. It's not clear where VSCode ends and the PlatformIO plugin begins, something I consider a good sign in both VSCode and PlatformIO.

My overall impression is very favorable, had there not been issues getting stepwise debugging working with the Segger JLink, I'd have been up and running in a couple of hours. It's Still not 100% reliable and I suspect the reliability will depend on your target device. There seem to be problems with SAMD21 processors.

All that said, one I got the setup and burn-in done I've been able to concentrate on the design, code, and testing without worring about the environment I was working in. Which is how things should be.

VSCode and PlatformIO are free and I'll be sticking with them until I find something better. I have CLion and PlatformIO in mind, there's a one-off for Clion after a 30 day trial, JetBrains don't do a community version. Yet.

I chose C/C++ because I've got a lot under my belt. Familiarity counts for a lot when starting out with something new. If you're a programming noob Python might be a better bet. C/C++ are full of bear traps for beginners. Those unknown unknowns are there, ready to bite you.
 
I use PyCharm for Python, Visual Studio for C#, NetBeans for Java.
For C I prefer simple editor like Notepad++ and clang/gcc and valgrind/gdb.


I don't really care much about IDEs. I prefer the hard way.
 
Last edited:
NetBeans for Java

I've not used it in decades. Flirted a little when it first came out, thought it clunky, but found a neat little IDE called Kawa, it lasted long enough for the first release of JetBrains Idea, and using it was like I was at home wearing old comfortable clothes in front of a warm fire, never ever saw a reason to re/try anything else for Java.

Thankfully there's a free community edition **and** it's the basis of Google's Android Studio. Bonus!!!
 
I am coding small Atmels for some time. Started with eclipse, migrated to codeblocks. After a longer pause I found codeblocks unusable due to lack of supporting actual linux. Flashing with burn-o-mat is no option anymore due to permanent problems with java runtime.
Fed up by this I did a short google search how to compile on the commandline, wrote a small bash script that compiles and flashes the code that I edit with an arbitrary highlighting editor like kate ore whatever.
Btw I never used any kind of sw-debuggers to debug my code, so I do not miss that.
 
In 1995 I wrote a PCBCAD program in DOS using 8086 Assembler I wrote myself.
I had to write some software for simple menu's.
All the CAD drawing was written in Assembler.
dos1.jpg

dos2.jpg
 
Vim and about a dozen shell sessions.

That's the thing I think, whatever makes us most comfortable and gets the job done, but always open to something new.

I've not used VIM in anger for well over two decades, but in my Xenix days, Vi was all there was. Until I discovered a cut down version of Emacs. Jonathon's Own Version Of Emacs, it was small, fast and very portable, and had very good jump to compiler error chops provided you could regex (and we can all do that, right?). It was goodbye to Vi.
 
Emacs mainly, have used Pycharm (Jetbrain's Python environment) for various work and its good, but I couldn't get good enough key bindings to make it properly like emacs.
I hate mouse/pointer based text editing, its so slow/obtrusive with the visual feedback loop needed to move a pointer. If you've never used key-driven incremental text search you might not realize how powerful it is and emacs invented it AFAICT - and probably context-dependent autocomplete too!