I suppose this is just a rant from my side of the desk, so move along if you're not interested, last month I enrolled on a course with Coursera. I thought I'd take a look at them and settled on something I'm comfortable with from real-world experience, computing - and programming.
The course kicked off, and its a little scrappy, the lecturer's videos are a little off, his coding style is terrible and he makes annoying, obvious mistakes that he has to go back to correct time and again (in his code) and it breaks up the flow of his presentation.
But, I lived with this and did three weeks worth, I even started what was mooted as the programming assignment for the following week (now) a head of time, and had a semi-working solution to the program he kept saying he wanted us to write, we are after all doing a course about programming and programming languages....
So, I was shocked, and appalled when the first assignment was set, and it was basically NOT to code anything, but to create a series of scripts for a third party application - not even scripts for an interpreter - scripts for a third party application to generate code for me first... And I peeled the onion back a little here, and I looked at it, and I went back to re-read the introduction and carefully decided it was all shite.
The course information said that there was no new languages or rubbish to learn, there was just C++ or Java to write, and you know I believed it... First assignment, regular expressions and shite for this third party tool, and then it struck me why, the reason was they could mark the automated output from this tool more easily automatically than they could look at real code, by real people learning properly.
I understand this, the man hours needed to read, or even just compare real code solutions would be immense... But... That's what the course requires to prove learning, to prove useful, to be of real applicable use in the work place.
So, I un-enrolled, if they ask why, I'll be honest with them and critical of the lecturer to a certain extent. But this fact that I quit it, the reasoning, annoys me. Because at my work place I am the ONLY member of staff in our Software Development department with a Software related degree, I hold a bachelors in Software Engineering... And I often brow beat people into understanding that my interest is more than just getting the mortgage paid, I trained to do this kind of work, and I enjoy it... Yet I was oft told by higher management "That's all very academic, but how practical is it"... and you know what, from my point of view academia was really useful and a direct input into my work... But if this course was anything to go by... my bosses may have had a point, academia has less and less in relation to the real world with each iteration.
What about duplication? Well, another item of trouble which came up at work today was that we have a limited amount of bandwidth - either over 3G or on a DVD - to distribute system and content updates to clients. So I was amazed, dumb founded and truely staring like a dog being shown a card trick when I was informed that the updates sent out duplicate files over and over and over...
So, say you have a new application which uses the "background.png", instead of it checking whether the background.png already added to the update is the same, it just adds the same file again.. and again and again each time a new part of the system uses a file, it puts another copy into the update. At one point I saw a section of files of around 80mb being duplicated 4 times in 10 folder... that's 3200mb... 3.2GB!... pretty much the whole DVD, just on a few graphics which really need sending just the once.
Now, this disturbed me, as I was pretty certain around three years ago I was given an introduction to the system and told that if "a.txt" is used in two places only one copy will go into an update and there will be metadata added to the file allowing the client side to extract the file and make two copies. This is after all the beauty of digital distribution, if you need sixteen copies of a file you have in hand you can churn them out in less than seconds.
The reason however that these updates have to have multiple copies is so that "each update has at least once copy of the file when needed"... yes I get that, but why does one update need four copies of the same file in ten places?... Silence.
At this point I decided I was not going to be listened to, not going to break through the crust and obstinate selective ignorance being induced, because if they admitted the system was a bit daft, and not as intended all those years ago, then they'd have a hell of a lot of work to bring it up to spec.
The next issue I have is not about people managing me, it is more about my effectively managing my development time, I have over the last year evolved my development technique, I remember when I first learned to program sitting chipping away at a problem, and I could pretty much run the program through my minds eye in one large pulsing blob, this was of course Turbo Pascal and around 14,000 lines at a time.
However, the current project I'm working on alone is more than 250,000 lines of code, just for my part there must be well over 4,000,000 lines in the whole thing and I know many parts of it quite well, so that's valuable experience.
The trouble is, I've had to change how I try to conceptualise the code in my minds eye, either I will try to run just one function at a time - and I very aggressively try to functional-ize and divide my code down into smaller pieces to spread the challenge out over time.
I will use any and every tool in the workshop to get the job done, prototyping, process flow diagrams, SSADM, UML even just scribbles on a large piece of paper help.
All this is proving very effective in turning my time at my desk into useful development time, however, it leads to a rhythm in my working, I will sit with a pen, clicking, reading planning for quite a while and only then start to code. And I think my sitting there doing all this pre-thought is looking like apathy.