Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Effective Developer

The Effective Developer

Radoslav Stankov

June 21, 2023
Tweet

More Decks by Radoslav Stankov

Other Decks in Technology

Transcript

  1. The Effective
    Developer
    Radoslav Stankov


    View Slide

  2. View Slide

  3. View Slide

  4. View Slide

  5. View Slide

  6. 👋

    View Slide

  7. Radoslav Stankov
    @rstankov

    View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. “It is better to be a good programmer with great
    habits, than a great programmer.”


    - Kent Beck

    View Slide

  14. “Process is automatic decisions for trivial
    questions and framework for making decisions
    for all other questions.”


    - Rado
    What is process

    View Slide

  15. View Slide

  16. View Slide

  17. 1. Focus

    View Slide

  18. View Slide

  19. View Slide

  20. Flow

    View Slide

  21. “Flow state, also known as being in the zone,
    is the mental state of operation in which a
    person performing an activity is fully immersed
    in a feeling of energized focus, full involvement,
    and enjoyment in the process of the activity.”


    - WikipediA
    Flow

    View Slide

  22. View Slide

  23. “Task switching is an executive function that
    involves the ability to shift attention between
    one task and another unconsciously.”


    - WikipediA
    Task switching

    View Slide

  24. 🤔
    you 😅 your 🧠

    View Slide

  25. What's next 🔜

    View Slide

  26. Todoist

    View Slide

  27. Focused Task

    View Slide

  28. Focused Task
    https://github.com/RStankov/FocusedTask

    View Slide

  29. 🙉 Eliminate distractions
    🚫 block websites


    📱 reduce app noti
    fi
    cations


    🤫 do not disturb mode

    View Slide

  30. Manage your energy

    View Slide

  31. “In cognitive psychology, cognitive load refers
    to the used amount of working
    memory resources. ”


    - WikipediA
    Cognitive load

    View Slide

  32. “Ego depletion refers to the idea that self-
    control or willpower draws upon a limited pool
    of mental resources that can be used up.”


    - WikipediA
    Ego depletion

    View Slide

  33. View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. View Slide

  39. “Process is automatic decisions for trivial
    questions and framework for making decisions
    for all other questions.”


    - Rado
    What is process

    View Slide

  40. “Process is automatic decisions for trivial
    questions and framework for making decisions
    for all other questions.”


    - Rado
    What is process

    View Slide

  41. 📆 Routine


    ⏲ Reminders
    📋 Checklist


    🗂 Templates


    🤖 Automations

    View Slide

  42. Prepare the clothes you are going to wear
    tomorrow the evening before.
    💡Life Hack

    View Slide

  43. Capture knowledge

    View Slide

  44. “Our head is for creating ideas, not storing them”


    - David Allen, author GTD

    View Slide

  45. Rado's Head Bear Todoist
    Idea 💡 Store Next action

    View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. 💡Split task into parts

    View Slide

  50. View Slide

  51. done
    todo
    won't do
    in progress

    View Slide

  52. https://blog.rstankov.com/how-i-plan-and-execute-features/

    View Slide

  53. 2. Effective

    View Slide

  54. View Slide

  55. Know your craft

    View Slide

  56. View Slide

  57. View Slide

  58. First principles and fundaments

    View Slide

  59. First principles and fundaments
    TypeScript
    Node
    Browser
    React
    Next
    JavaScript

    View Slide

  60. View Slide

  61. https://www.youtube.com/watch?v=JxAXlJEmNMg&list=PL7664379246A246CB
    Crockford on JavaScript

    View Slide

  62. View Slide

  63. 🔎 Read the source code

    View Slide

  64. ⚛ 🪝 React Hooks

    View Slide

  65. export function useEffect(
    create: () => (() => void) | void,
    deps: Array | void | null,
    ): void {
    const dispatcher = resolveDispatcher();
    return dispatcher.useEffect(create, deps);
    }
    https://github.com/facebook/react/blob/main/packages/react/src/ReactHooks.js

    View Slide

  66. https://github.com/facebook/react/blob/main/packages/react-reconciler/src/ReactFiberHooks.new.js
    🤔
    const HooksDispatcherOnMount: Dispatcher = {
    // ...
    useRef: mountRef,
    // ...
    };
    const HooksDispatcherOnUpdate: Dispatcher = {
    // ...
    useRef: updateRef,
    // ...
    };
    const HooksDispatcherOnRerender: Dispatcher = {
    // ...
    useRef: updateRef,
    // ...
    };
    const ContextOnlyDispatcher: Dispatcher = {
    // ...
    useRef: throwInvalidHookError,
    // ...
    };

    View Slide

  67. https://github.com/facebook/react/blob/main/packages/react-reconciler/src/ReactFiberHooks.new.js
    function updateRef(initialValue: T): {current: T} {
    const hook = updateWorkInProgressHook();
    return hook.memoizedState;
    }

    View Slide

  68. function updateWorkInProgressHook(): Hook {
    // This function is used both for updates and for re-renders triggered by a
    // render phase update. It assumes there is either a current hook we can
    // clone, or a work-in-progress hook from a previous render pass that we can
    // use as a base. When we reach the end of the base list, we must switch to
    // the dispatcher used for mounts.
    let nextCurrentHook: null | Hook;
    if (currentHook === null) {
    const current = currentlyRenderingFiber.alternate;
    if (current !== null) {
    nextCurrentHook = current.memoizedState;
    } else {
    nextCurrentHook = null;
    }
    } else {
    nextCurrentHook = currentHook.next;
    }
    let nextWorkInProgressHook: null | Hook;
    if (workInProgressHook === null) {
    nextWorkInProgressHook = currentlyRenderingFiber.memoizedState;
    } else {
    nextWorkInProgressHook = workInProgressHook.next;
    }
    if (nextWorkInProgressHook !== null) {
    // There's already a work-in-progress. Reuse it.

    View Slide

  69. function updateWorkInProgressHook(): Hook {
    // This function is used both for updates and for re-renders triggered by a
    // render phase update. It assumes there is either a current hook we can
    // clone, or a work-in-progress hook from a previous render pass that we can
    // use as a base. When we reach the end of the base list, we must switch to
    // the dispatcher used for mounts.
    let nextCurrentHook: null | Hook;
    if (currentHook === null) {
    const current = currentlyRenderingFiber.alternate;
    if (current !== null) {
    nextCurrentHook = current.memoizedState;
    } else {
    nextCurrentHook = null;
    }
    } else {
    nextCurrentHook = currentHook.next;
    }
    let nextWorkInProgressHook: null | Hook;
    if (workInProgressHook === null) {
    nextWorkInProgressHook = currentlyRenderingFiber.memoizedState;
    } else {
    nextWorkInProgressHook = workInProgressHook.next;
    }
    if (nextWorkInProgressHook !== null) {
    // There's already a work-in-progress. Reuse it.

    View Slide

  70. Know your tools

    View Slide

  71. 🏃 Run a test


    🔎 Search in codebase


    ✈ Jump across
    fi
    les


    🧱 Refactoring - moving code around


    📚 Search documentation


    💻 Writing new code
    ⛩ Common operations

    View Slide

  72. View Slide

  73. View Slide

  74. 😍

    View Slide

  75. 😍

    View Slide

  76. View Slide

  77. Alfred + Dash

    View Slide

  78. View Slide

  79. View Slide

  80. https://blog.rstankov.com/my-alfred-setup/

    View Slide

  81. ChatGPT
    Github Copilot

    View Slide

  82. Don't blame me!


    Github Copilot did it.

    View Slide

  83. View Slide

  84. ...more tools

    View Slide

  85. View Slide

  86. View Slide

  87. View Slide

  88. View Slide

  89. 3. Goals

    View Slide

  90. Procrastination

    View Slide

  91. 🚫 Fear of Failure / Perfectionism


    🤫 Lack of Motivation / Feeling Overwhelmed



    📱 Poor Time Management Skills
    🙉 Procrastination

    View Slide

  92. “Reading is good, action is better.”


    - Eric Ries ( Lean Startup)

    View Slide

  93. 😎 Personal Goals


    💻 Work Goals


    🛹 Baseline

    View Slide

  94. 😎 Personal Goals


    ✈ Travel to Japan 🇯🇵


    🏃 Weight 90kg

    💻 Work Goals


    📈 Ship claiming of Product Hub


    📚 Learn PostgreSQL internals

    🛹 Baseline


    🚶 10k steps per day


    🏋 Train 3 days a week


    🛌 Sleep 8 hours a night

    View Slide

  95. 🎂 Yearly



    🍰 Monthly



    🍡 Weekly



    🍭 Daily

    View Slide

  96. 1⃣ Top priority 🥇


    2⃣ Second priority 🥈


    3⃣ Third priority 🥉


    ⏺ Something else

    ⏺ Something else

    ⏺ Something else
    🥇 Priority

    View Slide

  97. 1⃣ Top priority 🥇


    2⃣ Second priority 🥈


    3⃣ Third priority 🥉


    ⏺ Something else

    ⏺ Something else

    ⏺ Something else
    🥇 Priority

    View Slide

  98. View Slide

  99. 1⃣ Status of goals


    2⃣ What went well?


    3⃣ What could have been done better?


    4⃣ What are the goals and plans for next week?
    👨🏫 Weekly Review

    View Slide

  100. Recap

    View Slide

  101. “Every productivity system stops working
    eventually and there’s nothing you can do about it”


    - Someone on the internet

    View Slide

  102. “Think about your own work
    fl
    ows and improve
    them one step of the time💡”


    - Rado

    View Slide

  103. View Slide

  104. Books

    View Slide

  105. Pragmatic
    Programmer
    Getting
    Things Done
    Checklist
    Manifesto
    Soft Skills
    Peak
    Performance
    Four Thousand
    Weeks

    View Slide

  106. View Slide

  107. View Slide

  108. Thanks 😎

    View Slide

  109. https://speakerdeck.com/rstankov

    View Slide