SlideShare a Scribd company logo
1 of 2
Download to read offline
LESSONS LEARNED ABOUT SOFTWARE DEVELOPMENT

Hello, my name is Jeff Thalhammer. I've been a software developer for a few years. I still have
a lot to learn about my profession, but I would like to think I have acquired a few bits of wisdom
over the years. So in the next five minutes, I'm going to share with you the most important
lessons that I have learned about software development...

                          Lesson 1: The best code is no code at all.

The moment you begin writing code, you start creating bugs. Every line of code is a future
liability. So the less code you have, the less risk you take on. This may sound counter-intuitive,
but good software development is all about avoiding writing code.

Code-avoidance happens in a lot of ways. For example, you might be tasked with writing code
to add up the sales figures on the quarterly TPS reports. But if you do a bit of digging, you'll find
that you can just get the total by calling Mary over in the accounting department. Bam! Problem
solved with no code.

Open source and commercial products are another good way to avoid code. Despite what you
might like to think, you are not special. A lot of problems have already been solved by people a
lot smarter than you or I. And if their solutions don't seem to fit, then you really need to think
hard and justify why your needs are so different.

Software itself is actually full of code-avoidance mechanisms: subroutines, libraries, object
orientation, web services, virtualization, cloud computing. These all exist for the purpose of not
writing code. Use them.

As developers, it is hard to resist the temptation to write code. That's what we are here for after
all. But that isn't really your job. Your job is to help solve problems in the most effective and
prudent way that you know how. Code is just *one* of the weapons in your problem-solving
arsenal. So think about that before you write your next line of code.

                Lesson 2: Code is for humans first, and computers second.

Once you've concluded that you actually must write some code, you need to remember who you
are writing it for. And no, you are not writing code for the computer.

Like all languages, programming languages are just a way for us humans to communicate with
each other and ourselves. We typically think that code is the "solution". But it's not. Code is
actually how we express the *problem*. Once you've fully expressed the problem, then a
computer will dutifully execute the solution. But -- this is key -- the problem is ours, not the
computer's.

Unfortunately, computers aren't very smart. So we have to invent these awkward little
languages they can understand. But we get so caught up in those little languages that we let
them constrain our own ability to express ourselves clearly, often to the point that we don't even
understand it.

So when you write code, remember that you are actually trying to express a real human problem
in an artificial language. So the more your code resembles a human language, the more likely it
is to be an accurate definition of the problem. And if the problem is defined well, then the
computer will probably give you the right solution.

                   Lesson 3: You Are Not As Smart As You Think You Are.

In many professions, you can at least identify the entire body of knowledge that you'll ever need
in that career. But the software industry is constantly evolving. Most of the things you learned
five years ago are no longer relevant, or may be down right incorrect. True, some changes are
just fads and some learning is inevitably wasted on dead-end ideas. But how will you know
which are which?

The only way for a person or an organization to succeed in this business is to constantly keep
learning. More importantly, you must learn how to learn effectively. You must question your old
habits, seek alternative perspectives, and acquire knew knowledge. And just as important, you
must act on that knowledge. Otherwise, it is just trivia.

So the challenge is to cultivate an organization that promotes effective learning. The good news
is that learning opportunities are everywhere. Every line of code, every presentation, every
meeting is an opportunity. But first, you must instill people (or yourself) with traditions and values
that enable them to recognize and exploit those opportunities.

             Lesson 4: Software development is 80% social and 20% technical.

Writing code is the easy part. Anyone can do it. There are millions of developers in China and
India who are willing and able to write code for you. And when technical questions arise, most of
the answers are freely available. Just ask Google. The really hard part is figuring out *what*
code to write.

Figuring out what to write requires asking a lot of questions: What is the real problem we are
trying to solve? Which parts of the problem are constant? Which parts are subject to change?
How likely is it to change? Which are the critical features? Which features are fluff? What kind
of resources to we have available? The answers to these questions require conversations with
actual human beings.

So the message here is that to succeed in this industry, your social skills need be just as good
(or even better) than your technical skills. You need to be able to communicate with people and
find out what they really need, how they feel, what their history is, what their goals are, what they
are doing.

When working on a team, we all have different roles to play -- we each have our own areas of
strength -- and that's fine. But as a whole, the team must balance their technical and social
skills. The unfortunate thing is that most organizations don't (or can't) really operate as teams.
Developers end up playing lots of roles, some of which they haven't really mastered. So for
them to succeed as individuals in that kind of environment, developers also need to be mindful of
the balance between their own social and technical skills.

Final thoughts: Quality is not an act, it is a habit. --Aristotle

Thanks for your time.

More Related Content

Similar to Lessons Learned About Software Development

Marketing Your Open Source Project - OSCON 2019_v04.pdf
Marketing Your Open Source Project - OSCON 2019_v04.pdfMarketing Your Open Source Project - OSCON 2019_v04.pdf
Marketing Your Open Source Project - OSCON 2019_v04.pdf
Amazon Web Services
 
ERE Job Descriptions Presentation - John Greer
ERE Job Descriptions Presentation - John GreerERE Job Descriptions Presentation - John Greer
ERE Job Descriptions Presentation - John Greer
John Greer
 
Future of IT preso
Future of IT presoFuture of IT preso
Future of IT preso
Lorna Garey
 
Computer Science fundamentals by Jordan Ryan Molina
Computer Science fundamentals by Jordan Ryan MolinaComputer Science fundamentals by Jordan Ryan Molina
Computer Science fundamentals by Jordan Ryan Molina
Jordan Ryan Molina
 

Similar to Lessons Learned About Software Development (20)

Why learn how to code
Why learn how to codeWhy learn how to code
Why learn how to code
 
The passionate programmer
The passionate programmerThe passionate programmer
The passionate programmer
 
Trends In Technical Communication
Trends In Technical CommunicationTrends In Technical Communication
Trends In Technical Communication
 
Choose Boring Technology
Choose Boring TechnologyChoose Boring Technology
Choose Boring Technology
 
Marketing Your Open Source Project - OSCON 2019_v04.pdf
Marketing Your Open Source Project - OSCON 2019_v04.pdfMarketing Your Open Source Project - OSCON 2019_v04.pdf
Marketing Your Open Source Project - OSCON 2019_v04.pdf
 
How to learn coding
How to learn codingHow to learn coding
How to learn coding
 
A Cup of Tea With Michael Larsen
A Cup of Tea With Michael LarsenA Cup of Tea With Michael Larsen
A Cup of Tea With Michael Larsen
 
22 practical skills that everyone should learn in 2021
22 practical skills that everyone should learn in 202122 practical skills that everyone should learn in 2021
22 practical skills that everyone should learn in 2021
 
How to tell a better story (in code)(final)
How to tell a better story (in code)(final)How to tell a better story (in code)(final)
How to tell a better story (in code)(final)
 
Clean Code Software Engineering
Clean Code Software Engineering Clean Code Software Engineering
Clean Code Software Engineering
 
How to become a great developer
How to become a great developerHow to become a great developer
How to become a great developer
 
ERE Job Descriptions Presentation - John Greer
ERE Job Descriptions Presentation - John GreerERE Job Descriptions Presentation - John Greer
ERE Job Descriptions Presentation - John Greer
 
C Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh Share
C Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh ShareC Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh Share
C Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh Share
 
Future of IT preso
Future of IT presoFuture of IT preso
Future of IT preso
 
Software piracy
Software piracySoftware piracy
Software piracy
 
Community engagement
Community engagementCommunity engagement
Community engagement
 
Coding lessons.pdf
Coding lessons.pdfCoding lessons.pdf
Coding lessons.pdf
 
UCD / IxD Introduction - User centric design, interaction design
UCD / IxD Introduction - User centric design, interaction designUCD / IxD Introduction - User centric design, interaction design
UCD / IxD Introduction - User centric design, interaction design
 
How to Become a Conference Speaker
How to Become a Conference SpeakerHow to Become a Conference Speaker
How to Become a Conference Speaker
 
Computer Science fundamentals by Jordan Ryan Molina
Computer Science fundamentals by Jordan Ryan MolinaComputer Science fundamentals by Jordan Ryan Molina
Computer Science fundamentals by Jordan Ryan Molina
 

More from Jeffrey Ryan Thalhammer (6)

I Got 99 Problems But CPAN Ain't One
I Got 99 Problems But CPAN Ain't OneI Got 99 Problems But CPAN Ain't One
I Got 99 Problems But CPAN Ain't One
 
Pinto+Stratopan+Love
Pinto+Stratopan+LovePinto+Stratopan+Love
Pinto+Stratopan+Love
 
Dependency Management With Pinto
Dependency Management With PintoDependency Management With Pinto
Dependency Management With Pinto
 
Perl Critic In Depth
Perl Critic In DepthPerl Critic In Depth
Perl Critic In Depth
 
CPAN For Private Code
CPAN For Private CodeCPAN For Private Code
CPAN For Private Code
 
Evolving Tests
Evolving TestsEvolving Tests
Evolving Tests
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 

Lessons Learned About Software Development

  • 1. LESSONS LEARNED ABOUT SOFTWARE DEVELOPMENT Hello, my name is Jeff Thalhammer. I've been a software developer for a few years. I still have a lot to learn about my profession, but I would like to think I have acquired a few bits of wisdom over the years. So in the next five minutes, I'm going to share with you the most important lessons that I have learned about software development... Lesson 1: The best code is no code at all. The moment you begin writing code, you start creating bugs. Every line of code is a future liability. So the less code you have, the less risk you take on. This may sound counter-intuitive, but good software development is all about avoiding writing code. Code-avoidance happens in a lot of ways. For example, you might be tasked with writing code to add up the sales figures on the quarterly TPS reports. But if you do a bit of digging, you'll find that you can just get the total by calling Mary over in the accounting department. Bam! Problem solved with no code. Open source and commercial products are another good way to avoid code. Despite what you might like to think, you are not special. A lot of problems have already been solved by people a lot smarter than you or I. And if their solutions don't seem to fit, then you really need to think hard and justify why your needs are so different. Software itself is actually full of code-avoidance mechanisms: subroutines, libraries, object orientation, web services, virtualization, cloud computing. These all exist for the purpose of not writing code. Use them. As developers, it is hard to resist the temptation to write code. That's what we are here for after all. But that isn't really your job. Your job is to help solve problems in the most effective and prudent way that you know how. Code is just *one* of the weapons in your problem-solving arsenal. So think about that before you write your next line of code. Lesson 2: Code is for humans first, and computers second. Once you've concluded that you actually must write some code, you need to remember who you are writing it for. And no, you are not writing code for the computer. Like all languages, programming languages are just a way for us humans to communicate with each other and ourselves. We typically think that code is the "solution". But it's not. Code is actually how we express the *problem*. Once you've fully expressed the problem, then a computer will dutifully execute the solution. But -- this is key -- the problem is ours, not the computer's. Unfortunately, computers aren't very smart. So we have to invent these awkward little languages they can understand. But we get so caught up in those little languages that we let them constrain our own ability to express ourselves clearly, often to the point that we don't even understand it. So when you write code, remember that you are actually trying to express a real human problem in an artificial language. So the more your code resembles a human language, the more likely it
  • 2. is to be an accurate definition of the problem. And if the problem is defined well, then the computer will probably give you the right solution. Lesson 3: You Are Not As Smart As You Think You Are. In many professions, you can at least identify the entire body of knowledge that you'll ever need in that career. But the software industry is constantly evolving. Most of the things you learned five years ago are no longer relevant, or may be down right incorrect. True, some changes are just fads and some learning is inevitably wasted on dead-end ideas. But how will you know which are which? The only way for a person or an organization to succeed in this business is to constantly keep learning. More importantly, you must learn how to learn effectively. You must question your old habits, seek alternative perspectives, and acquire knew knowledge. And just as important, you must act on that knowledge. Otherwise, it is just trivia. So the challenge is to cultivate an organization that promotes effective learning. The good news is that learning opportunities are everywhere. Every line of code, every presentation, every meeting is an opportunity. But first, you must instill people (or yourself) with traditions and values that enable them to recognize and exploit those opportunities. Lesson 4: Software development is 80% social and 20% technical. Writing code is the easy part. Anyone can do it. There are millions of developers in China and India who are willing and able to write code for you. And when technical questions arise, most of the answers are freely available. Just ask Google. The really hard part is figuring out *what* code to write. Figuring out what to write requires asking a lot of questions: What is the real problem we are trying to solve? Which parts of the problem are constant? Which parts are subject to change? How likely is it to change? Which are the critical features? Which features are fluff? What kind of resources to we have available? The answers to these questions require conversations with actual human beings. So the message here is that to succeed in this industry, your social skills need be just as good (or even better) than your technical skills. You need to be able to communicate with people and find out what they really need, how they feel, what their history is, what their goals are, what they are doing. When working on a team, we all have different roles to play -- we each have our own areas of strength -- and that's fine. But as a whole, the team must balance their technical and social skills. The unfortunate thing is that most organizations don't (or can't) really operate as teams. Developers end up playing lots of roles, some of which they haven't really mastered. So for them to succeed as individuals in that kind of environment, developers also need to be mindful of the balance between their own social and technical skills. Final thoughts: Quality is not an act, it is a habit. --Aristotle Thanks for your time.