Problem-Solving for Developers - A Beginner's Guide

Fireship
24 Mar 202010:44

Summary

TLDRIn this video, the creator discusses the critical skill of problem-solving in software development, using the real-world scenario of merging over 600 pull requests on GitHub. The script outlines seven concepts to tackle coding problems efficiently, emphasizing the importance of understanding the problem, researching, breaking it down, and using tools like the GitHub API. It also highlights the value of pseudocode, test-driven development, and the iterative process of refining code. The video encourages viewers to practice, seek feedback, and appreciate the continuous learning journey in programming.

Takeaways

  • πŸ˜€ Problem-solving is a critical skill for software developers, often more important than knowing every feature of a programming language.
  • πŸ” Identifying and understanding the nature of the problem is the first step in solving it, which can save time and effort in the long run.
  • πŸ“š Researching and refining the problem by learning from others' solutions is encouraged, as it can provide a solid starting point for your own code.
  • πŸ‘₯ Collaboration and discussion with other developers can lead to innovative solutions and help break down larger problems into smaller, more manageable tasks.
  • πŸ”¬ Utilizing APIs like GitHub's GraphQL API can help automate tasks, such as merging pull requests, which would otherwise be repetitive and time-consuming.
  • πŸ“ Writing pseudocode is an effective way to outline code logic before diving into actual implementation, focusing on structure rather than syntax.
  • πŸ”„ Test-driven development is a recommended practice that can help ensure the quality and reliability of your code by catching issues early.
  • πŸ’‘ Implementing a working prototype quickly, even if imperfect, can boost confidence and provide a solid foundation for further refinement.
  • πŸ› οΈ Continuously improving code through practices like better naming, adding comments, and optimizing algorithms leads to more maintainable and efficient code.
  • 🎼 Problem-solving in programming is like learning a musical instrument; it requires consistent practice and gradual improvement to master.
  • πŸ‘¨β€πŸ« Seeking feedback from more experienced developers can accelerate learning and help you overcome challenges in your coding journey.

Q & A

  • What problem did the speaker create by offering to mail a sticker to anyone who submitted a pull request?

    -The speaker ended up with over 600 pull requests to review and merge, which would have taken a significant amount of time to do manually.

  • What is the speaker's perspective on the importance of programming in solving problems?

    -The speaker views programming as a powerful tool for eliminating manual and repetitive work, which is one of the fundamental problems that software is designed to solve.

  • What does the speaker consider the most important skill of a software developer?

    -The speaker considers problem-solving to be the most important skill of a software developer, as it enables developers to ship code faster and perform better in technical interviews.

  • Why does the speaker emphasize the importance of understanding the problem before jumping into solutions?

    -The speaker emphasizes this because spending time understanding the problem allows for more effective and efficient solutions, and it's a key part of the problem-solving process.

  • What does the speaker suggest doing before starting to code as a way to break down the problem?

    -The speaker suggests researching and refining the problem, discussing the idea with other developers, and using APIs to understand the tools and requirements needed to solve the problem.

  • What is the purpose of writing pseudocode according to the speaker?

    -Writing pseudocode helps to outline the logic of the code without worrying about syntax or implementation details, making it easier to focus on the structure and flow of the solution.

  • Why is exploring the API before implementing the code valuable according to the speaker?

    -Exploring the API beforehand helps to understand the schema and requirements, making the implementation process easier and more efficient.

  • What is the speaker's approach to writing tests for their code?

    -The speaker advocates for test-driven development, writing tests before implementing the code to ensure the validation logic is correct and to prevent regressions in the code.

  • What does the speaker suggest doing after implementing a working prototype of the code?

    -The speaker suggests taking a break, reflecting on the code, and then improving it by enhancing readability, adding comments, removing duplication, and optimizing algorithms.

  • How does the speaker describe the process of becoming good at problem-solving in programming?

    -The speaker describes it as a skill that is developed through practice, repetition, and learning from feedback, similar to learning a musical instrument.

  • What advice does the speaker give for dealing with a difficult problem in coding?

    -The speaker advises taking a break and focusing the mind elsewhere for a short period, as the subconscious can continue working on the problem, often leading to an 'aha' moment.

Outlines

00:00

πŸ˜€ Automating Code Reviews: A Real-World Problem

The speaker introduces a personal challenge of having to manually review and merge over 600 pull requests on GitHub, which sparked the discussion on the importance of problem-solving skills in software development. The video aims to explore seven concepts that can enhance coding problem-solving abilities, emphasizing the shift from learning a programming language to mastering the art of tackling problems efficiently. The example of automating the merging of pull requests using programming is used to illustrate the elimination of manual, repetitive tasks, a fundamental issue software aims to solve.

05:02

πŸ” Problem Identification and Breakdown

The speaker outlines the first step in problem-solving: identifying and understanding the problem at hand. In this case, the issue is the need to merge a large number of pull requests on GitHub without manual intervention. The speaker explains the process of defining the problem with context, explaining why it's an issue, and summarizing the benefits of solving it. The problem is then broken down into smaller, more manageable sub-problems, such as validating each pull request and researching the GitHub API to ensure it can support the required tasks.

10:02

πŸ“ Pseudocoding and API Exploration

The speaker discusses the importance of pseudocoding as a means to outline the logic of the code before diving into syntax and implementation details. This method allows for a focus on naming and readability. The speaker also highlights the value of exploring the GitHub API using tools like Insomnia to understand the schema and ensure it meets the project's requirements. The process includes writing a GraphQL query to retrieve open pull requests and planning a function to validate and merge them, emphasizing the need for clear and concise pseudocode to guide the actual coding process.

πŸ‘¨β€πŸ’» Implementing Code and Testing

The speaker moves on to the implementation phase, advocating for a quick prototype approach to get a working model as soon as possible, even if it's not perfect initially. The focus is on getting all tests to pass and having a functional base to build upon. The video also touches on the optional but recommended practice of test-driven development, where tests are written before the code to ensure the validation logic is correct. The process of writing tests, implementing code to pass those tests, and then refactoring is described, highlighting the benefits of this approach for catching issues and preventing regressions.

πŸ›  Refining and Optimizing Code

After implementing a working prototype, the speaker suggests taking a break to allow the subconscious to work on any lingering issues. Upon returning, the speaker recommends reflecting on the code and looking for areas of improvement, such as enhancing readability, adding comments, removing duplication, and proving the time and space complexity of algorithms. The importance of continuous learning and practice in problem-solving is emphasized, along with seeking feedback from more experienced developers to improve one's skills.

πŸŽ“ Conclusion and Call to Action

In conclusion, the speaker wraps up the video by reiterating the importance of practice and feedback in mastering problem-solving skills. They encourage viewers to share their thoughts in the comments and to consider becoming a pro member at Fireship.io for more in-depth learning. The speaker thanks the audience for watching and looks forward to the next video, ending with a motivational note on the journey of learning to program and the development of the mind's ability to visualize computer system solutions to problems.

Mindmap

Keywords

πŸ’‘Problem Solving

Problem solving is the core theme of the video, defined as the process of identifying, understanding, and figuring out how to overcome obstacles or issues. It is central to the video's narrative as the speaker discusses the importance of this skill in software development. For instance, the speaker describes how they created a problem by offering stickers for pull requests, leading to over 600 code changes that needed to be reviewed and merged, which exemplifies a real-world problem that requires a solution.

πŸ’‘Pull Request

A pull request is a feature in version control systems like GitHub, allowing contributors to submit their code changes for review and inclusion into a project. In the video, the speaker mentions creating a pull request problem by offering stickers to anyone who submitted one, which resulted in a large volume of pull requests that needed to be addressed.

πŸ’‘Code Review

Code review is the process of examining and evaluating code changes made by others to ensure they meet certain standards and are free of errors. The video's speaker highlights the tedious nature of manually reviewing and merging each pull request, which underscores the need for automation to eliminate repetitive work.

πŸ’‘Programming

Programming is the act of writing code to create software or applications. The video emphasizes programming as a means to solve problems, particularly the elimination of manual and repetitive tasks. The speaker uses programming to automate the process of merging pull requests as an example of applying this concept.

πŸ’‘Software Developer

A software developer is a professional who designs, codes, and maintains applications or systems software. The video discusses the most important skill of a software developer, which is problem-solving. The speaker suggests that top companies assess this skill during interviews through whiteboarding problems.

πŸ’‘Whiteboarding

Whiteboarding is a technique used in technical interviews where candidates solve problems or design systems on a whiteboard. It is mentioned in the video as a method for companies to gain insight into a candidate's thought process when approaching a software development problem.

πŸ’‘Context

In the video, context refers to the background or setting in which a problem exists. The speaker uses the context of having over 600 pull requests on GitHub to explain the problem they faced, emphasizing the need to merge these requests efficiently.

πŸ’‘Research

Research in the video is portrayed as a critical step in problem-solving, where the speaker suggests looking into what others have done to solve similar problems. It is exemplified by the speaker's approach to finding a solution for merging pull requests by researching GitHub's API and discussing with other developers.

πŸ’‘API (Application Programming Interface)

An API is a set of rules and protocols for building software applications, allowing different software systems to communicate with each other. The video discusses using GitHub's GraphQL API to automate the process of retrieving and merging pull requests, demonstrating the practical application of APIs in solving coding problems.

πŸ’‘Pseudocode

Pseudocode is an informal high-level description of an algorithm or system's logic in a programming language. The speaker recommends writing pseudocode as a step in the problem-solving process to outline the code's logic before diving into the actual implementation, as seen when planning the solution for merging pull requests.

πŸ’‘Test-Driven Development

Test-driven development (TDD) is a software development approach where tests are written before the actual code. The video advocates for TDD as a way to ensure the reliability of the code, with the speaker suggesting writing tests to validate the logic for merging pull requests.

πŸ’‘Implementation

Implementation refers to the act of putting a plan or design into effect, particularly in the context of coding, turning an idea or design into a working program. The video describes the implementation phase as the step following the creation of pseudocode and tests, where the speaker aims to quickly achieve a working prototype.

πŸ’‘Practice

Practice is the act of performing an activity repeatedly to improve or master it. The video concludes with the speaker emphasizing the importance of continuous practice in honing problem-solving skills in programming, likening it to the development of calluses on a musician's fingers from playing an instrument.

Highlights

The speaker created a problem by offering to mail stickers to anyone who submitted a pull request, resulting in over 600 code changes to review and merge.

Programming is introduced as a solution to eliminate manual, repetitive work, a fundamental problem that software aims to solve.

The importance of problem-solving skills over language-specific features is emphasized for software developers.

Highly experienced developers are characterized by their problem-solving abilities rather than just their knowledge of programming languages.

Problem-solving is identified as a critical skill in technical interviews, where the thought process is valued over memorization of syntax.

The speaker suggests that everyone's problem-solving approach is unique and encourages following one's instincts.

The first step in problem-solving is to identify and understand the nature of the problem, as illustrated by the speaker's experience with pull requests.

The importance of context in defining a problem is highlighted, with the example of optimizing the merging of pull requests on GitHub.

Research and refinement of the problem is suggested as the second step, including discussing ideas with other developers and using APIs.

The use of GitHub's GraphQL API is proposed for retrieving and validating pull requests, breaking down the larger problem into smaller subproblems.

Pseudocode is introduced as a method to outline code logic before implementation, focusing on the structure rather than syntax.

The benefits of writing pseudocode for readability and naming clarity are discussed.

Exploring an API before coding is recommended for understanding its capabilities and limitations.

Test-driven development is introduced as a best practice, emphasizing the value of writing tests before implementing code.

The red-green-refactor process is explained as a method to improve code quality through iterative testing and refinement.

The implementation phase is described as getting a working prototype done quickly, even if it's not perfect initially.

The psychological aspect of solving problems is touched upon, suggesting that taking breaks can lead to solutions through subconscious processing.

Improving a working prototype is easier than writing perfect code from the start, with a list of improvement strategies provided.

The importance of continuous learning and practice in problem-solving is emphasized, likening it to developing calluses on a musician's fingers.

Getting feedback from more experienced developers is suggested as a way to improve one's coding skills and problem-solving abilities.

Transcripts

play00:00

houston we have a problem I created a

play00:03

bit of a problem last week by offering

play00:05

to mail a sticker to anybody who

play00:06

submitted a pull request to this repo

play00:08

and now I'm stuck with over 600 code

play00:10

changes to review and merge I could sit

play00:12

at my computer for a few days and

play00:13

manually merge each one by clicking a

play00:15

button but luckily we have this awesome

play00:16

thing called code that lets us do this

play00:18

thing called programming to solve

play00:20

problems like this in today's video

play00:21

we'll look at the steps involved in what

play00:23

many consider to be the most important

play00:24

skill of a software developer problem

play00:27

solving well look at seven different

play00:28

concepts that can help you solve coding

play00:30

problems quickly and reliably when you

play00:32

become comfortable with these concepts

play00:33

you'll be able to ship code faster and

play00:35

be more comfortable in technical

play00:36

interviews we can use my real-world

play00:38

problem with pull requests as an example

play00:40

what we have here is a very specialized

play00:42

use case but it represents one of the

play00:44

most fundamental problems that software

play00:45

solved the elimination of manual

play00:48

repetitive work many new developers

play00:50

start their programming journey focused

play00:51

on learning a language and that's

play00:52

perfectly fine because obviously you

play00:54

need to know a language to solve

play00:56

problems with code but when you get to

play00:57

know highly experienced developers

play00:59

you'll realize that their skill set is

play01:00

more about problem solving than it is

play01:02

about knowing every single feature of

play01:03

the language that use that's why most of

play01:05

the top companies have you do

play01:06

whiteboarding problems and interviews

play01:08

they want insight into your thought

play01:09

process when you approach a software

play01:11

development problem because that skill

play01:12

is much more difficult to learn than

play01:14

memorizing the syntax of a programming

play01:16

language it takes years of experience

play01:18

and practice to get good at but once you

play01:19

have it down you'll be able to

play01:21

confidently turn your ideas into reality

play01:23

through the magic of code and you won't

play01:24

even need YouTube channels like this for

play01:26

tutorials but in the meantime make sure

play01:28

to subscribe and hit the notification

play01:29

bellow so you don't miss the next

play01:30

sticker giveaway now I want to start

play01:32

things off by saying that everybody's

play01:34

brain is different and there's no one

play01:35

universal right way to solve a problem

play01:37

I'm going to show you techniques that

play01:38

work well for me but follow your

play01:40

instincts and do what works best for you

play01:42

the first step is to identify and

play01:44

understand the nature of the problem if

play01:45

I had an hour to solve a problem I'd

play01:47

spend 55 minutes thinking about the

play01:49

problem and five minutes thinking about

play01:50

solutions in our case we have six

play01:52

hundred pull requests on github and we

play01:54

don't want to have to click this stupid

play01:55

button six hundred times so what we have

play01:57

here is an internal optimization that

play01:59

will hopefully save us time and money

play02:00

but there are many different types of

play02:02

software problems out there you might

play02:04

have a bug and existing software where

play02:05

you have to look through the application

play02:07

stack trace and figure out the root

play02:08

cause or you might have a more abstract

play02:10

problem like the user experience that

play02:12

tends to be such a big problem

play02:13

that many teams break things down into

play02:15

epic stories and themes through the

play02:17

agile approach when defining a problem I

play02:19

first like to start with context we have

play02:21

more than 600 pull requests on github

play02:23

that must be merged then explain why

play02:25

that's an issue it would take hours of

play02:27

mindless code review and button clicking

play02:28

to get that done and lastly summarize

play02:31

why we should solve this problem it can

play02:32

be automated with the github API to save

play02:35

us time and money so now that we've

play02:37

decided this problem is worth our time

play02:38

we can break it down into a bunch of

play02:40

smaller problems I remember when I first

play02:42

got into development I'd often asked

play02:44

myself where do I start I would have a

play02:46

clear vision of what I wanted to build

play02:47

but just no idea how to put things in

play02:49

motion and that brings us to step number

play02:51

two research and refine the problem and

play02:54

how do you do that

play02:55

of course you google it and then click

play02:56

on the first Stack Overflow result that

play02:58

comes up just copy and paste that into

play03:00

your codebase and the problem is solved

play03:07

in all seriousness you should go out and

play03:10

research what other people have done to

play03:11

solve the same problem because you're

play03:13

likely not the first one and it's

play03:15

perfectly okay and typically encouraged

play03:17

to use other people's solutions as a

play03:18

starting point just make sure you

play03:20

confidently understand what the code

play03:21

does before using it now in our case we

play03:24

have a pretty specialized problem not

play03:25

many people have to concurrently merge

play03:27

600 pull requests if possible discuss

play03:29

the idea with other developers I want to

play03:31

give a shout out to Christian wheeler on

play03:33

github who opened an issue that started

play03:35

the discussion about how we can merge

play03:36

all these pull requests he provided a

play03:38

bash script that we can run from the

play03:39

command line but after doing some more

play03:41

research we realized that we would need

play03:43

to validate every single pull request by

play03:45

ensuring that each person who made a

play03:46

submission only modified the one file

play03:48

that they were authorized to modify and

play03:50

that breaks our larger problem into a

play03:52

smaller one of how do we validate each

play03:53

individual pull request

play03:55

luckily github has a really nice graph

play03:57

QL API that we can use to retrieve

play03:59

information from github servers about

play04:01

our account but before I started writing

play04:03

any code I did some research first to

play04:04

make sure the API supported what I

play04:06

wanted to do we can further refine the

play04:08

problem into two smaller objectives

play04:10

retrieve all the pull requests from

play04:11

github and then merge each one

play04:13

individually by researching the API

play04:15

documentation on github I was able to

play04:17

confirm that it supports these

play04:18

requirements now at this point we have

play04:20

our main problem broken down into a few

play04:22

subproblems and we've done research on

play04:24

the tools and api's that can support

play04:25

these requirements in most situations

play04:27

there will be more than one way to solve

play04:29

a problem like in this case I could use

play04:30

the graph QL API or the REST API so make

play04:33

sure to weigh the pros and cons of

play04:35

alternative approaches and now we're

play04:37

ready for step three pseudocode

play04:39

in this step our goal is to write an

play04:40

outline for how we will implement our

play04:42

code you could do this on a white board

play04:43

a piece of paper or directly in your

play04:45

editor the idea is that you focus on the

play04:47

logic of your code without having to

play04:49

worry about the syntax or implementation

play04:51

details if you're very comfortable in a

play04:52

language like in my case JavaScript I

play04:54

recommend writing your pseudocode in

play04:56

that language in this case here I start

play04:58

with a main function and then inside

play04:59

that function I know I'll need a graph

play05:01

QL client I'm not sure where I'll get it

play05:03

so for now I'm just using this as a

play05:05

placeholder and I know it's going to

play05:06

need an auth token to authenticate with

play05:08

the github API from there I'll need to

play05:10

retrieve all the open pull requests

play05:12

using a graph QL query and then I'll

play05:14

write a function to validate each one

play05:16

before emerging it in the function body

play05:17

I'll add some comments about the

play05:19

validations that we want

play05:20

run inside this function they say there

play05:22

are only two hard things in programming

play05:23

cache and validation and naming things

play05:25

an added benefit of writing pseudocode

play05:27

is that you can focus on naming things

play05:29

before your code gets filled up with a

play05:31

bunch of other syntax so it's a great

play05:32

way to increase your code readability

play05:34

then from there we'll set up a for loop

play05:36

and if the pull request is valid then

play05:38

we'll go ahead and merge it with a graph

play05:40

QL mutation and now we have a general

play05:42

idea of how we'll implement our code now

play05:44

because we're working with an API it's

play05:46

also very valuable to explore that API

play05:48

before you dive into it to do that I'm

play05:50

using an app called insomnia that allows

play05:52

me to make requests to the API before I

play05:54

actually implement the code in

play05:55

JavaScript graph QL makes this

play05:57

especially nice because we can see the

play05:59

entire schema of the API without ever

play06:01

having to leave this app I have an

play06:02

entire video dedicated to graph QL if

play06:04

you want to learn more about it but the

play06:06

code itself is pretty self describing

play06:07

our query first makes a reference to the

play06:09

git repo and then we fetch ten pull

play06:11

requests that have a state of open and

play06:13

then we grab the fields that we know

play06:14

we'll need in our algorithm like the

play06:16

changed files the author and so on but

play06:18

the bottom line here is that

play06:19

understanding the API will make it much

play06:21

easier to implement the solution when we

play06:23

get to the code and now we're ready for

play06:24

the next step which is optional but

play06:26

highly recommended test-driven

play06:27

development if you're building a

play06:29

critical feature that your business

play06:30

depends on you should test it and yet

play06:32

another skill of an experienced

play06:33

developer is understanding what test

play06:35

will be valuable for that feature and

play06:37

really the only way to get good at that

play06:38

is to start writing tests and see where

play06:40

they add value to your codebase in this

play06:42

example I think a valuable test would be

play06:44

one that checks our validation logic to

play06:46

ensure that the username that requested

play06:48

a sticker is the same as the username

play06:49

that made the pull request the basic

play06:51

process looks like this we start by

play06:53

writing a test that describes what we're

play06:55

actually testing then we execute our

play06:57

code using some mock data and lastly if

play07:00

we write an expectation expecting the

play07:01

return value of that code to be a

play07:03

certain shape in this case it should be

play07:05

the value of true from here we could

play07:07

expand on this by adding additional test

play07:08

cases with more mock data and we can

play07:10

keep doing this until we're confident

play07:12

that our code can handle any situation

play07:13

that we throw at it but one thing you

play07:15

might have noticed is that we're writing

play07:16

this test before we've written or

play07:18

implemented any actual code why would we

play07:20

do that

play07:21

it's not always practical but writing

play07:22

your test before you write your code can

play07:24

be extremely valuable because it takes

play07:25

you through the red green refactor

play07:27

process you start by writing a failing

play07:29

test that forces you to think about what

play07:31

you're trying to do then you figure out

play07:32

how to do that thing by

play07:34

implementing some code that makes the

play07:35

test pass and from that point you can

play07:37

reflect on what you've done and try to

play07:39

simplify or optimize your code when you

play07:41

write good specs they'll be able to

play07:42

catch issues in your code much quicker

play07:44

than you can manually debug them and

play07:46

they also help prevent regressions in

play07:47

your code when you go back to refactor

play07:49

things later on and now we're ready to

play07:51

move on to the easy part the

play07:52

implementation details now personally

play07:54

when I go to implement code I try to get

play07:56

it done as quickly as possible or in

play07:58

other words have all my tests passing

play08:00

and have a working prototype in the

play08:01

least amount of time possible even if

play08:03

the code is not perfect and the reason

play08:05

for that is psychological solving a big

play08:07

problem is a collection of small steps

play08:08

and when you try to perfect every small

play08:10

step it takes a really long time to get

play08:12

to the finish line and that can be

play08:14

really discouraging

play08:14

there's nothing worse for a developer

play08:16

than to work on a project for weeks at a

play08:18

time only to have the project cancelled

play08:19

for one reason or another personally I

play08:21

like to rush to implement my initial

play08:23

code like I'm doing a hackathon when I

play08:25

get to a full working prototype I now

play08:26

have confidence that this problem can be

play08:28

solved and now it's time to relax get a

play08:30

good night's sleep and then reflect on

play08:32

the code in fact here's a little pro tip

play08:34

that I've learned over the years when

play08:35

you find yourself banging your head

play08:36

against the wall in a small problem for

play08:38

hours just take a break and focus your

play08:40

mind somewhere else for 15 minutes when

play08:42

you come back you might magically solve

play08:43

that problem in five minutes that might

play08:45

sound silly or just too simple but Isaac

play08:47

Asimov actually explains that it's your

play08:49

subconscious still solving the problem

play08:51

while your conscious mind is doing

play08:52

something else and that's why people

play08:54

often have aha moments right before they

play08:55

go to sleep or in the shower now that we

play08:58

have a full working prototype let's take

play08:59

some time to reflect on it there are

play09:01

many things you can look forward to

play09:02

improve your code so here's a short list

play09:03

improve readability by naming things

play09:06

better add comments remove duplication

play09:08

and prove the time and space complexity

play09:10

of your algorithms add caching to reduce

play09:12

cloud computing costs and improve your

play09:14

air handling and so on and so on the

play09:16

bottom line is that it's much easier to

play09:18

improve a working piece of code than it

play09:20

is to write a perfect piece of code on

play09:21

the first go around the last thing you

play09:23

should keep in mind is that problem

play09:25

solving is a skill you never stop

play09:26

learning there's an infinite number of

play09:28

problems to solve each with its own

play09:29

unique and novel challenges and you

play09:31

should take practice seriously practice

play09:34

we're talking about practice man at the

play09:37

end of the day it doesn't matter which

play09:38

programming language philosophy or

play09:40

framework you use to solve the problem

play09:42

the only thing that does matter is that

play09:43

you solve a problem in my opinion the

play09:45

best way to get good at this skill is to

play09:47

it's just like a musical instrument

play09:48

you're not going to pick it up and start

play09:50

making music right away you have to

play09:52

spend a huge amount of time practicing

play09:53

and pushing yourself to overcome new

play09:55

challenges when you learn to play the

play09:56

guitar your fingers develop calluses

play09:58

which build up over months of painful

play10:00

plane when you learn how to program your

play10:02

mind develops the ability to look at a

play10:03

problem and visualize how a computer

play10:05

system can solve that problem to become

play10:07

really good at anything you have to

play10:08

practice and repeat practice and repeat

play10:10

until the technique becomes intuitive

play10:12

and lastly get feedback from other

play10:14

developers especially developers that

play10:16

are more experienced than you it's easy

play10:17

to feel self-conscious about your code

play10:19

especially when you really care about it

play10:20

but the more you do this the faster your

play10:22

what the folks per minute will decrease

play10:23

I'm gonna go ahead and wrap things up

play10:25

there if you have things you want to add

play10:26

to this video make sure to leave them in

play10:28

the comments and if you want to build

play10:29

entire apps with me consider becoming a

play10:31

pro member at fire ship IO thanks for

play10:33

watching and I will see you in the next

play10:35

one

play10:37

[Music]

Rate This
β˜…
β˜…
β˜…
β˜…
β˜…

5.0 / 5 (0 votes)

Related Tags
Problem SolvingSoftware DevelopmentGitHub APIPull RequestsAutomationTechnical InterviewCode ReviewProgramming SkillOptimizationDeveloper Tips