Arduino programming guide series
Optiboot, a free upgrade for your Arduino
Your Arduino's microcontroller contains special software, the bootloader, which makes it very easy to upload new sketches. It is possible to replace the default bootloader with a more efficient variation and hence implement a software upgrade to give your Arduino more space for your sketches and faster uploads.

The Arduino owes much of its ease of use to its bootloader. The bootloader is software that is resident in the Atmega microcontroller and is responsible for making it easy to upload a new sketch from the Arduino IDE to the flash memory of the microcontroller.
The term "resident" means that the bootloader is not over-written when you upload a new sketch. It remains ready to facilitate the next sketch upload.
Without a bootloader, the process would be somewhat more complicated. You would need to use specialized hardware (such as an ISP programmer) to achieve the same thing. I suspect that many people would give up at that point and never go on to discover the real Arduino magic (getting things done and learning, quickly).
The default bootloader that comes with the Atmega328P on the Arduino is excellent. There are not too many good reasons to change it. But then again, many people don't need a reason to try something new!
There are alternative bootloaders for the Atmega microcontrollers out there, that promise to improve various aspects of the default bootloader that ships with most Arduinos.
One that delivers a lot of advantages over the default is the Optiboot bootloader.
Advantage 1: size
Optiboot is smaller, by around 1.5KBytes with a total footprint of just 500 bytes.
This means that more flash memory is available for your sketch.
Advantage 2: speed
Optiboot also runs at higher baud rates, which means that it will be faster to upload a new sketch.
This is great for rapid prototyping. A faster sketch upload speeds means that you will be able to iterate through new versions of your sketches faster.
There is a good chance that if you have a newer Arduino Uno, it already has Optiboot installed. If you don't, you can install it with the help of an AVR ISP programmer.
Although I have searched, I have not been able to find a reliable way to detect the kind of bootloader installed on your Arduino. Jeelabs has a sketch that can detect some older bootloaders but has not been maintained for a while. So, if you want to know what you have, consider uploading your bootloader yourself.

Done with the basics? Looking for more advanced topics?
Arduino Step by Step Getting Serious is our comprehensive Arduino course for people ready to go to the next level.
Learn about Wifi, BLE and radio, motors (servo, DC and stepper motors with various controllers), LCD, OLED and TFT screens with buttons and touch interfaces, control large loads like relays and lights, and much much MUCH more.
Jump to another article
3. Focus on the type parameter in "println()"
4. "0" or "A0" when used with analogRead()?
5. What is the "_t" in "uint8_t"?
6. Save SRAM with the F() macro
7. What is the gibberish in the Telnet output?
9. Confusing keywords? follow the source code trail
10. The interrupt service routine and volatile variables
11. The problem with delay() and how to fix it
12. How to deal with the millis rollover
13. Can you use delay() inside Interrupt Service Routine?
15. A closer look at line feeds and carriage returns
16. Understanding references and pointers
17. Simple multitasking on the Arduino
19. Concurrency with the Scheduler library on the Arduino Due and Zero
20. Bitshift and bitwise OR operators
21. What is a "static" variable and how to use it
22. Understanding the volatile modifier