WEBVTT

1
00:00:00.830 --> 00:00:03.240
<v Jonas>So we talked about problem solving,</v>

2
00:00:03.240 --> 00:00:07.720
which is a very important skill of any software developer.

3
00:00:07.720 --> 00:00:09.530
Now, another extremely important

4
00:00:09.530 --> 00:00:12.070
developer skill is debugging,

5
00:00:12.070 --> 00:00:15.710
which means to find and fix errors.

6
00:00:15.710 --> 00:00:19.010
So let's finish this section by talking about debugging

7
00:00:19.010 --> 00:00:22.043
to make you ready for the rest of the course ahead.

8
00:00:23.490 --> 00:00:26.270
So first of all, as you might already know,

9
00:00:26.270 --> 00:00:29.790
a software bug is a defect or a problem

10
00:00:29.790 --> 00:00:32.110
in a computer program.

11
00:00:32.110 --> 00:00:36.270
So basically, any unexpected or unintended behavior

12
00:00:36.270 --> 00:00:39.340
of a program is called a bug.

13
00:00:39.340 --> 00:00:43.370
And the actual term bug was coined in the 1940s

14
00:00:43.370 --> 00:00:46.580
when this real bug was causing an error

15
00:00:46.580 --> 00:00:47.923
in Harvard's computer.

16
00:00:48.780 --> 00:00:52.150
Now, there are many reasons for bugs in programs,

17
00:00:52.150 --> 00:00:54.550
but what matters here is that bugs

18
00:00:54.550 --> 00:00:58.640
are a completely normal part of software development,

19
00:00:58.640 --> 00:01:00.280
because we are humans,

20
00:01:00.280 --> 00:01:02.950
and humans make mistakes.

21
00:01:02.950 --> 00:01:06.870
In fact, every complex application contains bugs,

22
00:01:06.870 --> 00:01:09.940
which sometimes go undiscovered for years

23
00:01:09.940 --> 00:01:13.790
and can cause security holes or other problems.

24
00:01:13.790 --> 00:01:17.300
So really, don't feel bad if you introduce bugs

25
00:01:17.300 --> 00:01:18.560
in your own count.

26
00:01:18.560 --> 00:01:21.893
We all do it, even the most expert programmers.

27
00:01:22.780 --> 00:01:27.300
Now luckily, not all bugs cause huge security holes.

28
00:01:27.300 --> 00:01:30.090
In fact, many bugs are quite small

29
00:01:30.090 --> 00:01:32.200
and simple to discover.

30
00:01:32.200 --> 00:01:34.600
So let's see a simple example.

31
00:01:34.600 --> 00:01:37.240
Remember in our previous example,

32
00:01:37.240 --> 00:01:40.030
the goal was to reverse whatever was passed

33
00:01:40.030 --> 00:01:41.690
into the function.

34
00:01:41.690 --> 00:01:45.170
So let's say we finished writing the reverse function,

35
00:01:45.170 --> 00:01:49.400
and call it with this array and get this result.

36
00:01:49.400 --> 00:01:52.840
But clearly something is wrong here, right?

37
00:01:52.840 --> 00:01:55.970
The return value looks scrambled,

38
00:01:55.970 --> 00:01:58.370
but not reversed at all.

39
00:01:58.370 --> 00:02:01.310
So this means that we must have a bug somewhere

40
00:02:01.310 --> 00:02:04.490
in our reverse function, okay?

41
00:02:04.490 --> 00:02:07.840
To fix this, we use a process called debugging,

42
00:02:07.840 --> 00:02:10.800
which is essentially finding, fixing,

43
00:02:10.800 --> 00:02:12.760
and then preventing bugs.

44
00:02:12.760 --> 00:02:14.453
So let's see how that works.

45
00:02:15.690 --> 00:02:19.160
So the first step is to actually become aware

46
00:02:19.160 --> 00:02:21.310
that there is some kind of bug,

47
00:02:21.310 --> 00:02:24.220
because as I said, in a large application,

48
00:02:24.220 --> 00:02:28.130
bugs can actually go undiscovered for years.

49
00:02:28.130 --> 00:02:30.450
Now, discovering bugs usually happens

50
00:02:30.450 --> 00:02:34.580
during development using automated testing software

51
00:02:34.580 --> 00:02:37.570
or user reports during production.

52
00:02:37.570 --> 00:02:40.500
And bugs that are identified during production

53
00:02:40.500 --> 00:02:42.080
are the worst bugs,

54
00:02:42.080 --> 00:02:44.620
because it means that they went undiscovered

55
00:02:44.620 --> 00:02:46.830
during development and are now affecting

56
00:02:46.830 --> 00:02:49.730
real users of our application.

57
00:02:49.730 --> 00:02:51.900
So that's why it's really important

58
00:02:51.900 --> 00:02:53.950
to identify bugs early,

59
00:02:53.950 --> 00:02:57.150
for example, using automated tests.

60
00:02:57.150 --> 00:02:59.460
Now, while identifying the bug,

61
00:02:59.460 --> 00:03:02.150
sometimes we also need to take into consideration

62
00:03:02.150 --> 00:03:04.850
the context in which the bug happened.

63
00:03:04.850 --> 00:03:07.570
For example, certain bugs might only happen

64
00:03:07.570 --> 00:03:08.960
in a certain browser,

65
00:03:08.960 --> 00:03:11.983
or only for certain users, for some reason.

66
00:03:12.930 --> 00:03:15.660
Next, once we know there is a bug,

67
00:03:15.660 --> 00:03:19.290
we need to go into our code and find the bug.

68
00:03:19.290 --> 00:03:22.650
We need to isolate where exactly it's happening,

69
00:03:22.650 --> 00:03:25.310
and we can do that using the developer console

70
00:03:25.310 --> 00:03:26.363
that we already know.

71
00:03:27.210 --> 00:03:29.490
However, that only works for small bugs

72
00:03:29.490 --> 00:03:32.430
and simple code where we have a good idea

73
00:03:32.430 --> 00:03:35.010
where the bug might be located.

74
00:03:35.010 --> 00:03:36.800
But if the code is more complex

75
00:03:36.800 --> 00:03:40.060
and we have no idea where the bug might be,

76
00:03:40.060 --> 00:03:42.920
then we need to use a debugger software.

77
00:03:42.920 --> 00:03:45.570
And I will show you how that works in the next video

78
00:03:45.570 --> 00:03:47.830
because it's really important for developer

79
00:03:47.830 --> 00:03:49.823
to be able to use a debugger.

80
00:03:50.740 --> 00:03:54.270
Anyway, once we know where the bug is located,

81
00:03:54.270 --> 00:03:58.800
we can finally fix it so we can correct the bug.

82
00:03:58.800 --> 00:04:01.790
And this is probably the easiest part.

83
00:04:01.790 --> 00:04:03.960
So essentially, all we need to do

84
00:04:03.960 --> 00:04:08.320
is to replace the existing, so the wrong solution,

85
00:04:08.320 --> 00:04:12.620
with a new correct solution that actually works.

86
00:04:12.620 --> 00:04:15.670
As a final step, we should then prevent this bug

87
00:04:15.670 --> 00:04:19.030
from ever happening again in our code base.

88
00:04:19.030 --> 00:04:21.630
For example, we can search our project

89
00:04:21.630 --> 00:04:24.280
for the same bug in similar code,

90
00:04:24.280 --> 00:04:26.580
like in a similar function.

91
00:04:26.580 --> 00:04:29.250
It's totally possible that we did the same mistake

92
00:04:29.250 --> 00:04:30.900
twice in our code,

93
00:04:30.900 --> 00:04:32.200
and if that's the case,

94
00:04:32.200 --> 00:04:35.010
we must fix the bug everywhere.

95
00:04:35.010 --> 00:04:37.710
A more advanced way of preventing bugs

96
00:04:37.710 --> 00:04:40.980
is to write tests using testing software.

97
00:04:40.980 --> 00:04:43.360
And I might add a bonus section on testing

98
00:04:43.360 --> 00:04:45.530
to the course at some point

99
00:04:45.530 --> 00:04:47.790
because this is actually an important part

100
00:04:47.790 --> 00:04:49.780
of software development.

101
00:04:49.780 --> 00:04:51.610
Okay, and that's it.

102
00:04:51.610 --> 00:04:55.170
That's a broad overview of debugging in programming.

103
00:04:55.170 --> 00:04:57.830
And we really just scratched the surface here,

104
00:04:57.830 --> 00:05:00.640
because you're still at the beginning of the journey.

105
00:05:00.640 --> 00:05:02.653
And so this is just an introduction.

106
00:05:03.510 --> 00:05:06.983
Anyway, let's now fix some bugs in the next video.

