Skip to content

A collection of thoughts about "what makes a good developer"

License

Notifications You must be signed in to change notification settings

seanfdnn/devcompetencies

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 

Repository files navigation

Software Developer Competencies

A collection of thoughts about "what makes a good developer"

Personal Workflow / IDE Use

Anti-Patterns

  • Frequent use of mouse for programming tasks. Navigates through code and files and performs operations using mouse.
  • Is unaware of inefficiencies in personal workflow and does not invest thought or effort into honing

Patterns

  • Can navigate code and utilize IDE using memorized shortcut keys with extremely infrequent use of mouse
  • Is self-aware of inefficiencies in personal workflow; has invested thought and effort into honing workflow, IDE configuration, tooling; continues to invest thought and effort in the pursuit of improving workflow

Code Structure and Clean Code

Anti-Patterns

  • Prolific multi-level nesting of code blocks
  • Many functions/methods longer than 30 - 50 lines that have not been broken up
  • Single-syllable naming of variables, methods, objects that do not reveal the intended purpose (non intention-revealing)
  • Redundant comments that do not
  • Use of comments as source control to document history (rather than using source control)

Patterns

  • Valuable comments that explain what something does beyond which can be easily inferred
  • Comments that explain why a particular approach was used in the code to help future maintainers understand why it should be preserverd, or identify when it may no longer be valid

Language and Framework

Anti-Patterns

  • Not aware of language idioms; does not research (i.e. Google) idiomatic approach to solving problems; uses naive (non-idiomatic
  • Frequently re-invents the wheel: implements own methods

Patterns

  • Knowledgeable of all language features and applies them appropriately. For example, in C# use of enumerations, foreach, yields, lambdas, events, Linq, async/await, delegates, etc.. In Python: generators, list comprehension.

Refactoring

Anti-Patterns

  • Continuously "kludges" new functionality into existing code -- attempts as much as possible to add new code while avoiding touching existing code and avoiding re-factoring

Patterns

  • Can accurately describe refactoring actions in terms of Martin Fowler's "Refactoring" terms such as "extract method", "extract interface", "pull-up member variable" etc...

Source Control / Configuration Management

Anti-Patterns

  • Doesn't use source control
  • Routinley goes days or longer without checking into mainline, or uses branches to avoid continuous integration of code

Patterns

  • Continuously integrates: Checks in code to mainline daily
  • Able to perform basic operations

Knowledge

  • Can clone a repo, i.e. git clone
  • Can commit, adding only desired changes, i.e. git add, git commit
  • Can pull latest git pull
  • Can merge
  • Can create, switch between branches
  • Can stash and pop
  • Can create tags

Computer Science

Troubleshooting

Patterns

  • Resourceful; uses multiple resources at disposal to research and troubleshoot, including documentation, examining code, Googling, Stack Overflow, writing automated tests, adding logging, debugging, comparing against samples, writing and testing simplified code, etc..
  • Effectively decomposes the problem into isolated parts; develops hypotheses
  • Applies knowledge, experience and intuition to rank likelihood of hypotheses and develop efficient approach for testing each
  • Not afraid to request help at an appropriate time; is able to communicate with accuracy, brevity and clarity the specifics of the problem and existing troubleshooting

Professional Development

Patterns

  • Maintains abreast of new technologies and industry trends through Twitter, blogs, vendor news
  • Invests effort into experimenting with new technology
  • Can extrapolate opportunities when new technology may be an appropriate solution to an existing problem; equally, understands the limits of a new technology and when it may not be appropriate
  • Is comfortable and confident in trial and failure -- trying a new technology that carries risk and being honest and realistic if it does not work as hoped.

Eliciting and Defining the Problem Space

Security

Networking

User-Centric Design

Leadership

Management

Dumping Ground

Skills that are probably important but haven't been categorized yet.

  • Using ssh to connect to a remote host
  • Using scp to copy files to/from a remote host
  • Generating keypairs

About

A collection of thoughts about "what makes a good developer"

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published