How to Become a Senior Developer
지난 달에 들은 Udemy의 How to Become a Senior Developer - Beyond coding skills를 정리해 본다.
To boost your productivity
회사에서 새로운 기술을 “깊이 있게” 익히기는 쉽지 않다. 구글링한 코드를 복사해서 발등에 떨어진 문제를 해결하고는 머리 속에서 지워 버리는 경우도 흔하다. 캘린더에 일정 시간을 블로킹해서 온라인 코스로 새로운 기술을 익히는 것이 장기적으로 생산성을 높이는데 도움이 된다. 반복적인 일은 자동화할 방법을 찾는다.
- Use shortcuts and automate
- Take online courses
Who is a senior developer?
Proficient
- Writes high quality
- Aware of tech & methodologies
- Finds and solves bugs quickly
Manages himself
- Prioritizes & handles tasks
Professional
- Brings values
- Strives for excellence
Team Player
- Looks beyond his tasks
- Selfless
Excel
- Measure twice times, cut once
- Always look for unclear issues and make them clear
- Always know where you are in the bigger picture
- Always make sure what you know is available to you
Understand the task
- Why deep dive at the beginning?
- less bugs
- minimize changes after coding begins
- better time management
- How to tell you understand the task?
- Basic understanding questions
- What does the user see?
- What do the input and output stream look like? interaction with other components.
- How does the each part behave?
- Edge cases!!!
- Basic understanding questions
- How to remember what you understand? Document!
- Mark/comment
- Charts & diagrams
- Edge cases table with “Scenario and handling”
Output: Specification Document
Solve
Why spend time on planning a solution?
- No reinventing the wheel
- Write compatible code
- Not waste time on implementing sub-optimal solution
- Not find later that the solution doesn’t work
Define technically
- Scope
- What already exists?
- What needs to be done?
- Context
- Parts of the system that interacts with your code
- Code you can learn from or use
- Coding standards
- Scope
Find Optimal Solution
- Cost
- Performance
- Forward compatibility
- Simplicity
- Security
- Completeness - handles all cases?
- Coding standards & conventions compatibility
Validate applicabliity
- Proof of concept (POC)
- Is the chosen solution applicable?
Output: Design Document
- comment the mockup
- algorithm / pseudo code
- edge cases
Implementing the solution
Should have to move to implement * Mockup commnets * Key info comments * Charts & diagrams * Edge cases + Specification and Design Doc
- What is a good coding session?
- Concentrate solely on solving a specific issue
- Clear image of what you’re trying to accomplish
- Where to start writing code?
- The main flow
Test
Working software to flawless software
- Why test?
- What I did perfectly
- How to test?
- Mercilessly
- How much test?
- As much as it takes for you to be sure there aren’t any bugs
- When to test?
- As soon as possible
Bugs
- Know your toolbox
- Debugger
- IDE
- Document
- What did you try and what results did you get?
- What cluses did you find?
- What do you plan on doing next?
- Everything else that might help
Bug solving stages
- Gather information. Understand the correct behavior
- Understand related functionality
- Find and understand the error message
- See for yourself. Reproduce
- Find the exact point of failure. Narrow down
- Debugging preparations
- Understand the flow of the code
- Reproduce locally
- Refactor to improve readability
- Debug
- Articulate
- Doubt your assumptions
- Test
- What you fixed works correctly
- What did work correctly, still does
STOP: Avoid changing code you don’t understand
Learn
Set yourself goals
SMART Goals
- Specific
- Measurable
- Achievable
- Relevant
- Time-bound
Know your resources
Time - using it wisely
Only what’s relevant
Enjoyment and satisfaction are key
In front of a computer
At work
Not in front of a computer
Technique I - Theory
Reading
- Books
- Blogs
- Other people’s code
Listening
- Podcasts
Watching
- Online courses
Technique II - Practice
Code kata
- Explore the possibilities
Games and challenges
- Engaging and enjoyable
- Code reviews
Hackathons
- Learn by doing
- Enjoyable
Contribute to open source
- Code review
- Reputation
- Satisfaction
Code reviews
- Free Lessons
- At work
Pet Project
- Free to experiment
- Be creative
- Belief in yourself
- Managing lessons
For example, codingame.com
Plan your path
- SMART Goals
- Habits
- Time
- Theoretical learning
- Practical learning
Approaches
- Objectives by timeframes
- “All in”
- Combination of the two
Conclusion
Imagine
- where you want to be in a few years?
- What are the most relevant topics?
- Build a plan & stick to it
Take the next step
Time Management
- Estimate how long the task will take
- Make sure you have what you need as soon as possible
- If there are delays, reflect them to your manager
Code quality
Every craftsman should be proud of his craft
Not only working software, but also well-crafted software
Not only responding to change, but also steadily adding value
Not only individuals and interactions, but also a community of professionals
Not only customer collaboration, but also productive partnerships
Saying “No” to your manager
Sometimes the person who assigns you a task doesn’t understand its full implications
It’s our duty to reflect that to your managers
What the leader says is what counts
The Zone
Prevent interruptions
- Work early/late
- Headphones
- No messages no calls close outlook slack
- No meetings
- Get everything you need
Focus
- Have clear goals
- Devote yourself
Stand out
Ask why
Help your team achieve its goals
Become a guru
Lead
Kaizen(改善)
- Number of bugs per task
- Time estimation accuracy
- Number of comments in code review
- Number of misunderstanding connection between sub tasks
Did you get better on those parameters on your last task, compared with the task before that?
Scale
- Number of bugs per task (or per X programming hours)
- Percentage of deviation from time estimation
- Number of comments in code reviews
- Number of unplanned changes to code you already wrote Reflect Awareness
Last lesson
Compering Candidates Models
A Software develop –> A Professional –> A Human
VISION
SELFLESSNESS