Wednesday, 27 May 2015

Simple Git Glossary for a TFS guy!

The purpose of todays blog post is to provide a glossary of terms (based on my own understanding) that help people (such as myself) who have started using Git but previously used TFS.

I have also thrown in some SourceTree words too as I am using that as my Git UI.

If you are completely new to Git then check it out here. SourceTree can be found here.

SourceTree Terms


UNSTAGED - a working copy of files.
STAGED - files that are ready to be committed.

Git Terms - TFS Terms 


CLONE - Create Workspace/ Get Latest
CHECKOUT - Switch Workspace/ branch
COMMIT - Check-in/ Shelve
(NOTE: In Git, you ALWAYS "COMMIT" to your LOCAL BRANCH)

STATUS - Pending Changes, this will show all modified files that have not been "PUSHED"
PUSH - Check-in, sends local commits to remote repository.
PULL - Get latest, this will get all commits made by other people to the remote repository.
BRANCH - similar to TFS except in Git it is really nothing more than a particular label on a given node. Unlike TFS it is NOT A PHYSICAL COPY OF THE FILES!

Hope these terms help you with understanding Git from a TFS perspective. These were just notes I made whilst I am learning how to use Git.

For more detailed help I did find the following links helpful:

Sunday, 26 April 2015

Why I left the best job (probably) I ever had

It has been a while since my last blog post, apologies for this but I have been really busy as when you read this post it will become clear why.

Last week, I left my job of some 6 years at Callcredit to begin a new challenge at another company. I want to take this chance again to thank all the guys at Callcredit who gave me a wonderful send off! I will miss the people who I have had the pleasure of working with and I am sure moving forward that they will continue to be very successful.

I am thankful for the experience of working with some great people and feel I am a much better developer (and even person, if that's not over the top!) for having worked there. I did some things that I regret and I did many things I look back at with a sense of pride. I feel in my own small way that I helped the company grow during my time there!

Over the past few weeks the main question people have asked me is:

Why? Why leave, if you were happy there?

Normally when people leave there is some specific reason that is often not very positive. It is unfortunate when this happens, but it does happen. 

I can say now that this was not the case with me! I would say on the whole I enjoyed the work and liked the people who I worked with. Of course, there were things I didn't like but on balance the pros outweighed the cons. 

I would say that up to this point in my career it was the best job I have ever had and I was happy with how I left it, on good terms with all the people.

So this begs the question why leave? And the answer is simple:

I think the alternative I was offered was even better!

It really is that simple.

I am excited about my new role, it will give me the opportunity to develop new skills, working with new technologies/platforms, new people with new approaches and I think that's going to be great!

I am sure I will be blogging about some of the new technologies I use, so watch this space!

Tuesday, 3 February 2015

"Look after the pennies and the pounds will look after themselves"

I hope this post will act as advice and even a warning to new developers starting a career in development or even experienced developers who might be able to relate to some of the points. 

The main point is that good product development is about taking care of the little things one at a time, they can add up to big things, or to put it another way:
"look after the pennies and the pounds will look after themselves*" 
 * other currencies are available


Now to many this is a statement of the obvious, but to me during my career to date it has not been obvious.

Let me explain why.

During my development career, I have always wanted to showcase my technical abilities. I wanted to show my employers and others that I have a good understanding and grasp of technical basics and I can apply this to almost anything I put my mind to.

I always wanted to be right and to "win". To show I was the better developer and in fact it made me look a right clown! I always thought, they should put me in charge and I'll show them how proper products are developed! I would come up with some grand plan, "Lets rewrite project X with technology Y" or I would comment on areas that really have very little to do with me, again all in the hope of wanting to make a good impression and demonstrate knowledge. This caused some problems, often I got involved in areas that are really beyond my "Circle of Influence" and my "Circle of Concern" (Google it!). This can come across as meddling, argumentative and maybe even disruptive. Often, I would be trying to swat a fly with a machine gun or a tank! Just to prove to others I could do it, to prove myself.

To any junior developers (or anyone else) this can hurt your career, big time! It can also make you unpopular as no-one likes a "smart arse". I don't think (in my case) it got to the point where I became unpopular with my colleagues, may of whom I consider friends but I would suggest they found it annoying at times. Once you get a reputation for this it is very difficult, if not impossible to shake off. Also, it actually really stupid when you think about it.

You will read many blogs about what Joel called the "Rockstar" developer. I always thought I needed to become one of them. I thought that companies needed such geeky micro-celebrities in order to do anything. I have learnt that these people do exist but there are not many of them! What you find is that when they are working on something they are interested in they are erratically brilliant but frankly hopeless at working at a consistent pace or smoothly within a team.

In fact, I'll go further, their attempt at superiority is aspirational and infectious. Their arrogance bleeds toxically into the rest of the team. It signals that if you are smart enough you choose when you work and what you work on. You'll become a "Developer in Residence" distorting the values of those who work around you.

The purpose of this post, is to hopefully inform fellow developers that you shouldn't try to become a "Rockstar". Trust me, it is not good.

So if been a "Rockstar" is bad, what is good and how does this relate to the lesson at the start.

If "Rockstar" is bad, what is good? Enter the workhorse!


The great developers, I know, are not people who can write bubble sorts etc on demand.

They are the people who when you get them on a project, never stop moving and inspire everyone around them to do the same! I have seen this firsthand on the project I work on. I am lucky to work with 3 great developers who are living examples of this, it is thanks to them I have learnt this valuable lesson, I share with you today.

What they all have in common is that they do the small things well and they keep doing them, constantly. They are the workhorses, they are dependable and reliable. 

So your probably wondering, "workhorse" that's not very exciting or a term of endearment. 

I mean it in a good way! 

If I ran my own business and had to pay people using my own money. I'd hire workhorses that is the best compliment I can give as a Yorkshire man*!

*Yorkshire men are known for not been free spending with their own money, tight in other words!

Wednesday, 21 January 2015

Software Testers are not awesome! Software Development teams are!

Disclaimer: Before we begin I want to make it clear that the purpose of this post is not to "bash" software testers as they have an important role to play as a member of a wider development team! Please ensure you read it all before jumping to conclusions!

I recently read a blog post called "Why Software Testers are Awesome!" posted on a blog called the IT Testing Blog which is written by a software tester who I work with. They were thinking about what people think about testers and testing. They gave the testers view which was basically that testers are awesome. 

Nothing wrong with that, I mean as a developer, I think being a developer is awesome otherwise I wouldn't do it. I develop because I love making products which help others in all sorts of ways. I love the team working aspects of software development.  

I must take issue with what I understood to be a recurring theme of this post. I got the impression that the author felt that Software Testers were the main, if not the sole reason that products/projects were successful and I feel they missed an essential point.

Successful projects/products are made by TEAMS, each with valuable and unique skills. All as important as each other, all contribute, all are important!

I may have misread this post, misunderstood it and so on. If I did then I apologise but if I may highlight some of the reasons I drew my conclusion then it might help people to understand how my viewpoint.

Point 1

"I’m happy that I’m a software tester as I’m the first one who gets to play with the newest and the coolest software!"
Actually this is just untrue, as a developer I get to "play" with the newest and coolest software first. I have a responsibility to test it first. If you are finding that you are the first, then you need to look at how you are working as the developers should be doing some checking before you get your hands on it!

Point 2

"I will always be needed as software will always have bugs to track."
It is true that whenever software is produced that it will have bugs. I would argue as a developer my aim is to ensure that I can automate these processes as far as possible, thus cutting the feedback loop and speeding up delivery. 

I would suggest that as technology improves that this reason you suggest for why testers are awesome might not be around for too much longer. I mean many market leading software firms now don't employ testers, they employ people to deliver projects. Also, with things such as automated testing you guys could just become "overhead", that is a dangerous place to be, if you like your pay cheque!

Point 3

"I make users happy. They have been expecting a nice friendly API and they've got it without knowing how many bugs and UI issues have been resolved. Lucky them!"
So only testers make user happy? Ok, I suggest that you haven't yet understood the nature of software/product development, which is a team game as I suggested earlier. I am sure the guys who ensure the API is maintained and kept running might have something to say about that. I mean we could have the best tested API in the world but if you cannot use it, then I would suggest users are going to be very unhappy!

Point 4

 "Everybody in my company has more confidence in the product thanks to my efforts! How awesome is that? Basically there is no good software without a tester, so yes, I’m proud. You should be to!"
This implies if we had no software testers that the company would have less confidence, I suggest this could be untrue. My suggestion in point 2 clearly demonstrates how this confidence could be replaced.

Also you say "Basically there is no good software without a tester...", um, actually, there is. Facebook for example doesn't have a testing team and their apps are used by billions of people every day! And I would suggest their applications are quite good. I agree that they have other measures to facilitate having no testers, which a majority of companies could never do.

Conclusion


The purpose of this post is not to suggest that developers are top of the totem pole and testers are at the bottom, absolutely no way!

A lot of what I have said above is meant tongue in cheek as I know that in order to develop great products, you need great teams. Made up of people with a passion for making great products and a wide range of skills and experience. The post of my colleague clearly shows they have a great passion and fondness for what they do and this is fantastic! In fact, I enjoy reading their blog as it helps me to see and understand a testers viewpoint!

The aim of this post is to remind my colleague that though it is not wrong to love the role you play and be passionate about it. You MUST never forget that it is the job of everyone to ensure quality and make sure that we have happy users.

Great software/product development is a team game and that's why...

Software Development Teams Are Awesome! Not just Software Testers!

Rant over!

Tuesday, 30 December 2014

The Last Post (of 2014): Review of the Year

I would like to begin this post by hoping you the reader had a great Christmas (or holiday) break and wish you and your families all the best for 2015!

As is tradition at this time of year, I thought I would take a look back on what for me has been a tough year (from a personal perspective) but it could have been much worse and I am thankful for the love and support of my family and friends (you know who you are!). 

In this post I am not going to talk about the personal stuff, I want to focus on my techy and professional interests and review how things have gone during the past 12 months.

Review of 2014


In February, I wrote that I was deleting my Facebook account but by September I was back on Facebook as I found it an extremely great way to interact with so many people. I stand by what I said in my blog post about not wanting to live my life “for the sake of capturing it on a tiny screen” but there are many people who I love interacting with that I cannot see on a regular basis either due to lifestyle, geography or whatever so I returned to Facebook as I felt that this interaction was better than no interaction at all.

In July, I spent a lot of time on this blog talking about DevOps. I am still not sure how this affects me in my day to day work but so far I cannot say I have noticed much difference. I wouldn't say I am against the idea as I really like the goals, it is just the implementation that concerns me but we will see.

In addition to talking about DevOps, I also talked about Nerf Guns. This was one of the few things I was actually right about, we had them for a few months and then they were “banned” as people didn't think it created the right image. I cannot say I am happy they were banned as for some people they did help morale and I enjoyed the odd “war” myself but I cannot say I was surprised and I stand by what I wrote in my post.

This past year, I have sampled some new technologies some of which I never thought I would like. From a geeky toy perspective, I think my MacBook Pro Retina is the best laptop I have ever bought and I am becoming a bit of an Apple fan boy but I didn't buy the iPhone 6 plus as I still like my Nexus 5 which is now running Lollipop and I must say I have had no issues with it.

On the development front, I have found I am really enjoying working on Web Development. I have a lot to learn but I am enjoying working with JavaScript and using Angular. As my colleagues will tell you I have become a bit of a JavaScript bore and I am currently reading JavaScript: The Good Parts by Douglas Crockford, he also has lectures\talks available on YouTube which I have found extremely interesting!

Generally, I have had a good year on the professional\techy front, I have learned so many new things and done some things that a year ago, I wouldn't have thought I could do. I am learning all the time and constantly looking to improve on what I did before! I actually find this quite exciting, and I am optimistic about 2015!

Future Plans


Moving forward in 2015, I want to continue with the Web Development stuff. I think at first I will continue focusing on Angular and JavaScript but I also think I am interested in doing some work with Node.js and learning another web development language. 

I am not sure whether to look at Ruby or Python (suggestions welcome). I think I’ll look at Python as I did it briefly in a Coding Dojo this year and liked the brief introduction. I might look into both at first and see which one appeals after the initial introductions, I read they are very similar but we will see, I am sure I'll blog about it!

Sunday, 30 November 2014

Bootstrap: Some early learnings

For todays blog I am going to take a look at Bootstrap I have heard some people call it Twitter Bootstrap as it was a project two guys (Mark Otto and Jacob Thornton) who worked at Twitter with the aim of making internal tools more consistent.

I wanted to look at this for a couple of reasons. The first is that recently I am working more and more in web development (my background is as a software developer) and we have had some issues on our project with CSS styling, as we try to get the consistent look we want on a range of devices. Secondly I kept hearing about it so just wanted to learn a bit more!

What did I want to cover?

I decided to give my initial learning some direction rather than just aimlessly reading blogs, tutorials and so on.

I wanted to be able to answer:
  1. What is Bootstrap?
  2. When and Why would I want to use it?
  3. How to use it?
I guess the real aim of this post today is just to allow me to document what I think the answers are to these questions and maybe help others. I would recommend the Bootstrap website as it is very detailed and helpful!

What is Bootstrap?

Bootstrap is a free collection of pre-written CSS rules used to build websites faster. It's as simple as that!

When and Why would I want to use it?

From what I read this is all about responsive web design, so if you are writing something and you want it to be readable on a range of devices, such as mobiles, tablets, laptops and desktops then Bootstrap provides the tools needed with minimal effort.

Until very recently, I didn't think this was such a big deal! Like I said, I did most of my work on the back-end processes, however when you are trying to develop applications to be used on a range of devices (and who isn't doing this now!) this framework seems to be extremely useful.

How to use it?

During these learnings I wrote a very simple one page website and I think these parts are the main features (to be honest, check the Bootstrap webpage as I only scrape the surface here!)

"Container"
You must use the container class to enable Bootstraps Grid System (see "Grid"). There are two container classes that Bootstrap provides...

.container
This is a responsive fixed width container. With this one you can fix the width yourself should you want to.

.container-fluid
A full width container that spans the entire width of your viewport. 

"Grid"
Bootstrap comes with a grid that consists of 12 equal sized columns. You then arrange your HTML elements to span differing numbers of these columns to create your layout.

Key classes to note here are...

.row
This creates an horizontal group.

.col-"screenSize"-"numberofCols"
This allows you to create spans cross columns, however these appear to have a hierarchy based on the screen size.

.col-xs-4
This example will span 4 columns on an extra small screen (i.e. a mobile, less than 768px) this is noted by the "xs". The key thing to note that this will also span 4 columns on larger screens as well so if I have understood this correctly, if you were writing something to be used on all devices then I'd use the .col-xs-* classes to setup my column spans.

Other options for screen sizes include:

.col-sm-4
This will span 4 columns on a small screen (i.e. a tablet, greater than or equal to 768px). Again this will scale up for a laptop and large desktop but NOT down to a mobile.

.col-md-4
Again span 4 columns on a medium screen (i.e. a laptop or small monitor, greater than or equal to 992px). And again it will scale up to a large desktop or other screen but NOT down.

.col-lg-4
Again span 4 columns on a large screen (i.e. a large monitor, greater than or equal to 1200px). I would suggest only using this if you know your website is not going to be used on anything smaller than a large monitor.

"Navigation" Tools
In addition to the features above for managing layouts using grids. Bootstrap also has some nice navigation controls such as...

TABS
You can create some navigation tabs by using the class "nav nav-tabs"

PILLS
You can create some navigation pills by using the class "nav nav-pills"

Other Tools
Another tool I liked was the "Jumbotron" class. This provides you with a large showcase area to feature important content.

Using the class "jumbotron" creates one.

Summary

I think this framework is extremely useful and I will use it again. I think I going to do some work writing another simple page and this time include some Angular code to make it interactive and see how that works.

For the topics I have covered above I created a very simple example that I have added comments to. If you would like to review it is available via GitHub here.

Alternatively there are lots of excellent examples on the official Bootstrap site.

UPDATE: On my GitHub repository, I have now added an example of the simple Bootstrap page with Angular ng-view. So when user clicks the links the view changes.

Wednesday, 10 September 2014

Were Apple being silly on September 9th?

Before we begin lets make it clear, I am a NEW fan of Apple. I recently bought a wonderful MacBook Pro Retina and I blogged about last time, it is a wonderful product.

Anyway, now I have made that clear, lets get on with today's blog. 

I have just watched the wonderful TimmyTechTV on YouTube on which he posted what I thought was an interesting piece about why he won't be buying the new Apple 6 Plus and iWatch. 

When I watched it I found I agreed with some of it but not all of it so this is my two pence (or three cents) worth on the subject.


Please watch this video (be warned there is some bad language in it). 

The reason I ask you to watch this video before continuing is that the points I cover below will make more sense.

Point one: "Apple is just really a recipe company"

I can see and understand the point he is making. I guess I would ask, what is wrong with that?

Timmy says (quoting someone else) that Apple "take proven things that other people have done, package them in a nice bundle and sell them to you at an overpriced price"

Stepping back a moment lets take Timmy's statement and break it down and cover each point by point. 
"take proven things that other people have done, package them in a nice bundle..."
I think this is meant to be a criticism but to me it is one of Apple's strengths. I am a software engineer, most of my work involves doing this, it doesn't make me bad at my job. In fact it is a real skill to be able to do this well and in the past Apple have been fantastic at doing this. 

For example, things such as MP3 players, tablets etc. Have been made better and more accessible for people to use. I would argue that the Apple Watch could be the next example of this, but we will see.
"...sell them to you at an overpriced price"
Apple products are obviously much more expensive. With regards the latest iPhone, I agree with this statement in that it is way overpriced for what you are getting from a technology perspective. I own a Nexus 5 phone which I bought SIM free in the UK for £250, its a great phone. Timmy talks about the One Plus that he has ordered, I think these also look great.

However, when you have such a brand name and reputation as Apple have you can charge top prices. I mean the reason the Nexus is so cheap is that Google wants market share so it probably sells these handsets at a loss. One Plus, is also after market share and that is the reason I would guess their products are competitive on price.

A lot of Apple's consumers are not that into technology, generally they just want something that looks great and works! [Android is getting way better with this, Android KitKat is a nice system] Generally, these people are still willing to pay that bit extra for ease of use, they want to take it out the box and get it going in 5 minutes. They don't want to tweak it or set it up. Apple know this and they charge a premium for it. Again, I don't think that is such a bad thing. They know their consumer and target their products accordingly. They are amazingly good at this.

Point Two: "You can only watch Apple events on Safari"

I agree again this is a bit silly, but it comes back to my earlier point about knowing your market. The majority of people who are keen to watch these events generally own multiple Apple products so this is not such an issue.

Timmy continues about the "elitist mentality" and Apple are not the "king" anymore. I sort of agree and disagree with this. I think this mentality comes more from "Apple fanboy's" than from Apple. The "fanboy's" bang on about how Apple is the best and everything else is rubbish. I joke about becoming a fanboy but I don't think I will buy every Apple product.

In Apple's defence, I think Apple have realised that for many consumers who shop based on price they will never appeal to them, so they appeal to this small section who are willing to pay top money for the ease of use and often these people will already be using many products in the Apple eco-system.

Point Three: "Apple under Tim Cook is not doing the right thing"

I don't know about this, only time will tell.

Tim Cook couldn't win in this situation as Steve Jobs was a rare type of visionary who cannot and will not be replaced. Apple struggled before when Jobs was fired and it might do again. the jury is out.

I will say this, Steve Jobs made Apple successful by creating great products that people wanted because he loved to create great products and make the complex simple. For him, I really think it was a passion and part of who he was. He knew he needed to make money to be successful, but he measured success by how good the product was, how easy was it to use and so on, then the money looked after itself.

I think that Tim Cook measures success by how much profit it might generate, and I feel this is the reason Apple might fail.

Conclusion

I think a lot of the points Timmy makes in this video are very valid and do create some good discussion, some of which I have tried to cover today. I think a lot of the frustrations actually come from not really understanding what Apple's position is now in the marketplace.

In my opinion Apple cannot compete with companies such as Google, Samsung etc on pure market share, Apple know this, they might not say it but it is clear they have accepted that they will appeal to a small but committed minority who are willing to pay top prices so they charge top prices.

Apple products to me have always been quality products for which you pay a premium. Apple don't innovate, they copy and tweak to serve their consumers and whether you like it or not, they do this very well. The iPhone 6 and iPhone 6+ will sell very well, people will queue outside the stores and the media will cover it all.

So...

Were Apple being silly on September 9th 2014? 

Probably, but they were targeting their core market and they succeed in generating the buzz they needed to maintain profits and market share!