9781780175010 Software Developer...Career progression tips and software developer case studies round...

37
SOFTWARE DEVELOPER Jill Clarke BCS GUIDES TO IT ROLES

Transcript of 9781780175010 Software Developer...Career progression tips and software developer case studies round...

SOFTWARE DEVELOPERJill Clarke

BCS GUIDES TO IT ROLES

SOFTW

AR

E DEVELO

PER

Jill Clarke

SOFTWARE DEVELOPERCareers in software development

Jill Clarke

Software developers are responsible for producing fully functioning and secure software products; this encompasses design, programming and testing. With a growing need for software for everything from business to games to everyday appliances, there is increasing demand for professional software developers.

This career guide explains the software developer role in the context of the industry, including the relevant skills and competencies you will need to become a software developer. Career progression tips and software developer case studies round off the book, providing you with the insider knowledge you need to kick start your software development journey.

• Understand the software developer role and responsibilities• Discover the knowledge and skills that developers need• Explore programming languages and development practices• Consider the tools, methods and techniques of the trade• Learn the routes into and potential pathways through

the profession• Read career case studies from developers in their own words

ABOUT THE AUTHORJill Clarke is a freelance developer and software development trainer. She runs Bear Computer Services Ltd and does development work both for enjoyment and for profit, and to keep her skills fresh. She is a member of BCS, and volunteers for BCS Women and at the National Museum of Computing.

A clear detailed and concise introduction to the ever-expanding software developer discipline... a valuable resource for aspiring software developers.

Philomena Callaghan, Software Engineer, BBC

Software development is one of the most enthusing industries to work in, and this book offers a complete guide for advancing in it.

Ayesha Asghar, Freelance Software Analyst

This book is an invaluable help to those thinking of becoming a software developer.

Andrew Spencer, Freelance Project Manager

Information Technology, Business

9 781780 175010

You might also be interested in:

Cover photo: iStock ©RandyHume

ISBN 978-1-78017-501-0

Ebooks available

Paperback available

SOFTWARE DEVELOPER

BCS, THE CHARTERED INSTITUTE FOR IT

BCS, The Chartered Institute for IT, is committed to making IT good for society. We use the power of our network to bring about positive, tangible change. We champion the global IT profession and the interests of individuals, engaged in that profession, for the benefit of all.

Exchanging IT expertise and knowledgeThe Institute fosters links between experts from industry, academia and business to promote new thinking, education and knowledge sharing.

Supporting practitionersThrough continuing professional development and a series of respected IT qualifications, the Institute seeks to promote professional practice tuned to the demands of business. It provides practical support and information services to its members and volunteer communities around the world.

Setting standards and frameworksThe Institute collaborates with government, industry and relevant bodies to establish good working practices, codes of conduct, skills frameworks and common standards. It also offers a range of consultancy services to employers to help them adopt best practice.

Become a member Over 70,000 people including students, teachers, professionals and practitioners enjoy the benefits of BCS membership. These include access to an international community, invitations to a roster of local and national events, career development tools and a quarterly thought-leadership magazine. Visit www.bcs.org/membership to find out more.

Further informationBCS, The Chartered Institute for IT, First Floor, Block D, North Star House, North Star Avenue, Swindon, SN2 1FA, United Kingdom.T +44 (0) 1793 417 417(Monday to Friday, 09:00 to 17:00 UK time)www.bcs.org/contacthttp://shop.bcs.org/

SOFTWARE DEVELOPER

Jill Clarke

© BCS Learning & Development Ltd 2020

The right of Jill Clarke to be identified as author of this work has been asserted by her in accordance with sections 77 and 78 of the Copyright, Designs and Patents Act 1988.

All rights reserved. Apart from any fair dealing for the purposes of research or private study, or criticism or review, as permitted by the Copyright Designs and Patents Act 1988, no part of this publication may be reproduced, stored or transmitted in any form or by any means, except with the prior permission in writing of the publisher, or in the case of reprographic reproduction, in accordance with the terms of the licences issued by the Copyright Licensing Agency. Enquiries for permission to reproduce material outside those terms should be directed to the publisher.

All trade marks, registered names etc. acknowledged in this publication are the property of their respective owners. BCS and the BCS logo are the registered trade marks of the British Computer Society charity number 292786 (BCS).

Published by BCS Learning and Development Ltd, a wholly owned subsidiary of BCS, The Chartered Institute for IT, First Floor, Block D, North Star House, North Star Avenue, Swindon, SN2 1FA, UK.www.bcs.org

Paperback ISBN: 978-1-78017-501-0PDF ISBN: 978-1-78017-502-7ePUB ISBN: 978-1-78017-503-4 Kindle ISBN: 978-1-78017-504-1

British Cataloguing in Publication Data.A CIP catalogue record for this book is available at the British Library.

Disclaimer:The views expressed in this book are of the authors and do not necessarily reflect the views of the Institute or BCS Learning and Development Ltd except where explicitly stated as such. Although every care has been taken by the authors and BCS Learning and Development Ltd in the preparation of the publication, no warranty is given by the authors or BCS Learning and Development Ltd as publisher as to the accuracy or com-pleteness of the information contained within it and neither the authors nor BCS Learning and Development Ltd shall be responsible or liable for any loss or damage whatsoever arising by virtue of such information or any instructions or advice contained within this publication or by any of the aforementioned.

Publisher’s acknowledgements Reviewers: Mark Berthelemy, Stephen Mariadas and James MillarPublisher: Ian BorthwickCommissioning editor: Rebecca YouéProduction manager: Florence LeroyProject manager: Sunrise Setting LtdCopy-editor: Gillian BournProofreader: Sarah CookIndexer: Matthew GaleCover design: Alex WrightCover image: istock/RandyHumeTypeset by Lapiz Digital Services, Chennai, India

CONTENTS

List of figures and tables viii About the Author x Acknowledgements xi Abbreviations xii Glossary xiv Preface xix

1. INTRODUCTION 1 A rose by any other name – programmer,

developer, software engineer, app builder, coder 1 Skills and competencies, frame of reference 4 Summary 6

2. OVERVIEW OF SOFTWARE DEVELOPMENT IN CONTEXT 8 The business context 8 Applications, apps, websites, embedded software, operating systems 10 The world of software development 15 Summary 32

3. THE ROLE OF SOFTWARE DEVELOPER 33 What types of industry or sector do developers work in? 34 What do developers do to create products? 35 Skills 35 Software developer responsibilities 56 Interface and dependencies 84 Summary 87

v

CONTENTS

4. PROGRAMMING LANGUAGES 88 Development practices 89 The languages 97 Summary 108

5. TOOLS, METHODS AND TECHNIQUES 109 The development environment 109 DevOps 116 UX/UI design and prototyping 118 The continuous practices: integration, delivery and deployment 119 Test driven development (TDD) 123 Behaviour driven development (BDD) 124 Summary 125

6. CAREER PROGRESSION FOR THE SOFTWARE DEVELOPER 126 How do you get your first developer role? 126 Interviews 138 Continuing professional development (CPD) for developers 146 Moving up the ladder: where next for developers? 147 Summary 149

7. CASE STUDIES: DEVELOPERS IN THEIR OWN WORDS 151 Case study 1: Learning a new programming language 152 Case study 2: A day in the life of a UX engineer 153 Case study 3: The road to being an experienced developer 156 Case study 4: How I became a web developer 157 Case study 5: The enterprise software developer 159 Case study 6: The graduate’s journey 162 Summary 164

vi

CONTENTS

APPENDIX: TL;DR 165

References 172 Further Reading 174 Useful Websites 177 Endnotes 183 Index 185

vii

LIST OF FIGURES AND TABLES

Figure 1.1 Context for the different aspects that contribute to capability 5

Figure 2.1 Software or system life cycle 16Figure 2.2 Waterfall life cycle 18Figure 2.3 Additional, post-production stages in a

Waterfall life cycle 18Figure 2.4 Modernised Waterfall life cycle 19Figure 2.5 Agile Scrum framework at a glance 29Figure 2.6 An example Scrum board 31Figure 3.1 An example of data used as input to

control actions or processes 44Figure 3.2 An example of data used as output in

some form of information 44Figure 3.3 An example of data used for input and

output with data transformation 45Figure 3.4 Simple ERD showing customer and order 51Figure 3.5 Simple ERD showing customer and order

with relationship symbols 52Figure 3.6 Simple entity attribute diagram 53Figure 3.7 UML use case symbols 58Figure 3.8 UML use case for an ATM 58Figure 3.9 Overview of testing in development 74Figure 4.1 Object oriented: a few of the methods

and properties for an order 91Figure 4.2 Window methods and properties 92Figure 5.1 Continuous integration 122Figure 5.2 Continuous deployment 122Figure 6.1 SFIA responsibility levels (with reference

to certification levels and BCS membership) 148

viii

LIST OF FIGURES AND TABLES

Figure A.1 Book road map 166Figure A.2 Developer role from SFIA 167Figure A.3 Types of development summary 168Figure A.4 Developer participation in Waterfall SDLC;

typically in the build and support stages 169Figure A.5 Developer participation in Agile/Scrum;

typically as part of the development team 170Figure A.6 Developers’ key knowledge and skills 171

Table 3.1 An example of entity relationship descriptions 50Table 3.2 Casual text description for a use case 59Table 3.3 User story example 64Table 3.4 Description of key testing types that

can be run on software 75

ix

ABOUT THE AUTHOR

Jill Clarke is an experienced freelance developer and enthusiastic trainer of the existing and next generation of software developers. Her initial roles as a Cobol programmer laid the foundations for a working life programming many different systems in a variety of industries using many different programming languages.

She runs her own company (Bear Computer Services Ltd) where currently much of the work she does is in training developers (via JBI Training) at many well-known companies both large and small in new languages, methodologies (she is a professional Scrum Master), techniques and tools in traditional software development as well as the ever expanding web development sector. She still loves working as a developer and does development work for both enjoyment and profit as well as to keep her skills fresh and up to date.

She is a member of BCS and in her spare time she volunteers on the BCS Women committee and can also occasionally be found volunteering at The National Museum of Computing (based at Bletchley Park) where she developed the Software Gallery along with Bob Jones. She was runner up in the BCS IT Trainer of the year award in 2007 and is a Fellow of the Learning and Performance Institute.

x

ACKNOWLEDGEMENTS

Starting at the beginning, I would like to express my love and gratitude to my brother and parents (Vern and Beryl) who always encouraged me in this career (and in life) even though programming was a less popular career choice in the 1970s when I first sat an aptitude exam.

From my early days as a junior programmer I’d like to thank my first mentor (John Wright) who helped me when I was working in Birmingham and all the many people since who have helped, inspired and supported me in my career. The developer community is rich with these types of people; find a company and role where you can benefit from and contribute to this supportive atmosphere.

For the book I’d like to thank Ian Borthwick and Rebecca Youé who approached me about writing it. The people who contributed to the case study chapter all gave freely of their time and experiences, they were enthusiastic and honest and bring the subject matter to life, thank you:

Jeremy ClarkeEmma Bostian Chris AshtonEva Dovc Simon KempZara Ahmed

I’d also like to thank Jon Bambaji and the team (Mervyn, Pavlos, Nigel and Bill) at JBI Training who cleared time in my schedule so I could write the book.

xi

ABBREVIATIONS

AI artificial intelligenceAPI application programming interfaceATM automated teller machineBCS BCS, The Chartered Institute for ITBDD behaviour driven developmentBIOS basic input/output systemCASE computer aided software engineeringCAST computer aided software testingCI continuous integrationCPD continuing professional developmentCPU central processor unitCSS cascading style sheetsDBMS database management system DRY don’t repeat yourselfEDI electronic data interchangeERD entity relationship diagramERM entity relationship modellingFTP file transfer protocolGDPR General Data Protection RegulationGPS global positioning systemHP Hewlett PackardHTML Hyper Text Markup LanguageIDE integrated development environmentIoT internet of things

xii

ABBREVIATIONS

JSON JavaScript Object NotationMoSCoW must have, should have, could have, won’t

have this timeMVC model view controllerNFR non-functional requirementsOOP object oriented programmingOWASP Open Web Application Security ProjectPC personal computerPHP (originally) personal home pagePRINCE2 Projects IN Controlled EnvironmentsROI return on investmentSDLC software (or systems) development life

cycleSFIA Skills Framework for the Information AgeSQL Structured Query LanguageSSADM structured systems analysis design

methodSTEM science, technology, engineering,

mathematicsTDD test driven developmentTL;DR too long; didn’t readUML Unified Modelling LanguageURL uniform resource locatorUX user experienceXML eXtensible Markup Language

xiii

GLOSSARY

Agile: an umbrella term for a particular set of frameworks and practices used during product development

Anti-patterns: bad practices in code development, see also code smells

Applications (Apps): programs that run on a computer or electronic device. Apps that can be downloaded for a mobile phone via an app store are known as ‘native apps’ because they run on a particular mobile platform, for example Android or iOS

Attribute: (in databases) a data element (field) associated with an entity, for example a customer number, customer name, customer address or current balance

Behaviour driven development (BDD): a top-down development approach where the user goals and product behaviour are defined collaboratively

Blockchain: a system where the transactions made using an electronic currency (for example BitCoin) are logged

Continuous integration (CI): a development practice where small pieces of work are submitted frequently to a shared repository containing the most up-to-date version of a product

Class (object oriented terminology): a template for something used in your system, for example an order

Code smells: bad practices that may be used when writing code, see also anti-patterns

xiv

GLOSSARY

Data dictionary: a list of data items with descriptions of their data type and use in the system

Database: a collection of logically related data that can be defined and controlled independently of user applications. They are made up of tables (for example ‘Customers’ or ‘Accounts’) which consist of rows (typically one row for each customer or account) which are, in turn, made up of columns (each of which is a piece of data related to the row)

Database management system (DBMS): the software used for developing and managing a database independently of any programs that use the data

Deployment: the stage in product development when you ship the product to the customer

DRY: don’t repeat yourself, a development principle which helps avoid duplicated logic by having one procedure which can be called by other procedures; in other words, a piece of reusable code

Encapsulation: (object oriented terminology) the concept of an object containing its data and the methods that can be used to read or change that data

Entity: (in databases) something which an organisation collects and stores data on, for example a customer, an order or a bank account

Entity relationship diagram (ERD): the diagram part of an ERM

Entity relationship model (ERM): a mixture of diagrams and text description which describe data usually held in a database

False feature rich: in simple terms, this means giving the user more than they asked for in the way of software or webpage functionality

Global positioning system (GPS): a way of determining your location on the planet

Global variables: variables are the yellow sticky notes of the programming world, they hold data temporarily for use at a

xv

GLOSSARY

later time in your code, then they can be thrown away. A global variable is one that can be used anywhere in your program

Identifier: (in databases) an entity has an identifier, that is, an attribute that uniquely identifies an occurrence of a particular entity among many occurrences of the same entity; for example the identifier for a customer might be Customer Number. An identifier is sometimes called a Primary Key

Inheritance: (object oriented terminology) an object can use (inherits) the methods and properties defined by its class

Instance: (object oriented terminology) a copy of a class; an instance of a class is called an object

Internet of things (IoT): a system of interrelated or interconnected electronic computer devices; for example, the ability to control your home heating with an app on your phone

JSON: a simple data-interchange format, often used when sending data across the internet

Method: (object oriented terminology) something that can be done by an object (a piece of functionality); for example, you can Place an Order (Place is the method, Order is the object)

Modules: sections or parts of code

Normalisation: (in database design) a set of rules and guidelines that help you create well-designed databases

Object: (object oriented terminology) an instance of a defined class, for example the Order object, when you place an order the system will create an order object in the code to represent your particular order

Pair programming: a technique where two people work/collaborate on the same piece of code

Patterns: (in code or development) good practice, tried and tested ways of developing code in order to solve a particular problem

Property: (object oriented terminology) a piece of data relating to an object

xvi

GLOSSARY

Refactoring: the name given to rewriting a piece of code in order to improve the quality, readability or maintainability of that code

Relationship: (in databases) the term used for the association between entities, for example a customer is related to an order by the relationship ‘places’

Robust code: software that is written in such a way that it does not break easily when errors occur

Scrum: a methodology used to implement Agile practices during product development

Software or systems development life cycle (SDLC): the lifetime of a product/system, from conception to eventual decommissioning

SQL: Structured Query Language, a language used to access data from a database

Stakeholders: people (or sometimes other systems or groups) that have an interest in a product’s development

Syntactic sugar: a phrase often used about a development libraries capabilities; it refers to the fact that the library provides an easy to use way of doing something. It hides the underlying difficulties of a language or process

Technical debt: the term used when refactoring is identified as necessary but not carried out

Test driven development (TDD): a technique where tests are created at the same time (before) the code that they test

UML: Unified Modelling Language, a set of modelling techniques which are grouped together under one title. They can be used to diagrammatically represent a system

URL: Uniform Resource Locator, an address on the internet

Use cases: used to describe what a system does from the standpoint of an external observer, in development this is used to work out what the boundaries of a system are, what is included and what is excluded

xvii

GLOSSARY

User stories: a technique used widely in modern software development methodologies such as Agile/Scrum. They are simple-to-read definitions of a user’s goal for a product

Waterfall: a model which shows a traditional (older style) software development life cycle

xviii

PREFACE

When I first started writing code we were simply known as programmers. The roles in my first work experience as a programmer were well defined:

1. The analyst analysed the problem.

2. The designer designed the solution.

3. The programmer wrote the code (by hand, on COBOL coding sheets) and then wrote the Job Control Request sheet to define what needed running and how.

4. The punch operator transferred the code onto punched cards.

5. These were passed to the operator who ran the code on the big old mainframe.

6. Some days later, the programmer was given a (memory) core dump with error listing, they worked out what was wrong and wrote out the corrections, which went to the punch card operator etc.

Try transferring that process to modern text messaging:

1. Someone asks what you want to say and who you want to say it to.

2. Someone else works out the right words and emojis.

3. You write that on a piece of squared paper (one character per square).

4. Someone else transfers that to the correct text message request form.

xix

PREFACE

5. Someone else types that into the mobile phone (that is shared by the whole office).

6. You then get a printed reply to your text.

It doesn’t even bear thinking about nowadays, thank goodness for progress.

Today even the job title is different. Modern terminology tends to use the term ‘developer’ as opposed to ‘programmer’, although the terms are used interchangeably too. The modern role of software developer is very different from that first work experience, and thankfully much broader, more interesting and dynamic too. This book explores this modern role which now has as many dimensions as names within the modern workplace.

No previous knowledge is assumed so the book will be suitable for anyone who is either looking to find out more about the role, just starting out in their career in the IT industry, or looking to further develop self-taught programming skills.

This book will cover what the role is and the types of skills and tools commonly needed to do the role; it will also look at the different relevant applications, environments and industry sectors, giving examples of popular programming languages or associated techniques along the way.

SYMBOLS USED IN THE BOOK

Side track

Thinking moment

xx

1 INTRODUCTIONIt’s the only job I can think of where I get to be both an engineer and an artist. There’s an incredible, rigorous, technical element to it, which I like because you have to do very precise thinking. On the other hand, it has a wildly creative side where the boundaries of imagination are the only real limitation.

Andy Hertzfeld, talking about programming

This book will cover the role of software developer in the modern workplace. It will look at generally accepted skills, behaviours, practices and competencies commonly used in the industry for the role.

While reading this book you should bear in mind that the role of developer is not exactly the same for every organisation, sector or even department that employs people with the job title of developer. The skills you need and the work you do will always be context-dependent based on the organisation, sector, product, environment and programming language applicable to you.

This chapter will introduce you to all the various titles that could be used to refer to someone who writes code. It will also introduce the broad range of skills and competencies that could be needed for the role. When you look at a software developer role you will need a mix of these different skills depending on the particular role you apply for.

A ROSE BY ANY OTHER NAME – PROGRAMMER, DEVELOPER, SOFTWARE ENGINEER, APP BUILDER, CODER

First of all, let’s clarify the job title itself; do you want to be a programmer, developer, software engineer, application (app) builder or coder? Why are there different terms and what is the difference between them?

1

SOFTWARE DEVELOPER

Programmer

Programmer, a person who programs computers. As well as the laptop and desktop computers we often use, modern life has embedded ‘computers’ (or microprocessors) in many products from mobile phones to washing machines. The term ‘programmer’ is a general term for anyone who programs computers; this means that all the other people fulfilling the roles described below can also be described as programmers.

Developer

Developer, a person who develops programs for computers or other devices. This role generally covers tasks in addition to writing code, for example, there may be a need for some design and testing and other associated skills. Quite often the role has an additional descriptor, for example ‘web developer’ (a person who creates webpages and systems that run across the internet).

Software engineer

Initially the people who programmed computers were programmers; Margaret Hamilton, who coined the term ‘software engineering’, said she used it to get across to people the fact that programming was a skill in the development of technology in just the same way as electrical or hardware engineering was.

Now, in some companies (and countries) the difference between the terms software engineer and programmer or developer is the level of academic achievement gained – there are degrees in software engineering.

Software engineers are perceived as people who not only create programs but use formal processes and techniques to best design and develop that software.

2

INTRODUCTION

App builder

Apps is an abbreviation most commonly used for programs that run on mobile devices such as phones and tablets, although recently it is also being used for software running on a PC. App builders (or app developers) are the people who create these programs.

Coder

The simplest of all the titles, a coder is someone who writes code, so all of the above job titles are filled by coders.

So, which one to use?

These terms are a cause of some debate and discussion within the industry. Modern terminology often uses the term developers instead of programmers (particularly in relation to things like DevOps – covered later in this book) and I have recently seen social media discussions (and heated debates) where people perceive elitism in one term or another.

All of these roles can be considered programmers broadly, because in all of these roles you write code and produce varying types of software, for example applications, mobile apps, games or webpages. This book focuses on the more modern term ‘software developer’.

The terminology takes into account the practices, platforms and competencies of the person who writes the code and the depth of their participation in the process.

The important detail is not really what you are called but what you do in your production of software, your ability to use the correct techniques and practices to create well-designed, functioning, maintainable, efficient code.

Whether you learn those skills ‘up front’, ‘on the job’ or ‘too late to be of use’ depends very much on the individual, the company, the environment and the product.

3

SOFTWARE DEVELOPER

SKILLS AND COMPETENCIES, FRAME OF REFERENCE

Because the software developer role can cover so many different types of product, from developing operating systems such as Microsoft Windows, iOS or Linux; developing a game to run on a popular games console, through to developing an ecommerce site for a retail outlet, it is useful to have a frame of reference for professional skills, standards and competencies. Some of these skills and competencies will have more emphasis in some business sectors than others. This book will use SFIA (Skills Framework for the Information Age) as that frame of reference, and will be introducing different aspects of the related professional skills and competencies plus associated areas.

See SFIA online for more detail: https://www.sfia-online.org/en

Tempting as it is to think that all a developer needs is knowledge of a programming language, that is not the case, there are many more aspects that are required for the developer to be capable of fulfilling the role. Figure 1.1 is from the SFIA website and shows the balance of skills and technical knowledge in the context of an IT role.

In Figure 1.1, the professional skills and knowledge are what you know, while the behaviours are how you use those skills or that knowledge, for example in influencing or managing.

Professional skills cover such things as knowing a programming language; tools include the applications you need to use to enter the language into the computer. Methodologies are the set of methods, principles or activities you use to accomplish something, for example, a Scrum methodology is often used to help us manage software development. The context is the understanding of the business or industry sector. The SFIA framework also highlights the behaviours required; that is, in

4

INTRODUCTION

Figure 1.1 Context for the different aspects that contribute to capability (Source: Reproduced with permission of SFIA Foundation)

this case, the communication and interpersonal skills, all of which need to be understood in context.

The central concept is experience. If you have been looking for a role as a developer you will often see requirements such as ‘must have 5 years’ experience’ (frustratingly sometimes in things that have only been out for 3 years!). The reason experience is so valued is because it shows you can correctly apply your skills; the more you practise the skills the better you become at them.

5

SOFTWARE DEVELOPER

Released in 2015, version 6 of the SFIA Framework (https://www.sfia-online.org/en/framework/sfia-6) gives the following description of general professional skills for a software developer:

The design, creation, testing and documenting of new and amended software components from supplied specifica-tions in accordance with agreed development and security standards and processes.

Released just 3 years later in 2018, and ably illustrating the dynamic nature and needs of the industry, SFIA version 7 (SFIA, 2019) suggests a broader range of skills and competencies for that same role:

The planning, designing, creation, amending, verifica-tion, testing and documentation of new and amended software components in order to deliver agreed value to stakeholders. The identification, creation and application of agreed software development and security standards and processes. Adopting and adapting software develop-ment life cycle models based on the context of the work and selecting appropriately from predictive (plan-driven) approaches or adaptive (iterative/agile) approaches.

This book is designed to give you an introduction to the areas mentioned in these skills lists. It will not cover every aspect of every skill but it will give simple examples and pointers where possible to further reading and study.

SUMMARY

This chapter explained the varying job titles related to the role of software developer; it also cited SFIA as the frame of reference for the skills and competencies that will be covered in this book.

This chapter has covered ‘who’, the following chapters cover the remaining key points for developers:

6

INTRODUCTION

Chapter 2 – Where and when Chapter 3 – WhatChapters 4, 5 and 6 – HowChapter 7 – Why

What, Why, When, How, Where and Who are the six honest serving men from the poem that follows Rudyard Kipling’s (1900) story The Elephant’s Child.

‘I KEEP six honest serving-men

(They taught me all I knew);

Their names are What and Why and When 

And How and Where and Who.’

7

INDEX

3Cs (user stories) 63–4, 65

acceptance criteria 63, 64–5, 75

actors 57–8, 59, 62

Affinity Estimation 26–7

Agile approaches 6

advantages/disadvantages 28, 30–1

Agile Alliance 23

Agile Manifesto 23–4

roles/responsibilities of software developers 54, 55, 57, 60–1, 63, 78, 87

SDLC 17–18, 23–5

tools, methods and techniques 118, 120, 124

Ahmed, Zara 162–4

AI (artificial intelligence) 9, 34, 36, 114, 127

analysis (Waterfall life cycle) 18, 19, 169

‘animation development’ roles 86

APIs (application programming interfaces) 101

‘app builder’ job title 3

application programming 11–13, 101

apprenticeships 129–30

Artefacts (Agile/Scrum methodology) 25, 27–8

Ashton, Chris 156–7

ATDD (acceptance test-driven development) 124

attributes (databases) 48–50, 52–4

AVEVA 163–4

bad practice 69, 72

Bash/Shell/PowerShell 42, 97

BCS (Chartered Institute for IT) 132, 133, 135, 147–8

BDD (behaviour driven development) 77, 124–5

Beck, Kent 70

behaviours (SFIA Framework) 4–5

benefit directed testing 76

BIOS (basic input/output system) 15

black box testing 73–4

boilerplates 114–15

bootcamp learning 131, 134, 159

Bostian, Emma 153–5

browser developer tools 113

build (Waterfall life cycle) 18, 19, 20, 169

build tools 109–10

business context 8–9, 15, 56

C (programming language) 42, 43, 94, 97, 98, 103–4, 106

C# (programming language) 42, 43, 90, 97, 98, 104–5, 113, 115, 152–3

C++ (programming language) 42, 43, 90, 97, 98, 106–7

capture/replay tools 112

Card (user stories) 63, 65

185

career progression

career development 147–9

CPD 132, 146–7

employment paths 126–38

interviews 138–45

CASE (computer aided software engineering) tools 119

case studies 151–64

CAST (computer aided software testing) 112

Chambers, J. 33

cheese challenge 36–40

Chef software117

Clarke, Jeremy 152–3

class (object oriented languages) 90, 91–3

classroom-based learning 98, 131, 133

code challenges 136

Code Complete 71

Code First: Girls 163–4

code patterns 71–2

‘coder’ job title 3

Coding Coach 153–5

collaboration 24, 30, 31, 54, 55, 84, 124, 136, 155

communication 5, 23, 30, 33, 39, 54–5, 84, 86, 132, 141, 144

compiled languages

components 6, 14, 20, 38, 75, 119, 154

conferences/seminars 137

configuration management 115, 116

Confirmation (user stories) 64, 65

constraints/limitations 49–50, 80–1, 85

continuous improvement 24, 30

continuous integration (CI) 120, 121, 122

continuous practices 119–23

Conversation (user stories) 63, 65

Cook, Mary Rose 95

CPD (continuing professional development) 132, 146–7

Cray, Seymour 8

creating products 35

Crockford, Douglas 46

cross-platform development/capabilities 33, 65–6, 87, 99, 111

CSS (cascading style sheets) 42–3, 88, 97–100, 113, 123, 141, 155, 156

CVs 138, 145

cyber security courses 83

daily stand-up 27, 29, 170

data dictionary 78

‘data modelling and design’ roles 86

data storage 44–7

relational databases 45, 46, 47–54

data types 46, 50, 78

data, understanding and using 33, 35, 43–7, 56, 87, 171

‘database design’ roles 86

database management system (DBMS) 48, 100

database terminology 48

debugging 20, 27, 29, 32, 64, 69, 73–4, 77, 110, 113, 121

‘definition of done’ 78

degrees 127–8, 163–4

delivery, continuous 120, 121, 123

deployment 15, 16, 20–1, 25, 32, 39

continuous 120, 121, 122–3

design (Waterfall life cycle) 18, 19–20, 169

design requirements 80

destructive testing 77

‘developer’ job title 2, 3

development environment 109–16

development team member 26, 87, 132

DevOps 3, 116–17

distance learning 128, 131

Django Girls 158

Docker software117

documentation 6, 114, 115, 143

roles/responsibilities of software developers 47, 49, 53, 56–7, 59, 71, 72–3, 78–9

SDLC 20, 21, 22, 25, 28, 31

Dovc, Eva 157–9

DRY (don’t repeat yourself) principle 71

EDI (Electronic Data Interchange) 46

embedded software 2, 13, 14–15, 85–6, 103

186

employment paths 126–38

encapsulation (object oriented languages) 90, 92

end users 10, 39, 54, 72–3, 79, 85

enterprise programming 11–12, 101

entities 48–54

entity attribute diagram 53

entity relationship descriptions 49, 50–1, 53

entity relationship diagram (ERD) 49, 51–2, 85, 86

entity relationship model (ERM) 49

error centric testing 76

‘ethical hackers’ 83

event driven programming languages 93–4

Events/Ceremonies (Agile/Scrum methodology) 25, 26–7

evolutionary prototyping 118

experience (SFIA Framework) 5

experimental prototyping 118

‘false feature rich’ software 72–3

FE (further education) courses 133–4

feedback 22, 24, 27, 28, 118, 120, 121–2

file maps 111

firmware 14–15, 43

flat files 45

formal testing 73, 77

formats of data 45–6

Fowler, Martin 70, 78, 121

Free Code Camp 100, 158

freelancing 14, 149, 159, 160–2

FTP (File Transfer Protocol) 112–13

functional behaviour 74

functional programming languages 94–5

functionality 24, 49, 51, 64, 70, 74, 79, 90, 92, 96, 113, 124

FURPS+ 79–82

FutureLearn 88–9

games/gaming 4, 12–13, 43, 86, 104, 106, 107

Gatsby 154

GDPR (General Data Protection Regulation) 54, 80

GirlsCode MK 157–9

Git software 115–16, 117, 137

global variables 71

good practice 39, 40, 43, 69–73, 146

GPS (global positioning system) 13

GUI (graphical user interface) designers 80

hackathons 135, 136

Hamilton, Margaret 2

Hertzfeld, Andy 1

hierarchical data storage 45

high level programming languages 89

HTML (Hyper Text Markup Language) 42–3, 88, 97–100, 105, 113, 123, 141, 158

human error 82

human factors analysts (Hufa) 80

IDE (integrated development environment) 104, 110, 113–14

identifiers 48–51, 52–3, 63

IET (Institution of Engineering and Technology 129, 132, 147

IF statements 38, 71

implementation requirements 80

independent testing 76

industries/sectors 34–5

industry training 54, 98, 130–2, 133–4

information content authoring 87

inheritance (object oriented languages) 91, 92

initial idea (SDLC stage) 15, 16

input data 43–5

inspections 39, 73, 74

install (Waterfall life cycle) 18, 19, 20, 169

instance (object oriented languages) 91

instructions 35, 36–8, 78, 143–4, 153

187

integration testing 75

intellisense 110

interface and dependencies 84–7

interface requirements 81

internships 136, 138, 163–4

interorganisational movement 137–8

interpreted languages 89, 98, 102

interviews 138–45

iterative approaches 6, 30, 31

Java 40, 42–3, 66, 90, 97–8, 101–2, 131

JavaScript 42–3, 46–7, 77, 88–90, 96–100, 113, 123, 141, 156–7, 159

job requirements 140, 141

job titles 1–3

Johnson, John 88

JSON (JavaScript Object Notation) 46–7

Kemp, Simon 159–62

known security threats 83

legacy code 32, 103, 152

legal requirements 16, 39

Lerdorf, Rasmus 105

libraries/frameworks 96

Lincoln, Abraham 36

load testing 77, 112

logical/analytical thinking 33, 35–40, 43, 56, 87, 171

loops 38, 71

low level programming languages 89

maintain/support (Waterfall life cycle) 18, 21, 169

maintenance 18, 32, 33, 58, 68, 77–8, 115

Manifesto for Agile Software Development 23

March-Web 159–62

Martin, Robert C. 93

McConnell, Steve 71

Memoisation 71–2

mentoring 67, 68, 89, 132, 135, 159

method (object oriented languages) 90–3

methodologies (SFIA Framework) 4, 5

MoSCoW technique 63

Mosenthal, Lauren 126

MVA (Microsoft Virtual Academy) 152–3

MVC (model view controller) 96

naming standards 67, 71, 114

network data storage 45, 47

‘network design’ roles 86

NFRs (non-functional requirements) 34, 79–82, 84, 85, 87

nodes 45

non-functional behaviour 74

normalisation 54

North, Dan 124

object (object oriented languages) 90–2, 93

object oriented programming languages 90–3, 94, 106

Objective-C 66, 90, 97

open source products/languages 95–6, 114, 136–7, 153

output data 43–5

outsourcing 40

pair programming 55, 67, 68–9, 86, 140, 144

parent–child data storage structure 45

peer review 68, 73, 74

penetration testing 112

performance 80

personality tests/profiling 144–5

PHP (programming language) 42, 95, 97–8, 105–6, 134, 156

physical location of data 45

physical requirements 81

Planning Poker 26–7

Pluralsight 153

presentations 141–2

problem analysis (SDLC stage) 15, 16

problem-solving 40, 142

procedural programming languages 94, 152

processes (UML) 57–8

product backlog 25–6, 27–8, 29, 62, 63, 64–5, 170

188

product owner 26, 29, 62, 87, 132, 170

production (SDLC stage) 15, 16

professional knowledge (SFIA Framework) 4, 5

professional recognition 132–3

professional skills (SFIA Framework) 4, 5–6

‘programmer’ job title 2, 3

programming languages 20, 88–9, 108

Bash/Shell/PowerShell 42, 97

C 42, 43, 94, 97, 98, 103–4, 106

C# 42, 43, 90, 97, 98, 104–5, 113, 115, 152–3

C++ 42, 43, 90, 97, 98, 106–7

career progression 133–7, 140, 143

case studies 152–3, 164

CSS 42–3, 88, 97–100, 113, 123, 141, 155, 156

databases 46–7

development practices 89–96, 108

event driven 93–4

functional 94–5

HTML 42–3, 88, 97–100, 105, 113, 123, 141, 158

Java 40, 42–3, 66, 90, 97–8, 101–2, 131

JavaScript 42–3, 46–7, 77, 88–90,

96–100, 113, 123, 141, 156–7, 159

knowledge of 4, 33, 35–6, 40–3, 56, 87

libraries and frameworks 96

low/high level 89

object oriented 90–3, 94, 106

open source 95–6

PHP 42, 95, 97–8, 105–6, 134, 156

procedural 94, 152

Python 42, 90, 95, 97–8, 102–3, 152

quality 71–2, 77

Ruby 42, 90, 97, 98, 107, 124

SQL 42, 48, 53–4, 86, 97–8, 100–1, 114

tools, methods and techniques 109–10, 113, 123

TypeScript 42, 90, 97, 154

UML 57–60

progress monitoring 28

project-based interviews 142–3

property (object oriented languages) 91–2

prototypes/prototyping 20, 24, 102, 118–19

proxy tests 81

Puppet software 117

pure function 94–5

Python 42, 90, 95, 97–8, 102–3, 152

qualifications 17, 40, 127–8, 129, 130–3, 163–4

quality, product 33, 39–40, 66–77, 87, 115, 119–20

questions and answers (interview technique) 139–40

rapid prototyping 118

Raspberry Pi 102, 134

React 98, 99, 113, 123, 154, 159

readability 70–1, 73, 77–8, 110

real-time software 14, 85–6

recognising other roles 84–5

refactoring 33, 55, 77–8, 123, 171

Refactoring: Improving the Design of Existing Code 70, 78

regression testing 76, 77, 171

relational databases 45, 46, 47–54

reliability 66, 79, 80

requirements, understanding 33, 56–65

responsibilities 126, 148

cross-platform development 33, 65–6, 87

maintenance and refactoring 33, 77–8

non-functional requirements 34, 79–82, 84, 85, 87

preparing documentation 34, 78–9

security 34, 82–4

189

testing and debugging 33, 67, 68, 69, 71, 73–7, 78, 81

understanding and ensuring quality 33, 66–77

understanding requirements 33, 56–65

risk analysis 82–3

robustness 70, 72, 73, 76, 81, 82, 90

ROI (return on investment) 162

Roles (Agile/Scrum methodology) 25, 26

RPG (IBM procedural language) 94, 152

Ruby 42, 90, 97, 98, 107, 124

run books 78

‘safety engineering’ roles 86

SAGE 11

Scrum board 30, 31

Scrum Master 26, 27, 29, 30, 87, 132, 170

Scrum methodology 4, 120, 132, 146

roles/responsibilities of software developers 55, 60, 63, 87

SDLC 25–31

SDLC (software/system development life cycle) 6, 8, 15–32, 169

career progression 131–2, 147

roles/responsibilities of software developers 79, 85, 86

tools, methods and techniques112, 115, 119–21, 123, 125

security 6, 34, 39, 54–5, 82–4, 87, 112, 137

self-teaching 130, 132, 133–7, 157

sequence 38, 94, 112

SFIA (Skills Framework for the Information Age) 4–6, 8, 9, 84, 85, 87, 97, 147, 148, 167

‘shows best efforts’ tests 81–2

‘sketch-and-lunch’ 155

skills and competencies 1–3, 35–6

career progression 126, 132, 137–8, 141, 142, 144, 146, 147, 149

case studies 155, 162, 164

knowledge of a programming language 4, 33, 35–6, 40–3, 56, 87

logical/analytical thinking 33, 35–40, 43, 56, 87, 171

SFIA Framework 4–6, 8, 9, 84, 85, 87, 97, 147, 148, 167

understanding and using data 33, 35, 43–7, 56, 87, 171

‘skins’ 110

snippets 115, 156

social media 3, 9, 12, 13, 46, 47, 153

‘software design’ roles 85

‘software engineer’ job title 2

software weakness reviews 83

SOLID principles 93

solution design (SDLC stage) 15, 16

solution development 8, 9

specific prototyping 118

Specification by Example (SbE) 124

sprint 24, 25, 26, 29, 30, 78, 155, 170

sprint backlog 28, 29, 170

sprint planning 26–7, 29, 170

sprint retrospective 27, 29, 170

sprint review 27, 29, 170

SQL (Structured Query Language) 42, 48, 53–4, 86, 97–8, 100–1, 114

Stack Overflow 40–1, 97, 136

standards 6, 93, 100, 101, 114, 147

roles/responsibilities of software developers 40, 49, 67–9, 70–1, 73–4, 77, 79–80, 82, 85, 87

STEM (science, technology, engineering, mathematics) careers 129

support (SDLC stage) 15, 16

supportability 80, 81

syntax highlighting 110

system testing 75

190

‘systems design’ roles 85

systems development 9, 15, 16, 25, 32, 84–7

systems programming 10, 103

tag clouds 140

TDD (Test Driven Development) 68, 77, 123, 124–5

teamwork 30, 33, 55–6, 132, 144, 171

technical debt 78

technical specifications 78

telephone interviews 139

templates 90, 91, 115

tests (interview type) 143–5

testing 6

roles/responsibilities of software developers 33, 38–9, 40, 68, 71, 73–7, 78, 81–2, 84, 86

SDLC 18–19, 20, 169

Test Driven Development 68, 77, 123, 124–5

test runners 111–12

testing plans 78

‘testing’ roles 86

tools, methods and techniques 109, 111–12, 121, 122, 124–5

text editors 110–11, 113, 115

third-party products/libraries 79, 115

transpiled code 90

‘true’ prototyping 118

TypeScript 42, 90, 97, 154

UCAS (Universities and Colleges Admissions Service) 130

Udemy 88–9

UML (Unified Modelling Language) 57–60

unit testing 74, 75, 123

un-patched vulnerabilities 83

URLs (uniform resource locators) 13, 47

usability 79–80, 81, 82

use cases 57–60, 62, 85

user acceptance testing 75, 124

user guides 78

user requirements 37–8, 39

user stories 57, 60–5, 76, 79

UX (user experience) specialists 13–14, 80, 118–19, 151, 153–5

Vagrant software117

validation testing 75

variables 71

version/change control tools 115–16, 117

visibility 22, 30, 120

Visual Studio 104, 110, 111, 113, 152–3

volunteering 136, 137, 147, 158–9

walkthroughs 73, 74, 123

Waterfall life cycle 17–23, 120, 169

website development 13–14, 112

white box testing 74

WordPress 105

World Wide Web Consortium 100, 136

XML (eXtensible Markup Language) 46

Zave, Pamela 109

191

SOFTWARE DEVELOPERJill Clarke

BCS GUIDES TO IT ROLES

SOFTW

AR

E DEVELO

PER

Jill Clarke

SOFTWARE DEVELOPERCareers in software development

Jill Clarke

Software developers are responsible for producing fully functioning and secure software products; this encompasses design, programming and testing. With a growing need for software for everything from business to games to everyday appliances, there is increasing demand for professional software developers.

This career guide explains the software developer role in the context of the industry, including the relevant skills and competencies you will need to become a software developer. Career progression tips and software developer case studies round off the book, providing you with the insider knowledge you need to kick start your software development journey.

• Understand the software developer role and responsibilities• Discover the knowledge and skills that developers need• Explore programming languages and development practices• Consider the tools, methods and techniques of the trade• Learn the routes into and potential pathways through

the profession• Read career case studies from developers in their own words

ABOUT THE AUTHORJill Clarke is a freelance developer and software development trainer. She runs Bear Computer Services Ltd and does development work both for enjoyment and for profit, and to keep her skills fresh. She is a member of BCS, and volunteers for BCS Women and at the National Museum of Computing.

A clear detailed and concise introduction to the ever-expanding software developer discipline... a valuable resource for aspiring software developers.

Philomena Callaghan, Software Engineer, BBC

Software development is one of the most enthusing industries to work in, and this book offers a complete guide for advancing in it.

Ayesha Asghar, Freelance Software Analyst

This book is an invaluable help to those thinking of becoming a software developer.

Andrew Spencer, Freelance Project Manager

Information Technology, Business

9 781780 175010

You might also be interested in:

Cover photo: iStock ©RandyHume

ISBN 978-1-78017-501-0

Ebooks available

Paperback available