1
00:00:00,000 --> 00:00:02,600
Today's episode of the 
technology on our podcast is 

2
00:00:02,600 --> 00:00:06,600
proudly sponsored by emergence. 
The Journal of business agility.

3
00:00:07,200 --> 00:00:10,200
This quarterly publication 
brings you inspiring stories 

4
00:00:10,200 --> 00:00:12,800
from the most Innovative 
companies and explores the 

5
00:00:12,800 --> 00:00:15,900
themes of the new ways of 
working reclaiming management 

6
00:00:15,900 --> 00:00:19,100
and humanizing business. 
It brings together a curated 

7
00:00:19,100 --> 00:00:22,200
selection of exclusive stories 
by great, thinkers and 

8
00:00:22,200 --> 00:00:25,200
practitioners from around the 
globe that can broaden your 

9
00:00:25,200 --> 00:00:27,400
horizons and Spark. 
Your creativity. 

10
00:00:28,000 --> 00:00:32,600
Each issue is hen Illustrated. 
And contains 100% pure content, 

11
00:00:33,000 --> 00:00:38,000
use the promo code tekhelet eech
leads2results been percent 

12
00:00:38,000 --> 00:00:40,200
discount on your annual 
subscription. 

13
00:00:40,600 --> 00:00:43,800
Visit business agility, dot 
institute's less emergence, to 

14
00:00:43,800 --> 00:00:46,900
get your addition and support 
the publication supporting your 

15
00:00:46,900 --> 00:00:49,300
podcast. 
Here's the link One More Time. 

16
00:00:49,400 --> 00:00:52,400
Business agility, dot Institute,
/ emergence. 

17
00:00:52,800 --> 00:00:58,300
The idea of the Fievel is that 
seriously, good software is not 

18
00:00:58,300 --> 00:01:02,000
too soft for the works. 
That it's not just soft word 

19
00:01:02,000 --> 00:01:05,200
that satisfies its functional 
requirements. 

20
00:01:05,200 --> 00:01:08,400
So it does the right thing but 
it also does it in the right 

21
00:01:08,400 --> 00:01:10,300
way. 
And the first, there's many 

22
00:01:10,300 --> 00:01:15,300
different ways to measure how 
fit and how good your software 

23
00:01:15,300 --> 00:01:17,600
is I think what needs to be more
Focus. 

24
00:01:18,100 --> 00:01:21,800
Both motivation and in some 
Industries or non-functional 

25
00:01:21,800 --> 00:01:26,200
Bolton's things that are not 
immediately visible outside. 

26
00:01:26,300 --> 00:01:29,800
Box are still very important for
the future evolution. 

27
00:01:29,900 --> 00:01:33,000
One of the software or for its 
performance. 

28
00:01:37,900 --> 00:01:40,700
Hey everyone. 
My name is Henry Surya. 

29
00:01:40,700 --> 00:01:44,200
We Robin. 
And you're listening to the 

30
00:01:44,200 --> 00:01:47,700
tekhelet Juno, the show will be 
bringing you the greatest 

31
00:01:47,700 --> 00:01:51,400
technical leaders practitioners 
and thought leaders in the 

32
00:01:51,400 --> 00:01:56,300
industry to discuss about their 
Journey ideas and practices that

33
00:01:56,300 --> 00:01:59,400
we all can learn and apply to 
build a highly performing 

34
00:01:59,400 --> 00:02:03,200
technical team and to make an 
impact in your personal work. 

35
00:02:03,900 --> 00:02:12,300
So let's dive into our Journal. 
Hello again, to all my 

36
00:02:12,300 --> 00:02:14,800
listeners, welcome back to 
another episode of the 

37
00:02:14,800 --> 00:02:17,600
technology, you know, podcast. 
Thank you for spending your time

38
00:02:17,600 --> 00:02:20,000
with me today, listening to this
episode. 

39
00:02:20,400 --> 00:02:23,100
If you haven't, please subscribe
to technology, you know, on your

40
00:02:23,100 --> 00:02:26,400
favorite podcast apps and also 
follow our social media channels

41
00:02:26,400 --> 00:02:29,700
on LinkedIn, Twitter and 
Instagram, you can also make 

42
00:02:29,700 --> 00:02:32,600
some contribution to the show 
and support the creation of this

43
00:02:32,600 --> 00:02:35,700
podcast by subscribing, as a 
patron at technology. 

44
00:02:35,700 --> 00:02:39,900
No, dot f / Patron, and Help me 
to continue producing, great 

45
00:02:39,900 --> 00:02:42,900
content every week. 
For today's episode. 

46
00:02:43,000 --> 00:02:46,000
I'm happy to share my 
conversation with Marco Fila. 

47
00:02:46,600 --> 00:02:50,800
Marco is an associate professor 
at the University of Naples and 

48
00:02:50,800 --> 00:02:54,900
the author of seriously good 
software as what the title says.

49
00:02:55,100 --> 00:02:56,800
This week. 
We are going to go back to the 

50
00:02:56,808 --> 00:03:00,300
basics and discuss the important
things that define good software

51
00:03:00,300 --> 00:03:04,700
quality in this episode. 
Marco explained what he means by

52
00:03:04,700 --> 00:03:08,200
seriously good software looking 
at the software quality from 

53
00:03:08,300 --> 00:03:11,200
Different perspectives, such as 
internal versus external 

54
00:03:11,200 --> 00:03:14,600
qualities and functional versus 
non functional qualities. 

55
00:03:15,200 --> 00:03:18,300
We then dive deep into several 
of those software qualities, 

56
00:03:18,400 --> 00:03:21,500
with some practical tips on how 
software Engineers can improve 

57
00:03:21,500 --> 00:03:24,600
their craft in order to produce 
high quality software. 

58
00:03:25,100 --> 00:03:28,000
Some of those qualities that we 
discussed our time and space 

59
00:03:28,000 --> 00:03:32,100
efficiency, reliability, 
readability, reusability, and 

60
00:03:32,100 --> 00:03:36,200
thread safety towards the end. 
We also touch on the concept of 

61
00:03:36,200 --> 00:03:38,100
minimum viable code. 
Why? 

62
00:03:38,300 --> 00:03:41,200
Why it is important for us to 
have an idea of what the ideal 

63
00:03:41,200 --> 00:03:44,200
code should look like while 
still being practical in, 

64
00:03:44,200 --> 00:03:46,200
finding the right compromise to 
produce. 

65
00:03:46,200 --> 00:03:49,100
Good software. 
I enjoyed going back to the 

66
00:03:49,100 --> 00:03:52,100
basics and learning about the 
different software qualities 

67
00:03:52,100 --> 00:03:55,400
from my conversation with Marco,
and I hope that you will enjoy 

68
00:03:55,400 --> 00:03:58,300
this episode as well. 
Consider helping the show by 

69
00:03:58,300 --> 00:04:02,100
living it a rating or review on 
your podcast app and you can 

70
00:04:02,100 --> 00:04:05,500
also leave some comments on our 
social media channels, though. 

71
00:04:05,500 --> 00:04:08,100
It may seem trivial, but those 
reviews and comments. 

72
00:04:08,500 --> 00:04:11,700
One of the best ways to help me 
get this podcast to reach more 

73
00:04:11,700 --> 00:04:14,900
listeners and hopefully they can
also benefit from all the 

74
00:04:14,900 --> 00:04:18,000
contents in this podcast without
further Ado. 

75
00:04:18,000 --> 00:04:19,899
So let's get this episode 
started. 

76
00:04:22,400 --> 00:04:24,700
Hey everyone, welcome back to 
another episode of the tech 

77
00:04:24,700 --> 00:04:26,700
lead, you know. 
So today I have with me Our 

78
00:04:26,700 --> 00:04:30,600
Guest named Marco phyla, so he's
an associate professor of 

79
00:04:30,600 --> 00:04:34,000
computer science at the 
University of Naples in Italy. 

80
00:04:34,200 --> 00:04:37,200
He also does a lot of research 
in terms of computer science. 

81
00:04:37,300 --> 00:04:39,500
He's a passionate Teacher and a 
programmer. 

82
00:04:39,600 --> 00:04:42,500
He's been teaching Advanced 
programming class for the last 

83
00:04:42,500 --> 00:04:46,200
13 to 15 years and he published 
quite number books as well. 

84
00:04:46,200 --> 00:04:49,800
So one of it is seriously good 
software, a book, published by 

85
00:04:49,800 --> 00:04:52,800
Manning publisher. 
So Marco is really a pleasure to

86
00:04:52,800 --> 00:04:55,600
have you in the show today. 
Looking forward to talk about 

87
00:04:55,600 --> 00:04:58,200
all the programming stuff today.
Thank you. 

88
00:04:58,200 --> 00:05:01,200
Thank you so much for having me.
So Michael maybe in the 

89
00:05:01,200 --> 00:05:03,700
beginning, for people who don't 
know you yet. 

90
00:05:03,800 --> 00:05:06,300
Could you introduce yourself? 
Maybe telling us more about your

91
00:05:06,300 --> 00:05:08,100
career Journey, any kind of 
highlights? 

92
00:05:08,300 --> 00:05:13,100
Turning points in your career. 
Yes, so I was born hearing 

93
00:05:13,100 --> 00:05:17,600
evidence, often deeply, and I 
did most of my studies here in 

94
00:05:17,700 --> 00:05:21,000
University of South Alabama. 
That's in the South for legally.

95
00:05:21,300 --> 00:05:26,700
So I did my bachelor master and 
PhD level during my PhD and then

96
00:05:26,700 --> 00:05:30,000
move to the US and spent a 
couple of years at the 

97
00:05:30,000 --> 00:05:35,000
University of California, Santa 
Cruz, which we saw great things.

98
00:05:35,100 --> 00:05:38,100
It's a great town. 
It's a great campus in salt. 

99
00:05:38,200 --> 00:05:40,100
Oh, the forest. 
It's really beautiful. 

100
00:05:40,200 --> 00:05:44,000
I spent three to four years. 
They're finishing, my PhD. 

101
00:05:44,000 --> 00:05:48,200
And then as a post law, that was
really changing experience of 

102
00:05:48,200 --> 00:05:51,400
many powerful experience. 
Probably the most productive 

103
00:05:51,500 --> 00:05:55,100
time in my career. 
So I have a broad time born when

104
00:05:55,100 --> 00:05:58,900
I fight for a permanent position
back home ill. 

105
00:05:58,900 --> 00:06:02,700
So on back home boy and became 
an assistant. 

106
00:06:02,700 --> 00:06:04,800
Professor at University of 
Naples. 

107
00:06:05,100 --> 00:06:07,800
That's the biggest city in 
southern Italy. 

108
00:06:08,300 --> 00:06:11,000
Like to visit the u.s. 
From time to time whenever we 

109
00:06:11,000 --> 00:06:15,300
can, obviously not this latest 
two or three years, but I tried 

110
00:06:15,300 --> 00:06:18,400
to visit why recline? 
And then I was promoted as an 

111
00:06:18,400 --> 00:06:20,600
associate professor of a couple 
years ago. 

112
00:06:21,000 --> 00:06:25,300
That's pretty much my career, 
topic wise. 

113
00:06:25,300 --> 00:06:28,300
My research is actually in 
theoretical computer science. 

114
00:06:28,300 --> 00:06:33,700
So I nibble double life 
academically speaking because my

115
00:06:33,700 --> 00:06:38,100
research is reticle, but on the 
other hand University asks me. 

116
00:06:38,200 --> 00:06:41,900
Me to teach practical 
programming topics, but on the 

117
00:06:41,900 --> 00:06:45,200
other hand, I really like it. 
So loo, like both words, both 

118
00:06:45,200 --> 00:06:48,800
the theory world and the 
Practical programming world. 

119
00:06:48,800 --> 00:06:53,300
So I really enjoy teaching 
Advanced programming for 15 

120
00:06:53,300 --> 00:06:56,300
years and also a variety of 
different types of programming 

121
00:06:56,300 --> 00:07:00,700
classes, like teaching low-level
programming C, programming and 

122
00:07:00,700 --> 00:07:05,500
low level operating system, Unix
system, programming, and pulse 

123
00:07:05,500 --> 00:07:07,400
source and software engineering 
philosophy. 

124
00:07:07,400 --> 00:07:12,200
So, A broad spectrum for 
programming topics from this 

125
00:07:12,200 --> 00:07:15,200
variety of topics. 
I came up with we will probably 

126
00:07:15,200 --> 00:07:17,500
only mysterious we could talk to
Allah. 

127
00:07:17,500 --> 00:07:21,000
Thanks for sharing your journey.
So one thing I notice is that 

128
00:07:21,000 --> 00:07:24,700
you spend most of your life in 
the education industry, right? 

129
00:07:24,700 --> 00:07:27,100
So becoming a professor doing a 
lot of research and also 

130
00:07:27,100 --> 00:07:30,000
teaching a lot of students. 
So one thing that I always have 

131
00:07:30,000 --> 00:07:33,100
in mind personally is that in 
this modern era of software, 

132
00:07:33,100 --> 00:07:35,300
engineering. 
What is the actually the role of

133
00:07:35,300 --> 00:07:38,400
Education in your point of view 
because there are a lot of of 

134
00:07:38,400 --> 00:07:40,500
mixed opinions about this. 
Some people say you don't 

135
00:07:40,500 --> 00:07:43,500
actually need computer science 
to be a software engineer, but 

136
00:07:43,500 --> 00:07:45,900
there are also people saying 
that okay, you need some 

137
00:07:45,900 --> 00:07:48,300
fundamentals that you can learn 
only through studies. 

138
00:07:48,500 --> 00:07:51,300
So what's your view on this 
being in the academic for quite 

139
00:07:51,300 --> 00:07:54,200
a while? 
So of course, my view is going 

140
00:07:54,200 --> 00:07:56,100
to be quite biased. 
First. 

141
00:07:56,100 --> 00:07:59,500
My whole journey has the in 
Academia and some Educators. 

142
00:07:59,500 --> 00:08:04,000
So I'm practically bound to 
think that education is really 

143
00:08:04,000 --> 00:08:08,000
important and I do think that 
I'm aware of the discussion. 

144
00:08:08,300 --> 00:08:13,400
Also believe that there's many 
exceptions, many cases where 

145
00:08:13,700 --> 00:08:17,600
smart people have one break 
things without completing their 

146
00:08:17,600 --> 00:08:21,800
education or perhaps even 
without any formal education. 

147
00:08:22,000 --> 00:08:25,400
I think that's even rarer that 
less likely. 

148
00:08:25,400 --> 00:08:28,600
But of course, it can happen. 
On the other hand. 

149
00:08:28,700 --> 00:08:34,400
I think that regular formal 
education path is just safest 

150
00:08:34,400 --> 00:08:39,799
and most likely weeks to get 
into To the business and into 

151
00:08:39,799 --> 00:08:43,200
the industry, on progress, into 
the industry. 

152
00:08:43,200 --> 00:08:48,200
And start with the right buttons
to start with a good foundation,

153
00:08:48,500 --> 00:08:55,000
is the best way to fry in the 
industry and to be flexible and 

154
00:08:55,000 --> 00:08:58,500
ready to adapt to new and 
changing Technologies. 

155
00:08:59,100 --> 00:09:02,600
So in this sense, for example, a
lot of people also saying the 

156
00:09:02,600 --> 00:09:05,800
education curriculum, the things
that we have pot in the 

157
00:09:05,800 --> 00:09:08,100
university for example, are 
probably not so much. 

158
00:09:08,200 --> 00:09:11,800
Relevant in the modern day. 
Israel of startups are driving 

159
00:09:11,800 --> 00:09:13,800
and they use a lot of cool 
Technologies modern 

160
00:09:13,800 --> 00:09:15,700
Technologies. 
And somehow I think the 

161
00:09:15,700 --> 00:09:18,300
curriculum for some 
universities, probably do not 

162
00:09:18,300 --> 00:09:20,700
catch up with that. 
So in your view, what has 

163
00:09:20,700 --> 00:09:24,100
changed in the last few years, 
in academics, can we now rely on

164
00:09:24,100 --> 00:09:26,800
University to produce a good 
quality software, engineer, 

165
00:09:27,600 --> 00:09:29,600
WhatsApp or false, your mom? 
I will heart. 

166
00:09:29,600 --> 00:09:32,400
Before picture. 
I can talk about my own 

167
00:09:32,400 --> 00:09:35,200
experience. 
And of course, that's somewhat 

168
00:09:35,200 --> 00:09:40,300
cynical than perhaps needed to. 
Special lease or a particular 

169
00:09:40,300 --> 00:09:43,200
base newer. 
So in my old one. 

170
00:09:43,300 --> 00:09:48,700
I think we do a pretty good job 
of teaching a good mixture of 

171
00:09:48,700 --> 00:09:51,800
foundational and practical up 
today. 

172
00:09:51,800 --> 00:09:54,700
Topics. 
For example, we are in 

173
00:09:54,700 --> 00:09:58,600
partnership with local companies
and local IT company in 

174
00:09:58,600 --> 00:10:03,400
swinging, send our students to. 
So we have agreements with local

175
00:10:03,400 --> 00:10:07,500
companies or Bachelor students. 
Spend a couple of months at the 

176
00:10:07,500 --> 00:10:11,200
end of their Mega spend a couple
of months inside working there. 

177
00:10:11,600 --> 00:10:15,000
So we are in touch with their 
supervisors. 

178
00:10:15,000 --> 00:10:18,000
And we talked with them about 
the requirements. 

179
00:10:18,000 --> 00:10:22,300
What technologies they use? 
And of course, we do go all the 

180
00:10:22,300 --> 00:10:27,500
way to teach specific Frameworks
because we think that's not our 

181
00:10:27,500 --> 00:10:32,900
job, but we tried to design a 
path on educational path that 

182
00:10:32,900 --> 00:10:35,800
goes in the right direction. 
So, for instance, with the right

183
00:10:35,800 --> 00:10:38,000
programming long book to us up 
to date. 

184
00:10:38,100 --> 00:10:42,200
It with modern versions of both 
languages and modern constructs,

185
00:10:42,600 --> 00:10:44,600
for example, on usually the 
Java. 

186
00:10:44,900 --> 00:10:50,500
So I will update the reaper own 
to include the recent 

187
00:10:50,500 --> 00:10:53,000
directions. 
That Java is taking like more 

188
00:10:53,000 --> 00:10:55,600
functional stuff or the stream 
Library. 

189
00:10:55,800 --> 00:10:59,600
More concurrency. 
We introduced Android as a 

190
00:10:59,600 --> 00:11:04,600
relatively newer operating 
system and ecosystem and stuff 

191
00:11:04,600 --> 00:11:07,000
like that. 
So since you have been a 

192
00:11:07,000 --> 00:11:09,800
professor for quite a while Do 
you have any message for those 

193
00:11:09,800 --> 00:11:13,100
students who are still studying?
Maybe their undergrad or maybe 

194
00:11:13,100 --> 00:11:16,200
their post-grad? 
What message do you want to tell

195
00:11:16,200 --> 00:11:19,200
them to make use their time 
during the university? 

196
00:11:20,000 --> 00:11:24,100
Perhaps I'd like to turn it down
and to try to enjoy their time 

197
00:11:24,100 --> 00:11:29,100
there during their education to 
and door and try to enjoy even 

198
00:11:29,100 --> 00:11:33,200
the more theoretical or the 
stuff that looks not immediately

199
00:11:33,200 --> 00:11:37,300
after Coble because I think 
Adams most of it is still going 

200
00:11:37,300 --> 00:11:41,800
to be useful. 
Or at the very least so think 

201
00:11:41,800 --> 00:11:44,600
more clear need to develop 
abstraction. 

202
00:11:44,800 --> 00:11:49,200
You are feeling for obstruction 
and structure even topics like 

203
00:11:49,200 --> 00:11:52,500
physics and math. 
Even if they're not directly 

204
00:11:52,500 --> 00:11:55,500
related to your future of 
programming or software, 

205
00:11:55,500 --> 00:11:58,900
engineering job. 
They still helpful to you into 

206
00:11:58,900 --> 00:12:01,700
the right ring, working for 
right mind salt. 

207
00:12:02,500 --> 00:12:05,100
So, let's move on to your book 
itself, which is titled 

208
00:12:05,100 --> 00:12:08,000
seriously, good software, the 
term serious. 

209
00:12:08,100 --> 00:12:10,800
Lee here, I think must mean 
something, right? 

210
00:12:10,900 --> 00:12:12,900
So maybe can tell us a little 
bit more. 

211
00:12:12,900 --> 00:12:15,400
What do you mean by seriously? 
Good software. 

212
00:12:16,000 --> 00:12:19,700
So, what I mean by that even 
though the vehicle was Manning, 

213
00:12:19,700 --> 00:12:24,000
the idea I was going for more 
functionally like exercises in 

214
00:12:24,000 --> 00:12:28,500
style because many of the book 
is to present the same small 

215
00:12:28,500 --> 00:12:31,600
class. 
So in small, toy example, in 

216
00:12:31,600 --> 00:12:34,500
many different ways of 
optimizing for different 

217
00:12:34,500 --> 00:12:37,900
software qualities, maybe we've 
all talked about V. 

218
00:12:38,100 --> 00:12:40,400
Do so Manning came up with this 
cycle. 

219
00:12:40,400 --> 00:12:44,100
It's probably more flashy. 
I trust them were great. 

220
00:12:44,100 --> 00:12:46,000
We'll have a great marketing 
department. 

221
00:12:46,000 --> 00:12:51,100
So I'll Trust, they're feeling. 
So, the idea of the title and 

222
00:12:51,100 --> 00:12:55,800
the idea of the book is that 
seriously, good software is not 

223
00:12:55,800 --> 00:13:00,100
too soft for the works. 
That it's not just software that

224
00:13:00,100 --> 00:13:02,800
satisfies, its functional 
requirements. 

225
00:13:02,800 --> 00:13:05,900
So it does the right thing, but 
it also does it in the right 

226
00:13:05,900 --> 00:13:07,800
way. 
And the first, there's many 

227
00:13:07,800 --> 00:13:11,900
different. 
Ways to measure how fit and how 

228
00:13:11,900 --> 00:13:15,500
good your software is. 
For example, you have loyal 

229
00:13:15,500 --> 00:13:19,700
readability so which is a non 
functional quality because the 

230
00:13:19,700 --> 00:13:23,500
end user is not aware of whether
your software is readable or 

231
00:13:23,500 --> 00:13:27,600
not, but it's still a very 
important role because he 

232
00:13:27,600 --> 00:13:30,700
perfects maintainability Soul 
software is certainly going to 

233
00:13:30,700 --> 00:13:33,500
Hive box. 
It's certainly going to need to 

234
00:13:33,500 --> 00:13:37,900
be modified standard and for 
what you have read. 

235
00:13:38,000 --> 00:13:43,000
Probably was it's going to be 
easier or harder to fix it or 

236
00:13:43,000 --> 00:13:47,800
modify to evolve it in general. 
So that's just an example of a 

237
00:13:47,808 --> 00:13:52,100
non-functional quality that 
since often undervalued. 

238
00:13:52,500 --> 00:13:56,300
So, at least once again, from my
educational point of view, 

239
00:13:56,400 --> 00:14:00,500
mostly focus on functional or 
this medication, but I think 

240
00:14:00,500 --> 00:14:04,400
there needs to be more Focus 
both in education and in some 

241
00:14:04,400 --> 00:14:08,000
Industries or non-functional 
qualities things that are 

242
00:14:08,100 --> 00:14:13,100
Immediately visible outside 
parks are still very important 

243
00:14:13,100 --> 00:14:17,300
for the future evolution of the 
software or for its performance.

244
00:14:17,400 --> 00:14:21,900
To speaking about not just about
functional requirements and not 

245
00:14:21,900 --> 00:14:24,900
just whether it works or not, 
whether it gives you the right 

246
00:14:24,900 --> 00:14:26,500
output. 
But there are also other 

247
00:14:26,500 --> 00:14:29,000
qualities, which probably will 
discuss a little bit further, 

248
00:14:29,300 --> 00:14:32,700
but obviously, there are so many
software Engineers or maybe not 

249
00:14:32,700 --> 00:14:35,300
just software Engineers 
sometimes because of the demand 

250
00:14:35,300 --> 00:14:38,600
from either like the business 
people or from the Company to 

251
00:14:38,600 --> 00:14:41,100
Just Produce software as fast as
possible. 

252
00:14:41,400 --> 00:14:43,700
What do you think we can do 
maybe as a profession, or a 

253
00:14:43,708 --> 00:14:46,000
software engineer? 
What we should do in terms of 

254
00:14:46,000 --> 00:14:49,400
personal situation. 
If we are about to write these 

255
00:14:49,400 --> 00:14:52,500
kind of software. 
How should we convey the message

256
00:14:52,500 --> 00:14:55,200
that actually, the things that 
matters is not just about 

257
00:14:55,200 --> 00:14:57,900
whether it's working or not 
based on an input and output. 

258
00:14:58,600 --> 00:15:01,800
I think you can accrue to the 
problem at different levels. 

259
00:15:02,300 --> 00:15:07,300
For example, if you are a junior
programmer, so then maybe you 

260
00:15:07,300 --> 00:15:11,900
don't have the Our snow by. 
So you're just being a deadline 

261
00:15:11,900 --> 00:15:15,600
and you have to do your best and
you cannot move the bad one. 

262
00:15:15,600 --> 00:15:19,500
You probably cannot even argue 
for different objectives. 

263
00:15:19,500 --> 00:15:23,000
Infants requirements. 
So what can you do as a junior 

264
00:15:23,000 --> 00:15:24,700
programmer, as Junior 
programmer? 

265
00:15:25,100 --> 00:15:28,400
I think you should. 
First of all, develop an 

266
00:15:28,400 --> 00:15:33,500
awareness of the different ways.
You could be programming your 

267
00:15:33,600 --> 00:15:37,600
little function, or your little 
class, or your large subsystem. 

268
00:15:38,000 --> 00:15:40,400
And of course, this comes 
naturally with the experience, 

269
00:15:40,400 --> 00:15:43,400
but maybe my book and give a 
little out there. 

270
00:15:43,800 --> 00:15:46,900
Cultivate nice, awareness. 
That there's also some different

271
00:15:46,900 --> 00:15:50,800
ways to program. 
Even a little units, even a 

272
00:15:50,800 --> 00:15:53,300
small class. 
Sometimes even a small fortune. 

273
00:15:53,700 --> 00:15:56,900
You could do that, that five 
some different ways, and maybe 

274
00:15:56,900 --> 00:15:58,400
they'll take the same time to 
you. 

275
00:15:58,700 --> 00:16:01,900
So, it's not that you have to 
think before a month to find the

276
00:16:01,900 --> 00:16:04,500
best one. 
But if you just hold 28, these 

277
00:16:04,500 --> 00:16:07,900
awareness of the possibilities 
of the variety of ways. 

278
00:16:08,400 --> 00:16:11,300
I'm you'll get used to it. 
Then many in that short. 

279
00:16:11,300 --> 00:16:14,100
Find that you are given. 
You can do something better. 

280
00:16:14,100 --> 00:16:17,500
You can evaluate different 
possibilities in your mind 

281
00:16:17,600 --> 00:16:21,200
weekly, you might want to spend 
a lot of time going forward. 

282
00:16:21,600 --> 00:16:24,200
If you're used to it, the 
different possibilities. 

283
00:16:24,200 --> 00:16:26,600
Just come naturally to your 
mind. 

284
00:16:26,800 --> 00:16:28,800
One of those experienced 
programmers. 

285
00:16:29,100 --> 00:16:32,100
I think you're naturally going 
to that state, but Junior, 

286
00:16:32,100 --> 00:16:36,300
programmers need to actively 
pursue this mine salt. 

287
00:16:36,300 --> 00:16:40,100
I would say and then In your 
little since then in young, 

288
00:16:40,100 --> 00:16:42,900
people find that your Giver, you
can do something better. 

289
00:16:42,900 --> 00:16:45,300
You can evaluate different 
person, you know, this and pick 

290
00:16:45,300 --> 00:16:49,200
the right balance, and let me 
also add that the right balance 

291
00:16:49,200 --> 00:16:52,300
between different qualities, 
balance between performance and 

292
00:16:52,300 --> 00:16:55,300
readability, and so on, and 
robustness and zones. 

293
00:16:55,300 --> 00:16:58,200
For, and right amount of testing
Etc. 

294
00:16:58,600 --> 00:17:01,000
Describe Palace depends on the 
compost. 

295
00:17:01,500 --> 00:17:04,300
So you should be aware of the 
possibilities and the same time 

296
00:17:04,300 --> 00:17:07,099
aware of the context of your 
application. 

297
00:17:07,500 --> 00:17:11,300
And depending And on the type of
product you're making you should

298
00:17:11,400 --> 00:17:14,700
emphasize one software quality 
over the hours. 

299
00:17:15,500 --> 00:17:17,099
So speaking about software 
quality. 

300
00:17:17,099 --> 00:17:19,599
I know that you have this 
quadrant, that you mentioned in 

301
00:17:19,599 --> 00:17:22,500
the book, which is quadrant 
about internal versus external 

302
00:17:22,500 --> 00:17:25,700
qualities and also functional 
versus non functional qualities.

303
00:17:26,000 --> 00:17:27,900
If we can, you give us a little 
bit of overview. 

304
00:17:27,900 --> 00:17:30,100
What do you mean by all these 
different quadrants? 

305
00:17:30,800 --> 00:17:31,500
Yes. 
I have. 

306
00:17:31,500 --> 00:17:35,000
This tool used to distinctions, 
of course their classical 

307
00:17:35,000 --> 00:17:37,700
software engineering. 
Particle result will come up 

308
00:17:37,700 --> 00:17:39,700
with them. 
So, the first one is internal 

309
00:17:39,800 --> 00:17:43,100
versus external qualities, and 
this is the distinction between 

310
00:17:43,100 --> 00:17:46,800
qualities that the end user can 
actually see, and these are 

311
00:17:46,800 --> 00:17:51,100
called external qualities. 
So, for example, correctness, of

312
00:17:51,100 --> 00:17:53,800
course, functional correctness 
of the program does, what it's 

313
00:17:53,800 --> 00:17:55,900
supposed to do? 
It provides the right 

314
00:17:55,900 --> 00:17:58,400
functionality. 
That's an external quality. 

315
00:17:58,900 --> 00:18:02,700
And The Time Performance is 
mostly an external quality. 

316
00:18:02,700 --> 00:18:06,900
So if your program takes one 
second for 10 seconds to perform

317
00:18:06,900 --> 00:18:10,600
its actions, that's Very visible
to the user on the other hand. 

318
00:18:10,600 --> 00:18:13,500
So the distinction is not so 
clear cut because if your 

319
00:18:13,500 --> 00:18:17,400
program takes one millisecond or
two milliseconds, you can argue 

320
00:18:17,400 --> 00:18:20,300
that it's visible or not. 
Well, it depends. 

321
00:18:20,300 --> 00:18:23,700
If it's a user fees in program. 
Then it's not action to be 

322
00:18:23,708 --> 00:18:27,000
visible because it's exactly the
same for the end user. 

323
00:18:27,300 --> 00:18:29,500
On the other hand. 
If it's lost service that's 

324
00:18:29,500 --> 00:18:31,800
going to be used inside a larger
program. 

325
00:18:31,800 --> 00:18:35,200
It may be fun feasible that 
single action. 

326
00:18:35,200 --> 00:18:39,400
The one versus two millisecond 
action is To be taken one, we 

327
00:18:39,400 --> 00:18:42,700
and fights in a row, then we'll 
pour see the funds least call. 

328
00:18:42,700 --> 00:18:46,100
So that's the first distinction.
The other way to distinguish 

329
00:18:46,100 --> 00:18:49,200
software qualities is functional
versus non functional. 

330
00:18:49,500 --> 00:18:53,800
Once again, functional means 
what's the problem boss like 

331
00:18:53,800 --> 00:18:58,900
correctness was lonely remarks, 
and non-functional means how it 

332
00:18:58,900 --> 00:19:02,600
performs the past. 
For example, how much memory 

333
00:19:02,600 --> 00:19:05,600
takes? 
How much Network bandwidth it 

334
00:19:05,600 --> 00:19:07,800
requires. 
Those are non-functional, all 

335
00:19:07,800 --> 00:19:09,400
this. 
The readability, which I 

336
00:19:09,400 --> 00:19:13,300
mentioned earlier is, one of the
major non-functional qualities 

337
00:19:13,300 --> 00:19:15,200
people's. 
It's both internal and no 

338
00:19:15,200 --> 00:19:17,900
functional. 
But it's still working for 

339
00:19:17,900 --> 00:19:19,900
Concordia is always mentioned, 
are you? 

340
00:19:20,600 --> 00:19:23,600
So, when you construct this 
Squadron, right, for example, 

341
00:19:23,600 --> 00:19:26,500
you have maybe internal and 
functional and internal 

342
00:19:26,500 --> 00:19:28,300
non-functional and receive a 
sir. 

343
00:19:28,400 --> 00:19:31,700
So, in your view on this a 
there, any quadrant that is more

344
00:19:31,700 --> 00:19:34,600
important than the others, or 
how should we read this 

345
00:19:34,600 --> 00:19:36,600
quadrant? 
Because there are probably 

346
00:19:36,600 --> 00:19:38,000
different qualities that recite 
in. 

347
00:19:38,200 --> 00:19:41,600
Got the quadrant either. 
Think that in principle any 

348
00:19:41,600 --> 00:19:43,700
quadrant is more important than 
others. 

349
00:19:44,000 --> 00:19:49,200
I just think it's so useful. 
Mental tool to have also on 

350
00:19:49,200 --> 00:19:53,500
think once in some occasion and 
some Industries. 

351
00:19:53,500 --> 00:19:56,500
They perhaps could too much 
weight on some of these 

352
00:19:56,500 --> 00:20:00,600
quadrants of degree. 
They put too much weight on 

353
00:20:00,600 --> 00:20:05,000
external and functional 
qualities and too little weight 

354
00:20:05,000 --> 00:20:08,800
on the others. 
Whereas I think principal 

355
00:20:08,800 --> 00:20:12,800
they're all equally important or
if you want to be more precise 

356
00:20:12,800 --> 00:20:16,300
and more specific in different 
contexts and different 

357
00:20:16,300 --> 00:20:20,000
Industries, one for them to 
maybe more important than others

358
00:20:20,300 --> 00:20:22,900
but not in general, really 
depends on the campus. 

359
00:20:23,500 --> 00:20:26,900
So speaking about some of the 
important software qualities. 

360
00:20:27,000 --> 00:20:28,300
I know you mentioned in the 
books. 

361
00:20:28,300 --> 00:20:30,800
There are couple of them. 
In fact, you break it down in 

362
00:20:30,800 --> 00:20:33,800
different chapters in which 
there are multiple exercises. 

363
00:20:33,800 --> 00:20:35,900
For each of the chapter that 
people can do. 

364
00:20:36,100 --> 00:20:39,500
Following the toy project that 
you They're so let's go through 

365
00:20:39,500 --> 00:20:43,300
maybe one by one, starting with 
speed or time efficiency. 

366
00:20:43,500 --> 00:20:46,000
I think most people probably 
understand this, but maybe can 

367
00:20:46,000 --> 00:20:48,900
you describe further about speed
and time efficiency? 

368
00:20:49,500 --> 00:20:52,600
Yes. 
So let me just take one minute 

369
00:20:52,600 --> 00:20:55,000
to explain, again, the structure
of the book. 

370
00:20:55,200 --> 00:20:58,000
There's the single coin example,
which is a single class. 

371
00:20:58,200 --> 00:21:01,800
It's a water container example, 
we were all a bunch of water 

372
00:21:01,800 --> 00:21:04,300
containers. 
You can pour water into them and

373
00:21:04,300 --> 00:21:06,300
you can connect them. 
And that's it. 

374
00:21:06,300 --> 00:21:10,300
Very simple class, we method. 
It's the unique idea about this 

375
00:21:10,300 --> 00:21:14,100
log is to carry this example 
over and over with different 

376
00:21:14,100 --> 00:21:16,000
software qualities and optimize 
it. 

377
00:21:16,300 --> 00:21:19,000
Each final team has eight will 
be different objective. 

378
00:21:19,000 --> 00:21:22,000
And if it was for me, I would 
have done like a shorter book, 

379
00:21:22,000 --> 00:21:26,000
only one this example, the then 
my main wisely suggested to 

380
00:21:26,000 --> 00:21:29,800
Upward examples and exercises, a
the book called of need to 

381
00:21:29,800 --> 00:21:31,900
narrow the road, probably, 
right? 

382
00:21:32,100 --> 00:21:35,000
And so that's not the only 
example in book. 

383
00:21:35,100 --> 00:21:38,000
So in each chapter, I treat the 
software:. 

384
00:21:38,000 --> 00:21:42,400
I've show out that main example 
would be optimized for that 

385
00:21:42,400 --> 00:21:45,800
quality, and then I'll talk 
about some other examples. 

386
00:21:45,800 --> 00:21:48,500
And then, as you said, there's 
also exercises at the end. 

387
00:21:48,500 --> 00:21:51,500
When you can apply both 
optimizations to a different 

388
00:21:51,500 --> 00:21:54,900
example on different checked, 
some solutions at the end. 

389
00:21:54,900 --> 00:21:58,200
And so, I have a chapter for 
each 7 software fullness. 

390
00:21:58,300 --> 00:22:00,800
The first one is time, 
efficiency, as you said. 

391
00:22:00,800 --> 00:22:04,500
So time efficiency, I think is 
one of the qualities that all 

392
00:22:04,500 --> 00:22:08,300
software Engineers have in mind.
Most of the time it's not Not 

393
00:22:08,300 --> 00:22:11,500
one of those qualities where you
rehab to stress some point for 

394
00:22:11,500 --> 00:22:17,200
size, but still, I think it's a 
very nice example, on the shows.

395
00:22:17,700 --> 00:22:21,500
How sample course, theoretical 
foundations that I was talking 

396
00:22:21,500 --> 00:22:23,500
about. 
All year, can really make the 

397
00:22:23,500 --> 00:22:26,200
difference. 
So, for example, on this simple 

398
00:22:26,200 --> 00:22:28,800
water for cleaner. 
Example, Global Hub, in the 

399
00:22:28,800 --> 00:22:31,400
book, in this chapter have 
different simple. 

400
00:22:31,400 --> 00:22:33,700
Implementations with different 
data structures. 

401
00:22:34,200 --> 00:22:38,400
Represent this water containers 
with sets of lists and From 

402
00:22:38,400 --> 00:22:41,300
paired, then from different 
points of view, particularly 

403
00:22:41,300 --> 00:22:44,600
from fine performance. 
And if you check the box, you'll

404
00:22:44,600 --> 00:22:47,600
see that if you use a more 
specialized deeper structure, 

405
00:22:47,600 --> 00:22:52,200
which is based on trees, then 
you can be up to two orders of 

406
00:22:52,200 --> 00:22:56,300
magnitude speed in a typical use
case on this photo container. 

407
00:22:56,300 --> 00:23:01,000
So if you go 100 times faster, 
if you mul the right data 

408
00:23:01,000 --> 00:23:04,700
structure, I think that's a 
great point to prove the 

409
00:23:04,800 --> 00:23:07,900
usefulness or formal education 
where you learned. 

410
00:23:08,000 --> 00:23:09,700
Some specialized data 
structures. 

411
00:23:09,700 --> 00:23:12,500
It may seem to you that you're 
not going to use them. 

412
00:23:12,800 --> 00:23:16,200
But then also showing the bulk 
even such a simple example, 

413
00:23:16,500 --> 00:23:18,800
where if you look at the 
specifications of this water 

414
00:23:18,800 --> 00:23:22,400
containers, I think you would 
never guess that such a 

415
00:23:22,408 --> 00:23:25,100
specialized data structure is 
called Union. 

416
00:23:25,100 --> 00:23:27,500
Find trees. 
You would never guess that. 

417
00:23:27,500 --> 00:23:30,100
Such as data, structure will be 
so helpful. 

418
00:23:30,400 --> 00:23:32,800
In this case, speaking about 
data structure. 

419
00:23:32,800 --> 00:23:36,500
I think that this is also one of
the most fundamental theory that

420
00:23:36,500 --> 00:23:39,600
I think as a software engineer 
we need Will be exposed to as 

421
00:23:39,600 --> 00:23:42,200
many as possible. 
Obviously, not all data 

422
00:23:42,200 --> 00:23:45,200
structures are used frequently. 
So most probably people are 

423
00:23:45,200 --> 00:23:47,500
familiar with Lisette map 
dictionary. 

424
00:23:47,700 --> 00:23:50,700
But yeah, I agree that so many 
software Engineers, probably 

425
00:23:50,700 --> 00:23:53,500
rely too much on just this 
Primitives and in fact, 

426
00:23:53,500 --> 00:23:56,800
different implementation of for 
example, this also matters for 

427
00:23:56,800 --> 00:23:59,900
example, link this forces array 
list and things like that. 

428
00:24:00,100 --> 00:24:01,600
So I think. 
Yeah, thanks for emphasizing 

429
00:24:01,600 --> 00:24:04,900
that again, that actually just 
by implementing a correct data 

430
00:24:04,900 --> 00:24:06,800
structure. 
You could gain a lot of for 

431
00:24:06,800 --> 00:24:09,800
example, time if Efficiency 
right, just by changing a 

432
00:24:09,800 --> 00:24:12,100
magician. 
So moving on to the second 

433
00:24:12,100 --> 00:24:15,100
quality, which is about memory 
or space usage. 

434
00:24:15,300 --> 00:24:18,000
This is also probably something 
less emphasized probably than 

435
00:24:18,000 --> 00:24:21,000
speed but I think it's also 
important because these days 

436
00:24:21,000 --> 00:24:23,500
computer so cheap you can get a 
lot of ram. 

437
00:24:23,500 --> 00:24:26,800
You can put things on the cloud,
so stay sometimes, it's not 

438
00:24:26,800 --> 00:24:30,400
really a size, a lot, but maybe 
from your view, what should we 

439
00:24:30,400 --> 00:24:32,400
care about in terms of space and
memory? 

440
00:24:33,100 --> 00:24:36,800
Yeah, you're absolutely right. 
So space efficiency, even if 

441
00:24:36,800 --> 00:24:39,900
it's like a cars. 
In full time efficiency is 

442
00:24:39,900 --> 00:24:41,600
treated completely different 
time. 

443
00:24:41,600 --> 00:24:44,600
Efficiency is always on your 
mind towards a developer. 

444
00:24:44,600 --> 00:24:48,200
Where's space efficiency? 
It is really like a secondary or

445
00:24:48,200 --> 00:24:51,400
perhaps sometimes almost 
considered irrelevant. 

446
00:24:51,800 --> 00:24:55,900
And of course as you say we have
a lot swap cheap memory these 

447
00:24:55,900 --> 00:24:59,200
days ball Ranma and she 
persisted memory. 

448
00:24:59,600 --> 00:25:04,000
So, of course, it's correct to 
give its loss weight in General 

449
00:25:04,200 --> 00:25:06,900
on the other hand. 
Basically, there's two kinds of 

450
00:25:06,900 --> 00:25:09,800
situations for you. 
You want to check your Solis 

451
00:25:09,800 --> 00:25:12,800
Apartments your skin so you can 
see, they are quite obvious 

452
00:25:12,800 --> 00:25:15,900
which is when you have a lot of 
data or when you have a little 

453
00:25:15,900 --> 00:25:19,100
memory, and of course, there's 
still applications for you have 

454
00:25:19,100 --> 00:25:22,100
little memory. 
For example, to the extreme of 

455
00:25:22,100 --> 00:25:25,200
those would be infected 
microphones for labs. 

456
00:25:25,700 --> 00:25:28,600
So embedded, microcontrollers or
everywhere. 

457
00:25:28,600 --> 00:25:31,600
There's tens or hundreds of them
in your car. 

458
00:25:31,800 --> 00:25:35,200
There is consoled them in, your 
holster, in microwave and so on 

459
00:25:35,200 --> 00:25:39,800
and so forth is cyborg still has
made Four kilobytes of memory. 

460
00:25:40,200 --> 00:25:43,500
So if you're going to program 
for bathroom unique, have to pay

461
00:25:43,500 --> 00:25:45,900
attention to your memory 
requirements. 

462
00:25:46,200 --> 00:25:47,800
At the other end of the 
spectrum. 

463
00:25:47,800 --> 00:25:50,700
We have fun to vacations with a 
lot of data. 

464
00:25:50,800 --> 00:25:55,400
One dimension, one such fever 
will find more or less familiar 

465
00:25:55,400 --> 00:25:57,700
with which is not data 
analytics. 

466
00:25:57,700 --> 00:26:00,500
As you may be thinking. 
It's video games. 

467
00:26:01,000 --> 00:26:04,100
So video games have always had a
lot of data. 

468
00:26:04,100 --> 00:26:07,200
So it's a very competitive 
market and the big five valves 

469
00:26:07,200 --> 00:26:10,500
in so-called. 
AAA, they really try to push the

470
00:26:10,500 --> 00:26:13,400
graphics to the Limit? 
And one way to push the graphics

471
00:26:13,400 --> 00:26:16,300
to the Limit has to have a lot 
of data, a lot of flex tubes, 

472
00:26:16,300 --> 00:26:20,300
one assaults as they're called. 
You have to squeeze all that 

473
00:26:20,300 --> 00:26:25,200
information in your disk and 
then RAM and your graphic units.

474
00:26:25,600 --> 00:26:30,800
So that's another Big Industry 
where memory requirements are 

475
00:26:30,800 --> 00:26:33,900
big thing for me Falcon 
interesting that you mention 

476
00:26:33,900 --> 00:26:37,000
about video games because a lot 
of people actually think video 

477
00:26:37,000 --> 00:26:40,600
games all these Data is somehow 
do not see the importance of it,

478
00:26:40,800 --> 00:26:43,600
but actually, as a video game 
developers actually, all you 

479
00:26:43,600 --> 00:26:46,100
need to do is really optimized. 
All these regarding space 

480
00:26:46,100 --> 00:26:48,800
regarding memory and also 
bandwidth, especially if you 

481
00:26:48,800 --> 00:26:51,400
play online games because you 
don't want to get the or lack in

482
00:26:51,400 --> 00:26:53,500
between your actions. 
So again, thanks for 

483
00:26:53,500 --> 00:26:55,700
highlighting that. 
Moving on to the third quality, 

484
00:26:55,700 --> 00:26:58,400
you mention about reliability 
through monitoring. 

485
00:26:58,700 --> 00:27:01,000
So, actually, this is something 
that not so straightforward For 

486
00:27:01,000 --> 00:27:01,800
Me. 
Maybe. 

487
00:27:01,800 --> 00:27:03,300
Can you explain a little bit 
about that? 

488
00:27:04,000 --> 00:27:07,800
Yes, so I have two chapters on 
reliability and from goes on. 

489
00:27:08,000 --> 00:27:10,700
Very important qualities. 
It's so important that they 

490
00:27:10,700 --> 00:27:13,300
decided to split it into two 
flavors. 

491
00:27:13,700 --> 00:27:16,500
The second one, which maybe 
we'll talk about later is just 

492
00:27:16,500 --> 00:27:19,700
testing and ever course, is very
familiar to every one of your 

493
00:27:19,700 --> 00:27:22,300
listeners. 
The other flavor, which is 

494
00:27:22,300 --> 00:27:25,000
perhaps less familiar, is what I
call reliability, through 

495
00:27:25,000 --> 00:27:28,700
monetary know what I mean is 
it's kind of related to 

496
00:27:28,700 --> 00:27:32,900
defensive programming and it's 
also related to the well-known 

497
00:27:32,900 --> 00:27:37,100
design by contract methodology. 
So let me briefly recall what 

498
00:27:37,100 --> 00:27:40,300
I'm talking about. 
Year, the idea is to start with 

499
00:27:40,300 --> 00:27:43,100
block explicit contracts for 
your methods. 

500
00:27:43,500 --> 00:27:46,400
The whole book is focused on 
small units of product. 

501
00:27:46,400 --> 00:27:49,600
So that's why I usually talk 
about a single class or even a 

502
00:27:49,608 --> 00:27:53,400
simple method but then most of 
these Notions can be generalized

503
00:27:53,400 --> 00:27:56,900
to larger or they choose. 
Let me talk about small units. 

504
00:27:56,900 --> 00:28:01,300
So design by contract up 52. 
A simple method means having a 

505
00:28:01,300 --> 00:28:05,000
clear and explicit contract for 
that mobile phone ball contract.

506
00:28:05,000 --> 00:28:07,800
I mean, what are the assumptions
that the method makes? 

507
00:28:07,900 --> 00:28:11,900
It's on its color and what are 
the guarantees that the method 

508
00:28:11,900 --> 00:28:16,200
ensures to its caller? 
These are also all precondition 

509
00:28:16,200 --> 00:28:19,200
and possible vision of this map 
in the Java world. 

510
00:28:19,200 --> 00:28:22,400
This is well established in the 
jdk. 

511
00:28:22,400 --> 00:28:26,700
For example, if you look at the 
official documentation, jdk, you

512
00:28:26,700 --> 00:28:30,100
would see but it's expressed in 
a way, which is pretty close to 

513
00:28:30,100 --> 00:28:33,100
the design by contract 
methodology because that's the 

514
00:28:33,100 --> 00:28:34,900
most natural thing to do. 
You say, well, the method 

515
00:28:34,900 --> 00:28:37,900
expects from you. 
So for example, what kind of 

516
00:28:38,000 --> 00:28:41,300
Arguments, it's supposed to 
receive and also in what order 

517
00:28:41,300 --> 00:28:43,200
you should all sorts on 
functions. 

518
00:28:43,500 --> 00:28:46,900
Then what the method guarantees 
were the method actually does. 

519
00:28:47,400 --> 00:28:51,600
And what I need to explain in 
this chapter is how you can Bond

520
00:28:51,600 --> 00:28:54,600
put some of these contracts into
the pole. 

521
00:28:54,700 --> 00:28:58,900
Basically as assertions. 
So assertions are well-known 

522
00:28:58,900 --> 00:29:02,800
programming technique, most 
programming language up needs 

523
00:29:02,800 --> 00:29:05,700
all strapped. 
It's very similar to an, if then

524
00:29:05,700 --> 00:29:10,100
else, but with an additional 
Double ability that you can turn

525
00:29:10,100 --> 00:29:14,600
all these checks on or off at 
runtime, that will insertion is 

526
00:29:14,900 --> 00:29:18,400
if something bad happens. 
Then raise these exception. 

527
00:29:18,700 --> 00:29:22,000
But in such a way that the Run 
find, you can choose whether to 

528
00:29:22,000 --> 00:29:25,300
check these conditions during 
the execution or not. 

529
00:29:25,600 --> 00:29:29,500
The idea is that you should put 
all kind of assertions in your 

530
00:29:29,500 --> 00:29:32,400
program. 
So once again, it all depends on

531
00:29:32,400 --> 00:29:36,100
the context this applies, 
especially to safety critical 

532
00:29:36,100 --> 00:29:39,300
software working really, really 
About reliability. 

533
00:29:39,300 --> 00:29:42,300
So in addition to testing, it's 
not an alternative technique. 

534
00:29:42,700 --> 00:29:45,900
In addition to fasting, you have
these assertions at the 

535
00:29:45,900 --> 00:29:49,200
beginning of each method. 
And if you really want to push 

536
00:29:49,200 --> 00:29:53,700
it, you can also add checks at 
the end of a metal in chat that 

537
00:29:53,700 --> 00:29:56,500
the method actually did. 
What it's supposed to go. 

538
00:29:56,900 --> 00:29:59,500
That's the most extreme measure 
more than T. 

539
00:30:00,000 --> 00:30:04,400
So you poke always assertions in
and then, during development, 

540
00:30:04,600 --> 00:30:06,800
you'll leave these assertions 
form. 

541
00:30:07,000 --> 00:30:10,500
And then once, You have a good 
feeling that the from to erect 

542
00:30:10,500 --> 00:30:13,500
or a few box or left. 
Then you turn off these 

543
00:30:13,500 --> 00:30:17,600
assertions because they're going
to cost time and space and you 

544
00:30:17,600 --> 00:30:21,200
will want that simple action. 
So we found them all but they're

545
00:30:21,200 --> 00:30:23,400
still there. 
They're still there in the cold.

546
00:30:23,600 --> 00:30:28,000
So as soon as your hostel 
murderer fine, it's a new bug. 

547
00:30:28,000 --> 00:30:31,200
You can turn them on. 
Or you can instructor faster 

548
00:30:31,200 --> 00:30:34,900
more to turn these assertions on
and these assertions will give 

549
00:30:34,900 --> 00:30:37,800
you a more precise feedback on 
what kind of father. 

550
00:30:38,000 --> 00:30:41,600
Was on whether some of your cold
is all relating the people 

551
00:30:41,600 --> 00:30:46,600
vision of wild functions. 
And so on a lot of people also 

552
00:30:46,600 --> 00:30:48,600
actually approach this in a 
different ways. 

553
00:30:48,600 --> 00:30:51,500
Maybe it's related to the second
quality of reliability that you 

554
00:30:51,500 --> 00:30:53,000
measure is through testing. 
Right? 

555
00:30:53,200 --> 00:30:56,200
So all these inputs and outputs 
or some other people probably 

556
00:30:56,200 --> 00:31:00,000
put that as a test case instead 
of inside the method itself, 

557
00:31:00,000 --> 00:31:02,600
which is what you call assertion
inside the method. 

558
00:31:02,600 --> 00:31:06,000
So what's your take about this, 
which approach that you think is

559
00:31:06,000 --> 00:31:07,700
maybe more relevant in one 
context over. 

560
00:31:07,900 --> 00:31:11,100
The other, I figured complement 
each other. 

561
00:31:11,500 --> 00:31:15,900
So the Aeneid first thing is to 
actively submit inputs to your 

562
00:31:15,900 --> 00:31:19,600
program to see whether what he 
reacts. 

563
00:31:19,600 --> 00:31:23,900
According to specification 
monitoring on the other hand is 

564
00:31:23,900 --> 00:31:28,600
just and reaching your program 
with periodic checks. 

565
00:31:29,000 --> 00:31:32,800
Okay, so nearly complementary to
each other. 

566
00:31:33,000 --> 00:31:36,300
One is active positive. 
The other one is passive. 

567
00:31:36,300 --> 00:31:39,800
That's why I called monitoring. 
Both, it's like adding a monitor

568
00:31:39,800 --> 00:31:42,500
on 4 October program and it's 
not severed. 

569
00:31:42,700 --> 00:31:45,600
Unfortunately. 
It's mixed these mixed in with 

570
00:31:45,600 --> 00:31:49,000
your program, is the addition of
these assertions in your fault. 

571
00:31:49,300 --> 00:31:53,500
But ideally it would be like an 
added monitor that looks at your

572
00:31:53,500 --> 00:31:57,600
program while it's running and 
passively checks some condition.

573
00:31:57,600 --> 00:32:01,600
So one is an active process 
testing is an active process 

574
00:32:01,600 --> 00:32:04,600
whereas monitoring and 
assertions are a passive 

575
00:32:04,700 --> 00:32:08,800
observation finder process so 
they can Complement each other. 

576
00:32:08,800 --> 00:32:12,700
So, the idea would be to have 
both thanks for clarifying. 

577
00:32:12,700 --> 00:32:15,800
That so there's another thing 
that you mentioned inside, the 

578
00:32:15,800 --> 00:32:20,000
design by contract, which is the
characteristics of invariance. 

579
00:32:20,400 --> 00:32:23,400
Can you, maybe explain what is 
invariant for people who want to

580
00:32:23,400 --> 00:32:27,200
design their method properly? 
Yes, saw earlier. 

581
00:32:27,200 --> 00:32:29,900
I was talking about 
preconditions and postconditions

582
00:32:29,900 --> 00:32:31,500
and that's the contract for the 
month. 

583
00:32:31,800 --> 00:32:35,000
And then if you look for Boca 
one method and you have a whole 

584
00:32:35,000 --> 00:32:37,800
class, most of the time you can 
identify. 

585
00:32:38,000 --> 00:32:42,300
I some properties that the pass 
objects should always have. 

586
00:32:42,600 --> 00:32:45,800
So, some properties of the data 
fields of your class. 

587
00:32:46,100 --> 00:32:49,200
That should always be true. 
If you can identify such 

588
00:32:49,200 --> 00:32:51,200
Authority, that's all done 
invariance. 

589
00:32:51,400 --> 00:32:54,800
It needs something that doesn't 
change, or at least it's not 

590
00:32:54,800 --> 00:32:58,000
supposed to change. 
So, it's something that you are 

591
00:32:58,200 --> 00:33:01,900
assertions can mount for, they 
can check that this condition is

592
00:33:01,900 --> 00:33:04,900
all true. 
For example, that an integer 

593
00:33:04,900 --> 00:33:08,400
field should never be negative. 
So in Java You can have an 

594
00:33:08,400 --> 00:33:12,300
unsigned integer 5 integers 
won't always be negative. 

595
00:33:12,600 --> 00:33:16,100
But where you'll find your 
integer field should never be 

596
00:33:16,100 --> 00:33:18,600
mobile. 
That's a very simple environment

597
00:33:18,900 --> 00:33:22,200
so you can check this 
environment before and after 

598
00:33:22,200 --> 00:33:24,500
each method. 
If you really want to implement 

599
00:33:24,500 --> 00:33:27,800
more hard, monitoring or 
concrete monitoring. 

600
00:33:28,100 --> 00:33:30,600
You can check that. 
Before enough for its muffled, 

601
00:33:30,600 --> 00:33:33,000
fat field is always 
non-negative. 

602
00:33:33,200 --> 00:33:36,900
As soon as it gets - you will 
basically know who is the 

603
00:33:36,900 --> 00:33:39,500
culprit. 
The baggage because first 

604
00:33:39,500 --> 00:33:42,500
assertion with raise an 
exception and you'll mobile 

605
00:33:42,500 --> 00:33:45,800
about. 
So, moving on to reliability 

606
00:33:45,900 --> 00:33:48,300
through testing. 
So, testing is also a big Topic 

607
00:33:48,300 --> 00:33:50,000
in software engineering these 
days. 

608
00:33:50,300 --> 00:33:53,300
In fact, there are approaches, 
like test-driven development, 

609
00:33:53,300 --> 00:33:56,900
quality Engineers, quality 
assurance anything that you want

610
00:33:56,900 --> 00:34:00,000
to emphasize here in terms of 
reliability, through testing. 

611
00:34:00,700 --> 00:34:04,300
I will have much trouble because
I know it's a very big topic as 

612
00:34:04,300 --> 00:34:07,700
you saw. 
World's biggest passions and one

613
00:34:07,800 --> 00:34:10,500
Renewable student development 
and one of those. 

614
00:34:10,500 --> 00:34:13,300
Some stop to see is more 
socially in recent years. 

615
00:34:13,500 --> 00:34:17,100
Maybe this has gone too far. 
The emphasis on posting is 

616
00:34:17,100 --> 00:34:19,900
perhaps too much. 
I had to say, I don't have a 

617
00:34:19,908 --> 00:34:23,400
strong opinion about that. 
I leave me since passion to be 

618
00:34:23,400 --> 00:34:25,300
industry. 
Insiders album have the 

619
00:34:25,300 --> 00:34:29,400
Practical experience to have a 
solid opinion on this or in the 

620
00:34:29,400 --> 00:34:32,199
book. 
I'll just show a couple of basic

621
00:34:32,199 --> 00:34:38,600
techniques to resign her post 
plan for of class and Compared 

622
00:34:38,699 --> 00:34:42,100
with the other technique, which 
is the amount of infamy, to be 

623
00:34:42,100 --> 00:34:44,400
honest. 
Of course, it's a to pocket page

624
00:34:44,400 --> 00:34:46,800
for, and as you said, testing is
a big topic. 

625
00:34:46,800 --> 00:34:49,900
But Time Performance is at least
as big a phobic. 

626
00:34:49,900 --> 00:34:52,699
So all of the four weeks they've
been talking about in the book 

627
00:34:52,699 --> 00:34:56,000
are very large involve, an 
extensive literature. 

628
00:34:56,199 --> 00:35:01,500
And so, in every chapter, I had 
to do a very strict selection of

629
00:35:01,600 --> 00:35:05,000
a few interesting topics from 
each of these areas. 

630
00:35:05,300 --> 00:35:08,700
That's why at the end of the 
chapter I have A small section 

631
00:35:08,700 --> 00:35:13,100
with suggested reading with more
books and learning materials or 

632
00:35:13,100 --> 00:35:17,100
learn more about that talk. 
So maybe a little bit deeper 

633
00:35:17,100 --> 00:35:19,400
about software testing because 
there are so many software 

634
00:35:19,400 --> 00:35:22,000
Engineers, these day. 
I noticed in the industries that

635
00:35:22,000 --> 00:35:25,300
sometimes these Engineers do not
emphasize really when they start

636
00:35:25,300 --> 00:35:26,800
writing their class their 
method. 

637
00:35:26,800 --> 00:35:29,500
They don't actually think what 
kind of test cases that they 

638
00:35:29,500 --> 00:35:31,600
should do. 
What they emphasize is on. 

639
00:35:31,600 --> 00:35:34,200
Maybe the, you iPod, or maybe 
the Epi, if they are writing 

640
00:35:34,200 --> 00:35:37,100
some kind of apis. 
So in your view, what should we 

641
00:35:37,100 --> 00:35:39,600
do as sir? 
Engineer to actually inculcate 

642
00:35:39,600 --> 00:35:42,300
this practice that whenever you 
write a class. 

643
00:35:42,600 --> 00:35:45,000
Maybe you should think about 
what kind of test cases that you

644
00:35:45,000 --> 00:35:47,300
should put in mind. 
Yeah. 

645
00:35:47,400 --> 00:35:51,300
Well, of course while standard 
and the easiest way is just to 

646
00:35:51,300 --> 00:35:55,700
and horse certain holding 
practices, there's code reviews 

647
00:35:55,700 --> 00:36:00,300
and in code reviews, you can 
include review above test cases.

648
00:36:00,600 --> 00:36:05,200
So you can basically enforce 
that each class should have its 

649
00:36:05,200 --> 00:36:08,400
unit costs. 
It's appropriate to your system 

650
00:36:08,400 --> 00:36:11,000
to your kind of software on one 
review. 

651
00:36:11,000 --> 00:36:14,700
Those test cases involve code 
reviews that everyone iPhone can

652
00:36:14,700 --> 00:36:16,800
l'industrie storm. 
Right? 

653
00:36:17,000 --> 00:36:20,600
So next is actually readability.
So, I think for some people, 

654
00:36:20,700 --> 00:36:24,100
readability is a big thing for 
some, I don't really care. 

655
00:36:24,100 --> 00:36:27,100
I just want to write lines over 
lines of code as long as it 

656
00:36:27,100 --> 00:36:29,200
works. 
So what kind of balance in 

657
00:36:29,200 --> 00:36:32,400
between that you have in mind 
when you write this readability 

658
00:36:32,400 --> 00:36:35,400
chapter, it is something that 
the code that is what they say 

659
00:36:35,400 --> 00:36:37,600
is beautiful like a narrative 
when you read. 

660
00:36:37,800 --> 00:36:40,600
As a prose or it is something 
different. 

661
00:36:41,000 --> 00:36:44,300
Well, it needs basic form with 
abilities. 

662
00:36:44,300 --> 00:36:49,300
Just that your code should be 
understandable with middle F4 by

663
00:36:49,300 --> 00:36:52,900
a different person or five 
yourself, you know, when a 

664
00:36:52,900 --> 00:36:56,400
little time has passed since you
wrote it because as your 

665
00:36:56,500 --> 00:36:59,600
listeners, know, even your own 
Co-op, if you don't look at it 

666
00:36:59,600 --> 00:37:01,900
for a month and then you have to
go back to it. 

667
00:37:02,100 --> 00:37:07,300
You probably forgot the details.
And so you yourself will benefit

668
00:37:07,400 --> 00:37:10,600
if You have written it in or 
readable manner. 

669
00:37:11,000 --> 00:37:13,900
So thinking about humans reading
it or not. 

670
00:37:13,900 --> 00:37:17,200
Only about the compiler reading,
that's the basic idea. 

671
00:37:17,500 --> 00:37:20,900
As I was saying in the beginning
of YouTube you writing more 

672
00:37:20,900 --> 00:37:24,900
readable coal will obviously 
decrease the efforts to 

673
00:37:25,000 --> 00:37:27,600
understand it in the future. 
That's the immediate 

674
00:37:27,600 --> 00:37:30,100
consequence. 
But the most important found 

675
00:37:30,100 --> 00:37:33,100
some points that the long-term 
or medium and long-term 

676
00:37:33,100 --> 00:37:37,100
consequences that are soft for 
be caps, more maintainable in 

677
00:37:37,100 --> 00:37:39,500
the gaps. 
Circus for policy, defunct 

678
00:37:39,500 --> 00:37:44,400
easier to fix them, and 
especially becomes easier to fix

679
00:37:44,400 --> 00:37:47,800
it in a way, that doesn't create
new problems elsewhere. 

680
00:37:48,100 --> 00:37:51,300
Because you actually understand 
what was intended in that poll. 

681
00:37:51,300 --> 00:37:56,000
So then if there's a bottle, you
can fix it with less fear of 

682
00:37:56,000 --> 00:37:57,900
creating new problems, all 
square. 

683
00:37:58,300 --> 00:38:01,300
Those great resources are there 
for readability, which I like 

684
00:38:01,300 --> 00:38:06,000
this, this chapter of on the 
most important ones to plastic 

685
00:38:06,000 --> 00:38:09,200
books, are clean cold. 
Bye Morgan and cold. 

686
00:38:09,200 --> 00:38:12,700
Complete both where my reference
new saw him. 

687
00:38:12,700 --> 00:38:15,100
There's a lot of great 
information there. 

688
00:38:15,400 --> 00:38:18,300
Well, let me measure also 
support classic which is related

689
00:38:18,300 --> 00:38:20,900
to mutability misuse their 
effect for info. 

690
00:38:21,500 --> 00:38:24,500
So in this chapter is summarized
some of the most important 

691
00:38:24,500 --> 00:38:29,500
guidelines and especially adding
my for example or the reference 

692
00:38:29,500 --> 00:38:32,300
because a lot, nice old war 
brought back to the same 

693
00:38:32,300 --> 00:38:35,800
example, so you can more easily 
appreciate the difference 

694
00:38:35,800 --> 00:38:40,100
between different objectives 
that Dots between different form

695
00:38:40,100 --> 00:38:43,200
the objectives. 
So I think one thing I notice in

696
00:38:43,200 --> 00:38:45,600
my experience you will know 
about readability. 

697
00:38:45,600 --> 00:38:48,400
Once you look back to your code 
and read it. 

698
00:38:48,500 --> 00:38:50,600
So, you will understand. 
Okay, is this code? 

699
00:38:50,600 --> 00:38:53,700
Requiring, a lot of a mental 
effort to actually understand 

700
00:38:53,700 --> 00:38:56,200
what it does. 
Sometimes also method that has a

701
00:38:56,200 --> 00:38:59,000
long number of lines at the 
answers, are not so readable 

702
00:38:59,000 --> 00:39:01,600
because you need a lot of things
to put inside your contacts. 

703
00:39:01,700 --> 00:39:04,900
Some of the guidelines are 
really easy to learn like 

704
00:39:04,900 --> 00:39:07,600
variable names, right? 
Needs to borrow. 

705
00:39:07,700 --> 00:39:10,100
Balls two functions, he be 
functions short. 

706
00:39:10,100 --> 00:39:14,700
As were say, it just takes only 
pull beaten some offer to apply 

707
00:39:14,700 --> 00:39:17,400
them. 
But the rules are very good and 

708
00:39:17,400 --> 00:39:20,800
I was at that maybe expertise of
using the ideas because some of 

709
00:39:20,800 --> 00:39:23,400
these ideas, actually allow you 
to do some kind of shortcut 

710
00:39:23,400 --> 00:39:25,200
where you can change your code 
instantly. 

711
00:39:25,600 --> 00:39:30,000
So related, maybe to readability
is the reusability concept in a 

712
00:39:30,008 --> 00:39:32,700
sense that you want your 
software, your function, your 

713
00:39:32,700 --> 00:39:35,400
method to be reusable, but I 
understand as well. 

714
00:39:35,400 --> 00:39:37,600
There are balanced here, like 
you probably do. 

715
00:39:37,700 --> 00:39:39,500
I want everything to be 
reusable. 

716
00:39:39,600 --> 00:39:41,300
Otherwise, maybe you're 
suffering becomes too 

717
00:39:41,300 --> 00:39:43,600
complicated. 
So what's your view on this 

718
00:39:43,600 --> 00:39:47,700
reusability? 
Yes, so reusability and used to 

719
00:39:47,700 --> 00:39:51,500
be a big selling point for 
object-oriented languages when 

720
00:39:51,500 --> 00:39:55,700
they came out but these days 
it's a lot less. 

721
00:39:55,800 --> 00:39:58,800
And for size. 
I think it probably was over a 

722
00:39:58,800 --> 00:40:02,300
whole size of the beginning 
because as you said, there's a 

723
00:40:02,300 --> 00:40:06,500
cost Heaton, your food more 
General, it becomes more 

724
00:40:06,500 --> 00:40:10,300
complex. 
More abstract and probably less 

725
00:40:10,300 --> 00:40:14,800
efficient and less readable, but
you get that single benefit or 

726
00:40:14,800 --> 00:40:18,400
heat being usable as you were 
saying, you really have to find 

727
00:40:18,400 --> 00:40:21,900
the right balance. 
So I think in general you want 

728
00:40:21,900 --> 00:40:27,000
most of your colds to be optic 
chance to see big, not reusable.

729
00:40:27,500 --> 00:40:30,800
You're going to have a few 
reusable parts and most of the 

730
00:40:30,800 --> 00:40:34,900
polls confirm to be abhorrent, 
fastened, and not reusable. 

731
00:40:34,900 --> 00:40:37,600
And this is also connected to 
the issue of Frameworks. 

732
00:40:38,200 --> 00:40:41,700
So Frameworks that prologue 
where tend to be very general, 

733
00:40:41,700 --> 00:40:45,400
like the framework. 
Like Sting boss, big Frameworks,

734
00:40:45,600 --> 00:40:48,900
why we are like the best part of
you zombie. 

735
00:40:49,400 --> 00:40:53,500
They managed to give General 
Services, the very successful 

736
00:40:53,500 --> 00:40:55,500
solo. 
You must have done something 

737
00:40:55,700 --> 00:40:59,400
pick the rights on all problems 
of eating and make it into 

738
00:40:59,400 --> 00:41:04,100
useful General framework, but on
the other hand, if you rely too 

739
00:41:04,100 --> 00:41:08,700
much on these Frameworks, or you
can try to avoid, Hope to 

740
00:41:08,700 --> 00:41:12,000
General. 
You'll end up with I caught 

741
00:41:12,000 --> 00:41:16,800
these, that's too abstract, and 
probably less salt in my store 

742
00:41:16,800 --> 00:41:19,900
course, probably the last 
quality that we are going to go 

743
00:41:19,900 --> 00:41:23,900
through his about thread safety.
I think this is also one source 

744
00:41:23,900 --> 00:41:27,600
of sometimes flakiness, or race 
condition in some of the box 

745
00:41:27,600 --> 00:41:30,000
that are popular whenever in 
your career. 

746
00:41:30,000 --> 00:41:32,100
Are you find software that 
sometimes works sometimes 

747
00:41:32,100 --> 00:41:34,400
doesn't work probably is related
to try safety. 

748
00:41:34,600 --> 00:41:37,400
So what's your view on this? 
What should an engineer be 

749
00:41:37,400 --> 00:41:39,300
mindful? 
All about whenever they write 

750
00:41:39,300 --> 00:41:43,700
software about thread safety. 
Yes, but for suggestion I make 

751
00:41:43,800 --> 00:41:46,200
in the book, more exciting for 
me. 

752
00:41:46,200 --> 00:41:50,400
Interesting to your businesses 
to establish a clear. 

753
00:41:50,400 --> 00:41:53,300
Concurrency policy for your 
voice. 

754
00:41:53,600 --> 00:41:57,200
Once again, a lot to talk about 
small units of hold because 

755
00:41:57,200 --> 00:41:59,800
that's easier to explain to 
understand. 

756
00:42:00,100 --> 00:42:03,000
You should generalize to larger 
systems, but take a single 

757
00:42:03,000 --> 00:42:05,100
place. 
If you know that your fastest 

758
00:42:05,100 --> 00:42:07,600
won't to be useful. 
I reviewed by different threads.

759
00:42:08,000 --> 00:42:13,300
So, even before rushing to put 
in new taxes on synchronization 

760
00:42:13,300 --> 00:42:16,900
Primitives here and more you 
should first establish a clear 

761
00:42:16,900 --> 00:42:19,600
from currency policy and what s 
currency policy. 

762
00:42:19,800 --> 00:42:24,100
It's a rule, which says, which 
operation on this class can be 

763
00:42:24,100 --> 00:42:27,800
performed in parallel, with no 
synchronization, because they 

764
00:42:27,800 --> 00:42:32,300
affect different data and which 
operations installed need to be 

765
00:42:32,300 --> 00:42:35,000
serialized. 
So need to be synchronized 

766
00:42:35,000 --> 00:42:37,500
because they may affect the same
level. 

767
00:42:37,900 --> 00:42:41,200
So think about this for a 
second, for some positives going

768
00:42:41,200 --> 00:42:44,300
to be obvious because objects 
will be unrelated. 

769
00:42:44,300 --> 00:42:47,700
So everything that you do on 
different objects and going 

770
00:42:47,700 --> 00:42:49,200
parallel and everything you'd 
want. 

771
00:42:49,200 --> 00:42:53,400
The same object must be Cielos. 
That's a very fun case, but in 

772
00:42:53,400 --> 00:42:57,500
other cases, including the 
simple, the Apparently simple 

773
00:42:57,500 --> 00:43:01,000
water container example, objects
can be connected with each 

774
00:43:01,000 --> 00:43:03,500
other. 
They can form like, route, the 

775
00:43:03,500 --> 00:43:06,900
whole pointers to each other and
then the situation becomes a lot

776
00:43:06,900 --> 00:43:09,500
more complicated. 
We have to think about different

777
00:43:09,500 --> 00:43:13,500
currency policy and only, then 
you can check whether the 

778
00:43:13,500 --> 00:43:17,600
co-parents policy that you were 
aiming at is actually clementa 

779
00:43:17,600 --> 00:43:20,800
below and how to implement those
and so on and so forth. 

780
00:43:21,200 --> 00:43:24,600
This of course, is for those 
unfortunate cases where you are 

781
00:43:24,600 --> 00:43:28,600
programming and low level on. 
You actually have to worry about

782
00:43:28,600 --> 00:43:30,900
synchronization and fed safety 
or sale. 

783
00:43:31,300 --> 00:43:35,400
On the other hand, a much more 
General suggestion is to avoid 

784
00:43:35,400 --> 00:43:37,700
all these problems just use. 
Hi. 

785
00:43:37,900 --> 00:43:41,800
Higher level, concurrency. 
Primitives that your language or

786
00:43:41,800 --> 00:43:43,700
your framework is going to 
offer. 

787
00:43:44,000 --> 00:43:46,800
So first of all, we should try 
to avoid all that mess on your 

788
00:43:46,800 --> 00:43:50,600
that synchronization messenger 
is condition risks and just use 

789
00:43:50,600 --> 00:43:53,100
what's gifting in your language 
or Frameworks. 

790
00:43:53,300 --> 00:43:56,200
For example, in Java. 
You have a thread safe 

791
00:43:56,200 --> 00:43:59,100
collections. 
So both collections take care of

792
00:43:59,100 --> 00:44:01,200
something ization. 
You don't have to worry about 

793
00:44:01,200 --> 00:44:06,100
that about that in Java and what
Harold screams since Java 8. 

794
00:44:06,400 --> 00:44:09,900
So our will stinks. 
Higher level kind of Elections 

795
00:44:09,900 --> 00:44:12,600
where you can perform. 
For example, with a single call 

796
00:44:12,600 --> 00:44:15,800
in the standard Library. 
You have parallel sorting 

797
00:44:15,800 --> 00:44:18,500
algorithm on the list. 
So you don't have to hold 

798
00:44:18,500 --> 00:44:20,700
anything just from this oral 
sort. 

799
00:44:21,100 --> 00:44:24,700
So, in other words, knowing your
standard Library know, your 

800
00:44:24,700 --> 00:44:28,600
frame were on, try to stay on 
style, salsa Bowl in the 

801
00:44:28,607 --> 00:44:31,600
abstraction. 
So that always problems have 

802
00:44:31,600 --> 00:44:35,700
need taken care for you. 
I have been posted and you run a

803
00:44:35,707 --> 00:44:37,500
lot more fewer risks in this 
form. 

804
00:44:38,200 --> 00:44:41,300
There's also another convention 
about this which I wrapped in 

805
00:44:41,300 --> 00:44:45,200
some books as well, which is 
related to immutability concept.

806
00:44:45,200 --> 00:44:48,100
And that's also one of the big 
reason why a lot of people 

807
00:44:48,100 --> 00:44:50,400
actually suggesting about 
functional programming. 

808
00:44:50,600 --> 00:44:53,400
We're actually have a lot of 
immutability embedded inside the

809
00:44:53,400 --> 00:44:56,800
construct, so that you can avoid
these concurrency problem. 

810
00:44:56,900 --> 00:44:59,500
Any thought from you about this.
Yeah. 

811
00:44:59,600 --> 00:45:03,700
So having objects that you can 
modify once you create it and 

812
00:45:03,700 --> 00:45:07,600
that's what you need to be easy 
means thoughts or a power pole, 

813
00:45:07,600 --> 00:45:10,000
too. 
All to avoid great conditions 

814
00:45:10,000 --> 00:45:13,100
for about a lot of the nasty box
of comparison. 

815
00:45:13,100 --> 00:45:15,900
See I think that's a great 
direction. 

816
00:45:16,200 --> 00:45:20,300
For example, once again in Java,
the Java screens work, best with

817
00:45:20,300 --> 00:45:22,900
the mutable data. 
On the other hand. 

818
00:45:23,000 --> 00:45:28,000
You may have performance costs 
associated with the sample data 

819
00:45:28,000 --> 00:45:31,600
and because sometimes the 
context of the application 

820
00:45:31,700 --> 00:45:36,100
really requires you to change 
state of some objects, but if 

821
00:45:36,100 --> 00:45:39,000
you're mentally into an 
immutable, Global system. 

822
00:45:39,000 --> 00:45:40,500
Every time you want to change 
something. 

823
00:45:40,500 --> 00:45:42,100
You just have to create a new 
object. 

824
00:45:42,100 --> 00:45:45,300
That looks pretty much like the 
old one except for the change. 

825
00:45:45,600 --> 00:45:49,100
And of course this has a 
performance cost over the 

826
00:45:49,100 --> 00:45:53,100
standard imperative way, which 
is to change that think on the 

827
00:45:53,100 --> 00:45:55,700
fly. 
So you have to balance that so 

828
00:45:55,700 --> 00:46:00,100
probably eat you have a lot of 
fun parent C or if you have a 

829
00:46:00,107 --> 00:46:03,700
little concurrency, but you are 
in a really safe to greet people

830
00:46:03,700 --> 00:46:07,800
occasion, where a fog could have
seniors big fonts. 

831
00:46:08,000 --> 00:46:12,200
On his own, he 30 anomic funds 
again for money pain s is or 

832
00:46:12,300 --> 00:46:15,400
perhaps Health consequences. 
If you're working the hub for 

833
00:46:15,400 --> 00:46:19,200
technology business. 
Then glow within it ability. 

834
00:46:19,500 --> 00:46:24,400
Only a little performance fast 
modern about efficient immutable

835
00:46:24,400 --> 00:46:29,700
collections, immutable patterns 
and would be safer my last 

836
00:46:29,700 --> 00:46:33,300
question on this topic, right? 
So as I'm relating my experience

837
00:46:33,300 --> 00:46:36,000
working in startups, and 
especially we know this concept 

838
00:46:36,000 --> 00:46:39,700
about MVP minimum viable. 
Product is there such thing as a

839
00:46:39,700 --> 00:46:43,300
minimum viable code, where you 
have enough quality in place so 

840
00:46:43,300 --> 00:46:46,000
that you don't over analyze and 
make your code. 

841
00:46:46,000 --> 00:46:48,100
Perfect. 
So to speak, is there such thing

842
00:46:48,100 --> 00:46:50,700
in your view about minimum 
viable code. 

843
00:46:51,300 --> 00:46:54,600
Yeah, absolutely. 
So all of this, everything with 

844
00:46:54,600 --> 00:46:57,300
this fast, both are mental 
problems. 

845
00:46:57,300 --> 00:46:59,600
Those our aspirations. 
Those are AIDS. 

846
00:46:59,900 --> 00:47:04,600
You should be your goals. 
So I think it's wise to a more 

847
00:47:04,600 --> 00:47:07,800
to have a desire for the perfect
hole. 

848
00:47:08,400 --> 00:47:11,800
But on the other hand, have a 
rough idea of what that ideal 

849
00:47:11,800 --> 00:47:15,300
code would look like, that's a 
poster, but then, of course, 

850
00:47:15,300 --> 00:47:18,400
distractible matters, there's 
deadlines, there's customers. 

851
00:47:18,400 --> 00:47:21,600
So, of course, you have to 
compromise. 

852
00:47:22,100 --> 00:47:26,500
I think the more you gain 
experience be easier for you to 

853
00:47:26,500 --> 00:47:29,300
find the right compromise. 
As I was saying at the 

854
00:47:29,300 --> 00:47:32,500
beginning. 
I have just 24 hours to deliver 

855
00:47:32,500 --> 00:47:35,000
something. 
What's the best trade? 

856
00:47:35,000 --> 00:47:39,500
All I can achieve in 24 hours, 
where And any experienced 

857
00:47:39,500 --> 00:47:42,100
programmer in 24-hour levels, 
right? 

858
00:47:42,100 --> 00:47:45,800
Whatever hands I'm in a rush. 
So, just write whatever comes to

859
00:47:45,800 --> 00:47:49,400
my mind. 
If the works, I'll be done more 

860
00:47:49,400 --> 00:47:51,900
experience and more aware 
programmer. 

861
00:47:51,900 --> 00:47:56,100
If he or she has a little time 
would still consider different 

862
00:47:56,100 --> 00:47:59,800
options and go with the good 
enough solution. 

863
00:48:00,200 --> 00:48:04,900
And even at the end of this 
short time, 24 hours, he or she 

864
00:48:05,000 --> 00:48:08,300
will know what are the pitfalls 
with are the limitations of Of 

865
00:48:08,300 --> 00:48:10,500
these or her coat. 
That's great. 

866
00:48:10,500 --> 00:48:12,900
I mean, it's great to strive for
a compromise. 

867
00:48:12,900 --> 00:48:15,700
But at the very least, you 
should be aware of how could be 

868
00:48:15,700 --> 00:48:16,900
fool. 
You didn't have time. 

869
00:48:16,900 --> 00:48:20,100
That's too bad. 
That's love but it's a great 

870
00:48:20,100 --> 00:48:23,100
achievement. 
If you'll go with your wearable 

871
00:48:23,100 --> 00:48:25,900
compromise, your thoughts on how
you would improve it. 

872
00:48:26,200 --> 00:48:29,700
If your boss or your customer 
gives you an extra week. 

873
00:48:30,100 --> 00:48:32,400
You already know how to make it 
better. 

874
00:48:33,000 --> 00:48:35,800
So thanks for the tips actually,
darling, the pitfalls of the 

875
00:48:35,800 --> 00:48:38,700
work that you just did. 
So I think it's also Important 

876
00:48:38,700 --> 00:48:41,700
thing especially creating an 
awareness of that pit for, as 

877
00:48:41,700 --> 00:48:44,100
well, for other people because 
sometimes your code is taken 

878
00:48:44,100 --> 00:48:47,400
over by others. 
So Marco has been a pleasure to 

879
00:48:47,400 --> 00:48:49,100
talk to you about all this 
software qualities. 

880
00:48:49,300 --> 00:48:50,400
I really learned a lot of 
things. 

881
00:48:50,400 --> 00:48:53,600
Myself, the fundamentals of 
software engineering, but before

882
00:48:53,600 --> 00:48:55,200
I let you go, normally, I have 
this one. 

883
00:48:55,200 --> 00:48:58,500
Last question that I asked for 
all my guests, which is to share

884
00:48:58,500 --> 00:49:00,600
about three technical leadership
wisdom. 

885
00:49:01,000 --> 00:49:03,600
So Michael, would you be able to
share your tree technical 

886
00:49:03,600 --> 00:49:07,600
leadership system? 
Yes, I will as my book. 

887
00:49:07,600 --> 00:49:09,700
We Are. 
Intended for a beginner to 

888
00:49:09,700 --> 00:49:12,500
intermediate programmer. 
So they're going to be quite 

889
00:49:12,500 --> 00:49:15,800
natural. 
What's the probability fact 

890
00:49:15,800 --> 00:49:17,800
business? 
The first one is a double 

891
00:49:17,900 --> 00:49:21,800
suggestion, which is possible. 
Try to read the great call. 

892
00:49:22,200 --> 00:49:24,300
So go out and look for grade 
Coke. 

893
00:49:24,300 --> 00:49:27,300
It's very easy to find. 
The first place where you can 

894
00:49:27,300 --> 00:49:30,300
find. 
Great, bold is in your standard 

895
00:49:30,300 --> 00:49:32,500
Library. 
So meaning, whatever your 

896
00:49:32,500 --> 00:49:35,700
favorite languages, perhaps you 
can stop from the things that 

897
00:49:35,700 --> 00:49:38,000
you use the most in your stand 
of laboum. 

898
00:49:38,200 --> 00:49:40,200
Maybe you use lists all the 
time. 

899
00:49:40,400 --> 00:49:44,000
Maybe you probably use strength 
all the time, bowing to the 

900
00:49:44,000 --> 00:49:47,700
standard library, and check out 
how they are implemented behind 

901
00:49:47,700 --> 00:49:50,800
the scenes. 
Let's connect it to in the 70s. 

902
00:49:50,800 --> 00:49:54,400
So if you do this, not only you 
will read with followed by the 

903
00:49:54,400 --> 00:49:56,900
same time. 
You will be looking behind the 

904
00:49:56,908 --> 00:50:01,000
scenes of the technology that 
you're using as another example,

905
00:50:01,100 --> 00:50:05,600
perhaps Europe item person. 
Check out how python lists are 

906
00:50:05,600 --> 00:50:08,000
implemented, because python is 
very high. 

907
00:50:08,100 --> 00:50:11,500
High level language beeps. 
Hello our I love of build steam 

908
00:50:11,500 --> 00:50:15,500
cleaner structures, but if you 
actually go and check out their 

909
00:50:15,500 --> 00:50:18,600
implemented you're going to use 
it with more awareness. 

910
00:50:18,900 --> 00:50:22,100
Once again, I want to emphasize 
awareness very much. 

911
00:50:22,500 --> 00:50:25,500
You will ensure better quality 
software if you know what's 

912
00:50:25,500 --> 00:50:27,600
going on. 
Planted, finally, third and 

913
00:50:27,600 --> 00:50:30,300
final tip. 
This is connected to find 

914
00:50:30,300 --> 00:50:32,400
performance. 
We were talking about or more 

915
00:50:32,700 --> 00:50:37,800
which is value your users time, 
especially if you're writing 

916
00:50:37,800 --> 00:50:39,900
use. 
Facing software, multiple 

917
00:50:40,100 --> 00:50:44,100
occasions or even web 
applications your user time. 

918
00:50:44,100 --> 00:50:47,800
This extremely important like 
I'm on Twitter and some time 

919
00:50:47,800 --> 00:50:49,700
ago. 
I was reading someone 

920
00:50:49,700 --> 00:50:51,600
complaining of em, simple think 
that? 

921
00:50:51,600 --> 00:50:56,400
In Windows if you right click on
a file, sometimes it takes 1 

922
00:50:56,400 --> 00:51:00,100
second or maybe even a little 
more than one cell phone to get 

923
00:51:00,100 --> 00:51:04,100
that little menu and I think he 
was absolutely right. 

924
00:51:04,100 --> 00:51:05,900
It's frenzy. 
It's a little delay. 

925
00:51:05,900 --> 00:51:08,000
The right people will say, it's 
just a second. 

926
00:51:08,100 --> 00:51:11,100
And I totally disagree with - 
it's absolutely right to 

927
00:51:11,100 --> 00:51:20,000
complain that 1844 GHz machine 
with 16 gigabytes of RAM of 

928
00:51:20,000 --> 00:51:23,600
human user should wait one 
second to get that menu. 

929
00:51:23,800 --> 00:51:25,600
Perhaps things having front 
since then. 

930
00:51:25,600 --> 00:51:29,000
I don't want to be a fair to 
Windows, but I witnessed this 

931
00:51:29,000 --> 00:51:33,400
myself for a couple of times. 
So really valuable use of time 

932
00:51:33,400 --> 00:51:36,600
which means pay attention to a 
formal. 

933
00:51:37,500 --> 00:51:39,300
Well, yeah. 
So I could relate to that. 

934
00:51:39,300 --> 00:51:42,300
So, thanks for reminding us 
about valuing our user side 

935
00:51:42,300 --> 00:51:43,700
because sometimes software 
Engineers. 

936
00:51:43,700 --> 00:51:45,500
We just rushed finishing, the 
requirements. 

937
00:51:45,500 --> 00:51:47,800
That's it. 
Like we don't really actually 

938
00:51:47,800 --> 00:51:49,800
use the system. 
So that's also another thing, 

939
00:51:49,800 --> 00:51:51,500
right? 
We don't use our system. 

940
00:51:51,500 --> 00:51:54,000
Definitely we don't value the 
time because you never use it. 

941
00:51:54,200 --> 00:51:56,400
Thanks again, Marco for this 
Pleasant conversation. 

942
00:51:56,700 --> 00:51:59,800
If people wants to connect with 
you, maybe talk more about these

943
00:51:59,800 --> 00:52:01,600
stuffs online. 
Where can they find you? 

944
00:52:02,400 --> 00:52:04,200
I think Twitter is the best 
Channel. 

945
00:52:04,200 --> 00:52:06,600
Maybe I can share them for it on
the website. 

946
00:52:07,200 --> 00:52:09,600
Okay, I will do. 
So, so, thanks again, Michael. 

947
00:52:09,800 --> 00:52:11,900
Thanks for attending this 
conversation with me. 

948
00:52:12,500 --> 00:52:17,900
Thank you very much. 
Thank you for listening to this 

949
00:52:17,900 --> 00:52:20,500
episode and for staying right 
till the end. 

950
00:52:20,700 --> 00:52:23,600
If you highly enjoyed, please 
share it with your friends and 

951
00:52:23,600 --> 00:52:27,000
colleagues who you think would 
also benefit from listening to 

952
00:52:27,000 --> 00:52:29,200
this episode. 
And if you're new to the 

953
00:52:29,200 --> 00:52:32,600
podcast, make sure to subscribe 
and leave me your valuable 

954
00:52:32,600 --> 00:52:36,000
review and feedback. 
It really, really helps me a lot

955
00:52:36,000 --> 00:52:38,500
in order to grow these podcasts 
better. 

956
00:52:39,000 --> 00:52:42,300
You can also find the full show 
notes of this conversation on 

957
00:52:42,300 --> 00:52:45,600
the episode page at technically 
journal, the death website. 

958
00:52:45,800 --> 00:52:49,000
Cluding, the full transcript, 
interesting quotes and links to 

959
00:52:49,000 --> 00:52:52,000
the resources and mentions from 
the conversation. 

960
00:52:52,500 --> 00:52:55,300
And lastly make sure to 
subscribe to the show's mailing 

961
00:52:55,300 --> 00:52:58,200
list on technology. 
No, the death to get notified 

962
00:52:58,200 --> 00:53:01,300
for any future episodes. 
Stay tuned for the next 

963
00:53:01,300 --> 00:53:03,800
technique Journal episode. 
And until then. 

964
00:53:04,000 --> 00:53:04,600
Goodbye.
