In my opinion, it is more desirable to program the ESP8266 directly. I'm always shivering when I see a Uno (ab)using the ESP8266 as a WiFi bridge when the ESP8266 already has everything needed for the project. Of course, this is highly project specific.
Advantages of programming an ESP8266 directly:
- you learn about a new MCU and architecture (XTensa vs AVR)
- you learn to use a new Arduino Core (Arduino-ESP8266)
- ESP8266 is way more powerful than the Arduino Uno
- 80MHz (overclockable to 160MHz) vs 16 MHz
- ~40kB free RAM at startup vs 2 kB
- 4 MB Flash vs 32kB
- can use an RTOS like FreeRTOS
- Flash can be used as filesystem (e.g. for a HTTP(S) server)
- ==> we can build way more complex projects
- WiFi radio and stack directly on the processor, no need to get information via a serial bridge
- higher speed, more direct control over sockets etc.
- you can try out other frameworks and languages, such as
- easier to move to its big brother, the ESP32 (Dual-Core XTensa LX6 @ 240MHz, WiFi + BT, 4MB Flash, 520kB RAM (+4MB PSRAM optional), tons of peripherals and accelerators) for even more complex projects
Disadvantages:
- only 1 ADC input (vs. 6) with a voltage range of 0 to 1.0V (unlike the normal 5V range on the Uno)
- remedy: external ADCs via I2C / SPI (e.g. MCP3008)
- 3.3V device, must be careful when connecting to existing 5V devices or shields
- less number of available digital GPIO pins (9 vs 13)
In summary, I think a good way of acquiring a better skillset is to try to explore and program a new board directly vs programming the old board and slapping the new one on top over serial. I hope this gave a rough overview of why an ESP8266 might be better (or worse) for a certain project.