Software is a cool field. You can program a computer to do lots of things, and I find it a very enjoyable activity. I learned to program a long time before I went through some university courses on the subject, and found that there was a huge discrepancy between what the lecturers thought they were teaching the students and what the students actually learned.
In my final year of uni, I worked in a group on building an agricultural robot. I worked on the majority of the embedded software, but some of the modules were programmed by another student. He worked on two modules and his approach was to "get things working" and then "make it look pretty." As it turned out, because of the amount of code required for this module, he had great issues "getting things working" and then struggled to "make things pretty" without breaking them. This was not uncommon. Many other students in other projects attempted to do the same. And it results in weeks of extra work. What I was expecting to take two days ended up taking over a month. In the end, we sat down and designed the sofware. Implementation was done by the end of the week.
This is a direct response to the way that software projects are accessed. In all the courses I took, only the final code was inspected and most projects were relatively small. I think some projects should have been "incremental" where first you have to design your code before you even start implementing is. Remember to design your software before you build it