whoisjoe.com

So you want to be a better programmer

  

June 14, 2017

Home About Projects Blog LinkedIn ReThink Security
I get asked sometimes how some people on my team can become a better programmer. I think it's useful to think in terms of different evolutions of the programmer. In the beginning there's a scripter or coder and at the highest level you have an architect. There is much, much more to go into here, but this is a rough framework to plot your skills over time.

Use this to fill in your current skills and to identify key areas of improvement.

http://sijinjoseph.com/programmer-competency-matrix/

Progression from Scripting to Developing

Move from “scripting” to “programming” to “developing”

Coder

  • Coders understand how to solve immediate problems in a sometimes brute force way. Question -> Google -> StackOverflow -> Copy -> Paste is a standard method of development and problem solving.
  • Lack algorithms or data structures understanding well enough to know when there may be an efficient solution to the problem
  • Develop primarily in a text editor
  • Write code -> compile -> fix compiler errors -> run -> fix runtime errors -> repeat
  • Struggles to estimate coding projects larger than one month

Programmer

  • Understands their IDE can use it for debugging
  • Understands basic Algorithms and Data Structures
  • Breaks problems into reusable parts
  • Is comfortable with their programming language and the common libraries and frameworks
  • Googling is still common, compiler errors are less frequent, runtime errors are less frequent
  • Can break problems down to estimate more effectively

Developer

  • Fluent with their IDE and all features
  • Understand all features and components of the software (from DB, to unit tests, to OS, etc.)
  • Knows multiple languages and when to do different things in different areas (for example when it’s best to let the database handle something vs. code)
  • Understands Advanced algorithms and data structures
  • Deeply understands language constructs, libraries and frameworks they’re using. Understands The Law of Leaky Abstractions.
  • Understands performance tradeoffs
  • Can reliably create time estimates, and track progress toward them

Architect

  • Knows when to use different systems for best performance/security/logic
  • Sophisticated knowledge of data structures and algorithms including space and time complexity analysis

Books to read:

  • Code Complete - This is seriously one of the best Developer books I’ve ever read.
  • Writing Secure Code - Security is a huge part of being a good developer.
  • Rapid Development: Taming Wild Software Schedules

Posted By: Joe Basirico

  • 81 More Posts
  • So, You're a Manager Now
  • A Mixtape in 2022
  • The Middle Path of Planning and Reflection
  • Micromanagement and Trust
  • On Giving Advice
  • Emergency Preparedness During Coronavirus Frenzy
  • Mind Map Your Life
  • Start With the Hard Part
  • Delight in the Details
  • Introducing ReThink Security
  • Newsletter & Recommendations
  • Take a Moment
  • Triage Decision Making
  • Show Your Work
  • Getting Back Up
  • Max Out vs. Continuous Development
  • Mental Diet and Exercise
  • Asking for Help Part 2 - Alerting
  • High Water Mark
  • Who Do You Want to Be
  • Presentation Tips
  • Asking for Help
  • China Hijacking the Internet
  • Recording Audio with AirPods in Imovie
  • Active Decisions
  • Create/Publish Scripts
  • Specialize or Do Not Specialize
  • Exactis Breach
  • Optimizing Images
  • What I Track
  • What I’m Thinking About May
  • What I’m Thinking About March
  • What I’m Thinking About January
  • Building a Collaborative & Social Application Security Program
  • Lazy Days in the Cloud
  • Delegate Then Do
  • So you want to be a better programmer
  • Project Success
  • Don't Short Circuit a Lesson
  • Scale Your Solution to the Problem
  • Digital Currencies
  • Fortnightly
  • Why You Should Have Trust Issues with Pokemon Go, and Every Other App on Your Phone
  • In Defense of Reverse Engineering and Responsible Disclosure
  • Ruby open allows command injection if user controlled
  • New Mac Install Guide
  • Understanding Customer Needs and Helping Them Mature
  • My Experiences with IOS8 and Yosemite so far
  • The Importance of Vulnerability Disclosure Programs and Bug Bounties
  • My New Record Player and Beck - Morning Phase (The Vinyl Experience)
  • An Hour of Code with Code.org
  • Gmail Changes to Displays Images by Default
  • Why I Donated to Help Jailbreak iOS7 & You Should Too
  • Email Strategy
  • Shutdown
  • Anatomy of a Distributed Denial of Service (DDoS) Attack
  • NASA Forced to Suspend All Public Outreach & Education Programs
  • Joe_CMS Open Source!
  • Mobile Application Security Testing FAQs: Post #1
  • How Much Security Does Obfuscation Get You?
  • Why Privacy Matters Even if You Have 'Nothing to Hide'
  • What LinkedIn Should Have Done with Your Passwords
  • Constant Vigilance
  • Boeing Paying Hackers to Break into Their Systems
  • My Reading Cycle
  • Developing Tools for Professional Hackers
  • Finding Your Inner Evildoer (4/4): An Evil Streak
  • Finding Your Inner Evildoer (3/4): A Good Imagination
  • When to Rebuild Your Process from Scratch
  • Finding Your Inner Evildoer (2/4): Complete Knowledge of the System
  • Continuous Incremental, Personal Improvement
  • Finding Your Inner Evildoer: Part 1
  • CISCO Password Revealer
  • Battling with Word and Excel
  • Which is More Secure: Windows or Linux?
  • The High Cost of an Application Security Data Breach
  • Using the ConfigurationManager to Access your ConnecitonStrings in the Web.Config
  • New WikiRater Features
  • When is it OK to Build up Technical Debt
  • Time Management with the Pomodoro Technique
  • Manage Energy Not Time
  • Goals, Results and Activities - defining your productivity
© 2022 whoisjoe.com