Code Club

Code Club

Very recently I got asked to help in running a Code Club at a local primary school, it is something i have been interested in for a while now. My daughters have both tried coding with scratch at home on weekends and loved it. Especially the Frozen and Star Wars projects on code.org. I tried numerous times to get my eldest’s school interested in running a club, even though my eldest isn’t quite at the right age yet. The projects and resources are targeted at 9-11 year olds. However my 7 year old has done some logic puzzles and coding in her IT lessons on both desktops and iPads. (She got me to download the app so she could teach the 3 year old how to code!)

Anyway i digress, the school were unresponsive and so I accepted an offer to help at another school nearby who have an existing club set up. There are around 4 or 5 volunteers and a class size of 20. The clubs run once a week during term time after school, are free, use school equipment and resources provided through the Code Club website. (Resources)

The projects start by using Scratch and get more advanced, moving into HTML/CSS and then finally Python.

The fact that the clubs run directly after school obviously creates a problem for those volunteers with jobs, luckily for me the company I work for slicedbread are lovely enough to allow me to have a break in the day of the week the club runs. I am honestly very excited about seeing what they produce and the ideas they come up with. Speaking to the other volunteers it is a thoroughly rewarding experience, mentoring the next generation of coders and digital creatives.

If this had existed when I was at primary school I am sure I would have jumped at the chance, I learnt to code when I was 18 (and already on a computing course at university!). Most children are so comfortable with digital technology now, it is in everything they touch and do pretty much. To give them the chance to understand what goes into that and how it works is amazing, it may even inspire them to go and create new apps or technologies themselves.

I hope to keep posting throughout the school year about the club and the activities we undertake. Also my efforts to learn Python.

Python

Needing to know the basics – part 2

In part 1 I looked at my early career and the lessons learned by having to know what was happening in my code and others in order to understand bugs and build upon existing features. In part 2 I intend to look at more specific examples of using tools and how not knowing what is happening can affect a developer’s ability to do their job.

I have been called over by a more junior member of the development team in several of my past jobs to help them with a problem. Usually it is with a piece of legacy code written in ASP or PHP, they have made a change and it has broken something. “I have made this change and now it has stopped working…i need to debug it” Now at this point if it is ASP we could attach the debugger (http://msdn.microsoft.com/en-us/library/3s68z0b3.aspx) and step through the code after some tinkering. Or we drop in a Response.Write or two and hit refresh in the browser. Mostly you can get to the bottom of it fairly quickly without any extra tooling, just remember to take those write statements out before you deploy!

Another instance of knowing what is going on can arise from occasions where developers have used one of two things. Either the (horrible) Visual Studio toolbox to drag and drop a whole set of controls onto a page or when someone is using an ORM to do their database modelling.

VS Toolbox

This approach can help the “bedroom” or newbie developer to get things up and running with no hassle (if you want no hassle development and efficiency of getting things up and running, check out NancyFx) or need to write their own code. Great you might think, I have a login form or set of pages to do CRUD operations on my data and I didn’t have to write anything! What happens if you need to extend it or debug it, maybe someone else needs to style it or write some client side code against it, is it secure, does it perform well? With some digging into the auto generated code and what is being called lower down the stack and in the database you can find out the answers. However then you have just defeated the object of using some “tools” to get you to a place quickly without having to write code.

ORM

In my career so far i have done pretty much every approach to persist and read data into and from a database, SQL commands/parameters, stored procedures, views, datasets, data tables and database first, code first and dynamic style modelling using an ORM. I have had several Twitter conversations with @JohnnoNolan and @FranHoey around the potential for a dying breed of developers who can write and understand SQL. I have also spoken to people I have worked with about cracking open the Profiler and seeing what their LINQ or similar is actually doing.

Mapping database fields and values to POCOs is great and can allow middle-ware and UI development to be done without having a dependency on a particular data source. However if this source is from a database, are these queries performing as well as they could? Are you going to incur the wrath of a DBA somewhere?

At the end of the days tools are brilliant, but it is useful to know the basics, then you can extend what the tools are giving you. You can also help solve that tricky bug and gain the plaudits of your ever so grateful colleagues!

Needing to know the basics – part 1

At present we are in a great era of tools and resources to help us as developers achieve the goals of our projects whether they are work based, private or for the hell of it. We have editors, IDEs, code pens, validators, browser add-ons, frameworks and boilerplate libraries at our disposal. They give us ways of speeding up development, making it more efficient and just get the “boring” stuff done for us.

However it wasn’t always this way, when I first started out as a fresh faced graduate seeking to earn a living as a developer I was using ASP (why is it called Classic ASP? ASP.NET is .NET, if I say ASP to someone i haven’t had anyone of them mistake what i am talking about for .NET). I was writing ASP using VBScript, supplementing that with HTML/CSS and JavaScript. All of this was going on in Notepad and Macromedia Dreamweaver, a local IIS 5 install and a whole lot of trial and error!

If something went wrong with the server side code, you got most of the time a less than helpful error message, which meant you needed to debug it. So you found the area of the code that seem to be causing the trouble and started writing values to the page to see what was going on. Issue with the front end code? Open the page source and look at what was rendered, hop back to Dreamweaver and change it, back to the browser and hit refresh with everything crossed.

What did this teach me? It taught me to try and get things right first time, build small parts to test, test thoroughly when i made a change and most of all have a great deal of patience. It also gave me an appreciation for knowing what is going on in my code and why it was breaking. I had no tools to model my database, default my styles out across browsers, show me what properties are on my objects and make sure i hadn’t made a typo somewhere. I only found out once i started testing it in a browser.

I have encountered a few people over the years who love their tools and can use them very well, I love tools too and use them every day. However these few have found it very strange that i need to know what is happening in my code to a level that they take for granted because of a debugger here and an ORM there. Now like i said i love tools, the Visual Studio debugger is very powerful as are the Immediate window and ability to change values on the fly. They save time, they give you a way to poke around inside an application and understand it. Could i work without them at all and be nearly as effective though?

I would like to think that i could, i often practice it (with varying degrees of success!) when developing. Almost like a challenge to stand on my own and see how i cope.

In the next post, part 2 of this I look at more specific examples of needing to know what is happening “under the hood”.