Arduino Uno with ESP8266 Wifi transceiver or ESP8266 NodeMCU board?
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


Micropython
esp-open-rtos
the NodeMCU firwmare (Lua language)
Espressif's NON-RTOS / RTOS SDKs

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


remedy: logic level shifters, voltage regulators

less number of available digital GPIO pins (9 vs 13)


remedy: external GPIO expanders via I2C/SPI (e.g. PCF8574, MCP23017)



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.