Possibly being in a similar situation (electronics novice but experienced software engineer), maybe relating my experience over the last six months or so would be useful to you (and maybe it wouldn't, but I'm going to tell you anyway :D ).
I started messing around with Arduinos a couple of years ago, and made (well, half-made) a 3-axis CNC machine by cobbling together some motor controllers and using some pre-existing code. However, apart from the mechanical parts, most of the time I spent writing the PC software to drive everything and just needed a little soldering and wiring on the electronics stuff.
This was fun and vaguely successful, but it didn't teach me much about the electronics or indeed the Arduino itself.
So, I went back to basics, bought some component kits, and flashed some LEDs and beeped some speakers etc. and then got more adventurous and bought a handful of Neopixels ( http://www.pololu.com/product/2536 ), thinking I could use my software knowledge to make some interesting animations.
By using the supplied library code, I was getting started on this, when something significant happened.
Someone kindly gave me an old development board for a different microcontroller (an 8-bit PIC - http://www.microchip.com/pagehandler/en-us/family/8bit/ ). Intrigued by this, I downloaded the free development tools and realised that this was similar to the Arduino, except much closer to the hardware and with various physical differences (clock speed, amount of memory, etc.) but with enough similarities to make me want to do something with it.
So the next few months went something like this...
First, I looked at the Arduino library code that drives the Neopixels, read the datasheets, looked at the timing charts, and then decided to implement some code on the PIC to drive the LEDs just like I'd done from the Arduino. Now, this is where it changed my experience from just copying existing stuff to really learning about the hardware (and software).
To start with, the internal clock on the PIC that I was given isn't fast enough to provide the tight timing sequences required by the Neopixels. So, I learned about using external crystals, how they are used in circuits, how they differ from resonators, and how to configure the PIC hardware to run at 20MHz instead of 4MHz. I looked at the Arduino and saw those parts of the schematic that I now vaguely recognised and understood a little more. Then I had to write the code on the PIC in assembler (still not fast enough to use C), which meant that I really had to understand the Neopixel requirements and also had to buy myself a logic analyser and learn how to use it and how to understand where the problems are when it doesn't show you what you expect.
Having got this "simple" circuit working on both the Arduino and PIC, I then looked at animating the colours. This was much easier on the Arduino because it has loads of memory (relatively), but the PIC I used only has 128 bytes (yes, bytes!). So to port that functionality, I decided to use a Serial EEPROM to hold a bunch of animation data (RGB values) and to read that on the fly.
Doing this, I learned a lot more, like: how to use I2C on the Arduino to write data to the Serial EEPROM, how to hook this up to the PC so I could read and write the animations using my own familiar environment, then how to read the EEPROM using I2C (in assembler) on the PIC, which means you really get a much better understanding of I2C in general and the Serial EEPROM devices in particular, and along the way discovered the need for bypass capacitors, which caused me no end of problems until I realised that noise in the two circuits (Arduino version and PIC version) differs due to the different characteristics of the microcontrollers.
Next, having a nice RGB animation running (on either microcontroller) I thought it would be cool to add a microphone to the circuit so I could adjust the intensity of the colours according to the ambient sound level. Again, I protoyped on the Arduino (because it's easier), and learned about electret microphones, the need for amplification before ADC, so I learned about op-amps (there's is a lot to learn there), voltage dividers (for DC bias), low-pass filters (noise suppression), peak detectors ... so many options, some using additional electronics, some using software, all very interesting. Porting that section of the circuit to the PIC taught me even more about ADC (it's similar but not exactly the same on both microcontrollers), interrupts, timers, etc. - much of which you're more protected from on the Arduino. By doing this on the PIC, I understood what's behind the Arduino's readAnalog() function a lot better.
As an aside, and getting tired of pulling the PIC out of its socket to reprogram it, I also learned about ICSP on the PIC and then understood what that ICSP header on the Arduino is for, and how it works, and how useful it is and also how the Arduino makes the programming so easy over USB, which is why I'd never used the ICSP header. I hadn't even considered this before because I was always so used to just plugging something in my PC's USB port and having it work straight away. Now I know something about what has to happen to make that seamless.
So, I have ended up (or nearly) with a probably totally pointless toy that flashes coloured lights at you while responding to sound, but I learned a lot more by using Arduinio and PIC than I ever would have done by sticking to one environment.
If anything, it's really taught me that, despite having 37 years of software development behind me, I am really really ignorant about the mechanics of how computer systems (or any electronic devices) really work and I appreciate the breadth and depth of knowledge freely given by a lot of contributors to this forum.