..

How to Become a Senior Developer

지난 달에 들은 Udemy의 How to Become a Senior Developer - Beyond coding skills를 정리해 본다.

To boost your productivity

회사에서 새로운 기술을 “깊이 있게” 익히기는 쉽지 않다. 구글링한 코드를 복사해서 발등에 떨어진 문제를 해결하고는 머리 속에서 지워 버리는 경우도 흔하다. 캘린더에 일정 시간을 블로킹해서 온라인 코스로 새로운 기술을 익히는 것이 장기적으로 생산성을 높이는데 도움이 된다. 반복적인 일은 자동화할 방법을 찾는다.

  1. Use shortcuts and automate
  2. 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!!!
  • 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
  • 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

  1. Estimate how long the task will take
  2. Make sure you have what you need as soon as possible
  3. 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

  1. Ask why

  2. Help your team achieve its goals

  3. Become a guru

  4. Lead

  5. 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