All language subtitles for 006 How to Think Like a Developer_ Become a Problem Solver!

af Afrikaans
sq Albanian
am Amharic
ar Arabic Download
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:01,321 --> 00:00:02,370 In this lecture, 2 00:00:02,370 --> 00:00:05,500 we're gonna talk about solving problems. 3 00:00:05,500 --> 00:00:08,630 Solving problems is one of the most important things 4 00:00:08,630 --> 00:00:10,320 in programming. 5 00:00:10,320 --> 00:00:13,760 So if your goal is to become a great programmer, 6 00:00:13,760 --> 00:00:17,363 you need to learn how to deal with problems effectively. 7 00:00:18,260 --> 00:00:21,050 So in this video, I will show you how to think 8 00:00:21,050 --> 00:00:23,690 as a developer by solving problems, 9 00:00:23,690 --> 00:00:26,583 using a simple four step framework. 10 00:00:27,900 --> 00:00:31,430 And let's use our friend John again. 11 00:00:31,430 --> 00:00:34,970 So, after some time John can code now, 12 00:00:34,970 --> 00:00:37,700 he is almost job ready at this point, 13 00:00:37,700 --> 00:00:41,940 but he still needs to work on his problem solving skills. 14 00:00:41,940 --> 00:00:45,310 And in programming, when we say solving problems 15 00:00:45,310 --> 00:00:49,240 we mean a real problem that needs a real solution. 16 00:00:49,240 --> 00:00:53,060 For example, in an array or GPS coordinates, 17 00:00:53,060 --> 00:00:55,670 find the two closest to points. 18 00:00:55,670 --> 00:00:59,180 And this problem is not straight forward, right? 19 00:00:59,180 --> 00:01:02,760 There are a lot of steps involved in solving this. 20 00:01:02,760 --> 00:01:06,170 And so we need a way to effectively solve problems 21 00:01:06,170 --> 00:01:10,440 like this one, or even way more complex ones. 22 00:01:10,440 --> 00:01:14,650 So problem solving does not mean to fix coding mistakes 23 00:01:14,650 --> 00:01:16,660 or bucks, all right? 24 00:01:16,660 --> 00:01:19,720 Anyway, whenever John encounters a problem 25 00:01:19,720 --> 00:01:21,320 that he needs to solve, 26 00:01:21,320 --> 00:01:25,720 he usually just jumps at the problem without much thinking. 27 00:01:25,720 --> 00:01:29,860 He also implements his solutions in an unstructured way 28 00:01:29,860 --> 00:01:32,460 without much of a logical approach. 29 00:01:32,460 --> 00:01:34,360 This makes him stressed out 30 00:01:34,360 --> 00:01:37,660 when things don't work right away. 31 00:01:37,660 --> 00:01:39,510 Another problem that John has, 32 00:01:39,510 --> 00:01:42,180 is that he is too proud to research 33 00:01:42,180 --> 00:01:46,390 when he doesn't know how to come up with his own solution. 34 00:01:46,390 --> 00:01:49,830 So, all of this is not effective at all, 35 00:01:49,830 --> 00:01:52,900 and makes John waste a lot of time. 36 00:01:52,900 --> 00:01:56,380 Now, the first fix to this is to always stay calm 37 00:01:56,380 --> 00:02:00,130 and slow down and not just jump at a solution 38 00:02:00,130 --> 00:02:01,723 without having a plan. 39 00:02:02,600 --> 00:02:04,830 Also, when solving problems, 40 00:02:04,830 --> 00:02:06,500 you need to be in a mindset 41 00:02:06,500 --> 00:02:09,950 of taking a logical and rational approach, 42 00:02:09,950 --> 00:02:14,500 after all programming is just logic, all right? 43 00:02:14,500 --> 00:02:17,130 Then when you are in the right mindset, 44 00:02:17,130 --> 00:02:19,430 just use my four step framework 45 00:02:19,430 --> 00:02:21,163 to solve the problem at hand. 46 00:02:22,140 --> 00:02:24,180 And the first step of the framework 47 00:02:24,180 --> 00:02:28,240 is to make sure that you 100% understand the problem. 48 00:02:28,240 --> 00:02:32,500 Step back and take a high-level look at the big picture. 49 00:02:32,500 --> 00:02:34,850 And the most important part of the step 50 00:02:34,850 --> 00:02:37,080 is to ask the right questions 51 00:02:37,080 --> 00:02:40,870 in order to get a clear picture of the whole problem. 52 00:02:40,870 --> 00:02:43,140 And the best way of understanding this, 53 00:02:43,140 --> 00:02:46,193 is probably to look at an example together here. 54 00:02:47,200 --> 00:02:49,940 So let's say you are working at some company 55 00:02:49,940 --> 00:02:51,330 on some project, 56 00:02:51,330 --> 00:02:54,167 and then your project manager comes and tells you, 57 00:02:54,167 --> 00:02:56,607 "We need a function that reverses, 58 00:02:56,607 --> 00:02:59,510 "whatever we pass into it." 59 00:02:59,510 --> 00:03:01,990 And that's all you know about the problem, 60 00:03:01,990 --> 00:03:04,530 but do you understand it 100%? 61 00:03:04,530 --> 00:03:07,260 Well, probably not, right? 62 00:03:07,260 --> 00:03:09,240 I know that I don't. 63 00:03:09,240 --> 00:03:13,470 So let's ask the right questions to get there. 64 00:03:13,470 --> 00:03:15,010 First we can ask, 65 00:03:15,010 --> 00:03:18,540 what does whatever actually mean in this context? 66 00:03:18,540 --> 00:03:21,810 So, what should actually be reversed here? 67 00:03:21,810 --> 00:03:24,220 Well, and if we think about it, 68 00:03:24,220 --> 00:03:26,860 it only makes sense to reverse strings, 69 00:03:26,860 --> 00:03:29,130 numbers, and arrays. 70 00:03:29,130 --> 00:03:31,930 Objects don't have a well-defined order, 71 00:03:31,930 --> 00:03:33,960 so we can't reverse them. 72 00:03:33,960 --> 00:03:37,040 We're also not gonna reverse like undefined, 73 00:03:37,040 --> 00:03:39,543 or null or a Boolean, right? 74 00:03:40,620 --> 00:03:43,200 Then after we have that figured out, 75 00:03:43,200 --> 00:03:46,740 we can ask, what should we do if something else 76 00:03:46,740 --> 00:03:51,160 is passed in that is no string, number, or array? 77 00:03:51,160 --> 00:03:53,270 How are we gonna handle that? 78 00:03:53,270 --> 00:03:55,120 It's also relevant to ask, 79 00:03:55,120 --> 00:03:58,360 what exactly should be returned from the function? 80 00:03:58,360 --> 00:04:01,260 For example, should it always be a string, 81 00:04:01,260 --> 00:04:05,160 or should the tie be the same as was passed in? 82 00:04:05,160 --> 00:04:07,900 Well, in this case, probably we should always 83 00:04:07,900 --> 00:04:11,820 just returned the exact same type that was passed in. 84 00:04:11,820 --> 00:04:15,940 Also we can start to ask more solution oriented questions, 85 00:04:15,940 --> 00:04:19,880 like how to recognize whether the argument is a number, 86 00:04:19,880 --> 00:04:22,280 a string, or an array? 87 00:04:22,280 --> 00:04:24,750 Or how to actually it reverse a number, 88 00:04:24,750 --> 00:04:27,230 a string and an array. 89 00:04:27,230 --> 00:04:29,510 So these are just some of the questions 90 00:04:29,510 --> 00:04:31,320 that we can ask here. 91 00:04:31,320 --> 00:04:32,710 I'm sure there are more, 92 00:04:32,710 --> 00:04:34,460 but this should already give us 93 00:04:34,460 --> 00:04:37,993 a way more clear picture of this problem. 94 00:04:38,920 --> 00:04:41,600 Now, right now, at the beginning of your journey, 95 00:04:41,600 --> 00:04:43,610 you were probably not yet know, 96 00:04:43,610 --> 00:04:47,520 what the right questions actually are, but don't worry, 97 00:04:47,520 --> 00:04:50,643 this will come with time and practice I promise. 98 00:04:52,270 --> 00:04:55,360 The next step is probably the most important one, 99 00:04:55,360 --> 00:04:58,820 which is the divide and conquer strategy. 100 00:04:58,820 --> 00:05:02,130 Divide and conquer means to break up the big problem 101 00:05:02,130 --> 00:05:05,300 into as many small problems as possible 102 00:05:05,300 --> 00:05:09,940 because these small problems are then a lot easier to solve. 103 00:05:09,940 --> 00:05:13,180 And this also ties in with the previous step 104 00:05:13,180 --> 00:05:16,470 because by dividing the problem into sub problems, 105 00:05:16,470 --> 00:05:18,880 you also take the big problem apart, 106 00:05:18,880 --> 00:05:21,690 until you understand it exactly. 107 00:05:21,690 --> 00:05:23,730 So based on the previous step, 108 00:05:23,730 --> 00:05:26,130 if we wanted to break down this problem, 109 00:05:26,130 --> 00:05:29,500 we could define a couple of sub problems. 110 00:05:29,500 --> 00:05:31,590 First, we need to check if the argument 111 00:05:31,590 --> 00:05:34,840 is a number, a string, or an array. 112 00:05:34,840 --> 00:05:38,930 And this is in fact, a small sub problem, right? 113 00:05:38,930 --> 00:05:40,800 So now, and just solve this one 114 00:05:40,800 --> 00:05:43,650 in isolation and then move on. 115 00:05:43,650 --> 00:05:47,760 The next sub problem is to implement reversing a number, 116 00:05:47,760 --> 00:05:50,360 then implement reversing a string, 117 00:05:50,360 --> 00:05:53,060 and then implement reversing an array, 118 00:05:53,060 --> 00:05:54,610 so that we are ready to deal 119 00:05:54,610 --> 00:05:57,270 whatever is passed into the function. 120 00:05:57,270 --> 00:06:00,120 Finally, we then also need of course 121 00:06:00,120 --> 00:06:03,210 to return the reversed value. 122 00:06:03,210 --> 00:06:05,560 So these are our sub problems, 123 00:06:05,560 --> 00:06:08,770 and they kind of look like a task list 124 00:06:08,770 --> 00:06:11,860 that we now need to go ahead and implement. 125 00:06:11,860 --> 00:06:14,790 And this is great because it makes our work 126 00:06:14,790 --> 00:06:17,000 so much easier now. 127 00:06:17,000 --> 00:06:21,220 Now, sure, this example is a pretty simple problem, 128 00:06:21,220 --> 00:06:23,720 but this strategy works just as well 129 00:06:23,720 --> 00:06:27,340 for bigger and way more complex problems. 130 00:06:27,340 --> 00:06:30,940 In fact, divide and conquer isn't essential method 131 00:06:30,940 --> 00:06:33,790 of problem solving that is also used a lot 132 00:06:33,790 --> 00:06:35,223 outside of programming. 133 00:06:36,120 --> 00:06:39,410 Anyway, with this, we have actually already covered 134 00:06:39,410 --> 00:06:42,810 the two most important steps of the framework. 135 00:06:42,810 --> 00:06:46,060 But now let's say that we actually do not know 136 00:06:46,060 --> 00:06:49,080 how to implement one of these sub problems. 137 00:06:49,080 --> 00:06:52,490 Well, in that case, we should not be afraid 138 00:06:52,490 --> 00:06:55,730 of doing as much research as we have to. 139 00:06:55,730 --> 00:06:58,180 Now, of course, we should always first try 140 00:06:58,180 --> 00:07:01,140 to implement a sub problem on our own 141 00:07:01,140 --> 00:07:04,140 using our own coding abilities. 142 00:07:04,140 --> 00:07:06,140 But if we're constantly hitting a wall, 143 00:07:06,140 --> 00:07:09,700 and cannot move on, then we should waste no more time 144 00:07:09,700 --> 00:07:14,040 and just find out how it works using Google, 145 00:07:14,040 --> 00:07:16,240 or a questions and answers websites 146 00:07:16,240 --> 00:07:21,240 like Stack Overflow, or the MDN JavaScript documentation. 147 00:07:21,440 --> 00:07:24,520 We will see how to use these in the next lecture 148 00:07:24,520 --> 00:07:27,800 when we're gonna work together on a real problem. 149 00:07:27,800 --> 00:07:30,980 And actually researching is a huge part 150 00:07:30,980 --> 00:07:35,240 of a programmer's job, as you will find out very soon. 151 00:07:35,240 --> 00:07:37,630 So you really should not be ashamed 152 00:07:37,630 --> 00:07:40,750 when you don't know enough to solve a certain problem. 153 00:07:40,750 --> 00:07:43,090 Let's just completely normal. 154 00:07:43,090 --> 00:07:46,710 Now, in this case some questions that we could Google are, 155 00:07:46,710 --> 00:07:49,150 how to check if a value is a number, 156 00:07:49,150 --> 00:07:52,430 or an array, or a string in JavaScript. 157 00:07:52,430 --> 00:07:54,950 Or we could Google how to reverse a number, 158 00:07:54,950 --> 00:07:58,920 or a string, or an array in JavaScript, okay? 159 00:07:58,920 --> 00:08:01,650 And again, we will do this in the next lecture 160 00:08:01,650 --> 00:08:03,363 on a real problem together. 161 00:08:04,380 --> 00:08:08,210 Finally, in case we are trying to solve bigger problems 162 00:08:08,210 --> 00:08:10,850 we should put all the previous steps together 163 00:08:10,850 --> 00:08:13,860 and write some so-called pseudo-code 164 00:08:13,860 --> 00:08:16,410 before writing the actual code. 165 00:08:16,410 --> 00:08:20,050 And pseudo-code is simply an informal description 166 00:08:20,050 --> 00:08:23,020 of the actual code that we're gonna write. 167 00:08:23,020 --> 00:08:27,290 So it's like code for humans to understand not computers. 168 00:08:27,290 --> 00:08:29,390 For our example, the pseudo-code 169 00:08:29,390 --> 00:08:32,140 might look something like this. 170 00:08:32,140 --> 00:08:36,310 So you see we use some structures of a programming language, 171 00:08:36,310 --> 00:08:40,702 but this is clearly not JavaScript, right? 172 00:08:40,702 --> 00:08:42,540 And there are no real rules 173 00:08:42,540 --> 00:08:44,780 on how to write pseudo-code either, 174 00:08:44,780 --> 00:08:47,950 you just write so that you understand it yourself, 175 00:08:47,950 --> 00:08:50,260 or other people on your team. 176 00:08:50,260 --> 00:08:52,430 So in this example, we just start 177 00:08:52,430 --> 00:08:55,180 by naming the function as a reverse, 178 00:08:55,180 --> 00:08:58,280 and then we basically pass in a value. 179 00:08:58,280 --> 00:09:01,040 Then we say, that if the type of the value 180 00:09:01,040 --> 00:09:03,890 is not a string and not a number, 181 00:09:03,890 --> 00:09:08,460 and also not an array, then simply return the value back. 182 00:09:08,460 --> 00:09:11,230 And that's because as we defined previously, 183 00:09:11,230 --> 00:09:13,900 we only want dysfunction to work for strings 184 00:09:13,900 --> 00:09:17,010 or for numbers or for a race. 185 00:09:17,010 --> 00:09:18,830 And again, you can clearly see 186 00:09:18,830 --> 00:09:22,920 that this is not any valid JavaScript at all. 187 00:09:22,920 --> 00:09:27,860 But anyway, if the type of the value past this initial test, 188 00:09:27,860 --> 00:09:30,580 then we say if the value is a string, 189 00:09:30,580 --> 00:09:32,260 then reverse the string. 190 00:09:32,260 --> 00:09:35,390 If the value is a number, then reverse the number. 191 00:09:35,390 --> 00:09:38,530 And if the value is an array, 192 00:09:38,530 --> 00:09:40,477 then simply reversed the array. 193 00:09:40,477 --> 00:09:41,460 And then at the end, 194 00:09:41,460 --> 00:09:44,910 we want to return to reversed value, okay? 195 00:09:44,910 --> 00:09:48,010 So this is really more like a list of instructions 196 00:09:48,010 --> 00:09:51,420 that we now could go ahead and actually implement 197 00:09:51,420 --> 00:09:54,080 using the JavaScript language. 198 00:09:54,080 --> 00:09:55,800 Okay, and that's it. 199 00:09:55,800 --> 00:09:58,350 That's the four steps to solve any problem 200 00:09:58,350 --> 00:10:00,600 no matter how big. 201 00:10:00,600 --> 00:10:04,810 And now before I leave you, a final tip I can give you, 202 00:10:04,810 --> 00:10:08,580 is to develop a genuine curiosity and passion 203 00:10:08,580 --> 00:10:11,730 for understanding how things actually work, 204 00:10:11,730 --> 00:10:13,470 not only in programming, 205 00:10:13,470 --> 00:10:16,530 but really in the whole world around you. 206 00:10:16,530 --> 00:10:19,700 For example, the famous scientist Richard Feynman, 207 00:10:19,700 --> 00:10:23,080 was repairing radios when he was just a teenager, 208 00:10:23,080 --> 00:10:27,730 and Elon Musk made his first computer game when he was 12. 209 00:10:27,730 --> 00:10:30,290 And there are many more examples like this, 210 00:10:30,290 --> 00:10:33,490 and all of them became geniuses in their fields 211 00:10:33,490 --> 00:10:36,990 in part because of their genuine curiosity 212 00:10:36,990 --> 00:10:39,253 on how the world around them works. 213 00:10:40,170 --> 00:10:42,500 All right, and with that being said, 214 00:10:42,500 --> 00:10:44,820 let's now go ahead and solve a real problem 215 00:10:44,820 --> 00:10:47,490 in the next lecture using this framework 216 00:10:47,490 --> 00:10:49,160 that we just learned about. 217 00:10:49,160 --> 00:10:50,353 So I'll see you there. 17189

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.