Another rant on Software courses

I live with two musicians, probably some of the best there are in Europe and absolute specialists in their respective area. I would say that they are so good that they could just walk up on any stage and play pretty much anything. But still after 40 (+/-) years of experience they still practice pretty much every day for hours and hours. Their attitude is not "I am so good I can do without practice" NO they feel like they need to keep on practising and improving. When asked why they do it they compare it to sport. "A good runner has to keep on running otherwise he will become slow".
The more I think about this the more this attitude should also be applied to Software Engineering. In my master course I did near to no programming at all and even in my BSc course programming was not the main topic, but still most of us are going into jobs where we are going to program. I am a programmer by upbringing, I started programming and probably I am going to program for quite some time. But my years at University have hugely reduced the time I spend in front of an editor learning new things. So how can I assume that I know programming if I haven't really trained it for such a long time. If you look at the Music degrees the main focus is on playing and just a little bit of theory. It seams to be a problem that most Computer degrees originate from the math departments where theory is important. But looking at my year doing a math course a lot of even that degree is actually solving formulas. I think there is a need for a finer grain split in computer courses. (Not only Computer Science and Software Engineering) maybe there is a need for a really programming course. So the Engineers can model stuff and do formal validation, testing etc ..., the Scientists can do the theory of sorting, searching, etc ... and then programmers then implement it.

4 comments:

Filipe Manana said...

I must say I fully agree.
However I see programming at 3 fundamental levels:

1) the least important (and easier) - know how to use a particular programming language (doesn't matter which, or which paradigm)

2) know how to think at an algorithmic level (search, sorting, linear programming, dynamic programming, data structures, etc)

3) know the basic low levels details of the hardware/software interface (computer hardware and OS design principles - virtual memory, time sharing, process management, file systems and drivers)

2) and 3) are the most time consuming and harder to pick. However (and unfortunately) most of the industry demands (or tests only) for point 1)

cheers

vext01 said...

I wish we *had* been taught all the maths at our undergrad, as I am having to learn the prerequisites (for my postgrad study) *now* rather than when I should have.

I don't know. It varies from uni to uni, but we did a fair amount of programming at undergrad level and I do a lot of coding now on my PhD. I tend to think that of you *want* to program, then you will, which is what you are doing right :)

Alex said...

I will agree that our MSc had almost nothing to do with programming. But I think theory is very important to a programmer, like it is for a musician or someone involved in sports.
In musician degrees, you will need to know about Harmony and all that stuff...but in order for you to become a great musician, you have to practice on your own. All the theory is very important to become great musician but in the same time, if you don't practice and apply all this theory into your playing, then you won't gain anything!
The same thing is with sports. For example, when you're in a basketball team, your coach will teach you how to play in a team, you will learn specific attack and defense schemes, etc. But if you want to improve your playing, to get better at free throw shooting, 3-pointers etc, you can only achieve it through practice.
I think that the same can apply for degrees like ours. They can give you a nudge to the right direction, but from there you need to practice on your own...theory is important, but only if you can combine it with practical applications, and that's something you have to do on your own! I think that's what separates passionate programmers from common ones!
I'm saying all that mostly for me, because the last two years I have lost all my passion for programming...and this degree just made things even worse! :(

Toki said...

I've got a slightly different perspective of things. If u want a degree in programming, u should go to one of them vocational schools in programming... and there are quite a number. But Software Engineering is a quite different topic. Everyone knows that there's a lot of things involved in the Software Engineering discipline. 1st. there's programming, then there's design, then there's requirements, and the list goes on. One thing that is also important to understand is that Software Engineering is also a relative new practice (compared to music) and there's still much research going on in this area. So such programs need to cater for a lot of concerns. I would argue that a rock-star will play n play n play to perfect his art but a music conductor will learn the notes, think about the notes, gather inspiration from a number of sources (even music unrelated).. he'd also have a small instrument next to his side to check out his tunes... and in like manner nothing stops u from having ur PC next to you trying out concepts. And if u think an MSc in music is about stroking on a violin all day... think again.

[might have sounded a lil harsh but a balance from another perspective was needed. :)]