The Rules of Real Life Programming
A closer look at the unspoken rules of developing software in the real world,
and the lessons we can learn from them. Begin →
Dave Poole
Senior Web Developer at SiteCrafting, Inc
A little bit about me:
- Graduated from PLU in 2006.
BFA in Art, BA in
CS
- Currently working at SiteCrafting, Inc,
a web application development company
Some stuff I've done:
- Kiosk system for North Coast Electric Company
- GreenFootJobs.com - searchable jobs site specifically for the green energy sector
- Automatic deployment system using Subversion
- Inventory management/rental system including availability calendars
- Currently: Creating a system to upload videos, convert them to a web-ready format, embed on web pages (youtube, vimeo)
What I want to talk about today:
Stuff that you don't learn in school
Rule 1:
Everything you know is wrong
- Java patterns are useless to a Lisp application
- Compiled code is not better than interpreted code
- It's all a matter of perspective
Rule 2:
You're always responsible
Basically, it's always your fault.
- Don't have the assets you need? Get them.
- Notice a bug? Fix it.
- Don't have the tools you need? Improvise.
- It's up to you. Ultimately, the quality of the software directly correlates to the quality of the programmers.
- At the end of the day, it's your job and reputation on the line
Rule 3:
Normalize until it's right, then optimize until it works
- A technically perfect system that doesn't work is no good.
- Sometimes, you have to break the "rules".
Rule 4:
All of programming is design
/**
* Finds all models that are listed within a given section
*/
function getAllModelsBySectionID(sectionID) {
...
}
- Well, duh.
- Good programming + bad design = Not very useful
Rule 5:
To better understand software, you must understand people
- How people use software, ie how they expect it to function vs. how it does function
- Murphy's Law —
Anything that can go wrong, will go wrong
.
- Make it foolproof, and someone will make a better fool.
- Besides, for programmers, less typing = better
The Real Rules:
- Everything you know is wrong
- You're always responsible
- Normalize until it's right, then optimize until it works
- All of programming is design
- To better understand software, you must understand people
Next: A few lessons to learn…
Lesson 1:
Be smart
- Write everything down
- Be a full stack developer
- Accept that you can't change some things
Lesson 2:
Be faster, better, & stronger
- If I can only produce 1000 lines of code per day, I want those 1000 lines to accomplish as much as I can
- Do something more than once: make it a function; refactor often
- Develop software for fun
- Never stop learning
Lesson 3:
Your code sucks, but that's ok
- Pressure to deliver leads to compromises
- Compromises lead to crappy (hacky) code, ie: it works but it looks nasty
- The code you hate most is probably going to be your own.
- Goal: Minimize crappy code that gets into the wild. *
If you're not unhappy with it, you waited too long to release it
— Jeff Atwood et. al
Lesson 4:
Evaluate, explore, and test other people's code and applications
- What I really mean is
learn from others
Good artists copy, great artists steal
— Picasso Bansky*
- * Original author unknown
My particular area of expertise
Web Development
Everybody thinks...
web developers aren't real programmers
- Total BS
- Anything that uses
http(s?)://
is web development
- Facebook, Yahoo, Google … and so on
It's not easy
To create good software for the internet, you have to know a lot
- Coding, databases, server admin, CSS, HTML, JavaScript
- Design, Typography
- Usability (HCI), Interface Design
- Marketing, Communication
- You have to really care about your software and the community that uses it
Advantages of developing for the web
- Rapid development and deployment
- Massive potential userbase
- Lowest common demoninator - simplest way to market and provide a piece of software