how to become a great developer

Post on 06-Jul-2015

734 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

At the core, the job of a software developer is and has always been the same: writing good, elegant, sustainable and bug-free software that exceeds the expectations of your clients. But the context in which we do our job is changing and with it the skills required to be a great software developer. In this talk, I want to go through a couple of things that I think make the difference between a developer and a great developer. This includes some technical skills and practices, but also non-technical things that you might not consider relevant for a developer at first.

TRANSCRIPT

How to become a great developerCorsin Decurtins, Netcetera

JavaDay

2014-11-22 / Skopje

How many people here are…… developers? … not developers? … application developers? … great developers?

How to become a great developerCorsin Decurtins, Netcetera

JavaDay

2014-11-22 / Skopje

NotesAbout this talkI do not consider myself a great developer. I have always wanted to become a better developer. I have learned a few things along the way that made me a better developer.

I have seen qualities in other people that I consider make them great developers.

This is what this talk is about.

NotesAbout this talkObservations and interpretations of qualities of other people. Half-baked theories and predictions about the future. Retrospective observations about myself and things that made me a better developer.

Skills that I think are important for developers, and will be even more important in the future.

Basics

NotesBasicsI will not talk much about the basics. Of course you need to improve your development skills. Learn about things like Clean Code, Good Design, Test-Driven Development Agile Methodologies, Test Coverage, Complexity Design Patterns, Reactive Programming, …

But you already know that.

Code

NotesReading CodeCode is something we deal with every day Focus is usually on writing code. But reading code is a great way of

learning things. Coding style, design patterns, naming conventions, formatting,

algorithms, data structures, logging, … Create a habit of reading code Code reviews Other projects from your company, libraries, code on Github Look at the code of open-source components that you use

Architecture

NotesSoftware ArchitectureDevelopers sometimes have negative connotations with architecture Software architects are the guys in shirts and ties that tell you what to do,

but do not really know what they are talking about Software Architecture is a property of a system It’s about the big picture; it’s about things that are difficult to change Software Architecture is way to important to leave it to the “Software

Architects” Be interested in Software Architecture and learn things about it Simon Brown’s Software Architecture for Developers is my recommendation

NotesLearning New LanguagesYou have probably already heard this one. Learn new languages, even if you will never really use them. Languages always come with a way of thinking, a way of looking at the world.

First-class citizens and concepts of programming languages.

NotesLearning New LanguagesYou learn a new language. You are confronted with a new way of looking at the world and at computing / programming.

You can use ideas and concepts from one language in another language.

You learn about core concepts and different ways of looking at the world

You learn to learn new languages

NotesSoftware DevelopmentWriting Code Avoiding Bugs Well-structured, clean code Automated tests Robust design, flexible, scalable, adaptable, extensible Delivering value to the customer

NotesThe great software developerA great software developer is great at writing code Learn about good architecture, clean code, automated testing, continuous integration, design patterns and principles, …

But software development is about a lot more than just writing code, particularly when we are talking about application code rather than frameworks, libraries and components.

Software Development

User Experience

Testing Quality Assurance

Interaction Graphics

Operations

Marketing

Architecture

Management

Business

Security

Product Management

Legal

Requirements Engineering

NotesThere are lots of other parties involved in a Software Development project.

The actual software development is just one part of the overall process.

People who are experts in other domains contribute to the software development project.

So how do you collaborate with all these parties … from a software developers point of view.

Group N-1

Group N

Group N+1

Group N-1

Group N

Group N+1

Group N-1

Group N

Group N+1

Group N+2

Group N+3

Group N+4

NotesCollaboration used to be from one group to another, usually through some formal artefacts like documents, code or similar deliverables.

Feedback was not very prominent in this old model of collaboration.

Essentially, this is waterfall thinking.

Software Development

User Experience

Testing Quality Assurance

Interaction Graphics

Operations

Marketing

Architecture

Management

Business

Security

Product Management

Legal

Requirements Engineering

DevOps

Analytics

Analytics

ScrumDDD

Test Automation

Scrum A/B Testing

NotesCollaboration between the different groups is changing. Lots of buzzwords are around nowadays (as seen on the previous slide). What a lot of them have in common is that they include a much closer collaboration between different groups of people.

Devops is a good example for this. At the core is promotes a very close collaboration between software developers and operations people.

More interaction, more feedback, more informal communication and collaboration.

This is basically the idea mentioned in the Agile Manifesto.

Agile ManifestoIndividuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan

Software Development

User Experience

Testing Quality Assurance

Interaction Graphics

Operations

Marketing

Architecture

Management

Business

Security

Product Management

Legal

Requirements Engineering

NotesAgile CollaborationFewer formal interfaces between the different teams. Focus on collaboration and communication. Much more feedback. Redefinition of the “team” as a group of people with a common goal (and completely different skills) rather than just a group of people with the same skills and tasks.

This has an impact on us as software developers and on the skills that we need.

Software Development

NotesMaking your skills availableIt’s not just about having good technical skills and knowledge It’s also about making those skills available to your clients The value of a developer lies within what he or she knows and can do, but also how well the team and the client can make use of this knowledge and skills

Think of it as the functionality that you provide and the API through which you expose this functionality

Software Development

User Experience

Testing Quality Assurance

Interaction Graphics

Operations

Marketing

Architecture

Management

Business

Security

Product Management

Legal

Requirements Engineering

NotesCollaboration with other ExpertsVarious groups of non-experts are often involved software projects These are actually not non-experts, but just experts in other domains than yours

Having some basic knowledge about these other domains help in the communication and collaboration

You do not need to be an expert, but it helps to know some things, particularly what drives the people, how they think, what they care about and what they value.

Business Domain Knowledge

NotesBusiness Domain KnowledgeKnowledge about the business domain is particularly important. At the end, this is the area where you as a developer are trying to provide value. Do not

be scared about the business domain. Understanding the customer/client. This means multiple things: -Actually understanding what the client or customer is talking about. Terms, words,

expressions, … -Understanding what the client/customer is interested in and cares about. -Understanding how what you are doing creates value for the customer.

Formalizing the (often informal) concepts of the customer. In the end you have to explain this to the most stupid (but extremely reliable) worker of a company: the computer.

NotesDomain-Driven DesignDDD is a framework that builds on this idea It is about a lot of things, but in particular, it also contains the idea that:

All the people involved in the software project should use the same concepts (although at different levels of abstract) and speak the same language (at very different levels of detail and with very different focusses)

Business Domain Knowledge

Learning as an Attitude

NotesLearning as an AttitudeTo some people, this might be obvious; to some it’s not I have often encountered resistance to learning about the business, i.e. developers who do not want to know about the business details and almost actively reject to learn anything

I do not think that you get very far with this A great developer in my opinion should embrace this or at least accept that he or she might learn something about the business by mistake

Management

NotesManagementThe management is another red flag for many developers. You do not have to become a manager, if you do not want to.

But to know how managers work and what they care about, is extremely useful for a software developer.

Languages

NotesEnglishEnglish is the de-facto standard language in IT (and business) Everybody needs basic English skills Advanced English skills make your live much easier Communication and conversation in English should be effort-less Accents are perfectly fine Investing in improving your English helps you to become a more

valuable developer Make use of opportunities to read, write, listen to and speak English

Presentation Skills

NotesPresentation SkillsPresentation skills are very useful for developers. Presenting at conferences with Powerpoint etc. are only one form of this.

The essence is the ability to summarise complex concepts, explain them to people with different knowledge backgrounds.

A talk at a conference is one form of this; asking a lead developer about making a refactoring can be another form.

Open Source

NotesOpen Source ProjectsContributing to open source projects are another great way to learn a lot of things.

You collaborate people who work differently than the colleagues in your day job.

You can learn a lot about technical topics, but also about collaboration and communication.

Conferences, Talks, …

NotesConferences, Talks, …I can only encourage developers to attend conferences, talks, user groups, meet-ups, …

You can learn a lot at these events and you meet a lot of interesting people.

Make use of opportunities, attend events and maybe even contribute actively to such events.

Software Development

NotesSummaryA great developer needs excellent technical skills. But that is not enough. It’s also about making those skills available to other people The value of a developer lies within what he or she knows and can do, but also how well the team and the client can make use of this knowledge and skills

This “API layer” is already very important today and I believe that it will be even more important in the future

Corsin Decurtins, Netcetera Chief Technology Officer

corsin.decurtins@netcetera.com @corsin

How to become a great developerCorsin Decurtins, Netcetera

JavaDay

2014-11-22 / Skopje

top related