user49776: I'm going to be in the third year of university in a month. I'm satisfied with the software part of my bachelor but I feel like I lack in practice in practical implementation. Would getting an Arduino board and playing around with it worth it and useful for me?

user7508: As already stated in previous answers, there is no clear-cut answer to
this kind of question. It all depends on what you want to learn.
If that can help, I will share my personal experience. I studied
computer science for only one year at university. Then I stopped to
continue on my physics major. But as I never lost interest in computers,
I continued learning on my own. I started playing with Arduinos just
because it looked like a fun way to learn some microcontroller stuff and
low-level programming. The barrier to entry is extremely low: in no time
you get your LED blinking, and from there you can start exploring plenty
of possibilities. The Arduino IDE and core library make it extremely
easy to make simple programs, but they are quite limited when you want
to get more serious. For many people, this environment, plus extra
downloadable libraries, is all they need to achieve their goals. For me,
it was a stepping stone to learn lower level stuff, like direct hardware
access, use of the avr-libc, and even assembly programming.
Today, what I love most about Arduinos (or, rather, the AVR
microcontrollers at their core), is their simplicity and
understandability. Today, when I disassemble a program I have written,
I can understand basically everything: the C runtime initialization
code, the memory allocation, the way the compiler translates my own
code... I find it extremely rewarding to reach such an understanding of
a (kind of) computer system.
The same level of understanding would be (for me) impossible to achieve
on a typical PC. Even though I use Linux, which is Open Source, and I
have access to the full source code, the whole software stack involved
in running even the simplest program is overwhelming. The kernel itself
is like millions of lines of code. Even the assembly language of an x86
(or x86_64) is something I find way too complex for my taste.
In conclusion, the Arduino has been for me a very rewarding learning
experience. If you want to get your hands dirty with bare metal
programming, I definitely recommend you get an Uno, or something
similar, and start playing with it. Once you get your first program
running (and that takes no time!) start looking under the hood: read the
source of the Arduino core (it's short and very readable), read the
datasheet of the microcontroller, start poking the
hardware, take a look at how the compiler allocates
memory, how it translates your source code...

user31105: It depends. If you don't have any knowledge about microcontrollers it might be useful.
However, Arduino hides a lot of concepts in their libraries. If you want to go more indepth check other systems like STM32 or PIC.
You also can do both, start with Arduino to get a rough feeling, continue with another.
More important is WHAT you try, don't stop with LEDs/switches, but check communication protocols like SPI, I2c, UART etc. And learn what timers, interrupts etc. are and how to use them.

49776: <p>I'm going to be in the third year of university in a month. I'm satisfied with the software part of my bachelor but I feel like I lack in practice in practical implementation. Would getting an Arduino board and playing around with it worth it and useful for me?</p>
 7508: <p>As already stated in previous answers, there is no clear-cut answer to
this kind of question. It all depends on what you want to learn.</p>
<p>If that can help, I will share my personal experience. I studied
computer science for only one year at university. Then I stopped to
continue on my physics major. But as I never lost interest in computers,
I continued learning on my own. I started playing with Arduinos just
because it looked like a fun way to learn some microcontroller stuff and
low-level programming. The barrier to entry is extremely low: in no time
you get your LED blinking, and from there you can start exploring plenty
of possibilities. The Arduino IDE and core library make it extremely
easy to make <em>simple</em> programs, but they are quite limited when you want
to get more serious. For many people, this environment, plus extra
downloadable libraries, is all they need to achieve their goals. For me,
it was a stepping stone to learn lower level stuff, like direct hardware
access, use of the avr-libc, and even assembly programming.</p>
<p>Today, what I love most about Arduinos (or, rather, the AVR
microcontrollers at their core), is their <em>simplicity</em> and
<em>understandability</em>. Today, when I disassemble a program I have written,
I can understand basically everything: the C runtime initialization
code, the memory allocation, the way the compiler translates my own
code... I find it extremely rewarding to reach such an understanding of
a (kind of) computer system.</p>
<p>The same level of understanding would be (for me) impossible to achieve
on a typical PC. Even though I use Linux, which is Open Source, and I
have access to the full source code, the whole software stack involved
in running even the simplest program is overwhelming. The kernel itself
is like millions of lines of code. Even the assembly language of an x86
(or x86_64) is something I find way too complex for my taste.</p>
<p>In conclusion, the Arduino has been for me a very rewarding learning
experience. If you want to get your hands dirty with bare metal
programming, I definitely recommend you get an Uno, or something
similar, and start playing with it. Once you get your first program
running (and that takes no time!) start looking under the hood: read the
source of the <a href="https://github.com/arduino/ArduinoCore-avr/tree/master/cores/arduino" rel="nofollow noreferrer">Arduino core</a> (it's short and very readable), read <a href="http://ww1.microchip.com/downloads/en/devicedoc/atmel-42735-8-bit-avr-microcontroller-atmega328-328p_datasheet.pdf" rel="nofollow noreferrer">the
datasheet of the microcontroller</a>, start <a href="https://www.arduino.cc/en/Reference/PortManipulation" rel="nofollow noreferrer">poking the
hardware</a>, take a look at how the compiler allocates
memory, how it translates your source code...</p>
 31105: <p>It depends. If you don't have any knowledge about microcontrollers it might be useful.</p>

<p>However, Arduino hides a lot of concepts in their libraries. If you want to go more indepth check other systems like STM32 or PIC.</p>

<p>You also can do both, start with Arduino to get a rough feeling, continue with another.</p>

<p>More important is WHAT you try, don't stop with LEDs/switches, but check communication protocols like SPI, I2c, UART etc. And learn what timers, interrupts etc. are and how to use them.</p>
