Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/burningdog/meta-cognitive-dev
How to become a better developer
https://github.com/burningdog/meta-cognitive-dev
Last synced: 11 days ago
JSON representation
How to become a better developer
- Host: GitHub
- URL: https://github.com/burningdog/meta-cognitive-dev
- Owner: BurningDog
- License: mit
- Created: 2017-06-08T17:23:35.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2021-06-28T14:28:37.000Z (over 3 years ago)
- Last Synced: 2023-08-03T16:53:25.657Z (over 1 year ago)
- Size: 15.6 KB
- Stars: 6
- Watchers: 4
- Forks: 8
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
This is the start of putting some ideas together about what makes a good developer (at different levels of experience). Feel free to contribute!
Stuff which makes you a good developer (and how to grow)
--------------------------------------------------------# Junior developer
I'm just starting out. I'm learning how to code and want to be able to do that well within a team which supports and stretches me.
I begin by contributing small pieces of reliable code to my team and build my confidence and contributions.
I'm learning how a team works, how software is built, and even though my role is a developer I'm wanting to understand all of the different roles on a team and start learning some of their skills.
## Must know
* How to write simple, maintainable code
* How to sketch your current solution to a problem
* A language (the main principles, syntax)
* How to comment code
* git (branching/merging, commits, pull requests)
* The process of committing (first review local changes with a git diff)
* How to write a commit message (use the [Angular commit message format](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit))
* How to create an ssh public/private key
* Have a GitHub profile with at least 2 example projects. Don't just do a "hello world" which took you 5 minutes. Change it in an interesting way.
* Agile
* Agile manifesto (know the principles, why they are important, what they mean to you, and what you might add)## Must read
* ["Code Simplicity"](https://www.amazon.com/Code-Simplicity-Fundamentals-Max-Kanat-Alexander-ebook/dp/B007NZU848//)
## To learn
* What a pure function is
* How to write a unit test
* What red-green-refactor is, and how to use it to design code
* How to pair program
* Docker for development
* What a product backlog is and how it's maintained
* Ability to wireframe on a whiteboard
* How to gently but firmly push back on anyone except the Product Owner re-prioritizing their work## Extra points
* [Lean UX](https://www.interaction-design.org/literature/article/a-simple-introduction-to-lean-ux)
* Design Thinking
* Set up a personal kanban board (http://personalkanban.com)
* Intentional IDE choice
* Journal! Since code is like writing prose. If you practice writing, you'll become a better coder.
* Read a book about your language (and do the exercises!)
* Do an online course (free or paid - there plenty of choices)
* Attend a local tech meetup
* Speak at a local tech meetup (yes, you're new, so find that thing which you can offer others)
* Demonstrate how to use Test-Driven Development to produce a design which solves a problem## Goal
Gain solid technical competency in your language, and in general coding skills.
You can operate as part of a team with at least one other developer who is more senior to you. You regularly pair program with them.They will help you learn everything in the "to learn" section - a good attitude and hard work will help you help them to help you!
# Mid-level dev
I've been at this a while and I'm pretty good. I can dazzle junior developers but I know enough to know I have still a lot of learn. I still sometimes get lost building too much complexity, so I'm trying to learn the Agile principle of simplicity: the art of maximising the amount of work not done.
While I'm continuing to build deeper technical competency I'm also broadening my knowlege, whether that's in other languages or other parts of the stack or in Agile methods or graphic design or usability or Design Thinking. I regularly mentor others by pair programming and code reviews and I also see plenty of opportunities for improvement in the way my team - and the overall system - works.
## Must know
* Docker for development and deployment
* 2016 & [2017 State of DevOps report](https://puppet.com/resources/whitepaper/state-of-devops-report) (sign up for them and download. That way you get informed of next year's one!)
* The Design Thinking process
* How to evaluate code for simplicity and maintainability
* How to teach Test-Driven Development
* Trunk-based development
* Some principles from the Lean movement, particularly why small batch sizes are useful
* Markdown## Must do
* Mentor others, particularly the junior devs on your team.
* Pair program
* Do code review (sit with the person you're doing code review with; first get clear on what problem they are solving with their pull request; verify that their code actually solves that problem; check that commits are granular and descriptive, that nothing accidental was added to the commit; syntax is the least important of these: syntax errors should be caught with linters in an IDE; note what training can be done with the team based on the code you're seeing).
* Ability to wireframe on a whiteboard
* Learn from others, both junior and senior to you. Seek out things you don't know. Be curious!
* Regularly asks "What's the problem we're trying to solve with that?" and optimizes for a solution with others.
* Optimize for small batch sizes (from code commits to projects)## To learn
* What a limited WIP pull system is, its advantages over a push system
* How to do forecasting using Monte Carlo estimations
* The basics of functional programming## Extra points
* Service-oriented architecture
* [Microservices architecture](http://microservices.io)
* Lean product design
* Lean Analytics
* Speak at a local tech meetup
* Knowledge of the Theory of Constraints and how it might be useful to building software
* "The Goal" by Elihyu Goldratt
* Some techniques of [Agile Modeling](http://www.agilemodeling.com)## Goal
Gain deep technical competency in your area, perhaps learning an additional language. Wider awareness of technical, business and UX contexts. Brings deeper intelligence than "just writes codes". Emotionally aware and working on getting better.
# Senior dev
## Must know
* Proficient in a language
* Different architectural patterns (monoliths, SOA, microservices, etc) and the case for each of them
* The case for DevOps, and regularly use that knowledge with your team
* What a 10x developer is, and why being a good team lead who enables others is better than being an excellent lone developer## Must do
* Lead a team
* Coach the team on [trunk-based development](https://trunkbaseddevelopment.com/)
* Know what each person's strengths and weaknesses are, and help them focus on their strengths
* Manage upwards: find out what information will be useful to those higher up the food chain
* Regularly add useful knowledge to the team
* Allow an architectural design to emerge from a cross-functional team
* Ability to wireframe on a whiteboard
* Continuous forecasting using Monte Carlo estimations, communicating that upwards and outwards
* Optimize for small batch sizes (from code commits to projects)
* Optimize the system for flow
* Optimize for simplicity: the art of maximizing the amount of work not done
* Regularly pair program with team members## The "NOT-WRITING-CODE" skills
* https://twitter.com/marlenac/status/1319639724336640000
## Extra points
* Any coaching methodology
* Familiarity with the [Spine model](http://spinemodel.info/documentation.html)# Manager
* Does stuff