Tag Archives: coding

Concerns

I learned to write ‘computer code’ in the era of Structured Programming. In the last few months I have come to question how much science I was exposed to in my Computer Science education. I was taught facts and current best practice but that wasn’t enough.

I’d stopped writing code professionally by the time Software Engineering became trendy, so I skipped relational databases, object orientation and coding for the web before I decided to reconnect with software development via the Business Analysis, UML modelling and Scrum Agile, Product Owner route. I THINK I know what objects are now.

When I decided to do some coding again, I at first decided to learn Python but quickly jumped ship to Clojure. I’m finding the functional model new and exciting but also unfamiliar and strange. I’ve made a huge leap into the dark, from a direction that that the text books I’m reading weren’t expecting. This post represents me taking a breath of air.

I thought I had my head around ‘separation of concerns’ into code modules, in a world made of objects. An object is a model of a real-world entity in a software simulation of reality. It represents the state of an object’s data and via calls to its methods, implements message passing between objects. What functional programming texts have shown me is that OO also invented objects that had no equivalent in the real world. In the functional world, concerns are implemented in stateless functions and state is represented by the flow of change over data structures, outside the functions.

What I haven’t yet worked out is what the “logically discrete functions, interacting through well-defined interfaces” of ‘Top-Down Design’ and ‘Step-wise refinement’ were supposed to represent. Anything we liked, I suspect, because no-one else knew either. I feel now that I was equipped with excellent knowledge of woodworking tools and the idea of furniture without being shown any woodworking joints. At least I recognised at the time that I was clueless and stopped. Many didn’t. OK, I think I’m ready to carry on.

Advertisements

Computational Science + Informatics = Software Development

1970s At university, I studied Physics and:

  • Computer Science

but it had very little to do with computers. It was far more about becoming a

  • Computer Programmer

1980s When I started work I heard about the increasing formalisation of the software development process and I wanted to be a

  • Software Engineer

1990s I’d moved into server management by the time I qualified as a

  • Chartered Information Systems Engineer

which fit in with my thinking that information is the important resource in any organisation but took me no closer to knowing how to make great software efficiently. I became disillusioned by watching people trying to apply the rigorous methods of hard engineering to the uncertainties and unknown complexities of software. I became interested in prototyping, incremental delivery and Agile.

2000s I was increasingly drawn to the idea that constructing software is a design discipline and that a software developer needed to be a

  • Software Craftsman

2010s After a few years working with an agile software team, I decided I wanted to try writing software again myself. A few weeks ago, an online MIT course on Python programming introduced me to an idea that I felt very comfortable with: a good developer is a

  • Computational Scientist (I’d settle for ‘Computing Scientist’)

and I’d add the option

  • Informatician, which overlaps with what librarians do now

Agile development processes are adaptations of the scientific method, to research what customers want and work out how to give it to them in the way that meets their opinion of best value, and I don’t see why software developers can’t be their own customer. Every great new software component starts off as someone’s experiment.

Hacktervism as a Distributed Team Sport with a Youth League

My list of interests includes tech, art and politics but I’ve never tried doing them all at once before. The inaugural meeting of Open Rights Group Birmingham recently was the ‘a first time for everything’ moment.¬† I found the way the techies, artists and political infuencers came at an issue with their own practices suggested that we could do great things together.
Twitter: @OpenRightsBrum
Blog: https://openrightsgroupbirmingham.wordpress.com/

Last week, as a volunteer mentor at Birmingham City University for Young Rewired State’s Festival of Code 2015, I was on more familiar territory of working with a group of young techies with a shared product development goal. Neither I nor my fellow mentors Simon & Bhish had been involved before and as the week wore on, we knew our emphasis needed to shift from working prototype to presentation skills. We suspected that we were slightly out of our depth in this area and that was before we saw the competition.

Even in the heats, there were no bad ideas. Some of the teams presented with such incredible passion and strength of personality, that it was easy to miss that they hadn’t shown any evidence that they had written any code that worked. Our team had gone from 6 quiet kids who’d never met on Monday, to a functional team developing front and back end systems in parallel and delivering a working prototype for an earthquake detection and mapping system by Thursday evening. They can be very proud of themselves but they were not selected for the semi-final. I hope they’ll continue working on their product.

I noticed that there appeared to be a divide between kids who had become skillful coders then looked for something to do with that skill and the teams who want to change the world so are learning to code. Imagine if they could get together in multi-skilled teams, including people with great artistic and presentation skills. They’d be unstoppable.

Last night, I went to a party with Dudley Green Party and Natalie Bennett was the unofficial guest of honour. She said it had proved difficult to organise IT with volunteers. I think it could be done, if you had a few cat-herders, a broad mix of skills to draw on and a distributed development model. First, find your Green hackers; then find out which night they have least homework.

Poplog Will Eat Itself

Last night I went out for Birmingham Tech Drinks. I explained to someone how I decided to become a Business Analyst 10 years ago then got involved in introducing Agile software product development which has led me full circle back to wanting to write code, for the first time since about 1984. When I last created software there was a VT100 terminal on my desk. It could only do characters, lines and boxes. My last program had windows, because I’d seen a Mac. I coded it myself. I was designing top-down, writing in structured languages and storing data to the file system. There were no bit-mappable displays, objects or relational databases and the web hadn’t been invented. The Internet was about somewhere. I knew someone who’d seen it.

I’ve been assuming that I needed to catch up with all the changes in development that I had missed but current software trends have looped back to the eighties. Is a Google Chromebook really very different to an X terminal? Is The Cloud more than an infinite VM/CMS mainframe? In the last couple of days, I’ve realised that the circle is even more complete than that. Trendy developers have given up on relational databases, preferring to use NoSQL database systems that store their data in what look very like JSON or XML files. That’s just a merged distributed data dictionary and file system.

Today, I’ve remembered another reason I became a Business Analyst. I was too exhausted by running against the spin-rate of change to want to retrain as a specialist in yet another new technology. Instead, I went into a nice stable job where nothing had changed for years, where I learned UML, introduced Free software and fought to use Agile methods, making Business Analysts in software teams redundant (maybe.) I can already see the same ‘change stress’ in people half my age as they try to learn the must-have JavaScript library of the month. It wouldn’t be so bad if we didn’t keep looping back and forgetting what we learned, but that happens when you burn-out and carelessly dispose of your most important assets, your people.

The advantage of the experience of going round the wheel a few times is that you can guess what is going to go wrong next and be ready with a solution. Make room young people, I can help with this.

Poplog was a trendy 80s AI language. It should be back round again in a bit.

Programming The Hard Way

I wrote about my plan to restart computer programming. I’ve postponed the HTML5/CSS/JavaScript route, as I was blindly following instructions, which is not my preferred learning style. I wasn’t learning fast enough so got disillusioned and lost interest.

I found a book called ‘Learning Python the Hard Way’
http://learnpythonthehardway.org/
and I was “trying it for free” but I’m not really its target audience:
“Made for beginners who know nothing about programming.
Not a book claiming to be for beginners but really for programmers.”
If you are one of those, then it looks a good way to learn Python programming.

I skipped to the end to read “Advice from an Old Programmer” and saw that the author¬† claimed to know 20 languages when he wrote the book.
“How ridiculous!”, I thought, “No-one needs to know that many programming languages.”

Then I made my list. I was a student then professional programmer for less than 10 years.

At university: Algol 68, COBOL, Lisp.

At work on VMS: DEC DCL, BASIC, Pascal, FORTRAN. On IBM mainframes VM/CMS with Rexx.

In recent years: Business process modelling in the graphical language, UML.

Along with dabbling with various bits of:
POP-11, C, Macro-32, SQL, Unix/bash scripting, C#, XML and Java

and now I’m trying Python, HTML5/CSS3/JavaScript.

About 20. As I said, RIDICULOUS!

There is a further gem of advice in that section of the book: don’t see programming as a profession but as a weapon in another field, where the things you can achieve with computers are valuable and respected. I had achieved this until the last couple of years, when I was re-organised into an IT department, without my agreement. They were the least satisfying of my career. I like solving real problems, not artificial ones caused by ill-advised IT changes.

Coding is a tool but there is little chance of finding satisfaction in a job advertised as ideal for someone who likes hammering; particularly if they tell you the manufacturer of the hammer which you must have 2 years previous experience with. Don’t work for a fool. It only makes you look foolish.