Coming from Windows all my life to OS X was a bit bumpy. I will say not being able to create a quick text document is so very mildly annoying. But I've learned to use Notes.app in place of my usual purposes for *.txt files unless I'm wanting to move some chunk of text data somewhere quickly outside of the walled garden of my Apple ecosystem.
What I want to know as somebody trying to learn C/C++, is Xcode good for somebody who is wanting to try their hand at bare metal stuff? I always hear how bad it is outside of app dev. but can it help me be productive compared to CLI environment or just using a text editor with nifty add-ons?
I've written a lot of C++ code in Xcode. Xcode is a pretty poor IDE in general but it works reasonably well for C++. IMO things like autocomplete and a graphical debugger are enough of a productivity boost that I wouldn't want to use a plain editor.
Yes, and the ability to find call references (who is calling this function, where is it used) from the drop-down menu is really helpful. I miss the ease of access to that sort of functionality in Visual Studio.
Yes it is there for me, but the functionality is different on Xcode as it will find all references when you open the menu, so you can see the results straight away. One less click (and perhaps one less popup hidden "find symbol results" pane in VS).
That was what I was highlighting, not the fact that Visual Studio somehow doesn't have that functionality.
I would recommend using QtCreator if you want to do just pure C++ work done. It has less focus on app development and it has way better highlighting (semantic highlighting thanks to clang), refactoring and debugging.
Instruments, included with Xcode, is a really good tool. I used instruments for profiling and finding memory leaks... I think it was great... except for the lack of reverse debugging which is pretty much necessary these days.
I have used both Xcode and Text editor & Terminal for C/C++ development. In my opinion both work equally well but I would advise you to use the Text editor and Terminal method because it means you need to learn how things like build systems, LLDB, Valgrind and more work. This knowledge is essential when the IDE does something Unexpected and you need to fix it.