Blog Archives

ACCU Conference Retrospective

I did plan to write a series of blog posts at the end of each day of the ACCU Conference in Bristol, but between having far too much fun learning, and having zero energy by the time I got home, never mind zero brain power, I thought I’d do a write up in one big posts with some “Match of the Day” style highlights.

Day 2 (Tutorial was day 1 for me…)

Day 2 kicked off with the ever energetic and lime-green nail coloured Pete Goodliffe bouncing around the stage giving a talk on how to become a better programmer. He covered various aspects of becoming a better programmer, but the main point I think he made was attitude. Our approach to becoming better. This challenged me (yet again! Thanks Pete (: ) because while I’d been moving forwards to becoming better, my attitude at times sucked!  Frankly.

Pete also issued a challenge to us all.  We were dared NOT to go to the stuff we’d be comfortable with, but to stretch ourselves and head off for talks that were way outside our comfort zones, and attend as novices. (Wasn’t hard for me, I was a novice at most talks!)  That way everyone would leave the conference having learned something they didn’t know before.

After being filled with coffee and all sorts of pastries and such, it was on to Seb Rose’s talk on Low fidelity approaches to software development. He spoke about how we tend to bite off more than we can chew, working on something that’s almost ready and will stay like that, and never get delivered.  He made a quick point on the waterfall and the biggest issue with it, was that everything feels ok until all of a sudden bang!

Seb also made the point that feedback is a very important thing to make use of, because it allows us to see where we’re at at the moment. It also gives us a chance to take stock of what we’ve done, and what our customers think. And pointed out that the Military use the Plan – Do- Check – Act which gives feedback that allows us to change the next part of the plan.

He quoted Father Ted, the scene involving Ted explaining perspective to Dougal making use of a toy cow to explain that this one was close, but the ones outside were far away.  And it’s the same with software projects.  Until we start working on something, we can’t understand the full scope of the problem we’re working on.

From there it was on to Mike Long’s talk on How To Talk To Suits, where I learned a great deal about speaking to business managers. And I thought I already did this pretty well, as I don’t like bamboozling people with technical jargon. This also included a practical workshop to work through which was good fun.

Mike spoke excellently on this, and talked us through a bunch of business clichés, such as a Business Case, where we need to present to someone for an allocation of resources for the stuff we want to do. Time is money, Mike pointed out that from a business perspective, Time matters more than money, indeed, I’ve often come across this in my career up to a point, “we don’t care how much it costs (within reason) but we must have it by tomorrow”.

Mike also used real world examples to explain that money comes in many flavours.  That is to say that if we wanted a new server for example, and our hardware budget was fully allocated, then we could STILL get the money but from another budget, such as an innovation budget for example.  Hence the term that money comes in many flavours.

There were some great lightning talks as well, and Chris Oldwood did some stand up which was great fun, and it’s a shame it wasn’t recorded, as there were some belters, who knows he may pop them on Twitter.

Day 3

Day three kicked off with frankly an amazing keynote talk from Axel Naumann on how CERN use C++. And it was awesome to hear how C++ was used to process data from the Large Hadron Collider. But what was epic for me, was to see some of the stuff that the LHC produced, and the fact that it was all completely open.  Axel also spoke about an experiment they’d carried out where they fired neutrons at nuclear waste that shortened it’s half-life but also generated energy!

Then there was an interesting talk from Kate Gregory and James McNellis on Modernising Legacy C++ in which they raised some excellent points. They made the point that we should compile C code as C++ as we’ll get better type checking.  They also made an excellent point that the warning you ignore isn’t a warning.  So Kate and James suggested that what we can do to modernise legacy C++ code is to do the following:

  • Increase the warning level and compile as C++
  • Rid yourself of the pre-processor.
  • Learn to love RAII (Resource Acquisition Is Initialisation)
  • Introduce Exceptions but carefull.
  • Embrace Const
  • Cast correctly

After that, there was an excellent talk by Chris Smith and Mark Upton from Redgate on what’s wrong with sprint retrospectives and how to fix them. This was a very practical talk, where we there was a fair bit of user interaction where we shared our experiences of working using retrospectives. They shared their experiences at Redgate in improving their retrospectives and had a lot of good ideas I plan to put in place at work.

Day 4

We were treated to a great opening talk where Alison Lloyd went through some case studies of various mistakes made in industry and what we could learn from them. I was scared that there’d be photos of Therac 25 victims initially, however there wasn’t anything like that.  Alison started her talk with a sobering discussion about diarrhea and how it caused so many deaths. It was quite educational and challenging to hear the devastating effect that this had on humans, and HOW it caused so many deaths as well.

This talk was running through my mind for most of the day if I’m honest, and I’m pretty sure I’m not the only one who was challenged and moved by what I heard in those opening 15 minutes.

Day 5

I had the unfortunate experience of turning up to a talk, and needing the loo, popped out for a second or two.  When I came back the door magnet engaged, so I couldn’t get back in. I didn’t want to knock either as I didn’t want to disturb the chap giving the talk.

However, Anthony Williams’ talk on C++ Atomics was very good.  I didn’t understand all of it, but I certainly got the gist of what was being said.  Essentially, don’t use atomics unless you have to.  You should only use them if you REALLY need the performance gains it will give you, and even then you should only use the memory_order_seq_cs (Sequential Constant) as the others are horribly complex, and you should only use them if you REALLY know what you’re doing.

There was a spare slot on the Saturday, so I volunteered to fill half of it with another chap, the only issue was, Roger and Kevlin were also speaking, so I knew that most if not everyone would be at one of those two talks, so I expected nobody to turn up to the talk I gave. But two guys who’d turned up to the previous talk stayed.  So rather than me stand up and do a talk, I made it more informal and turned it in to a chat with slides which I think quite well. I’ll be honest, I knew there wasn’t going to be many folks at this one, but it was a good way to see if I could do this conference talking thing.

The End-note was Chandler Carruth from Google talking about how they’ve made C++ safer, easier and faster with their use of Clang. It was a great talk with some live code demoes as well. He told us how Google had a completely unified codebase which allows for a single unified build system.  Chandler also spoke of the things that made C++ safe and quicker as well but I wasn’t quick enough to grab these as notes, the slides should be available though.

Conclusion

I’m not sure if it was me or not, but this conference felt different to me. It felt like I connected more with the material and the topics, and that could well be due to the fact that I’ve developed as a programmer since the last conference. But there was a pleasing and friendly atmosphere this year, not that there wasn’t one before but it felt more tangible this year at least for me.

I also had the chance to make new connections as well as catch up with those I made connections with last year, and a lot of people came up expressing an interest to be interviewed for the CVu magazine, and those I approached to ask were equally as nice.

I was sad to hear that Jon Jagger who’d been conference chair for the last four years had stepped down. I’m certain that I’m not alone in saying that Jon’s arranged an amazing conference this year as he has done for the last four years, and the fact he got a full minute of applauds and cheers speaks volumes for how good a job he’s done. I do look forward to hearing him speak next year though (:

However Russel Winder is the new conference chair, and I know that the conference is in safe hands.  So I’m excited to hear of what’s going to come in 2016, I may even put in a paper this time Winking smile

If you want to see what went on and who said what, the slides are available at the ACCU website, which can be found at http://www.accu.org and if you like what you see, then consider becoming a member 🙂

Advertisements

An interview with Kevlin Henney

I recently got the opportunity to do an e-mail interview with Kevlin Henney. He is a well-known author, engaging presenter, and a consultant on software development. He was the editor for the book 97 Things Every Programmer Should Know, and has given keynote addresses not just at ACCU but at other conferences as well.

How did you get in to computer programming? Was it a sudden interest? Or was it a slow process?

I was aware that computers could be programmed, and the idea sounded interesting, but it wasn’t until I was able to actually lay hands on a computer that I think it occurred to me that this was a thing that I could do myself.

What was the first program you ever wrote? And in what language was it written in? Also is it possible to provide a code sample of that language?

I can’t remember exactly, but I suspect it probably just printed “Hello” once. I strongly suspect that my second program printed “Hello” endlessly — or at least until you hit Ctrl-C. It was written in BASIC, and I strongly suspect that it was on a UK-101, a kit-based 6502 computer.

These days I am more likely to disavow any knowledge of BASIC than I am to provide code samples in it — but I think you can probably guess what those examples I just mentioned would look like!

What would you say is the best piece of software you’ve ever written? The one you’re most proud of?

Difficult to say. Possibly the proof-of-concept C++ unit-testing framework I came up with a couple of years ago, that I dubbed LHR. I don’t know if it’s necessarily the best, but it incorporated some novel ideas I’m proud of.

What would you say is the best piece of advice you’ve ever been given as a programmer?

To understand that software development concerns the management of complexity.

If you were to go back in time and meet yourself when you were starting out as a programmer, what would you tell yourself?

As a professional programmer? Don’t worry, it’s not all crap. As a schoolboy? Yes, it really can be as much fun as you think it is.

Do you currently have a mentor? And if so, what would you say is the best piece of advice you’ve been given by them?

I don’t currently have anyone I would consider a mentor, but there are a number of people I make a point of shutting up and listening to when they have something to say.

You are well known for giving excellent talks on various topics to do with Software Engineering, I recall the one you did at ACCU Conference last year. How did that come about? And how scary was it to leave the security of a regular 9 to 5 job and go solo?

I worked as a principal technologist at QA, a training and consultancy company, for a few years. Training was part of my job role and that gets you comfortable with presenting and thinking on your feet. Conference presentations are a little different as the objective of a talk and the environment of a conference are not the same as a course or a workshop, but there’s enough overlap that practice at one supports practice in the other.

As a principal technologist at QA I enjoyed a great deal of autonomy and so the transition to working for myself was not as jarring as it might first appear. Meeting people at conferences also opened more opportunities than I had perhaps realised were available when I was associated with a larger company.

I’m not sure I could have gone straight from working for someone to being independent. Actually, that’s not quite true: I went from being an employee to being a contractor many years ago, but I didn’t find that fulfilling.

And following on from that, what advice would you give to someone who’s looking to go it alone?

Make sure you know what your motivation is for going it alone, that your expectations are realistic and that you have some work lined up!

I’m guessing you work from home, if so, how do you keep the balance between work time and family time?

A question I’ve wrestled with for years and still not one I’m sure I have a good answer to! I am, however, far better at turning off than I used to be, recognising that work time is an interruption from family time and not the other way around. As I travel a lot the work–family distinction is often reinforced by whether I’m at home or away, so I try to get more work-related things done when I’m away because it doesn’t distract from family. I notice that when I’m working and at home the context switch can be harder because the context is effectively the same.

How do you keep your skills up to date? Do you get a chance to do some personal development at work?

I attend conferences, I talk to people I meet (and people I don’t meet) and I read. I probably get a lot more breadth than depth, but I temper that by focusing on things that interest me — so I’ll freely admit to being more driven by interest than necessity.

I’ve seen that you contribute to the Boost libraries as well. How did you get involved in that? And what advice would you give to a prospective developer looking to get involved in such a project? Or any open source project for that matter.

My involvement came about primarily because of my involvement in the C++ standards committee and writing articles about C++. That said, although I have a continued interest in Boost, I am no longer an active contributor, having long ago passed maintenance of my contributions to others.

As for advice on doing it: if you think you want to get involved, then you should. It’s worth spending your time familiarising yourself with the ins and outs and mores of your project of interest, asking questions, getting a feel for what you can best contribute and how. If you’re a developer, don’t assume it’s going to be coding where you stand to learn or contribute the most — maybe it’s code, maybe it’s tests, maybe it’s documentation, maybe it’s something else.

What would you describe as the biggest “ah ha” moment or surprise you’ve come across when you’re chasing down a bug?

That good practice I ignored? I shouldn’t have ignored it. I don’t know if that’s the biggest surprise — in fact, it’s the exact opposite — but it’s the biggest lesson. There’s nothing quite like the dawning, creeping realisation that the bug was easily avoidable.

Do you have any regrets as a programmer? For example wishing you’d followed a certain technology more closely or something like that?

Listing regrets or indulging in regret is not something I really do, which I would say is no bad thing — and not something I regret.

Where do you think the next big shift in programming is going to come in?

Realising that there are few big shifts in programming that change the fact that, ultimately, it’s people who define software. We have met the enemy and he is us.

Are you working on anything exciting at the moment? A new book? Or a new piece of software?

There’s a couple of code ideas I’m kicking around that I think are quite neat, but perhaps more for my own interest, and a couple of book projects that have my eye.

Finally, what advice would you offer to kids or adults that are looking to start a career as a programmer?

Look at what’s happening now, but also look at what’s gone before. If you can figure out they’re related, you’re doing better than most.

Overloading functions

I was chatting with a friend of mine the other night, and I must confess, I was in a bit of bother about whether to blog this or not.  For a while now I’ve been aware that I take a lot of the language features of C++ for granted.  I know how to use an awful lot, but I don’t really get in to the guts of it. So while I know a lot of surface stuff, I don’t think the likes of Herb Sutter and Scott Meyers have anything to worry about just yet.

But as I was chatting with Craig, I was worried that what I was going to blog on would be career limiting, after all I’ve been coding in C++ for three years now, so surely I should know more right?  Well, as ever Craig had some very sage advice, so here goes.

I came across an interesting issue a few years back in a legacy system I was working on and at the time, I just ignored it as one of those things.  I’d been coding in C++ for a few months, and the developer in question told me, “don’t worry, I’ll fix it.”  And off he went, and I went on and did something else.

Now hands up who can tell me what mistake I made there?  That’s right, I should have asked the developer if I could pair program with him as he explained what the problem was and how to fix it if it ever happened again.

So the problem was there was a pair of overloaded functions, where one took a char* and the other took a string.  And this was causing some unexpected behaviour in the code.

So this struck me again as I was walking home from work one night, and I realised I never did find out what happens in that case.  So I decided to find out.  Albeit three years later.

So, let’s suppose we have the following code:

void printNum(int num) 
{
    cout << "Print num taking an int" << endl;
}

void printNum(double num)
{
    cout << "Print num taking a double" << endl;
}

 

And we call printNum and pass it a number like say 100.  How does the compiler know which version to call?  After all it could be either an int or a double.  Well, when I ran this code and passing it 100, it printed: “Print num taking an int.”  But why?

Well when faced with this, the compiler goes through an internal sequence to work out which one to call.

  1. It gets all the functions in the current scope that has the same name as the function we’re trying to call.  It ignores the ones that don’t have the same number of arguments.
  2. If there are no matches found, the compiler will return an error.
  3. If more than one is found, it selects the best match.
  4. If there’s no clear winner, then an ambiguous function call error is thrown by the compiler.

This looks quite simple, but how does the compiler then select the best match?  The compiler works on a ratings system for the way the types are passed in the call, and the competing lists match up in decreasing order of goodness.  The list is as follows.

  1. An exact match.
  2. A promotion, so for example if you have a function that takes an int, and you pass it a char, then the char is promoted to an int.
  3. A standard type conversion. So a conversion between a double and a float for example.
  4. A constructor or user defined conversions.

So in this instance, as we’ve passed the printNum an int, we’ll get the int version back, the same way if we passed it a double like say 46.5 we’ll get the double version back. 

But what if we have something like this?

void doSomething(char* something)
{
    cout << "Something with char*" << endl;
}

void doSomething(string something)
{
    cout << "Something with string" << endl;
}

And we call it thus: doSomething(“this is a test”);

Then what version does it call?  Well, for a start, the compiler gives me a warning when I compile this.  The warning is:

compilerError

So any bets on which one’s called when we run it?

runResult

It’s the char* one.  But why?  I’m not entirely sure yet, but from what I’ve read,  there is a default conversion rule to convert String literals to char *.  I am still looking in to this one, if I’m wrong then please please feel free to comment so I know.

So if we wanted the string version, then we’d need to cast our little test string to a string. 

Well hope all that helps, feel free to comment.

Happy coding.

Brother and sisters in arms…

From the 8th to the 12th of April, I and a few hundred people descended on the Marriot Hotel in Bristol to attend the ACCU Annual Conference.  So what is ACCU?  It stands for the Association of C and C++ Users, although don’t let the title fool you.  There we plenty of talks on all sorts of topics and other languages, for example, Uncle Bob spoke on Clojure, the excellent Jon Skeet spoke on how to abuse C# 5, Dan North spoke on why Agile Doesn’t Scale (well worth it!) and even your truly did a lightning talk on self-improvement as a programmer. 

So to the highlights…

Tuesday 8th April

So I was fortunate enough to be able to attend the pre-conference tutorial day which was on the Tuesday, and I elected to attend Nicolai Josuttis’ tutorial on C++11 and C++14 in a day, which was a whistlestop tour of the features that were in C++ 11, and what’s coming in 14 (Which is now out in the latest build of gcc, which is 4.9 at the time of writing.)  And I surprised myself with how much I’d learned by mucking about and watching the various video courses I’ve done at home. Nico is a very engaging speaker, and very easy to listen to and makes it easy for you to be able to absorb what he was saying.  I’m still absorbing if I’m honest.

Wednesday 9th April

The rest of the delegates rocked up today, and so the conference was packed out.  I had the age old problem of too many great talks to attend at one.  However Bill Liao kicked us off with a great keynote on the CoderDojo.

If you haven’t heard of the CoderDojo, it’s a self organised coding event designed to teach kids to program.  It was started by a young lad in Ireland called James Whelton, who started a computer club at his school but when it came time for him to graduate, so the club was in danger of being shut down.  So he approached Bill to help fund an organisation that taught kids to code.  And now it’s growing at quite a rate. 

Bill spoke about the impact of the CoderDojo in Cork, and encouraged the creation of CoderDojo’s all over, as programming is not really taught in schools any more.  I am currently analysing the state of teaching programming in our schools, and a more detailed blog post will follow.

The afternoon had a great talk by Jonathon Wakely on “There’s no such thing as a universal reference.”  This was in reference to something the legendary Scott Meyers said about the rhs (&&) operator in C++.  And the room was jammed as can be seen in the picture below.

 

DSCN0002

It was an interesting talk, and Jonathon spoke of the circumstances where he thought that the use of the term “Universal Reference” was used incorrectly.  I’ll be honest, a lot of it went over my head, however it’s given me something to look up about and read on a bit more.  So that’s good. 

I also volunteered to do a lightning talk based on my experiences of seeking to becoming a better programmer over the last year.  The dangers of twitter…

Thursday 10th April

Thursday opened with Dan North speaking on why Agile doesn’t scale.  Which was quite good, and I wished my manager was there alongside me to hear the talk.  Dan went in to how Agile made projects that were slated to take years were done in months, however projects that should have taken days changed to taking months.  I found this talk quite engaging as the team I’m at work does Agile (I’ve since been corrected, we’ve moved away from that to Kanban now…)

Another great talk was the Art of Learning and Mentoring, which was more of a workshop than a talk, and it encouraged lively debate as to the best way to teach new team members on our teams, and discuss how we learned new techniques.

Although I freely admit that one of the highlights was been able to share a beer with the excellent Pete Goodliffe, and so got to discuss the talk he gave last year, and he kindly agreed to look over my lightning talk.  So beer time well earned methinks.

Friday 11th April

I must confess that between commuting between home and Bristol each day (M5 eurgh), left me shattered at the end of each day, so I’m afraid I missed the keynote this morning, so I could focus on writing my lightning talk for tonight.  And it’s quite a daunting challenge to keep it down to 5 minutes, so I had to be merciless in what I was and wasn’t going to say.

But I’d been looking forward to Friday’s talks.  Mainly as Kevlin Henney was doing a talk on Immutability For The Win, and ironically he was changing his slides just before the talk.  But then the slides pack is a stack so it wasn’t really immutable….apparently.

Biggest highlight for me personally was entering a raffle run by Intel to win a Samsung Galaxy Tab 3.0, and on the Friday the draw was made.  And I won!!  So now that’s in full use at home.  I owe thanks to James Greening who I was sat with at the bar, and convinced me to head down to see the draw, so thanks James!  Beers on me next time I see you sir.

The other highlight was hearing Jon Skeet on Abusing C# 5, and it was quite funny and evil some of the stuff he’d done in the language.  It reminded me of a talk Phil Nash gave last year where he overloaded the –> operator in C++ so that it now pointed to the left (i.e. <- ). 

It just showed that if anyone was that way inclined, they could write vile and evil code that nobody had a hope of understanding. 

Then it came time for me to give my lightning talk, and I’d like to think it went well.  I kept a beady eye on the timer that Ewan was holding up, and finished a minute ahead of time.  However I think I may have rushed some elements of it.  It was a VERY full room, but what struck me was that nobody was glaring evilly at me, (won’t mentioned where I had that experience).  And I realised that what Malcolm said was right, that they were rooting for me.  So thank you all for listening.  The problem is no Phil Nash has challenged me to put in for a full talk next year.  So watch this space.

Saturday 12th April

By this point, my brain was pretty much mulch.  But still I bravely carried on.  Among the highlights was Arjan van Leeuwen’s talk on The Evolution of Good Code.  In which he discussed the discipline of writing good code, and compared what a number of text books had to say.

I also attended Anthony Williams’ talk on the continuing future of C++ Concurrency (multiple threading).  I’ll admit that this wasn’t the talk I was expecting, and as I’d done next nothing with threads in C++, I quietly slinked out (Sorry Anthony, nothing personal).  However as I’ve got Anthony’s book, it won’t happen again.  (Will post code to prove that I understand it ;-)  )

The conference was closed by Howard Hinnant on talking move semantics in C++, which was a very interesting.  I dutifully drew the chart he had in his slides, and will be revising that as often as I can.

Conclusion

I loved every second of this conference.  I’ll admit a lot went over my head, however I learned a lot as well.  I also made some great new contacts.  And I have some new challenges to take on this year.  Would I go again next year?  Yes, without hesitation.

And if you’re interested in being part of a large C++ community, then can I commend the ACCU to you.  While the acronym says C and C++ Users, it’s by no means exclusively the C++ language.  For instance, I also develop in Python, Java, C# and a few other languages as well, and I’m sure I’m not the only member either.  You get two publications, and great discounts on the conference. 

If you’re interested in joining then head on over to the ACCU Website for more details.

Compact SQL Databases….

I’m in the process of developing my first app for the Windows phone platform.  I won’t say more than that for now, but it requires the use of a database at the back end to hold user account details.

Now, sadly Windows Phone on it’s own, or Visual Studio (from what I could see so far) didn’t have a mechanism for me to check what’s going on in the database that’s sat on the Virtual Windows Phone. 

I’d recently made changes to my app so that the user could select the account type they wanted to store for the app as can be seen in the screenshot below:
 screenshot of app

And so I wanted to see that what I was doing was actually adding stuff to the data base, and therefore would allow me to start doing more clever things with my app such as firing off requests and the like.  But I digress.

So how did I do it? 

So Windows Phone stores the data base as an SQL Server Compact database, which stores everything in an sdf format.  So the first trick was to get that off the phone.  The tool I used for this was the Windows Phone Power Tools, which can be found here.

ConnectToDevice
So I fired that up and you get the above screen initially.  So we need to select which Virtual Device (or actual device, I’ve not tested this with my actual Lumia yet) we want to connect to.

Once we’ve done that, we’re in, and can get about downloading the file.  The first thing I learned is that if I’m on the screen that’s interact with the database, it won’t download the file.  So do all the Database stuff you want to do, then close down the app, BUT NOT THE DEVICE! 

Once you’re ready to get the file, navigate to the .sdf you’re interested in.

WindowsPhonePowerTools
You will need to click on it, and select GET and it will transfer the file from the device to the location of your choice.

The biggest problem I had then, was what to use to read the .sdf file.  There’s a load of great utilities out there I’m sure but most of them didn’t work for me.  What actually did work was CompactView.  Sure it looks a bit basic, but it opened the .sdf file for me, which allowed me to check that the data I’m looking at was accurate.  It also allows you to have a context menu option as well.

CompactViewSelect
So to view the file, select CompactView, and you’ll then be faced with the following screen:

CompactViewAccountsDB 

It may not look like much, but at least it told me that my code worked correctly.

So happy coding 🙂

Looking in the rear view mirror….

It’s been almost a year since I heard Pete Goodliffe give his talk on becoming a better programmer at the ACCU Conference.  And I thought it was time to have some sort of review of the year since then.

So what has changed since then?  Well…

Core Skills

I have managed to expand my knowledge of C++ by quite a bit, I know I’ve not put all that much code up on here, the reason is I fear that the stuff I’m learning is so basic that I was worried people would think “He doesn’t know that????”   However I plan to post more on here this year.  That’s a promise.

But on the other hand, I’m not the C++11 guy on my team at work at the moment, and I am playing around with the new compiler quite a lot.  I’ve also learned a lot of the new features, and how they work.  And in a few weeks I will be giving my first ever technical talk.  This time last year, I could imagine giving a technical talk.

Diversify – using the right tools as well…

I had a need recently to write something that would look at a log and grab the last ten minutes of the log, then send that onwards to an auditing service.  And naturally, I went straight to designing the thing in C++.  However I sound learned that it’s important to use the right language for the right job.

So I was going to write it in Perl until my team leader told me that we don’t do Perl on the team, but that I should look at Python as that’s the scripting language of choice.  I will be honest, I tried Python a number of years ago, and didn’t really get on with it, so I approached it with a bit of apprehension.

However I found that after just two days, I’d pretty much written the utility from zero knowledge.  Python is an insanely easy language to pick up, and there’s plenty of information out there as well.  And I’ll be honest, I’m hooked.  And an additional benefit is that I’ve achieved one of my aims for 2014, to code in another language. 

But more importantly, I learned that you should use the right tool for the right job. 

So for 2014 I’ve also taken up C# as I’m looking to write apps for Windows Phone operating system, more details about that will follow sooner or later I’m sure.

Self Belief

So I’ve been using Udemy to watch a series of videos by Paul Dietel on the Fundamentals of C++.  And I was stunned at how much I knew.  Those who know me well enough will know that I have always struggled in believing in my abilities as a programmer.  However in terms of C++ at least, I know a fair bit.  But I also know I have a LOT still to learn!

But no longer do I have the attitude of “I can’t do this”.  I am far more likely now to step back and have a think, and within a few minutes come up with the answer I’ve been looking for.

Practice, Practice, Practice, and being active in the community.

One of the things I’ve done a LOT more of this year, is going to websites like cyber-dojo and coderbyte and do the puzzles on there.  I’ve found that my logical thought processes have improved, and my programming abilities have improved too.

I’ve also become a bit more active on Stack Overflow (username Welshboy) and trying to give back to the community where I can. 

I’ve also attended more user group meetings.  I’ve attended a fair few at ACCU Oxford, and where possible Bristol, but I’ve also become a much more active member of my local .NET user group as well.


Books

I’ll be honest, I’ve not read as many technical books as I’d like this last year.  I kept putting down Scott Meyer’s Effective C++ book, no fault of Scott’s I can assure you, but just didn’t pick it up.  So for 2014 I’m planning to have read it completely before the end of the year.

On the brighter note though, I’m currently on Chapter 5 of Bjarne Stroustrop’s C++ 11 Programming Language book.  And I’m learning a lot through that, there have been things I’ve not seen before in there, so I fire up my editor, and have a go at coding what I see in the book.  I’ve learned a great deal just doing that.

Summary

I didn’t achieve everything I wanted to over the last year.  However I am further down the road than I was at this time last year.  I have found I’m quicker on the uptake on a lot of stuff in C++, and I’ve also learned that I shouldn’t be afraid to try different programming languages either.

So what about the year to come?  Well that’s the next post I’m working on, which I hope will be up sooner rather than later.

Something different…

Recently, I was having dinner with a good friend, and we were discussing people we looked up to in our fields.  Our heroes so to speak, and he suggested I read a book about Paul Erdos, called The Man Who Loved Only Numbers.  So I ordered my copy online, and had a bit of a read.

And it’s a fascinating book, about a fascinating man.  I reckon if I got a room of one hundred developers and asked for a show of hands for who has heard of Paul Erdos, I’m not sure how many hands would go up.  Certainly when I mentioned him to my programming colleagues their reaction was “Who’s he then?”

I will be honest, I was a bit nervous about reading this, since leaving school, I’ve forgotten all my maths I’m ashamed to say.  I enjoyed it at school, but I somehow when through college and University (doing a computer science degree, well Internet Computing) and never did any further maths.  And I felt that I wouldn’t understand half of what was going to come up in this book.

However, I was wrong.  The author not only made Erdos come across as someone I’d love to have a coffee with, (he was a prolific coffee drinker!) but it also rekindled my dormant mathematical abilities.  I suddenly found myself understanding things I’d long since forgotten, such as what a composite number was, (the product of two prime numbers).  And it’s got me looking at doing some more mathematics again. 

“What’s this got to do with programming?”  Well, I quite like doing coding puzzles as I’ve mentioned, and I’ve always shied away from the maths based ones.  Now though, I’m not so scared of doing them, as I have a bit more knowledge, and a bit more confidence.  It’s also helped how I work as well, I spend a bit more time in thought rather than bashing the keyboard and re-writing code that isn’t right.  I still don’t get everything right first time, but I’m not spending as much time re-writing stuff these days.

In short, it’s an excellent book, it made me laugh in places, and it’s infinitely sad in others.  I’m finding that reading books from fields that aren’t about programming is actually helping me, as I’m in a battle to keep learning.

Dead trees are useful too….

One of the most important pieces of advice I’ve been given, was to read at least four technical books a year.  This was mentioned in The Pragmatic Programmer, and in an effort to follow the excellent advice given in this book. I’ve made some time to read a technical book as often as I can. I try and make it one every two months . Sometimes I manage it, sometimes I don’t.

So what have I learned from what I’ve read?

  • That I should invest in my skills portfolio just like an investor would add to his investment portfolio.  (Pragmatic Programmer)
  • I should learn to use different tool for specific tasks.  So this lead me to use the debugging tools that we have at work, whereas before I would have just sat at my desk and try to figure it out.
  • I learned that by depending on an IDE, I’ve become a lazy programmer, so I’ve moved from using IDE’s when coding C++ all together, as it forces me to think a lot more about my code.  (I confess I still use an IDE when doing C# stuff though as I don’t like hand writing GUI’s)
  • I no longer listen to music as I code, as I find it actually reduces my productivity and constantly distracts me. (The Clean Coder)
  • I’ve also adopted the art of deliberate practice.  So before I start coding, I’ll do some sort of warm up first.  (The Clean Coder)
  • I’ve altered my coffee drinking practice.  Yes, I can hear the gasps, but I now drink one strong cup in the morning, then have a soft drink in the afternoon.  This actually helps me to write better code.
  • I’ve become a huge fan of test driven development.  This has caused a few giggles at work, but nowadays, I’ll write the unit test first, before I write any sort of production code.  I must confess I’ve not done that with home projects yet.  But I’m working on that too.
  • I’m learning another programming language, so at work I code in C++, whereas at home I code in C# as I’m interested in the Windows Phone platform.   I’ve developed an app for the Android Phone as well.
  • I should look at improving my GUI skills. It’s not rocket science, with a little more effort, I can produce something that will look good. (The Developers Code)

So what are the books I’ve read so far this year?

So far this year I have read:

Granted, these aren’t language specific books. When it comes to that, I tend to dip in and out of those as I need to. If I were to list what I’m currently reading, then the list is as follows:

So how about yourself?  What are the books you’ve found helpful or would recommend?  Other readers would love to know what you’d recommend to read, or what you’re currently reading as well.